1bc1f688bSRobert Mustacchi /* 2bc1f688bSRobert Mustacchi Copyright (C) 2000, 2004 Silicon Graphics, Inc. All Rights Reserved. 3*4d9fdb46SRobert Mustacchi Portions Copyright (C) 2015-2020 David Anderson. All Rights Reserved. 4bc1f688bSRobert Mustacchi 5*4d9fdb46SRobert Mustacchi This program is free software; you can redistribute it 6*4d9fdb46SRobert Mustacchi and/or modify it under the terms of version 2.1 of the 7*4d9fdb46SRobert Mustacchi GNU Lesser General Public License as published by the Free 8*4d9fdb46SRobert Mustacchi Software Foundation. 9bc1f688bSRobert Mustacchi 10*4d9fdb46SRobert Mustacchi This program is distributed in the hope that it would be 11*4d9fdb46SRobert Mustacchi useful, but WITHOUT ANY WARRANTY; without even the implied 12*4d9fdb46SRobert Mustacchi warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR 13*4d9fdb46SRobert Mustacchi PURPOSE. 14bc1f688bSRobert Mustacchi 15*4d9fdb46SRobert Mustacchi Further, this software is distributed without any warranty 16*4d9fdb46SRobert Mustacchi that it is free of the rightful claim of any third person 17*4d9fdb46SRobert Mustacchi regarding infringement or the like. Any license provided 18*4d9fdb46SRobert Mustacchi herein, whether implied or otherwise, applies only to this 19*4d9fdb46SRobert Mustacchi software file. Patent licenses, if any, provided herein 20*4d9fdb46SRobert Mustacchi do not apply to combinations of this program with other 21*4d9fdb46SRobert Mustacchi software, or any other product whatsoever. 22bc1f688bSRobert Mustacchi 23*4d9fdb46SRobert Mustacchi You should have received a copy of the GNU Lesser General 24*4d9fdb46SRobert Mustacchi Public License along with this program; if not, write the 25*4d9fdb46SRobert Mustacchi Free Software Foundation, Inc., 51 Franklin Street - Fifth 26*4d9fdb46SRobert Mustacchi Floor, Boston MA 02110-1301, USA. 27bc1f688bSRobert Mustacchi */ 28*4d9fdb46SRobert Mustacchi #ifndef DWARF_LOC_H 29*4d9fdb46SRobert Mustacchi #define DWARF_LOC_H 30*4d9fdb46SRobert Mustacchi #ifdef __cplusplus 31*4d9fdb46SRobert Mustacchi extern "C" { 32*4d9fdb46SRobert Mustacchi #endif /* __cplusplus */ 33bc1f688bSRobert Mustacchi 34bc1f688bSRobert Mustacchi 35bc1f688bSRobert Mustacchi typedef struct Dwarf_Loc_Chain_s *Dwarf_Loc_Chain; 36bc1f688bSRobert Mustacchi struct Dwarf_Loc_Chain_s { 37bc1f688bSRobert Mustacchi Dwarf_Small lc_atom; 38*4d9fdb46SRobert Mustacchi Dwarf_Unsigned lc_raw1; 39*4d9fdb46SRobert Mustacchi Dwarf_Unsigned lc_raw2; 40*4d9fdb46SRobert Mustacchi Dwarf_Unsigned lc_raw3; 41bc1f688bSRobert Mustacchi Dwarf_Unsigned lc_number; 42bc1f688bSRobert Mustacchi Dwarf_Unsigned lc_number2; 43*4d9fdb46SRobert Mustacchi Dwarf_Unsigned lc_number3; 44bc1f688bSRobert Mustacchi Dwarf_Unsigned lc_offset; 45*4d9fdb46SRobert Mustacchi Dwarf_Unsigned lc_opnumber; 46bc1f688bSRobert Mustacchi Dwarf_Loc_Chain lc_next; 47bc1f688bSRobert Mustacchi }; 48*4d9fdb46SRobert Mustacchi 49*4d9fdb46SRobert Mustacchi /* Dwarf_Loclists_Context_s contains the data from the .debug_loclists 50*4d9fdb46SRobert Mustacchi section headers (if that section exists). Dwarf 2,3,4 .debug_loc 51*4d9fdb46SRobert Mustacchi has no such data. The array (one of these per header in 52*4d9fdb46SRobert Mustacchi .debug_loclists) is recorded in Dwarf_Debug. These 53*4d9fdb46SRobert Mustacchi are filled in at startup at the same time .debug_info 54*4d9fdb46SRobert Mustacchi is opened. Nothing of this struct is exposed to 55*4d9fdb46SRobert Mustacchi libdwarf callers */ 56*4d9fdb46SRobert Mustacchi struct Dwarf_Loclists_Context_s { 57*4d9fdb46SRobert Mustacchi Dwarf_Debug lc_dbg; 58*4d9fdb46SRobert Mustacchi Dwarf_Unsigned lc_index; /* An index assigned by 59*4d9fdb46SRobert Mustacchi libdwarf to each loclists context. Starting 60*4d9fdb46SRobert Mustacchi with zero at the zero offset in .debug_loclists. */ 61*4d9fdb46SRobert Mustacchi 62*4d9fdb46SRobert Mustacchi /* Offset of the .debug_loclists header involved. */ 63*4d9fdb46SRobert Mustacchi Dwarf_Unsigned lc_header_offset; 64*4d9fdb46SRobert Mustacchi Dwarf_Unsigned lc_length; 65*4d9fdb46SRobert Mustacchi 66*4d9fdb46SRobert Mustacchi /* Many places in in libdwarf this is called length_size. */ 67*4d9fdb46SRobert Mustacchi Dwarf_Small lc_offset_size; 68*4d9fdb46SRobert Mustacchi 69*4d9fdb46SRobert Mustacchi /* rc_extension_size is zero unless this is standard 70*4d9fdb46SRobert Mustacchi DWARF3 and later 64bit dwarf using the extension mechanism. 71*4d9fdb46SRobert Mustacchi 64bit DWARF3 and later: rc_extension_size is 4. 72*4d9fdb46SRobert Mustacchi 64bit DWARF2 MIPS/IRIX: rc_extension_size is zero. 73*4d9fdb46SRobert Mustacchi 32bit DWARF: rc_extension_size is zero. */ 74*4d9fdb46SRobert Mustacchi Dwarf_Small lc_extension_size; 75*4d9fdb46SRobert Mustacchi 76*4d9fdb46SRobert Mustacchi unsigned lc_version; /* 5 */ 77*4d9fdb46SRobert Mustacchi Dwarf_Small lc_address_size; 78*4d9fdb46SRobert Mustacchi Dwarf_Small lc_segment_selector_size; 79*4d9fdb46SRobert Mustacchi Dwarf_Unsigned lc_offset_entry_count; 80*4d9fdb46SRobert Mustacchi 81*4d9fdb46SRobert Mustacchi /* offset in the section of the offset entries */ 82*4d9fdb46SRobert Mustacchi Dwarf_Unsigned lc_offsets_off_in_sect; 83*4d9fdb46SRobert Mustacchi 84*4d9fdb46SRobert Mustacchi /* Do not free. Points into section memory */ 85*4d9fdb46SRobert Mustacchi Dwarf_Small * lc_offsets_array; 86*4d9fdb46SRobert Mustacchi 87*4d9fdb46SRobert Mustacchi /* Offset in the .debug_loclists section of the 88*4d9fdb46SRobert Mustacchi first loclist in the set of loclists for the 89*4d9fdb46SRobert Mustacchi CU. */ 90*4d9fdb46SRobert Mustacchi Dwarf_Unsigned lc_first_loclist_offset; 91*4d9fdb46SRobert Mustacchi Dwarf_Unsigned lc_past_last_loclist_offset; 92*4d9fdb46SRobert Mustacchi 93*4d9fdb46SRobert Mustacchi /* pointer to 1st byte of loclist header*/ 94*4d9fdb46SRobert Mustacchi Dwarf_Small * lc_loclists_header; 95*4d9fdb46SRobert Mustacchi /* pointer to first byte of the loclist data 96*4d9fdb46SRobert Mustacchi for loclist involved. Do not free. */ 97*4d9fdb46SRobert Mustacchi Dwarf_Small *lc_startaddr; 98*4d9fdb46SRobert Mustacchi /* pointer one past end of the loclist data. */ 99*4d9fdb46SRobert Mustacchi Dwarf_Small *lc_endaddr; 100*4d9fdb46SRobert Mustacchi }; 101*4d9fdb46SRobert Mustacchi 102*4d9fdb46SRobert Mustacchi 103*4d9fdb46SRobert Mustacchi 104*4d9fdb46SRobert Mustacchi /* Contains info on an uninterpreted block of data, 105*4d9fdb46SRobert Mustacchi the data is DWARF location expression operators. */ 106*4d9fdb46SRobert Mustacchi struct Dwarf_Block_c_s { 107*4d9fdb46SRobert Mustacchi /* length of block bl_data points at */ 108*4d9fdb46SRobert Mustacchi Dwarf_Unsigned bl_len; 109*4d9fdb46SRobert Mustacchi 110*4d9fdb46SRobert Mustacchi /* Uninterpreted data, location expressions, 111*4d9fdb46SRobert Mustacchi DW_OP_reg31 etc */ 112*4d9fdb46SRobert Mustacchi Dwarf_Ptr bl_data; 113*4d9fdb46SRobert Mustacchi 114*4d9fdb46SRobert Mustacchi /* DW_LKIND, see libdwarf.h.in */ 115*4d9fdb46SRobert Mustacchi Dwarf_Small bl_kind; 116*4d9fdb46SRobert Mustacchi 117*4d9fdb46SRobert Mustacchi /* Section (not CU) offset which 'data' comes from. */ 118*4d9fdb46SRobert Mustacchi Dwarf_Unsigned bl_section_offset; 119*4d9fdb46SRobert Mustacchi 120*4d9fdb46SRobert Mustacchi /* Section offset where the location description 121*4d9fdb46SRobert Mustacchi itself starts. So a few bytes lower than 122*4d9fdb46SRobert Mustacchi bl_section_offset */ 123*4d9fdb46SRobert Mustacchi Dwarf_Unsigned bl_locdesc_offset; 124*4d9fdb46SRobert Mustacchi }; 125*4d9fdb46SRobert Mustacchi typedef struct Dwarf_Block_c_s Dwarf_Block_c; 126*4d9fdb46SRobert Mustacchi 127*4d9fdb46SRobert Mustacchi /* Location record. Records up to 3 operand values. 128*4d9fdb46SRobert Mustacchi For DWARF5 ops with a 1 byte size and then a block 129*4d9fdb46SRobert Mustacchi of data of that size we the size in an operand 130*4d9fdb46SRobert Mustacchi and follow that with the next operand as a 131*4d9fdb46SRobert Mustacchi pointer to the block. The pointer is inserted 132*4d9fdb46SRobert Mustacchi via cast, so an ugly hack. 133*4d9fdb46SRobert Mustacchi This struct is opaque. Not visible to callers. 134*4d9fdb46SRobert Mustacchi */ 135*4d9fdb46SRobert Mustacchi typedef struct Dwarf_Loc_Expr_Op_s *Dwarf_Loc_Expr_Op; 136*4d9fdb46SRobert Mustacchi struct Dwarf_Loc_Expr_Op_s { 137*4d9fdb46SRobert Mustacchi Dwarf_Small lr_atom; /* Location operation */ 138*4d9fdb46SRobert Mustacchi 139*4d9fdb46SRobert Mustacchi /* Operands exactly as in DWARF. */ 140*4d9fdb46SRobert Mustacchi Dwarf_Unsigned lr_raw1; 141*4d9fdb46SRobert Mustacchi Dwarf_Unsigned lr_raw2; 142*4d9fdb46SRobert Mustacchi Dwarf_Unsigned lr_raw3; 143*4d9fdb46SRobert Mustacchi 144*4d9fdb46SRobert Mustacchi Dwarf_Unsigned lr_number; /* First operand */ 145*4d9fdb46SRobert Mustacchi 146*4d9fdb46SRobert Mustacchi /* Second operand. 147*4d9fdb46SRobert Mustacchi For OP_bregx, OP_bit_piece, OP_[GNU_]const_type, 148*4d9fdb46SRobert Mustacchi OP_[GNU_]deref_type, OP_[GNU_]entry_value, 149*4d9fdb46SRobert Mustacchi OP_implicit_value, 150*4d9fdb46SRobert Mustacchi OP_[GNU_]implicit_pointer, OP_[GNU_]regval_type, 151*4d9fdb46SRobert Mustacchi OP_xderef_type, */ 152*4d9fdb46SRobert Mustacchi Dwarf_Unsigned lr_number2; 153*4d9fdb46SRobert Mustacchi 154*4d9fdb46SRobert Mustacchi /* Third Operand. 155*4d9fdb46SRobert Mustacchi For OP_[GNU_]const type, pointer to 156*4d9fdb46SRobert Mustacchi block of length 'lr_number2' 157*4d9fdb46SRobert Mustacchi FIXME: retrieve the value at the pointer, 158*4d9fdb46SRobert Mustacchi store the value here instead*/ 159*4d9fdb46SRobert Mustacchi Dwarf_Unsigned lr_number3; 160*4d9fdb46SRobert Mustacchi 161*4d9fdb46SRobert Mustacchi /* The number assigned. 0 to the number-of-ops - 1 in 162*4d9fdb46SRobert Mustacchi the expression we are expanding. */ 163*4d9fdb46SRobert Mustacchi Dwarf_Unsigned lr_opnumber; 164*4d9fdb46SRobert Mustacchi Dwarf_Unsigned lr_offset; /* offset for OP_BRA etc */ 165*4d9fdb46SRobert Mustacchi Dwarf_Loc_Expr_Op lr_next; /* When a list is useful.*/ 166*4d9fdb46SRobert Mustacchi }; 167*4d9fdb46SRobert Mustacchi 168*4d9fdb46SRobert Mustacchi /* Location description DWARF 2,3,4,5 169*4d9fdb46SRobert Mustacchi Adds the DW_LLE value (new in DWARF5). 170*4d9fdb46SRobert Mustacchi This struct is opaque. Not visible to callers. */ 171*4d9fdb46SRobert Mustacchi struct Dwarf_Locdesc_c_s { 172*4d9fdb46SRobert Mustacchi Dwarf_Small ld_kind; /* DW_LKIND */ 173*4d9fdb46SRobert Mustacchi 174*4d9fdb46SRobert Mustacchi /* A DW_LLEX or DW_LLE value, real or synthesized */ 175*4d9fdb46SRobert Mustacchi Dwarf_Small ld_lle_value; 176*4d9fdb46SRobert Mustacchi /* Failed means .debug_addr section needed but missing. 177*4d9fdb46SRobert Mustacchi (possibly tied file needed) */ 178*4d9fdb46SRobert Mustacchi Dwarf_Bool ld_index_failed; 179*4d9fdb46SRobert Mustacchi 180*4d9fdb46SRobert Mustacchi /* Beginning of active range. This is actually an offset 181*4d9fdb46SRobert Mustacchi of an applicable base address, not a pc value. */ 182*4d9fdb46SRobert Mustacchi Dwarf_Addr ld_rawlow; 183*4d9fdb46SRobert Mustacchi /* Translated to address */ 184*4d9fdb46SRobert Mustacchi Dwarf_Addr ld_lopc; 185*4d9fdb46SRobert Mustacchi 186*4d9fdb46SRobert Mustacchi /* End of active range. This is actually an offset 187*4d9fdb46SRobert Mustacchi of an applicable base address, 188*4d9fdb46SRobert Mustacchi or a length, never a pc value. */ 189*4d9fdb46SRobert Mustacchi Dwarf_Addr ld_rawhigh; 190*4d9fdb46SRobert Mustacchi /* Translated to address */ 191*4d9fdb46SRobert Mustacchi Dwarf_Addr ld_highpc; 192*4d9fdb46SRobert Mustacchi 193*4d9fdb46SRobert Mustacchi /* Byte length of the entire record for this entry, 194*4d9fdb46SRobert Mustacchi including any DW_OP entries */ 195*4d9fdb46SRobert Mustacchi Dwarf_Unsigned ld_entrylen; 196*4d9fdb46SRobert Mustacchi 197*4d9fdb46SRobert Mustacchi /* For .debug_loclists, eases building record. */ 198*4d9fdb46SRobert Mustacchi Dwarf_Block_c ld_opsblock; 199*4d9fdb46SRobert Mustacchi 200*4d9fdb46SRobert Mustacchi /* count of struct Dwarf_Loc_Expr_Op_s (expression operators) 201*4d9fdb46SRobert Mustacchi in array. */ 202*4d9fdb46SRobert Mustacchi Dwarf_Half ld_cents; 203*4d9fdb46SRobert Mustacchi /* pointer to array of expression operator structs */ 204*4d9fdb46SRobert Mustacchi Dwarf_Loc_Expr_Op ld_s; 205*4d9fdb46SRobert Mustacchi 206*4d9fdb46SRobert Mustacchi /* Section (not CU) offset where loc-expr begins*/ 207*4d9fdb46SRobert Mustacchi Dwarf_Unsigned ld_section_offset; 208*4d9fdb46SRobert Mustacchi 209*4d9fdb46SRobert Mustacchi /* Section (not CU) offset where location descr begins*/ 210*4d9fdb46SRobert Mustacchi Dwarf_Unsigned ld_locdesc_offset; 211*4d9fdb46SRobert Mustacchi 212*4d9fdb46SRobert Mustacchi /* Pointer to our header (in which we are located). */ 213*4d9fdb46SRobert Mustacchi Dwarf_Loc_Head_c ld_loclist_head; 214*4d9fdb46SRobert Mustacchi Dwarf_Locdesc_c ld_next; /*helps building the locdescs*/ 215*4d9fdb46SRobert Mustacchi }; 216*4d9fdb46SRobert Mustacchi 217*4d9fdb46SRobert Mustacchi /* A 'header' to the loclist and the 218*4d9fdb46SRobert Mustacchi location description(s) attached to an attribute. 219*4d9fdb46SRobert Mustacchi This struct is opaque. The contents not visible to 220*4d9fdb46SRobert Mustacchi callers. */ 221*4d9fdb46SRobert Mustacchi struct Dwarf_Loc_Head_c_s { 222*4d9fdb46SRobert Mustacchi /* The array (1 or more entries) of 223*4d9fdb46SRobert Mustacchi struct Loc_Desc_c_s 224*4d9fdb46SRobert Mustacchi If 1 it may really be a locexpr */ 225*4d9fdb46SRobert Mustacchi Dwarf_Locdesc_c ll_locdesc; 226*4d9fdb46SRobert Mustacchi 227*4d9fdb46SRobert Mustacchi /* Entry count of the ll_locdesc array. */ 228*4d9fdb46SRobert Mustacchi Dwarf_Unsigned ll_locdesc_count; 229*4d9fdb46SRobert Mustacchi 230*4d9fdb46SRobert Mustacchi unsigned ll_attrnum; 231*4d9fdb46SRobert Mustacchi unsigned ll_attrform; 232*4d9fdb46SRobert Mustacchi unsigned ll_cuversion; 233*4d9fdb46SRobert Mustacchi unsigned ll_address_size; 234*4d9fdb46SRobert Mustacchi unsigned ll_offset_size; 235*4d9fdb46SRobert Mustacchi /* The CU Context of this loclist or locexpr. */ 236*4d9fdb46SRobert Mustacchi Dwarf_CU_Context ll_context; 237*4d9fdb46SRobert Mustacchi /* DW_LKIND* */ 238*4d9fdb46SRobert Mustacchi Dwarf_Small ll_kind; 239*4d9fdb46SRobert Mustacchi Dwarf_Debug ll_dbg; 240*4d9fdb46SRobert Mustacchi 241*4d9fdb46SRobert Mustacchi /* If ll_kind == DW_LKIND_loclists the following 242*4d9fdb46SRobert Mustacchi pointer is non-null and index is the index of the localcontext */ 243*4d9fdb46SRobert Mustacchi Dwarf_Unsigned ll_index; 244*4d9fdb46SRobert Mustacchi Dwarf_Loclists_Context ll_localcontext; 245*4d9fdb46SRobert Mustacchi 246*4d9fdb46SRobert Mustacchi /* rh_last and rh_first used during build-up. 247*4d9fdb46SRobert Mustacchi Zero when array rh_loclists built. */ 248*4d9fdb46SRobert Mustacchi Dwarf_Locdesc_c ll_first; 249*4d9fdb46SRobert Mustacchi Dwarf_Locdesc_c ll_last; 250*4d9fdb46SRobert Mustacchi Dwarf_Unsigned ll_bytes_total; 251*4d9fdb46SRobert Mustacchi unsigned ll_segment_selector_size; 252*4d9fdb46SRobert Mustacchi 253*4d9fdb46SRobert Mustacchi /* DW_AT_loclists_base */ 254*4d9fdb46SRobert Mustacchi Dwarf_Bool ll_at_loclists_base_present; 255*4d9fdb46SRobert Mustacchi Dwarf_Unsigned ll_at_loclists_base; 256*4d9fdb46SRobert Mustacchi 257*4d9fdb46SRobert Mustacchi /* DW_AT_low_pc of CU or zero if none. */ 258*4d9fdb46SRobert Mustacchi Dwarf_Bool ll_cu_base_address_present; 259*4d9fdb46SRobert Mustacchi Dwarf_Unsigned ll_cu_base_address; 260*4d9fdb46SRobert Mustacchi 261*4d9fdb46SRobert Mustacchi /* DW_AT_addr_base, so we can use .debug_addr 262*4d9fdb46SRobert Mustacchi if such is needed. */ 263*4d9fdb46SRobert Mustacchi Dwarf_Bool ll_cu_addr_base_present; 264*4d9fdb46SRobert Mustacchi Dwarf_Unsigned ll_cu_addr_base; 265*4d9fdb46SRobert Mustacchi 266*4d9fdb46SRobert Mustacchi Dwarf_Small * ll_llepointer; 267*4d9fdb46SRobert Mustacchi Dwarf_Unsigned ll_llearea_offset; 268*4d9fdb46SRobert Mustacchi Dwarf_Small * ll_end_data_area; 269*4d9fdb46SRobert Mustacchi }; 270*4d9fdb46SRobert Mustacchi 271*4d9fdb46SRobert Mustacchi int _dwarf_fill_in_locdesc_op_c(Dwarf_Debug dbg, 272*4d9fdb46SRobert Mustacchi Dwarf_Unsigned locdesc_index, 273*4d9fdb46SRobert Mustacchi Dwarf_Loc_Head_c loc_head, 274*4d9fdb46SRobert Mustacchi Dwarf_Block_c * loc_block, 275*4d9fdb46SRobert Mustacchi Dwarf_Half address_size, 276*4d9fdb46SRobert Mustacchi Dwarf_Half offset_size, 277*4d9fdb46SRobert Mustacchi Dwarf_Small version_stamp, 278*4d9fdb46SRobert Mustacchi Dwarf_Addr lowpc, 279*4d9fdb46SRobert Mustacchi Dwarf_Addr highpc, 280*4d9fdb46SRobert Mustacchi Dwarf_Half lle_op, 281*4d9fdb46SRobert Mustacchi Dwarf_Error * error); 282*4d9fdb46SRobert Mustacchi 283*4d9fdb46SRobert Mustacchi int _dwarf_loc_block_sanity_check(Dwarf_Debug dbg, 284*4d9fdb46SRobert Mustacchi Dwarf_Block_c *loc_block,Dwarf_Error*error); 285*4d9fdb46SRobert Mustacchi 286*4d9fdb46SRobert Mustacchi void _dwarf_loclists_head_destructor(void *l); 287*4d9fdb46SRobert Mustacchi 288*4d9fdb46SRobert Mustacchi int _dwarf_loclists_fill_in_lle_head(Dwarf_Debug dbg, 289*4d9fdb46SRobert Mustacchi Dwarf_Attribute attr, 290*4d9fdb46SRobert Mustacchi Dwarf_Loc_Head_c llhead, 291*4d9fdb46SRobert Mustacchi Dwarf_Error *error); 292*4d9fdb46SRobert Mustacchi 293*4d9fdb46SRobert Mustacchi int _dwarf_loclists_expression_build(Dwarf_Debug dbg, 294*4d9fdb46SRobert Mustacchi Dwarf_Attribute attr, 295*4d9fdb46SRobert Mustacchi Dwarf_Loc_Head_c* llhead, 296*4d9fdb46SRobert Mustacchi Dwarf_Error *error); 297*4d9fdb46SRobert Mustacchi 298*4d9fdb46SRobert Mustacchi int _dwarf_read_loc_expr_op(Dwarf_Debug dbg, 299*4d9fdb46SRobert Mustacchi Dwarf_Block_c * loc_block, 300*4d9fdb46SRobert Mustacchi /* Caller: Start numbering at 0. */ 301*4d9fdb46SRobert Mustacchi Dwarf_Signed opnumber, 302*4d9fdb46SRobert Mustacchi 303*4d9fdb46SRobert Mustacchi /* 2 for DWARF 2 etc. */ 304*4d9fdb46SRobert Mustacchi Dwarf_Half version_stamp, 305*4d9fdb46SRobert Mustacchi Dwarf_Half offset_size, /* 4 or 8 */ 306*4d9fdb46SRobert Mustacchi Dwarf_Half address_size, /* 2,4, 8 */ 307*4d9fdb46SRobert Mustacchi Dwarf_Signed startoffset_in, /* offset in block, 308*4d9fdb46SRobert Mustacchi not section offset */ 309*4d9fdb46SRobert Mustacchi Dwarf_Small *section_end, 310*4d9fdb46SRobert Mustacchi 311*4d9fdb46SRobert Mustacchi /* nextoffset_out so caller knows next entry startoffset */ 312*4d9fdb46SRobert Mustacchi Dwarf_Unsigned *nextoffset_out, 313*4d9fdb46SRobert Mustacchi 314*4d9fdb46SRobert Mustacchi /* The values picked up. */ 315*4d9fdb46SRobert Mustacchi Dwarf_Loc_Expr_Op curr_loc, 316*4d9fdb46SRobert Mustacchi Dwarf_Error * error); 317*4d9fdb46SRobert Mustacchi void _dwarf_free_loclists_head(Dwarf_Loc_Head_c head); 318*4d9fdb46SRobert Mustacchi 319*4d9fdb46SRobert Mustacchi #ifdef __cplusplus 320*4d9fdb46SRobert Mustacchi } 321*4d9fdb46SRobert Mustacchi #endif /* __cplusplus */ 322*4d9fdb46SRobert Mustacchi #endif /* DWARF_LOC_H */ 323