Loading...
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 | /* * Copyright (c) 2022 Apple Inc. All rights reserved. * * @APPLE_LICENSE_HEADER_START@ * * This file contains Original Code and/or Modifications of Original Code * as defined in and that are subject to the Apple Public Source License * Version 2.0 (the 'License'). You may not use this file except in * compliance with the License. Please obtain a copy of the License at * http://www.opensource.apple.com/apsl/ and read it before using this * file. * * The Original Code and all software distributed under the License are * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. * Please see the License for the specific language governing rights and * limitations under the License. * * @APPLE_LICENSE_HEADER_END@ */ #ifndef __DWARF2_H__ #define __DWARF2_H__ /* These constants were taken from version 3 of the DWARF standard, which is Copyright (c) 2005 Free Standards Group, and Copyright (c) 1992, 1993 UNIX International, Inc. */ /* This is not a complete list. */ enum { DW_TAG_compile_unit = 17, DW_TAG_partial_unit = 60 }; /* This is not a complete list. */ enum { DW_AT_sibling = 1, DW_AT_name = 3, DW_AT_stmt_list = 16, DW_AT_comp_dir = 27 }; enum { DW_FORM_addr = 0x01, DW_FORM_block2 = 0x03, DW_FORM_block4 = 0x04, DW_FORM_data2 = 0x05, DW_FORM_data4 = 0x06, DW_FORM_data8 = 0x07, DW_FORM_string = 0x08, DW_FORM_block = 0x09, DW_FORM_block1 = 0x0A, DW_FORM_data1 = 0x0B, DW_FORM_flag = 0x0C, DW_FORM_sdata = 0x0D, DW_FORM_strp = 0x0E, DW_FORM_udata = 0x0F, DW_FORM_ref_addr = 0x10, DW_FORM_ref1 = 0x11, DW_FORM_ref2 = 0x12, DW_FORM_ref4 = 0x13, DW_FORM_ref8 = 0x14, DW_FORM_ref_udata = 0x15, DW_FORM_indirect = 0x16, // new in Dwarf 4 DW_FORM_sec_offset = 0x17, DW_FORM_exprloc = 0x18, DW_FORM_flag_present = 0x19, // new in Dwarf 5 DW_FORM_strx = 0x1A, DW_FORM_addrx = 0x1B, DW_FORM_ref_sup4 = 0x1C, DW_FORM_strp_sup = 0x1D, DW_FORM_data16 = 0x1E, DW_FORM_line_strp = 0x1F, DW_FORM_ref_sig8 = 0x20, DW_FORM_implicit_const = 0x21, DW_FORM_loclistx = 0x22, DW_FORM_rnglistx = 0x23, DW_FORM_ref_sup8 = 0x24, DW_FORM_strx1 = 0x25, DW_FORM_strx2 = 0x26, DW_FORM_strx3 = 0x27, DW_FORM_strx4 = 0x28, DW_FORM_addrx1 = 0x29, DW_FORM_addrx2 = 0x2A, DW_FORM_addrx3 = 0x2B, DW_FORM_addrx4 = 0x2C, }; enum { DW_UT_compile = 0x01 }; enum { DW_LNS_extended_op = 0, DW_LNS_copy, DW_LNS_advance_pc, DW_LNS_advance_line, DW_LNS_set_file, DW_LNS_set_column, DW_LNS_negate_stmt, DW_LNS_set_basic_block, DW_LNS_const_add_pc, DW_LNS_fixed_advance_pc, DW_LNS_set_prologue_end, DW_LNS_set_epilogue_begin, DW_LNS_set_isa }; enum { DW_LNE_end_sequence = 1, DW_LNE_set_address, DW_LNE_define_file }; // dwarf unwind instructions enum { DW_CFA_nop = 0x0, DW_CFA_set_loc = 0x1, DW_CFA_advance_loc1 = 0x2, DW_CFA_advance_loc2 = 0x3, DW_CFA_advance_loc4 = 0x4, DW_CFA_offset_extended = 0x5, DW_CFA_restore_extended = 0x6, DW_CFA_undefined = 0x7, DW_CFA_same_value = 0x8, DW_CFA_register = 0x9, DW_CFA_remember_state = 0xA, DW_CFA_restore_state = 0xB, DW_CFA_def_cfa = 0xC, DW_CFA_def_cfa_register = 0xD, DW_CFA_def_cfa_offset = 0xE, DW_CFA_def_cfa_expression = 0xF, DW_CFA_expression = 0x10, DW_CFA_offset_extended_sf = 0x11, DW_CFA_def_cfa_sf = 0x12, DW_CFA_def_cfa_offset_sf = 0x13, DW_CFA_val_offset = 0x14, DW_CFA_val_offset_sf = 0x15, DW_CFA_val_expression = 0x16, DW_CFA_advance_loc = 0x40, // high 2 bits are 0x1, lower 6 bits are delta DW_CFA_offset = 0x80, // high 2 bits are 0x2, lower 6 bits are register DW_CFA_restore = 0xC0, // high 2 bits are 0x3, lower 6 bits are register // GNU extensions DW_CFA_GNU_window_save = 0x2D, DW_CFA_GNU_args_size = 0x2E, DW_CFA_GNU_negative_offset_extended = 0x2F }; // FSF exception handling Pointer-Encoding constants // Used in CFI augmentation by gcc compiler enum { DW_EH_PE_ptr = 0x00, DW_EH_PE_uleb128 = 0x01, DW_EH_PE_udata2 = 0x02, DW_EH_PE_udata4 = 0x03, DW_EH_PE_udata8 = 0x04, DW_EH_PE_signed = 0x08, DW_EH_PE_sleb128 = 0x09, DW_EH_PE_sdata2 = 0x0A, DW_EH_PE_sdata4 = 0x0B, DW_EH_PE_sdata8 = 0x0C, DW_EH_PE_absptr = 0x00, DW_EH_PE_pcrel = 0x10, DW_EH_PE_textrel = 0x20, DW_EH_PE_datarel = 0x30, DW_EH_PE_funcrel = 0x40, DW_EH_PE_aligned = 0x50, DW_EH_PE_indirect = 0x80, DW_EH_PE_omit = 0xFF }; // DWARF expressions enum { DW_OP_addr = 0x03, // constant address (size target specific) DW_OP_deref = 0x06, DW_OP_const1u = 0x08, // 1-byte constant DW_OP_const1s = 0x09, // 1-byte constant DW_OP_const2u = 0x0A, // 2-byte constant DW_OP_const2s = 0x0B, // 2-byte constant DW_OP_const4u = 0x0C, // 4-byte constant DW_OP_const4s = 0x0D, // 4-byte constant DW_OP_const8u = 0x0E, // 8-byte constant DW_OP_const8s = 0x0F, // 8-byte constant DW_OP_constu = 0x10, // ULEB128 constant DW_OP_consts = 0x11, // SLEB128 constant DW_OP_dup = 0x12, DW_OP_drop = 0x13, DW_OP_over = 0x14, DW_OP_pick = 0x15, // 1-byte stack index DW_OP_swap = 0x16, DW_OP_rot = 0x17, DW_OP_xderef = 0x18, DW_OP_abs = 0x19, DW_OP_and = 0x1A, DW_OP_div = 0x1B, DW_OP_minus = 0x1C, DW_OP_mod = 0x1D, DW_OP_mul = 0x1E, DW_OP_neg = 0x1F, DW_OP_not = 0x20, DW_OP_or = 0x21, DW_OP_plus = 0x22, DW_OP_plus_uconst = 0x23, // ULEB128 addend DW_OP_shl = 0x24, DW_OP_shr = 0x25, DW_OP_shra = 0x26, DW_OP_xor = 0x27, DW_OP_skip = 0x2F, // signed 2-byte constant DW_OP_bra = 0x28, // signed 2-byte constant DW_OP_eq = 0x29, DW_OP_ge = 0x2A, DW_OP_gt = 0x2B, DW_OP_le = 0x2C, DW_OP_lt = 0x2D, DW_OP_ne = 0x2E, DW_OP_lit0 = 0x30, // Literal 0 DW_OP_lit1 = 0x31, // Literal 1 DW_OP_lit2 = 0x32, // Literal 2 DW_OP_lit3 = 0x33, // Literal 3 DW_OP_lit4 = 0x34, // Literal 4 DW_OP_lit5 = 0x35, // Literal 5 DW_OP_lit6 = 0x36, // Literal 6 DW_OP_lit7 = 0x37, // Literal 7 DW_OP_lit8 = 0x38, // Literal 8 DW_OP_lit9 = 0x39, // Literal 9 DW_OP_lit10 = 0x3A, // Literal 10 DW_OP_lit11 = 0x3B, // Literal 11 DW_OP_lit12 = 0x3C, // Literal 12 DW_OP_lit13 = 0x3D, // Literal 13 DW_OP_lit14 = 0x3E, // Literal 14 DW_OP_lit15 = 0x3F, // Literal 15 DW_OP_lit16 = 0x40, // Literal 16 DW_OP_lit17 = 0x41, // Literal 17 DW_OP_lit18 = 0x42, // Literal 18 DW_OP_lit19 = 0x43, // Literal 19 DW_OP_lit20 = 0x44, // Literal 20 DW_OP_lit21 = 0x45, // Literal 21 DW_OP_lit22 = 0x46, // Literal 22 DW_OP_lit23 = 0x47, // Literal 23 DW_OP_lit24 = 0x48, // Literal 24 DW_OP_lit25 = 0x49, // Literal 25 DW_OP_lit26 = 0x4A, // Literal 26 DW_OP_lit27 = 0x4B, // Literal 27 DW_OP_lit28 = 0x4C, // Literal 28 DW_OP_lit29 = 0x4D, // Literal 29 DW_OP_lit30 = 0x4E, // Literal 30 DW_OP_lit31 = 0x4F, // Literal 31 DW_OP_reg0 = 0x50, // Contents of reg0 DW_OP_reg1 = 0x51, // Contents of reg1 DW_OP_reg2 = 0x52, // Contents of reg2 DW_OP_reg3 = 0x53, // Contents of reg3 DW_OP_reg4 = 0x54, // Contents of reg4 DW_OP_reg5 = 0x55, // Contents of reg5 DW_OP_reg6 = 0x56, // Contents of reg6 DW_OP_reg7 = 0x57, // Contents of reg7 DW_OP_reg8 = 0x58, // Contents of reg8 DW_OP_reg9 = 0x59, // Contents of reg9 DW_OP_reg10 = 0x5A, // Contents of reg10 DW_OP_reg11 = 0x5B, // Contents of reg11 DW_OP_reg12 = 0x5C, // Contents of reg12 DW_OP_reg13 = 0x5D, // Contents of reg13 DW_OP_reg14 = 0x5E, // Contents of reg14 DW_OP_reg15 = 0x5F, // Contents of reg15 DW_OP_reg16 = 0x60, // Contents of reg16 DW_OP_reg17 = 0x61, // Contents of reg17 DW_OP_reg18 = 0x62, // Contents of reg18 DW_OP_reg19 = 0x63, // Contents of reg19 DW_OP_reg20 = 0x64, // Contents of reg20 DW_OP_reg21 = 0x65, // Contents of reg21 DW_OP_reg22 = 0x66, // Contents of reg22 DW_OP_reg23 = 0x67, // Contents of reg23 DW_OP_reg24 = 0x68, // Contents of reg24 DW_OP_reg25 = 0x69, // Contents of reg25 DW_OP_reg26 = 0x6A, // Contents of reg26 DW_OP_reg27 = 0x6B, // Contents of reg27 DW_OP_reg28 = 0x6C, // Contents of reg28 DW_OP_reg29 = 0x6D, // Contents of reg29 DW_OP_reg30 = 0x6E, // Contents of reg30 DW_OP_reg31 = 0x6F, // Contents of reg31 DW_OP_breg0 = 0x70, // base register 0 + SLEB128 offset DW_OP_breg1 = 0x71, // base register 1 + SLEB128 offset DW_OP_breg2 = 0x72, // base register 2 + SLEB128 offset DW_OP_breg3 = 0x73, // base register 3 + SLEB128 offset DW_OP_breg4 = 0x74, // base register 4 + SLEB128 offset DW_OP_breg5 = 0x75, // base register 5 + SLEB128 offset DW_OP_breg6 = 0x76, // base register 6 + SLEB128 offset DW_OP_breg7 = 0x77, // base register 7 + SLEB128 offset DW_OP_breg8 = 0x78, // base register 8 + SLEB128 offset DW_OP_breg9 = 0x79, // base register 9 + SLEB128 offset DW_OP_breg10 = 0x7A, // base register 10 + SLEB128 offset DW_OP_breg11 = 0x7B, // base register 11 + SLEB128 offset DW_OP_breg12 = 0x7C, // base register 12 + SLEB128 offset DW_OP_breg13 = 0x7D, // base register 13 + SLEB128 offset DW_OP_breg14 = 0x7E, // base register 14 + SLEB128 offset DW_OP_breg15 = 0x7F, // base register 15 + SLEB128 offset DW_OP_breg16 = 0x80, // base register 16 + SLEB128 offset DW_OP_breg17 = 0x81, // base register 17 + SLEB128 offset DW_OP_breg18 = 0x82, // base register 18 + SLEB128 offset DW_OP_breg19 = 0x83, // base register 19 + SLEB128 offset DW_OP_breg20 = 0x84, // base register 20 + SLEB128 offset DW_OP_breg21 = 0x85, // base register 21 + SLEB128 offset DW_OP_breg22 = 0x86, // base register 22 + SLEB128 offset DW_OP_breg23 = 0x87, // base register 23 + SLEB128 offset DW_OP_breg24 = 0x88, // base register 24 + SLEB128 offset DW_OP_breg25 = 0x89, // base register 25 + SLEB128 offset DW_OP_breg26 = 0x8A, // base register 26 + SLEB128 offset DW_OP_breg27 = 0x8B, // base register 27 + SLEB128 offset DW_OP_breg28 = 0x8C, // base register 28 + SLEB128 offset DW_OP_breg29 = 0x8D, // base register 29 + SLEB128 offset DW_OP_breg30 = 0x8E, // base register 30 + SLEB128 offset DW_OP_breg31 = 0x8F, // base register 31 + SLEB128 offset DW_OP_regx = 0x90, // ULEB128 register DW_OP_fbreg = 0x91, // SLEB128 offset DW_OP_bregx = 0x92, // ULEB128 register followed by SLEB128 offset DW_OP_piece = 0x93, // ULEB128 size of piece addressed DW_OP_deref_size = 0x94, // 1-byte size of data retrieved DW_OP_xderef_size = 0x95, // 1-byte size of data retrieved DW_OP_nop = 0x96, DW_OP_push_object_addres = 0x97, DW_OP_call2 = 0x98, // 2-byte offset of DIE DW_OP_call4 = 0x99, // 4-byte offset of DIE DW_OP_call_ref = 0x9A, // 4- or 8-byte offset of DIE DW_OP_lo_user = 0xE0, DW_OP_APPLE_uninit = 0xF0, DW_OP_hi_user = 0xFF }; #endif // __DWARF2_H__ |