1bc1f688bSRobert Mustacchi /* 2bc1f688bSRobert Mustacchi 3bc1f688bSRobert Mustacchi Copyright (C) 2000-2010 Silicon Graphics, Inc. All Rights Reserved. 4bc1f688bSRobert Mustacchi Portions Copyright 2007-2010 Sun Microsystems, Inc. All rights reserved. 5*4d9fdb46SRobert Mustacchi Portions Copyright 2008-2018 David Anderson. All rights reserved. 6bc1f688bSRobert Mustacchi Portions Copyright 2008-2010 Arxan Technologies, Inc. All rights reserved. 7*4d9fdb46SRobert Mustacchi Portions Copyright 2010-2012 SN Systems Ltd. All rights reserved. 8bc1f688bSRobert Mustacchi 9*4d9fdb46SRobert Mustacchi This program is free software; you can redistribute it 10*4d9fdb46SRobert Mustacchi and/or modify it under the terms of version 2.1 of the 11*4d9fdb46SRobert Mustacchi GNU Lesser General Public License as published by the Free 12*4d9fdb46SRobert Mustacchi Software Foundation. 13bc1f688bSRobert Mustacchi 14*4d9fdb46SRobert Mustacchi This program is distributed in the hope that it would be 15*4d9fdb46SRobert Mustacchi useful, but WITHOUT ANY WARRANTY; without even the implied 16*4d9fdb46SRobert Mustacchi warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR 17*4d9fdb46SRobert Mustacchi PURPOSE. 18bc1f688bSRobert Mustacchi 19*4d9fdb46SRobert Mustacchi Further, this software is distributed without any warranty 20*4d9fdb46SRobert Mustacchi that it is free of the rightful claim of any third person 21*4d9fdb46SRobert Mustacchi regarding infringement or the like. Any license provided 22*4d9fdb46SRobert Mustacchi herein, whether implied or otherwise, applies only to this 23*4d9fdb46SRobert Mustacchi software file. Patent licenses, if any, provided herein 24*4d9fdb46SRobert Mustacchi do not apply to combinations of this program with other 25*4d9fdb46SRobert Mustacchi software, or any other product whatsoever. 26bc1f688bSRobert Mustacchi 27*4d9fdb46SRobert Mustacchi You should have received a copy of the GNU Lesser General 28*4d9fdb46SRobert Mustacchi Public License along with this program; if not, write the 29*4d9fdb46SRobert Mustacchi Free Software Foundation, Inc., 51 Franklin Street - Fifth 30*4d9fdb46SRobert Mustacchi Floor, Boston MA 02110-1301, USA. 31bc1f688bSRobert Mustacchi 32bc1f688bSRobert Mustacchi */ 33bc1f688bSRobert Mustacchi 34bc1f688bSRobert Mustacchi 35bc1f688bSRobert Mustacchi #ifndef _LIBDWARF_H 36bc1f688bSRobert Mustacchi #define _LIBDWARF_H 37bc1f688bSRobert Mustacchi #ifdef __cplusplus 38bc1f688bSRobert Mustacchi extern "C" { 39bc1f688bSRobert Mustacchi #endif 40bc1f688bSRobert Mustacchi /* 41bc1f688bSRobert Mustacchi libdwarf.h 42bc1f688bSRobert Mustacchi $Revision: #9 $ $Date: 2008/01/17 $ 43bc1f688bSRobert Mustacchi 44bc1f688bSRobert Mustacchi For libdwarf producers and consumers 45bc1f688bSRobert Mustacchi 46bc1f688bSRobert Mustacchi The interface is defined as having 8-byte signed and unsigned 47bc1f688bSRobert Mustacchi values so it can handle 64-or-32bit target on 64-or-32bit host. 48*4d9fdb46SRobert Mustacchi Dwarf_Ptr is the native size: it represents pointers on 49bc1f688bSRobert Mustacchi the host machine (not the target!). 50bc1f688bSRobert Mustacchi 51bc1f688bSRobert Mustacchi This contains declarations for types and all producer 52bc1f688bSRobert Mustacchi and consumer functions. 53bc1f688bSRobert Mustacchi 54bc1f688bSRobert Mustacchi Function declarations are written on a single line each here 55bc1f688bSRobert Mustacchi so one can use grep to each declaration in its entirety. 56bc1f688bSRobert Mustacchi The declarations are a little harder to read this way, but... 57bc1f688bSRobert Mustacchi 58*4d9fdb46SRobert Mustacchi The seeming duplication of the Elf typedef allows 59*4d9fdb46SRobert Mustacchi both verification we have the right struct name (when 60*4d9fdb46SRobert Mustacchi libelf.h included before this) and 61*4d9fdb46SRobert Mustacchi creation of a local handle so we have the struct pointer 62*4d9fdb46SRobert Mustacchi here (if libelf.h is not included before this file). 63*4d9fdb46SRobert Mustacchi 64bc1f688bSRobert Mustacchi */ 65bc1f688bSRobert Mustacchi 66bc1f688bSRobert Mustacchi struct Elf; 67bc1f688bSRobert Mustacchi typedef struct Elf* dwarf_elf_handle; 68bc1f688bSRobert Mustacchi 69bc1f688bSRobert Mustacchi /* To enable printing with printf regardless of the 70*4d9fdb46SRobert Mustacchi actual underlying data type, we define the DW_PR_xxx macros. 71*4d9fdb46SRobert Mustacchi To ensure uses of DW_PR_DUx or DW_PR_DSx look the way you want 72*4d9fdb46SRobert Mustacchi ensure the right DW_PR_XZEROS define is uncommented. 73bc1f688bSRobert Mustacchi */ 74*4d9fdb46SRobert Mustacchi /*#define DW_PR_XZEROS "" */ 75*4d9fdb46SRobert Mustacchi #define DW_PR_XZEROS "08" 76bc1f688bSRobert Mustacchi 77*4d9fdb46SRobert Mustacchi typedef unsigned long long Dwarf_Unsigned; 78*4d9fdb46SRobert Mustacchi typedef signed long long Dwarf_Signed; 79*4d9fdb46SRobert Mustacchi typedef unsigned long long Dwarf_Off; 80*4d9fdb46SRobert Mustacchi typedef unsigned long long Dwarf_Addr; 81bc1f688bSRobert Mustacchi typedef int Dwarf_Bool; /* boolean type */ 82bc1f688bSRobert Mustacchi typedef unsigned short Dwarf_Half; /* 2 byte unsigned value */ 83bc1f688bSRobert Mustacchi typedef unsigned char Dwarf_Small; /* 1 byte unsigned value */ 84*4d9fdb46SRobert Mustacchi /* If sizeof(Dwarf_Half) is greater than 2 85*4d9fdb46SRobert Mustacchi we believe libdwarf still works properly. */ 86*4d9fdb46SRobert Mustacchi 87*4d9fdb46SRobert Mustacchi #if defined(_WIN32) && defined(HAVE_NONSTANDARD_PRINTF_64_FORMAT) 88bc1f688bSRobert Mustacchi #define DW_PR_DUx "I64x" 89bc1f688bSRobert Mustacchi #define DW_PR_DSx "I64x" 90bc1f688bSRobert Mustacchi #define DW_PR_DUu "I64u" 91bc1f688bSRobert Mustacchi #define DW_PR_DSd "I64d" 92*4d9fdb46SRobert Mustacchi #else 93*4d9fdb46SRobert Mustacchi #define DW_PR_DUx "llx" 94*4d9fdb46SRobert Mustacchi #define DW_PR_DSx "llx" 95*4d9fdb46SRobert Mustacchi #define DW_PR_DUu "llu" 96*4d9fdb46SRobert Mustacchi #define DW_PR_DSd "lld" 97*4d9fdb46SRobert Mustacchi #endif /* DW_PR defines */ 98bc1f688bSRobert Mustacchi 99bc1f688bSRobert Mustacchi typedef void* Dwarf_Ptr; /* host machine pointer */ 100bc1f688bSRobert Mustacchi 101*4d9fdb46SRobert Mustacchi /* DWARF5: a container for a DW_FORM_data16 data item. 102*4d9fdb46SRobert Mustacchi We have no integer types suitable so this special 103*4d9fdb46SRobert Mustacchi struct is used instead. It is up to consumers/producers 104*4d9fdb46SRobert Mustacchi to deal with the contents. 105*4d9fdb46SRobert Mustacchi New October 18, 2017 . */ 106*4d9fdb46SRobert Mustacchi typedef struct Dwarf_Form_Data16_s { 107*4d9fdb46SRobert Mustacchi unsigned char fd_data[16]; 108*4d9fdb46SRobert Mustacchi } Dwarf_Form_Data16; 109*4d9fdb46SRobert Mustacchi 110*4d9fdb46SRobert Mustacchi 111*4d9fdb46SRobert Mustacchi 112*4d9fdb46SRobert Mustacchi /* Used for signatures where ever they appear. 113*4d9fdb46SRobert Mustacchi It is not a string, it 114bc1f688bSRobert Mustacchi is 8 bytes of a signature one would use to find 115bc1f688bSRobert Mustacchi a type unit. See dwarf_formsig8() 116*4d9fdb46SRobert Mustacchi 117*4d9fdb46SRobert Mustacchi Sometimes it is used in calculations as 118*4d9fdb46SRobert Mustacchi Dwarf_Unsigned, but that is done inside libdwarf 119*4d9fdb46SRobert Mustacchi and the endianness question makes it a bit sketchy. 120bc1f688bSRobert Mustacchi */ 121*4d9fdb46SRobert Mustacchi struct Dwarf_Sig8_s { 122bc1f688bSRobert Mustacchi char signature[8]; 123*4d9fdb46SRobert Mustacchi }; 124*4d9fdb46SRobert Mustacchi typedef struct Dwarf_Sig8_s Dwarf_Sig8; 125bc1f688bSRobert Mustacchi 126bc1f688bSRobert Mustacchi /* Contains info on an uninterpreted block of data 127*4d9fdb46SRobert Mustacchi Used with certain frame information functions and 128*4d9fdb46SRobert Mustacchi also used with DW_FORM_block<>. 129bc1f688bSRobert Mustacchi */ 130bc1f688bSRobert Mustacchi typedef struct { 131*4d9fdb46SRobert Mustacchi Dwarf_Unsigned bl_len; /* length of block bl_data points at */ 132bc1f688bSRobert Mustacchi Dwarf_Ptr bl_data; /* uninterpreted data */ 133*4d9fdb46SRobert Mustacchi 134*4d9fdb46SRobert Mustacchi /* See libdwarf.h DW_LKIND* */ 135*4d9fdb46SRobert Mustacchi Dwarf_Small bl_from_loclist; 136*4d9fdb46SRobert Mustacchi 137*4d9fdb46SRobert Mustacchi /* Section (not CU) offset which 'data' comes from. */ 138*4d9fdb46SRobert Mustacchi Dwarf_Unsigned bl_section_offset; 139bc1f688bSRobert Mustacchi } Dwarf_Block; 140bc1f688bSRobert Mustacchi 141bc1f688bSRobert Mustacchi 142*4d9fdb46SRobert Mustacchi /* NEW October 2015. */ 143*4d9fdb46SRobert Mustacchi /* This provides access to Dwarf_Locdesc_c, a single 144*4d9fdb46SRobert Mustacchi location description */ 145*4d9fdb46SRobert Mustacchi struct Dwarf_Locdesc_c_s; 146*4d9fdb46SRobert Mustacchi typedef struct Dwarf_Locdesc_c_s * Dwarf_Locdesc_c; 147*4d9fdb46SRobert Mustacchi 148*4d9fdb46SRobert Mustacchi /* NEW October 2015. */ 149*4d9fdb46SRobert Mustacchi /* This provides access to Dwarf_Locdesc_c, a single 150*4d9fdb46SRobert Mustacchi location list entry (or for a locexpr, the fake 151*4d9fdb46SRobert Mustacchi Loc_Head for the locexpr) */ 152*4d9fdb46SRobert Mustacchi struct Dwarf_Loc_Head_c_s; 153*4d9fdb46SRobert Mustacchi typedef struct Dwarf_Loc_Head_c_s * Dwarf_Loc_Head_c; 154*4d9fdb46SRobert Mustacchi 155*4d9fdb46SRobert Mustacchi /* NEW November 2015. For DWARF5 .debug_macro section */ 156*4d9fdb46SRobert Mustacchi struct Dwarf_Macro_Context_s; 157*4d9fdb46SRobert Mustacchi typedef struct Dwarf_Macro_Context_s * Dwarf_Loc_Macro_Context; 158*4d9fdb46SRobert Mustacchi 159*4d9fdb46SRobert Mustacchi /* NEW September 2016. Allows easy access to DW_AT_discr_list 160*4d9fdb46SRobert Mustacchi array of discriminant values. Input in blockpointer 161*4d9fdb46SRobert Mustacchi is a block with a list of uleb or sleb numbers 162*4d9fdb46SRobert Mustacchi (all one or the other, lebunsignedflag instructs 163*4d9fdb46SRobert Mustacchi how to read the leb values properly) */ 164*4d9fdb46SRobert Mustacchi typedef struct Dwarf_Dsc_Head_s * Dwarf_Dsc_Head; 165*4d9fdb46SRobert Mustacchi 166*4d9fdb46SRobert Mustacchi /* Location record. Records up to 2 operand values. 167*4d9fdb46SRobert Mustacchi Not usable with DWARF5 or DWARF4 with location 168*4d9fdb46SRobert Mustacchi operator extensions. */ 169bc1f688bSRobert Mustacchi typedef struct { 170bc1f688bSRobert Mustacchi Dwarf_Small lr_atom; /* location operation */ 171bc1f688bSRobert Mustacchi Dwarf_Unsigned lr_number; /* operand */ 172*4d9fdb46SRobert Mustacchi Dwarf_Unsigned lr_number2; /* for OP_BREGx and DW_OP_GNU_const_type*/ 173bc1f688bSRobert Mustacchi Dwarf_Unsigned lr_offset; /* offset in locexpr for OP_BRA etc */ 174bc1f688bSRobert Mustacchi } Dwarf_Loc; 175bc1f688bSRobert Mustacchi 176bc1f688bSRobert Mustacchi 177*4d9fdb46SRobert Mustacchi /* Location description. DWARF 2,3,4. 178*4d9fdb46SRobert Mustacchi When this is from a split-dwarf loclist (.debug_loc.dwo) 179*4d9fdb46SRobert Mustacchi and no tied object is present 180*4d9fdb46SRobert Mustacchi then ld_lowpc and ld_highpc are actually indices in 181*4d9fdb46SRobert Mustacchi the .debug_addr section of the tied object). 182*4d9fdb46SRobert Mustacchi If there is a tied object then these fields are actuall 183*4d9fdb46SRobert Mustacchi addresses and DW_AT_addr_base in the skeleton CU DIE applies to 184*4d9fdb46SRobert Mustacchi that .debug_addr. 185*4d9fdb46SRobert Mustacchi 186*4d9fdb46SRobert Mustacchi Location record. Records up to 2 operand values. 187*4d9fdb46SRobert Mustacchi Not usable with DWARF5 or DWARF4 with extensions. 188*4d9fdb46SRobert Mustacchi 189*4d9fdb46SRobert Mustacchi If from DWARF2,3,4 non-split dwarf then things operate as 190*4d9fdb46SRobert Mustacchi in DWARF2. 191*4d9fdb46SRobert Mustacchi See dwarf_get_loclist_b() and the other related 192*4d9fdb46SRobert Mustacchi new functions that 193*4d9fdb46SRobert Mustacchi avoid using public structures Dwarf_Loc and Dwarf_Locdesc. 194bc1f688bSRobert Mustacchi */ 195bc1f688bSRobert Mustacchi typedef struct { 196*4d9fdb46SRobert Mustacchi /* Beginning of active range. This is actually an offset 197*4d9fdb46SRobert Mustacchi of an applicable base address, not a pc value. */ 198*4d9fdb46SRobert Mustacchi Dwarf_Addr ld_lopc; 199*4d9fdb46SRobert Mustacchi 200*4d9fdb46SRobert Mustacchi /* End of active range. This is actually an offset 201*4d9fdb46SRobert Mustacchi of an applicable base address, not a pc value. */ 202*4d9fdb46SRobert Mustacchi Dwarf_Addr ld_hipc; 203*4d9fdb46SRobert Mustacchi 204bc1f688bSRobert Mustacchi Dwarf_Half ld_cents; /* count of location records */ 205bc1f688bSRobert Mustacchi Dwarf_Loc* ld_s; /* pointer to list of same */ 206*4d9fdb46SRobert Mustacchi 207*4d9fdb46SRobert Mustacchi /* non-0 if loclist, 1 if non-split (dwarf 2,3,4) */ 208bc1f688bSRobert Mustacchi Dwarf_Small ld_from_loclist; 209bc1f688bSRobert Mustacchi 210bc1f688bSRobert Mustacchi Dwarf_Unsigned ld_section_offset; /* Section (not CU) offset 211bc1f688bSRobert Mustacchi where loc-expr begins*/ 212bc1f688bSRobert Mustacchi } Dwarf_Locdesc; 213bc1f688bSRobert Mustacchi 214*4d9fdb46SRobert Mustacchi /* First appears in DWARF3, and only ranges entries exist. 215bc1f688bSRobert Mustacchi The dwr_addr1/addr2 data is either an offset (DW_RANGES_ENTRY) 216bc1f688bSRobert Mustacchi or an address (dwr_addr2 in DW_RANGES_ADDRESS_SELECTION) or 217bc1f688bSRobert Mustacchi both are zero (DW_RANGES_END). 218*4d9fdb46SRobert Mustacchi For DWARF5 each table starts with a header 219*4d9fdb46SRobert Mustacchi followed by range list entries defined 220*4d9fdb46SRobert Mustacchi as here. 221bc1f688bSRobert Mustacchi */ 222bc1f688bSRobert Mustacchi enum Dwarf_Ranges_Entry_Type { DW_RANGES_ENTRY, 223bc1f688bSRobert Mustacchi DW_RANGES_ADDRESS_SELECTION, 224*4d9fdb46SRobert Mustacchi DW_RANGES_END 225*4d9fdb46SRobert Mustacchi }; 226bc1f688bSRobert Mustacchi typedef struct { 227bc1f688bSRobert Mustacchi Dwarf_Addr dwr_addr1; 228bc1f688bSRobert Mustacchi Dwarf_Addr dwr_addr2; 229bc1f688bSRobert Mustacchi enum Dwarf_Ranges_Entry_Type dwr_type; 230bc1f688bSRobert Mustacchi } Dwarf_Ranges; 231bc1f688bSRobert Mustacchi 232bc1f688bSRobert Mustacchi /* Frame description instructions expanded. 233bc1f688bSRobert Mustacchi */ 234bc1f688bSRobert Mustacchi typedef struct { 235bc1f688bSRobert Mustacchi Dwarf_Small fp_base_op; 236bc1f688bSRobert Mustacchi Dwarf_Small fp_extended_op; 237bc1f688bSRobert Mustacchi Dwarf_Half fp_register; 238bc1f688bSRobert Mustacchi 239bc1f688bSRobert Mustacchi /* Value may be signed, depends on op. 240bc1f688bSRobert Mustacchi Any applicable data_alignment_factor has 241bc1f688bSRobert Mustacchi not been applied, this is the raw offset. */ 242bc1f688bSRobert Mustacchi Dwarf_Unsigned fp_offset; 243bc1f688bSRobert Mustacchi Dwarf_Off fp_instr_offset; 244bc1f688bSRobert Mustacchi } Dwarf_Frame_Op; /* DWARF2 */ 245bc1f688bSRobert Mustacchi 246bc1f688bSRobert Mustacchi /* ***IMPORTANT NOTE, TARGET DEPENDENCY **** 247bc1f688bSRobert Mustacchi DW_REG_TABLE_SIZE must be at least as large as 248bc1f688bSRobert Mustacchi the number of registers 249bc1f688bSRobert Mustacchi (DW_FRAME_LAST_REG_NUM) as defined in dwarf.h 250bc1f688bSRobert Mustacchi Preferably identical to DW_FRAME_LAST_REG_NUM. 251bc1f688bSRobert Mustacchi Ensure [0-DW_REG_TABLE_SIZE] does not overlap 252bc1f688bSRobert Mustacchi DW_FRAME_UNDEFINED_VAL or DW_FRAME_SAME_VAL. 253bc1f688bSRobert Mustacchi Also ensure DW_FRAME_REG_INITIAL_VALUE is set to what 254bc1f688bSRobert Mustacchi is appropriate to your cpu. 255bc1f688bSRobert Mustacchi For various CPUs DW_FRAME_UNDEFINED_VAL is correct 256bc1f688bSRobert Mustacchi as the value for DW_FRAME_REG_INITIAL_VALUE. 257bc1f688bSRobert Mustacchi 258bc1f688bSRobert Mustacchi For consumer apps, this can be set dynamically: see 259*4d9fdb46SRobert Mustacchi dwarf_set_frame_rule_table_size(); */ 260bc1f688bSRobert Mustacchi #ifndef DW_REG_TABLE_SIZE 261bc1f688bSRobert Mustacchi #define DW_REG_TABLE_SIZE 66 262bc1f688bSRobert Mustacchi #endif 263bc1f688bSRobert Mustacchi 264bc1f688bSRobert Mustacchi /* For MIPS, DW_FRAME_SAME_VAL is the correct default value 265bc1f688bSRobert Mustacchi for a frame register value. For other CPUS another value 266bc1f688bSRobert Mustacchi may be better, such as DW_FRAME_UNDEFINED_VAL. 267bc1f688bSRobert Mustacchi See dwarf_set_frame_rule_table_size 268bc1f688bSRobert Mustacchi */ 269bc1f688bSRobert Mustacchi #ifndef DW_FRAME_REG_INITIAL_VALUE 270bc1f688bSRobert Mustacchi #define DW_FRAME_REG_INITIAL_VALUE DW_FRAME_SAME_VAL 271bc1f688bSRobert Mustacchi #endif 272bc1f688bSRobert Mustacchi 273bc1f688bSRobert Mustacchi /* Taken as meaning 'undefined value', this is not 274bc1f688bSRobert Mustacchi a column or register number. 275bc1f688bSRobert Mustacchi Only present at libdwarf runtime in the consumer 276bc1f688bSRobert Mustacchi interfaces. Never on disk. 277bc1f688bSRobert Mustacchi DW_FRAME_* Values present on disk are in dwarf.h 278bc1f688bSRobert Mustacchi Ensure this is > DW_REG_TABLE_SIZE (the reg table 279bc1f688bSRobert Mustacchi size is changeable at runtime with the *reg3() interfaces, 280bc1f688bSRobert Mustacchi and this value must be greater than the reg table size). 281bc1f688bSRobert Mustacchi */ 282bc1f688bSRobert Mustacchi #define DW_FRAME_UNDEFINED_VAL 1034 283bc1f688bSRobert Mustacchi 284bc1f688bSRobert Mustacchi /* Taken as meaning 'same value' as caller had, not a column 285bc1f688bSRobert Mustacchi or register number. 286bc1f688bSRobert Mustacchi Only present at libdwarf runtime in the consumer 287bc1f688bSRobert Mustacchi interfaces. Never on disk. 288bc1f688bSRobert Mustacchi DW_FRAME_* Values present on disk are in dwarf.h 289bc1f688bSRobert Mustacchi Ensure this is > DW_REG_TABLE_SIZE (the reg table 290bc1f688bSRobert Mustacchi size is changeable at runtime with the *reg3() interfaces, 291bc1f688bSRobert Mustacchi and this value must be greater than the reg table size). 292bc1f688bSRobert Mustacchi */ 293bc1f688bSRobert Mustacchi #define DW_FRAME_SAME_VAL 1035 294bc1f688bSRobert Mustacchi 295bc1f688bSRobert Mustacchi /* For DWARF3 consumer interfaces, make the CFA a column with no 296bc1f688bSRobert Mustacchi real table number. This is what should have been done 297bc1f688bSRobert Mustacchi for the DWARF2 interfaces. This actually works for 298bc1f688bSRobert Mustacchi both DWARF2 and DWARF3, but see the libdwarf documentation 299bc1f688bSRobert Mustacchi on Dwarf_Regtable3 and dwarf_get_fde_info_for_reg3() 300bc1f688bSRobert Mustacchi and dwarf_get_fde_info_for_all_regs3() 301bc1f688bSRobert Mustacchi Do NOT use this with the older dwarf_get_fde_info_for_reg() 302bc1f688bSRobert Mustacchi or dwarf_get_fde_info_for_all_regs() consumer interfaces. 303bc1f688bSRobert Mustacchi Must be higher than any register count for *any* ABI 304bc1f688bSRobert Mustacchi (ensures maximum applicability with minimum effort). 305bc1f688bSRobert Mustacchi Ensure this is > DW_REG_TABLE_SIZE (the reg table 306bc1f688bSRobert Mustacchi size is changeable at runtime with the *reg3() interfaces, 307bc1f688bSRobert Mustacchi and this value must be greater than the reg table size). 308bc1f688bSRobert Mustacchi Only present at libdwarf runtime in the consumer 309bc1f688bSRobert Mustacchi interfaces. Never on disk. 310bc1f688bSRobert Mustacchi */ 311bc1f688bSRobert Mustacchi #define DW_FRAME_CFA_COL3 1436 312bc1f688bSRobert Mustacchi 313bc1f688bSRobert Mustacchi /* The following are all needed to evaluate DWARF3 register rules. 314bc1f688bSRobert Mustacchi */ 315bc1f688bSRobert Mustacchi #define DW_EXPR_OFFSET 0 /* DWARF2 only sees this. */ 316bc1f688bSRobert Mustacchi #define DW_EXPR_VAL_OFFSET 1 317bc1f688bSRobert Mustacchi #define DW_EXPR_EXPRESSION 2 318bc1f688bSRobert Mustacchi #define DW_EXPR_VAL_EXPRESSION 3 319bc1f688bSRobert Mustacchi 320bc1f688bSRobert Mustacchi typedef struct Dwarf_Regtable_Entry_s { 321bc1f688bSRobert Mustacchi /* For each index i (naming a hardware register with dwarf number 322bc1f688bSRobert Mustacchi i) the following is true and defines the value of that register: 323bc1f688bSRobert Mustacchi 324bc1f688bSRobert Mustacchi If dw_regnum is Register DW_FRAME_UNDEFINED_VAL 325bc1f688bSRobert Mustacchi it is not DWARF register number but 326bc1f688bSRobert Mustacchi a place holder indicating the register has no defined value. 327bc1f688bSRobert Mustacchi If dw_regnum is Register DW_FRAME_SAME_VAL 328bc1f688bSRobert Mustacchi it is not DWARF register number but 329bc1f688bSRobert Mustacchi a place holder indicating the register has the same 330bc1f688bSRobert Mustacchi value in the previous frame. 331*4d9fdb46SRobert Mustacchi 332bc1f688bSRobert Mustacchi DW_FRAME_UNDEFINED_VAL, DW_FRAME_SAME_VAL are 333bc1f688bSRobert Mustacchi only present at libdwarf runtime. Never on disk. 334bc1f688bSRobert Mustacchi DW_FRAME_* Values present on disk are in dwarf.h 335bc1f688bSRobert Mustacchi 336bc1f688bSRobert Mustacchi Otherwise: the register number is a DWARF register number 337bc1f688bSRobert Mustacchi (see ABI documents for how this translates to hardware/ 338bc1f688bSRobert Mustacchi software register numbers in the machine hardware) 339bc1f688bSRobert Mustacchi and the following applies: 340bc1f688bSRobert Mustacchi 341bc1f688bSRobert Mustacchi if dw_value_type == DW_EXPR_OFFSET (the only case for dwarf2): 342bc1f688bSRobert Mustacchi If dw_offset_relevant is non-zero, then 343bc1f688bSRobert Mustacchi the value is stored at at the address CFA+N where 344bc1f688bSRobert Mustacchi N is a signed offset. 345bc1f688bSRobert Mustacchi Rule: Offset(N) 346bc1f688bSRobert Mustacchi If dw_offset_relevant is zero, then the value of the register 347bc1f688bSRobert Mustacchi is the value of (DWARF) register number dw_regnum. 348bc1f688bSRobert Mustacchi Rule: register(F) 349bc1f688bSRobert Mustacchi Other values of dw_value_type are an error. 350bc1f688bSRobert Mustacchi */ 351bc1f688bSRobert Mustacchi Dwarf_Small dw_offset_relevant; 352bc1f688bSRobert Mustacchi 353bc1f688bSRobert Mustacchi /* For DWARF2, always 0 */ 354bc1f688bSRobert Mustacchi Dwarf_Small dw_value_type; 355bc1f688bSRobert Mustacchi 356bc1f688bSRobert Mustacchi Dwarf_Half dw_regnum; 357bc1f688bSRobert Mustacchi 358bc1f688bSRobert Mustacchi /* The data type here should the larger of Dwarf_Addr 359bc1f688bSRobert Mustacchi and Dwarf_Unsigned and Dwarf_Signed. */ 360bc1f688bSRobert Mustacchi Dwarf_Addr dw_offset; 361bc1f688bSRobert Mustacchi } Dwarf_Regtable_Entry; 362bc1f688bSRobert Mustacchi 363bc1f688bSRobert Mustacchi typedef struct Dwarf_Regtable_s { 364bc1f688bSRobert Mustacchi struct Dwarf_Regtable_Entry_s rules[DW_REG_TABLE_SIZE]; 365bc1f688bSRobert Mustacchi } Dwarf_Regtable; 366bc1f688bSRobert Mustacchi 367bc1f688bSRobert Mustacchi /* opaque type. Functional interface shown later. */ 368bc1f688bSRobert Mustacchi struct Dwarf_Reg_value3_s; 369bc1f688bSRobert Mustacchi typedef struct Dwarf_Reg_value3_s Dwarf_Reg_Value3; 370bc1f688bSRobert Mustacchi 371bc1f688bSRobert Mustacchi typedef struct Dwarf_Regtable_Entry3_s { 372bc1f688bSRobert Mustacchi /* For each index i (naming a hardware register with dwarf number 373bc1f688bSRobert Mustacchi i) the following is true and defines the value of that register: 374bc1f688bSRobert Mustacchi 375bc1f688bSRobert Mustacchi If dw_regnum is Register DW_FRAME_UNDEFINED_VAL 376bc1f688bSRobert Mustacchi it is not DWARF register number but 377bc1f688bSRobert Mustacchi a place holder indicating the register has no defined value. 378bc1f688bSRobert Mustacchi If dw_regnum is Register DW_FRAME_SAME_VAL 379bc1f688bSRobert Mustacchi it is not DWARF register number but 380bc1f688bSRobert Mustacchi a place holder indicating the register has the same 381bc1f688bSRobert Mustacchi value in the previous frame. 382*4d9fdb46SRobert Mustacchi 383bc1f688bSRobert Mustacchi DW_FRAME_UNDEFINED_VAL, DW_FRAME_SAME_VAL and 384bc1f688bSRobert Mustacchi DW_FRAME_CFA_COL3 are only present at libdwarf runtime. 385bc1f688bSRobert Mustacchi Never on disk. 386bc1f688bSRobert Mustacchi DW_FRAME_* Values present on disk are in dwarf.h 387bc1f688bSRobert Mustacchi Because DW_FRAME_SAME_VAL and DW_FRAME_UNDEFINED_VAL 388*4d9fdb46SRobert Mustacchi and DW_FRAME_CFA_COL3 are definable at runtime 389bc1f688bSRobert Mustacchi consider the names symbolic in this comment, not absolute. 390bc1f688bSRobert Mustacchi 391bc1f688bSRobert Mustacchi Otherwise: the register number is a DWARF register number 392bc1f688bSRobert Mustacchi (see ABI documents for how this translates to hardware/ 393bc1f688bSRobert Mustacchi software register numbers in the machine hardware) 394bc1f688bSRobert Mustacchi and the following applies: 395bc1f688bSRobert Mustacchi 396bc1f688bSRobert Mustacchi In a cfa-defining entry (rt3_cfa_rule) the regnum is the 397bc1f688bSRobert Mustacchi CFA 'register number'. Which is some 'normal' register, 398bc1f688bSRobert Mustacchi not DW_FRAME_CFA_COL3, nor DW_FRAME_SAME_VAL, nor 399bc1f688bSRobert Mustacchi DW_FRAME_UNDEFINED_VAL. 400bc1f688bSRobert Mustacchi 401bc1f688bSRobert Mustacchi If dw_value_type == DW_EXPR_OFFSET (the only possible case for 402bc1f688bSRobert Mustacchi dwarf2): 403bc1f688bSRobert Mustacchi If dw_offset_relevant is non-zero, then 404bc1f688bSRobert Mustacchi the value is stored at at the address 405bc1f688bSRobert Mustacchi CFA+N where N is a signed offset. 406bc1f688bSRobert Mustacchi dw_regnum is the cfa register rule which means 407bc1f688bSRobert Mustacchi one ignores dw_regnum and uses the CFA appropriately. 408bc1f688bSRobert Mustacchi So dw_offset_or_block_len is a signed value, really, 409bc1f688bSRobert Mustacchi and must be printed/evaluated as such. 410bc1f688bSRobert Mustacchi Rule: Offset(N) 411bc1f688bSRobert Mustacchi If dw_offset_relevant is zero, then the value of the register 412bc1f688bSRobert Mustacchi is the value of (DWARF) register number dw_regnum. 413bc1f688bSRobert Mustacchi Rule: register(R) 414bc1f688bSRobert Mustacchi If dw_value_type == DW_EXPR_VAL_OFFSET 415bc1f688bSRobert Mustacchi the value of this register is CFA +N where N is a signed offset. 416bc1f688bSRobert Mustacchi dw_regnum is the cfa register rule which means 417bc1f688bSRobert Mustacchi one ignores dw_regnum and uses the CFA appropriately. 418bc1f688bSRobert Mustacchi Rule: val_offset(N) 419bc1f688bSRobert Mustacchi If dw_value_type == DW_EXPR_EXPRESSION 420bc1f688bSRobert Mustacchi The value of the register is the value at the address 421bc1f688bSRobert Mustacchi computed by evaluating the DWARF expression E. 422bc1f688bSRobert Mustacchi Rule: expression(E) 423bc1f688bSRobert Mustacchi The expression E byte stream is pointed to by dw_block_ptr. 424bc1f688bSRobert Mustacchi The expression length in bytes is given by 425bc1f688bSRobert Mustacchi dw_offset_or_block_len. 426bc1f688bSRobert Mustacchi If dw_value_type == DW_EXPR_VAL_EXPRESSION 427bc1f688bSRobert Mustacchi The value of the register is the value 428bc1f688bSRobert Mustacchi computed by evaluating the DWARF expression E. 429bc1f688bSRobert Mustacchi Rule: val_expression(E) 430bc1f688bSRobert Mustacchi The expression E byte stream is pointed to by dw_block_ptr. 431bc1f688bSRobert Mustacchi The expression length in bytes is given by 432bc1f688bSRobert Mustacchi dw_offset_or_block_len. 433bc1f688bSRobert Mustacchi Other values of dw_value_type are an error. 434bc1f688bSRobert Mustacchi */ 435bc1f688bSRobert Mustacchi Dwarf_Small dw_offset_relevant; 436bc1f688bSRobert Mustacchi Dwarf_Small dw_value_type; 437bc1f688bSRobert Mustacchi Dwarf_Half dw_regnum; 438bc1f688bSRobert Mustacchi Dwarf_Unsigned dw_offset_or_block_len; 439bc1f688bSRobert Mustacchi Dwarf_Ptr dw_block_ptr; 440bc1f688bSRobert Mustacchi 441bc1f688bSRobert Mustacchi }Dwarf_Regtable_Entry3; 442bc1f688bSRobert Mustacchi 443bc1f688bSRobert Mustacchi /* For the DWARF3 version, moved the DW_FRAME_CFA_COL 444bc1f688bSRobert Mustacchi out of the array and into its own struct. 445bc1f688bSRobert Mustacchi Having it part of the array is not very easy to work 446bc1f688bSRobert Mustacchi with from a portability point of view: changing 447bc1f688bSRobert Mustacchi the number for every architecture is a pain (if one fails 448bc1f688bSRobert Mustacchi to set it correctly a register rule gets clobbered when 449bc1f688bSRobert Mustacchi setting CFA). With MIPS it just happened to be easy to use 450bc1f688bSRobert Mustacchi DW_FRAME_CFA_COL (it was wrong conceptually but it was easy...). 451bc1f688bSRobert Mustacchi 452bc1f688bSRobert Mustacchi rt3_rules and rt3_reg_table_size must be filled in before 453bc1f688bSRobert Mustacchi calling libdwarf. Filled in with a pointer to an array 454bc1f688bSRobert Mustacchi (pointer and array set up by the calling application) 455bc1f688bSRobert Mustacchi of rt3_reg_table_size Dwarf_Regtable_Entry3_s structs. 456bc1f688bSRobert Mustacchi libdwarf does not allocate or deallocate space for the 457bc1f688bSRobert Mustacchi rules, you must do so. libdwarf will initialize the 458bc1f688bSRobert Mustacchi contents rules array, you do not need to do so (though 459bc1f688bSRobert Mustacchi if you choose to initialize the array somehow that is ok: 460bc1f688bSRobert Mustacchi libdwarf will overwrite your initializations with its own). 461bc1f688bSRobert Mustacchi 462bc1f688bSRobert Mustacchi */ 463bc1f688bSRobert Mustacchi typedef struct Dwarf_Regtable3_s { 464bc1f688bSRobert Mustacchi struct Dwarf_Regtable_Entry3_s rt3_cfa_rule; 465bc1f688bSRobert Mustacchi 466bc1f688bSRobert Mustacchi Dwarf_Half rt3_reg_table_size; 467bc1f688bSRobert Mustacchi struct Dwarf_Regtable_Entry3_s * rt3_rules; 468bc1f688bSRobert Mustacchi } Dwarf_Regtable3; 469bc1f688bSRobert Mustacchi 470bc1f688bSRobert Mustacchi 471bc1f688bSRobert Mustacchi /* Use for DW_EPXR_STANDARD., DW_EXPR_VAL_OFFSET. 472bc1f688bSRobert Mustacchi Returns DW_DLV_OK if the value is available. 473bc1f688bSRobert Mustacchi If DW_DLV_OK returns the regnum and offset thru the pointers 474bc1f688bSRobert Mustacchi (which the consumer must use appropriately). 475bc1f688bSRobert Mustacchi */ 476bc1f688bSRobert Mustacchi int dwarf_frame_get_reg_register(struct Dwarf_Regtable_Entry3_s *reg_in, 477bc1f688bSRobert Mustacchi Dwarf_Small *offset_relevant, 478bc1f688bSRobert Mustacchi Dwarf_Half *regnum_out, 479bc1f688bSRobert Mustacchi Dwarf_Signed *offset_out); 480bc1f688bSRobert Mustacchi 481bc1f688bSRobert Mustacchi /* Use for DW_EXPR_EXPRESSION, DW_EXPR_VAL_EXPRESSION. 482bc1f688bSRobert Mustacchi Returns DW_DLV_OK if the value is available. 483bc1f688bSRobert Mustacchi The caller must pass in the address of a valid 484bc1f688bSRobert Mustacchi Dwarf_Block (the caller need not initialize it). 485bc1f688bSRobert Mustacchi */ 486bc1f688bSRobert Mustacchi int dwarf_frame_get_reg_expression(struct Dwarf_Regtable_Entry3_s *reg_in, 487bc1f688bSRobert Mustacchi Dwarf_Block *block_out); 488bc1f688bSRobert Mustacchi 489bc1f688bSRobert Mustacchi 490bc1f688bSRobert Mustacchi /* For DW_DLC_SYMBOLIC_RELOCATIONS output to caller 491bc1f688bSRobert Mustacchi v2, adding drd_length: some relocations are 4 and 492bc1f688bSRobert Mustacchi some 8 bytes (pointers are 8, section offsets 4) in 493bc1f688bSRobert Mustacchi some dwarf environments. (MIPS relocations are all one 494bc1f688bSRobert Mustacchi size in any given ABI.) Changing drd_type to an unsigned char 495bc1f688bSRobert Mustacchi to keep struct size down. 496bc1f688bSRobert Mustacchi */ 497bc1f688bSRobert Mustacchi enum Dwarf_Rel_Type { 498bc1f688bSRobert Mustacchi dwarf_drt_none, /* Should not get to caller */ 499bc1f688bSRobert Mustacchi dwarf_drt_data_reloc, /* Simple normal relocation. */ 500bc1f688bSRobert Mustacchi dwarf_drt_segment_rel, /* Special reloc, exceptions. */ 501bc1f688bSRobert Mustacchi /* dwarf_drt_first_of_length_pair and drt_second 502bc1f688bSRobert Mustacchi are for for the .word end - begin case. */ 503bc1f688bSRobert Mustacchi dwarf_drt_first_of_length_pair, 504bc1f688bSRobert Mustacchi dwarf_drt_second_of_length_pair 505bc1f688bSRobert Mustacchi }; 506bc1f688bSRobert Mustacchi 507bc1f688bSRobert Mustacchi typedef struct Dwarf_P_Marker_s * Dwarf_P_Marker; 508bc1f688bSRobert Mustacchi struct Dwarf_P_Marker_s { 509bc1f688bSRobert Mustacchi Dwarf_Unsigned ma_marker; 510bc1f688bSRobert Mustacchi Dwarf_Unsigned ma_offset; 511bc1f688bSRobert Mustacchi }; 512bc1f688bSRobert Mustacchi 513bc1f688bSRobert Mustacchi typedef struct Dwarf_Relocation_Data_s * Dwarf_Relocation_Data; 514bc1f688bSRobert Mustacchi struct Dwarf_Relocation_Data_s { 515bc1f688bSRobert Mustacchi unsigned char drd_type; /* Cast to/from Dwarf_Rel_Type 516bc1f688bSRobert Mustacchi to keep size small in struct. */ 517bc1f688bSRobert Mustacchi unsigned char drd_length; /* Length in bytes of data being 518bc1f688bSRobert Mustacchi relocated. 4 for 32bit data, 519bc1f688bSRobert Mustacchi 8 for 64bit data. */ 520bc1f688bSRobert Mustacchi Dwarf_Unsigned drd_offset; /* Where the data to reloc is. */ 521bc1f688bSRobert Mustacchi Dwarf_Unsigned drd_symbol_index; 522bc1f688bSRobert Mustacchi }; 523bc1f688bSRobert Mustacchi 524bc1f688bSRobert Mustacchi typedef struct Dwarf_P_String_Attr_s * Dwarf_P_String_Attr; 525bc1f688bSRobert Mustacchi struct Dwarf_P_String_Attr_s { 526bc1f688bSRobert Mustacchi Dwarf_Unsigned sa_offset; /* Offset of string attribute data */ 527bc1f688bSRobert Mustacchi Dwarf_Unsigned sa_nbytes; 528bc1f688bSRobert Mustacchi }; 529bc1f688bSRobert Mustacchi 530bc1f688bSRobert Mustacchi 531bc1f688bSRobert Mustacchi /* Opaque types for Consumer Library. */ 532bc1f688bSRobert Mustacchi typedef struct Dwarf_Debug_s* Dwarf_Debug; 533bc1f688bSRobert Mustacchi typedef struct Dwarf_Die_s* Dwarf_Die; 534bc1f688bSRobert Mustacchi typedef struct Dwarf_Line_s* Dwarf_Line; 535bc1f688bSRobert Mustacchi typedef struct Dwarf_Global_s* Dwarf_Global; 536bc1f688bSRobert Mustacchi typedef struct Dwarf_Func_s* Dwarf_Func; 537bc1f688bSRobert Mustacchi typedef struct Dwarf_Type_s* Dwarf_Type; 538bc1f688bSRobert Mustacchi typedef struct Dwarf_Var_s* Dwarf_Var; 539bc1f688bSRobert Mustacchi typedef struct Dwarf_Weak_s* Dwarf_Weak; 540bc1f688bSRobert Mustacchi typedef struct Dwarf_Error_s* Dwarf_Error; 541bc1f688bSRobert Mustacchi typedef struct Dwarf_Attribute_s* Dwarf_Attribute; 542bc1f688bSRobert Mustacchi typedef struct Dwarf_Abbrev_s* Dwarf_Abbrev; 543bc1f688bSRobert Mustacchi typedef struct Dwarf_Fde_s* Dwarf_Fde; 544bc1f688bSRobert Mustacchi typedef struct Dwarf_Cie_s* Dwarf_Cie; 545bc1f688bSRobert Mustacchi typedef struct Dwarf_Arange_s* Dwarf_Arange; 546*4d9fdb46SRobert Mustacchi typedef struct Dwarf_Gdbindex_s* Dwarf_Gdbindex; 547*4d9fdb46SRobert Mustacchi struct Dwarf_Xu_Index_Header_s; 548*4d9fdb46SRobert Mustacchi typedef struct Dwarf_Xu_Index_Header_s *Dwarf_Xu_Index_Header; 549*4d9fdb46SRobert Mustacchi struct Dwarf_Line_Context_s; 550*4d9fdb46SRobert Mustacchi typedef struct Dwarf_Line_Context_s *Dwarf_Line_Context; 551*4d9fdb46SRobert Mustacchi struct Dwarf_Macro_Context_s; 552*4d9fdb46SRobert Mustacchi typedef struct Dwarf_Macro_Context_s *Dwarf_Macro_Context; 553*4d9fdb46SRobert Mustacchi struct Dwarf_Dnames_Head_s; 554*4d9fdb46SRobert Mustacchi typedef struct Dwarf_Dnames_Head_s *Dwarf_Dnames_Head; 555*4d9fdb46SRobert Mustacchi 556bc1f688bSRobert Mustacchi 557bc1f688bSRobert Mustacchi /* Opaque types for Producer Library. */ 558bc1f688bSRobert Mustacchi typedef struct Dwarf_P_Debug_s* Dwarf_P_Debug; 559bc1f688bSRobert Mustacchi typedef struct Dwarf_P_Die_s* Dwarf_P_Die; 560bc1f688bSRobert Mustacchi typedef struct Dwarf_P_Attribute_s* Dwarf_P_Attribute; 561bc1f688bSRobert Mustacchi typedef struct Dwarf_P_Fde_s* Dwarf_P_Fde; 562bc1f688bSRobert Mustacchi typedef struct Dwarf_P_Expr_s* Dwarf_P_Expr; 563bc1f688bSRobert Mustacchi typedef Dwarf_Unsigned Dwarf_Tag; 564bc1f688bSRobert Mustacchi 565bc1f688bSRobert Mustacchi 566bc1f688bSRobert Mustacchi /* error handler function 567bc1f688bSRobert Mustacchi */ 568bc1f688bSRobert Mustacchi typedef void (*Dwarf_Handler)(Dwarf_Error /*error*/, Dwarf_Ptr /*errarg*/); 569bc1f688bSRobert Mustacchi 570bc1f688bSRobert Mustacchi 571bc1f688bSRobert Mustacchi /* Begin libdwarf Object File Interface declarations. 572bc1f688bSRobert Mustacchi 573bc1f688bSRobert Mustacchi As of February 2008 there are multiple dwarf_reader object access 574bc1f688bSRobert Mustacchi initialization methods available: 575bc1f688bSRobert Mustacchi The traditional dwarf_elf_init() and dwarf_init() and dwarf_finish() 576bc1f688bSRobert Mustacchi which assume libelf and POSIX file access. 577bc1f688bSRobert Mustacchi An object-file and library agnostic dwarf_object_init() and dwarf_object_finish() 578bc1f688bSRobert Mustacchi which allow the coder to provide object access routines 579bc1f688bSRobert Mustacchi abstracting away the elf interface. So there is no dependence in the 580bc1f688bSRobert Mustacchi reader code on the object format and no dependence on libelf. 581bc1f688bSRobert Mustacchi See the code in dwarf_elf_access.c and dwarf_original_elf_init.c 582bc1f688bSRobert Mustacchi to see an example of initializing the structures mentioned below. 583bc1f688bSRobert Mustacchi 584bc1f688bSRobert Mustacchi Projects using dwarf_elf_init() or dwarf_init() can ignore 585bc1f688bSRobert Mustacchi the Dwarf_Obj_Access* structures entirely as all these details 586bc1f688bSRobert Mustacchi are completed for you. 587bc1f688bSRobert Mustacchi 588*4d9fdb46SRobert Mustacchi As of March 2017 additional 589*4d9fdb46SRobert Mustacchi functions dwarf_elf_init_b 590*4d9fdb46SRobert Mustacchi and dwarf_init_b 591*4d9fdb46SRobert Mustacchi and dwarf_object_init_b 592*4d9fdb46SRobert Mustacchi add a groupnumber argument so DWARF5 593*4d9fdb46SRobert Mustacchi split-dwarf sections can be accessed. 594bc1f688bSRobert Mustacchi */ 595bc1f688bSRobert Mustacchi 596bc1f688bSRobert Mustacchi typedef struct Dwarf_Obj_Access_Interface_s Dwarf_Obj_Access_Interface; 597bc1f688bSRobert Mustacchi typedef struct Dwarf_Obj_Access_Methods_s Dwarf_Obj_Access_Methods; 598bc1f688bSRobert Mustacchi typedef struct Dwarf_Obj_Access_Section_s Dwarf_Obj_Access_Section; 599bc1f688bSRobert Mustacchi 600bc1f688bSRobert Mustacchi 601bc1f688bSRobert Mustacchi /* Used in the get_section interface function 602bc1f688bSRobert Mustacchi in Dwarf_Obj_Access_Section_s. Since libdwarf 603bc1f688bSRobert Mustacchi depends on standard DWARF section names an object 604bc1f688bSRobert Mustacchi format that has no such names (but has some 605bc1f688bSRobert Mustacchi method of setting up 'sections equivalents') 606bc1f688bSRobert Mustacchi must arrange to return standard DWARF section 607bc1f688bSRobert Mustacchi names in the 'name' field. libdwarf does 608bc1f688bSRobert Mustacchi not free the strings in 'name'. */ 609bc1f688bSRobert Mustacchi struct Dwarf_Obj_Access_Section_s { 610*4d9fdb46SRobert Mustacchi /* addr is the virtual address of the first byte of 611*4d9fdb46SRobert Mustacchi the section data. Usually zero when the address 612*4d9fdb46SRobert Mustacchi makes no sense for a given section. */ 613bc1f688bSRobert Mustacchi Dwarf_Addr addr; 614*4d9fdb46SRobert Mustacchi 615*4d9fdb46SRobert Mustacchi /* Section type. */ 616*4d9fdb46SRobert Mustacchi Dwarf_Unsigned type; 617*4d9fdb46SRobert Mustacchi 618*4d9fdb46SRobert Mustacchi /* Size in bytes of the section. */ 619bc1f688bSRobert Mustacchi Dwarf_Unsigned size; 620*4d9fdb46SRobert Mustacchi 621*4d9fdb46SRobert Mustacchi /* Having an accurate section name makes debugging of libdwarf easier. 622*4d9fdb46SRobert Mustacchi and is essential to find the .debug_ sections. */ 623bc1f688bSRobert Mustacchi const char* name; 624bc1f688bSRobert Mustacchi /* Set link to zero if it is meaningless. If non-zero 625bc1f688bSRobert Mustacchi it should be a link to a rela section or from symtab 626bc1f688bSRobert Mustacchi to strtab. In Elf it is sh_link. */ 627bc1f688bSRobert Mustacchi Dwarf_Unsigned link; 628*4d9fdb46SRobert Mustacchi 629*4d9fdb46SRobert Mustacchi /* The section header index of the section to which the 630*4d9fdb46SRobert Mustacchi relocation applies. In Elf it is sh_info. */ 631*4d9fdb46SRobert Mustacchi Dwarf_Unsigned info; 632*4d9fdb46SRobert Mustacchi 633*4d9fdb46SRobert Mustacchi /* Elf sections that are tables have a non-zero entrysize so 634*4d9fdb46SRobert Mustacchi the count of entries can be calculated even without 635*4d9fdb46SRobert Mustacchi the right structure definition. If your object format 636*4d9fdb46SRobert Mustacchi does not have this data leave this zero. */ 637*4d9fdb46SRobert Mustacchi Dwarf_Unsigned entrysize; 638bc1f688bSRobert Mustacchi }; 639bc1f688bSRobert Mustacchi 640bc1f688bSRobert Mustacchi /* Returned by the get_endianness function in 641bc1f688bSRobert Mustacchi Dwarf_Obj_Access_Methods_s. */ 642bc1f688bSRobert Mustacchi typedef enum { 643bc1f688bSRobert Mustacchi DW_OBJECT_MSB, 644bc1f688bSRobert Mustacchi DW_OBJECT_LSB 645bc1f688bSRobert Mustacchi } Dwarf_Endianness; 646bc1f688bSRobert Mustacchi 647bc1f688bSRobert Mustacchi /* The functions we need to access object data from libdwarf are declared here. 648bc1f688bSRobert Mustacchi 649bc1f688bSRobert Mustacchi In these function pointer declarations 650bc1f688bSRobert Mustacchi 'void *obj' is intended to be a pointer (the object field in 651bc1f688bSRobert Mustacchi Dwarf_Obj_Access_Interface_s) 652bc1f688bSRobert Mustacchi that hides the library-specific and object-specific data that makes 653bc1f688bSRobert Mustacchi it possible to handle multiple object formats and multiple libraries. 654bc1f688bSRobert Mustacchi It's not required that one handles multiple such in a single libdwarf 655bc1f688bSRobert Mustacchi archive/shared-library (but not ruled out either). 656bc1f688bSRobert Mustacchi See dwarf_elf_object_access_internals_t and dwarf_elf_access.c 657bc1f688bSRobert Mustacchi for an example. 658bc1f688bSRobert Mustacchi 659bc1f688bSRobert Mustacchi */ 660bc1f688bSRobert Mustacchi struct Dwarf_Obj_Access_Methods_s { 661*4d9fdb46SRobert Mustacchi /* 662*4d9fdb46SRobert Mustacchi get_section_info 663*4d9fdb46SRobert Mustacchi 664*4d9fdb46SRobert Mustacchi Get address, size, and name info about a section. 665*4d9fdb46SRobert Mustacchi 666*4d9fdb46SRobert Mustacchi Parameters 667*4d9fdb46SRobert Mustacchi section_index - Zero-based index. 668*4d9fdb46SRobert Mustacchi return_section - Pointer to a structure in which section info 669*4d9fdb46SRobert Mustacchi will be placed. Caller must provide a valid pointer to a 670*4d9fdb46SRobert Mustacchi structure area. The structure's contents will be overwritten 671*4d9fdb46SRobert Mustacchi by the call to get_section_info. 672*4d9fdb46SRobert Mustacchi error - A pointer to an integer in which an error code may be stored. 673*4d9fdb46SRobert Mustacchi 674*4d9fdb46SRobert Mustacchi Return 675*4d9fdb46SRobert Mustacchi DW_DLV_OK - Everything ok. 676*4d9fdb46SRobert Mustacchi DW_DLV_ERROR - Error occurred. Use 'error' to determine the 677*4d9fdb46SRobert Mustacchi libdwarf defined error. 678*4d9fdb46SRobert Mustacchi DW_DLV_NO_ENTRY - No such section. */ 679bc1f688bSRobert Mustacchi int (*get_section_info)(void* obj, Dwarf_Half section_index, 680bc1f688bSRobert Mustacchi Dwarf_Obj_Access_Section* return_section, int* error); 681*4d9fdb46SRobert Mustacchi /* 682*4d9fdb46SRobert Mustacchi get_byte_order 683bc1f688bSRobert Mustacchi 684*4d9fdb46SRobert Mustacchi Get whether the object file represented by this interface is big-endian 685*4d9fdb46SRobert Mustacchi (DW_OBJECT_MSB) or little endian (DW_OBJECT_LSB). 686*4d9fdb46SRobert Mustacchi 687*4d9fdb46SRobert Mustacchi Parameters 688*4d9fdb46SRobert Mustacchi obj - Equivalent to 'this' in OO languages. 689*4d9fdb46SRobert Mustacchi 690*4d9fdb46SRobert Mustacchi Return 691*4d9fdb46SRobert Mustacchi Endianness of object. Cannot fail. */ 692*4d9fdb46SRobert Mustacchi Dwarf_Endianness (*get_byte_order)(void* obj); 693*4d9fdb46SRobert Mustacchi /* 694*4d9fdb46SRobert Mustacchi get_length_size 695*4d9fdb46SRobert Mustacchi 696*4d9fdb46SRobert Mustacchi Get the size of a length field in the underlying object file. 697*4d9fdb46SRobert Mustacchi libdwarf currently supports * 4 and 8 byte sizes, but may 698*4d9fdb46SRobert Mustacchi support larger in the future. 699*4d9fdb46SRobert Mustacchi Perhaps the return type should be an enumeration? 700*4d9fdb46SRobert Mustacchi 701*4d9fdb46SRobert Mustacchi Parameters 702*4d9fdb46SRobert Mustacchi obj - Equivalent to 'this' in OO languages. 703*4d9fdb46SRobert Mustacchi 704*4d9fdb46SRobert Mustacchi Return 705*4d9fdb46SRobert Mustacchi Size of length. Cannot fail. */ 706*4d9fdb46SRobert Mustacchi Dwarf_Small (*get_length_size)(void* obj); 707*4d9fdb46SRobert Mustacchi /* 708*4d9fdb46SRobert Mustacchi get_pointer_size 709*4d9fdb46SRobert Mustacchi 710*4d9fdb46SRobert Mustacchi Get the size of a pointer field in the underlying object file. 711*4d9fdb46SRobert Mustacchi libdwarf currently supports 4 and 8 byte sizes. 712*4d9fdb46SRobert Mustacchi Perhaps the return type should be an enumeration? 713*4d9fdb46SRobert Mustacchi 714*4d9fdb46SRobert Mustacchi Return 715*4d9fdb46SRobert Mustacchi Size of pointer. Cannot fail. */ 716bc1f688bSRobert Mustacchi Dwarf_Small (*get_pointer_size)(void* obj); 717*4d9fdb46SRobert Mustacchi /* 718*4d9fdb46SRobert Mustacchi get_section_count 719*4d9fdb46SRobert Mustacchi 720*4d9fdb46SRobert Mustacchi Get the number of sections in the object file. 721*4d9fdb46SRobert Mustacchi 722*4d9fdb46SRobert Mustacchi Parameters 723*4d9fdb46SRobert Mustacchi 724*4d9fdb46SRobert Mustacchi Return 725*4d9fdb46SRobert Mustacchi Number of sections */ 726bc1f688bSRobert Mustacchi Dwarf_Unsigned (*get_section_count)(void* obj); 727*4d9fdb46SRobert Mustacchi /* 728*4d9fdb46SRobert Mustacchi load_section 729*4d9fdb46SRobert Mustacchi 730*4d9fdb46SRobert Mustacchi Get a pointer to an array of bytes that represent the section. 731*4d9fdb46SRobert Mustacchi 732*4d9fdb46SRobert Mustacchi Parameters 733*4d9fdb46SRobert Mustacchi section_index - Zero-based index. 734*4d9fdb46SRobert Mustacchi return_data - The address of a pointer to which the section data block 735*4d9fdb46SRobert Mustacchi will be assigned. 736*4d9fdb46SRobert Mustacchi error - Pointer to an integer for returning libdwarf-defined 737*4d9fdb46SRobert Mustacchi error numbers. 738*4d9fdb46SRobert Mustacchi 739*4d9fdb46SRobert Mustacchi Return 740*4d9fdb46SRobert Mustacchi DW_DLV_OK - No error. 741*4d9fdb46SRobert Mustacchi DW_DLV_ERROR - Error. Use 'error' to indicate a libdwarf-defined 742*4d9fdb46SRobert Mustacchi error number. 743*4d9fdb46SRobert Mustacchi DW_DLV_NO_ENTRY - No such section. */ 744bc1f688bSRobert Mustacchi int (*load_section)(void* obj, Dwarf_Half section_index, 745bc1f688bSRobert Mustacchi Dwarf_Small** return_data, int* error); 746bc1f688bSRobert Mustacchi 747bc1f688bSRobert Mustacchi /** 748*4d9fdb46SRobert Mustacchi relocate_a_section 749*4d9fdb46SRobert Mustacchi If relocations are not supported leave this pointer NULL. 750*4d9fdb46SRobert Mustacchi 751*4d9fdb46SRobert Mustacchi Get a pointer to an array of bytes that represent the section. 752*4d9fdb46SRobert Mustacchi 753*4d9fdb46SRobert Mustacchi Parameters 754*4d9fdb46SRobert Mustacchi section_index - Zero-based index of the section to be relocated. 755*4d9fdb46SRobert Mustacchi error - Pointer to an integer for returning libdwarf-defined 756*4d9fdb46SRobert Mustacchi error numbers. 757*4d9fdb46SRobert Mustacchi 758*4d9fdb46SRobert Mustacchi Return 759*4d9fdb46SRobert Mustacchi DW_DLV_OK - No error. 760*4d9fdb46SRobert Mustacchi DW_DLV_ERROR - Error. Use 'error' to indicate a libdwarf-defined 761*4d9fdb46SRobert Mustacchi error number. 762*4d9fdb46SRobert Mustacchi DW_DLV_NO_ENTRY - No such section. */ 763bc1f688bSRobert Mustacchi int (*relocate_a_section)(void* obj, Dwarf_Half section_index, 764bc1f688bSRobert Mustacchi Dwarf_Debug dbg, 765bc1f688bSRobert Mustacchi int* error); 766bc1f688bSRobert Mustacchi 767bc1f688bSRobert Mustacchi }; 768bc1f688bSRobert Mustacchi 769bc1f688bSRobert Mustacchi 770bc1f688bSRobert Mustacchi 771bc1f688bSRobert Mustacchi /* These structures are allocated and deallocated by your code 772bc1f688bSRobert Mustacchi when you are using the libdwarf Object File Interface 773*4d9fdb46SRobert Mustacchi [dwarf_object_init and dwarf_object_finish)] directly. 774*4d9fdb46SRobert Mustacchi dwarf_object_finish) does not free 775bc1f688bSRobert Mustacchi struct Dwarf_Obj_Access_Interface_s or its content. 776bc1f688bSRobert Mustacchi (libdwarf does record a pointer to this struct: you must 777bc1f688bSRobert Mustacchi ensure that pointer remains valid for as long as 778bc1f688bSRobert Mustacchi a libdwarf instance is open (meaning 779*4d9fdb46SRobert Mustacchi after dwarf_init) and before dwarf_finish)). 780bc1f688bSRobert Mustacchi 781bc1f688bSRobert Mustacchi If you are reading Elf objects and libelf use dwarf_init() 782bc1f688bSRobert Mustacchi or dwarf_elf_init() which take care of these details. 783bc1f688bSRobert Mustacchi */ 784bc1f688bSRobert Mustacchi struct Dwarf_Obj_Access_Interface_s { 785bc1f688bSRobert Mustacchi /* object is a void* as it hides the data the object access routines 786bc1f688bSRobert Mustacchi need (which varies by library in use and object format). 787bc1f688bSRobert Mustacchi */ 788bc1f688bSRobert Mustacchi void* object; 789bc1f688bSRobert Mustacchi const Dwarf_Obj_Access_Methods * methods; 790bc1f688bSRobert Mustacchi }; 791bc1f688bSRobert Mustacchi 792bc1f688bSRobert Mustacchi /* End libdwarf Object File Interface */ 793bc1f688bSRobert Mustacchi 794bc1f688bSRobert Mustacchi /* 795bc1f688bSRobert Mustacchi Dwarf_dealloc() alloc_type arguments. 796bc1f688bSRobert Mustacchi Argument points to: 797bc1f688bSRobert Mustacchi */ 798bc1f688bSRobert Mustacchi #define DW_DLA_STRING 0x01 /* char* */ 799bc1f688bSRobert Mustacchi #define DW_DLA_LOC 0x02 /* Dwarf_Loc */ 800bc1f688bSRobert Mustacchi #define DW_DLA_LOCDESC 0x03 /* Dwarf_Locdesc */ 801bc1f688bSRobert Mustacchi #define DW_DLA_ELLIST 0x04 /* Dwarf_Ellist (not used)*/ 802bc1f688bSRobert Mustacchi #define DW_DLA_BOUNDS 0x05 /* Dwarf_Bounds (not used) */ 803bc1f688bSRobert Mustacchi #define DW_DLA_BLOCK 0x06 /* Dwarf_Block */ 804bc1f688bSRobert Mustacchi #define DW_DLA_DEBUG 0x07 /* Dwarf_Debug */ 805bc1f688bSRobert Mustacchi #define DW_DLA_DIE 0x08 /* Dwarf_Die */ 806bc1f688bSRobert Mustacchi #define DW_DLA_LINE 0x09 /* Dwarf_Line */ 807bc1f688bSRobert Mustacchi #define DW_DLA_ATTR 0x0a /* Dwarf_Attribute */ 808bc1f688bSRobert Mustacchi #define DW_DLA_TYPE 0x0b /* Dwarf_Type (not used) */ 809bc1f688bSRobert Mustacchi #define DW_DLA_SUBSCR 0x0c /* Dwarf_Subscr (not used) */ 810bc1f688bSRobert Mustacchi #define DW_DLA_GLOBAL 0x0d /* Dwarf_Global */ 811bc1f688bSRobert Mustacchi #define DW_DLA_ERROR 0x0e /* Dwarf_Error */ 812bc1f688bSRobert Mustacchi #define DW_DLA_LIST 0x0f /* a list */ 813bc1f688bSRobert Mustacchi #define DW_DLA_LINEBUF 0x10 /* Dwarf_Line* (not used) */ 814bc1f688bSRobert Mustacchi #define DW_DLA_ARANGE 0x11 /* Dwarf_Arange */ 815bc1f688bSRobert Mustacchi #define DW_DLA_ABBREV 0x12 /* Dwarf_Abbrev */ 816bc1f688bSRobert Mustacchi #define DW_DLA_FRAME_OP 0x13 /* Dwarf_Frame_Op */ 817bc1f688bSRobert Mustacchi #define DW_DLA_CIE 0x14 /* Dwarf_Cie */ 818bc1f688bSRobert Mustacchi #define DW_DLA_FDE 0x15 /* Dwarf_Fde */ 819*4d9fdb46SRobert Mustacchi #define DW_DLA_LOC_BLOCK 0x16 /* Dwarf_Loc */ 820bc1f688bSRobert Mustacchi #define DW_DLA_FRAME_BLOCK 0x17 /* Dwarf_Frame Block (not used) */ 821bc1f688bSRobert Mustacchi #define DW_DLA_FUNC 0x18 /* Dwarf_Func */ 822bc1f688bSRobert Mustacchi #define DW_DLA_TYPENAME 0x19 /* Dwarf_Type */ 823bc1f688bSRobert Mustacchi #define DW_DLA_VAR 0x1a /* Dwarf_Var */ 824bc1f688bSRobert Mustacchi #define DW_DLA_WEAK 0x1b /* Dwarf_Weak */ 825bc1f688bSRobert Mustacchi #define DW_DLA_ADDR 0x1c /* Dwarf_Addr sized entries */ 826bc1f688bSRobert Mustacchi #define DW_DLA_RANGES 0x1d /* Dwarf_Ranges */ 827*4d9fdb46SRobert Mustacchi /* 0x1e (30) to 0x34 (52) reserved for internal to libdwarf types. */ 828*4d9fdb46SRobert Mustacchi #define DW_DLA_LOCLISTS_HEAD 0x35 /* .debug_loclists DW5 */ 829*4d9fdb46SRobert Mustacchi #define DW_DLA_RNGLISTS_HEAD 0x36 /* .debug_rnglists DW5 */ 830*4d9fdb46SRobert Mustacchi #define DW_DLA_GDBINDEX 0x37 /* Dwarf_Gdbindex */ 831*4d9fdb46SRobert Mustacchi #define DW_DLA_XU_INDEX 0x38 /* Dwarf_Xu_Index_Header */ 832*4d9fdb46SRobert Mustacchi #define DW_DLA_LOC_BLOCK_C 0x39 /* Dwarf_Loc_c*/ 833*4d9fdb46SRobert Mustacchi #define DW_DLA_LOCDESC_C 0x3a /* Dwarf_Locdesc_c */ 834*4d9fdb46SRobert Mustacchi #define DW_DLA_LOC_HEAD_C 0x3b /* Dwarf_Loc_Head_c */ 835*4d9fdb46SRobert Mustacchi #define DW_DLA_MACRO_CONTEXT 0x3c /* Dwarf_Macro_Context */ 836*4d9fdb46SRobert Mustacchi /* 0x3d (61) is for libdwarf internal use. */ 837*4d9fdb46SRobert Mustacchi #define DW_DLA_DSC_HEAD 0x3e /* Dwarf_Dsc_Head */ 838*4d9fdb46SRobert Mustacchi #define DW_DLA_DNAMES_HEAD 0x3f /* Dwarf_Dnames_Head */ 839*4d9fdb46SRobert Mustacchi #define DW_DLA_STR_OFFSETS 0x40 /* struct Dwarf_Str_Offsets_Table_s */ 840bc1f688bSRobert Mustacchi 841bc1f688bSRobert Mustacchi /* The augmenter string for CIE */ 842bc1f688bSRobert Mustacchi #define DW_CIE_AUGMENTER_STRING_V0 "z" 843bc1f688bSRobert Mustacchi 844bc1f688bSRobert Mustacchi /* dwarf_init() access arguments 845bc1f688bSRobert Mustacchi */ 846bc1f688bSRobert Mustacchi #define DW_DLC_READ 0 /* read only access */ 847bc1f688bSRobert Mustacchi #define DW_DLC_WRITE 1 /* write only access */ 848bc1f688bSRobert Mustacchi #define DW_DLC_RDWR 2 /* read/write access NOT SUPPORTED*/ 849bc1f688bSRobert Mustacchi 850*4d9fdb46SRobert Mustacchi /* dwarf_producer_init* access flag modifiers 851*4d9fdb46SRobert Mustacchi No longer depends on compile-time settings for 852*4d9fdb46SRobert Mustacchi how to produce 64bit offset. See DW_DLC_IRIX_OFFSET64. 853*4d9fdb46SRobert Mustacchi Historic versions. One of 854*4d9fdb46SRobert Mustacchi If DW_DLC_POINTER64 is not set DW_DLC_POINTER32 is assumed. 855*4d9fdb46SRobert Mustacchi If DW_DLC_OFFSET64 or DW_DLC_IRIX_OFFSET64 is not 856*4d9fdb46SRobert Mustacchi set 32bit offset DWARF is assumed. 857*4d9fdb46SRobert Mustacchi Non-MIPS Non IA64 should use DW_DLC_SYMBOLIC_RELOCATIONS 858*4d9fdb46SRobert Mustacchi and handle the relocation creation for the target 859*4d9fdb46SRobert Mustacchi itself using the symbolic relocations to do so, those 860*4d9fdb46SRobert Mustacchi use the Dwarf_Rel_Type enum relocation indicators. 861bc1f688bSRobert Mustacchi 862bc1f688bSRobert Mustacchi */ 863*4d9fdb46SRobert Mustacchi /* The first three are traditional dwarf producer names. 864*4d9fdb46SRobert Mustacchi These names still work. 865*4d9fdb46SRobert Mustacchi Newer names below. 866*4d9fdb46SRobert Mustacchi */ 867*4d9fdb46SRobert Mustacchi /* 64-bit address-size target */ 868*4d9fdb46SRobert Mustacchi #define DW_DLC_SIZE_64 0x40000000 869*4d9fdb46SRobert Mustacchi 870*4d9fdb46SRobert Mustacchi /* 32-bit address-size target */ 871*4d9fdb46SRobert Mustacchi #define DW_DLC_SIZE_32 0x20000000 872*4d9fdb46SRobert Mustacchi 873*4d9fdb46SRobert Mustacchi /* 64-bit offset-size DWARF offsets (else 32bit) */ 874*4d9fdb46SRobert Mustacchi #define DW_DLC_OFFSET_SIZE_64 0x10000000 875*4d9fdb46SRobert Mustacchi 876*4d9fdb46SRobert Mustacchi /* 32-bit offset-size ELF object (ELFCLASS32) */ 877*4d9fdb46SRobert Mustacchi #define DW_DLC_ELF_OFFSET_SIZE_32 0x00400000 878*4d9fdb46SRobert Mustacchi 879*4d9fdb46SRobert Mustacchi /* 64-bit offset-size ELF object (ELFCLASS64) */ 880*4d9fdb46SRobert Mustacchi #define DW_DLC_ELF_OFFSET_SIZE_64 0x00020000 881*4d9fdb46SRobert Mustacchi 882*4d9fdb46SRobert Mustacchi /* dwarf_producer_init* access flag modifiers 883*4d9fdb46SRobert Mustacchi Some new April 2014. 884*4d9fdb46SRobert Mustacchi If DW_DLC_STREAM_RELOCATIONS is set the 885*4d9fdb46SRobert Mustacchi DW_DLC_ISA_* flags are ignored. See the Dwarf_Rel_Type enum. 886*4d9fdb46SRobert Mustacchi */ 887*4d9fdb46SRobert Mustacchi 888*4d9fdb46SRobert Mustacchi /* Old style Elf binary relocation (.rel) records. The default. */ 889*4d9fdb46SRobert Mustacchi #define DW_DLC_STREAM_RELOCATIONS 0x02000000 890*4d9fdb46SRobert Mustacchi 891*4d9fdb46SRobert Mustacchi /* use 32-bit sec offsets */ 892*4d9fdb46SRobert Mustacchi #define DW_DLC_OFFSET32 0x00010000 893*4d9fdb46SRobert Mustacchi 894*4d9fdb46SRobert Mustacchi /* The following 3 are new sensible names. 895*4d9fdb46SRobert Mustacchi Old names above with same values. */ 896*4d9fdb46SRobert Mustacchi /* use 64-bit sec offsets in ELF */ 897*4d9fdb46SRobert Mustacchi #define DW_DLC_OFFSET64 0x10000000 898*4d9fdb46SRobert Mustacchi 899*4d9fdb46SRobert Mustacchi /* use 4 for address_size */ 900*4d9fdb46SRobert Mustacchi #define DW_DLC_POINTER32 0x20000000 901*4d9fdb46SRobert Mustacchi 902*4d9fdb46SRobert Mustacchi /* use 8 for address_size */ 903*4d9fdb46SRobert Mustacchi #define DW_DLC_POINTER64 0x40000000 904*4d9fdb46SRobert Mustacchi 905*4d9fdb46SRobert Mustacchi /* Special for IRIX only */ 906*4d9fdb46SRobert Mustacchi /* use Elf 64bit offset headers and non-std IRIX 64bitoffset headers */ 907*4d9fdb46SRobert Mustacchi #define DW_DLC_IRIX_OFFSET64 0x00200000 908bc1f688bSRobert Mustacchi 909bc1f688bSRobert Mustacchi /* Usable with assembly output because it is up to the producer to 910*4d9fdb46SRobert Mustacchi deal with locations in whatever manner the calling producer 911*4d9fdb46SRobert Mustacchi code wishes. For example, when the libdwarf caller wishes 912*4d9fdb46SRobert Mustacchi to produce relocations differently than the binary 913*4d9fdb46SRobert Mustacchi relocation bits that libdwarf Stream Relocations generate. 914*4d9fdb46SRobert Mustacchi */ 915bc1f688bSRobert Mustacchi #define DW_DLC_SYMBOLIC_RELOCATIONS 0x04000000 916bc1f688bSRobert Mustacchi 917*4d9fdb46SRobert Mustacchi 918bc1f688bSRobert Mustacchi #define DW_DLC_TARGET_BIGENDIAN 0x08000000 /* Big endian target */ 919bc1f688bSRobert Mustacchi #define DW_DLC_TARGET_LITTLEENDIAN 0x00100000 /* Little endian target */ 920bc1f688bSRobert Mustacchi 921bc1f688bSRobert Mustacchi 922*4d9fdb46SRobert Mustacchi /* dwarf_pcline function, slide arguments 923bc1f688bSRobert Mustacchi */ 924bc1f688bSRobert Mustacchi #define DW_DLS_BACKWARD -1 /* slide backward to find line */ 925bc1f688bSRobert Mustacchi #define DW_DLS_NOSLIDE 0 /* match exactly without sliding */ 926bc1f688bSRobert Mustacchi #define DW_DLS_FORWARD 1 /* slide forward to find line */ 927bc1f688bSRobert Mustacchi 928bc1f688bSRobert Mustacchi /* libdwarf error numbers 929bc1f688bSRobert Mustacchi */ 930bc1f688bSRobert Mustacchi #define DW_DLE_NE 0 /* no error */ 931bc1f688bSRobert Mustacchi #define DW_DLE_VMM 1 /* dwarf format/library version mismatch */ 932bc1f688bSRobert Mustacchi #define DW_DLE_MAP 2 /* memory map failure */ 933bc1f688bSRobert Mustacchi #define DW_DLE_LEE 3 /* libelf error */ 934bc1f688bSRobert Mustacchi #define DW_DLE_NDS 4 /* no debug section */ 935bc1f688bSRobert Mustacchi #define DW_DLE_NLS 5 /* no line section */ 936bc1f688bSRobert Mustacchi #define DW_DLE_ID 6 /* invalid descriptor for query */ 937bc1f688bSRobert Mustacchi #define DW_DLE_IOF 7 /* I/O failure */ 938bc1f688bSRobert Mustacchi #define DW_DLE_MAF 8 /* memory allocation failure */ 939bc1f688bSRobert Mustacchi #define DW_DLE_IA 9 /* invalid argument */ 940bc1f688bSRobert Mustacchi #define DW_DLE_MDE 10 /* mangled debugging entry */ 941bc1f688bSRobert Mustacchi #define DW_DLE_MLE 11 /* mangled line number entry */ 942bc1f688bSRobert Mustacchi #define DW_DLE_FNO 12 /* file not open */ 943bc1f688bSRobert Mustacchi #define DW_DLE_FNR 13 /* file not a regular file */ 944bc1f688bSRobert Mustacchi #define DW_DLE_FWA 14 /* file open with wrong access */ 945bc1f688bSRobert Mustacchi #define DW_DLE_NOB 15 /* not an object file */ 946bc1f688bSRobert Mustacchi #define DW_DLE_MOF 16 /* mangled object file header */ 947bc1f688bSRobert Mustacchi #define DW_DLE_EOLL 17 /* end of location list entries */ 948bc1f688bSRobert Mustacchi #define DW_DLE_NOLL 18 /* no location list section */ 949bc1f688bSRobert Mustacchi #define DW_DLE_BADOFF 19 /* Invalid offset */ 950bc1f688bSRobert Mustacchi #define DW_DLE_EOS 20 /* end of section */ 951bc1f688bSRobert Mustacchi #define DW_DLE_ATRUNC 21 /* abbreviations section appears truncated*/ 952bc1f688bSRobert Mustacchi #define DW_DLE_BADBITC 22 /* Address size passed to dwarf bad*/ 953bc1f688bSRobert Mustacchi /* It is not an allowed size (64 or 32) */ 954bc1f688bSRobert Mustacchi /* Error codes defined by the current Libdwarf Implementation. */ 955bc1f688bSRobert Mustacchi #define DW_DLE_DBG_ALLOC 23 956bc1f688bSRobert Mustacchi #define DW_DLE_FSTAT_ERROR 24 957bc1f688bSRobert Mustacchi #define DW_DLE_FSTAT_MODE_ERROR 25 958bc1f688bSRobert Mustacchi #define DW_DLE_INIT_ACCESS_WRONG 26 959bc1f688bSRobert Mustacchi #define DW_DLE_ELF_BEGIN_ERROR 27 960bc1f688bSRobert Mustacchi #define DW_DLE_ELF_GETEHDR_ERROR 28 961bc1f688bSRobert Mustacchi #define DW_DLE_ELF_GETSHDR_ERROR 29 962bc1f688bSRobert Mustacchi #define DW_DLE_ELF_STRPTR_ERROR 30 963bc1f688bSRobert Mustacchi #define DW_DLE_DEBUG_INFO_DUPLICATE 31 964bc1f688bSRobert Mustacchi #define DW_DLE_DEBUG_INFO_NULL 32 965bc1f688bSRobert Mustacchi #define DW_DLE_DEBUG_ABBREV_DUPLICATE 33 966bc1f688bSRobert Mustacchi #define DW_DLE_DEBUG_ABBREV_NULL 34 967bc1f688bSRobert Mustacchi #define DW_DLE_DEBUG_ARANGES_DUPLICATE 35 968bc1f688bSRobert Mustacchi #define DW_DLE_DEBUG_ARANGES_NULL 36 969bc1f688bSRobert Mustacchi #define DW_DLE_DEBUG_LINE_DUPLICATE 37 970bc1f688bSRobert Mustacchi #define DW_DLE_DEBUG_LINE_NULL 38 971bc1f688bSRobert Mustacchi #define DW_DLE_DEBUG_LOC_DUPLICATE 39 972bc1f688bSRobert Mustacchi #define DW_DLE_DEBUG_LOC_NULL 40 973bc1f688bSRobert Mustacchi #define DW_DLE_DEBUG_MACINFO_DUPLICATE 41 974bc1f688bSRobert Mustacchi #define DW_DLE_DEBUG_MACINFO_NULL 42 975bc1f688bSRobert Mustacchi #define DW_DLE_DEBUG_PUBNAMES_DUPLICATE 43 976bc1f688bSRobert Mustacchi #define DW_DLE_DEBUG_PUBNAMES_NULL 44 977bc1f688bSRobert Mustacchi #define DW_DLE_DEBUG_STR_DUPLICATE 45 978bc1f688bSRobert Mustacchi #define DW_DLE_DEBUG_STR_NULL 46 979bc1f688bSRobert Mustacchi #define DW_DLE_CU_LENGTH_ERROR 47 980bc1f688bSRobert Mustacchi #define DW_DLE_VERSION_STAMP_ERROR 48 981bc1f688bSRobert Mustacchi #define DW_DLE_ABBREV_OFFSET_ERROR 49 982bc1f688bSRobert Mustacchi #define DW_DLE_ADDRESS_SIZE_ERROR 50 983bc1f688bSRobert Mustacchi #define DW_DLE_DEBUG_INFO_PTR_NULL 51 984bc1f688bSRobert Mustacchi #define DW_DLE_DIE_NULL 52 985bc1f688bSRobert Mustacchi #define DW_DLE_STRING_OFFSET_BAD 53 986bc1f688bSRobert Mustacchi #define DW_DLE_DEBUG_LINE_LENGTH_BAD 54 987bc1f688bSRobert Mustacchi #define DW_DLE_LINE_PROLOG_LENGTH_BAD 55 988bc1f688bSRobert Mustacchi #define DW_DLE_LINE_NUM_OPERANDS_BAD 56 989bc1f688bSRobert Mustacchi #define DW_DLE_LINE_SET_ADDR_ERROR 57 /* No longer used. */ 990bc1f688bSRobert Mustacchi #define DW_DLE_LINE_EXT_OPCODE_BAD 58 991bc1f688bSRobert Mustacchi #define DW_DLE_DWARF_LINE_NULL 59 992bc1f688bSRobert Mustacchi #define DW_DLE_INCL_DIR_NUM_BAD 60 993bc1f688bSRobert Mustacchi #define DW_DLE_LINE_FILE_NUM_BAD 61 994bc1f688bSRobert Mustacchi #define DW_DLE_ALLOC_FAIL 62 995bc1f688bSRobert Mustacchi #define DW_DLE_NO_CALLBACK_FUNC 63 996bc1f688bSRobert Mustacchi #define DW_DLE_SECT_ALLOC 64 997bc1f688bSRobert Mustacchi #define DW_DLE_FILE_ENTRY_ALLOC 65 998bc1f688bSRobert Mustacchi #define DW_DLE_LINE_ALLOC 66 999bc1f688bSRobert Mustacchi #define DW_DLE_FPGM_ALLOC 67 1000bc1f688bSRobert Mustacchi #define DW_DLE_INCDIR_ALLOC 68 1001bc1f688bSRobert Mustacchi #define DW_DLE_STRING_ALLOC 69 1002bc1f688bSRobert Mustacchi #define DW_DLE_CHUNK_ALLOC 70 1003bc1f688bSRobert Mustacchi #define DW_DLE_BYTEOFF_ERR 71 1004bc1f688bSRobert Mustacchi #define DW_DLE_CIE_ALLOC 72 1005bc1f688bSRobert Mustacchi #define DW_DLE_FDE_ALLOC 73 1006bc1f688bSRobert Mustacchi #define DW_DLE_REGNO_OVFL 74 1007bc1f688bSRobert Mustacchi #define DW_DLE_CIE_OFFS_ALLOC 75 1008bc1f688bSRobert Mustacchi #define DW_DLE_WRONG_ADDRESS 76 1009bc1f688bSRobert Mustacchi #define DW_DLE_EXTRA_NEIGHBORS 77 1010bc1f688bSRobert Mustacchi #define DW_DLE_WRONG_TAG 78 1011bc1f688bSRobert Mustacchi #define DW_DLE_DIE_ALLOC 79 1012bc1f688bSRobert Mustacchi #define DW_DLE_PARENT_EXISTS 80 1013bc1f688bSRobert Mustacchi #define DW_DLE_DBG_NULL 81 1014bc1f688bSRobert Mustacchi #define DW_DLE_DEBUGLINE_ERROR 82 1015bc1f688bSRobert Mustacchi #define DW_DLE_DEBUGFRAME_ERROR 83 1016bc1f688bSRobert Mustacchi #define DW_DLE_DEBUGINFO_ERROR 84 1017bc1f688bSRobert Mustacchi #define DW_DLE_ATTR_ALLOC 85 1018bc1f688bSRobert Mustacchi #define DW_DLE_ABBREV_ALLOC 86 1019bc1f688bSRobert Mustacchi #define DW_DLE_OFFSET_UFLW 87 1020bc1f688bSRobert Mustacchi #define DW_DLE_ELF_SECT_ERR 88 1021bc1f688bSRobert Mustacchi #define DW_DLE_DEBUG_FRAME_LENGTH_BAD 89 1022bc1f688bSRobert Mustacchi #define DW_DLE_FRAME_VERSION_BAD 90 1023bc1f688bSRobert Mustacchi #define DW_DLE_CIE_RET_ADDR_REG_ERROR 91 1024bc1f688bSRobert Mustacchi #define DW_DLE_FDE_NULL 92 1025bc1f688bSRobert Mustacchi #define DW_DLE_FDE_DBG_NULL 93 1026bc1f688bSRobert Mustacchi #define DW_DLE_CIE_NULL 94 1027bc1f688bSRobert Mustacchi #define DW_DLE_CIE_DBG_NULL 95 1028bc1f688bSRobert Mustacchi #define DW_DLE_FRAME_TABLE_COL_BAD 96 1029bc1f688bSRobert Mustacchi #define DW_DLE_PC_NOT_IN_FDE_RANGE 97 1030bc1f688bSRobert Mustacchi #define DW_DLE_CIE_INSTR_EXEC_ERROR 98 1031bc1f688bSRobert Mustacchi #define DW_DLE_FRAME_INSTR_EXEC_ERROR 99 1032bc1f688bSRobert Mustacchi #define DW_DLE_FDE_PTR_NULL 100 1033bc1f688bSRobert Mustacchi #define DW_DLE_RET_OP_LIST_NULL 101 1034bc1f688bSRobert Mustacchi #define DW_DLE_LINE_CONTEXT_NULL 102 1035bc1f688bSRobert Mustacchi #define DW_DLE_DBG_NO_CU_CONTEXT 103 1036bc1f688bSRobert Mustacchi #define DW_DLE_DIE_NO_CU_CONTEXT 104 1037bc1f688bSRobert Mustacchi #define DW_DLE_FIRST_DIE_NOT_CU 105 1038bc1f688bSRobert Mustacchi #define DW_DLE_NEXT_DIE_PTR_NULL 106 1039bc1f688bSRobert Mustacchi #define DW_DLE_DEBUG_FRAME_DUPLICATE 107 1040bc1f688bSRobert Mustacchi #define DW_DLE_DEBUG_FRAME_NULL 108 1041bc1f688bSRobert Mustacchi #define DW_DLE_ABBREV_DECODE_ERROR 109 1042bc1f688bSRobert Mustacchi #define DW_DLE_DWARF_ABBREV_NULL 110 1043bc1f688bSRobert Mustacchi #define DW_DLE_ATTR_NULL 111 1044bc1f688bSRobert Mustacchi #define DW_DLE_DIE_BAD 112 1045bc1f688bSRobert Mustacchi #define DW_DLE_DIE_ABBREV_BAD 113 1046bc1f688bSRobert Mustacchi #define DW_DLE_ATTR_FORM_BAD 114 1047bc1f688bSRobert Mustacchi #define DW_DLE_ATTR_NO_CU_CONTEXT 115 1048bc1f688bSRobert Mustacchi #define DW_DLE_ATTR_FORM_SIZE_BAD 116 1049bc1f688bSRobert Mustacchi #define DW_DLE_ATTR_DBG_NULL 117 1050bc1f688bSRobert Mustacchi #define DW_DLE_BAD_REF_FORM 118 1051bc1f688bSRobert Mustacchi #define DW_DLE_ATTR_FORM_OFFSET_BAD 119 1052bc1f688bSRobert Mustacchi #define DW_DLE_LINE_OFFSET_BAD 120 1053bc1f688bSRobert Mustacchi #define DW_DLE_DEBUG_STR_OFFSET_BAD 121 1054bc1f688bSRobert Mustacchi #define DW_DLE_STRING_PTR_NULL 122 1055bc1f688bSRobert Mustacchi #define DW_DLE_PUBNAMES_VERSION_ERROR 123 1056bc1f688bSRobert Mustacchi #define DW_DLE_PUBNAMES_LENGTH_BAD 124 1057bc1f688bSRobert Mustacchi #define DW_DLE_GLOBAL_NULL 125 1058bc1f688bSRobert Mustacchi #define DW_DLE_GLOBAL_CONTEXT_NULL 126 1059bc1f688bSRobert Mustacchi #define DW_DLE_DIR_INDEX_BAD 127 1060bc1f688bSRobert Mustacchi #define DW_DLE_LOC_EXPR_BAD 128 1061bc1f688bSRobert Mustacchi #define DW_DLE_DIE_LOC_EXPR_BAD 129 1062bc1f688bSRobert Mustacchi #define DW_DLE_ADDR_ALLOC 130 1063bc1f688bSRobert Mustacchi #define DW_DLE_OFFSET_BAD 131 1064bc1f688bSRobert Mustacchi #define DW_DLE_MAKE_CU_CONTEXT_FAIL 132 1065bc1f688bSRobert Mustacchi #define DW_DLE_REL_ALLOC 133 1066bc1f688bSRobert Mustacchi #define DW_DLE_ARANGE_OFFSET_BAD 134 1067bc1f688bSRobert Mustacchi #define DW_DLE_SEGMENT_SIZE_BAD 135 1068bc1f688bSRobert Mustacchi #define DW_DLE_ARANGE_LENGTH_BAD 136 1069bc1f688bSRobert Mustacchi #define DW_DLE_ARANGE_DECODE_ERROR 137 1070bc1f688bSRobert Mustacchi #define DW_DLE_ARANGES_NULL 138 1071bc1f688bSRobert Mustacchi #define DW_DLE_ARANGE_NULL 139 1072bc1f688bSRobert Mustacchi #define DW_DLE_NO_FILE_NAME 140 1073bc1f688bSRobert Mustacchi #define DW_DLE_NO_COMP_DIR 141 1074bc1f688bSRobert Mustacchi #define DW_DLE_CU_ADDRESS_SIZE_BAD 142 1075bc1f688bSRobert Mustacchi #define DW_DLE_INPUT_ATTR_BAD 143 1076bc1f688bSRobert Mustacchi #define DW_DLE_EXPR_NULL 144 1077bc1f688bSRobert Mustacchi #define DW_DLE_BAD_EXPR_OPCODE 145 1078bc1f688bSRobert Mustacchi #define DW_DLE_EXPR_LENGTH_BAD 146 1079bc1f688bSRobert Mustacchi #define DW_DLE_MULTIPLE_RELOC_IN_EXPR 147 1080bc1f688bSRobert Mustacchi #define DW_DLE_ELF_GETIDENT_ERROR 148 1081bc1f688bSRobert Mustacchi #define DW_DLE_NO_AT_MIPS_FDE 149 1082bc1f688bSRobert Mustacchi #define DW_DLE_NO_CIE_FOR_FDE 150 1083bc1f688bSRobert Mustacchi #define DW_DLE_DIE_ABBREV_LIST_NULL 151 1084bc1f688bSRobert Mustacchi #define DW_DLE_DEBUG_FUNCNAMES_DUPLICATE 152 1085bc1f688bSRobert Mustacchi #define DW_DLE_DEBUG_FUNCNAMES_NULL 153 1086bc1f688bSRobert Mustacchi #define DW_DLE_DEBUG_FUNCNAMES_VERSION_ERROR 154 1087bc1f688bSRobert Mustacchi #define DW_DLE_DEBUG_FUNCNAMES_LENGTH_BAD 155 1088bc1f688bSRobert Mustacchi #define DW_DLE_FUNC_NULL 156 1089bc1f688bSRobert Mustacchi #define DW_DLE_FUNC_CONTEXT_NULL 157 1090bc1f688bSRobert Mustacchi #define DW_DLE_DEBUG_TYPENAMES_DUPLICATE 158 1091bc1f688bSRobert Mustacchi #define DW_DLE_DEBUG_TYPENAMES_NULL 159 1092bc1f688bSRobert Mustacchi #define DW_DLE_DEBUG_TYPENAMES_VERSION_ERROR 160 1093bc1f688bSRobert Mustacchi #define DW_DLE_DEBUG_TYPENAMES_LENGTH_BAD 161 1094bc1f688bSRobert Mustacchi #define DW_DLE_TYPE_NULL 162 1095bc1f688bSRobert Mustacchi #define DW_DLE_TYPE_CONTEXT_NULL 163 1096bc1f688bSRobert Mustacchi #define DW_DLE_DEBUG_VARNAMES_DUPLICATE 164 1097bc1f688bSRobert Mustacchi #define DW_DLE_DEBUG_VARNAMES_NULL 165 1098bc1f688bSRobert Mustacchi #define DW_DLE_DEBUG_VARNAMES_VERSION_ERROR 166 1099bc1f688bSRobert Mustacchi #define DW_DLE_DEBUG_VARNAMES_LENGTH_BAD 167 1100bc1f688bSRobert Mustacchi #define DW_DLE_VAR_NULL 168 1101bc1f688bSRobert Mustacchi #define DW_DLE_VAR_CONTEXT_NULL 169 1102bc1f688bSRobert Mustacchi #define DW_DLE_DEBUG_WEAKNAMES_DUPLICATE 170 1103bc1f688bSRobert Mustacchi #define DW_DLE_DEBUG_WEAKNAMES_NULL 171 1104bc1f688bSRobert Mustacchi #define DW_DLE_DEBUG_WEAKNAMES_VERSION_ERROR 172 1105bc1f688bSRobert Mustacchi #define DW_DLE_DEBUG_WEAKNAMES_LENGTH_BAD 173 1106bc1f688bSRobert Mustacchi #define DW_DLE_WEAK_NULL 174 1107bc1f688bSRobert Mustacchi #define DW_DLE_WEAK_CONTEXT_NULL 175 1108bc1f688bSRobert Mustacchi #define DW_DLE_LOCDESC_COUNT_WRONG 176 1109bc1f688bSRobert Mustacchi #define DW_DLE_MACINFO_STRING_NULL 177 1110bc1f688bSRobert Mustacchi #define DW_DLE_MACINFO_STRING_EMPTY 178 1111bc1f688bSRobert Mustacchi #define DW_DLE_MACINFO_INTERNAL_ERROR_SPACE 179 1112bc1f688bSRobert Mustacchi #define DW_DLE_MACINFO_MALLOC_FAIL 180 1113bc1f688bSRobert Mustacchi #define DW_DLE_DEBUGMACINFO_ERROR 181 1114bc1f688bSRobert Mustacchi #define DW_DLE_DEBUG_MACRO_LENGTH_BAD 182 1115bc1f688bSRobert Mustacchi #define DW_DLE_DEBUG_MACRO_MAX_BAD 183 1116bc1f688bSRobert Mustacchi #define DW_DLE_DEBUG_MACRO_INTERNAL_ERR 184 1117bc1f688bSRobert Mustacchi #define DW_DLE_DEBUG_MACRO_MALLOC_SPACE 185 1118bc1f688bSRobert Mustacchi #define DW_DLE_DEBUG_MACRO_INCONSISTENT 186 1119bc1f688bSRobert Mustacchi #define DW_DLE_DF_NO_CIE_AUGMENTATION 187 1120bc1f688bSRobert Mustacchi #define DW_DLE_DF_REG_NUM_TOO_HIGH 188 1121bc1f688bSRobert Mustacchi #define DW_DLE_DF_MAKE_INSTR_NO_INIT 189 1122bc1f688bSRobert Mustacchi #define DW_DLE_DF_NEW_LOC_LESS_OLD_LOC 190 1123bc1f688bSRobert Mustacchi #define DW_DLE_DF_POP_EMPTY_STACK 191 1124bc1f688bSRobert Mustacchi #define DW_DLE_DF_ALLOC_FAIL 192 1125bc1f688bSRobert Mustacchi #define DW_DLE_DF_FRAME_DECODING_ERROR 193 1126bc1f688bSRobert Mustacchi #define DW_DLE_DEBUG_LOC_SECTION_SHORT 194 1127bc1f688bSRobert Mustacchi #define DW_DLE_FRAME_AUGMENTATION_UNKNOWN 195 1128bc1f688bSRobert Mustacchi #define DW_DLE_PUBTYPE_CONTEXT 196 /* Unused. */ 1129bc1f688bSRobert Mustacchi #define DW_DLE_DEBUG_PUBTYPES_LENGTH_BAD 197 1130bc1f688bSRobert Mustacchi #define DW_DLE_DEBUG_PUBTYPES_VERSION_ERROR 198 1131bc1f688bSRobert Mustacchi #define DW_DLE_DEBUG_PUBTYPES_DUPLICATE 199 1132bc1f688bSRobert Mustacchi #define DW_DLE_FRAME_CIE_DECODE_ERROR 200 1133bc1f688bSRobert Mustacchi #define DW_DLE_FRAME_REGISTER_UNREPRESENTABLE 201 1134bc1f688bSRobert Mustacchi #define DW_DLE_FRAME_REGISTER_COUNT_MISMATCH 202 1135bc1f688bSRobert Mustacchi #define DW_DLE_LINK_LOOP 203 1136bc1f688bSRobert Mustacchi #define DW_DLE_STRP_OFFSET_BAD 204 1137bc1f688bSRobert Mustacchi #define DW_DLE_DEBUG_RANGES_DUPLICATE 205 1138bc1f688bSRobert Mustacchi #define DW_DLE_DEBUG_RANGES_OFFSET_BAD 206 1139bc1f688bSRobert Mustacchi #define DW_DLE_DEBUG_RANGES_MISSING_END 207 1140bc1f688bSRobert Mustacchi #define DW_DLE_DEBUG_RANGES_OUT_OF_MEM 208 1141bc1f688bSRobert Mustacchi #define DW_DLE_DEBUG_SYMTAB_ERR 209 1142bc1f688bSRobert Mustacchi #define DW_DLE_DEBUG_STRTAB_ERR 210 1143bc1f688bSRobert Mustacchi #define DW_DLE_RELOC_MISMATCH_INDEX 211 1144bc1f688bSRobert Mustacchi #define DW_DLE_RELOC_MISMATCH_RELOC_INDEX 212 1145bc1f688bSRobert Mustacchi #define DW_DLE_RELOC_MISMATCH_STRTAB_INDEX 213 1146bc1f688bSRobert Mustacchi #define DW_DLE_RELOC_SECTION_MISMATCH 214 1147bc1f688bSRobert Mustacchi #define DW_DLE_RELOC_SECTION_MISSING_INDEX 215 1148bc1f688bSRobert Mustacchi #define DW_DLE_RELOC_SECTION_LENGTH_ODD 216 1149bc1f688bSRobert Mustacchi #define DW_DLE_RELOC_SECTION_PTR_NULL 217 1150bc1f688bSRobert Mustacchi #define DW_DLE_RELOC_SECTION_MALLOC_FAIL 218 1151bc1f688bSRobert Mustacchi #define DW_DLE_NO_ELF64_SUPPORT 219 1152bc1f688bSRobert Mustacchi #define DW_DLE_MISSING_ELF64_SUPPORT 220 1153bc1f688bSRobert Mustacchi #define DW_DLE_ORPHAN_FDE 221 1154bc1f688bSRobert Mustacchi #define DW_DLE_DUPLICATE_INST_BLOCK 222 1155bc1f688bSRobert Mustacchi #define DW_DLE_BAD_REF_SIG8_FORM 223 1156bc1f688bSRobert Mustacchi #define DW_DLE_ATTR_EXPRLOC_FORM_BAD 224 1157bc1f688bSRobert Mustacchi #define DW_DLE_FORM_SEC_OFFSET_LENGTH_BAD 225 1158bc1f688bSRobert Mustacchi #define DW_DLE_NOT_REF_FORM 226 1159bc1f688bSRobert Mustacchi #define DW_DLE_DEBUG_FRAME_LENGTH_NOT_MULTIPLE 227 1160*4d9fdb46SRobert Mustacchi #define DW_DLE_REF_SIG8_NOT_HANDLED 228 1161*4d9fdb46SRobert Mustacchi #define DW_DLE_DEBUG_FRAME_POSSIBLE_ADDRESS_BOTCH 229 1162*4d9fdb46SRobert Mustacchi #define DW_DLE_LOC_BAD_TERMINATION 230 1163*4d9fdb46SRobert Mustacchi #define DW_DLE_SYMTAB_SECTION_LENGTH_ODD 231 1164*4d9fdb46SRobert Mustacchi #define DW_DLE_RELOC_SECTION_SYMBOL_INDEX_BAD 232 1165*4d9fdb46SRobert Mustacchi #define DW_DLE_RELOC_SECTION_RELOC_TARGET_SIZE_UNKNOWN 233 1166*4d9fdb46SRobert Mustacchi #define DW_DLE_SYMTAB_SECTION_ENTRYSIZE_ZERO 234 1167*4d9fdb46SRobert Mustacchi #define DW_DLE_LINE_NUMBER_HEADER_ERROR 235 1168*4d9fdb46SRobert Mustacchi #define DW_DLE_DEBUG_TYPES_NULL 236 1169*4d9fdb46SRobert Mustacchi #define DW_DLE_DEBUG_TYPES_DUPLICATE 237 1170*4d9fdb46SRobert Mustacchi #define DW_DLE_DEBUG_TYPES_ONLY_DWARF4 238 1171*4d9fdb46SRobert Mustacchi #define DW_DLE_DEBUG_TYPEOFFSET_BAD 239 1172*4d9fdb46SRobert Mustacchi #define DW_DLE_GNU_OPCODE_ERROR 240 1173*4d9fdb46SRobert Mustacchi #define DW_DLE_DEBUGPUBTYPES_ERROR 241 1174*4d9fdb46SRobert Mustacchi #define DW_DLE_AT_FIXUP_NULL 242 1175*4d9fdb46SRobert Mustacchi #define DW_DLE_AT_FIXUP_DUP 243 1176*4d9fdb46SRobert Mustacchi #define DW_DLE_BAD_ABINAME 244 1177*4d9fdb46SRobert Mustacchi #define DW_DLE_TOO_MANY_DEBUG 245 1178*4d9fdb46SRobert Mustacchi #define DW_DLE_DEBUG_STR_OFFSETS_DUPLICATE 246 1179*4d9fdb46SRobert Mustacchi #define DW_DLE_SECTION_DUPLICATION 247 1180*4d9fdb46SRobert Mustacchi #define DW_DLE_SECTION_ERROR 248 1181*4d9fdb46SRobert Mustacchi #define DW_DLE_DEBUG_ADDR_DUPLICATE 249 1182*4d9fdb46SRobert Mustacchi #define DW_DLE_DEBUG_CU_UNAVAILABLE_FOR_FORM 250 1183*4d9fdb46SRobert Mustacchi #define DW_DLE_DEBUG_FORM_HANDLING_INCOMPLETE 251 1184*4d9fdb46SRobert Mustacchi #define DW_DLE_NEXT_DIE_PAST_END 252 1185*4d9fdb46SRobert Mustacchi #define DW_DLE_NEXT_DIE_WRONG_FORM 253 1186*4d9fdb46SRobert Mustacchi #define DW_DLE_NEXT_DIE_NO_ABBREV_LIST 254 1187*4d9fdb46SRobert Mustacchi #define DW_DLE_NESTED_FORM_INDIRECT_ERROR 255 1188*4d9fdb46SRobert Mustacchi #define DW_DLE_CU_DIE_NO_ABBREV_LIST 256 1189*4d9fdb46SRobert Mustacchi #define DW_DLE_MISSING_NEEDED_DEBUG_ADDR_SECTION 257 1190*4d9fdb46SRobert Mustacchi #define DW_DLE_ATTR_FORM_NOT_ADDR_INDEX 258 1191*4d9fdb46SRobert Mustacchi #define DW_DLE_ATTR_FORM_NOT_STR_INDEX 259 1192*4d9fdb46SRobert Mustacchi #define DW_DLE_DUPLICATE_GDB_INDEX 260 1193*4d9fdb46SRobert Mustacchi #define DW_DLE_ERRONEOUS_GDB_INDEX_SECTION 261 1194*4d9fdb46SRobert Mustacchi #define DW_DLE_GDB_INDEX_COUNT_ERROR 262 1195*4d9fdb46SRobert Mustacchi #define DW_DLE_GDB_INDEX_COUNT_ADDR_ERROR 263 1196*4d9fdb46SRobert Mustacchi #define DW_DLE_GDB_INDEX_INDEX_ERROR 264 1197*4d9fdb46SRobert Mustacchi #define DW_DLE_GDB_INDEX_CUVEC_ERROR 265 1198*4d9fdb46SRobert Mustacchi #define DW_DLE_DUPLICATE_CU_INDEX 266 1199*4d9fdb46SRobert Mustacchi #define DW_DLE_DUPLICATE_TU_INDEX 267 1200*4d9fdb46SRobert Mustacchi #define DW_DLE_XU_TYPE_ARG_ERROR 268 1201*4d9fdb46SRobert Mustacchi #define DW_DLE_XU_IMPOSSIBLE_ERROR 269 1202*4d9fdb46SRobert Mustacchi #define DW_DLE_XU_NAME_COL_ERROR 270 1203*4d9fdb46SRobert Mustacchi #define DW_DLE_XU_HASH_ROW_ERROR 271 1204*4d9fdb46SRobert Mustacchi #define DW_DLE_XU_HASH_INDEX_ERROR 272 1205*4d9fdb46SRobert Mustacchi /* ..._FAILSAFE_ERRVAL is an aid when out of memory. */ 1206*4d9fdb46SRobert Mustacchi #define DW_DLE_FAILSAFE_ERRVAL 273 1207*4d9fdb46SRobert Mustacchi #define DW_DLE_ARANGE_ERROR 274 1208*4d9fdb46SRobert Mustacchi #define DW_DLE_PUBNAMES_ERROR 275 1209*4d9fdb46SRobert Mustacchi #define DW_DLE_FUNCNAMES_ERROR 276 1210*4d9fdb46SRobert Mustacchi #define DW_DLE_TYPENAMES_ERROR 277 1211*4d9fdb46SRobert Mustacchi #define DW_DLE_VARNAMES_ERROR 278 1212*4d9fdb46SRobert Mustacchi #define DW_DLE_WEAKNAMES_ERROR 279 1213*4d9fdb46SRobert Mustacchi #define DW_DLE_RELOCS_ERROR 280 1214*4d9fdb46SRobert Mustacchi #define DW_DLE_ATTR_OUTSIDE_SECTION 281 1215*4d9fdb46SRobert Mustacchi #define DW_DLE_FISSION_INDEX_WRONG 282 1216*4d9fdb46SRobert Mustacchi #define DW_DLE_FISSION_VERSION_ERROR 283 1217*4d9fdb46SRobert Mustacchi #define DW_DLE_NEXT_DIE_LOW_ERROR 284 1218*4d9fdb46SRobert Mustacchi #define DW_DLE_CU_UT_TYPE_ERROR 285 1219*4d9fdb46SRobert Mustacchi #define DW_DLE_NO_SUCH_SIGNATURE_FOUND 286 1220*4d9fdb46SRobert Mustacchi #define DW_DLE_SIGNATURE_SECTION_NUMBER_WRONG 287 1221*4d9fdb46SRobert Mustacchi #define DW_DLE_ATTR_FORM_NOT_DATA8 288 1222*4d9fdb46SRobert Mustacchi #define DW_DLE_SIG_TYPE_WRONG_STRING 289 1223*4d9fdb46SRobert Mustacchi #define DW_DLE_MISSING_REQUIRED_TU_OFFSET_HASH 290 1224*4d9fdb46SRobert Mustacchi #define DW_DLE_MISSING_REQUIRED_CU_OFFSET_HASH 291 1225*4d9fdb46SRobert Mustacchi #define DW_DLE_DWP_MISSING_DWO_ID 292 1226*4d9fdb46SRobert Mustacchi #define DW_DLE_DWP_SIBLING_ERROR 293 1227*4d9fdb46SRobert Mustacchi #define DW_DLE_DEBUG_FISSION_INCOMPLETE 294 1228*4d9fdb46SRobert Mustacchi #define DW_DLE_FISSION_SECNUM_ERR 295 1229*4d9fdb46SRobert Mustacchi #define DW_DLE_DEBUG_MACRO_DUPLICATE 296 1230*4d9fdb46SRobert Mustacchi #define DW_DLE_DEBUG_NAMES_DUPLICATE 297 1231*4d9fdb46SRobert Mustacchi #define DW_DLE_DEBUG_LINE_STR_DUPLICATE 298 1232*4d9fdb46SRobert Mustacchi #define DW_DLE_DEBUG_SUP_DUPLICATE 299 1233*4d9fdb46SRobert Mustacchi #define DW_DLE_NO_SIGNATURE_TO_LOOKUP 300 1234*4d9fdb46SRobert Mustacchi #define DW_DLE_NO_TIED_ADDR_AVAILABLE 301 1235*4d9fdb46SRobert Mustacchi #define DW_DLE_NO_TIED_SIG_AVAILABLE 302 1236*4d9fdb46SRobert Mustacchi #define DW_DLE_STRING_NOT_TERMINATED 303 1237*4d9fdb46SRobert Mustacchi #define DW_DLE_BAD_LINE_TABLE_OPERATION 304 1238*4d9fdb46SRobert Mustacchi #define DW_DLE_LINE_CONTEXT_BOTCH 305 1239*4d9fdb46SRobert Mustacchi #define DW_DLE_LINE_CONTEXT_INDEX_WRONG 306 1240*4d9fdb46SRobert Mustacchi #define DW_DLE_NO_TIED_STRING_AVAILABLE 307 1241*4d9fdb46SRobert Mustacchi #define DW_DLE_NO_TIED_FILE_AVAILABLE 308 1242*4d9fdb46SRobert Mustacchi #define DW_DLE_CU_TYPE_MISSING 309 1243*4d9fdb46SRobert Mustacchi #define DW_DLE_LLE_CODE_UNKNOWN 310 1244*4d9fdb46SRobert Mustacchi #define DW_DLE_LOCLIST_INTERFACE_ERROR 311 1245*4d9fdb46SRobert Mustacchi #define DW_DLE_LOCLIST_INDEX_ERROR 312 1246*4d9fdb46SRobert Mustacchi #define DW_DLE_INTERFACE_NOT_SUPPORTED 313 1247*4d9fdb46SRobert Mustacchi #define DW_DLE_ZDEBUG_REQUIRES_ZLIB 314 1248*4d9fdb46SRobert Mustacchi #define DW_DLE_ZDEBUG_INPUT_FORMAT_ODD 315 1249*4d9fdb46SRobert Mustacchi #define DW_DLE_ZLIB_BUF_ERROR 316 1250*4d9fdb46SRobert Mustacchi #define DW_DLE_ZLIB_DATA_ERROR 317 1251*4d9fdb46SRobert Mustacchi #define DW_DLE_MACRO_OFFSET_BAD 318 1252*4d9fdb46SRobert Mustacchi #define DW_DLE_MACRO_OPCODE_BAD 319 1253*4d9fdb46SRobert Mustacchi #define DW_DLE_MACRO_OPCODE_FORM_BAD 320 1254*4d9fdb46SRobert Mustacchi #define DW_DLE_UNKNOWN_FORM 321 1255*4d9fdb46SRobert Mustacchi #define DW_DLE_BAD_MACRO_HEADER_POINTER 322 1256*4d9fdb46SRobert Mustacchi #define DW_DLE_BAD_MACRO_INDEX 323 1257*4d9fdb46SRobert Mustacchi #define DW_DLE_MACRO_OP_UNHANDLED 324 1258*4d9fdb46SRobert Mustacchi #define DW_DLE_MACRO_PAST_END 325 1259*4d9fdb46SRobert Mustacchi #define DW_DLE_LINE_STRP_OFFSET_BAD 326 1260*4d9fdb46SRobert Mustacchi #define DW_DLE_STRING_FORM_IMPROPER 327 1261*4d9fdb46SRobert Mustacchi #define DW_DLE_ELF_FLAGS_NOT_AVAILABLE 328 1262*4d9fdb46SRobert Mustacchi #define DW_DLE_LEB_IMPROPER 329 1263*4d9fdb46SRobert Mustacchi #define DW_DLE_DEBUG_LINE_RANGE_ZERO 330 1264*4d9fdb46SRobert Mustacchi #define DW_DLE_READ_LITTLEENDIAN_ERROR 331 1265*4d9fdb46SRobert Mustacchi #define DW_DLE_READ_BIGENDIAN_ERROR 332 1266*4d9fdb46SRobert Mustacchi #define DW_DLE_RELOC_INVALID 333 1267*4d9fdb46SRobert Mustacchi #define DW_DLE_INFO_HEADER_ERROR 334 1268*4d9fdb46SRobert Mustacchi #define DW_DLE_ARANGES_HEADER_ERROR 335 1269*4d9fdb46SRobert Mustacchi #define DW_DLE_LINE_OFFSET_WRONG_FORM 336 1270*4d9fdb46SRobert Mustacchi #define DW_DLE_FORM_BLOCK_LENGTH_ERROR 337 1271*4d9fdb46SRobert Mustacchi #define DW_DLE_ZLIB_SECTION_SHORT 338 1272*4d9fdb46SRobert Mustacchi #define DW_DLE_CIE_INSTR_PTR_ERROR 339 1273*4d9fdb46SRobert Mustacchi #define DW_DLE_FDE_INSTR_PTR_ERROR 340 1274*4d9fdb46SRobert Mustacchi #define DW_DLE_FISSION_ADDITION_ERROR 341 1275*4d9fdb46SRobert Mustacchi #define DW_DLE_HEADER_LEN_BIGGER_THAN_SECSIZE 342 1276*4d9fdb46SRobert Mustacchi #define DW_DLE_LOCEXPR_OFF_SECTION_END 343 1277*4d9fdb46SRobert Mustacchi #define DW_DLE_POINTER_SECTION_UNKNOWN 344 1278*4d9fdb46SRobert Mustacchi #define DW_DLE_ERRONEOUS_XU_INDEX_SECTION 345 1279*4d9fdb46SRobert Mustacchi #define DW_DLE_DIRECTORY_FORMAT_COUNT_VS_DIRECTORIES_MISMATCH 346 1280*4d9fdb46SRobert Mustacchi #define DW_DLE_COMPRESSED_EMPTY_SECTION 347 1281*4d9fdb46SRobert Mustacchi #define DW_DLE_SIZE_WRAPAROUND 348 1282*4d9fdb46SRobert Mustacchi #define DW_DLE_ILLOGICAL_TSEARCH 349 1283*4d9fdb46SRobert Mustacchi #define DW_DLE_BAD_STRING_FORM 350 1284*4d9fdb46SRobert Mustacchi #define DW_DLE_DEBUGSTR_ERROR 351 1285*4d9fdb46SRobert Mustacchi #define DW_DLE_DEBUGSTR_UNEXPECTED_REL 352 1286*4d9fdb46SRobert Mustacchi #define DW_DLE_DISCR_ARRAY_ERROR 353 1287*4d9fdb46SRobert Mustacchi #define DW_DLE_LEB_OUT_ERROR 354 1288*4d9fdb46SRobert Mustacchi #define DW_DLE_SIBLING_LIST_IMPROPER 355 1289*4d9fdb46SRobert Mustacchi #define DW_DLE_LOCLIST_OFFSET_BAD 356 1290*4d9fdb46SRobert Mustacchi #define DW_DLE_LINE_TABLE_BAD 357 1291*4d9fdb46SRobert Mustacchi #define DW_DLE_DEBUG_LOClISTS_DUPLICATE 358 1292*4d9fdb46SRobert Mustacchi #define DW_DLE_DEBUG_RNGLISTS_DUPLICATE 359 1293*4d9fdb46SRobert Mustacchi #define DW_DLE_ABBREV_OFF_END 360 1294*4d9fdb46SRobert Mustacchi #define DW_DLE_FORM_STRING_BAD_STRING 361 1295*4d9fdb46SRobert Mustacchi #define DW_DLE_AUGMENTATION_STRING_OFF_END 362 1296*4d9fdb46SRobert Mustacchi #define DW_DLE_STRING_OFF_END_PUBNAMES_LIKE 363 1297*4d9fdb46SRobert Mustacchi #define DW_DLE_LINE_STRING_BAD 364 1298*4d9fdb46SRobert Mustacchi #define DW_DLE_DEFINE_FILE_STRING_BAD 365 1299*4d9fdb46SRobert Mustacchi #define DW_DLE_MACRO_STRING_BAD 366 1300*4d9fdb46SRobert Mustacchi #define DW_DLE_MACINFO_STRING_BAD 367 1301*4d9fdb46SRobert Mustacchi #define DW_DLE_ZLIB_UNCOMPRESS_ERROR 368 1302*4d9fdb46SRobert Mustacchi #define DW_DLE_IMPROPER_DWO_ID 369 1303*4d9fdb46SRobert Mustacchi #define DW_DLE_GROUPNUMBER_ERROR 370 1304*4d9fdb46SRobert Mustacchi #define DW_DLE_ADDRESS_SIZE_ZERO 371 1305*4d9fdb46SRobert Mustacchi #define DW_DLE_DEBUG_NAMES_HEADER_ERROR 372 1306*4d9fdb46SRobert Mustacchi #define DW_DLE_DEBUG_NAMES_AUG_STRING_ERROR 373 1307*4d9fdb46SRobert Mustacchi #define DW_DLE_DEBUG_NAMES_PAD_NON_ZERO 374 1308*4d9fdb46SRobert Mustacchi #define DW_DLE_DEBUG_NAMES_OFF_END 375 1309*4d9fdb46SRobert Mustacchi #define DW_DLE_DEBUG_NAMES_ABBREV_OVERFLOW 376 1310*4d9fdb46SRobert Mustacchi #define DW_DLE_DEBUG_NAMES_ABBREV_CORRUPTION 377 1311*4d9fdb46SRobert Mustacchi #define DW_DLE_DEBUG_NAMES_NULL_POINTER 378 1312*4d9fdb46SRobert Mustacchi #define DW_DLE_DEBUG_NAMES_BAD_INDEX_ARG 379 1313*4d9fdb46SRobert Mustacchi #define DW_DLE_DEBUG_NAMES_ENTRYPOOL_OFFSET 380 1314*4d9fdb46SRobert Mustacchi #define DW_DLE_DEBUG_NAMES_UNHANDLED_FORM 381 1315*4d9fdb46SRobert Mustacchi #define DW_DLE_LNCT_CODE_UNKNOWN 382 1316*4d9fdb46SRobert Mustacchi #define DW_DLE_LNCT_FORM_CODE_NOT_HANDLED 383 1317*4d9fdb46SRobert Mustacchi #define DW_DLE_LINE_HEADER_LENGTH_BOTCH 384 1318*4d9fdb46SRobert Mustacchi #define DW_DLE_STRING_HASHTAB_IDENTITY_ERROR 385 1319*4d9fdb46SRobert Mustacchi #define DW_DLE_UNIT_TYPE_NOT_HANDLED 386 1320*4d9fdb46SRobert Mustacchi #define DW_DLE_GROUP_MAP_ALLOC 387 1321*4d9fdb46SRobert Mustacchi #define DW_DLE_GROUP_MAP_DUPLICATE 388 1322*4d9fdb46SRobert Mustacchi #define DW_DLE_GROUP_COUNT_ERROR 389 1323*4d9fdb46SRobert Mustacchi #define DW_DLE_GROUP_INTERNAL_ERROR 390 1324*4d9fdb46SRobert Mustacchi #define DW_DLE_GROUP_LOAD_ERROR 391 1325*4d9fdb46SRobert Mustacchi #define DW_DLE_GROUP_LOAD_READ_ERROR 392 1326*4d9fdb46SRobert Mustacchi #define DW_DLE_AUG_DATA_LENGTH_BAD 393 1327*4d9fdb46SRobert Mustacchi #define DW_DLE_ABBREV_MISSING 394 1328*4d9fdb46SRobert Mustacchi #define DW_DLE_NO_TAG_FOR_DIE 395 1329*4d9fdb46SRobert Mustacchi #define DW_DLE_LOWPC_WRONG_CLASS 396 1330*4d9fdb46SRobert Mustacchi #define DW_DLE_HIGHPC_WRONG_FORM 397 1331*4d9fdb46SRobert Mustacchi #define DW_DLE_STR_OFFSETS_BASE_WRONG_FORM 398 1332*4d9fdb46SRobert Mustacchi #define DW_DLE_DATA16_OUTSIDE_SECTION 399 1333*4d9fdb46SRobert Mustacchi #define DW_DLE_LNCT_MD5_WRONG_FORM 400 1334*4d9fdb46SRobert Mustacchi #define DW_DLE_LINE_HEADER_CORRUPT 401 1335*4d9fdb46SRobert Mustacchi #define DW_DLE_STR_OFFSETS_NULLARGUMENT 402 1336*4d9fdb46SRobert Mustacchi #define DW_DLE_STR_OFFSETS_NULL_DBG 403 1337*4d9fdb46SRobert Mustacchi #define DW_DLE_STR_OFFSETS_NO_MAGIC 404 1338*4d9fdb46SRobert Mustacchi #define DW_DLE_STR_OFFSETS_ARRAY_SIZE 405 1339*4d9fdb46SRobert Mustacchi #define DW_DLE_STR_OFFSETS_VERSION_WRONG 406 1340*4d9fdb46SRobert Mustacchi #define DW_DLE_STR_OFFSETS_ARRAY_INDEX_WRONG 407 1341*4d9fdb46SRobert Mustacchi #define DW_DLE_STR_OFFSETS_EXTRA_BYTES 408 1342*4d9fdb46SRobert Mustacchi #define DW_DLE_DUP_ATTR_ON_DIE 409 1343*4d9fdb46SRobert Mustacchi #define DW_DLE_SECTION_NAME_BIG 410 1344*4d9fdb46SRobert Mustacchi #define DW_DLE_FILE_UNAVAILABLE 411 1345*4d9fdb46SRobert Mustacchi #define DW_DLE_FILE_WRONG_TYPE 412 1346*4d9fdb46SRobert Mustacchi #define DW_DLE_SIBLING_OFFSET_WRONG 413 1347*4d9fdb46SRobert Mustacchi #define DW_DLE_OPEN_FAIL 414 1348*4d9fdb46SRobert Mustacchi #define DW_DLE_OFFSET_SIZE 415 1349*4d9fdb46SRobert Mustacchi #define DW_DLE_MACH_O_SEGOFFSET_BAD 416 1350*4d9fdb46SRobert Mustacchi #define DW_DLE_FILE_OFFSET_BAD 417 1351*4d9fdb46SRobert Mustacchi #define DW_DLE_SEEK_ERROR 418 1352*4d9fdb46SRobert Mustacchi #define DW_DLE_READ_ERROR 419 1353*4d9fdb46SRobert Mustacchi #define DW_DLE_ELF_CLASS_BAD 420 1354*4d9fdb46SRobert Mustacchi #define DW_DLE_ELF_ENDIAN_BAD 421 1355*4d9fdb46SRobert Mustacchi #define DW_DLE_ELF_VERSION_BAD 422 1356*4d9fdb46SRobert Mustacchi #define DW_DLE_FILE_TOO_SMALL 423 1357*4d9fdb46SRobert Mustacchi #define DW_DLE_PATH_SIZE_TOO_SMALL 424 1358*4d9fdb46SRobert Mustacchi #define DW_DLE_BAD_TYPE_SIZE 425 1359*4d9fdb46SRobert Mustacchi #define DW_DLE_PE_SIZE_SMALL 426 1360*4d9fdb46SRobert Mustacchi #define DW_DLE_PE_OFFSET_BAD 427 1361*4d9fdb46SRobert Mustacchi #define DW_DLE_PE_STRING_TOO_LONG 428 1362*4d9fdb46SRobert Mustacchi #define DW_DLE_IMAGE_FILE_UNKNOWN_TYPE 429 1363*4d9fdb46SRobert Mustacchi #define DW_DLE_LINE_TABLE_LINENO_ERROR 430 1364*4d9fdb46SRobert Mustacchi #define DW_DLE_PRODUCER_CODE_NOT_AVAILABLE 431 1365*4d9fdb46SRobert Mustacchi #define DW_DLE_NO_ELF_SUPPORT 432 1366*4d9fdb46SRobert Mustacchi #define DW_DLE_NO_STREAM_RELOC_SUPPORT 433 1367*4d9fdb46SRobert Mustacchi #define DW_DLE_RETURN_EMPTY_PUBNAMES_ERROR 434 1368*4d9fdb46SRobert Mustacchi #define DW_DLE_SECTION_SIZE_ERROR 435 1369*4d9fdb46SRobert Mustacchi #define DW_DLE_INTERNAL_NULL_POINTER 436 1370*4d9fdb46SRobert Mustacchi #define DW_DLE_SECTION_STRING_OFFSET_BAD 437 1371*4d9fdb46SRobert Mustacchi #define DW_DLE_SECTION_INDEX_BAD 438 1372*4d9fdb46SRobert Mustacchi #define DW_DLE_INTEGER_TOO_SMALL 439 1373*4d9fdb46SRobert Mustacchi #define DW_DLE_ELF_SECTION_LINK_ERROR 440 1374*4d9fdb46SRobert Mustacchi #define DW_DLE_ELF_SECTION_GROUP_ERROR 441 1375*4d9fdb46SRobert Mustacchi #define DW_DLE_ELF_SECTION_COUNT_MISMATCH 442 1376*4d9fdb46SRobert Mustacchi #define DW_DLE_ELF_STRING_SECTION_MISSING 443 1377*4d9fdb46SRobert Mustacchi #define DW_DLE_SEEK_OFF_END 444 1378*4d9fdb46SRobert Mustacchi #define DW_DLE_READ_OFF_END 445 1379*4d9fdb46SRobert Mustacchi #define DW_DLE_ELF_SECTION_ERROR 446 1380*4d9fdb46SRobert Mustacchi #define DW_DLE_ELF_STRING_SECTION_ERROR 447 1381*4d9fdb46SRobert Mustacchi #define DW_DLE_MIXING_SPLIT_DWARF_VERSIONS 448 1382*4d9fdb46SRobert Mustacchi #define DW_DLE_TAG_CORRUPT 449 1383*4d9fdb46SRobert Mustacchi #define DW_DLE_FORM_CORRUPT 450 1384*4d9fdb46SRobert Mustacchi #define DW_DLE_ATTR_CORRUPT 451 1385*4d9fdb46SRobert Mustacchi #define DW_DLE_ABBREV_ATTR_DUPLICATION 452 1386*4d9fdb46SRobert Mustacchi #define DW_DLE_DWP_SIGNATURE_MISMATCH 453 1387*4d9fdb46SRobert Mustacchi #define DW_DLE_CU_UT_TYPE_VALUE 454 1388*4d9fdb46SRobert Mustacchi #define DW_DLE_DUPLICATE_GNU_DEBUGLINK 455 1389*4d9fdb46SRobert Mustacchi #define DW_DLE_CORRUPT_GNU_DEBUGLINK 456 1390*4d9fdb46SRobert Mustacchi #define DW_DLE_CORRUPT_NOTE_GNU_DEBUGID 457 1391*4d9fdb46SRobert Mustacchi #define DW_DLE_CORRUPT_GNU_DEBUGID_SIZE 458 1392*4d9fdb46SRobert Mustacchi #define DW_DLE_CORRUPT_GNU_DEBUGID_STRING 459 1393*4d9fdb46SRobert Mustacchi #define DW_DLE_HEX_STRING_ERROR 460 1394*4d9fdb46SRobert Mustacchi #define DW_DLE_DECIMAL_STRING_ERROR 461 1395*4d9fdb46SRobert Mustacchi #define DW_DLE_PRO_INIT_EXTRAS_UNKNOWN 462 1396*4d9fdb46SRobert Mustacchi #define DW_DLE_PRO_INIT_EXTRAS_ERR 463 1397*4d9fdb46SRobert Mustacchi #define DW_DLE_NULL_ARGS_DWARF_ADD_PATH 464 1398*4d9fdb46SRobert Mustacchi #define DW_DLE_DWARF_INIT_DBG_NULL 465 1399*4d9fdb46SRobert Mustacchi #define DW_DLE_ELF_RELOC_SECTION_ERROR 466 1400*4d9fdb46SRobert Mustacchi #define DW_DLE_USER_DECLARED_ERROR 467 1401*4d9fdb46SRobert Mustacchi #define DW_DLE_RNGLISTS_ERROR 468 1402*4d9fdb46SRobert Mustacchi #define DW_DLE_LOCLISTS_ERROR 469 1403bc1f688bSRobert Mustacchi 1404*4d9fdb46SRobert Mustacchi /* LAST MUST EQUAL LAST ERROR NUMBER */ 1405*4d9fdb46SRobert Mustacchi #define DW_DLE_LAST 469 1406bc1f688bSRobert Mustacchi 1407bc1f688bSRobert Mustacchi #define DW_DLE_LO_USER 0x10000 1408bc1f688bSRobert Mustacchi 1409bc1f688bSRobert Mustacchi /* Taken as meaning 'undefined value', this is not 1410bc1f688bSRobert Mustacchi a column or register number. 1411bc1f688bSRobert Mustacchi Only present at libdwarf runtime. Never on disk. 1412bc1f688bSRobert Mustacchi DW_FRAME_* Values present on disk are in dwarf.h 1413bc1f688bSRobert Mustacchi */ 1414bc1f688bSRobert Mustacchi #define DW_FRAME_UNDEFINED_VAL 1034 1415bc1f688bSRobert Mustacchi 1416bc1f688bSRobert Mustacchi /* Taken as meaning 'same value' as caller had, not a column 1417bc1f688bSRobert Mustacchi or register number 1418bc1f688bSRobert Mustacchi Only present at libdwarf runtime. Never on disk. 1419bc1f688bSRobert Mustacchi DW_FRAME_* Values present on disk are in dwarf.h 1420bc1f688bSRobert Mustacchi */ 1421bc1f688bSRobert Mustacchi #define DW_FRAME_SAME_VAL 1035 1422bc1f688bSRobert Mustacchi 1423bc1f688bSRobert Mustacchi 1424bc1f688bSRobert Mustacchi 1425bc1f688bSRobert Mustacchi /* error return values 1426bc1f688bSRobert Mustacchi */ 1427bc1f688bSRobert Mustacchi #define DW_DLV_BADADDR (~(Dwarf_Addr)0) 1428bc1f688bSRobert Mustacchi /* for functions returning target address */ 1429bc1f688bSRobert Mustacchi 1430bc1f688bSRobert Mustacchi #define DW_DLV_NOCOUNT ((Dwarf_Signed)-1) 1431bc1f688bSRobert Mustacchi /* for functions returning count */ 1432bc1f688bSRobert Mustacchi 1433bc1f688bSRobert Mustacchi #define DW_DLV_BADOFFSET (~(Dwarf_Off)0) 1434bc1f688bSRobert Mustacchi /* for functions returning offset */ 1435bc1f688bSRobert Mustacchi 1436bc1f688bSRobert Mustacchi /* standard return values for functions */ 1437bc1f688bSRobert Mustacchi #define DW_DLV_NO_ENTRY -1 1438bc1f688bSRobert Mustacchi #define DW_DLV_OK 0 1439bc1f688bSRobert Mustacchi #define DW_DLV_ERROR 1 1440bc1f688bSRobert Mustacchi 1441bc1f688bSRobert Mustacchi /* Special values for offset_into_exception_table field of dwarf fde's. */ 1442bc1f688bSRobert Mustacchi /* The following value indicates that there is no Exception table offset 1443bc1f688bSRobert Mustacchi associated with a dwarf frame. */ 1444bc1f688bSRobert Mustacchi #define DW_DLX_NO_EH_OFFSET (-1LL) 1445bc1f688bSRobert Mustacchi /* The following value indicates that the producer was unable to analyse the 1446bc1f688bSRobert Mustacchi source file to generate Exception tables for this function. */ 1447bc1f688bSRobert Mustacchi #define DW_DLX_EH_OFFSET_UNAVAILABLE (-2LL) 1448bc1f688bSRobert Mustacchi 1449*4d9fdb46SRobert Mustacchi /* The dwarf specification separates FORMs into 1450*4d9fdb46SRobert Mustacchi different classes. To do the seperation properly 1451*4d9fdb46SRobert Mustacchi requires 4 pieces of data as of DWARF4 (thus the 1452*4d9fdb46SRobert Mustacchi function arguments listed here). 1453*4d9fdb46SRobert Mustacchi The DWARF4 specification class definition suffices to 1454*4d9fdb46SRobert Mustacchi describe all DWARF versions. 1455*4d9fdb46SRobert Mustacchi See section 7.5.4, Attribute Encodings. 1456*4d9fdb46SRobert Mustacchi A return of DW_FORM_CLASS_UNKNOWN means we could not properly figure 1457*4d9fdb46SRobert Mustacchi out what form-class it is. 1458*4d9fdb46SRobert Mustacchi 1459*4d9fdb46SRobert Mustacchi DW_FORM_CLASS_FRAMEPTR is MIPS/IRIX only, and refers 1460*4d9fdb46SRobert Mustacchi to the DW_AT_MIPS_fde attribute (a reference to the 1461*4d9fdb46SRobert Mustacchi .debug_frame section). 1462*4d9fdb46SRobert Mustacchi 1463*4d9fdb46SRobert Mustacchi DWARF5: 1464*4d9fdb46SRobert Mustacchi DW_FORM_CLASS_LOCLISTSPTR is like DW_FORM_CLASS_LOCLIST 1465*4d9fdb46SRobert Mustacchi except that LOCLISTSPTR is aways a section offset, 1466*4d9fdb46SRobert Mustacchi never an index, and LOCLISTSPTR is only referenced 1467*4d9fdb46SRobert Mustacchi by DW_AT_loclists_base. 1468*4d9fdb46SRobert Mustacchi Note DW_FORM_CLASS_LOCLISTSPTR spelling to distinguish 1469*4d9fdb46SRobert Mustacchi from DW_FORM_CLASS_LOCLISTPTR. 1470*4d9fdb46SRobert Mustacchi 1471*4d9fdb46SRobert Mustacchi DWARF5: 1472*4d9fdb46SRobert Mustacchi DW_FORM_CLASS_RNGLISTSPTR is like DW_FORM_CLASS_RNGLIST 1473*4d9fdb46SRobert Mustacchi except that RNGLISTSPTR is aways a section offset, 1474*4d9fdb46SRobert Mustacchi never an index. DW_FORM_CLASS_RNGLISTSPTR is only 1475*4d9fdb46SRobert Mustacchi referenced by DW_AT_rnglists_base. 1476*4d9fdb46SRobert Mustacchi */ 1477*4d9fdb46SRobert Mustacchi enum Dwarf_Form_Class { 1478*4d9fdb46SRobert Mustacchi DW_FORM_CLASS_UNKNOWN, DW_FORM_CLASS_ADDRESS, 1479*4d9fdb46SRobert Mustacchi DW_FORM_CLASS_BLOCK, DW_FORM_CLASS_CONSTANT, 1480*4d9fdb46SRobert Mustacchi DW_FORM_CLASS_EXPRLOC, DW_FORM_CLASS_FLAG, 1481*4d9fdb46SRobert Mustacchi DW_FORM_CLASS_LINEPTR, 1482*4d9fdb46SRobert Mustacchi DW_FORM_CLASS_LOCLISTPTR, /* DWARF2,3,4 only */ 1483*4d9fdb46SRobert Mustacchi DW_FORM_CLASS_MACPTR, /* DWARF2,3,4 only */ 1484*4d9fdb46SRobert Mustacchi DW_FORM_CLASS_RANGELISTPTR, /* DWARF2,3,4 only */ 1485*4d9fdb46SRobert Mustacchi DW_FORM_CLASS_REFERENCE, 1486*4d9fdb46SRobert Mustacchi DW_FORM_CLASS_STRING, 1487*4d9fdb46SRobert Mustacchi DW_FORM_CLASS_FRAMEPTR, /* MIPS/IRIX DWARF2 only */ 1488*4d9fdb46SRobert Mustacchi DW_FORM_CLASS_MACROPTR, /* DWARF5 */ 1489*4d9fdb46SRobert Mustacchi DW_FORM_CLASS_ADDRPTR, /* DWARF5 */ 1490*4d9fdb46SRobert Mustacchi DW_FORM_CLASS_LOCLIST, /* DWARF5 */ 1491*4d9fdb46SRobert Mustacchi DW_FORM_CLASS_LOCLISTSPTR, /* DWARF5 */ 1492*4d9fdb46SRobert Mustacchi DW_FORM_CLASS_RNGLIST, /* DWARF5 */ 1493*4d9fdb46SRobert Mustacchi DW_FORM_CLASS_RNGLISTSPTR, /* DWARF5 */ 1494*4d9fdb46SRobert Mustacchi DW_FORM_CLASS_STROFFSETSPTR /* DWARF5 */ 1495*4d9fdb46SRobert Mustacchi }; 1496*4d9fdb46SRobert Mustacchi 1497*4d9fdb46SRobert Mustacchi /* These support opening DWARF5 split dwarf objects. */ 1498*4d9fdb46SRobert Mustacchi #define DW_GROUPNUMBER_ANY 0 1499*4d9fdb46SRobert Mustacchi #define DW_GROUPNUMBER_BASE 1 1500*4d9fdb46SRobert Mustacchi #define DW_GROUPNUMBER_DWO 2 1501bc1f688bSRobert Mustacchi 1502bc1f688bSRobert Mustacchi /*===========================================================================*/ 1503bc1f688bSRobert Mustacchi /* Dwarf consumer interface initialization and termination operations */ 1504bc1f688bSRobert Mustacchi 1505*4d9fdb46SRobert Mustacchi /* Initialization based on path. This is new October 2018. 1506*4d9fdb46SRobert Mustacchi The path actually used is copied to true_path_out 1507*4d9fdb46SRobert Mustacchi and in the case of MacOS dSYM may not match path. 1508*4d9fdb46SRobert Mustacchi So consider the value put in true_path_out the 1509*4d9fdb46SRobert Mustacchi actual file name. reserved1,2,3 should all be passed 1510*4d9fdb46SRobert Mustacchi as zero. */ 1511*4d9fdb46SRobert Mustacchi int dwarf_init_path(const char * /*path*/, 1512*4d9fdb46SRobert Mustacchi char * /*true_path_out_buffer*/, 1513*4d9fdb46SRobert Mustacchi unsigned int /*true_path_bufferlen*/, 1514*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*access*/, 1515*4d9fdb46SRobert Mustacchi unsigned int /*groupnumber*/, 1516*4d9fdb46SRobert Mustacchi Dwarf_Handler /*errhand*/, 1517*4d9fdb46SRobert Mustacchi Dwarf_Ptr /*errarg*/, 1518*4d9fdb46SRobert Mustacchi Dwarf_Debug* /*dbg*/, 1519*4d9fdb46SRobert Mustacchi const char * /* reserved1 */, 1520*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /* reserved2 */, 1521*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /* reserved3 */, 1522*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 1523*4d9fdb46SRobert Mustacchi 1524*4d9fdb46SRobert Mustacchi /* Initialization based on Unix(etc) open fd */ 1525*4d9fdb46SRobert Mustacchi /* New March 2017 */ 1526*4d9fdb46SRobert Mustacchi int dwarf_init_b(int /*fd*/, 1527*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*access*/, 1528*4d9fdb46SRobert Mustacchi unsigned int /*groupnumber*/, 1529*4d9fdb46SRobert Mustacchi Dwarf_Handler /*errhand*/, 1530*4d9fdb46SRobert Mustacchi Dwarf_Ptr /*errarg*/, 1531*4d9fdb46SRobert Mustacchi Dwarf_Debug* /*dbg*/, 1532*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 1533*4d9fdb46SRobert Mustacchi 1534bc1f688bSRobert Mustacchi int dwarf_init(int /*fd*/, 1535bc1f688bSRobert Mustacchi Dwarf_Unsigned /*access*/, 1536bc1f688bSRobert Mustacchi Dwarf_Handler /*errhand*/, 1537bc1f688bSRobert Mustacchi Dwarf_Ptr /*errarg*/, 1538bc1f688bSRobert Mustacchi Dwarf_Debug* /*dbg*/, 1539bc1f688bSRobert Mustacchi Dwarf_Error* /*error*/); 1540bc1f688bSRobert Mustacchi 1541*4d9fdb46SRobert Mustacchi /* The dwarf_elf_init* functions continue to be supported, 1542*4d9fdb46SRobert Mustacchi but should be considered deprecated as they can ONLY 1543*4d9fdb46SRobert Mustacchi be used on Elf files. */ 1544bc1f688bSRobert Mustacchi /* Initialization based on libelf/sgi-fastlibelf open pointer. */ 1545*4d9fdb46SRobert Mustacchi /* New March 2017 */ 1546*4d9fdb46SRobert Mustacchi int dwarf_elf_init_b(dwarf_elf_handle /*elf*/, 1547*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*access*/, 1548*4d9fdb46SRobert Mustacchi unsigned int /*group_number*/, 1549*4d9fdb46SRobert Mustacchi Dwarf_Handler /*errhand*/, 1550*4d9fdb46SRobert Mustacchi Dwarf_Ptr /*errarg*/, 1551*4d9fdb46SRobert Mustacchi Dwarf_Debug* /*dbg*/, 1552*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 1553bc1f688bSRobert Mustacchi int dwarf_elf_init(dwarf_elf_handle /*elf*/, 1554bc1f688bSRobert Mustacchi Dwarf_Unsigned /*access*/, 1555bc1f688bSRobert Mustacchi Dwarf_Handler /*errhand*/, 1556bc1f688bSRobert Mustacchi Dwarf_Ptr /*errarg*/, 1557bc1f688bSRobert Mustacchi Dwarf_Debug* /*dbg*/, 1558bc1f688bSRobert Mustacchi Dwarf_Error* /*error*/); 1559bc1f688bSRobert Mustacchi 1560*4d9fdb46SRobert Mustacchi /* New September 2019. 1561*4d9fdb46SRobert Mustacchi When using dwarf_elf_init[_b]() we still want the file path 1562*4d9fdb46SRobert Mustacchi in the record. So we add it after the init phase. 1563*4d9fdb46SRobert Mustacchi Path is needed for buildid and debuglink to fully work. 1564*4d9fdb46SRobert Mustacchi */ 1565*4d9fdb46SRobert Mustacchi int dwarf_add_file_path(Dwarf_Debug /*dbg*/, 1566*4d9fdb46SRobert Mustacchi const char * /*file_name*/, 1567*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 1568*4d9fdb46SRobert Mustacchi 1569bc1f688bSRobert Mustacchi /* Undocumented function for memory allocator. */ 1570bc1f688bSRobert Mustacchi void dwarf_print_memory_stats(Dwarf_Debug /*dbg*/); 1571bc1f688bSRobert Mustacchi 1572bc1f688bSRobert Mustacchi int dwarf_get_elf(Dwarf_Debug /*dbg*/, 1573bc1f688bSRobert Mustacchi dwarf_elf_handle* /*return_elfptr*/, 1574bc1f688bSRobert Mustacchi Dwarf_Error* /*error*/); 1575bc1f688bSRobert Mustacchi 1576bc1f688bSRobert Mustacchi int dwarf_finish(Dwarf_Debug /*dbg*/, Dwarf_Error* /*error*/); 1577bc1f688bSRobert Mustacchi 1578bc1f688bSRobert Mustacchi 1579*4d9fdb46SRobert Mustacchi /* NEW March 2017. */ 1580*4d9fdb46SRobert Mustacchi int dwarf_object_init_b(Dwarf_Obj_Access_Interface* /*obj*/, 1581*4d9fdb46SRobert Mustacchi Dwarf_Handler /*errhand*/, 1582*4d9fdb46SRobert Mustacchi Dwarf_Ptr /*errarg*/, 1583*4d9fdb46SRobert Mustacchi unsigned int /*groupnumber*/, 1584*4d9fdb46SRobert Mustacchi Dwarf_Debug* /*dbg*/, 1585*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 1586*4d9fdb46SRobert Mustacchi 1587bc1f688bSRobert Mustacchi int dwarf_object_init(Dwarf_Obj_Access_Interface* /*obj*/, 1588bc1f688bSRobert Mustacchi Dwarf_Handler /*errhand*/, 1589bc1f688bSRobert Mustacchi Dwarf_Ptr /*errarg*/, 1590bc1f688bSRobert Mustacchi Dwarf_Debug* /*dbg*/, 1591bc1f688bSRobert Mustacchi Dwarf_Error* /*error*/); 1592bc1f688bSRobert Mustacchi 1593*4d9fdb46SRobert Mustacchi int dwarf_set_tied_dbg(Dwarf_Debug /*basedbg*/, 1594*4d9fdb46SRobert Mustacchi Dwarf_Debug /*tied_dbg*/, 1595*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 1596*4d9fdb46SRobert Mustacchi 1597*4d9fdb46SRobert Mustacchi /* Likely not very useful.? */ 1598*4d9fdb46SRobert Mustacchi int dwarf_get_tied_dbg(Dwarf_Debug /*dbg*/, 1599*4d9fdb46SRobert Mustacchi Dwarf_Debug * /*tieddbg_out*/, 1600*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 1601*4d9fdb46SRobert Mustacchi 1602bc1f688bSRobert Mustacchi int dwarf_object_finish(Dwarf_Debug /*dbg*/, 1603bc1f688bSRobert Mustacchi Dwarf_Error* /*error*/); 1604bc1f688bSRobert Mustacchi 1605*4d9fdb46SRobert Mustacchi /* Returns the version string. Example: "20190922" 1606*4d9fdb46SRobert Mustacchi which is in ISO date format. */ 1607*4d9fdb46SRobert Mustacchi const char * dwarf_package_version(void); 1608*4d9fdb46SRobert Mustacchi 1609*4d9fdb46SRobert Mustacchi /* Section name access. Because sections might 1610*4d9fdb46SRobert Mustacchi now end with .dwo or be .zdebug or might not. 1611*4d9fdb46SRobert Mustacchi */ 1612*4d9fdb46SRobert Mustacchi int dwarf_get_die_section_name(Dwarf_Debug /*dbg*/, 1613*4d9fdb46SRobert Mustacchi Dwarf_Bool /*is_info*/, 1614*4d9fdb46SRobert Mustacchi const char ** /*sec_name*/, 1615*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 1616*4d9fdb46SRobert Mustacchi 1617*4d9fdb46SRobert Mustacchi int dwarf_get_die_section_name_b(Dwarf_Die /*die*/, 1618*4d9fdb46SRobert Mustacchi const char ** /*sec_name*/, 1619*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 1620*4d9fdb46SRobert Mustacchi 1621*4d9fdb46SRobert Mustacchi int dwarf_get_real_section_name(Dwarf_Debug /*dbg*/, 1622*4d9fdb46SRobert Mustacchi const char * /*std_section_name*/, 1623*4d9fdb46SRobert Mustacchi const char ** /*actual_sec_name_out*/, 1624*4d9fdb46SRobert Mustacchi Dwarf_Small * /*marked_compressed*/, /* .zdebug... */ 1625*4d9fdb46SRobert Mustacchi Dwarf_Small * /*marked_zlib_compressed */, /* ZLIB string */ 1626*4d9fdb46SRobert Mustacchi Dwarf_Small * /*marked_shf_compressed*/, /* SHF_COMPRESSED */ 1627*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*compressed_length*/, 1628*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*uncompressed_length*/, 1629*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 1630*4d9fdb46SRobert Mustacchi 1631*4d9fdb46SRobert Mustacchi 1632*4d9fdb46SRobert Mustacchi 1633*4d9fdb46SRobert Mustacchi /* dwarf_next_cu_header_d traverses debug_types CU headers. 1634*4d9fdb46SRobert Mustacchi New in May, 2015. 1635*4d9fdb46SRobert Mustacchi */ 1636*4d9fdb46SRobert Mustacchi int dwarf_next_cu_header_d(Dwarf_Debug /*dbg*/, 1637*4d9fdb46SRobert Mustacchi Dwarf_Bool /*is_info*/, 1638*4d9fdb46SRobert Mustacchi Dwarf_Unsigned* /*cu_header_length*/, 1639*4d9fdb46SRobert Mustacchi Dwarf_Half* /*version_stamp*/, 1640*4d9fdb46SRobert Mustacchi Dwarf_Off* /*abbrev_offset*/, 1641*4d9fdb46SRobert Mustacchi Dwarf_Half* /*address_size*/, 1642*4d9fdb46SRobert Mustacchi Dwarf_Half* /*length_size*/, 1643*4d9fdb46SRobert Mustacchi Dwarf_Half* /*extension_size*/, 1644*4d9fdb46SRobert Mustacchi Dwarf_Sig8* /*type signature*/, 1645*4d9fdb46SRobert Mustacchi Dwarf_Unsigned* /*typeoffset*/, 1646*4d9fdb46SRobert Mustacchi Dwarf_Unsigned* /*next_cu_header_offset*/, 1647*4d9fdb46SRobert Mustacchi Dwarf_Half * /*header_cu_type*/, 1648*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 1649*4d9fdb46SRobert Mustacchi 1650*4d9fdb46SRobert Mustacchi /* Die traversal operations. 1651*4d9fdb46SRobert Mustacchi dwarf_next_cu_header_b traverses debug_info CU headers. 1652*4d9fdb46SRobert Mustacchi Obsolete but supported. 1653*4d9fdb46SRobert Mustacchi */ 1654bc1f688bSRobert Mustacchi int dwarf_next_cu_header_b(Dwarf_Debug /*dbg*/, 1655bc1f688bSRobert Mustacchi Dwarf_Unsigned* /*cu_header_length*/, 1656bc1f688bSRobert Mustacchi Dwarf_Half* /*version_stamp*/, 1657bc1f688bSRobert Mustacchi Dwarf_Off* /*abbrev_offset*/, 1658bc1f688bSRobert Mustacchi Dwarf_Half* /*address_size*/, 1659bc1f688bSRobert Mustacchi Dwarf_Half* /*length_size*/, 1660bc1f688bSRobert Mustacchi Dwarf_Half* /*extension_size*/, 1661bc1f688bSRobert Mustacchi Dwarf_Unsigned* /*next_cu_header_offset*/, 1662bc1f688bSRobert Mustacchi Dwarf_Error* /*error*/); 1663*4d9fdb46SRobert Mustacchi 1664*4d9fdb46SRobert Mustacchi /* dwarf_next_cu_header_types traverses debug_types CU headers. 1665*4d9fdb46SRobert Mustacchi New in October, 2011. Obsolete but supported May 2015. 1666*4d9fdb46SRobert Mustacchi */ 1667*4d9fdb46SRobert Mustacchi int dwarf_next_cu_header_c(Dwarf_Debug /*dbg*/, 1668*4d9fdb46SRobert Mustacchi Dwarf_Bool /*is_info*/, 1669*4d9fdb46SRobert Mustacchi Dwarf_Unsigned* /*cu_header_length*/, 1670*4d9fdb46SRobert Mustacchi Dwarf_Half* /*version_stamp*/, 1671*4d9fdb46SRobert Mustacchi Dwarf_Off* /*abbrev_offset*/, 1672*4d9fdb46SRobert Mustacchi Dwarf_Half* /*address_size*/, 1673*4d9fdb46SRobert Mustacchi Dwarf_Half* /*length_size*/, 1674*4d9fdb46SRobert Mustacchi Dwarf_Half* /*extension_size*/, 1675*4d9fdb46SRobert Mustacchi Dwarf_Sig8* /*type signature*/, 1676*4d9fdb46SRobert Mustacchi Dwarf_Unsigned* /*typeoffset*/, 1677*4d9fdb46SRobert Mustacchi Dwarf_Unsigned* /*next_cu_header_offset*/, 1678*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 1679*4d9fdb46SRobert Mustacchi /* The following is obsolete, though supported. November 2009. */ 1680bc1f688bSRobert Mustacchi int dwarf_next_cu_header(Dwarf_Debug /*dbg*/, 1681bc1f688bSRobert Mustacchi Dwarf_Unsigned* /*cu_header_length*/, 1682bc1f688bSRobert Mustacchi Dwarf_Half* /*version_stamp*/, 1683bc1f688bSRobert Mustacchi Dwarf_Off* /*abbrev_offset*/, 1684bc1f688bSRobert Mustacchi Dwarf_Half* /*address_size*/, 1685bc1f688bSRobert Mustacchi Dwarf_Unsigned* /*next_cu_header_offset*/, 1686bc1f688bSRobert Mustacchi Dwarf_Error* /*error*/); 1687bc1f688bSRobert Mustacchi 1688bc1f688bSRobert Mustacchi int dwarf_siblingof(Dwarf_Debug /*dbg*/, 1689bc1f688bSRobert Mustacchi Dwarf_Die /*die*/, 1690bc1f688bSRobert Mustacchi Dwarf_Die* /*return_siblingdie*/, 1691bc1f688bSRobert Mustacchi Dwarf_Error* /*error*/); 1692*4d9fdb46SRobert Mustacchi /* dwarf_siblingof_b new October 2011. */ 1693*4d9fdb46SRobert Mustacchi int dwarf_siblingof_b(Dwarf_Debug /*dbg*/, 1694*4d9fdb46SRobert Mustacchi Dwarf_Die /*die*/, 1695*4d9fdb46SRobert Mustacchi Dwarf_Bool /*is_info*/, 1696*4d9fdb46SRobert Mustacchi Dwarf_Die* /*return_siblingdie*/, 1697*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 1698*4d9fdb46SRobert Mustacchi 1699*4d9fdb46SRobert Mustacchi /* New 27 April 2015. */ 1700*4d9fdb46SRobert Mustacchi int dwarf_die_from_hash_signature(Dwarf_Debug /*dbg*/, 1701*4d9fdb46SRobert Mustacchi Dwarf_Sig8 * /*hash_sig*/, 1702*4d9fdb46SRobert Mustacchi const char * /*sig_type: "tu" or "cu"*/, 1703*4d9fdb46SRobert Mustacchi Dwarf_Die* /*returned_CU_die */, 1704*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 1705bc1f688bSRobert Mustacchi 1706bc1f688bSRobert Mustacchi int dwarf_child(Dwarf_Die /*die*/, 1707bc1f688bSRobert Mustacchi Dwarf_Die* /*return_childdie*/, 1708bc1f688bSRobert Mustacchi Dwarf_Error* /*error*/); 1709bc1f688bSRobert Mustacchi 1710*4d9fdb46SRobert Mustacchi /* Finding die given global (not CU-relative) offset. 1711*4d9fdb46SRobert Mustacchi Applies only to debug_info. */ 1712bc1f688bSRobert Mustacchi int dwarf_offdie(Dwarf_Debug /*dbg*/, 1713bc1f688bSRobert Mustacchi Dwarf_Off /*offset*/, 1714bc1f688bSRobert Mustacchi Dwarf_Die* /*return_die*/, 1715bc1f688bSRobert Mustacchi Dwarf_Error* /*error*/); 1716bc1f688bSRobert Mustacchi 1717*4d9fdb46SRobert Mustacchi /* dwarf_offdie_b new October 2011 */ 1718*4d9fdb46SRobert Mustacchi /* Finding die given global (not CU-relative) offset. 1719*4d9fdb46SRobert Mustacchi Applies to debug_info (is_info true) or debug_types (is_info false). */ 1720*4d9fdb46SRobert Mustacchi int dwarf_offdie_b(Dwarf_Debug /*dbg*/, 1721*4d9fdb46SRobert Mustacchi Dwarf_Off /*offset*/, 1722*4d9fdb46SRobert Mustacchi Dwarf_Bool /*is_info*/, 1723bc1f688bSRobert Mustacchi Dwarf_Die* /*return_die*/, 1724bc1f688bSRobert Mustacchi Dwarf_Error* /*error*/); 1725bc1f688bSRobert Mustacchi 1726*4d9fdb46SRobert Mustacchi /* Returns the is_info flag through the pointer if the function returns 1727*4d9fdb46SRobert Mustacchi DW_DLV_OK. Needed so client software knows if a DIE is in debug_info 1728*4d9fdb46SRobert Mustacchi or debug_types. 1729*4d9fdb46SRobert Mustacchi New October 2011. */ 1730*4d9fdb46SRobert Mustacchi Dwarf_Bool dwarf_get_die_infotypes_flag(Dwarf_Die /*die*/); 1731bc1f688bSRobert Mustacchi 1732*4d9fdb46SRobert Mustacchi /* New March 2016. 1733*4d9fdb46SRobert Mustacchi So we can associate a DIE's abbreviations with the contents 1734*4d9fdb46SRobert Mustacchi the abbreviations section. */ 1735*4d9fdb46SRobert Mustacchi int dwarf_die_abbrev_global_offset(Dwarf_Die /*die*/, 1736*4d9fdb46SRobert Mustacchi Dwarf_Off * /*abbrev_offset*/, 1737*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*abbrev_count*/, 1738bc1f688bSRobert Mustacchi Dwarf_Error* /*error*/); 1739bc1f688bSRobert Mustacchi 1740bc1f688bSRobert Mustacchi /* operations on DIEs */ 1741bc1f688bSRobert Mustacchi int dwarf_tag(Dwarf_Die /*die*/, 1742bc1f688bSRobert Mustacchi Dwarf_Half* /*return_tag*/, 1743bc1f688bSRobert Mustacchi Dwarf_Error* /*error*/); 1744bc1f688bSRobert Mustacchi 1745bc1f688bSRobert Mustacchi /* dwarf_dieoffset returns the global debug_info 1746bc1f688bSRobert Mustacchi section offset, not the CU relative offset. */ 1747bc1f688bSRobert Mustacchi int dwarf_dieoffset(Dwarf_Die /*die*/, 1748bc1f688bSRobert Mustacchi Dwarf_Off* /*return_offset*/, 1749bc1f688bSRobert Mustacchi Dwarf_Error* /*error*/); 1750bc1f688bSRobert Mustacchi 1751*4d9fdb46SRobert Mustacchi /* NEW October 2015. DWARF5. 1752*4d9fdb46SRobert Mustacchi The DIE here can be any DIE in the relevant CU. 1753*4d9fdb46SRobert Mustacchi index is an index into .debug_addr. 1754*4d9fdb46SRobert Mustacchi This will look first for .debug_addr 1755*4d9fdb46SRobert Mustacchi in the dbg object DIE 1756*4d9fdb46SRobert Mustacchi and if not there (because the dbg object is 1757*4d9fdb46SRobert Mustacchi a dwo or dwp split dwarf object) 1758*4d9fdb46SRobert Mustacchi will look in the tied object if tied is available. */ 1759*4d9fdb46SRobert Mustacchi int dwarf_debug_addr_index_to_addr(Dwarf_Die /*die*/, 1760*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*index*/, 1761*4d9fdb46SRobert Mustacchi Dwarf_Addr * /*return_addr*/, 1762*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 1763*4d9fdb46SRobert Mustacchi /* Reading a CU DIE with DW_AT_low_pc an indexed value 1764*4d9fdb46SRobert Mustacchi can be problematic as that interacts with DW_AT_addr_base 1765*4d9fdb46SRobert Mustacchi in that DIE. Here is a test readers may find useful */ 1766*4d9fdb46SRobert Mustacchi Dwarf_Bool dwarf_addr_form_is_indexed(int form); 1767*4d9fdb46SRobert Mustacchi 1768*4d9fdb46SRobert Mustacchi 1769bc1f688bSRobert Mustacchi /* dwarf_CU_dieoffset_given_die returns 1770bc1f688bSRobert Mustacchi the global debug_info section offset of the CU die 1771bc1f688bSRobert Mustacchi that is the CU containing the given_die 1772bc1f688bSRobert Mustacchi (the passed in DIE can be any DIE). 1773bc1f688bSRobert Mustacchi This information makes it possible for a consumer to 1774bc1f688bSRobert Mustacchi find and print CU context information for any die. 1775*4d9fdb46SRobert Mustacchi See also dwarf_get_cu_die_offset_given_cu_header_offset. */ 1776bc1f688bSRobert Mustacchi int dwarf_CU_dieoffset_given_die(Dwarf_Die /*given_die*/, 1777bc1f688bSRobert Mustacchi Dwarf_Off* /*return_offset*/, 1778bc1f688bSRobert Mustacchi Dwarf_Error* /*error*/); 1779bc1f688bSRobert Mustacchi 1780bc1f688bSRobert Mustacchi /* dwarf_die_CU_offset returns the CU relative offset 1781bc1f688bSRobert Mustacchi not the global debug_info section offset, given 1782*4d9fdb46SRobert Mustacchi any DIE in the CU. See also dwarf_CU_dieoffset_given_die. 1783bc1f688bSRobert Mustacchi */ 1784bc1f688bSRobert Mustacchi int dwarf_die_CU_offset(Dwarf_Die /*die*/, 1785bc1f688bSRobert Mustacchi Dwarf_Off* /*return_offset*/, 1786bc1f688bSRobert Mustacchi Dwarf_Error* /*error*/); 1787bc1f688bSRobert Mustacchi 1788bc1f688bSRobert Mustacchi int dwarf_die_CU_offset_range(Dwarf_Die /*die*/, 1789bc1f688bSRobert Mustacchi Dwarf_Off* /*return_CU_header_offset*/, 1790bc1f688bSRobert Mustacchi Dwarf_Off* /*return_CU_length_bytes*/, 1791bc1f688bSRobert Mustacchi Dwarf_Error* /*error*/); 1792bc1f688bSRobert Mustacchi 1793bc1f688bSRobert Mustacchi int dwarf_attr (Dwarf_Die /*die*/, 1794bc1f688bSRobert Mustacchi Dwarf_Half /*attr*/, 1795bc1f688bSRobert Mustacchi Dwarf_Attribute * /*returned_attr*/, 1796bc1f688bSRobert Mustacchi Dwarf_Error* /*error*/); 1797bc1f688bSRobert Mustacchi 1798*4d9fdb46SRobert Mustacchi int dwarf_die_text(Dwarf_Die /*die*/, 1799*4d9fdb46SRobert Mustacchi Dwarf_Half /*attr*/, 1800*4d9fdb46SRobert Mustacchi char ** /*ret_name*/, 1801*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 1802*4d9fdb46SRobert Mustacchi 1803bc1f688bSRobert Mustacchi int dwarf_diename(Dwarf_Die /*die*/, 1804bc1f688bSRobert Mustacchi char ** /*diename*/, 1805bc1f688bSRobert Mustacchi Dwarf_Error* /*error*/); 1806bc1f688bSRobert Mustacchi 1807bc1f688bSRobert Mustacchi /* Returns the abbrev code of the die. Cannot fail. */ 1808bc1f688bSRobert Mustacchi int dwarf_die_abbrev_code(Dwarf_Die /*die */); 1809bc1f688bSRobert Mustacchi 1810*4d9fdb46SRobert Mustacchi /* Returns a flag through ab_has_child. Non-zero if 1811*4d9fdb46SRobert Mustacchi the DIE has children, zero if it does not. */ 1812*4d9fdb46SRobert Mustacchi int dwarf_die_abbrev_children_flag(Dwarf_Die /*die*/, 1813*4d9fdb46SRobert Mustacchi Dwarf_Half * /*ab_has_child*/); 1814bc1f688bSRobert Mustacchi 1815*4d9fdb46SRobert Mustacchi /* Validate the sibling DIE. This only makes sense to call 1816*4d9fdb46SRobert Mustacchi if the sibling's DIEs have been travsersed and 1817*4d9fdb46SRobert Mustacchi dwarf_child called on each, 1818*4d9fdb46SRobert Mustacchi so that the last DIE dwarf_child saw was the last. 1819*4d9fdb46SRobert Mustacchi Essentially ensuring that (after such traversal) that we 1820*4d9fdb46SRobert Mustacchi are in the same place a sibling attribute would identify. 1821*4d9fdb46SRobert Mustacchi In case we return DW_DLV_ERROR, the global offset of the last 1822*4d9fdb46SRobert Mustacchi DIE traversed by dwarf_child is returned through *offset */ 1823*4d9fdb46SRobert Mustacchi int dwarf_validate_die_sibling(Dwarf_Die /*sibling*/,Dwarf_Off* /*offset*/); 1824*4d9fdb46SRobert Mustacchi 1825*4d9fdb46SRobert Mustacchi /* convenience functions, alternative to using dwarf_attrlist */ 1826bc1f688bSRobert Mustacchi int dwarf_hasattr(Dwarf_Die /*die*/, 1827bc1f688bSRobert Mustacchi Dwarf_Half /*attr*/, 1828bc1f688bSRobert Mustacchi Dwarf_Bool * /*returned_bool*/, 1829bc1f688bSRobert Mustacchi Dwarf_Error* /*error*/); 1830bc1f688bSRobert Mustacchi 1831*4d9fdb46SRobert Mustacchi /* Returns the children offsets for the given offset */ 1832*4d9fdb46SRobert Mustacchi int dwarf_offset_list(Dwarf_Debug /*dbg*/, 1833*4d9fdb46SRobert Mustacchi Dwarf_Off /*offset*/, 1834*4d9fdb46SRobert Mustacchi Dwarf_Bool /*is_info*/, 1835*4d9fdb46SRobert Mustacchi Dwarf_Off ** /*offbuf*/, 1836*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*offcnt*/, 1837*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 1838*4d9fdb46SRobert Mustacchi 1839*4d9fdb46SRobert Mustacchi /* BEGIN: loclist_c interfaces 1840*4d9fdb46SRobert Mustacchi NEW October 2015. 1841*4d9fdb46SRobert Mustacchi This works for any attribute that identifies 1842*4d9fdb46SRobert Mustacchi a loclist or a locexpr. When the attribute is a locexpr 1843*4d9fdb46SRobert Mustacchi a single loclist (created by libdwarf) 1844*4d9fdb46SRobert Mustacchi is attached to loclist_head. */ 1845*4d9fdb46SRobert Mustacchi int dwarf_get_loclist_c (Dwarf_Attribute /*attr*/, 1846*4d9fdb46SRobert Mustacchi Dwarf_Loc_Head_c * /*loclist_head*/, 1847*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*locCount*/, 1848*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 1849*4d9fdb46SRobert Mustacchi 1850*4d9fdb46SRobert Mustacchi #define DW_LKIND_expression 0 /* DWARF2,3,4*/ 1851*4d9fdb46SRobert Mustacchi #define DW_LKIND_loclist 1 /* DWARF 2,3,4 */ 1852*4d9fdb46SRobert Mustacchi #define DW_LKIND_GNU_exp_list 2 /* GNU DWARF4 .dwo extension */ 1853*4d9fdb46SRobert Mustacchi #define DW_LKIND_loclists 5 /* DWARF5 loclists */ 1854*4d9fdb46SRobert Mustacchi #define DW_LKIND_unknown 99 1855*4d9fdb46SRobert Mustacchi 1856*4d9fdb46SRobert Mustacchi /* DWARF2 kind is 2. DWARF3/4 kind is 3, DWARF5 kind is 5 */ 1857*4d9fdb46SRobert Mustacchi int 1858*4d9fdb46SRobert Mustacchi dwarf_get_loclist_head_kind(Dwarf_Loc_Head_c /*ll_header*/, 1859*4d9fdb46SRobert Mustacchi unsigned int * /*lkind*/, 1860*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 1861*4d9fdb46SRobert Mustacchi 1862*4d9fdb46SRobert Mustacchi int dwarf_get_locdesc_entry_d(Dwarf_Loc_Head_c /*loclist_head*/, 1863*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*index*/, 1864*4d9fdb46SRobert Mustacchi /* identifies type of locdesc entry*/ 1865*4d9fdb46SRobert Mustacchi Dwarf_Small * /*lle_value_out*/, 1866*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*rawlowpc*/, 1867*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*rawhipc*/, 1868*4d9fdb46SRobert Mustacchi Dwarf_Bool * /*debug_addr_unavailable*/, 1869*4d9fdb46SRobert Mustacchi Dwarf_Addr * /*lowpc_out*/, 1870*4d9fdb46SRobert Mustacchi Dwarf_Addr * /*hipc_out*/, 1871*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*loclist_count_out*/, 1872*4d9fdb46SRobert Mustacchi Dwarf_Locdesc_c * /*locentry_out*/, 1873*4d9fdb46SRobert Mustacchi Dwarf_Small * /*loclist_source_out*/, /* 0,1, or 2 */ 1874*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*expression_offset_out*/, 1875*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*locdesc_offset_out*/, 1876*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 1877*4d9fdb46SRobert Mustacchi 1878*4d9fdb46SRobert Mustacchi int dwarf_get_locdesc_entry_c(Dwarf_Loc_Head_c /*loclist_head*/, 1879*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*index*/, 1880*4d9fdb46SRobert Mustacchi /* identifies type of locdesc entry*/ 1881*4d9fdb46SRobert Mustacchi Dwarf_Small * /*lle_value_out*/, 1882*4d9fdb46SRobert Mustacchi Dwarf_Addr * /*lowpc_out*/, 1883*4d9fdb46SRobert Mustacchi Dwarf_Addr * /*hipc_out*/, 1884*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*loclist_count_out*/, 1885*4d9fdb46SRobert Mustacchi Dwarf_Locdesc_c * /*locentry_out*/, 1886*4d9fdb46SRobert Mustacchi Dwarf_Small * /*loclist_source_out*/, /* 0,1, or 2 */ 1887*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*expression_offset_out*/, 1888*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*locdesc_offset_out*/, 1889*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 1890*4d9fdb46SRobert Mustacchi 1891*4d9fdb46SRobert Mustacchi /* New June 2020 for DWARF5 (and all earlier). */ 1892*4d9fdb46SRobert Mustacchi int 1893*4d9fdb46SRobert Mustacchi dwarf_get_location_op_value_d(Dwarf_Locdesc_c /*locdesc*/, 1894*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*index*/, 1895*4d9fdb46SRobert Mustacchi Dwarf_Small * /*atom_out*/, 1896*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*operand1*/, 1897*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*operand2*/, 1898*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*operand3*/, 1899*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*rawop1*/, 1900*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*rawop2*/, 1901*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*rawop3*/, 1902*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*offset_for_branch*/, 1903*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 1904*4d9fdb46SRobert Mustacchi 1905*4d9fdb46SRobert Mustacchi int dwarf_get_location_op_value_c(Dwarf_Locdesc_c /*locdesc*/, 1906*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*index*/, 1907*4d9fdb46SRobert Mustacchi Dwarf_Small * /*atom_out*/, 1908*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*operand1*/, 1909*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*operand2*/, 1910*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*operand3*/, 1911*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*offset_for_branch*/, 1912*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 1913*4d9fdb46SRobert Mustacchi 1914*4d9fdb46SRobert Mustacchi int dwarf_loclist_from_expr_c(Dwarf_Debug /*dbg*/, 1915*4d9fdb46SRobert Mustacchi Dwarf_Ptr /*expression_in*/, 1916*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*expression_length*/, 1917*4d9fdb46SRobert Mustacchi Dwarf_Half /*address_size*/, 1918*4d9fdb46SRobert Mustacchi Dwarf_Half /*offset_size*/, 1919*4d9fdb46SRobert Mustacchi Dwarf_Small /*dwarf_version*/, 1920*4d9fdb46SRobert Mustacchi Dwarf_Loc_Head_c* /*loc_head*/, 1921*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*listlen*/, 1922*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 1923*4d9fdb46SRobert Mustacchi 1924*4d9fdb46SRobert Mustacchi /* This frees all memory allocated by the applicable 1925*4d9fdb46SRobert Mustacchi dwarf_get_loclist_c */ 1926*4d9fdb46SRobert Mustacchi void dwarf_loc_head_c_dealloc(Dwarf_Loc_Head_c /*loclist_head*/); 1927*4d9fdb46SRobert Mustacchi 1928*4d9fdb46SRobert Mustacchi /* END: loclist_c interfaces */ 1929*4d9fdb46SRobert Mustacchi 1930*4d9fdb46SRobert Mustacchi 1931*4d9fdb46SRobert Mustacchi /* As of 2015 the preferred interface 1932*4d9fdb46SRobert Mustacchi is dwarf_get_loclist_c 1933*4d9fdb46SRobert Mustacchi and only dwarf_get_loclist_c will work 1934*4d9fdb46SRobert Mustacchi for DWARF5 (and also all earlier versions). */ 1935bc1f688bSRobert Mustacchi int dwarf_loclist_n(Dwarf_Attribute /*attr*/, 1936bc1f688bSRobert Mustacchi Dwarf_Locdesc*** /*llbuf*/, 1937bc1f688bSRobert Mustacchi Dwarf_Signed * /*locCount*/, 1938bc1f688bSRobert Mustacchi Dwarf_Error* /*error*/); 1939bc1f688bSRobert Mustacchi 1940*4d9fdb46SRobert Mustacchi /* The original interfaces. Please do not use this. */ 1941bc1f688bSRobert Mustacchi int dwarf_loclist(Dwarf_Attribute /*attr*/, /* inflexible! */ 1942bc1f688bSRobert Mustacchi Dwarf_Locdesc** /*llbuf*/, 1943bc1f688bSRobert Mustacchi Dwarf_Signed * /*locCount*/, 1944bc1f688bSRobert Mustacchi Dwarf_Error* /*error*/); 1945bc1f688bSRobert Mustacchi 1946bc1f688bSRobert Mustacchi /* Extracts a dwarf expression from an expression byte stream. 1947bc1f688bSRobert Mustacchi Useful to get expressions from DW_CFA_def_cfa_expression 1948bc1f688bSRobert Mustacchi DW_CFA_expression DW_CFA_val_expression expression bytes. 1949*4d9fdb46SRobert Mustacchi 27 April 2009: dwarf_loclist_from_expr interface with 1950bc1f688bSRobert Mustacchi no addr_size is obsolete but supported, 1951*4d9fdb46SRobert Mustacchi use dwarf_loclist_from_expr_a instead. 1952bc1f688bSRobert Mustacchi */ 1953*4d9fdb46SRobert Mustacchi int dwarf_loclist_from_expr(Dwarf_Debug /*dbg*/, 1954*4d9fdb46SRobert Mustacchi Dwarf_Ptr /* expression_in*/, 1955*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /* expression_length*/, 1956*4d9fdb46SRobert Mustacchi Dwarf_Locdesc ** /* llbuf*/, 1957*4d9fdb46SRobert Mustacchi Dwarf_Signed * /*listlen*/, 1958bc1f688bSRobert Mustacchi Dwarf_Error * /* error*/ ); 1959bc1f688bSRobert Mustacchi 1960*4d9fdb46SRobert Mustacchi /* dwarf_loclist_from_expr_a new 27 Apr 2009: 1961*4d9fdb46SRobert Mustacchi added addr_size argument. */ 1962*4d9fdb46SRobert Mustacchi int dwarf_loclist_from_expr_a(Dwarf_Debug /*dbg*/, 1963*4d9fdb46SRobert Mustacchi Dwarf_Ptr /*expression_in*/, 1964*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*expression_length*/, 1965*4d9fdb46SRobert Mustacchi Dwarf_Half /*addr_size*/, 1966*4d9fdb46SRobert Mustacchi Dwarf_Locdesc ** /*llbuf*/, 1967*4d9fdb46SRobert Mustacchi Dwarf_Signed * /*listlen*/, 1968bc1f688bSRobert Mustacchi Dwarf_Error * /*error*/); 1969bc1f688bSRobert Mustacchi 1970*4d9fdb46SRobert Mustacchi /* dwarf_loclist_from_expr_b new 13 Nov 2012: 1971*4d9fdb46SRobert Mustacchi added dwarf_version (DWARF version number 1972*4d9fdb46SRobert Mustacchi of the applicable compilation unit) 1973*4d9fdb46SRobert Mustacchi and offset_size arguments. Added for 1974*4d9fdb46SRobert Mustacchi DW_OP_GNU_implicit_pointer. */ 1975*4d9fdb46SRobert Mustacchi int dwarf_loclist_from_expr_b(Dwarf_Debug /*dbg*/, 1976*4d9fdb46SRobert Mustacchi Dwarf_Ptr /*expression_in*/ , 1977*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*expression_length*/ , 1978*4d9fdb46SRobert Mustacchi Dwarf_Half /*addr_size*/ , 1979*4d9fdb46SRobert Mustacchi Dwarf_Half /*offset_size*/ , 1980*4d9fdb46SRobert Mustacchi Dwarf_Small /*dwarf_version*/ , 1981*4d9fdb46SRobert Mustacchi Dwarf_Locdesc ** /*llbuf*/ , 1982*4d9fdb46SRobert Mustacchi Dwarf_Signed * /*listlen*/ , 1983bc1f688bSRobert Mustacchi Dwarf_Error * /*error*/ ); 1984bc1f688bSRobert Mustacchi 1985bc1f688bSRobert Mustacchi int dwarf_lowpc(Dwarf_Die /*die*/, 1986bc1f688bSRobert Mustacchi Dwarf_Addr * /*returned_addr*/, 1987bc1f688bSRobert Mustacchi Dwarf_Error* /*error*/); 1988bc1f688bSRobert Mustacchi 1989*4d9fdb46SRobert Mustacchi /* When the highpc attribute is of class 'constant' 1990*4d9fdb46SRobert Mustacchi it is not an address, it is an offset from the 1991*4d9fdb46SRobert Mustacchi base address (such as lowpc) of the function. 1992*4d9fdb46SRobert Mustacchi This is therefore a required interface for DWARF4 1993*4d9fdb46SRobert Mustacchi style DW_AT_highpc. */ 1994*4d9fdb46SRobert Mustacchi int dwarf_highpc_b(Dwarf_Die /*die*/, 1995*4d9fdb46SRobert Mustacchi Dwarf_Addr * /*return_value*/, 1996*4d9fdb46SRobert Mustacchi Dwarf_Half * /*return_form*/, 1997*4d9fdb46SRobert Mustacchi enum Dwarf_Form_Class * /*return_class*/, 1998*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 1999*4d9fdb46SRobert Mustacchi 2000*4d9fdb46SRobert Mustacchi /* This works for DWARF2 and DWARF3 styles of DW_AT_highpc, 2001*4d9fdb46SRobert Mustacchi but not for the DWARF4 class constant forms. 2002*4d9fdb46SRobert Mustacchi If the FORM is of class constant this returns an error */ 2003bc1f688bSRobert Mustacchi int dwarf_highpc(Dwarf_Die /*die*/, 2004bc1f688bSRobert Mustacchi Dwarf_Addr * /*returned_addr*/, 2005bc1f688bSRobert Mustacchi Dwarf_Error* /*error*/); 2006bc1f688bSRobert Mustacchi 2007*4d9fdb46SRobert Mustacchi /* New January 2016. */ 2008*4d9fdb46SRobert Mustacchi int dwarf_dietype_offset(Dwarf_Die /*die*/, 2009*4d9fdb46SRobert Mustacchi Dwarf_Off * /*return_off*/, 2010bc1f688bSRobert Mustacchi Dwarf_Error * /*error*/); 2011bc1f688bSRobert Mustacchi 2012*4d9fdb46SRobert Mustacchi int dwarf_bytesize(Dwarf_Die /*die*/, 2013*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*returned_size*/, 2014bc1f688bSRobert Mustacchi Dwarf_Error* /*error*/); 2015bc1f688bSRobert Mustacchi 2016bc1f688bSRobert Mustacchi int dwarf_bitsize(Dwarf_Die /*die*/, 2017bc1f688bSRobert Mustacchi Dwarf_Unsigned * /*returned_size*/, 2018bc1f688bSRobert Mustacchi Dwarf_Error* /*error*/); 2019bc1f688bSRobert Mustacchi 2020bc1f688bSRobert Mustacchi int dwarf_bitoffset(Dwarf_Die /*die*/, 2021bc1f688bSRobert Mustacchi Dwarf_Unsigned * /*returned_offset*/, 2022bc1f688bSRobert Mustacchi Dwarf_Error* /*error*/); 2023bc1f688bSRobert Mustacchi 2024bc1f688bSRobert Mustacchi int dwarf_srclang(Dwarf_Die /*die*/, 2025bc1f688bSRobert Mustacchi Dwarf_Unsigned * /*returned_lang*/, 2026bc1f688bSRobert Mustacchi Dwarf_Error* /*error*/); 2027bc1f688bSRobert Mustacchi 2028bc1f688bSRobert Mustacchi int dwarf_arrayorder(Dwarf_Die /*die*/, 2029bc1f688bSRobert Mustacchi Dwarf_Unsigned * /*returned_order*/, 2030bc1f688bSRobert Mustacchi Dwarf_Error* /*error*/); 2031bc1f688bSRobert Mustacchi 2032bc1f688bSRobert Mustacchi /* end of convenience function list */ 2033bc1f688bSRobert Mustacchi 2034bc1f688bSRobert Mustacchi /* this is the main interface to attributes of a DIE */ 2035bc1f688bSRobert Mustacchi int dwarf_attrlist(Dwarf_Die /*die*/, 2036bc1f688bSRobert Mustacchi Dwarf_Attribute** /*attrbuf*/, 2037bc1f688bSRobert Mustacchi Dwarf_Signed * /*attrcount*/, 2038bc1f688bSRobert Mustacchi Dwarf_Error* /*error*/); 2039bc1f688bSRobert Mustacchi 2040bc1f688bSRobert Mustacchi /* query operations for attributes */ 2041bc1f688bSRobert Mustacchi int dwarf_hasform(Dwarf_Attribute /*attr*/, 2042bc1f688bSRobert Mustacchi Dwarf_Half /*form*/, 2043bc1f688bSRobert Mustacchi Dwarf_Bool * /*returned_bool*/, 2044bc1f688bSRobert Mustacchi Dwarf_Error* /*error*/); 2045bc1f688bSRobert Mustacchi 2046bc1f688bSRobert Mustacchi int dwarf_whatform(Dwarf_Attribute /*attr*/, 2047*4d9fdb46SRobert Mustacchi Dwarf_Half * /*returned_final_form*/, 2048bc1f688bSRobert Mustacchi Dwarf_Error* /*error*/); 2049bc1f688bSRobert Mustacchi 2050bc1f688bSRobert Mustacchi int dwarf_whatform_direct(Dwarf_Attribute /*attr*/, 2051*4d9fdb46SRobert Mustacchi Dwarf_Half * /*returned_initial_form*/, 2052bc1f688bSRobert Mustacchi Dwarf_Error* /*error*/); 2053bc1f688bSRobert Mustacchi int dwarf_whatattr(Dwarf_Attribute /*attr*/, 2054bc1f688bSRobert Mustacchi Dwarf_Half * /*returned_attr_num*/, 2055bc1f688bSRobert Mustacchi Dwarf_Error* /*error*/); 2056bc1f688bSRobert Mustacchi 2057bc1f688bSRobert Mustacchi /* 2058bc1f688bSRobert Mustacchi The following are concerned with the Primary Interface: getting 2059bc1f688bSRobert Mustacchi the actual data values. One function per 'kind' of FORM. 2060bc1f688bSRobert Mustacchi */ 2061bc1f688bSRobert Mustacchi /* dwarf_formref returns, thru return_offset, a CU-relative offset 2062bc1f688bSRobert Mustacchi and does not allow DW_FORM_ref_addr*/ 2063bc1f688bSRobert Mustacchi int dwarf_formref(Dwarf_Attribute /*attr*/, 2064bc1f688bSRobert Mustacchi Dwarf_Off* /*return_offset*/, 2065bc1f688bSRobert Mustacchi Dwarf_Error* /*error*/); 2066bc1f688bSRobert Mustacchi /* dwarf_global_formref returns, thru return_offset, 2067bc1f688bSRobert Mustacchi a debug_info-relative offset and does allow all reference forms*/ 2068bc1f688bSRobert Mustacchi int dwarf_global_formref(Dwarf_Attribute /*attr*/, 2069bc1f688bSRobert Mustacchi Dwarf_Off* /*return_offset*/, 2070bc1f688bSRobert Mustacchi Dwarf_Error* /*error*/); 2071bc1f688bSRobert Mustacchi 2072bc1f688bSRobert Mustacchi /* dwarf_formsig8 returns in the caller-provided 8 byte area 2073bc1f688bSRobert Mustacchi the 8 bytes of a DW_FORM_ref_sig8. Not a string. */ 2074bc1f688bSRobert Mustacchi int dwarf_formsig8(Dwarf_Attribute /*attr*/, 2075bc1f688bSRobert Mustacchi Dwarf_Sig8 * /*returned sig bytes*/, 2076bc1f688bSRobert Mustacchi Dwarf_Error* /*error*/); 2077*4d9fdb46SRobert Mustacchi /* dwarf_formsig8_const returns in the caller-provided 8 byte area 2078*4d9fdb46SRobert Mustacchi the 8 bytes of a form const (DW_FORM_data8). Not a string. */ 2079*4d9fdb46SRobert Mustacchi int dwarf_formsig8_const(Dwarf_Attribute /*attr*/, 2080*4d9fdb46SRobert Mustacchi Dwarf_Sig8 * /*returned sig bytes*/, 2081*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 2082bc1f688bSRobert Mustacchi 2083bc1f688bSRobert Mustacchi int dwarf_formaddr(Dwarf_Attribute /*attr*/, 2084bc1f688bSRobert Mustacchi Dwarf_Addr * /*returned_addr*/, 2085bc1f688bSRobert Mustacchi Dwarf_Error* /*error*/); 2086bc1f688bSRobert Mustacchi 2087*4d9fdb46SRobert Mustacchi /* Part of DebugFission. So a consumer can get the index when 2088*4d9fdb46SRobert Mustacchi the object with the actual .debug_addr section is 2089*4d9fdb46SRobert Mustacchi elsewhere. And so a print application can 2090*4d9fdb46SRobert Mustacchi print the index. New May 2014*/ 2091*4d9fdb46SRobert Mustacchi int dwarf_get_debug_addr_index(Dwarf_Attribute /*attr*/, 2092*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*return_index*/, 2093*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 2094*4d9fdb46SRobert Mustacchi 2095bc1f688bSRobert Mustacchi int dwarf_formflag(Dwarf_Attribute /*attr*/, 2096bc1f688bSRobert Mustacchi Dwarf_Bool * /*returned_bool*/, 2097bc1f688bSRobert Mustacchi Dwarf_Error* /*error*/); 2098bc1f688bSRobert Mustacchi 2099*4d9fdb46SRobert Mustacchi int dwarf_formdata16(Dwarf_Attribute /*attr*/, 2100*4d9fdb46SRobert Mustacchi Dwarf_Form_Data16 * /*returned_val*/, 2101*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 2102*4d9fdb46SRobert Mustacchi 2103bc1f688bSRobert Mustacchi int dwarf_formudata(Dwarf_Attribute /*attr*/, 2104bc1f688bSRobert Mustacchi Dwarf_Unsigned * /*returned_val*/, 2105bc1f688bSRobert Mustacchi Dwarf_Error* /*error*/); 2106bc1f688bSRobert Mustacchi 2107bc1f688bSRobert Mustacchi int dwarf_formsdata(Dwarf_Attribute /*attr*/, 2108bc1f688bSRobert Mustacchi Dwarf_Signed * /*returned_val*/, 2109bc1f688bSRobert Mustacchi Dwarf_Error* /*error*/); 2110bc1f688bSRobert Mustacchi 2111bc1f688bSRobert Mustacchi int dwarf_formblock(Dwarf_Attribute /*attr*/, 2112bc1f688bSRobert Mustacchi Dwarf_Block ** /*returned_block*/, 2113bc1f688bSRobert Mustacchi Dwarf_Error* /*error*/); 2114bc1f688bSRobert Mustacchi 2115bc1f688bSRobert Mustacchi int dwarf_formstring(Dwarf_Attribute /*attr*/, 2116bc1f688bSRobert Mustacchi char ** /*returned_string*/, 2117bc1f688bSRobert Mustacchi Dwarf_Error* /*error*/); 2118bc1f688bSRobert Mustacchi 2119*4d9fdb46SRobert Mustacchi /* DebugFission. So a DWARF print application can 2120*4d9fdb46SRobert Mustacchi get the string index (DW_FORM_strx) and print it. 2121*4d9fdb46SRobert Mustacchi A convenience function. 2122*4d9fdb46SRobert Mustacchi New May 2014. */ 2123*4d9fdb46SRobert Mustacchi int dwarf_get_debug_str_index(Dwarf_Attribute /*attr*/, 2124*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*return_index*/, 2125*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 2126*4d9fdb46SRobert Mustacchi 2127*4d9fdb46SRobert Mustacchi 2128bc1f688bSRobert Mustacchi int dwarf_formexprloc(Dwarf_Attribute /*attr*/, 2129bc1f688bSRobert Mustacchi Dwarf_Unsigned * /*return_exprlen*/, 2130bc1f688bSRobert Mustacchi Dwarf_Ptr * /*block_ptr*/, 2131bc1f688bSRobert Mustacchi Dwarf_Error * /*error*/); 2132bc1f688bSRobert Mustacchi 2133bc1f688bSRobert Mustacchi 2134bc1f688bSRobert Mustacchi /* end attribute query operations. */ 2135bc1f688bSRobert Mustacchi 2136*4d9fdb46SRobert Mustacchi /* Start line number operations */ 2137*4d9fdb46SRobert Mustacchi /* dwarf_srclines is the original interface from 1993. */ 2138bc1f688bSRobert Mustacchi int dwarf_srclines(Dwarf_Die /*die*/, 2139bc1f688bSRobert Mustacchi Dwarf_Line** /*linebuf*/, 2140bc1f688bSRobert Mustacchi Dwarf_Signed * /*linecount*/, 2141bc1f688bSRobert Mustacchi Dwarf_Error* /*error*/); 2142bc1f688bSRobert Mustacchi 2143*4d9fdb46SRobert Mustacchi 2144*4d9fdb46SRobert Mustacchi /* If we have two-level line tables, this will return the 2145*4d9fdb46SRobert Mustacchi logicals table in linebuf and the actuals table in 2146*4d9fdb46SRobert Mustacchi linebuf_actuals. For old-style (one-level) tables, it 2147*4d9fdb46SRobert Mustacchi will return the single table through linebuf, and the 2148*4d9fdb46SRobert Mustacchi value returned through linecount_actuals will be 0. 2149*4d9fdb46SRobert Mustacchi The actual version number is returned through version. 2150*4d9fdb46SRobert Mustacchi For two-level line tables, the version returned will 2151*4d9fdb46SRobert Mustacchi be 0xf006. This interface can return data from two-level 2152*4d9fdb46SRobert Mustacchi line tables, which are experimental. 2153*4d9fdb46SRobert Mustacchi Most users will not wish to use dwarf_srclines_two_level */ 2154*4d9fdb46SRobert Mustacchi int dwarf_srclines_two_level(Dwarf_Die /*die*/, 2155*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*version*/, 2156*4d9fdb46SRobert Mustacchi Dwarf_Line** /*linebuf*/, 2157*4d9fdb46SRobert Mustacchi Dwarf_Signed * /*linecount*/, 2158*4d9fdb46SRobert Mustacchi Dwarf_Line** /*linebuf_actuals*/, 2159*4d9fdb46SRobert Mustacchi Dwarf_Signed * /*linecount_actuals*/, 2160*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 2161*4d9fdb46SRobert Mustacchi 2162*4d9fdb46SRobert Mustacchi /* dwarf_srclines_dealloc, created July 2005, is the 2163*4d9fdb46SRobert Mustacchi appropriate method for deallocating what dwarf_srclines 2164*4d9fdb46SRobert Mustacchi and dwarf_srclines_two_level return. 2165*4d9fdb46SRobert Mustacchi More complete free than using dwarf_dealloc directly. 2166*4d9fdb46SRobert Mustacchi 2167*4d9fdb46SRobert Mustacchi When dwarf_srclines_two_level returns two line tables 2168*4d9fdb46SRobert Mustacchi user code should call dwarf_srclines_dealloc 2169*4d9fdb46SRobert Mustacchi once on each linebuf returned by dwarf_srclines_two_level 2170*4d9fdb46SRobert Mustacchi first on linebuf_actuals and then on linebuf{_logicals}. */ 2171*4d9fdb46SRobert Mustacchi 2172bc1f688bSRobert Mustacchi void dwarf_srclines_dealloc(Dwarf_Debug /*dbg*/, 2173bc1f688bSRobert Mustacchi Dwarf_Line* /*linebuf*/, 2174bc1f688bSRobert Mustacchi Dwarf_Signed /*count */); 2175bc1f688bSRobert Mustacchi 2176bc1f688bSRobert Mustacchi 2177*4d9fdb46SRobert Mustacchi /* New October 2015, must be used to deallocating 2178*4d9fdb46SRobert Mustacchi what is allocated by dwarf_srclines_b and 2179*4d9fdb46SRobert Mustacchi dwarf_srclines_from_linecontext use. 2180*4d9fdb46SRobert Mustacchi Works for DWARF2,3,4,5 and for experimental line tables. 2181*4d9fdb46SRobert Mustacchi New work should use the new Dwarf_Line_Context 2182*4d9fdb46SRobert Mustacchi interface. 2183*4d9fdb46SRobert Mustacchi This interface only reads the line table header, so 2184*4d9fdb46SRobert Mustacchi it takes relatively little time. 2185*4d9fdb46SRobert Mustacchi *is_single_table will be set non-zero for all standard dwarf line sections. 2186*4d9fdb46SRobert Mustacchi *is_single_table will be set zero for line sections with the 2187*4d9fdb46SRobert Mustacchi two_level line table extension (which will have *version_out 0xf006). */ 2188*4d9fdb46SRobert Mustacchi int dwarf_srclines_b(Dwarf_Die /*die*/, 2189*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /* version_out*/, 2190*4d9fdb46SRobert Mustacchi Dwarf_Small * /* table_count */, 2191*4d9fdb46SRobert Mustacchi Dwarf_Line_Context * /* linecontext*/, 2192*4d9fdb46SRobert Mustacchi Dwarf_Error * /* error*/); 2193*4d9fdb46SRobert Mustacchi 2194*4d9fdb46SRobert Mustacchi /* Functions passing in a Dwarf_Line_Context are only 2195*4d9fdb46SRobert Mustacchi available if dwarf_srclines_b() was used to access 2196*4d9fdb46SRobert Mustacchi line table information. */ 2197*4d9fdb46SRobert Mustacchi /* New October 2015. Returns line details. 2198*4d9fdb46SRobert Mustacchi Works for DWARF2,3,4,5. If linecount 2199*4d9fdb46SRobert Mustacchi returned is zero this is a line table with no lines.*/ 2200*4d9fdb46SRobert Mustacchi int dwarf_srclines_from_linecontext( 2201*4d9fdb46SRobert Mustacchi Dwarf_Line_Context /*line_context*/, 2202*4d9fdb46SRobert Mustacchi Dwarf_Line ** /*linebuf*/, 2203*4d9fdb46SRobert Mustacchi Dwarf_Signed * /*linecount*/, 2204*4d9fdb46SRobert Mustacchi Dwarf_Error * /* error*/); 2205*4d9fdb46SRobert Mustacchi 2206*4d9fdb46SRobert Mustacchi /* New October 2015. Returns line details. 2207*4d9fdb46SRobert Mustacchi Works for DWARF2,3,4,5 and for experimental 2208*4d9fdb46SRobert Mustacchi two-level line tables. A single level table will 2209*4d9fdb46SRobert Mustacchi have *linebuf_actuals and *linecount_actuals set 2210*4d9fdb46SRobert Mustacchi to 0. */ 2211*4d9fdb46SRobert Mustacchi int dwarf_srclines_two_level_from_linecontext( 2212*4d9fdb46SRobert Mustacchi Dwarf_Line_Context /*line_context*/, 2213*4d9fdb46SRobert Mustacchi Dwarf_Line ** /*linebuf */, 2214*4d9fdb46SRobert Mustacchi Dwarf_Signed * /*linecount*/, 2215*4d9fdb46SRobert Mustacchi Dwarf_Line ** /*linebuf_actuals*/, 2216*4d9fdb46SRobert Mustacchi Dwarf_Signed * /*linecount_actuals*/, 2217*4d9fdb46SRobert Mustacchi Dwarf_Error * /* error*/); 2218*4d9fdb46SRobert Mustacchi 2219*4d9fdb46SRobert Mustacchi /* dwarf_srclines_dealloc_b(), created October 2015, is the 2220*4d9fdb46SRobert Mustacchi appropriate method for deallocating everything 2221*4d9fdb46SRobert Mustacchi and dwarf_srclines_from_linecontext(), 2222*4d9fdb46SRobert Mustacchi dwarf_srclines_twolevel_from_linecontext(), 2223*4d9fdb46SRobert Mustacchi and dwarf_srclines_b() allocate. */ 2224*4d9fdb46SRobert Mustacchi void dwarf_srclines_dealloc_b(Dwarf_Line_Context /*line_context*/); 2225*4d9fdb46SRobert Mustacchi 2226*4d9fdb46SRobert Mustacchi /* New October 2015. */ 2227*4d9fdb46SRobert Mustacchi /* The offset is in the relevent .debug_line or .debug_line.dwo 2228*4d9fdb46SRobert Mustacchi section (and in a split dwarf package file includes) 2229*4d9fdb46SRobert Mustacchi the base line table offset). */ 2230*4d9fdb46SRobert Mustacchi int dwarf_srclines_table_offset(Dwarf_Line_Context /*line_context*/, 2231*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*offset*/, 2232*4d9fdb46SRobert Mustacchi Dwarf_Error * /* error*/); 2233*4d9fdb46SRobert Mustacchi 2234*4d9fdb46SRobert Mustacchi /* New October 2015. */ 2235*4d9fdb46SRobert Mustacchi /* Compilation Directory name for the current CU. 2236*4d9fdb46SRobert Mustacchi section (and in a split dwarf package file includes) 2237*4d9fdb46SRobert Mustacchi the base line table offset). Do not free() the string, 2238*4d9fdb46SRobert Mustacchi it is in a dwarf section. */ 2239*4d9fdb46SRobert Mustacchi int dwarf_srclines_comp_dir(Dwarf_Line_Context /*line_context*/, 2240*4d9fdb46SRobert Mustacchi const char ** /*compilation_directory*/, 2241*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 2242*4d9fdb46SRobert Mustacchi 2243*4d9fdb46SRobert Mustacchi /* New October 2015. Part of the two-level line table extension. */ 2244*4d9fdb46SRobert Mustacchi /* Count is the real count of suprogram array entries. */ 2245*4d9fdb46SRobert Mustacchi int dwarf_srclines_subprog_count(Dwarf_Line_Context /*line_context*/, 2246*4d9fdb46SRobert Mustacchi Dwarf_Signed * /*count*/, 2247*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 2248*4d9fdb46SRobert Mustacchi 2249*4d9fdb46SRobert Mustacchi /* New October 2015. */ 2250*4d9fdb46SRobert Mustacchi /* Index starts with 1, last is 'count' */ 2251*4d9fdb46SRobert Mustacchi int dwarf_srclines_subprog_data(Dwarf_Line_Context /*line_context*/, 2252*4d9fdb46SRobert Mustacchi Dwarf_Signed /*index*/, 2253*4d9fdb46SRobert Mustacchi const char ** /*name*/, 2254*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*decl_file*/, 2255*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*decl_line*/, 2256*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 2257*4d9fdb46SRobert Mustacchi 2258*4d9fdb46SRobert Mustacchi /* New October 2015. */ 2259*4d9fdb46SRobert Mustacchi /* Count is the real count of files array entries. 2260*4d9fdb46SRobert Mustacchi This remains supported though it is pretty useless for 2261*4d9fdb46SRobert Mustacchi DWARF5. To process DWARF5 as well 2262*4d9fdb46SRobert Mustacchi as DWARF 2,3,4 (in a uniform fashion) 2263*4d9fdb46SRobert Mustacchi use dwarf_srclines_files_indexes() instead. 2264*4d9fdb46SRobert Mustacchi */ 2265*4d9fdb46SRobert Mustacchi int dwarf_srclines_files_count(Dwarf_Line_Context /*line_context*/, 2266*4d9fdb46SRobert Mustacchi Dwarf_Signed * /*count*/, 2267*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 2268*4d9fdb46SRobert Mustacchi 2269*4d9fdb46SRobert Mustacchi /* New March 2018. */ 2270*4d9fdb46SRobert Mustacchi /* Count is the real count of files array entries. 2271*4d9fdb46SRobert Mustacchi Since DWARF 2,3,4 are zero origin indexes and 2272*4d9fdb46SRobert Mustacchi DWARF5 and later are one origin, this function 2273*4d9fdb46SRobert Mustacchi replaces dwarf_srclines_files_count(). */ 2274*4d9fdb46SRobert Mustacchi int dwarf_srclines_files_indexes(Dwarf_Line_Context /*line_context*/, 2275*4d9fdb46SRobert Mustacchi Dwarf_Signed * /*baseindex*/, 2276*4d9fdb46SRobert Mustacchi Dwarf_Signed * /*count*/, 2277*4d9fdb46SRobert Mustacchi Dwarf_Signed * /*endindex*/, 2278*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 2279*4d9fdb46SRobert Mustacchi 2280*4d9fdb46SRobert Mustacchi 2281*4d9fdb46SRobert Mustacchi /* New March 2018. Same as dwarf_srclines_files_data, 2282*4d9fdb46SRobert Mustacchi but adds the md5ptr field so cases where DW_LNCT_MD5 2283*4d9fdb46SRobert Mustacchi is present can return pointer to the MD5 value. 2284*4d9fdb46SRobert Mustacchi With DWARF 5 index starts with 0. 2285*4d9fdb46SRobert Mustacchi See dwarf_srclines_files_indexes() which makes 2286*4d9fdb46SRobert Mustacchi indexing through the files easy. */ 2287*4d9fdb46SRobert Mustacchi int dwarf_srclines_files_data_b(Dwarf_Line_Context line_context, 2288*4d9fdb46SRobert Mustacchi Dwarf_Signed index_in, 2289*4d9fdb46SRobert Mustacchi const char ** name, 2290*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * directory_index, 2291*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * last_mod_time, 2292*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * file_length, 2293*4d9fdb46SRobert Mustacchi Dwarf_Form_Data16 ** md5ptr, 2294*4d9fdb46SRobert Mustacchi Dwarf_Error * error); 2295*4d9fdb46SRobert Mustacchi 2296*4d9fdb46SRobert Mustacchi /* New October 2015. */ 2297*4d9fdb46SRobert Mustacchi /* Unlike dwarf_srcfiles() this returns the raw file table 2298*4d9fdb46SRobert Mustacchi strings without the directory being prefixed. 2299*4d9fdb46SRobert Mustacchi Index starts with 1, last is 'count' */ 2300*4d9fdb46SRobert Mustacchi int dwarf_srclines_files_data(Dwarf_Line_Context /*line_context*/, 2301*4d9fdb46SRobert Mustacchi Dwarf_Signed /*index*/, 2302*4d9fdb46SRobert Mustacchi const char ** /*name*/, 2303*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*directory_index*/, 2304*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*last_mod_time*/, 2305*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*file_length*/, 2306*4d9fdb46SRobert Mustacchi Dwarf_Error * /* error*/); 2307*4d9fdb46SRobert Mustacchi 2308*4d9fdb46SRobert Mustacchi /* New October 2015. */ 2309*4d9fdb46SRobert Mustacchi /* Count is the real count of include array entries. */ 2310*4d9fdb46SRobert Mustacchi int dwarf_srclines_include_dir_count(Dwarf_Line_Context /*line_context*/, 2311*4d9fdb46SRobert Mustacchi Dwarf_Signed * /*count*/, 2312*4d9fdb46SRobert Mustacchi Dwarf_Error * /* error*/); 2313*4d9fdb46SRobert Mustacchi 2314*4d9fdb46SRobert Mustacchi /* New October 2015. */ 2315*4d9fdb46SRobert Mustacchi /* Index starts with 1, last is 'count' */ 2316*4d9fdb46SRobert Mustacchi int dwarf_srclines_include_dir_data(Dwarf_Line_Context /*line_context*/, 2317*4d9fdb46SRobert Mustacchi Dwarf_Signed /*index*/, 2318*4d9fdb46SRobert Mustacchi const char ** /*name*/, 2319*4d9fdb46SRobert Mustacchi Dwarf_Error * /* error*/); 2320*4d9fdb46SRobert Mustacchi 2321*4d9fdb46SRobert Mustacchi /* New October 2015. */ 2322*4d9fdb46SRobert Mustacchi /* The DWARF version number of this compile-unit 2323*4d9fdb46SRobert Mustacchi in the .debug_lines section and the number of 2324*4d9fdb46SRobert Mustacchi actual tables:0 (header with no lines), 2325*4d9fdb46SRobert Mustacchi 1 (standard table), or 2 (experimental). */ 2326*4d9fdb46SRobert Mustacchi int dwarf_srclines_version(Dwarf_Line_Context /*line_context*/, 2327*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*version*/, 2328*4d9fdb46SRobert Mustacchi Dwarf_Small * /*table_count*/, 2329*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 2330*4d9fdb46SRobert Mustacchi 2331*4d9fdb46SRobert Mustacchi 2332*4d9fdb46SRobert Mustacchi int dwarf_get_line_section_name_from_die(Dwarf_Die /*die*/, 2333*4d9fdb46SRobert Mustacchi const char ** /*section_name_out*/, 2334*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 2335*4d9fdb46SRobert Mustacchi 2336*4d9fdb46SRobert Mustacchi 2337*4d9fdb46SRobert Mustacchi /* While 'filecount' is signed, the value 2338*4d9fdb46SRobert Mustacchi returned through the pointer is never negative. 2339*4d9fdb46SRobert Mustacchi Original libdwarf from 199x. */ 2340bc1f688bSRobert Mustacchi int dwarf_srcfiles(Dwarf_Die /*die*/, 2341bc1f688bSRobert Mustacchi char*** /*srcfiles*/, 2342bc1f688bSRobert Mustacchi Dwarf_Signed * /*filecount*/, 2343bc1f688bSRobert Mustacchi Dwarf_Error* /*error*/); 2344bc1f688bSRobert Mustacchi 2345bc1f688bSRobert Mustacchi int dwarf_linebeginstatement(Dwarf_Line /*line*/, 2346bc1f688bSRobert Mustacchi Dwarf_Bool * /*returned_bool*/, 2347bc1f688bSRobert Mustacchi Dwarf_Error* /*error*/); 2348bc1f688bSRobert Mustacchi 2349bc1f688bSRobert Mustacchi int dwarf_lineendsequence(Dwarf_Line /*line*/, 2350bc1f688bSRobert Mustacchi Dwarf_Bool * /*returned_bool*/, 2351bc1f688bSRobert Mustacchi Dwarf_Error* /*error*/); 2352bc1f688bSRobert Mustacchi 2353bc1f688bSRobert Mustacchi int dwarf_lineno(Dwarf_Line /*line*/, 2354bc1f688bSRobert Mustacchi Dwarf_Unsigned * /*returned_lineno*/, 2355bc1f688bSRobert Mustacchi Dwarf_Error* /*error*/); 2356bc1f688bSRobert Mustacchi 2357bc1f688bSRobert Mustacchi int dwarf_line_srcfileno(Dwarf_Line /*line*/, 2358bc1f688bSRobert Mustacchi Dwarf_Unsigned * /*ret_fileno*/, 2359bc1f688bSRobert Mustacchi Dwarf_Error * /*error*/); 2360bc1f688bSRobert Mustacchi 2361*4d9fdb46SRobert Mustacchi /* Is the line address from DW_LNS_set_address? */ 2362*4d9fdb46SRobert Mustacchi int dwarf_line_is_addr_set(Dwarf_Line /*line*/, 2363*4d9fdb46SRobert Mustacchi Dwarf_Bool * /*is_addr_set*/, 2364*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 2365*4d9fdb46SRobert Mustacchi 2366bc1f688bSRobert Mustacchi int dwarf_lineaddr(Dwarf_Line /*line*/, 2367bc1f688bSRobert Mustacchi Dwarf_Addr * /*returned_addr*/, 2368bc1f688bSRobert Mustacchi Dwarf_Error* /*error*/); 2369bc1f688bSRobert Mustacchi 2370*4d9fdb46SRobert Mustacchi /* dwarf_lineoff is OBSOLETE as of December 2011. Do not use. */ 2371bc1f688bSRobert Mustacchi int dwarf_lineoff(Dwarf_Line /*line*/, 2372bc1f688bSRobert Mustacchi Dwarf_Signed * /*returned_lineoffset*/, 2373bc1f688bSRobert Mustacchi Dwarf_Error* /*error*/); 2374bc1f688bSRobert Mustacchi 2375*4d9fdb46SRobert Mustacchi /* dwarf_lineoff_b correctly returns an unsigned column number 2376*4d9fdb46SRobert Mustacchi through the pointer returned_lineoffset. 2377*4d9fdb46SRobert Mustacchi dwarf_lineoff_b() is new in December 2011. */ 2378*4d9fdb46SRobert Mustacchi int dwarf_lineoff_b(Dwarf_Line /*line*/, 2379*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*returned_lineoffset*/, 2380*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 2381*4d9fdb46SRobert Mustacchi 2382bc1f688bSRobert Mustacchi int dwarf_linesrc(Dwarf_Line /*line*/, 2383bc1f688bSRobert Mustacchi char ** /*returned_name*/, 2384bc1f688bSRobert Mustacchi Dwarf_Error* /*error*/); 2385bc1f688bSRobert Mustacchi 2386bc1f688bSRobert Mustacchi int dwarf_lineblock(Dwarf_Line /*line*/, 2387bc1f688bSRobert Mustacchi Dwarf_Bool * /*returned_bool*/, 2388bc1f688bSRobert Mustacchi Dwarf_Error* /*error*/); 2389bc1f688bSRobert Mustacchi 2390*4d9fdb46SRobert Mustacchi /* We gather these into one call as it's likely one 2391*4d9fdb46SRobert Mustacchi will want all or none of them. */ 2392*4d9fdb46SRobert Mustacchi int dwarf_prologue_end_etc(Dwarf_Line /* line */, 2393*4d9fdb46SRobert Mustacchi Dwarf_Bool * /*prologue_end*/, 2394*4d9fdb46SRobert Mustacchi Dwarf_Bool * /*eplogue_begin*/, 2395*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /* isa */, 2396*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /* discriminator */, 2397bc1f688bSRobert Mustacchi Dwarf_Error * /*error*/); 2398*4d9fdb46SRobert Mustacchi /* End line table operations */ 2399bc1f688bSRobert Mustacchi 2400*4d9fdb46SRobert Mustacchi /* Two-level line tables: 2401*4d9fdb46SRobert Mustacchi When reading from an actuals table, dwarf_line_logical() 2402*4d9fdb46SRobert Mustacchi returns the logical row number for the line. */ 2403*4d9fdb46SRobert Mustacchi int dwarf_linelogical(Dwarf_Line /*line*/, 2404*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*returned_logical*/, 2405*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 2406*4d9fdb46SRobert Mustacchi 2407*4d9fdb46SRobert Mustacchi /* Two-level line tables: 2408*4d9fdb46SRobert Mustacchi When reading from a logicals table, dwarf_linecontext() 2409*4d9fdb46SRobert Mustacchi returns the logical row number corresponding the the 2410*4d9fdb46SRobert Mustacchi calling context for an inlined call. */ 2411*4d9fdb46SRobert Mustacchi int dwarf_linecontext(Dwarf_Line /*line*/, 2412*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*returned_context*/, 2413*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 2414*4d9fdb46SRobert Mustacchi 2415*4d9fdb46SRobert Mustacchi /* Two-level line tables: 2416*4d9fdb46SRobert Mustacchi When reading from a logicals table, dwarf_linesubprogno() 2417*4d9fdb46SRobert Mustacchi returns the index in the subprograms table of the inlined 2418*4d9fdb46SRobert Mustacchi subprogram. */ 2419*4d9fdb46SRobert Mustacchi int dwarf_line_subprogno(Dwarf_Line /*line*/, 2420*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*ret_subprogno*/, 2421*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 2422*4d9fdb46SRobert Mustacchi 2423*4d9fdb46SRobert Mustacchi /* Two-level line tables: 2424*4d9fdb46SRobert Mustacchi When reading from a logicals table, dwarf_linesubprog() 2425*4d9fdb46SRobert Mustacchi returns the name of the inlined subprogram, its declaration 2426*4d9fdb46SRobert Mustacchi filename, and its declaration line number, if available. */ 2427*4d9fdb46SRobert Mustacchi int dwarf_line_subprog(Dwarf_Line /*line*/, 2428*4d9fdb46SRobert Mustacchi char ** /*returned_subprog_name*/, 2429*4d9fdb46SRobert Mustacchi char ** /*returned_filename*/, 2430*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*returned_lineno*/, 2431*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 2432*4d9fdb46SRobert Mustacchi /* End of line table interfaces. */ 2433*4d9fdb46SRobert Mustacchi 2434*4d9fdb46SRobert Mustacchi /* .debug_names names table interfaces. DWARF5 */ 2435*4d9fdb46SRobert Mustacchi /* New April 2017 */ 2436*4d9fdb46SRobert Mustacchi int dwarf_debugnames_header(Dwarf_Debug /*dbg*/, 2437*4d9fdb46SRobert Mustacchi Dwarf_Dnames_Head * /*dn_out*/, 2438*4d9fdb46SRobert Mustacchi 2439*4d9fdb46SRobert Mustacchi /* *dn_count_out returns the number of name indexes 2440*4d9fdb46SRobert Mustacchi in the .debug_names section */ 2441*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*dn_index_count_out*/, 2442*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 2443*4d9fdb46SRobert Mustacchi 2444*4d9fdb46SRobert Mustacchi /* Since there may be multiple name indexes in a .debug_names 2445*4d9fdb46SRobert Mustacchi section we use index_number starting at 0 through 2446*4d9fdb46SRobert Mustacchi dn_index_count_out-1. */ 2447*4d9fdb46SRobert Mustacchi int dwarf_debugnames_sizes(Dwarf_Dnames_Head /*dn*/, 2448*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*index_number*/, 2449*4d9fdb46SRobert Mustacchi 2450*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*section_offset*/, 2451*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*version*/, 2452*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*offset_size*/, /* 4 or 8 */ 2453*4d9fdb46SRobert Mustacchi 2454*4d9fdb46SRobert Mustacchi /* The counts are entry counts, not byte sizes. */ 2455*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*comp_unit_count*/, 2456*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*local_type_unit_count*/, 2457*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*foreign_type_unit_count*/, 2458*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*bucket_count*/, 2459*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*name_count*/, 2460*4d9fdb46SRobert Mustacchi 2461*4d9fdb46SRobert Mustacchi /* The following are counted in bytes */ 2462*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*indextable_overall_length*/, 2463*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*abbrev_table_size*/, 2464*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*entry_pool_size*/, 2465*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*augmentation_string_size*/, 2466*4d9fdb46SRobert Mustacchi 2467*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 2468*4d9fdb46SRobert Mustacchi 2469*4d9fdb46SRobert Mustacchi int dwarf_debugnames_cu_entry(Dwarf_Dnames_Head /*dn*/, 2470*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*index_number*/, 2471*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*offset_number*/, 2472*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*offset_count*/, 2473*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*offset*/, 2474*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 2475*4d9fdb46SRobert Mustacchi int dwarf_debugnames_local_tu_entry(Dwarf_Dnames_Head /*dn*/, 2476*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*index_number*/, 2477*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*offset_number*/, 2478*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*offset_count*/, 2479*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*offset*/, 2480*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 2481*4d9fdb46SRobert Mustacchi int dwarf_debugnames_foreign_tu_entry(Dwarf_Dnames_Head /*dn*/, 2482*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*index_number*/, 2483*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*sig_number*/, 2484*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*sig_mininum*/, 2485*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*sig_count*/, 2486*4d9fdb46SRobert Mustacchi Dwarf_Sig8 * /*signature*/, 2487*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 2488*4d9fdb46SRobert Mustacchi int dwarf_debugnames_bucket(Dwarf_Dnames_Head /*dn*/, 2489*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*index_number*/, 2490*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*bucket_number*/, 2491*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*bucket_count*/, 2492*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*index_of_name_entry*/, 2493*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 2494*4d9fdb46SRobert Mustacchi 2495*4d9fdb46SRobert Mustacchi int dwarf_debugnames_name(Dwarf_Dnames_Head /*dn*/, 2496*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*index_number*/, 2497*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*name_entry*/, 2498*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*names_count*/, 2499*4d9fdb46SRobert Mustacchi Dwarf_Sig8 * /*signature*/, 2500*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*offset_to_debug_str*/, 2501*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*offset_in_entrypool*/, 2502*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 2503*4d9fdb46SRobert Mustacchi 2504*4d9fdb46SRobert Mustacchi int dwarf_debugnames_abbrev_by_index(Dwarf_Dnames_Head /*dn*/, 2505*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*index_number*/, 2506*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*abbrev_entry*/, 2507*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*abbrev_code*/, 2508*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*tag*/, 2509*4d9fdb46SRobert Mustacchi 2510*4d9fdb46SRobert Mustacchi /* The number of valid abbrev_entry values: 0 to number_of_abbrev-1 2511*4d9fdb46SRobert Mustacchi */ 2512*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*number_of_abbrev*/, 2513*4d9fdb46SRobert Mustacchi 2514*4d9fdb46SRobert Mustacchi /* The number of attr/form pairs, not counting the trailing 2515*4d9fdb46SRobert Mustacchi 0,0 pair. */ 2516*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*number_of_attr_form_entries*/, 2517*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 2518*4d9fdb46SRobert Mustacchi 2519*4d9fdb46SRobert Mustacchi int dwarf_debugnames_abbrev_by_code(Dwarf_Dnames_Head /*dn*/, 2520*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*index_number*/, 2521*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*abbrev_code*/, 2522*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*tag*/, 2523*4d9fdb46SRobert Mustacchi 2524*4d9fdb46SRobert Mustacchi /* The number of this code/tag as an array index. */ 2525*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*index_of_abbrev*/, 2526*4d9fdb46SRobert Mustacchi 2527*4d9fdb46SRobert Mustacchi /* The number of attr/form pairs, not counting the trailing 2528*4d9fdb46SRobert Mustacchi 0,0 pair. */ 2529*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*number_of_attr_form_entries*/, 2530*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 2531*4d9fdb46SRobert Mustacchi 2532*4d9fdb46SRobert Mustacchi int dwarf_debugnames_abbrev_form_by_index(Dwarf_Dnames_Head /*dn*/, 2533*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*index_number*/, 2534*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*abbrev_entry_index*/, 2535*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*abbrev_form_index*/, 2536*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*name_index_attr*/, 2537*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*form*/, 2538*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*number_of_attr_form_entries*/, 2539*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 2540*4d9fdb46SRobert Mustacchi 2541*4d9fdb46SRobert Mustacchi 2542*4d9fdb46SRobert Mustacchi /* This, combined with dwarf_debugnames_entrypool_values(), 2543*4d9fdb46SRobert Mustacchi lets one examine as much or as little of an entrypool 2544*4d9fdb46SRobert Mustacchi as one wants to by alternately calling these two 2545*4d9fdb46SRobert Mustacchi functions. */ 2546*4d9fdb46SRobert Mustacchi int dwarf_debugnames_entrypool(Dwarf_Dnames_Head /*dn*/, 2547*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*index_number*/, 2548*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*offset_in_entrypool*/, 2549*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*abbrev_code*/, 2550*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*tag*/, 2551*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*value_count*/, 2552*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*index_of_abbrev*/, 2553*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*offset_of_initial_value*/, 2554*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 2555*4d9fdb46SRobert Mustacchi 2556*4d9fdb46SRobert Mustacchi /* Caller, knowing array size needed, passes in arrays 2557*4d9fdb46SRobert Mustacchi it allocates of for idx, form, offset-size-values, 2558*4d9fdb46SRobert Mustacchi and signature values. Caller must examine idx-number 2559*4d9fdb46SRobert Mustacchi and form to decide, for each array element, whether 2560*4d9fdb46SRobert Mustacchi the offset or the signature contains the value. 2561*4d9fdb46SRobert Mustacchi So this returns all the values for the abbrev code. 2562*4d9fdb46SRobert Mustacchi And points via offset_of_next to the next abbrev code. 2563*4d9fdb46SRobert Mustacchi */ 2564*4d9fdb46SRobert Mustacchi int dwarf_debugnames_entrypool_values(Dwarf_Dnames_Head /*dn*/, 2565*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*index_number*/, 2566*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*index_of_abbrev*/, 2567*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*offset_in_entrypool_of_values*/, 2568*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*array_dw_idx_number*/, 2569*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*array_form*/, 2570*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*array_of_offsets*/, 2571*4d9fdb46SRobert Mustacchi Dwarf_Sig8 * /*array_of_signatures*/, 2572*4d9fdb46SRobert Mustacchi 2573*4d9fdb46SRobert Mustacchi /* offset of the next entrypool entry. */ 2574*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*offset_of_next_entrypool*/, 2575*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 2576*4d9fdb46SRobert Mustacchi 2577*4d9fdb46SRobert Mustacchi /* FIXME: add interfaces for string search given hash and 2578*4d9fdb46SRobert Mustacchi string */ 2579*4d9fdb46SRobert Mustacchi 2580*4d9fdb46SRobert Mustacchi 2581*4d9fdb46SRobert Mustacchi 2582*4d9fdb46SRobert Mustacchi /* end of .debug_names interfaces. */ 2583*4d9fdb46SRobert Mustacchi 2584*4d9fdb46SRobert Mustacchi /* New October 2019. Access to the GNU section named 2585*4d9fdb46SRobert Mustacchi .gnu_debuglink and/or the section .note.gnu.build-id. 2586*4d9fdb46SRobert Mustacchi See 2587*4d9fdb46SRobert Mustacchi https://sourceware.org/gdb/onlinedocs/gdb/Separate-Debug-Files.html 2588*4d9fdb46SRobert Mustacchi The dbg argument provides data access and relies on 2589*4d9fdb46SRobert Mustacchi fields de_path,de_debuglink_globals, de_debuglink_globals_length 2590*4d9fdb46SRobert Mustacchi If no debuglink then name_returned,crc_returned and 2591*4d9fdb46SRobert Mustacchi debuglink_path_returned will get set 0 through the pointers. 2592*4d9fdb46SRobert Mustacchi If no .note.gnu.build-id then buildid_length_returned, 2593*4d9fdb46SRobert Mustacchi and buildid_returned will be set 0 through the pointers. 2594*4d9fdb46SRobert Mustacchi See libdwarf2.1.mm for additional important details. 2595*4d9fdb46SRobert Mustacchi see dwarf_add_file_path() 2596*4d9fdb46SRobert Mustacchi and dwarf_add_debuglink_global_path(). 2597*4d9fdb46SRobert Mustacchi */ 2598*4d9fdb46SRobert Mustacchi 2599*4d9fdb46SRobert Mustacchi int dwarf_gnu_debuglink(Dwarf_Debug /*dbg*/, 2600*4d9fdb46SRobert Mustacchi char ** /*name_returned*/, 2601*4d9fdb46SRobert Mustacchi unsigned char ** /*crc_returned from the debuglink section*/, 2602*4d9fdb46SRobert Mustacchi char ** /*debuglink_path_returned*/, 2603*4d9fdb46SRobert Mustacchi unsigned int * /*debuglink_path_count_returned*/, 2604*4d9fdb46SRobert Mustacchi unsigned int * /*buildid_type_returned */, 2605*4d9fdb46SRobert Mustacchi char ** /*buildid_owner_name_returned*/, 2606*4d9fdb46SRobert Mustacchi unsigned char ** /*buildid_returned*/, 2607*4d9fdb46SRobert Mustacchi unsigned int * /*buildid_length_returned*/, 2608*4d9fdb46SRobert Mustacchi char *** /*paths_returned*/, 2609*4d9fdb46SRobert Mustacchi unsigned int * /*paths_length_returned*/, 2610*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 2611*4d9fdb46SRobert Mustacchi 2612*4d9fdb46SRobert Mustacchi /* See 2613*4d9fdb46SRobert Mustacchi https://sourceware.org/gdb/onlinedocs/gdb/Separate-Debug-Files.html 2614*4d9fdb46SRobert Mustacchi and dwarf_gnu_debuglink() 2615*4d9fdb46SRobert Mustacchi pathname is a path-prefix to be added to a list of path-prefixes, 2616*4d9fdb46SRobert Mustacchi The default "/usr/lib/debug" is built-in and is the first 2617*4d9fdb46SRobert Mustacchi such in the list held in dbg. 2618*4d9fdb46SRobert Mustacchi The path prefix should start with / . 2619*4d9fdb46SRobert Mustacchi It can just end or end with / , either choice will work. 2620*4d9fdb46SRobert Mustacchi */ 2621*4d9fdb46SRobert Mustacchi int dwarf_add_debuglink_global_path(Dwarf_Debug /*dbg*/, 2622*4d9fdb46SRobert Mustacchi const char *pathname, 2623*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 2624*4d9fdb46SRobert Mustacchi 2625*4d9fdb46SRobert Mustacchi 2626*4d9fdb46SRobert Mustacchi /* global name space operations (.debug_pubnames access) 2627*4d9fdb46SRobert Mustacchi The pubnames and similar sections are rarely used. Few compilers 2628*4d9fdb46SRobert Mustacchi emit them. They are DWARF 2,3,4 only., not DWARF 5. */ 2629*4d9fdb46SRobert Mustacchi 2630*4d9fdb46SRobert Mustacchi /* New March 2019. Special for dwarfdump. 2631*4d9fdb46SRobert Mustacchi Sets a flag in the dbg. Always returns DW_DLV_OK 2632*4d9fdb46SRobert Mustacchi and (as of March 2020) never touches error */ 2633*4d9fdb46SRobert Mustacchi int dwarf_return_empty_pubnames(Dwarf_Debug /*dbg*/, 2634*4d9fdb46SRobert Mustacchi int /* flag */, 2635*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 2636*4d9fdb46SRobert Mustacchi 2637bc1f688bSRobert Mustacchi int dwarf_get_globals(Dwarf_Debug /*dbg*/, 2638bc1f688bSRobert Mustacchi Dwarf_Global** /*globals*/, 2639bc1f688bSRobert Mustacchi Dwarf_Signed * /*number_of_globals*/, 2640bc1f688bSRobert Mustacchi Dwarf_Error* /*error*/); 2641bc1f688bSRobert Mustacchi void dwarf_globals_dealloc(Dwarf_Debug /*dbg*/, 2642bc1f688bSRobert Mustacchi Dwarf_Global* /*globals*/, 2643bc1f688bSRobert Mustacchi Dwarf_Signed /*number_of_globals*/); 2644bc1f688bSRobert Mustacchi 2645bc1f688bSRobert Mustacchi int dwarf_globname(Dwarf_Global /*glob*/, 2646bc1f688bSRobert Mustacchi char ** /*returned_name*/, 2647bc1f688bSRobert Mustacchi Dwarf_Error* /*error*/); 2648bc1f688bSRobert Mustacchi 2649bc1f688bSRobert Mustacchi int dwarf_global_die_offset(Dwarf_Global /*global*/, 2650bc1f688bSRobert Mustacchi Dwarf_Off* /*return_offset*/, 2651bc1f688bSRobert Mustacchi Dwarf_Error * /*error*/); 2652bc1f688bSRobert Mustacchi 2653bc1f688bSRobert Mustacchi /* This returns the CU die global offset if one knows the 2654bc1f688bSRobert Mustacchi CU header global offset. 2655bc1f688bSRobert Mustacchi See also dwarf_CU_dieoffset_given_die(). */ 2656bc1f688bSRobert Mustacchi int dwarf_get_cu_die_offset_given_cu_header_offset( 2657bc1f688bSRobert Mustacchi Dwarf_Debug /*dbg*/, 2658bc1f688bSRobert Mustacchi Dwarf_Off /*in_cu_header_offset*/, 2659bc1f688bSRobert Mustacchi Dwarf_Off * /*out_cu_die_offset*/, 2660bc1f688bSRobert Mustacchi Dwarf_Error * /*err*/); 2661*4d9fdb46SRobert Mustacchi 2662*4d9fdb46SRobert Mustacchi /* The _b form is new October 2011. */ 2663*4d9fdb46SRobert Mustacchi int dwarf_get_cu_die_offset_given_cu_header_offset_b( 2664*4d9fdb46SRobert Mustacchi Dwarf_Debug /*dbg*/, 2665*4d9fdb46SRobert Mustacchi Dwarf_Off /*in_cu_header_offset*/, 2666*4d9fdb46SRobert Mustacchi Dwarf_Bool /*is_info. True means look in debug_Info, 2667*4d9fdb46SRobert Mustacchi false use debug_types.*/, 2668*4d9fdb46SRobert Mustacchi Dwarf_Off * /*out_cu_die_offset*/, 2669*4d9fdb46SRobert Mustacchi Dwarf_Error * /*err*/); 2670*4d9fdb46SRobert Mustacchi 2671bc1f688bSRobert Mustacchi #ifdef __sgi /* pragma is sgi MIPS only */ 2672bc1f688bSRobert Mustacchi #pragma optional dwarf_get_cu_die_offset_given_cu_header_offset 2673bc1f688bSRobert Mustacchi #endif 2674bc1f688bSRobert Mustacchi 2675bc1f688bSRobert Mustacchi int dwarf_global_cu_offset(Dwarf_Global /*global*/, 2676bc1f688bSRobert Mustacchi Dwarf_Off* /*return_offset*/, 2677bc1f688bSRobert Mustacchi Dwarf_Error* /*error*/); 2678bc1f688bSRobert Mustacchi 2679bc1f688bSRobert Mustacchi int dwarf_global_name_offsets(Dwarf_Global /*global*/, 2680bc1f688bSRobert Mustacchi char ** /*returned_name*/, 2681bc1f688bSRobert Mustacchi Dwarf_Off* /*die_offset*/, 2682bc1f688bSRobert Mustacchi Dwarf_Off* /*cu_offset*/, 2683bc1f688bSRobert Mustacchi Dwarf_Error* /*error*/); 2684bc1f688bSRobert Mustacchi 2685*4d9fdb46SRobert Mustacchi /* New February 2019. For more complete dwarfdump printing. 2686*4d9fdb46SRobert Mustacchi For each CU represented in .debug_pubnames, etc, 2687*4d9fdb46SRobert Mustacchi there is a .debug_pubnames header. For any given 2688*4d9fdb46SRobert Mustacchi Dwarf_Global this returns the content of the applicable 2689*4d9fdb46SRobert Mustacchi header. */ 2690*4d9fdb46SRobert Mustacchi int dwarf_get_globals_header(Dwarf_Global /*global*/, 2691*4d9fdb46SRobert Mustacchi Dwarf_Off * /*offset_pub_header*/, 2692*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*length_size*/, 2693*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*length_pub*/, 2694*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*version*/, 2695*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*header_info_offset*/, 2696*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*info_length*/, 2697*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 2698*4d9fdb46SRobert Mustacchi 2699bc1f688bSRobert Mustacchi /* Static function name operations. */ 2700bc1f688bSRobert Mustacchi int dwarf_get_funcs(Dwarf_Debug /*dbg*/, 2701bc1f688bSRobert Mustacchi Dwarf_Func** /*funcs*/, 2702bc1f688bSRobert Mustacchi Dwarf_Signed * /*number_of_funcs*/, 2703bc1f688bSRobert Mustacchi Dwarf_Error* /*error*/); 2704bc1f688bSRobert Mustacchi void dwarf_funcs_dealloc(Dwarf_Debug /*dbg*/, 2705bc1f688bSRobert Mustacchi Dwarf_Func* /*funcs*/, 2706bc1f688bSRobert Mustacchi Dwarf_Signed /*number_of_funcs*/); 2707bc1f688bSRobert Mustacchi 2708bc1f688bSRobert Mustacchi int dwarf_funcname(Dwarf_Func /*func*/, 2709bc1f688bSRobert Mustacchi char ** /*returned_name*/, 2710bc1f688bSRobert Mustacchi Dwarf_Error* /*error*/); 2711bc1f688bSRobert Mustacchi 2712bc1f688bSRobert Mustacchi int dwarf_func_die_offset(Dwarf_Func /*func*/, 2713bc1f688bSRobert Mustacchi Dwarf_Off* /*return_offset*/, 2714bc1f688bSRobert Mustacchi Dwarf_Error* /*error*/); 2715bc1f688bSRobert Mustacchi 2716bc1f688bSRobert Mustacchi int dwarf_func_cu_offset(Dwarf_Func /*func*/, 2717bc1f688bSRobert Mustacchi Dwarf_Off* /*return_offset*/, 2718bc1f688bSRobert Mustacchi Dwarf_Error* /*error*/); 2719bc1f688bSRobert Mustacchi 2720bc1f688bSRobert Mustacchi int dwarf_func_name_offsets(Dwarf_Func /*func*/, 2721bc1f688bSRobert Mustacchi char ** /*returned_name*/, 2722bc1f688bSRobert Mustacchi Dwarf_Off* /*die_offset*/, 2723bc1f688bSRobert Mustacchi Dwarf_Off* /*cu_offset*/, 2724bc1f688bSRobert Mustacchi Dwarf_Error* /*error*/); 2725bc1f688bSRobert Mustacchi 2726bc1f688bSRobert Mustacchi /* User-defined type name operations, SGI IRIX .debug_typenames section. 2727bc1f688bSRobert Mustacchi Same content as DWARF3 .debug_pubtypes, but defined years before 2728bc1f688bSRobert Mustacchi .debug_pubtypes was defined. SGI IRIX only. */ 2729bc1f688bSRobert Mustacchi int dwarf_get_types(Dwarf_Debug /*dbg*/, 2730bc1f688bSRobert Mustacchi Dwarf_Type** /*types*/, 2731bc1f688bSRobert Mustacchi Dwarf_Signed * /*number_of_types*/, 2732bc1f688bSRobert Mustacchi Dwarf_Error* /*error*/); 2733bc1f688bSRobert Mustacchi void dwarf_types_dealloc(Dwarf_Debug /*dbg*/, 2734bc1f688bSRobert Mustacchi Dwarf_Type* /*types*/, 2735bc1f688bSRobert Mustacchi Dwarf_Signed /*number_of_types*/); 2736bc1f688bSRobert Mustacchi 2737bc1f688bSRobert Mustacchi 2738bc1f688bSRobert Mustacchi int dwarf_typename(Dwarf_Type /*type*/, 2739bc1f688bSRobert Mustacchi char ** /*returned_name*/, 2740bc1f688bSRobert Mustacchi Dwarf_Error* /*error*/); 2741bc1f688bSRobert Mustacchi 2742bc1f688bSRobert Mustacchi int dwarf_type_die_offset(Dwarf_Type /*type*/, 2743bc1f688bSRobert Mustacchi Dwarf_Off* /*return_offset*/, 2744bc1f688bSRobert Mustacchi Dwarf_Error* /*error*/); 2745bc1f688bSRobert Mustacchi 2746bc1f688bSRobert Mustacchi int dwarf_type_cu_offset(Dwarf_Type /*type*/, 2747bc1f688bSRobert Mustacchi Dwarf_Off* /*return_offset*/, 2748bc1f688bSRobert Mustacchi Dwarf_Error* /*error*/); 2749bc1f688bSRobert Mustacchi 2750bc1f688bSRobert Mustacchi int dwarf_type_name_offsets(Dwarf_Type /*type*/, 2751bc1f688bSRobert Mustacchi char ** /*returned_name*/, 2752bc1f688bSRobert Mustacchi Dwarf_Off* /*die_offset*/, 2753bc1f688bSRobert Mustacchi Dwarf_Off* /*cu_offset*/, 2754bc1f688bSRobert Mustacchi Dwarf_Error* /*error*/); 2755bc1f688bSRobert Mustacchi 2756bc1f688bSRobert Mustacchi /* User-defined type name operations, DWARF3 .debug_pubtypes section. 2757bc1f688bSRobert Mustacchi */ 2758bc1f688bSRobert Mustacchi int dwarf_get_pubtypes(Dwarf_Debug /*dbg*/, 2759bc1f688bSRobert Mustacchi Dwarf_Type** /*types*/, 2760bc1f688bSRobert Mustacchi Dwarf_Signed * /*number_of_types*/, 2761bc1f688bSRobert Mustacchi Dwarf_Error* /*error*/); 2762bc1f688bSRobert Mustacchi void dwarf_pubtypes_dealloc(Dwarf_Debug /*dbg*/, 2763bc1f688bSRobert Mustacchi Dwarf_Type* /*pubtypes*/, 2764bc1f688bSRobert Mustacchi Dwarf_Signed /*number_of_pubtypes*/); 2765bc1f688bSRobert Mustacchi 2766bc1f688bSRobert Mustacchi 2767bc1f688bSRobert Mustacchi int dwarf_pubtypename(Dwarf_Type /*type*/, 2768bc1f688bSRobert Mustacchi char ** /*returned_name*/, 2769bc1f688bSRobert Mustacchi Dwarf_Error* /*error*/); 2770bc1f688bSRobert Mustacchi 2771*4d9fdb46SRobert Mustacchi int dwarf_pubtype_type_die_offset(Dwarf_Type /*type*/, 2772bc1f688bSRobert Mustacchi Dwarf_Off* /*return_offset*/, 2773bc1f688bSRobert Mustacchi Dwarf_Error* /*error*/); 2774bc1f688bSRobert Mustacchi 2775bc1f688bSRobert Mustacchi int dwarf_pubtype_cu_offset(Dwarf_Type /*type*/, 2776bc1f688bSRobert Mustacchi Dwarf_Off* /*return_offset*/, 2777bc1f688bSRobert Mustacchi Dwarf_Error* /*error*/); 2778bc1f688bSRobert Mustacchi 2779bc1f688bSRobert Mustacchi int dwarf_pubtype_name_offsets(Dwarf_Type /*type*/, 2780bc1f688bSRobert Mustacchi char ** /*returned_name*/, 2781bc1f688bSRobert Mustacchi Dwarf_Off* /*die_offset*/, 2782bc1f688bSRobert Mustacchi Dwarf_Off* /*cu_offset*/, 2783bc1f688bSRobert Mustacchi Dwarf_Error* /*error*/); 2784bc1f688bSRobert Mustacchi 2785bc1f688bSRobert Mustacchi /* File-scope static variable name operations. */ 2786bc1f688bSRobert Mustacchi int dwarf_get_vars(Dwarf_Debug /*dbg*/, 2787bc1f688bSRobert Mustacchi Dwarf_Var** /*vars*/, 2788bc1f688bSRobert Mustacchi Dwarf_Signed * /*number_of_vars*/, 2789bc1f688bSRobert Mustacchi Dwarf_Error* /*error*/); 2790bc1f688bSRobert Mustacchi void dwarf_vars_dealloc(Dwarf_Debug /*dbg*/, 2791bc1f688bSRobert Mustacchi Dwarf_Var* /*vars*/, 2792bc1f688bSRobert Mustacchi Dwarf_Signed /*number_of_vars*/); 2793bc1f688bSRobert Mustacchi 2794bc1f688bSRobert Mustacchi 2795bc1f688bSRobert Mustacchi int dwarf_varname(Dwarf_Var /*var*/, 2796bc1f688bSRobert Mustacchi char ** /*returned_name*/, 2797bc1f688bSRobert Mustacchi Dwarf_Error* /*error*/); 2798bc1f688bSRobert Mustacchi 2799bc1f688bSRobert Mustacchi int dwarf_var_die_offset(Dwarf_Var /*var*/, 2800bc1f688bSRobert Mustacchi Dwarf_Off* /*return_offset*/, 2801bc1f688bSRobert Mustacchi Dwarf_Error* /*error*/); 2802bc1f688bSRobert Mustacchi 2803bc1f688bSRobert Mustacchi int dwarf_var_cu_offset(Dwarf_Var /*var*/, 2804bc1f688bSRobert Mustacchi Dwarf_Off* /*return_offset*/, 2805bc1f688bSRobert Mustacchi Dwarf_Error* /*error*/); 2806bc1f688bSRobert Mustacchi 2807bc1f688bSRobert Mustacchi int dwarf_var_name_offsets(Dwarf_Var /*var*/, 2808bc1f688bSRobert Mustacchi char ** /*returned_name*/, 2809bc1f688bSRobert Mustacchi Dwarf_Off* /*die_offset*/, 2810bc1f688bSRobert Mustacchi Dwarf_Off* /*cu_offset*/, 2811bc1f688bSRobert Mustacchi Dwarf_Error* /*error*/); 2812bc1f688bSRobert Mustacchi 2813bc1f688bSRobert Mustacchi /* weak name operations. */ 2814bc1f688bSRobert Mustacchi int dwarf_get_weaks(Dwarf_Debug /*dbg*/, 2815bc1f688bSRobert Mustacchi Dwarf_Weak** /*weaks*/, 2816bc1f688bSRobert Mustacchi Dwarf_Signed * /*number_of_weaks*/, 2817bc1f688bSRobert Mustacchi Dwarf_Error* /*error*/); 2818bc1f688bSRobert Mustacchi void dwarf_weaks_dealloc(Dwarf_Debug /*dbg*/, 2819bc1f688bSRobert Mustacchi Dwarf_Weak* /*weaks*/, 2820bc1f688bSRobert Mustacchi Dwarf_Signed /*number_of_weaks*/); 2821bc1f688bSRobert Mustacchi 2822bc1f688bSRobert Mustacchi 2823bc1f688bSRobert Mustacchi int dwarf_weakname(Dwarf_Weak /*weak*/, 2824bc1f688bSRobert Mustacchi char ** /*returned_name*/, 2825bc1f688bSRobert Mustacchi Dwarf_Error* /*error*/); 2826bc1f688bSRobert Mustacchi 2827bc1f688bSRobert Mustacchi int dwarf_weak_die_offset(Dwarf_Weak /*weak*/, 2828bc1f688bSRobert Mustacchi Dwarf_Off* /*return_offset*/, 2829bc1f688bSRobert Mustacchi Dwarf_Error* /*error*/); 2830bc1f688bSRobert Mustacchi 2831bc1f688bSRobert Mustacchi int dwarf_weak_cu_offset(Dwarf_Weak /*weak*/, 2832bc1f688bSRobert Mustacchi Dwarf_Off* /*return_offset*/, 2833bc1f688bSRobert Mustacchi Dwarf_Error* /*error*/); 2834bc1f688bSRobert Mustacchi 2835bc1f688bSRobert Mustacchi int dwarf_weak_name_offsets(Dwarf_Weak /*weak*/, 2836bc1f688bSRobert Mustacchi char ** /*returned_name*/, 2837bc1f688bSRobert Mustacchi Dwarf_Off* /*die_offset*/, 2838bc1f688bSRobert Mustacchi Dwarf_Off* /*cu_offset*/, 2839bc1f688bSRobert Mustacchi Dwarf_Error* /*error*/); 2840bc1f688bSRobert Mustacchi 2841bc1f688bSRobert Mustacchi /* location list section operation. (.debug_loc access) */ 2842bc1f688bSRobert Mustacchi int dwarf_get_loclist_entry(Dwarf_Debug /*dbg*/, 2843bc1f688bSRobert Mustacchi Dwarf_Unsigned /*offset*/, 2844bc1f688bSRobert Mustacchi Dwarf_Addr* /*hipc*/, 2845bc1f688bSRobert Mustacchi Dwarf_Addr* /*lopc*/, 2846bc1f688bSRobert Mustacchi Dwarf_Ptr* /*data*/, 2847bc1f688bSRobert Mustacchi Dwarf_Unsigned* /*entry_len*/, 2848bc1f688bSRobert Mustacchi Dwarf_Unsigned* /*next_entry*/, 2849bc1f688bSRobert Mustacchi Dwarf_Error* /*error*/); 2850bc1f688bSRobert Mustacchi 2851bc1f688bSRobert Mustacchi /* abbreviation section operations */ 2852bc1f688bSRobert Mustacchi int dwarf_get_abbrev(Dwarf_Debug /*dbg*/, 2853bc1f688bSRobert Mustacchi Dwarf_Unsigned /*offset*/, 2854bc1f688bSRobert Mustacchi Dwarf_Abbrev * /*returned_abbrev*/, 2855bc1f688bSRobert Mustacchi Dwarf_Unsigned* /*length*/, 2856bc1f688bSRobert Mustacchi Dwarf_Unsigned* /*attr_count*/, 2857bc1f688bSRobert Mustacchi Dwarf_Error* /*error*/); 2858bc1f688bSRobert Mustacchi 2859bc1f688bSRobert Mustacchi int dwarf_get_abbrev_tag(Dwarf_Abbrev /*abbrev*/, 2860bc1f688bSRobert Mustacchi Dwarf_Half* /*return_tag_number*/, 2861bc1f688bSRobert Mustacchi Dwarf_Error* /*error*/); 2862bc1f688bSRobert Mustacchi int dwarf_get_abbrev_code(Dwarf_Abbrev /*abbrev*/, 2863bc1f688bSRobert Mustacchi Dwarf_Unsigned* /*return_code_number*/, 2864bc1f688bSRobert Mustacchi Dwarf_Error* /*error*/); 2865bc1f688bSRobert Mustacchi 2866*4d9fdb46SRobert Mustacchi /* See comments in dwarf_abbrev.c. Not an entirely safe function. */ 2867*4d9fdb46SRobert Mustacchi int dwarf_get_abbrev_count(Dwarf_Debug /*dbg*/); 2868*4d9fdb46SRobert Mustacchi 2869bc1f688bSRobert Mustacchi int dwarf_get_abbrev_children_flag(Dwarf_Abbrev /*abbrev*/, 2870bc1f688bSRobert Mustacchi Dwarf_Signed* /*return_flag*/, 2871bc1f688bSRobert Mustacchi Dwarf_Error* /*error*/); 2872bc1f688bSRobert Mustacchi 2873*4d9fdb46SRobert Mustacchi /* New August 2019. 2874*4d9fdb46SRobert Mustacchi Most uses will call with filter_outliers non-zero. 2875*4d9fdb46SRobert Mustacchi In that case impossible values return DW_DLV_ERROR. 2876*4d9fdb46SRobert Mustacchi Those doing extra things (like dwarfdump) will 2877*4d9fdb46SRobert Mustacchi call with filter_outliers zero to get the raw data 2878*4d9fdb46SRobert Mustacchi (effectively); */ 2879*4d9fdb46SRobert Mustacchi int dwarf_get_abbrev_entry_b(Dwarf_Abbrev abbrev, 2880*4d9fdb46SRobert Mustacchi Dwarf_Unsigned indx, 2881*4d9fdb46SRobert Mustacchi Dwarf_Bool filter_outliers, 2882*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * returned_attr_num, 2883*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * returned_form, 2884*4d9fdb46SRobert Mustacchi Dwarf_Signed * returned_implict_const, 2885*4d9fdb46SRobert Mustacchi Dwarf_Off * offset, 2886*4d9fdb46SRobert Mustacchi Dwarf_Error * error); 2887*4d9fdb46SRobert Mustacchi 2888*4d9fdb46SRobert Mustacchi /* Obsolete because it cannot return the 2889*4d9fdb46SRobert Mustacchi DW_FORM_implicit_const value. */ 2890bc1f688bSRobert Mustacchi int dwarf_get_abbrev_entry(Dwarf_Abbrev /*abbrev*/, 2891bc1f688bSRobert Mustacchi Dwarf_Signed /*index*/, 2892bc1f688bSRobert Mustacchi Dwarf_Half * /*returned_attr_num*/, 2893bc1f688bSRobert Mustacchi Dwarf_Signed* /*form*/, 2894bc1f688bSRobert Mustacchi Dwarf_Off* /*offset*/, 2895bc1f688bSRobert Mustacchi Dwarf_Error* /*error*/); 2896bc1f688bSRobert Mustacchi 2897*4d9fdb46SRobert Mustacchi int dwarf_get_string_section_name(Dwarf_Debug /*dbg*/, 2898*4d9fdb46SRobert Mustacchi const char ** /*section_name_out*/, 2899*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 2900*4d9fdb46SRobert Mustacchi 2901bc1f688bSRobert Mustacchi /* consumer string section operation */ 2902bc1f688bSRobert Mustacchi int dwarf_get_str(Dwarf_Debug /*dbg*/, 2903bc1f688bSRobert Mustacchi Dwarf_Off /*offset*/, 2904bc1f688bSRobert Mustacchi char** /*string*/, 2905bc1f688bSRobert Mustacchi Dwarf_Signed * /*strlen_of_string*/, 2906bc1f688bSRobert Mustacchi Dwarf_Error* /*error*/); 2907bc1f688bSRobert Mustacchi 2908*4d9fdb46SRobert Mustacchi /* New November 2015 */ 2909*4d9fdb46SRobert Mustacchi int dwarf_get_frame_section_name(Dwarf_Debug /*dbg*/, 2910*4d9fdb46SRobert Mustacchi const char ** /*section_name_out*/, 2911*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 2912*4d9fdb46SRobert Mustacchi 2913*4d9fdb46SRobert Mustacchi /* New November 2015 */ 2914*4d9fdb46SRobert Mustacchi int dwarf_get_frame_section_name_eh_gnu(Dwarf_Debug /*dbg*/, 2915*4d9fdb46SRobert Mustacchi const char ** /*section_name_out*/, 2916*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 2917*4d9fdb46SRobert Mustacchi 2918bc1f688bSRobert Mustacchi /* Consumer op on gnu .eh_frame info */ 2919bc1f688bSRobert Mustacchi int dwarf_get_fde_list_eh( 2920bc1f688bSRobert Mustacchi Dwarf_Debug /*dbg*/, 2921bc1f688bSRobert Mustacchi Dwarf_Cie** /*cie_data*/, 2922bc1f688bSRobert Mustacchi Dwarf_Signed* /*cie_element_count*/, 2923bc1f688bSRobert Mustacchi Dwarf_Fde** /*fde_data*/, 2924bc1f688bSRobert Mustacchi Dwarf_Signed* /*fde_element_count*/, 2925bc1f688bSRobert Mustacchi Dwarf_Error* /*error*/); 2926bc1f688bSRobert Mustacchi 2927bc1f688bSRobert Mustacchi 2928bc1f688bSRobert Mustacchi /* consumer operations on frame info: .debug_frame */ 2929bc1f688bSRobert Mustacchi int dwarf_get_fde_list(Dwarf_Debug /*dbg*/, 2930bc1f688bSRobert Mustacchi Dwarf_Cie** /*cie_data*/, 2931bc1f688bSRobert Mustacchi Dwarf_Signed* /*cie_element_count*/, 2932bc1f688bSRobert Mustacchi Dwarf_Fde** /*fde_data*/, 2933bc1f688bSRobert Mustacchi Dwarf_Signed* /*fde_element_count*/, 2934bc1f688bSRobert Mustacchi Dwarf_Error* /*error*/); 2935bc1f688bSRobert Mustacchi 2936bc1f688bSRobert Mustacchi /* Release storage gotten by dwarf_get_fde_list_eh() or 2937bc1f688bSRobert Mustacchi dwarf_get_fde_list() */ 2938*4d9fdb46SRobert Mustacchi void dwarf_fde_cie_list_dealloc(Dwarf_Debug /*dbg*/, 2939*4d9fdb46SRobert Mustacchi Dwarf_Cie * /*cie_data*/, 2940*4d9fdb46SRobert Mustacchi Dwarf_Signed /*cie_element_count*/, 2941*4d9fdb46SRobert Mustacchi Dwarf_Fde * /*fde_data*/, 2942*4d9fdb46SRobert Mustacchi Dwarf_Signed /*fde_element_count*/); 2943bc1f688bSRobert Mustacchi 2944bc1f688bSRobert Mustacchi 2945bc1f688bSRobert Mustacchi 2946bc1f688bSRobert Mustacchi int dwarf_get_fde_range(Dwarf_Fde /*fde*/, 2947bc1f688bSRobert Mustacchi Dwarf_Addr* /*low_pc*/, 2948bc1f688bSRobert Mustacchi Dwarf_Unsigned* /*func_length*/, 2949bc1f688bSRobert Mustacchi Dwarf_Ptr* /*fde_bytes*/, 2950bc1f688bSRobert Mustacchi Dwarf_Unsigned* /*fde_byte_length*/, 2951bc1f688bSRobert Mustacchi Dwarf_Off* /*cie_offset*/, 2952bc1f688bSRobert Mustacchi Dwarf_Signed* /*cie_index*/, 2953bc1f688bSRobert Mustacchi Dwarf_Off* /*fde_offset*/, 2954bc1f688bSRobert Mustacchi Dwarf_Error* /*error*/); 2955bc1f688bSRobert Mustacchi 2956bc1f688bSRobert Mustacchi /* Useful for IRIX only: see dwarf_get_cie_augmentation_data() 2957bc1f688bSRobert Mustacchi dwarf_get_fde_augmentation_data() for GNU .eh_frame. */ 2958bc1f688bSRobert Mustacchi int dwarf_get_fde_exception_info(Dwarf_Fde /*fde*/, 2959bc1f688bSRobert Mustacchi Dwarf_Signed* /* offset_into_exception_tables */, 2960bc1f688bSRobert Mustacchi Dwarf_Error* /*error*/); 2961bc1f688bSRobert Mustacchi 2962bc1f688bSRobert Mustacchi 2963bc1f688bSRobert Mustacchi int dwarf_get_cie_of_fde(Dwarf_Fde /*fde*/, 2964bc1f688bSRobert Mustacchi Dwarf_Cie * /*cie_returned*/, 2965bc1f688bSRobert Mustacchi Dwarf_Error* /*error*/); 2966bc1f688bSRobert Mustacchi 2967*4d9fdb46SRobert Mustacchi int dwarf_get_cie_info_b(Dwarf_Cie /*cie*/, 2968*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*bytes_in_cie*/, 2969*4d9fdb46SRobert Mustacchi Dwarf_Small* /*version*/, 2970*4d9fdb46SRobert Mustacchi char ** /*augmenter*/, 2971*4d9fdb46SRobert Mustacchi Dwarf_Unsigned* /*code_alignment_factor*/, 2972*4d9fdb46SRobert Mustacchi Dwarf_Signed* /*data_alignment_factor*/, 2973*4d9fdb46SRobert Mustacchi Dwarf_Half* /*return_address_register_rule*/, 2974*4d9fdb46SRobert Mustacchi Dwarf_Ptr* /*initial_instructions*/, 2975*4d9fdb46SRobert Mustacchi Dwarf_Unsigned* /*initial_instructions_length*/, 2976*4d9fdb46SRobert Mustacchi Dwarf_Half* /*offset_size*/, 2977*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 2978bc1f688bSRobert Mustacchi int dwarf_get_cie_info(Dwarf_Cie /*cie*/, 2979bc1f688bSRobert Mustacchi Dwarf_Unsigned * /*bytes_in_cie*/, 2980bc1f688bSRobert Mustacchi Dwarf_Small* /*version*/, 2981bc1f688bSRobert Mustacchi char ** /*augmenter*/, 2982bc1f688bSRobert Mustacchi Dwarf_Unsigned* /*code_alignment_factor*/, 2983bc1f688bSRobert Mustacchi Dwarf_Signed* /*data_alignment_factor*/, 2984bc1f688bSRobert Mustacchi Dwarf_Half* /*return_address_register_rule*/, 2985bc1f688bSRobert Mustacchi Dwarf_Ptr* /*initial_instructions*/, 2986bc1f688bSRobert Mustacchi Dwarf_Unsigned* /*initial_instructions_length*/, 2987bc1f688bSRobert Mustacchi Dwarf_Error* /*error*/); 2988bc1f688bSRobert Mustacchi 2989bc1f688bSRobert Mustacchi /* dwarf_get_cie_index new September 2009. */ 2990bc1f688bSRobert Mustacchi int dwarf_get_cie_index( 2991bc1f688bSRobert Mustacchi Dwarf_Cie /*cie*/, 2992bc1f688bSRobert Mustacchi Dwarf_Signed* /*index*/, 2993bc1f688bSRobert Mustacchi Dwarf_Error* /*error*/ ); 2994bc1f688bSRobert Mustacchi 2995bc1f688bSRobert Mustacchi 2996bc1f688bSRobert Mustacchi int dwarf_get_fde_instr_bytes(Dwarf_Fde /*fde*/, 2997bc1f688bSRobert Mustacchi Dwarf_Ptr * /*outinstrs*/, Dwarf_Unsigned * /*outlen*/, 2998bc1f688bSRobert Mustacchi Dwarf_Error * /*error*/); 2999bc1f688bSRobert Mustacchi 3000bc1f688bSRobert Mustacchi int dwarf_get_fde_info_for_all_regs(Dwarf_Fde /*fde*/, 3001bc1f688bSRobert Mustacchi Dwarf_Addr /*pc_requested*/, 3002bc1f688bSRobert Mustacchi Dwarf_Regtable* /*reg_table*/, 3003bc1f688bSRobert Mustacchi Dwarf_Addr* /*row_pc*/, 3004bc1f688bSRobert Mustacchi Dwarf_Error* /*error*/); 3005bc1f688bSRobert Mustacchi 3006bc1f688bSRobert Mustacchi int dwarf_get_fde_info_for_all_regs3(Dwarf_Fde /*fde*/, 3007bc1f688bSRobert Mustacchi Dwarf_Addr /*pc_requested*/, 3008bc1f688bSRobert Mustacchi Dwarf_Regtable3* /*reg_table*/, 3009bc1f688bSRobert Mustacchi Dwarf_Addr* /*row_pc*/, 3010bc1f688bSRobert Mustacchi Dwarf_Error* /*error*/); 3011bc1f688bSRobert Mustacchi 3012bc1f688bSRobert Mustacchi /* In this older interface DW_FRAME_CFA_COL is a meaningful 3013bc1f688bSRobert Mustacchi column (which does not work well with DWARF3 or 3014bc1f688bSRobert Mustacchi non-MIPS architectures). */ 3015bc1f688bSRobert Mustacchi int dwarf_get_fde_info_for_reg(Dwarf_Fde /*fde*/, 3016bc1f688bSRobert Mustacchi Dwarf_Half /*table_column*/, 3017bc1f688bSRobert Mustacchi Dwarf_Addr /*pc_requested*/, 3018bc1f688bSRobert Mustacchi Dwarf_Signed* /*offset_relevant*/, 3019bc1f688bSRobert Mustacchi Dwarf_Signed* /*register*/, 3020bc1f688bSRobert Mustacchi Dwarf_Signed* /*offset*/, 3021bc1f688bSRobert Mustacchi Dwarf_Addr* /*row_pc*/, 3022bc1f688bSRobert Mustacchi Dwarf_Error* /*error*/); 3023bc1f688bSRobert Mustacchi 3024bc1f688bSRobert Mustacchi /* See discussion of dw_value_type, libdwarf.h. 3025bc1f688bSRobert Mustacchi Use of DW_FRAME_CFA_COL is not meaningful in this interface. 3026bc1f688bSRobert Mustacchi See dwarf_get_fde_info_for_cfa_reg3(). 3027bc1f688bSRobert Mustacchi */ 3028bc1f688bSRobert Mustacchi /* dwarf_get_fde_info_for_reg3 is useful on a single column, but 3029bc1f688bSRobert Mustacchi it is inefficient to iterate across all table_columns using this 3030bc1f688bSRobert Mustacchi function. Instead call dwarf_get_fde_info_for_all_regs3() and index 3031bc1f688bSRobert Mustacchi into the table it fills in. */ 3032bc1f688bSRobert Mustacchi int dwarf_get_fde_info_for_reg3(Dwarf_Fde /*fde*/, 3033bc1f688bSRobert Mustacchi Dwarf_Half /*table_column*/, 3034bc1f688bSRobert Mustacchi Dwarf_Addr /*pc_requested*/, 3035bc1f688bSRobert Mustacchi Dwarf_Small * /*value_type*/, 3036bc1f688bSRobert Mustacchi Dwarf_Signed * /*offset_relevant*/, 3037bc1f688bSRobert Mustacchi Dwarf_Signed * /*register*/, 3038bc1f688bSRobert Mustacchi Dwarf_Signed * /*offset_or_block_len*/, 3039bc1f688bSRobert Mustacchi Dwarf_Ptr * /*block_ptr */, 3040bc1f688bSRobert Mustacchi Dwarf_Addr * /*row_pc_out*/, 3041bc1f688bSRobert Mustacchi Dwarf_Error * /*error*/); 3042bc1f688bSRobert Mustacchi 3043*4d9fdb46SRobert Mustacchi int dwarf_get_fde_info_for_reg3_b(Dwarf_Fde /*fde*/, 3044*4d9fdb46SRobert Mustacchi Dwarf_Half /*table_column*/, 3045*4d9fdb46SRobert Mustacchi Dwarf_Addr /*pc_requested*/, 3046*4d9fdb46SRobert Mustacchi Dwarf_Small * /*value_type*/, 3047*4d9fdb46SRobert Mustacchi Dwarf_Signed * /*offset_relevant*/, 3048*4d9fdb46SRobert Mustacchi Dwarf_Signed * /*register*/, 3049*4d9fdb46SRobert Mustacchi Dwarf_Signed * /*offset_or_block_len*/, 3050*4d9fdb46SRobert Mustacchi Dwarf_Ptr * /*block_ptr */, 3051*4d9fdb46SRobert Mustacchi Dwarf_Addr * /*row_pc_out*/, 3052*4d9fdb46SRobert Mustacchi Dwarf_Bool * /* has_more_rows */, 3053*4d9fdb46SRobert Mustacchi Dwarf_Addr * /* subsequent_pc */, 3054*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 3055*4d9fdb46SRobert Mustacchi 3056*4d9fdb46SRobert Mustacchi /* Use this or the next function to get the cfa. 3057*4d9fdb46SRobert Mustacchi New function, June 11, 2016*/ 3058*4d9fdb46SRobert Mustacchi int dwarf_get_fde_info_for_cfa_reg3_b(Dwarf_Fde /*fde*/, 3059*4d9fdb46SRobert Mustacchi Dwarf_Addr /*pc_requested*/, 3060*4d9fdb46SRobert Mustacchi Dwarf_Small * /*value_type*/, 3061*4d9fdb46SRobert Mustacchi Dwarf_Signed * /*offset_relevant*/, 3062*4d9fdb46SRobert Mustacchi Dwarf_Signed* /*register*/, 3063*4d9fdb46SRobert Mustacchi Dwarf_Signed* /*offset_or_block_len*/, 3064*4d9fdb46SRobert Mustacchi Dwarf_Ptr * /*block_ptr */, 3065*4d9fdb46SRobert Mustacchi Dwarf_Addr* /*row_pc_out*/, 3066*4d9fdb46SRobert Mustacchi Dwarf_Bool * /* has_more_rows */, 3067*4d9fdb46SRobert Mustacchi Dwarf_Addr * /* subsequent_pc */, 3068*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 3069*4d9fdb46SRobert Mustacchi /* Use this to get the cfa. Or the above function. */ 3070bc1f688bSRobert Mustacchi int dwarf_get_fde_info_for_cfa_reg3(Dwarf_Fde /*fde*/, 3071bc1f688bSRobert Mustacchi Dwarf_Addr /*pc_requested*/, 3072bc1f688bSRobert Mustacchi Dwarf_Small * /*value_type*/, 3073bc1f688bSRobert Mustacchi Dwarf_Signed * /*offset_relevant*/, 3074bc1f688bSRobert Mustacchi Dwarf_Signed* /*register*/, 3075bc1f688bSRobert Mustacchi Dwarf_Signed* /*offset_or_block_len*/, 3076bc1f688bSRobert Mustacchi Dwarf_Ptr * /*block_ptr */, 3077bc1f688bSRobert Mustacchi Dwarf_Addr* /*row_pc_out*/, 3078bc1f688bSRobert Mustacchi Dwarf_Error* /*error*/); 3079bc1f688bSRobert Mustacchi 3080bc1f688bSRobert Mustacchi int dwarf_get_fde_for_die(Dwarf_Debug /*dbg*/, 3081bc1f688bSRobert Mustacchi Dwarf_Die /*subr_die */, 3082bc1f688bSRobert Mustacchi Dwarf_Fde * /*returned_fde*/, 3083bc1f688bSRobert Mustacchi Dwarf_Error* /*error*/); 3084bc1f688bSRobert Mustacchi 3085bc1f688bSRobert Mustacchi int dwarf_get_fde_n(Dwarf_Fde* /*fde_data*/, 3086bc1f688bSRobert Mustacchi Dwarf_Unsigned /*fde_index*/, 3087bc1f688bSRobert Mustacchi Dwarf_Fde * /*returned_fde*/, 3088bc1f688bSRobert Mustacchi Dwarf_Error* /*error*/); 3089bc1f688bSRobert Mustacchi 3090bc1f688bSRobert Mustacchi int dwarf_get_fde_at_pc(Dwarf_Fde* /*fde_data*/, 3091bc1f688bSRobert Mustacchi Dwarf_Addr /*pc_of_interest*/, 3092bc1f688bSRobert Mustacchi Dwarf_Fde * /*returned_fde*/, 3093bc1f688bSRobert Mustacchi Dwarf_Addr* /*lopc*/, 3094bc1f688bSRobert Mustacchi Dwarf_Addr* /*hipc*/, 3095bc1f688bSRobert Mustacchi Dwarf_Error* /*error*/); 3096bc1f688bSRobert Mustacchi 3097bc1f688bSRobert Mustacchi /* GNU .eh_frame augmentation information, raw form, see 3098bc1f688bSRobert Mustacchi Linux Standard Base Core Specification version 3.0 . */ 3099bc1f688bSRobert Mustacchi int dwarf_get_cie_augmentation_data(Dwarf_Cie /* cie*/, 3100bc1f688bSRobert Mustacchi Dwarf_Small ** /* augdata */, 3101bc1f688bSRobert Mustacchi Dwarf_Unsigned * /* augdata_len */, 3102bc1f688bSRobert Mustacchi Dwarf_Error* /*error*/); 3103bc1f688bSRobert Mustacchi /* GNU .eh_frame augmentation information, raw form, see 3104bc1f688bSRobert Mustacchi Linux Standard Base Core Specification version 3.0 . */ 3105bc1f688bSRobert Mustacchi int dwarf_get_fde_augmentation_data(Dwarf_Fde /* fde*/, 3106bc1f688bSRobert Mustacchi Dwarf_Small ** /* augdata */, 3107bc1f688bSRobert Mustacchi Dwarf_Unsigned * /* augdata_len */, 3108bc1f688bSRobert Mustacchi Dwarf_Error* /*error*/); 3109bc1f688bSRobert Mustacchi 3110bc1f688bSRobert Mustacchi int dwarf_expand_frame_instructions(Dwarf_Cie /*cie*/, 3111bc1f688bSRobert Mustacchi Dwarf_Ptr /*instruction*/, 3112bc1f688bSRobert Mustacchi Dwarf_Unsigned /*i_length*/, 3113bc1f688bSRobert Mustacchi Dwarf_Frame_Op** /*returned_op_list*/, 3114bc1f688bSRobert Mustacchi Dwarf_Signed* /*op_count*/, 3115bc1f688bSRobert Mustacchi Dwarf_Error* /*error*/); 3116bc1f688bSRobert Mustacchi 3117bc1f688bSRobert Mustacchi /* Operations on .debug_aranges. */ 3118bc1f688bSRobert Mustacchi int dwarf_get_aranges(Dwarf_Debug /*dbg*/, 3119bc1f688bSRobert Mustacchi Dwarf_Arange** /*aranges*/, 3120bc1f688bSRobert Mustacchi Dwarf_Signed * /*arange_count*/, 3121bc1f688bSRobert Mustacchi Dwarf_Error* /*error*/); 3122bc1f688bSRobert Mustacchi 3123*4d9fdb46SRobert Mustacchi int dwarf_get_ranges_section_name(Dwarf_Debug /*dbg*/, 3124*4d9fdb46SRobert Mustacchi const char ** /*section_name_out*/, 3125*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 3126*4d9fdb46SRobert Mustacchi 3127*4d9fdb46SRobert Mustacchi int dwarf_get_aranges_section_name(Dwarf_Debug /*dbg*/, 3128*4d9fdb46SRobert Mustacchi const char ** /*section_name_out*/, 3129*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 3130*4d9fdb46SRobert Mustacchi 3131bc1f688bSRobert Mustacchi 3132bc1f688bSRobert Mustacchi 3133bc1f688bSRobert Mustacchi int dwarf_get_arange( 3134bc1f688bSRobert Mustacchi Dwarf_Arange* /*aranges*/, 3135bc1f688bSRobert Mustacchi Dwarf_Unsigned /*arange_count*/, 3136bc1f688bSRobert Mustacchi Dwarf_Addr /*address*/, 3137bc1f688bSRobert Mustacchi Dwarf_Arange * /*returned_arange*/, 3138bc1f688bSRobert Mustacchi Dwarf_Error* /*error*/); 3139bc1f688bSRobert Mustacchi 3140bc1f688bSRobert Mustacchi int dwarf_get_cu_die_offset( 3141bc1f688bSRobert Mustacchi Dwarf_Arange /*arange*/, 3142bc1f688bSRobert Mustacchi Dwarf_Off* /*return_offset*/, 3143bc1f688bSRobert Mustacchi Dwarf_Error* /*error*/); 3144bc1f688bSRobert Mustacchi 3145bc1f688bSRobert Mustacchi int dwarf_get_arange_cu_header_offset( 3146bc1f688bSRobert Mustacchi Dwarf_Arange /*arange*/, 3147bc1f688bSRobert Mustacchi Dwarf_Off* /*return_cu_header_offset*/, 3148bc1f688bSRobert Mustacchi Dwarf_Error* /*error*/); 3149bc1f688bSRobert Mustacchi #ifdef __sgi /* pragma is sgi MIPS only */ 3150bc1f688bSRobert Mustacchi #pragma optional dwarf_get_arange_cu_header_offset 3151bc1f688bSRobert Mustacchi #endif 3152bc1f688bSRobert Mustacchi 3153bc1f688bSRobert Mustacchi /* DWARF2,3 interface. No longer really adequate (it was never 3154bc1f688bSRobert Mustacchi right for segmented address spaces, please switch 3155bc1f688bSRobert Mustacchi to using dwarf_get_arange_info_b instead. 3156bc1f688bSRobert Mustacchi There is no effective difference between these 3157bc1f688bSRobert Mustacchi functions if the address space 3158bc1f688bSRobert Mustacchi of the target is not segmented. */ 3159bc1f688bSRobert Mustacchi int dwarf_get_arange_info( 3160bc1f688bSRobert Mustacchi Dwarf_Arange /*arange*/, 3161bc1f688bSRobert Mustacchi Dwarf_Addr* /*start*/, 3162bc1f688bSRobert Mustacchi Dwarf_Unsigned* /*length*/, 3163bc1f688bSRobert Mustacchi Dwarf_Off* /*cu_die_offset*/, 3164bc1f688bSRobert Mustacchi Dwarf_Error* /*error*/ ); 3165bc1f688bSRobert Mustacchi 3166bc1f688bSRobert Mustacchi /* New for DWARF4, entries may have segment information. 3167bc1f688bSRobert Mustacchi *segment is only meaningful if *segment_entry_size is non-zero. */ 3168bc1f688bSRobert Mustacchi int dwarf_get_arange_info_b( 3169bc1f688bSRobert Mustacchi Dwarf_Arange /*arange*/, 3170bc1f688bSRobert Mustacchi Dwarf_Unsigned* /*segment*/, 3171bc1f688bSRobert Mustacchi Dwarf_Unsigned* /*segment_entry_size*/, 3172bc1f688bSRobert Mustacchi Dwarf_Addr * /*start*/, 3173bc1f688bSRobert Mustacchi Dwarf_Unsigned* /*length*/, 3174bc1f688bSRobert Mustacchi Dwarf_Off * /*cu_die_offset*/, 3175bc1f688bSRobert Mustacchi Dwarf_Error * /*error*/ ); 3176bc1f688bSRobert Mustacchi 3177*4d9fdb46SRobert Mustacchi /* BEGIN: DWARF5 .debug_macro interfaces 3178*4d9fdb46SRobert Mustacchi NEW November 2015. */ 3179*4d9fdb46SRobert Mustacchi int dwarf_get_macro_context(Dwarf_Die /*die*/, 3180*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*version_out*/, 3181*4d9fdb46SRobert Mustacchi Dwarf_Macro_Context * /*macro_context*/, 3182*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*macro_unit_offset_out*/, 3183*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*macro_ops_count_out*/, 3184*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*macro_ops_data_length_out*/, 3185*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 3186*4d9fdb46SRobert Mustacchi 3187*4d9fdb46SRobert Mustacchi /* Just like dwarf_get_macro_context, but instead of using 3188*4d9fdb46SRobert Mustacchi DW_AT_macros or DW_AT_GNU_macros to get the offset we just 3189*4d9fdb46SRobert Mustacchi take the offset given. */ 3190*4d9fdb46SRobert Mustacchi int dwarf_get_macro_context_by_offset(Dwarf_Die /*die*/, 3191*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*offset*/, 3192*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*version_out*/, 3193*4d9fdb46SRobert Mustacchi Dwarf_Macro_Context * /*macro_context*/, 3194*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*macro_ops_count_out*/, 3195*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*macro_ops_data_length*/, 3196*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 3197*4d9fdb46SRobert Mustacchi 3198*4d9fdb46SRobert Mustacchi void dwarf_dealloc_macro_context(Dwarf_Macro_Context /*mc*/); 3199*4d9fdb46SRobert Mustacchi int dwarf_get_macro_section_name(Dwarf_Debug /*dbg*/, 3200*4d9fdb46SRobert Mustacchi const char ** /*sec_name_out*/, 3201*4d9fdb46SRobert Mustacchi Dwarf_Error * /*err*/); 3202*4d9fdb46SRobert Mustacchi 3203*4d9fdb46SRobert Mustacchi int dwarf_macro_context_head(Dwarf_Macro_Context /*head*/, 3204*4d9fdb46SRobert Mustacchi Dwarf_Half * /*version*/, 3205*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*mac_offset*/, 3206*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*mac_len*/, 3207*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*mac_header_len*/, 3208*4d9fdb46SRobert Mustacchi unsigned int * /*flags*/, 3209*4d9fdb46SRobert Mustacchi Dwarf_Bool * /*has_line_offset*/, 3210*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*line_offset*/, 3211*4d9fdb46SRobert Mustacchi Dwarf_Bool * /*has_offset_size_64*/, 3212*4d9fdb46SRobert Mustacchi Dwarf_Bool * /*has_operands_table*/, 3213*4d9fdb46SRobert Mustacchi Dwarf_Half * /*opcode_count*/, 3214*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 3215*4d9fdb46SRobert Mustacchi 3216*4d9fdb46SRobert Mustacchi /* Returns data from the operands table 3217*4d9fdb46SRobert Mustacchi in the macro unit header. */ 3218*4d9fdb46SRobert Mustacchi int dwarf_macro_operands_table(Dwarf_Macro_Context /*head*/, 3219*4d9fdb46SRobert Mustacchi Dwarf_Half /*index*/, /* 0 to opcode_count -1 */ 3220*4d9fdb46SRobert Mustacchi Dwarf_Half * /*opcode_number*/, 3221*4d9fdb46SRobert Mustacchi Dwarf_Half * /*operand_count*/, 3222*4d9fdb46SRobert Mustacchi const Dwarf_Small ** /*operand_array*/, 3223*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 3224*4d9fdb46SRobert Mustacchi 3225*4d9fdb46SRobert Mustacchi /* Access to the macro operations, 0 to macro_ops_count_out-1 3226*4d9fdb46SRobert Mustacchi Where the last of these will have macro_operator 0 (which appears 3227*4d9fdb46SRobert Mustacchi in the ops data and means end-of-ops). 3228*4d9fdb46SRobert Mustacchi op_start_section_offset is the section offset of 3229*4d9fdb46SRobert Mustacchi the macro operator (which is a single unsigned byte, 3230*4d9fdb46SRobert Mustacchi and is followed by the macro operand data). */ 3231*4d9fdb46SRobert Mustacchi int dwarf_get_macro_op(Dwarf_Macro_Context /*macro_context*/, 3232*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*op_number*/, 3233*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*op_start_section_offset*/, 3234*4d9fdb46SRobert Mustacchi Dwarf_Half * /*macro_operator*/, 3235*4d9fdb46SRobert Mustacchi Dwarf_Half * /*forms_count*/, 3236*4d9fdb46SRobert Mustacchi const Dwarf_Small ** /*formcode_array*/, 3237*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 3238*4d9fdb46SRobert Mustacchi 3239*4d9fdb46SRobert Mustacchi int dwarf_get_macro_defundef(Dwarf_Macro_Context /*macro_context*/, 3240*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*op_number*/, 3241*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*line_number*/, 3242*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*index*/, 3243*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*offset*/, 3244*4d9fdb46SRobert Mustacchi Dwarf_Half * /*forms_count*/, 3245*4d9fdb46SRobert Mustacchi const char ** /*macro_string*/, 3246*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 3247*4d9fdb46SRobert Mustacchi int dwarf_get_macro_startend_file(Dwarf_Macro_Context /*macro_context*/, 3248*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*op_number*/, 3249*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*line_number*/, 3250*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*name_index_to_line_tab*/, 3251*4d9fdb46SRobert Mustacchi const char ** /*src_file_name*/, 3252*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 3253*4d9fdb46SRobert Mustacchi int dwarf_get_macro_import(Dwarf_Macro_Context /*macro_context*/, 3254*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*op_number*/, 3255*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*target_offset*/, 3256*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 3257*4d9fdb46SRobert Mustacchi 3258*4d9fdb46SRobert Mustacchi /* END: DWARF5 .debug_macro interfaces. */ 3259bc1f688bSRobert Mustacchi 3260bc1f688bSRobert Mustacchi /* consumer .debug_macinfo information interface. 3261bc1f688bSRobert Mustacchi */ 3262bc1f688bSRobert Mustacchi struct Dwarf_Macro_Details_s { 3263bc1f688bSRobert Mustacchi Dwarf_Off dmd_offset; /* offset, in the section, 3264bc1f688bSRobert Mustacchi of this macro info */ 3265bc1f688bSRobert Mustacchi Dwarf_Small dmd_type; /* the type, DW_MACINFO_define etc*/ 3266bc1f688bSRobert Mustacchi Dwarf_Signed dmd_lineno; /* the source line number where 3267*4d9fdb46SRobert Mustacchi applicable and vend_def number if 3268*4d9fdb46SRobert Mustacchi vendor_extension op */ 3269bc1f688bSRobert Mustacchi 3270bc1f688bSRobert Mustacchi Dwarf_Signed dmd_fileindex;/* the source file index: 3271*4d9fdb46SRobert Mustacchi applies to define undef start_file */ 3272bc1f688bSRobert Mustacchi char * dmd_macro; /* macro name (with value for defineop) 3273*4d9fdb46SRobert Mustacchi string from vendor ext */ 3274bc1f688bSRobert Mustacchi }; 3275bc1f688bSRobert Mustacchi 3276bc1f688bSRobert Mustacchi /* dwarf_print_lines is for use by dwarfdump: it prints 3277bc1f688bSRobert Mustacchi line info to stdout. 3278bc1f688bSRobert Mustacchi The _dwarf name is obsolete. Use dwarf_ instead. 3279bc1f688bSRobert Mustacchi Added extra argnument 2/2009 for better checking. 3280bc1f688bSRobert Mustacchi */ 3281bc1f688bSRobert Mustacchi int _dwarf_print_lines(Dwarf_Die /*cu_die*/,Dwarf_Error * /*error*/); 3282bc1f688bSRobert Mustacchi int dwarf_print_lines(Dwarf_Die /*cu_die*/,Dwarf_Error * /*error*/, 3283bc1f688bSRobert Mustacchi int * /*error_count_out */); 3284bc1f688bSRobert Mustacchi 3285*4d9fdb46SRobert Mustacchi /* As of August 2013, dwarf_print_lines() no longer uses printf. 3286*4d9fdb46SRobert Mustacchi Instead it calls back to the application using a function pointer 3287*4d9fdb46SRobert Mustacchi once per line-to-print. The lines passed back already have any needed 3288*4d9fdb46SRobert Mustacchi newlines. The following struct is used to initialize 3289*4d9fdb46SRobert Mustacchi the callback mechanism. 3290*4d9fdb46SRobert Mustacchi 3291*4d9fdb46SRobert Mustacchi Failing to call the dwarf_register_printf_callback() function will 3292*4d9fdb46SRobert Mustacchi prevent the lines from being passed back but such omission 3293*4d9fdb46SRobert Mustacchi is not an error. 3294*4d9fdb46SRobert Mustacchi See libdwarf2.1.mm for further documentation. 3295*4d9fdb46SRobert Mustacchi 3296*4d9fdb46SRobert Mustacchi The return value is the previous set of callback values. 3297*4d9fdb46SRobert Mustacchi */ 3298*4d9fdb46SRobert Mustacchi 3299*4d9fdb46SRobert Mustacchi typedef void (* dwarf_printf_callback_function_type) 3300*4d9fdb46SRobert Mustacchi (void * /*user_pointer*/, const char * /*linecontent*/); 3301*4d9fdb46SRobert Mustacchi 3302*4d9fdb46SRobert Mustacchi struct Dwarf_Printf_Callback_Info_s { 3303*4d9fdb46SRobert Mustacchi void * dp_user_pointer; 3304*4d9fdb46SRobert Mustacchi dwarf_printf_callback_function_type dp_fptr; 3305*4d9fdb46SRobert Mustacchi char * dp_buffer; 3306*4d9fdb46SRobert Mustacchi unsigned int dp_buffer_len; 3307*4d9fdb46SRobert Mustacchi int dp_buffer_user_provided; 3308*4d9fdb46SRobert Mustacchi void * dp_reserved; 3309*4d9fdb46SRobert Mustacchi }; 3310*4d9fdb46SRobert Mustacchi 3311*4d9fdb46SRobert Mustacchi /* If called with a NULL newvalues pointer, it simply returns 3312*4d9fdb46SRobert Mustacchi the current set of values for this Dwarf_Debug. */ 3313*4d9fdb46SRobert Mustacchi struct Dwarf_Printf_Callback_Info_s 3314*4d9fdb46SRobert Mustacchi dwarf_register_printf_callback(Dwarf_Debug /*dbg*/, 3315*4d9fdb46SRobert Mustacchi struct Dwarf_Printf_Callback_Info_s * /*newvalues*/); 3316*4d9fdb46SRobert Mustacchi 3317*4d9fdb46SRobert Mustacchi 3318bc1f688bSRobert Mustacchi /* dwarf_check_lineheader lets dwarfdump get detailed messages 3319bc1f688bSRobert Mustacchi about some compiler errors we detect. 3320*4d9fdb46SRobert Mustacchi We return the count of detected errors through the 3321bc1f688bSRobert Mustacchi pointer. 3322*4d9fdb46SRobert Mustacchi 3323*4d9fdb46SRobert Mustacchi Use dwarf_check_lineheader_b() (new 14 April 2020) 3324*4d9fdb46SRobert Mustacchi in place of dwarf_check_lineheader(). 3325bc1f688bSRobert Mustacchi */ 3326*4d9fdb46SRobert Mustacchi int dwarf_check_lineheader_b(Dwarf_Die /*cu_die*/, 3327*4d9fdb46SRobert Mustacchi int */*errcount_out*/, 3328*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 3329*4d9fdb46SRobert Mustacchi void dwarf_check_lineheader(Dwarf_Die /*cu_die*/, 3330*4d9fdb46SRobert Mustacchi int * /*errcount_out*/); 3331bc1f688bSRobert Mustacchi 3332bc1f688bSRobert Mustacchi /* dwarf_ld_sort_lines helps SGI IRIX ld 3333bc1f688bSRobert Mustacchi rearrange lines in .debug_line in a .o created with a text 3334bc1f688bSRobert Mustacchi section per function. 3335bc1f688bSRobert Mustacchi -OPT:procedure_reorder=ON 3336bc1f688bSRobert Mustacchi where ld-cord (cord(1)ing by ld, 3337bc1f688bSRobert Mustacchi not by cord(1)) may have changed the function order. 3338bc1f688bSRobert Mustacchi The _dwarf name is obsolete. Use dwarf_ instead. 3339bc1f688bSRobert Mustacchi */ 3340bc1f688bSRobert Mustacchi int _dwarf_ld_sort_lines( 3341bc1f688bSRobert Mustacchi void * /*orig_buffer*/, 3342bc1f688bSRobert Mustacchi unsigned long /* buffer_len*/, 3343bc1f688bSRobert Mustacchi int /*is_64_bit*/, 3344bc1f688bSRobert Mustacchi int * /*any_change*/, 3345bc1f688bSRobert Mustacchi int * /*err_code*/); 3346bc1f688bSRobert Mustacchi int dwarf_ld_sort_lines( 3347bc1f688bSRobert Mustacchi void * /*orig_buffer*/, 3348bc1f688bSRobert Mustacchi unsigned long /*buffer_len*/, 3349bc1f688bSRobert Mustacchi int /*is_64_bit*/, 3350bc1f688bSRobert Mustacchi int * /*any_change*/, 3351bc1f688bSRobert Mustacchi int * /*err_code*/); 3352bc1f688bSRobert Mustacchi 3353bc1f688bSRobert Mustacchi /* Used by dwarfdump -v to print fde offsets from debugging 3354bc1f688bSRobert Mustacchi info. 3355bc1f688bSRobert Mustacchi The _dwarf name is obsolete. Use dwarf_ instead. 3356bc1f688bSRobert Mustacchi */ 3357*4d9fdb46SRobert Mustacchi int _dwarf_fde_section_offset(Dwarf_Debug /*dbg*/, 3358bc1f688bSRobert Mustacchi Dwarf_Fde /*in_fde*/, 3359bc1f688bSRobert Mustacchi Dwarf_Off * /*fde_off*/, 3360bc1f688bSRobert Mustacchi Dwarf_Off * /*cie_off*/, 3361bc1f688bSRobert Mustacchi Dwarf_Error * /*err*/); 3362*4d9fdb46SRobert Mustacchi 3363*4d9fdb46SRobert Mustacchi int dwarf_fde_section_offset(Dwarf_Debug /*dbg*/, 3364bc1f688bSRobert Mustacchi Dwarf_Fde /*in_fde*/, 3365bc1f688bSRobert Mustacchi Dwarf_Off * /*fde_off*/, 3366bc1f688bSRobert Mustacchi Dwarf_Off * /*cie_off*/, 3367bc1f688bSRobert Mustacchi Dwarf_Error * /*err*/); 3368bc1f688bSRobert Mustacchi 3369bc1f688bSRobert Mustacchi /* Used by dwarfdump -v to print cie offsets from debugging 3370bc1f688bSRobert Mustacchi info. 3371bc1f688bSRobert Mustacchi The _dwarf name is obsolete. Use dwarf_ instead. 3372bc1f688bSRobert Mustacchi */ 3373bc1f688bSRobert Mustacchi int dwarf_cie_section_offset(Dwarf_Debug /*dbg*/, 3374bc1f688bSRobert Mustacchi Dwarf_Cie /*in_cie*/, 3375bc1f688bSRobert Mustacchi Dwarf_Off * /*cie_off */, 3376bc1f688bSRobert Mustacchi Dwarf_Error * /*err*/); 3377bc1f688bSRobert Mustacchi int _dwarf_cie_section_offset(Dwarf_Debug /*dbg*/, 3378bc1f688bSRobert Mustacchi Dwarf_Cie /*in_cie*/, 3379bc1f688bSRobert Mustacchi Dwarf_Off * /*cie_off*/, 3380bc1f688bSRobert Mustacchi Dwarf_Error * /*err*/); 3381bc1f688bSRobert Mustacchi 3382bc1f688bSRobert Mustacchi typedef struct Dwarf_Macro_Details_s Dwarf_Macro_Details; 3383bc1f688bSRobert Mustacchi 3384bc1f688bSRobert Mustacchi char *dwarf_find_macro_value_start(char * /*macro_string*/); 3385bc1f688bSRobert Mustacchi 3386bc1f688bSRobert Mustacchi int dwarf_get_macro_details(Dwarf_Debug /*dbg*/, 3387bc1f688bSRobert Mustacchi Dwarf_Off /*macro_offset*/, 3388bc1f688bSRobert Mustacchi Dwarf_Unsigned /*maximum_count*/, 3389bc1f688bSRobert Mustacchi Dwarf_Signed * /*entry_count*/, 3390bc1f688bSRobert Mustacchi Dwarf_Macro_Details ** /*details*/, 3391bc1f688bSRobert Mustacchi Dwarf_Error * /*err*/); 3392bc1f688bSRobert Mustacchi 3393bc1f688bSRobert Mustacchi 3394*4d9fdb46SRobert Mustacchi /* dwarf_get_offset_size() New October 2015 */ 3395*4d9fdb46SRobert Mustacchi int dwarf_get_offset_size(Dwarf_Debug /*dbg*/, 3396*4d9fdb46SRobert Mustacchi Dwarf_Half * /*offset_size*/, 3397*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 3398bc1f688bSRobert Mustacchi int dwarf_get_address_size(Dwarf_Debug /*dbg*/, 3399bc1f688bSRobert Mustacchi Dwarf_Half * /*addr_size*/, 3400bc1f688bSRobert Mustacchi Dwarf_Error * /*error*/); 3401bc1f688bSRobert Mustacchi int dwarf_get_die_address_size(Dwarf_Die /*die*/, 3402bc1f688bSRobert Mustacchi Dwarf_Half * /*addr_size*/, 3403bc1f688bSRobert Mustacchi Dwarf_Error * /*error*/); 3404bc1f688bSRobert Mustacchi 3405bc1f688bSRobert Mustacchi enum Dwarf_Form_Class dwarf_get_form_class( 3406bc1f688bSRobert Mustacchi Dwarf_Half /* dwversion */, 3407bc1f688bSRobert Mustacchi Dwarf_Half /* attrnum */, 3408bc1f688bSRobert Mustacchi Dwarf_Half /*offset_size */, 3409bc1f688bSRobert Mustacchi Dwarf_Half /*form*/); 3410bc1f688bSRobert Mustacchi 3411bc1f688bSRobert Mustacchi 3412*4d9fdb46SRobert Mustacchi /* BEGIN gdbindex operations interfaces. */ 3413*4d9fdb46SRobert Mustacchi /* .gdb_index section operations. 3414*4d9fdb46SRobert Mustacchi A GDB extension. 3415*4d9fdb46SRobert Mustacchi The section is in some executables and if present 3416*4d9fdb46SRobert Mustacchi is used to quickly map an address or name to 3417*4d9fdb46SRobert Mustacchi a skeleton CU or TU. If present then there are 3418*4d9fdb46SRobert Mustacchi .dwo or .dwp files somewhere to make detailed 3419*4d9fdb46SRobert Mustacchi debugging possible (up to user code to 3420*4d9fdb46SRobert Mustacchi find it/them and deal with them). 3421*4d9fdb46SRobert Mustacchi 3422*4d9fdb46SRobert Mustacchi Version 8 built by gdb, so type entries are ok as is. 3423*4d9fdb46SRobert Mustacchi Version 7 built by the 'gold' linker and type index 3424*4d9fdb46SRobert Mustacchi entries for a CU must be derived othewise, the 3425*4d9fdb46SRobert Mustacchi type index is not correct... ? FIXME 3426*4d9fdb46SRobert Mustacchi */ 3427*4d9fdb46SRobert Mustacchi 3428*4d9fdb46SRobert Mustacchi /* Creates a Dwarf_Gdbindex, returning it and 3429*4d9fdb46SRobert Mustacchi its values through the pointers. */ 3430*4d9fdb46SRobert Mustacchi int dwarf_gdbindex_header(Dwarf_Debug /*dbg*/, 3431*4d9fdb46SRobert Mustacchi Dwarf_Gdbindex * /*gdbindexptr*/, 3432*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*version*/, 3433*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*cu_list_offset*/, 3434*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*types_cu_list_offset*/, 3435*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*address_area_offset*/, 3436*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*symbol_table_offset*/, 3437*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*constant_pool_offset*/, 3438*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*section_size*/, 3439*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*unused_reserved*/, 3440*4d9fdb46SRobert Mustacchi const char ** /*section_name*/, 3441*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 3442*4d9fdb46SRobert Mustacchi 3443*4d9fdb46SRobert Mustacchi int dwarf_gdbindex_culist_array(Dwarf_Gdbindex /*gdbindexptr*/, 3444*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*list_length*/, 3445*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 3446*4d9fdb46SRobert Mustacchi 3447*4d9fdb46SRobert Mustacchi /* entryindex: 0 to list_length-1 */ 3448*4d9fdb46SRobert Mustacchi int dwarf_gdbindex_culist_entry(Dwarf_Gdbindex /*gdbindexptr*/, 3449*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*entryindex*/, 3450*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*cu_offset*/, 3451*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*cu_length*/, 3452*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 3453*4d9fdb46SRobert Mustacchi 3454*4d9fdb46SRobert Mustacchi int dwarf_gdbindex_types_culist_array(Dwarf_Gdbindex /*gdbindexptr*/, 3455*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*types_list_length*/, 3456*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 3457*4d9fdb46SRobert Mustacchi 3458*4d9fdb46SRobert Mustacchi /* entryindex: 0 to types_list_length -1 */ 3459*4d9fdb46SRobert Mustacchi int dwarf_gdbindex_types_culist_entry( 3460*4d9fdb46SRobert Mustacchi Dwarf_Gdbindex /*gdbindexptr*/, 3461*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*entryindex*/, 3462*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*cu_offset*/, 3463*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*tu_offset*/, 3464*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*type_signature*/, 3465*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 3466*4d9fdb46SRobert Mustacchi 3467*4d9fdb46SRobert Mustacchi int dwarf_gdbindex_addressarea(Dwarf_Gdbindex /*gdbindexptr*/, 3468*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*addressarea_list_length*/, 3469*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 3470*4d9fdb46SRobert Mustacchi 3471*4d9fdb46SRobert Mustacchi /* entryindex: 0 to addressarea_list_length-1 */ 3472*4d9fdb46SRobert Mustacchi int dwarf_gdbindex_addressarea_entry( 3473*4d9fdb46SRobert Mustacchi Dwarf_Gdbindex /*gdbindexptr*/, 3474*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*entryindex*/, 3475*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*low_adddress*/, 3476*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*high_address*/, 3477*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*cu_index*/, 3478*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 3479*4d9fdb46SRobert Mustacchi 3480*4d9fdb46SRobert Mustacchi int dwarf_gdbindex_symboltable_array(Dwarf_Gdbindex /*gdbindexptr*/, 3481*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*symtab_list_length*/, 3482*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 3483*4d9fdb46SRobert Mustacchi 3484*4d9fdb46SRobert Mustacchi /* entryindex: 0 to symtab_list_length-1 */ 3485*4d9fdb46SRobert Mustacchi int dwarf_gdbindex_symboltable_entry( 3486*4d9fdb46SRobert Mustacchi Dwarf_Gdbindex /*gdbindexptr*/, 3487*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*entryindex*/, 3488*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*string_offset*/, 3489*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*cu_vector_offset*/, 3490*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 3491*4d9fdb46SRobert Mustacchi 3492*4d9fdb46SRobert Mustacchi int dwarf_gdbindex_cuvector_length(Dwarf_Gdbindex /*gdbindex*/, 3493*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*cuvector_offset*/, 3494*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*innercount*/, 3495*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 3496*4d9fdb46SRobert Mustacchi 3497*4d9fdb46SRobert Mustacchi 3498*4d9fdb46SRobert Mustacchi int dwarf_gdbindex_cuvector_inner_attributes(Dwarf_Gdbindex /*gdbindex*/, 3499*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*cuvector_offset*/, 3500*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*innerindex*/, 3501*4d9fdb46SRobert Mustacchi /* The attr_value is a field of bits. For expanded version 3502*4d9fdb46SRobert Mustacchi use dwarf_gdbindex_cuvector_expand_value() */ 3503*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*attr_value*/, 3504*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 3505*4d9fdb46SRobert Mustacchi 3506*4d9fdb46SRobert Mustacchi int dwarf_gdbindex_cuvector_instance_expand_value( 3507*4d9fdb46SRobert Mustacchi Dwarf_Gdbindex /*gdbindex*/, 3508*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*value*/, 3509*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*cu_index*/, 3510*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*reserved1*/, 3511*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*symbol_kind*/, 3512*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*is_static*/, 3513*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 3514*4d9fdb46SRobert Mustacchi 3515*4d9fdb46SRobert Mustacchi 3516*4d9fdb46SRobert Mustacchi /* The strings in the pool follow (in memory) the cu index 3517*4d9fdb46SRobert Mustacchi set and are NUL terminated. */ 3518*4d9fdb46SRobert Mustacchi 3519*4d9fdb46SRobert Mustacchi int dwarf_gdbindex_string_by_offset(Dwarf_Gdbindex /*gdbindexptr*/, 3520*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*stringoffset*/, 3521*4d9fdb46SRobert Mustacchi const char ** /*string_ptr*/, 3522*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 3523*4d9fdb46SRobert Mustacchi 3524*4d9fdb46SRobert Mustacchi void dwarf_gdbindex_free(Dwarf_Gdbindex /*gdbindexptr*/); 3525*4d9fdb46SRobert Mustacchi 3526*4d9fdb46SRobert Mustacchi /* END gdbindex/debugfission operations. */ 3527*4d9fdb46SRobert Mustacchi 3528*4d9fdb46SRobert Mustacchi /* START debugfission dwp .debug_cu_index and .debug_tu_index operations. */ 3529*4d9fdb46SRobert Mustacchi 3530*4d9fdb46SRobert Mustacchi int dwarf_get_xu_index_header(Dwarf_Debug /*dbg*/, 3531*4d9fdb46SRobert Mustacchi const char * section_type, /* "tu" or "cu" */ 3532*4d9fdb46SRobert Mustacchi Dwarf_Xu_Index_Header * /*xuhdr*/, 3533*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*version_number*/, 3534*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*offsets_count L*/, 3535*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*units_count N*/, 3536*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*hash_slots_count M*/, 3537*4d9fdb46SRobert Mustacchi const char ** /*sect_name*/, 3538*4d9fdb46SRobert Mustacchi Dwarf_Error * /*err*/); 3539*4d9fdb46SRobert Mustacchi 3540*4d9fdb46SRobert Mustacchi int dwarf_get_xu_index_section_type(Dwarf_Xu_Index_Header /*xuhdr*/, 3541*4d9fdb46SRobert Mustacchi /* the function returns a pointer to 3542*4d9fdb46SRobert Mustacchi the immutable string "tu" or "cu" via this arg. Do not free. */ 3543*4d9fdb46SRobert Mustacchi const char ** /*typename*/, 3544*4d9fdb46SRobert Mustacchi /* the function returns a pointer to 3545*4d9fdb46SRobert Mustacchi the immutable section name. Do not free. 3546*4d9fdb46SRobert Mustacchi .debug_cu_index or .debug_tu_index */ 3547*4d9fdb46SRobert Mustacchi const char ** /*sectionname*/, 3548*4d9fdb46SRobert Mustacchi Dwarf_Error * /*err*/); 3549*4d9fdb46SRobert Mustacchi 3550*4d9fdb46SRobert Mustacchi /* Index values 0 to M-1 are valid. */ 3551*4d9fdb46SRobert Mustacchi int dwarf_get_xu_hash_entry(Dwarf_Xu_Index_Header /*xuhdr*/, 3552*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*index*/, 3553*4d9fdb46SRobert Mustacchi 3554*4d9fdb46SRobert Mustacchi /* Returns the hash value. 64 bits. */ 3555*4d9fdb46SRobert Mustacchi Dwarf_Sig8 * /*hash_value*/, 3556*4d9fdb46SRobert Mustacchi 3557*4d9fdb46SRobert Mustacchi /* returns the index into rows of offset/size tables. */ 3558*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*index_to_sections*/, 3559*4d9fdb46SRobert Mustacchi Dwarf_Error * /*err*/); 3560*4d9fdb46SRobert Mustacchi 3561*4d9fdb46SRobert Mustacchi /* Columns 0 to L-1, valid. */ 3562*4d9fdb46SRobert Mustacchi int dwarf_get_xu_section_names(Dwarf_Xu_Index_Header /*xuhdr*/, 3563*4d9fdb46SRobert Mustacchi /* Row index defined to be row zero. */ 3564*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*column_index*/, 3565*4d9fdb46SRobert Mustacchi Dwarf_Unsigned* /*DW_SECT_ number*/, 3566*4d9fdb46SRobert Mustacchi const char ** /*DW_SECT_ name*/, 3567*4d9fdb46SRobert Mustacchi Dwarf_Error * /*err*/); 3568*4d9fdb46SRobert Mustacchi 3569*4d9fdb46SRobert Mustacchi /* Rows 1 to N col 0 to L-1 are valid */ 3570*4d9fdb46SRobert Mustacchi int dwarf_get_xu_section_offset(Dwarf_Xu_Index_Header /*xuhdr*/, 3571*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*row_index*/, 3572*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*column_index*/, 3573*4d9fdb46SRobert Mustacchi Dwarf_Unsigned* /*sec_offset*/, 3574*4d9fdb46SRobert Mustacchi Dwarf_Unsigned* /*sec_size*/, 3575*4d9fdb46SRobert Mustacchi Dwarf_Error * /*err*/); 3576*4d9fdb46SRobert Mustacchi 3577*4d9fdb46SRobert Mustacchi void dwarf_xu_header_free(Dwarf_Xu_Index_Header /*xuhdr*/); 3578*4d9fdb46SRobert Mustacchi 3579*4d9fdb46SRobert Mustacchi /* Defined larger than necessary. This struct, being visible, 3580*4d9fdb46SRobert Mustacchi will be difficult to change: binary compatibility. */ 3581*4d9fdb46SRobert Mustacchi #define DW_FISSION_SECT_COUNT 12 3582*4d9fdb46SRobert Mustacchi 3583*4d9fdb46SRobert Mustacchi /* User must allocate this struct, zero it, 3584*4d9fdb46SRobert Mustacchi and pass a pointer to it 3585*4d9fdb46SRobert Mustacchi into dwarf_get_debugfission_for_cu . */ 3586*4d9fdb46SRobert Mustacchi struct Dwarf_Debug_Fission_Per_CU_s { 3587*4d9fdb46SRobert Mustacchi /* Do not free the string. It contains "cu" or "tu". */ 3588*4d9fdb46SRobert Mustacchi /* If this is not set (ie, not a CU/TU in DWP Package File) 3589*4d9fdb46SRobert Mustacchi then pcu_type will be NULL. */ 3590*4d9fdb46SRobert Mustacchi const char * pcu_type; 3591*4d9fdb46SRobert Mustacchi /* pcu_index is the index (range 1 to N ) 3592*4d9fdb46SRobert Mustacchi into the tu/cu table of offsets and the table 3593*4d9fdb46SRobert Mustacchi of sizes. 1 to N as the zero index is reserved 3594*4d9fdb46SRobert Mustacchi for special purposes. Not a value one 3595*4d9fdb46SRobert Mustacchi actually needs. */ 3596*4d9fdb46SRobert Mustacchi Dwarf_Unsigned pcu_index; 3597*4d9fdb46SRobert Mustacchi Dwarf_Sig8 pcu_hash; /* 8 byte */ 3598*4d9fdb46SRobert Mustacchi /* [0] has offset and size 0. 3599*4d9fdb46SRobert Mustacchi [1]-[8] are DW_SECT_* indexes and the 3600*4d9fdb46SRobert Mustacchi values are the offset and size 3601*4d9fdb46SRobert Mustacchi of the respective section contribution 3602*4d9fdb46SRobert Mustacchi of a single .dwo object. When pcu_size[n] is 3603*4d9fdb46SRobert Mustacchi zero the corresponding section is not present. */ 3604*4d9fdb46SRobert Mustacchi Dwarf_Unsigned pcu_offset[DW_FISSION_SECT_COUNT]; 3605*4d9fdb46SRobert Mustacchi Dwarf_Unsigned pcu_size[DW_FISSION_SECT_COUNT]; 3606*4d9fdb46SRobert Mustacchi Dwarf_Unsigned unused1; 3607*4d9fdb46SRobert Mustacchi Dwarf_Unsigned unused2; 3608*4d9fdb46SRobert Mustacchi }; 3609*4d9fdb46SRobert Mustacchi typedef struct Dwarf_Debug_Fission_Per_CU_s Dwarf_Debug_Fission_Per_CU ; 3610*4d9fdb46SRobert Mustacchi /* For any Dwarf_Die in a compilation unit, return 3611*4d9fdb46SRobert Mustacchi the debug fission table data through 3612*4d9fdb46SRobert Mustacchi percu_out. Usually applications 3613*4d9fdb46SRobert Mustacchi will pass in the CU die. 3614*4d9fdb46SRobert Mustacchi Calling code should zero all of the 3615*4d9fdb46SRobert Mustacchi struct Dwarf_Debug_Fission_Per_CU_s before calling this. 3616*4d9fdb46SRobert Mustacchi If there is no debugfission data this returns 3617*4d9fdb46SRobert Mustacchi DW_DLV_NO_ENTRY (only .dwp objects have debugfission data). */ 3618*4d9fdb46SRobert Mustacchi int dwarf_get_debugfission_for_die(Dwarf_Die /* die */, 3619*4d9fdb46SRobert Mustacchi Dwarf_Debug_Fission_Per_CU * /* percu_out */, 3620*4d9fdb46SRobert Mustacchi Dwarf_Error * /* err */); 3621*4d9fdb46SRobert Mustacchi 3622*4d9fdb46SRobert Mustacchi /* Given a key (hash signature) from a .o, find the per-cu information 3623*4d9fdb46SRobert Mustacchi for the CU with that key. */ 3624*4d9fdb46SRobert Mustacchi int dwarf_get_debugfission_for_key(Dwarf_Debug /*dbg*/, 3625*4d9fdb46SRobert Mustacchi Dwarf_Sig8 * /*key, hash signature */, 3626*4d9fdb46SRobert Mustacchi const char * key_type /*"cu" or "tu" */, 3627*4d9fdb46SRobert Mustacchi Dwarf_Debug_Fission_Per_CU * /*percu_out */, 3628*4d9fdb46SRobert Mustacchi Dwarf_Error * /*err */); 3629*4d9fdb46SRobert Mustacchi 3630*4d9fdb46SRobert Mustacchi /* END debugfission dwp .debug_cu_index and .debug_tu_index operations. */ 3631*4d9fdb46SRobert Mustacchi 3632*4d9fdb46SRobert Mustacchi 3633*4d9fdb46SRobert Mustacchi /* Utility operations */ 3634*4d9fdb46SRobert Mustacchi Dwarf_Unsigned dwarf_errno(Dwarf_Error /*error*/); 3635bc1f688bSRobert Mustacchi char* dwarf_errmsg(Dwarf_Error /*error*/); 3636*4d9fdb46SRobert Mustacchi char* dwarf_errmsg_by_number(Dwarf_Unsigned /* errornum */); 3637*4d9fdb46SRobert Mustacchi void dwarf_error_creation(Dwarf_Debug /*dbg*/ , 3638*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/, char * /*errmsg*/); 3639*4d9fdb46SRobert Mustacchi 3640bc1f688bSRobert Mustacchi 3641bc1f688bSRobert Mustacchi /* stringcheck zero is default and means do all 3642*4d9fdb46SRobert Mustacchi string length validity checks. 3643*4d9fdb46SRobert Mustacchi Call with parameter value 1 to turn off many such checks (and 3644*4d9fdb46SRobert Mustacchi increase performance). 3645*4d9fdb46SRobert Mustacchi Call with zero for safest running. 3646*4d9fdb46SRobert Mustacchi Actual value saved and returned is only 8 bits! Upper bits 3647*4d9fdb46SRobert Mustacchi ignored by libdwarf (and zero on return). 3648*4d9fdb46SRobert Mustacchi Returns previous value. */ 3649bc1f688bSRobert Mustacchi int dwarf_set_stringcheck(int /*stringcheck*/); 3650bc1f688bSRobert Mustacchi 3651bc1f688bSRobert Mustacchi /* 'apply' defaults to 1 and means do all 3652*4d9fdb46SRobert Mustacchi 'rela' relocations on reading in a dwarf object section with 3653*4d9fdb46SRobert Mustacchi such relocations. 3654*4d9fdb46SRobert Mustacchi Call with parameter value 0 to turn off application of 3655*4d9fdb46SRobert Mustacchi such relocations. 3656*4d9fdb46SRobert Mustacchi Since the static linker leaves 'bogus' data in object sections 3657*4d9fdb46SRobert Mustacchi with a 'rela' relocation section such data cannot be read 3658*4d9fdb46SRobert Mustacchi sensibly without processing the relocations. Such relocations 3659*4d9fdb46SRobert Mustacchi do not exist in executables and shared objects (.so), the 3660*4d9fdb46SRobert Mustacchi relocations only exist in plain .o relocatable object files. 3661*4d9fdb46SRobert Mustacchi Actual value saved and returned is only 8 bits! Upper bits 3662*4d9fdb46SRobert Mustacchi ignored by libdwarf (and zero on return). 3663*4d9fdb46SRobert Mustacchi Returns previous value. */ 3664bc1f688bSRobert Mustacchi int dwarf_set_reloc_application(int /*apply*/); 3665bc1f688bSRobert Mustacchi 3666*4d9fdb46SRobert Mustacchi /* Never Implemented */ 3667*4d9fdb46SRobert Mustacchi Dwarf_Handler dwarf_seterrhand(Dwarf_Debug /*dbg*/, 3668*4d9fdb46SRobert Mustacchi Dwarf_Handler /*errhand*/); 3669bc1f688bSRobert Mustacchi 3670bc1f688bSRobert Mustacchi /* Unimplemented */ 3671bc1f688bSRobert Mustacchi Dwarf_Ptr dwarf_seterrarg(Dwarf_Debug /*dbg*/, Dwarf_Ptr /*errarg*/); 3672bc1f688bSRobert Mustacchi 3673bc1f688bSRobert Mustacchi void dwarf_dealloc(Dwarf_Debug /*dbg*/, void* /*space*/, 3674bc1f688bSRobert Mustacchi Dwarf_Unsigned /*type*/); 3675*4d9fdb46SRobert Mustacchi /* These convenience functions allow type checking at the call, 3676*4d9fdb46SRobert Mustacchi whereas dwarf_dealloc itself uses void * so ... 3677*4d9fdb46SRobert Mustacchi easy to misuse. */ 3678*4d9fdb46SRobert Mustacchi void dwarf_dealloc_error(Dwarf_Debug /*dbg*/, Dwarf_Error /*err*/); 3679*4d9fdb46SRobert Mustacchi void dwarf_dealloc_die( Dwarf_Die /*die*/); 3680*4d9fdb46SRobert Mustacchi void dwarf_dealloc_attribute(Dwarf_Attribute /*attr*/); 3681*4d9fdb46SRobert Mustacchi 3682bc1f688bSRobert Mustacchi 3683bc1f688bSRobert Mustacchi /* DWARF Producer Interface */ 3684bc1f688bSRobert Mustacchi 3685*4d9fdb46SRobert Mustacchi /* New form June, 2011. Adds user_data argument. */ 3686bc1f688bSRobert Mustacchi typedef int (*Dwarf_Callback_Func)( 3687*4d9fdb46SRobert Mustacchi const char* /*name*/, 3688bc1f688bSRobert Mustacchi int /*size*/, 3689bc1f688bSRobert Mustacchi Dwarf_Unsigned /*type*/, 3690bc1f688bSRobert Mustacchi Dwarf_Unsigned /*flags*/, 3691bc1f688bSRobert Mustacchi Dwarf_Unsigned /*link*/, 3692bc1f688bSRobert Mustacchi Dwarf_Unsigned /*info*/, 3693bc1f688bSRobert Mustacchi Dwarf_Unsigned* /*sect_name_index*/, 3694*4d9fdb46SRobert Mustacchi void * /*user_data*/, 3695bc1f688bSRobert Mustacchi int* /*error*/); 3696bc1f688bSRobert Mustacchi 3697*4d9fdb46SRobert Mustacchi /* Returns DW_DLV_OK or DW_DLV_ERROR and 3698*4d9fdb46SRobert Mustacchi if DW_DLV_OK returns the Dwarf_P_Debug 3699*4d9fdb46SRobert Mustacchi pointer through the dbg_returned argument. */ 3700*4d9fdb46SRobert Mustacchi int dwarf_producer_init( 3701bc1f688bSRobert Mustacchi Dwarf_Unsigned /*flags*/, 3702*4d9fdb46SRobert Mustacchi Dwarf_Callback_Func /*func*/, 3703bc1f688bSRobert Mustacchi Dwarf_Handler /*errhand*/, 3704bc1f688bSRobert Mustacchi Dwarf_Ptr /*errarg*/, 3705*4d9fdb46SRobert Mustacchi void * /*user_data*/, 3706*4d9fdb46SRobert Mustacchi const char *isa_name, /* See isa/abi names in pro_init.c */ 3707*4d9fdb46SRobert Mustacchi const char *dwarf_version, /* V2 V3 V4 or V5. */ 3708*4d9fdb46SRobert Mustacchi const char *extra, /* Extra input strings, comma separated. */ 3709*4d9fdb46SRobert Mustacchi Dwarf_P_Debug *, /* dbg_returned */ 3710bc1f688bSRobert Mustacchi Dwarf_Error * /*error*/); 3711bc1f688bSRobert Mustacchi 3712*4d9fdb46SRobert Mustacchi /* Returns DW_DLV_OK or DW_DLV_ERROR. 3713*4d9fdb46SRobert Mustacchi The desired form must be DW_FORM_string (the default) 3714*4d9fdb46SRobert Mustacchi or DW_FORM_strp. */ 3715*4d9fdb46SRobert Mustacchi int dwarf_pro_set_default_string_form(Dwarf_P_Debug /*dbg*/, 3716*4d9fdb46SRobert Mustacchi int /*desired_form*/, 3717*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 3718bc1f688bSRobert Mustacchi 3719*4d9fdb46SRobert Mustacchi /* the old interface. Still supported. */ 3720bc1f688bSRobert Mustacchi Dwarf_Signed dwarf_transform_to_disk_form(Dwarf_P_Debug /*dbg*/, 3721bc1f688bSRobert Mustacchi Dwarf_Error* /*error*/); 3722*4d9fdb46SRobert Mustacchi /* New September 2016. The preferred interface. */ 3723*4d9fdb46SRobert Mustacchi int dwarf_transform_to_disk_form_a(Dwarf_P_Debug /*dbg*/, 3724*4d9fdb46SRobert Mustacchi Dwarf_Signed * /*nbufs_out*/, 3725*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 3726bc1f688bSRobert Mustacchi 3727*4d9fdb46SRobert Mustacchi /* New September 2016. Preferred. */ 3728*4d9fdb46SRobert Mustacchi int dwarf_get_section_bytes_a(Dwarf_P_Debug /*dbg*/, 3729*4d9fdb46SRobert Mustacchi Dwarf_Signed /*dwarf_section*/, 3730*4d9fdb46SRobert Mustacchi Dwarf_Signed* /*elf_section_index*/, 3731*4d9fdb46SRobert Mustacchi Dwarf_Unsigned* /*length*/, 3732*4d9fdb46SRobert Mustacchi Dwarf_Ptr * /*section_bytes*/, 3733*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 3734*4d9fdb46SRobert Mustacchi 3735*4d9fdb46SRobert Mustacchi /* Original function. Checking for error is difficult. */ 3736bc1f688bSRobert Mustacchi Dwarf_Ptr dwarf_get_section_bytes(Dwarf_P_Debug /*dbg*/, 3737bc1f688bSRobert Mustacchi Dwarf_Signed /*dwarf_section*/, 3738bc1f688bSRobert Mustacchi Dwarf_Signed* /*elf_section_index*/, 3739bc1f688bSRobert Mustacchi Dwarf_Unsigned* /*length*/, 3740bc1f688bSRobert Mustacchi Dwarf_Error* /*error*/); 3741bc1f688bSRobert Mustacchi 3742bc1f688bSRobert Mustacchi int dwarf_get_relocation_info_count( 3743bc1f688bSRobert Mustacchi Dwarf_P_Debug /*dbg*/, 3744bc1f688bSRobert Mustacchi Dwarf_Unsigned * /*count_of_relocation_sections*/, 3745bc1f688bSRobert Mustacchi int * /*drd_buffer_version*/, 3746bc1f688bSRobert Mustacchi Dwarf_Error* /*error*/); 3747bc1f688bSRobert Mustacchi 3748bc1f688bSRobert Mustacchi int dwarf_get_relocation_info( 3749bc1f688bSRobert Mustacchi Dwarf_P_Debug /*dbg*/, 3750bc1f688bSRobert Mustacchi Dwarf_Signed * /*elf_section_index*/, 3751bc1f688bSRobert Mustacchi Dwarf_Signed * /*elf_section_index_link*/, 3752bc1f688bSRobert Mustacchi Dwarf_Unsigned * /*relocation_buffer_count*/, 3753bc1f688bSRobert Mustacchi Dwarf_Relocation_Data * /*reldata_buffer*/, 3754bc1f688bSRobert Mustacchi Dwarf_Error* /*error*/); 3755bc1f688bSRobert Mustacchi 3756bc1f688bSRobert Mustacchi /* v1: no drd_length field, enum explicit */ 3757bc1f688bSRobert Mustacchi /* v2: has the drd_length field, enum value in uchar member */ 3758bc1f688bSRobert Mustacchi #define DWARF_DRD_BUFFER_VERSION 2 3759bc1f688bSRobert Mustacchi 3760bc1f688bSRobert Mustacchi /* Markers are not written to DWARF2/3/4, they are user 3761bc1f688bSRobert Mustacchi defined and may be used for any purpose. 3762bc1f688bSRobert Mustacchi */ 3763bc1f688bSRobert Mustacchi Dwarf_Signed dwarf_get_die_markers( 3764bc1f688bSRobert Mustacchi Dwarf_P_Debug /*dbg*/, 3765bc1f688bSRobert Mustacchi Dwarf_P_Marker * /*marker_list*/, 3766bc1f688bSRobert Mustacchi Dwarf_Unsigned * /*marker_count*/, 3767bc1f688bSRobert Mustacchi Dwarf_Error * /*error*/); 3768bc1f688bSRobert Mustacchi 3769*4d9fdb46SRobert Mustacchi /* Preferred version December 2018. */ 3770*4d9fdb46SRobert Mustacchi int dwarf_get_die_markers_a( 3771*4d9fdb46SRobert Mustacchi Dwarf_P_Debug /*dbg*/, 3772*4d9fdb46SRobert Mustacchi Dwarf_P_Marker * /*marker_list*/, 3773*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*marker_count*/, 3774*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 3775*4d9fdb46SRobert Mustacchi 3776bc1f688bSRobert Mustacchi int dwarf_get_string_attributes_count(Dwarf_P_Debug, 3777bc1f688bSRobert Mustacchi Dwarf_Unsigned *, 3778bc1f688bSRobert Mustacchi int *, 3779bc1f688bSRobert Mustacchi Dwarf_Error *); 3780bc1f688bSRobert Mustacchi 3781bc1f688bSRobert Mustacchi int dwarf_get_string_attributes_info(Dwarf_P_Debug, 3782bc1f688bSRobert Mustacchi Dwarf_Signed *, 3783bc1f688bSRobert Mustacchi Dwarf_Unsigned *, 3784bc1f688bSRobert Mustacchi Dwarf_P_String_Attr *, 3785bc1f688bSRobert Mustacchi Dwarf_Error *); 3786bc1f688bSRobert Mustacchi 3787bc1f688bSRobert Mustacchi void dwarf_reset_section_bytes(Dwarf_P_Debug /*dbg*/); 3788bc1f688bSRobert Mustacchi 3789bc1f688bSRobert Mustacchi Dwarf_Unsigned dwarf_producer_finish(Dwarf_P_Debug /*dbg*/, 3790bc1f688bSRobert Mustacchi Dwarf_Error* /*error*/); 3791bc1f688bSRobert Mustacchi 3792*4d9fdb46SRobert Mustacchi /* Returns DW_DLV_OK or DW_DLV_ERROR */ 3793*4d9fdb46SRobert Mustacchi int dwarf_producer_finish_a(Dwarf_P_Debug /*dbg*/, 3794*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 3795*4d9fdb46SRobert Mustacchi 3796bc1f688bSRobert Mustacchi /* Producer attribute addition functions. */ 3797bc1f688bSRobert Mustacchi Dwarf_P_Attribute dwarf_add_AT_targ_address(Dwarf_P_Debug /*dbg*/, 3798bc1f688bSRobert Mustacchi Dwarf_P_Die /*ownerdie*/, 3799bc1f688bSRobert Mustacchi Dwarf_Half /*attr*/, 3800bc1f688bSRobert Mustacchi Dwarf_Unsigned /*pc_value*/, 3801bc1f688bSRobert Mustacchi Dwarf_Signed /*sym_index*/, 3802bc1f688bSRobert Mustacchi Dwarf_Error* /*error*/); 3803*4d9fdb46SRobert Mustacchi Dwarf_P_Attribute dwarf_add_AT_targ_address_b(Dwarf_P_Debug /*dbg*/, 3804*4d9fdb46SRobert Mustacchi Dwarf_P_Die /*ownerdie*/, 3805*4d9fdb46SRobert Mustacchi Dwarf_Half /*attr*/, 3806*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*pc_value*/, 3807*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*sym_index*/, 3808*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 3809*4d9fdb46SRobert Mustacchi 3810*4d9fdb46SRobert Mustacchi /* New December 2018. Preferred version. */ 3811*4d9fdb46SRobert Mustacchi int dwarf_add_AT_targ_address_c(Dwarf_P_Debug /*dbg*/, 3812*4d9fdb46SRobert Mustacchi Dwarf_P_Die /*ownerdie*/, 3813*4d9fdb46SRobert Mustacchi Dwarf_Half /*attr*/, 3814*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*pc_value*/, 3815*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*sym_index*/, 3816*4d9fdb46SRobert Mustacchi Dwarf_P_Attribute * /*attr_out*/, 3817*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 3818*4d9fdb46SRobert Mustacchi 3819*4d9fdb46SRobert Mustacchi /* New December 2018. Preferred version. */ 3820*4d9fdb46SRobert Mustacchi int dwarf_add_AT_block_a(Dwarf_P_Debug /*dbg*/, 3821*4d9fdb46SRobert Mustacchi Dwarf_P_Die /*ownerdie*/, 3822*4d9fdb46SRobert Mustacchi Dwarf_Half /*attr*/, 3823*4d9fdb46SRobert Mustacchi Dwarf_Small* /*block_data*/, 3824*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*block_len*/, 3825*4d9fdb46SRobert Mustacchi Dwarf_P_Attribute * /*attr_out*/, 3826*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 3827bc1f688bSRobert Mustacchi 3828bc1f688bSRobert Mustacchi Dwarf_P_Attribute dwarf_add_AT_block(Dwarf_P_Debug /*dbg*/, 3829bc1f688bSRobert Mustacchi Dwarf_P_Die /*ownerdie*/, 3830bc1f688bSRobert Mustacchi Dwarf_Half /*attr*/, 3831bc1f688bSRobert Mustacchi Dwarf_Small* /*block_data*/, 3832bc1f688bSRobert Mustacchi Dwarf_Unsigned /*block_len*/, 3833bc1f688bSRobert Mustacchi Dwarf_Error* /*error*/); 3834bc1f688bSRobert Mustacchi 3835*4d9fdb46SRobert Mustacchi Dwarf_P_Attribute dwarf_add_AT_ref_address(Dwarf_P_Debug /*dbg*/, 3836bc1f688bSRobert Mustacchi Dwarf_P_Die /*ownerdie*/, 3837bc1f688bSRobert Mustacchi Dwarf_Half /*attr*/, 3838bc1f688bSRobert Mustacchi Dwarf_Unsigned /*pc_value*/, 3839bc1f688bSRobert Mustacchi Dwarf_Unsigned /*sym_index*/, 3840bc1f688bSRobert Mustacchi Dwarf_Error* /*error*/); 3841bc1f688bSRobert Mustacchi 3842*4d9fdb46SRobert Mustacchi /* New December 2018. Preferred version. */ 3843*4d9fdb46SRobert Mustacchi int dwarf_add_AT_ref_address_a(Dwarf_P_Debug /*dbg*/, 3844bc1f688bSRobert Mustacchi Dwarf_P_Die /*ownerdie*/, 3845bc1f688bSRobert Mustacchi Dwarf_Half /*attr*/, 3846bc1f688bSRobert Mustacchi Dwarf_Unsigned /*pc_value*/, 3847bc1f688bSRobert Mustacchi Dwarf_Unsigned /*sym_index*/, 3848*4d9fdb46SRobert Mustacchi Dwarf_P_Attribute * /*attr_out*/, 3849bc1f688bSRobert Mustacchi Dwarf_Error* /*error*/); 3850bc1f688bSRobert Mustacchi 3851bc1f688bSRobert Mustacchi Dwarf_P_Attribute dwarf_add_AT_unsigned_const(Dwarf_P_Debug /*dbg*/, 3852bc1f688bSRobert Mustacchi Dwarf_P_Die /*ownerdie*/, 3853bc1f688bSRobert Mustacchi Dwarf_Half /*attr*/, 3854bc1f688bSRobert Mustacchi Dwarf_Unsigned /*value*/, 3855bc1f688bSRobert Mustacchi Dwarf_Error* /*error*/); 3856bc1f688bSRobert Mustacchi 3857*4d9fdb46SRobert Mustacchi /* New December 2018. Preferred version. */ 3858*4d9fdb46SRobert Mustacchi int dwarf_add_AT_unsigned_const_a(Dwarf_P_Debug /*dbg*/, 3859*4d9fdb46SRobert Mustacchi Dwarf_P_Die /*ownerdie*/, 3860*4d9fdb46SRobert Mustacchi Dwarf_Half /*attr*/, 3861*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*value*/, 3862*4d9fdb46SRobert Mustacchi Dwarf_P_Attribute * /*attr_out*/, 3863*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 3864*4d9fdb46SRobert Mustacchi 3865bc1f688bSRobert Mustacchi Dwarf_P_Attribute dwarf_add_AT_signed_const(Dwarf_P_Debug /*dbg*/, 3866bc1f688bSRobert Mustacchi Dwarf_P_Die /*ownerdie*/, 3867bc1f688bSRobert Mustacchi Dwarf_Half /*attr*/, 3868bc1f688bSRobert Mustacchi Dwarf_Signed /*value*/, 3869bc1f688bSRobert Mustacchi Dwarf_Error* /*error*/); 3870bc1f688bSRobert Mustacchi 3871*4d9fdb46SRobert Mustacchi /* New December 2018. Preferred version. */ 3872*4d9fdb46SRobert Mustacchi int dwarf_add_AT_signed_const_a(Dwarf_P_Debug /*dbg*/, 3873*4d9fdb46SRobert Mustacchi Dwarf_P_Die /*ownerdie*/, 3874*4d9fdb46SRobert Mustacchi Dwarf_Half /*attr*/, 3875*4d9fdb46SRobert Mustacchi Dwarf_Signed /*value*/, 3876*4d9fdb46SRobert Mustacchi Dwarf_P_Attribute * /*attr_out*/, 3877*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 3878*4d9fdb46SRobert Mustacchi 3879bc1f688bSRobert Mustacchi Dwarf_P_Attribute dwarf_add_AT_reference(Dwarf_P_Debug /*dbg*/, 3880bc1f688bSRobert Mustacchi Dwarf_P_Die /*ownerdie*/, 3881bc1f688bSRobert Mustacchi Dwarf_Half /*attr*/, 3882bc1f688bSRobert Mustacchi Dwarf_P_Die /*otherdie*/, 3883bc1f688bSRobert Mustacchi Dwarf_Error* /*error*/); 3884bc1f688bSRobert Mustacchi 3885*4d9fdb46SRobert Mustacchi /* dwarf_add_AT_reference_b allows otherdie to be NULL with 3886*4d9fdb46SRobert Mustacchi the assumption the caller will then later call 3887*4d9fdb46SRobert Mustacchi dwarf_fixup_AT_reference_die() with a non-null target die. 3888*4d9fdb46SRobert Mustacchi New 22 October, 2013 3889*4d9fdb46SRobert Mustacchi */ 3890*4d9fdb46SRobert Mustacchi Dwarf_P_Attribute dwarf_add_AT_reference_b(Dwarf_P_Debug /*dbg*/, 3891*4d9fdb46SRobert Mustacchi Dwarf_P_Die /*ownerdie*/, 3892*4d9fdb46SRobert Mustacchi Dwarf_Half /*attr*/, 3893*4d9fdb46SRobert Mustacchi Dwarf_P_Die /*otherdie*/, 3894*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 3895*4d9fdb46SRobert Mustacchi 3896*4d9fdb46SRobert Mustacchi /* New December 2018. Preferred version. */ 3897*4d9fdb46SRobert Mustacchi int dwarf_add_AT_reference_c(Dwarf_P_Debug /*dbg*/, 3898*4d9fdb46SRobert Mustacchi Dwarf_P_Die /*ownerdie*/, 3899*4d9fdb46SRobert Mustacchi Dwarf_Half /*attr*/, 3900*4d9fdb46SRobert Mustacchi Dwarf_P_Die /*otherdie*/, 3901*4d9fdb46SRobert Mustacchi Dwarf_P_Attribute * /*attr_out*/, 3902*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 3903*4d9fdb46SRobert Mustacchi 3904*4d9fdb46SRobert Mustacchi /* The following is for out-of-order cu-local 3905*4d9fdb46SRobert Mustacchi references. Allowing nominating the target Dwarf_P_Die 3906*4d9fdb46SRobert Mustacchi after calling dwarf_add_AT_reference with a NULL otherdie 3907*4d9fdb46SRobert Mustacchi after a single pass thru the DIE generation. Needed 3908*4d9fdb46SRobert Mustacchi for forward-references. 3909*4d9fdb46SRobert Mustacchi New 22 October, 2013. 3910*4d9fdb46SRobert Mustacchi */ 3911*4d9fdb46SRobert Mustacchi int dwarf_fixup_AT_reference_die(Dwarf_P_Debug /*dbg*/, 3912*4d9fdb46SRobert Mustacchi Dwarf_Half /* attrnum */, 3913*4d9fdb46SRobert Mustacchi Dwarf_P_Die /* sourcedie*/, 3914*4d9fdb46SRobert Mustacchi Dwarf_P_Die /* targetdie*/, 3915*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 3916*4d9fdb46SRobert Mustacchi 3917bc1f688bSRobert Mustacchi Dwarf_P_Attribute dwarf_add_AT_dataref( 3918bc1f688bSRobert Mustacchi Dwarf_P_Debug /*dbg*/, 3919bc1f688bSRobert Mustacchi Dwarf_P_Die /*ownerdie*/, 3920bc1f688bSRobert Mustacchi Dwarf_Half /*attr*/, 3921bc1f688bSRobert Mustacchi Dwarf_Unsigned /*pcvalue*/, 3922bc1f688bSRobert Mustacchi Dwarf_Unsigned /*sym_index*/, 3923bc1f688bSRobert Mustacchi Dwarf_Error* /*error*/); 3924bc1f688bSRobert Mustacchi 3925*4d9fdb46SRobert Mustacchi /* New December 2018. Preferred version. */ 3926*4d9fdb46SRobert Mustacchi int dwarf_add_AT_dataref_a( 3927*4d9fdb46SRobert Mustacchi Dwarf_P_Debug /*dbg*/, 3928*4d9fdb46SRobert Mustacchi Dwarf_P_Die /*ownerdie*/, 3929*4d9fdb46SRobert Mustacchi Dwarf_Half /*attr*/, 3930*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*pcvalue*/, 3931*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*sym_index*/, 3932*4d9fdb46SRobert Mustacchi Dwarf_P_Attribute * /*attr_out*/, 3933*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 3934*4d9fdb46SRobert Mustacchi 3935*4d9fdb46SRobert Mustacchi Dwarf_P_Attribute dwarf_add_AT_const_value_string( 3936*4d9fdb46SRobert Mustacchi Dwarf_P_Die /*ownerdie*/, 3937bc1f688bSRobert Mustacchi char* /*string_value*/, 3938bc1f688bSRobert Mustacchi Dwarf_Error* /*error*/); 3939bc1f688bSRobert Mustacchi 3940*4d9fdb46SRobert Mustacchi /* New December 2018. Preferred version. */ 3941*4d9fdb46SRobert Mustacchi int dwarf_add_AT_const_value_string_a( 3942*4d9fdb46SRobert Mustacchi Dwarf_P_Die /*ownerdie*/, 3943*4d9fdb46SRobert Mustacchi char* /*string_value*/, 3944*4d9fdb46SRobert Mustacchi Dwarf_P_Attribute * /*attr_out*/, 3945*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 3946*4d9fdb46SRobert Mustacchi 3947bc1f688bSRobert Mustacchi Dwarf_P_Attribute dwarf_add_AT_location_expr(Dwarf_P_Debug /*dbg*/, 3948bc1f688bSRobert Mustacchi Dwarf_P_Die /*ownerdie*/, 3949bc1f688bSRobert Mustacchi Dwarf_Half /*attr*/, 3950bc1f688bSRobert Mustacchi Dwarf_P_Expr /*loc_expr*/, 3951bc1f688bSRobert Mustacchi Dwarf_Error* /*error*/); 3952bc1f688bSRobert Mustacchi 3953*4d9fdb46SRobert Mustacchi /* New December 2018. Preferred version. */ 3954*4d9fdb46SRobert Mustacchi int dwarf_add_AT_location_expr_a(Dwarf_P_Debug /*dbg*/, 3955*4d9fdb46SRobert Mustacchi Dwarf_P_Die /*ownerdie*/, 3956*4d9fdb46SRobert Mustacchi Dwarf_Half /*attr*/, 3957*4d9fdb46SRobert Mustacchi Dwarf_P_Expr /*loc_expr*/, 3958*4d9fdb46SRobert Mustacchi Dwarf_P_Attribute * /*attr_out*/, 3959*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 3960*4d9fdb46SRobert Mustacchi 3961bc1f688bSRobert Mustacchi Dwarf_P_Attribute dwarf_add_AT_string(Dwarf_P_Debug /*dbg*/, 3962bc1f688bSRobert Mustacchi Dwarf_P_Die /*ownerdie*/, 3963bc1f688bSRobert Mustacchi Dwarf_Half /*attr*/, 3964bc1f688bSRobert Mustacchi char* /*string*/, 3965bc1f688bSRobert Mustacchi Dwarf_Error* /*error*/); 3966bc1f688bSRobert Mustacchi 3967*4d9fdb46SRobert Mustacchi /* Preferred as of December 2018. */ 3968*4d9fdb46SRobert Mustacchi int dwarf_add_AT_string_a(Dwarf_P_Debug /*dbg*/, 3969*4d9fdb46SRobert Mustacchi Dwarf_P_Die /*ownerdie*/, 3970*4d9fdb46SRobert Mustacchi Dwarf_Half /*attr*/, 3971*4d9fdb46SRobert Mustacchi char* /*string*/, 3972*4d9fdb46SRobert Mustacchi Dwarf_P_Attribute * /*attr_out*/, 3973*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 3974*4d9fdb46SRobert Mustacchi 3975bc1f688bSRobert Mustacchi Dwarf_P_Attribute dwarf_add_AT_flag(Dwarf_P_Debug /*dbg*/, 3976bc1f688bSRobert Mustacchi Dwarf_P_Die /*ownerdie*/, 3977bc1f688bSRobert Mustacchi Dwarf_Half /*attr*/, 3978bc1f688bSRobert Mustacchi Dwarf_Small /*flag*/, 3979bc1f688bSRobert Mustacchi Dwarf_Error* /*error*/); 3980bc1f688bSRobert Mustacchi 3981*4d9fdb46SRobert Mustacchi /* New December 2018. Preferred version. */ 3982*4d9fdb46SRobert Mustacchi int dwarf_add_AT_flag_a(Dwarf_P_Debug /*dbg*/, 3983*4d9fdb46SRobert Mustacchi Dwarf_P_Die /*ownerdie*/, 3984*4d9fdb46SRobert Mustacchi Dwarf_Half /*attr*/, 3985*4d9fdb46SRobert Mustacchi Dwarf_Small /*flag*/, 3986*4d9fdb46SRobert Mustacchi Dwarf_P_Attribute * /*attr_out*/, 3987*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 3988*4d9fdb46SRobert Mustacchi 3989bc1f688bSRobert Mustacchi Dwarf_P_Attribute dwarf_add_AT_producer(Dwarf_P_Die /*ownerdie*/, 3990bc1f688bSRobert Mustacchi char* /*producer_string*/, 3991bc1f688bSRobert Mustacchi Dwarf_Error* /*error*/); 3992bc1f688bSRobert Mustacchi 3993*4d9fdb46SRobert Mustacchi /* New December 2018. Preferred version. */ 3994*4d9fdb46SRobert Mustacchi int dwarf_add_AT_producer_a(Dwarf_P_Die /*ownerdie*/, 3995*4d9fdb46SRobert Mustacchi char* /*producer_string*/, 3996*4d9fdb46SRobert Mustacchi Dwarf_P_Attribute * /*attr_out*/, 3997*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 3998*4d9fdb46SRobert Mustacchi 3999*4d9fdb46SRobert Mustacchi /* October 2017 for DW_FORM_data16. Usable with any attribute, 4000*4d9fdb46SRobert Mustacchi though it should only be in limited use. DWARF5 only. 4001*4d9fdb46SRobert Mustacchi Returns DW_DLV_OK on success, DW_DLV_ERROR on failure. 4002*4d9fdb46SRobert Mustacchi Returns the new attribute pointer through *return_attr. */ 4003*4d9fdb46SRobert Mustacchi int dwarf_add_AT_data16(Dwarf_P_Die /*ownerdie*/, 4004*4d9fdb46SRobert Mustacchi Dwarf_Half /*attrnum*/, 4005*4d9fdb46SRobert Mustacchi Dwarf_Form_Data16 * /* pointstovalue */, 4006*4d9fdb46SRobert Mustacchi Dwarf_P_Attribute * /* return_attr */, 4007*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 4008*4d9fdb46SRobert Mustacchi 4009*4d9fdb46SRobert Mustacchi /* November 2018. DW_AT_implicit const generation. */ 4010*4d9fdb46SRobert Mustacchi int dwarf_add_AT_implicit_const(Dwarf_P_Die /*ownerdie*/, 4011*4d9fdb46SRobert Mustacchi Dwarf_Half /*attrnum*/, 4012*4d9fdb46SRobert Mustacchi Dwarf_Signed /*signed_value*/, 4013*4d9fdb46SRobert Mustacchi Dwarf_P_Attribute * /*outattr*/, 4014*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 4015*4d9fdb46SRobert Mustacchi 4016*4d9fdb46SRobert Mustacchi /* August 2013 sleb creator. For any attribute. */ 4017*4d9fdb46SRobert Mustacchi Dwarf_P_Attribute dwarf_add_AT_any_value_sleb(Dwarf_P_Die /*ownerdie*/, 4018*4d9fdb46SRobert Mustacchi Dwarf_Half /*attrnum*/, 4019*4d9fdb46SRobert Mustacchi Dwarf_Signed /*signed_value*/, 4020*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 4021*4d9fdb46SRobert Mustacchi 4022*4d9fdb46SRobert Mustacchi /* New December 2018. Preferred version. */ 4023*4d9fdb46SRobert Mustacchi int dwarf_add_AT_any_value_sleb_a(Dwarf_P_Die /*ownerdie*/, 4024*4d9fdb46SRobert Mustacchi Dwarf_Half /*attrnum*/, 4025*4d9fdb46SRobert Mustacchi Dwarf_Signed /*signed_value*/, 4026*4d9fdb46SRobert Mustacchi Dwarf_P_Attribute * /*outattr*/, 4027*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 4028*4d9fdb46SRobert Mustacchi 4029*4d9fdb46SRobert Mustacchi /* Original sleb creator. Only for DW_AT_const_value. */ 4030bc1f688bSRobert Mustacchi Dwarf_P_Attribute dwarf_add_AT_const_value_signedint(Dwarf_P_Die /*ownerdie*/, 4031bc1f688bSRobert Mustacchi Dwarf_Signed /*signed_value*/, 4032bc1f688bSRobert Mustacchi Dwarf_Error* /*error*/); 4033bc1f688bSRobert Mustacchi 4034*4d9fdb46SRobert Mustacchi /* Preferred as of December 2018. */ 4035*4d9fdb46SRobert Mustacchi int dwarf_add_AT_const_value_signedint_a(Dwarf_P_Die /*ownerdie*/, 4036*4d9fdb46SRobert Mustacchi Dwarf_Signed /*signed_value*/, 4037*4d9fdb46SRobert Mustacchi Dwarf_P_Attribute * /*outattr*/, 4038*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 4039*4d9fdb46SRobert Mustacchi 4040*4d9fdb46SRobert Mustacchi /* August 2013 uleb creator. For any attribute. */ 4041*4d9fdb46SRobert Mustacchi Dwarf_P_Attribute dwarf_add_AT_any_value_uleb(Dwarf_P_Die /*ownerdie*/, 4042*4d9fdb46SRobert Mustacchi Dwarf_Half /*attrnum*/, 4043*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*signed_value*/, 4044*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 4045*4d9fdb46SRobert Mustacchi 4046*4d9fdb46SRobert Mustacchi /* New December 2018. Preferred version. */ 4047*4d9fdb46SRobert Mustacchi int dwarf_add_AT_any_value_uleb_a(Dwarf_P_Die /*ownerdie*/, 4048*4d9fdb46SRobert Mustacchi Dwarf_Half /*attrnum*/, 4049*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*signed_value*/, 4050*4d9fdb46SRobert Mustacchi Dwarf_P_Attribute * /*outattr*/, 4051*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 4052*4d9fdb46SRobert Mustacchi 4053*4d9fdb46SRobert Mustacchi /* Original uleb creator. Only for DW_AT_const_value. */ 4054bc1f688bSRobert Mustacchi Dwarf_P_Attribute dwarf_add_AT_const_value_unsignedint( 4055bc1f688bSRobert Mustacchi Dwarf_P_Die /*ownerdie*/, 4056bc1f688bSRobert Mustacchi Dwarf_Unsigned /*unsigned_value*/, 4057bc1f688bSRobert Mustacchi Dwarf_Error* /*error*/); 4058bc1f688bSRobert Mustacchi 4059*4d9fdb46SRobert Mustacchi /* New December 2018. Preferred version. */ 4060*4d9fdb46SRobert Mustacchi int dwarf_add_AT_const_value_unsignedint_a( 4061*4d9fdb46SRobert Mustacchi Dwarf_P_Die /*ownerdie*/, 4062*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*unsigned_value*/, 4063*4d9fdb46SRobert Mustacchi Dwarf_P_Attribute * /*outattr*/, 4064*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 4065*4d9fdb46SRobert Mustacchi 4066bc1f688bSRobert Mustacchi Dwarf_P_Attribute dwarf_add_AT_comp_dir(Dwarf_P_Die /*ownerdie*/, 4067bc1f688bSRobert Mustacchi char* /*current_working_directory*/, 4068bc1f688bSRobert Mustacchi Dwarf_Error* /*error*/); 4069bc1f688bSRobert Mustacchi 4070*4d9fdb46SRobert Mustacchi /* New December 2018. Preferred version. */ 4071*4d9fdb46SRobert Mustacchi int dwarf_add_AT_comp_dir_a(Dwarf_P_Die /*ownerdie*/, 4072*4d9fdb46SRobert Mustacchi char* /*current_working_directory*/, 4073*4d9fdb46SRobert Mustacchi Dwarf_P_Attribute * /*outattr*/, 4074*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 4075*4d9fdb46SRobert Mustacchi 4076bc1f688bSRobert Mustacchi Dwarf_P_Attribute dwarf_add_AT_name(Dwarf_P_Die /*die*/, 4077bc1f688bSRobert Mustacchi char* /*name*/, 4078bc1f688bSRobert Mustacchi Dwarf_Error* /*error*/); 4079bc1f688bSRobert Mustacchi 4080*4d9fdb46SRobert Mustacchi /* New December 2018. Preferred version. */ 4081*4d9fdb46SRobert Mustacchi int dwarf_add_AT_name_a(Dwarf_P_Die /*die*/, 4082*4d9fdb46SRobert Mustacchi char* /*name*/, 4083*4d9fdb46SRobert Mustacchi Dwarf_P_Attribute * /*outattr*/, 4084*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 4085*4d9fdb46SRobert Mustacchi 4086*4d9fdb46SRobert Mustacchi Dwarf_P_Attribute dwarf_add_AT_with_ref_sig8( 4087*4d9fdb46SRobert Mustacchi Dwarf_P_Die /*ownerdie */, 4088*4d9fdb46SRobert Mustacchi Dwarf_Half /*attrnum */, 4089*4d9fdb46SRobert Mustacchi const Dwarf_Sig8 * /*sig8_in*/, 4090*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 4091*4d9fdb46SRobert Mustacchi 4092*4d9fdb46SRobert Mustacchi /* New December 2018. Preferred version. */ 4093*4d9fdb46SRobert Mustacchi int dwarf_add_AT_with_ref_sig8_a( 4094*4d9fdb46SRobert Mustacchi Dwarf_P_Die /*ownerdie */, 4095*4d9fdb46SRobert Mustacchi Dwarf_Half /*attrnum */, 4096*4d9fdb46SRobert Mustacchi const Dwarf_Sig8 * /*sig8_in*/, 4097*4d9fdb46SRobert Mustacchi Dwarf_P_Attribute * /*outattr*/, 4098*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 4099*4d9fdb46SRobert Mustacchi 4100*4d9fdb46SRobert Mustacchi 4101bc1f688bSRobert Mustacchi /* Producer line creation functions (.debug_line) */ 4102bc1f688bSRobert Mustacchi Dwarf_Unsigned dwarf_add_directory_decl(Dwarf_P_Debug /*dbg*/, 4103bc1f688bSRobert Mustacchi char* /*name*/, 4104bc1f688bSRobert Mustacchi Dwarf_Error* /*error*/); 4105bc1f688bSRobert Mustacchi 4106*4d9fdb46SRobert Mustacchi /* New December 2018. Preferred version. */ 4107*4d9fdb46SRobert Mustacchi int dwarf_add_directory_decl_a(Dwarf_P_Debug /*dbg*/, 4108*4d9fdb46SRobert Mustacchi char* /*name*/, 4109*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*index_in_directories*/, 4110*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 4111*4d9fdb46SRobert Mustacchi 4112bc1f688bSRobert Mustacchi Dwarf_Unsigned dwarf_add_file_decl(Dwarf_P_Debug /*dbg*/, 4113bc1f688bSRobert Mustacchi char* /*name*/, 4114bc1f688bSRobert Mustacchi Dwarf_Unsigned /*dir_index*/, 4115bc1f688bSRobert Mustacchi Dwarf_Unsigned /*time_last_modified*/, 4116bc1f688bSRobert Mustacchi Dwarf_Unsigned /*length*/, 4117bc1f688bSRobert Mustacchi Dwarf_Error* /*error*/); 4118bc1f688bSRobert Mustacchi 4119*4d9fdb46SRobert Mustacchi /* New December 2018. Preferred version. */ 4120*4d9fdb46SRobert Mustacchi int dwarf_add_file_decl_a(Dwarf_P_Debug /*dbg*/, 4121*4d9fdb46SRobert Mustacchi char* /*name*/, 4122*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*dir_index*/, 4123*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*time_last_modified*/, 4124*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*length*/, 4125*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*file_entry_count_out*/, 4126*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 4127*4d9fdb46SRobert Mustacchi 4128*4d9fdb46SRobert Mustacchi /* New December 2018. Preferred version. */ 4129*4d9fdb46SRobert Mustacchi int dwarf_add_line_entry_c(Dwarf_P_Debug /*dbg*/, 4130*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*file_index*/, 4131*4d9fdb46SRobert Mustacchi Dwarf_Addr /*code_address*/, 4132*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*lineno*/, 4133*4d9fdb46SRobert Mustacchi Dwarf_Signed /*column_number*/, 4134*4d9fdb46SRobert Mustacchi Dwarf_Bool /*is_source_stmt_begin*/, 4135*4d9fdb46SRobert Mustacchi Dwarf_Bool /*is_basic_block_begin*/, 4136*4d9fdb46SRobert Mustacchi Dwarf_Bool /*is_epilogue_begin*/, 4137*4d9fdb46SRobert Mustacchi Dwarf_Bool /*is_prologue_end*/, 4138*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*isa*/, 4139*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*discriminator*/, 4140*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 4141*4d9fdb46SRobert Mustacchi 4142*4d9fdb46SRobert Mustacchi Dwarf_Unsigned dwarf_add_line_entry_b(Dwarf_P_Debug /*dbg*/, 4143*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*file_index*/, 4144*4d9fdb46SRobert Mustacchi Dwarf_Addr /*code_address*/, 4145*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*lineno*/, 4146*4d9fdb46SRobert Mustacchi Dwarf_Signed /*column_number*/, 4147*4d9fdb46SRobert Mustacchi Dwarf_Bool /*is_source_stmt_begin*/, 4148*4d9fdb46SRobert Mustacchi Dwarf_Bool /*is_basic_block_begin*/, 4149*4d9fdb46SRobert Mustacchi Dwarf_Bool /*is_epilogue_begin*/, 4150*4d9fdb46SRobert Mustacchi Dwarf_Bool /*is_prologue_end*/, 4151*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*isa*/, 4152*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*discriminator*/, 4153*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 4154*4d9fdb46SRobert Mustacchi 4155bc1f688bSRobert Mustacchi Dwarf_Unsigned dwarf_add_line_entry(Dwarf_P_Debug /*dbg*/, 4156bc1f688bSRobert Mustacchi Dwarf_Unsigned /*file_index*/, 4157bc1f688bSRobert Mustacchi Dwarf_Addr /*code_address*/, 4158bc1f688bSRobert Mustacchi Dwarf_Unsigned /*lineno*/, 4159bc1f688bSRobert Mustacchi Dwarf_Signed /*column_number*/, 4160bc1f688bSRobert Mustacchi Dwarf_Bool /*is_source_stmt_begin*/, 4161bc1f688bSRobert Mustacchi Dwarf_Bool /*is_basic_block_begin*/, 4162bc1f688bSRobert Mustacchi Dwarf_Error* /*error*/); 4163bc1f688bSRobert Mustacchi 4164bc1f688bSRobert Mustacchi Dwarf_Unsigned dwarf_lne_set_address(Dwarf_P_Debug /*dbg*/, 4165bc1f688bSRobert Mustacchi Dwarf_Unsigned /*offset*/, 4166bc1f688bSRobert Mustacchi Dwarf_Unsigned /*symbol_index*/, 4167bc1f688bSRobert Mustacchi Dwarf_Error* /*error*/); 4168bc1f688bSRobert Mustacchi 4169*4d9fdb46SRobert Mustacchi /* New December 2018. Preferred version. */ 4170*4d9fdb46SRobert Mustacchi int dwarf_lne_set_address_a(Dwarf_P_Debug /*dbg*/, 4171*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*offset*/, 4172*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*symbol_index*/, 4173*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 4174*4d9fdb46SRobert Mustacchi 4175bc1f688bSRobert Mustacchi Dwarf_Unsigned dwarf_lne_end_sequence(Dwarf_P_Debug /*dbg*/, 4176bc1f688bSRobert Mustacchi Dwarf_Addr /*end_address*/, 4177bc1f688bSRobert Mustacchi Dwarf_Error* /*error*/); 4178bc1f688bSRobert Mustacchi 4179*4d9fdb46SRobert Mustacchi /* New December 2018. Preferred version. */ 4180*4d9fdb46SRobert Mustacchi int dwarf_lne_end_sequence_a(Dwarf_P_Debug /*dbg*/, 4181*4d9fdb46SRobert Mustacchi Dwarf_Addr /*end_address*/, 4182*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 4183*4d9fdb46SRobert Mustacchi 4184bc1f688bSRobert Mustacchi /* Producer .debug_frame functions */ 4185bc1f688bSRobert Mustacchi Dwarf_Unsigned dwarf_add_frame_cie(Dwarf_P_Debug /*dbg*/, 4186bc1f688bSRobert Mustacchi char* /*augmenter*/, 4187*4d9fdb46SRobert Mustacchi Dwarf_Small /*code_alignment_factor*/, 4188bc1f688bSRobert Mustacchi Dwarf_Small /*data_alignment_factor*/, 4189bc1f688bSRobert Mustacchi Dwarf_Small /*return_address_reg*/, 4190bc1f688bSRobert Mustacchi Dwarf_Ptr /*initialization_bytes*/, 4191bc1f688bSRobert Mustacchi Dwarf_Unsigned /*init_byte_len*/, 4192bc1f688bSRobert Mustacchi Dwarf_Error* /*error*/); 4193bc1f688bSRobert Mustacchi 4194*4d9fdb46SRobert Mustacchi /* New December 2018. Preferred version. */ 4195*4d9fdb46SRobert Mustacchi int dwarf_add_frame_cie_a(Dwarf_P_Debug /*dbg*/, 4196*4d9fdb46SRobert Mustacchi char* /*augmenter*/, 4197*4d9fdb46SRobert Mustacchi Dwarf_Small /*code_alignment_factor*/, 4198*4d9fdb46SRobert Mustacchi Dwarf_Small /*data_alignment_factor*/, 4199*4d9fdb46SRobert Mustacchi Dwarf_Small /*return_address_reg*/, 4200*4d9fdb46SRobert Mustacchi Dwarf_Ptr /*initialization_bytes*/, 4201*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*init_byte_len*/, 4202*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*cie_index_out*/, 4203*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 4204*4d9fdb46SRobert Mustacchi 4205bc1f688bSRobert Mustacchi Dwarf_Unsigned dwarf_add_frame_fde( 4206bc1f688bSRobert Mustacchi Dwarf_P_Debug /*dbg*/, 4207bc1f688bSRobert Mustacchi Dwarf_P_Fde /*fde*/, 4208bc1f688bSRobert Mustacchi Dwarf_P_Die /*corresponding subprogram die*/, 4209bc1f688bSRobert Mustacchi Dwarf_Unsigned /*cie_to_use*/, 4210bc1f688bSRobert Mustacchi Dwarf_Unsigned /*virt_addr_of_described_code*/, 4211bc1f688bSRobert Mustacchi Dwarf_Unsigned /*length_of_code*/, 4212bc1f688bSRobert Mustacchi Dwarf_Unsigned /*symbol_index*/, 4213bc1f688bSRobert Mustacchi Dwarf_Error* /*error*/); 4214bc1f688bSRobert Mustacchi 4215bc1f688bSRobert Mustacchi Dwarf_Unsigned dwarf_add_frame_fde_b( 4216bc1f688bSRobert Mustacchi Dwarf_P_Debug /*dbg*/, 4217bc1f688bSRobert Mustacchi Dwarf_P_Fde /*fde*/, 4218bc1f688bSRobert Mustacchi Dwarf_P_Die /*die*/, 4219bc1f688bSRobert Mustacchi Dwarf_Unsigned /*cie*/, 4220bc1f688bSRobert Mustacchi Dwarf_Addr /*virt_addr*/, 4221bc1f688bSRobert Mustacchi Dwarf_Unsigned /*code_len*/, 4222bc1f688bSRobert Mustacchi Dwarf_Unsigned /*sym_idx*/, 4223bc1f688bSRobert Mustacchi Dwarf_Unsigned /*sym_idx_of_end*/, 4224bc1f688bSRobert Mustacchi Dwarf_Addr /*offset_from_end_sym*/, 4225bc1f688bSRobert Mustacchi Dwarf_Error* /*error*/); 4226bc1f688bSRobert Mustacchi 4227*4d9fdb46SRobert Mustacchi /* New December 2018. Preferred version. */ 4228*4d9fdb46SRobert Mustacchi int dwarf_add_frame_fde_c( 4229*4d9fdb46SRobert Mustacchi Dwarf_P_Debug /*dbg*/, 4230*4d9fdb46SRobert Mustacchi Dwarf_P_Fde /*fde*/, 4231*4d9fdb46SRobert Mustacchi Dwarf_P_Die /*die*/, 4232*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*cie*/, 4233*4d9fdb46SRobert Mustacchi Dwarf_Addr /*virt_addr*/, 4234*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*code_len*/, 4235*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*sym_idx*/, 4236*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*sym_idx_of_end*/, 4237*4d9fdb46SRobert Mustacchi Dwarf_Addr /*offset_from_end_sym*/, 4238*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*index_to_fde*/, 4239*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 4240*4d9fdb46SRobert Mustacchi 4241*4d9fdb46SRobert Mustacchi /* New December 2018. Preferred version. */ 4242*4d9fdb46SRobert Mustacchi int dwarf_add_frame_info_c( 4243*4d9fdb46SRobert Mustacchi Dwarf_P_Debug /*dbg*/, 4244*4d9fdb46SRobert Mustacchi Dwarf_P_Fde /*fde*/, 4245*4d9fdb46SRobert Mustacchi Dwarf_P_Die /*die*/, 4246*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*cie*/, 4247*4d9fdb46SRobert Mustacchi Dwarf_Addr /*virt_addr*/, 4248*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*code_len*/, 4249*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*symidx*/, 4250*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*end_symbol */, 4251*4d9fdb46SRobert Mustacchi Dwarf_Addr /*offset_from_end_symbol */, 4252*4d9fdb46SRobert Mustacchi Dwarf_Signed /*offset_into_exception_tables*/, 4253*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*exception_table_symbol*/, 4254*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*fde_index_out*/, 4255*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 4256*4d9fdb46SRobert Mustacchi 4257bc1f688bSRobert Mustacchi Dwarf_Unsigned dwarf_add_frame_info_b( 4258*4d9fdb46SRobert Mustacchi Dwarf_P_Debug /*dbg*/, 4259bc1f688bSRobert Mustacchi Dwarf_P_Fde /*fde*/, 4260bc1f688bSRobert Mustacchi Dwarf_P_Die /*die*/, 4261bc1f688bSRobert Mustacchi Dwarf_Unsigned /*cie*/, 4262bc1f688bSRobert Mustacchi Dwarf_Addr /*virt_addr*/, 4263bc1f688bSRobert Mustacchi Dwarf_Unsigned /*code_len*/, 4264bc1f688bSRobert Mustacchi Dwarf_Unsigned /*symidx*/, 4265bc1f688bSRobert Mustacchi Dwarf_Unsigned /*end_symbol */, 4266bc1f688bSRobert Mustacchi Dwarf_Addr /*offset_from_end_symbol */, 4267bc1f688bSRobert Mustacchi Dwarf_Signed /*offset_into_exception_tables*/, 4268bc1f688bSRobert Mustacchi Dwarf_Unsigned /*exception_table_symbol*/, 4269bc1f688bSRobert Mustacchi Dwarf_Error* /*error*/); 4270bc1f688bSRobert Mustacchi 4271bc1f688bSRobert Mustacchi Dwarf_Unsigned dwarf_add_frame_info( 4272*4d9fdb46SRobert Mustacchi Dwarf_P_Debug /*dbg*/, 4273bc1f688bSRobert Mustacchi Dwarf_P_Fde /*fde*/, 4274bc1f688bSRobert Mustacchi Dwarf_P_Die /*die*/, 4275bc1f688bSRobert Mustacchi Dwarf_Unsigned /*cie*/, 4276bc1f688bSRobert Mustacchi Dwarf_Addr /*virt_addr*/, 4277bc1f688bSRobert Mustacchi Dwarf_Unsigned /*code_len*/, 4278bc1f688bSRobert Mustacchi Dwarf_Unsigned /*symidx*/, 4279bc1f688bSRobert Mustacchi Dwarf_Signed /*offset_into_exception_tables*/, 4280bc1f688bSRobert Mustacchi Dwarf_Unsigned /*exception_table_symbol*/, 4281bc1f688bSRobert Mustacchi Dwarf_Error* /*error*/); 4282bc1f688bSRobert Mustacchi 4283*4d9fdb46SRobert Mustacchi /* The fde returned is just the one passed in. Silly. */ 4284bc1f688bSRobert Mustacchi Dwarf_P_Fde dwarf_add_fde_inst( 4285bc1f688bSRobert Mustacchi Dwarf_P_Fde /*fde*/, 4286bc1f688bSRobert Mustacchi Dwarf_Small /*op*/, 4287bc1f688bSRobert Mustacchi Dwarf_Unsigned /*val1*/, 4288bc1f688bSRobert Mustacchi Dwarf_Unsigned /*val2*/, 4289bc1f688bSRobert Mustacchi Dwarf_Error* /*error*/); 4290bc1f688bSRobert Mustacchi 4291*4d9fdb46SRobert Mustacchi /* New December 2018. Preferred version. */ 4292*4d9fdb46SRobert Mustacchi int dwarf_add_fde_inst_a( 4293*4d9fdb46SRobert Mustacchi Dwarf_P_Fde /*fde*/, 4294*4d9fdb46SRobert Mustacchi Dwarf_Small /*op*/, 4295*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*val1*/, 4296*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*val2*/, 4297*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 4298*4d9fdb46SRobert Mustacchi 4299bc1f688bSRobert Mustacchi /* New September 17, 2009 */ 4300bc1f688bSRobert Mustacchi int dwarf_insert_fde_inst_bytes( 4301bc1f688bSRobert Mustacchi Dwarf_P_Debug /*dbg*/, 4302bc1f688bSRobert Mustacchi Dwarf_P_Fde /*fde*/, 4303bc1f688bSRobert Mustacchi Dwarf_Unsigned /*len*/, 4304bc1f688bSRobert Mustacchi Dwarf_Ptr /*ibytes*/, 4305bc1f688bSRobert Mustacchi Dwarf_Error* /*error*/); 4306bc1f688bSRobert Mustacchi 4307*4d9fdb46SRobert Mustacchi Dwarf_P_Fde dwarf_new_fde(Dwarf_P_Debug /*dbg*/, 4308*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 4309bc1f688bSRobert Mustacchi 4310*4d9fdb46SRobert Mustacchi /* New December 2018. Preferred version. */ 4311*4d9fdb46SRobert Mustacchi int dwarf_new_fde_a(Dwarf_P_Debug /*dbg*/, 4312*4d9fdb46SRobert Mustacchi Dwarf_P_Fde * /*fde_out*/, 4313*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 4314bc1f688bSRobert Mustacchi 4315bc1f688bSRobert Mustacchi Dwarf_P_Fde dwarf_fde_cfa_offset( 4316bc1f688bSRobert Mustacchi Dwarf_P_Fde /*fde*/, 4317bc1f688bSRobert Mustacchi Dwarf_Unsigned /*register_number*/, 4318bc1f688bSRobert Mustacchi Dwarf_Signed /*offset*/, 4319bc1f688bSRobert Mustacchi Dwarf_Error* /*error*/); 4320bc1f688bSRobert Mustacchi 4321*4d9fdb46SRobert Mustacchi /* New December 2018. Preferred version. */ 4322*4d9fdb46SRobert Mustacchi int dwarf_fde_cfa_offset_a( 4323*4d9fdb46SRobert Mustacchi Dwarf_P_Fde /*fde*/, 4324*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*register_number*/, 4325*4d9fdb46SRobert Mustacchi Dwarf_Signed /*offset*/, 4326*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 4327*4d9fdb46SRobert Mustacchi 4328*4d9fdb46SRobert Mustacchi /* die creation & addition routines 4329*4d9fdb46SRobert Mustacchi dwarf_new_die_a() new September 2016. 4330*4d9fdb46SRobert Mustacchi Preferred over dwarf_new_die(). */ 4331*4d9fdb46SRobert Mustacchi int dwarf_new_die_a( 4332*4d9fdb46SRobert Mustacchi Dwarf_P_Debug /*dbg*/, 4333*4d9fdb46SRobert Mustacchi Dwarf_Tag /*tag*/, 4334*4d9fdb46SRobert Mustacchi Dwarf_P_Die /*parent*/, 4335*4d9fdb46SRobert Mustacchi Dwarf_P_Die /*child*/, 4336*4d9fdb46SRobert Mustacchi Dwarf_P_Die /*left */, 4337*4d9fdb46SRobert Mustacchi Dwarf_P_Die /*right*/, 4338*4d9fdb46SRobert Mustacchi Dwarf_P_Die * /*die_out*/, 4339*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 4340*4d9fdb46SRobert Mustacchi 4341bc1f688bSRobert Mustacchi Dwarf_P_Die dwarf_new_die( 4342bc1f688bSRobert Mustacchi Dwarf_P_Debug /*dbg*/, 4343bc1f688bSRobert Mustacchi Dwarf_Tag /*tag*/, 4344bc1f688bSRobert Mustacchi Dwarf_P_Die /*parent*/, 4345bc1f688bSRobert Mustacchi Dwarf_P_Die /*child*/, 4346bc1f688bSRobert Mustacchi Dwarf_P_Die /*left */, 4347bc1f688bSRobert Mustacchi Dwarf_P_Die /*right*/, 4348bc1f688bSRobert Mustacchi Dwarf_Error* /*error*/); 4349bc1f688bSRobert Mustacchi 4350*4d9fdb46SRobert Mustacchi /* New September 2016. */ 4351*4d9fdb46SRobert Mustacchi int dwarf_add_die_to_debug_a( 4352*4d9fdb46SRobert Mustacchi Dwarf_P_Debug /*dbg*/, 4353*4d9fdb46SRobert Mustacchi Dwarf_P_Die /*die*/, 4354*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 4355*4d9fdb46SRobert Mustacchi 4356*4d9fdb46SRobert Mustacchi /* Original form. */ 4357bc1f688bSRobert Mustacchi Dwarf_Unsigned dwarf_add_die_to_debug( 4358bc1f688bSRobert Mustacchi Dwarf_P_Debug /*dbg*/, 4359bc1f688bSRobert Mustacchi Dwarf_P_Die /*die*/, 4360bc1f688bSRobert Mustacchi Dwarf_Error* /*error*/); 4361bc1f688bSRobert Mustacchi 4362bc1f688bSRobert Mustacchi /* Markers are not written to DWARF2/3/4, they are user 4363bc1f688bSRobert Mustacchi defined and may be used for any purpose. 4364bc1f688bSRobert Mustacchi */ 4365bc1f688bSRobert Mustacchi Dwarf_Unsigned dwarf_add_die_marker( 4366bc1f688bSRobert Mustacchi Dwarf_P_Debug /*dbg*/, 4367bc1f688bSRobert Mustacchi Dwarf_P_Die /*die*/, 4368bc1f688bSRobert Mustacchi Dwarf_Unsigned /*marker*/, 4369bc1f688bSRobert Mustacchi Dwarf_Error * /*error*/); 4370bc1f688bSRobert Mustacchi 4371*4d9fdb46SRobert Mustacchi /* Preferred version, new December 2018. */ 4372*4d9fdb46SRobert Mustacchi int dwarf_add_die_marker_a(Dwarf_P_Debug dbg, 4373*4d9fdb46SRobert Mustacchi Dwarf_P_Die die, 4374*4d9fdb46SRobert Mustacchi Dwarf_Unsigned marker, 4375*4d9fdb46SRobert Mustacchi Dwarf_Error * error); 4376*4d9fdb46SRobert Mustacchi 4377bc1f688bSRobert Mustacchi Dwarf_Unsigned dwarf_get_die_marker( 4378bc1f688bSRobert Mustacchi Dwarf_P_Debug /*dbg*/, 4379bc1f688bSRobert Mustacchi Dwarf_P_Die /*die*/, 4380bc1f688bSRobert Mustacchi Dwarf_Unsigned * /*marker*/, 4381bc1f688bSRobert Mustacchi Dwarf_Error * /*error*/); 4382bc1f688bSRobert Mustacchi 4383*4d9fdb46SRobert Mustacchi /* Preferred version, new December 2018. */ 4384*4d9fdb46SRobert Mustacchi int dwarf_get_die_marker_a( 4385*4d9fdb46SRobert Mustacchi Dwarf_P_Debug /*dbg*/, 4386*4d9fdb46SRobert Mustacchi Dwarf_P_Die /*die*/, 4387*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*marker*/, 4388*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 4389*4d9fdb46SRobert Mustacchi 4390*4d9fdb46SRobert Mustacchi /* New September 2016. Preferred version */ 4391*4d9fdb46SRobert Mustacchi int dwarf_die_link_a( 4392*4d9fdb46SRobert Mustacchi Dwarf_P_Die /*die*/, 4393*4d9fdb46SRobert Mustacchi Dwarf_P_Die /*parent*/, 4394*4d9fdb46SRobert Mustacchi Dwarf_P_Die /*child*/, 4395*4d9fdb46SRobert Mustacchi Dwarf_P_Die /*left*/, 4396*4d9fdb46SRobert Mustacchi Dwarf_P_Die /*right*/, 4397*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 4398*4d9fdb46SRobert Mustacchi 4399*4d9fdb46SRobert Mustacchi /* Original version. Use dwarf_die_link_a() instead. */ 4400bc1f688bSRobert Mustacchi Dwarf_P_Die dwarf_die_link( 4401bc1f688bSRobert Mustacchi Dwarf_P_Die /*die*/, 4402bc1f688bSRobert Mustacchi Dwarf_P_Die /*parent*/, 4403bc1f688bSRobert Mustacchi Dwarf_P_Die /*child*/, 4404bc1f688bSRobert Mustacchi Dwarf_P_Die /*left*/, 4405bc1f688bSRobert Mustacchi Dwarf_P_Die /*right*/, 4406bc1f688bSRobert Mustacchi Dwarf_Error* /*error*/); 4407bc1f688bSRobert Mustacchi 4408bc1f688bSRobert Mustacchi void dwarf_dealloc_compressed_block( 4409bc1f688bSRobert Mustacchi Dwarf_P_Debug, 4410bc1f688bSRobert Mustacchi void * 4411bc1f688bSRobert Mustacchi ); 4412bc1f688bSRobert Mustacchi 4413*4d9fdb46SRobert Mustacchi /* Call this passing in return value from 4414*4d9fdb46SRobert Mustacchi dwarf_uncompress_integer_block() 4415*4d9fdb46SRobert Mustacchi to free the space the decompression allocated. */ 4416bc1f688bSRobert Mustacchi void dwarf_dealloc_uncompressed_block( 4417bc1f688bSRobert Mustacchi Dwarf_Debug, 4418bc1f688bSRobert Mustacchi void * 4419bc1f688bSRobert Mustacchi ); 4420bc1f688bSRobert Mustacchi 4421*4d9fdb46SRobert Mustacchi /* dwarf_compress_integer_block_a( new 11 February 2019. 4422*4d9fdb46SRobert Mustacchi Like the earlier version this turns an array of signed 4423*4d9fdb46SRobert Mustacchi integers into a block of sleb values (and if the 4424*4d9fdb46SRobert Mustacchi values are small enough it might be a compression! 4425*4d9fdb46SRobert Mustacchi Or it could be an expansion...). Return DW_DLV_OK 4426*4d9fdb46SRobert Mustacchi on success. Supercedes dwarf_compress_integer_block(): 4427*4d9fdb46SRobert Mustacchi as no ugly cast needed to know if 4428*4d9fdb46SRobert Mustacchi dwarf_compress_integer_block_a() succeeds or not. */ 4429*4d9fdb46SRobert Mustacchi int 4430*4d9fdb46SRobert Mustacchi dwarf_compress_integer_block_a( 4431*4d9fdb46SRobert Mustacchi Dwarf_P_Debug /*dbg*/, 4432*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*input_array_length*/, 4433*4d9fdb46SRobert Mustacchi Dwarf_Signed * /*input_array*/, 4434*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*output_block_len*/, 4435*4d9fdb46SRobert Mustacchi void ** /*output_block_returned*/, 4436*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error */); 4437*4d9fdb46SRobert Mustacchi /* The following should be avoided as of February 2019. */ 4438bc1f688bSRobert Mustacchi void * dwarf_compress_integer_block( 4439bc1f688bSRobert Mustacchi Dwarf_P_Debug, /*dbg*/ 4440bc1f688bSRobert Mustacchi Dwarf_Bool, /*signed==true (or unsigned)*/ 4441bc1f688bSRobert Mustacchi Dwarf_Small, /*size of integer units: 8, 16, 32, 64*/ 4442bc1f688bSRobert Mustacchi void*, /*data*/ 4443bc1f688bSRobert Mustacchi Dwarf_Unsigned, /*number of elements*/ 4444bc1f688bSRobert Mustacchi Dwarf_Unsigned*, /*number of bytes in output block*/ 4445bc1f688bSRobert Mustacchi Dwarf_Error* /*error*/ 4446bc1f688bSRobert Mustacchi ); 4447bc1f688bSRobert Mustacchi 4448*4d9fdb46SRobert Mustacchi /* New February 2019. On success returns DW_DLV_OK 4449*4d9fdb46SRobert Mustacchi and creates an array of Dwarf_Signed values 4450*4d9fdb46SRobert Mustacchi from the block of sleb numbers. 4451*4d9fdb46SRobert Mustacchi This interface supercedes 4452*4d9fdb46SRobert Mustacchi dwarf_uncompress_integer_block(). No ugly 4453*4d9fdb46SRobert Mustacchi cast needed to know if 4454*4d9fdb46SRobert Mustacchi dwarf_uncompress_integer_block_a() succeeds or not. */ 4455*4d9fdb46SRobert Mustacchi int 4456*4d9fdb46SRobert Mustacchi dwarf_uncompress_integer_block_a(Dwarf_Debug /*dbg*/, 4457*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*input_length_in_bytes*/, 4458*4d9fdb46SRobert Mustacchi void * /*input_block*/, 4459*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*value_count*/, 4460*4d9fdb46SRobert Mustacchi Dwarf_Signed ** /*value_array*/, 4461*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 4462*4d9fdb46SRobert Mustacchi 4463bc1f688bSRobert Mustacchi /* Decode an array of signed leb integers (so of course the 4464*4d9fdb46SRobert Mustacchi array is not composed of fixed length values, but is instead 4465*4d9fdb46SRobert Mustacchi a sequence of sleb values). 4466*4d9fdb46SRobert Mustacchi Returns a DW_DLV_BADADDR on error. 4467*4d9fdb46SRobert Mustacchi Otherwise returns a pointer to an array of 32bit integers. 4468*4d9fdb46SRobert Mustacchi The signed argument must be non-zero (the decode 4469*4d9fdb46SRobert Mustacchi assumes sleb integers in the input data) at this time. 4470*4d9fdb46SRobert Mustacchi Size of integer units must be 32 (32 bits each) at this time. 4471*4d9fdb46SRobert Mustacchi Number of bytes in block is a byte count (not array count). 4472*4d9fdb46SRobert Mustacchi Returns number of units in output block (ie, number of elements 4473*4d9fdb46SRobert Mustacchi of the array that the return value points to) thru the 4474*4d9fdb46SRobert Mustacchi argument. */ 4475bc1f688bSRobert Mustacchi void * dwarf_uncompress_integer_block( 4476bc1f688bSRobert Mustacchi Dwarf_Debug, /*dbg */ 4477bc1f688bSRobert Mustacchi Dwarf_Bool, /*signed==true (or unsigned) */ 4478bc1f688bSRobert Mustacchi Dwarf_Small, /*size of integer units: 8, 16, 32, 64 */ 4479bc1f688bSRobert Mustacchi void*, /*input data */ 4480bc1f688bSRobert Mustacchi Dwarf_Unsigned, /*number of bytes in input */ 4481bc1f688bSRobert Mustacchi Dwarf_Unsigned*, /*number of units in output block */ 4482bc1f688bSRobert Mustacchi Dwarf_Error* /*error */ 4483bc1f688bSRobert Mustacchi ); 4484bc1f688bSRobert Mustacchi 4485bc1f688bSRobert Mustacchi /* Operations to create location expressions. */ 4486*4d9fdb46SRobert Mustacchi Dwarf_P_Expr dwarf_new_expr(Dwarf_P_Debug /*dbg*/, 4487*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 4488*4d9fdb46SRobert Mustacchi 4489*4d9fdb46SRobert Mustacchi /* New December 2018. Preferred version. */ 4490*4d9fdb46SRobert Mustacchi int dwarf_new_expr_a(Dwarf_P_Debug /*dbg*/, 4491*4d9fdb46SRobert Mustacchi Dwarf_P_Expr * /*expr_out*/, 4492*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 4493bc1f688bSRobert Mustacchi 4494bc1f688bSRobert Mustacchi void dwarf_expr_reset( 4495bc1f688bSRobert Mustacchi Dwarf_P_Expr /*expr*/, 4496bc1f688bSRobert Mustacchi Dwarf_Error* /*error*/); 4497bc1f688bSRobert Mustacchi 4498bc1f688bSRobert Mustacchi Dwarf_Unsigned dwarf_add_expr_gen( 4499bc1f688bSRobert Mustacchi Dwarf_P_Expr /*expr*/, 4500bc1f688bSRobert Mustacchi Dwarf_Small /*opcode*/, 4501bc1f688bSRobert Mustacchi Dwarf_Unsigned /*val1*/, 4502bc1f688bSRobert Mustacchi Dwarf_Unsigned /*val2*/, 4503bc1f688bSRobert Mustacchi Dwarf_Error* /*error*/); 4504bc1f688bSRobert Mustacchi 4505*4d9fdb46SRobert Mustacchi /* New December 2018. Preferred version. */ 4506*4d9fdb46SRobert Mustacchi int dwarf_add_expr_gen_a( 4507*4d9fdb46SRobert Mustacchi Dwarf_P_Expr /*expr*/, 4508*4d9fdb46SRobert Mustacchi Dwarf_Small /*opcode*/, 4509*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*val1*/, 4510*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*val2*/, 4511*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*next_byte_offset*/, 4512*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 4513*4d9fdb46SRobert Mustacchi 4514bc1f688bSRobert Mustacchi Dwarf_Unsigned dwarf_add_expr_addr( 4515bc1f688bSRobert Mustacchi Dwarf_P_Expr /*expr*/, 4516bc1f688bSRobert Mustacchi Dwarf_Unsigned /*addr*/, 4517bc1f688bSRobert Mustacchi Dwarf_Signed /*sym_index*/, 4518bc1f688bSRobert Mustacchi Dwarf_Error* /*error*/); 4519bc1f688bSRobert Mustacchi 4520bc1f688bSRobert Mustacchi Dwarf_Unsigned dwarf_add_expr_addr_b( 4521bc1f688bSRobert Mustacchi Dwarf_P_Expr /*expr*/, 4522bc1f688bSRobert Mustacchi Dwarf_Unsigned /*addr*/, 4523bc1f688bSRobert Mustacchi Dwarf_Unsigned /*sym_index*/, 4524bc1f688bSRobert Mustacchi Dwarf_Error* /*error*/); 4525bc1f688bSRobert Mustacchi 4526*4d9fdb46SRobert Mustacchi 4527*4d9fdb46SRobert Mustacchi /* New December 2018. Preferred version. */ 4528*4d9fdb46SRobert Mustacchi int dwarf_add_expr_addr_c( 4529*4d9fdb46SRobert Mustacchi Dwarf_P_Expr /*expr*/, 4530*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*addr*/, 4531*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*sym_index*/, 4532*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*next_byte_offset_out*/, 4533*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 4534*4d9fdb46SRobert Mustacchi 4535bc1f688bSRobert Mustacchi Dwarf_Unsigned dwarf_expr_current_offset( 4536bc1f688bSRobert Mustacchi Dwarf_P_Expr /*expr*/, 4537bc1f688bSRobert Mustacchi Dwarf_Error* /*error*/); 4538bc1f688bSRobert Mustacchi 4539*4d9fdb46SRobert Mustacchi /* New December 2018. Preferred version. */ 4540*4d9fdb46SRobert Mustacchi int dwarf_expr_current_offset_a( 4541*4d9fdb46SRobert Mustacchi Dwarf_P_Expr /*expr*/, 4542*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*next_byte_offset_out*/, 4543*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 4544*4d9fdb46SRobert Mustacchi 4545bc1f688bSRobert Mustacchi Dwarf_Addr dwarf_expr_into_block( 4546bc1f688bSRobert Mustacchi Dwarf_P_Expr /*expr*/, 4547bc1f688bSRobert Mustacchi Dwarf_Unsigned* /*length*/, 4548bc1f688bSRobert Mustacchi Dwarf_Error* /*error*/); 4549bc1f688bSRobert Mustacchi 4550*4d9fdb46SRobert Mustacchi /* New December 2018. Preferred version. */ 4551*4d9fdb46SRobert Mustacchi int dwarf_expr_into_block_a( 4552*4d9fdb46SRobert Mustacchi Dwarf_P_Expr /*expr*/, 4553*4d9fdb46SRobert Mustacchi Dwarf_Unsigned* /*length*/, 4554*4d9fdb46SRobert Mustacchi Dwarf_Small ** /*start_address*/, 4555*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 4556*4d9fdb46SRobert Mustacchi 4557bc1f688bSRobert Mustacchi Dwarf_Unsigned dwarf_add_arange(Dwarf_P_Debug /*dbg*/, 4558bc1f688bSRobert Mustacchi Dwarf_Addr /*begin_address*/, 4559bc1f688bSRobert Mustacchi Dwarf_Unsigned /*length*/, 4560bc1f688bSRobert Mustacchi Dwarf_Signed /*symbol_index*/, 4561bc1f688bSRobert Mustacchi Dwarf_Error* /*error*/); 4562bc1f688bSRobert Mustacchi 4563bc1f688bSRobert Mustacchi Dwarf_Unsigned dwarf_add_arange_b( 4564bc1f688bSRobert Mustacchi Dwarf_P_Debug /*dbg*/, 4565bc1f688bSRobert Mustacchi Dwarf_Addr /*begin_address*/, 4566bc1f688bSRobert Mustacchi Dwarf_Unsigned /*length*/, 4567bc1f688bSRobert Mustacchi Dwarf_Unsigned /*symbol_index*/, 4568bc1f688bSRobert Mustacchi Dwarf_Unsigned /*end_symbol_index*/, 4569bc1f688bSRobert Mustacchi Dwarf_Addr /*offset_from_end_symbol*/, 4570bc1f688bSRobert Mustacchi Dwarf_Error * /*error*/); 4571bc1f688bSRobert Mustacchi 4572*4d9fdb46SRobert Mustacchi /* New December 2018. Preferred version. */ 4573*4d9fdb46SRobert Mustacchi int dwarf_add_arange_c( 4574*4d9fdb46SRobert Mustacchi Dwarf_P_Debug /*dbg*/, 4575*4d9fdb46SRobert Mustacchi Dwarf_Addr /*begin_address*/, 4576*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*length*/, 4577*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*symbol_index*/, 4578*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*end_symbol_index*/, 4579*4d9fdb46SRobert Mustacchi Dwarf_Addr /*offset_from_end_symbol*/, 4580*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 4581*4d9fdb46SRobert Mustacchi 4582bc1f688bSRobert Mustacchi Dwarf_Unsigned dwarf_add_pubname( 4583bc1f688bSRobert Mustacchi Dwarf_P_Debug /*dbg*/, 4584bc1f688bSRobert Mustacchi Dwarf_P_Die /*die*/, 4585bc1f688bSRobert Mustacchi char* /*pubname_name*/, 4586bc1f688bSRobert Mustacchi Dwarf_Error* /*error*/); 4587bc1f688bSRobert Mustacchi 4588*4d9fdb46SRobert Mustacchi /* New December 2018. Preferred version. */ 4589*4d9fdb46SRobert Mustacchi int dwarf_add_pubname_a( 4590*4d9fdb46SRobert Mustacchi Dwarf_P_Debug /*dbg*/, 4591*4d9fdb46SRobert Mustacchi Dwarf_P_Die /*die*/, 4592*4d9fdb46SRobert Mustacchi char* /*pubname_name*/, 4593*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 4594*4d9fdb46SRobert Mustacchi 4595*4d9fdb46SRobert Mustacchi /* Added 17 October 2013. Introduced in DWARF3. */ 4596*4d9fdb46SRobert Mustacchi Dwarf_Unsigned dwarf_add_pubtype( 4597*4d9fdb46SRobert Mustacchi Dwarf_P_Debug /*dbg*/, 4598*4d9fdb46SRobert Mustacchi Dwarf_P_Die /*die*/, 4599*4d9fdb46SRobert Mustacchi char* /*pubtype_name*/, 4600*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 4601*4d9fdb46SRobert Mustacchi 4602*4d9fdb46SRobert Mustacchi /* New December 2018. Preferred version. */ 4603*4d9fdb46SRobert Mustacchi int dwarf_add_pubtype_a( 4604*4d9fdb46SRobert Mustacchi Dwarf_P_Debug /*dbg*/, 4605*4d9fdb46SRobert Mustacchi Dwarf_P_Die /*die*/, 4606*4d9fdb46SRobert Mustacchi char* /*pubtype_name*/, 4607*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 4608*4d9fdb46SRobert Mustacchi 4609bc1f688bSRobert Mustacchi Dwarf_Unsigned dwarf_add_funcname( 4610bc1f688bSRobert Mustacchi Dwarf_P_Debug /*dbg*/, 4611bc1f688bSRobert Mustacchi Dwarf_P_Die /*die*/, 4612bc1f688bSRobert Mustacchi char* /*func_name*/, 4613bc1f688bSRobert Mustacchi Dwarf_Error* /*error*/); 4614bc1f688bSRobert Mustacchi 4615*4d9fdb46SRobert Mustacchi /* New December 2018. Preferred version. */ 4616*4d9fdb46SRobert Mustacchi int dwarf_add_funcname_a( 4617*4d9fdb46SRobert Mustacchi Dwarf_P_Debug /*dbg*/, 4618*4d9fdb46SRobert Mustacchi Dwarf_P_Die /*die*/, 4619*4d9fdb46SRobert Mustacchi char* /*func_name*/, 4620*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 4621*4d9fdb46SRobert Mustacchi 4622bc1f688bSRobert Mustacchi Dwarf_Unsigned dwarf_add_typename( 4623bc1f688bSRobert Mustacchi Dwarf_P_Debug /*dbg*/, 4624bc1f688bSRobert Mustacchi Dwarf_P_Die /*die*/, 4625bc1f688bSRobert Mustacchi char* /*type_name*/, 4626bc1f688bSRobert Mustacchi Dwarf_Error* /*error*/); 4627bc1f688bSRobert Mustacchi 4628*4d9fdb46SRobert Mustacchi /* New December 2018. Preferred version. */ 4629*4d9fdb46SRobert Mustacchi int dwarf_add_typename_a( 4630*4d9fdb46SRobert Mustacchi Dwarf_P_Debug /*dbg*/, 4631*4d9fdb46SRobert Mustacchi Dwarf_P_Die /*die*/, 4632*4d9fdb46SRobert Mustacchi char* /*type_name*/, 4633*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 4634*4d9fdb46SRobert Mustacchi 4635bc1f688bSRobert Mustacchi Dwarf_Unsigned dwarf_add_varname( 4636bc1f688bSRobert Mustacchi Dwarf_P_Debug /*dbg*/, 4637bc1f688bSRobert Mustacchi Dwarf_P_Die /*die*/, 4638bc1f688bSRobert Mustacchi char* /*var_name*/, 4639bc1f688bSRobert Mustacchi Dwarf_Error* /*error*/); 4640bc1f688bSRobert Mustacchi 4641*4d9fdb46SRobert Mustacchi /* New December 2018. Preferred version. */ 4642*4d9fdb46SRobert Mustacchi int dwarf_add_varname_a( 4643*4d9fdb46SRobert Mustacchi Dwarf_P_Debug /*dbg*/, 4644*4d9fdb46SRobert Mustacchi Dwarf_P_Die /*die*/, 4645*4d9fdb46SRobert Mustacchi char* /*var_name*/, 4646*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 4647*4d9fdb46SRobert Mustacchi 4648bc1f688bSRobert Mustacchi Dwarf_Unsigned dwarf_add_weakname( 4649bc1f688bSRobert Mustacchi Dwarf_P_Debug /*dbg*/, 4650bc1f688bSRobert Mustacchi Dwarf_P_Die /*die*/, 4651bc1f688bSRobert Mustacchi char* /*weak_name*/, 4652bc1f688bSRobert Mustacchi Dwarf_Error* /*error*/); 4653bc1f688bSRobert Mustacchi 4654*4d9fdb46SRobert Mustacchi int dwarf_add_weakname_a( 4655*4d9fdb46SRobert Mustacchi Dwarf_P_Debug /*dbg*/, 4656*4d9fdb46SRobert Mustacchi Dwarf_P_Die /*die*/, 4657*4d9fdb46SRobert Mustacchi char* /*weak_name*/, 4658*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 4659*4d9fdb46SRobert Mustacchi 4660*4d9fdb46SRobert Mustacchi /* .debug_names producer functions */ 4661*4d9fdb46SRobert Mustacchi 4662*4d9fdb46SRobert Mustacchi /* dwarf_force_debug_names forces creation 4663*4d9fdb46SRobert Mustacchi of .debug_names (if DWARF5 being produced) 4664*4d9fdb46SRobert Mustacchi even if empty. Only for testing libdwarf. */ 4665*4d9fdb46SRobert Mustacchi int dwarf_force_debug_names(Dwarf_P_Debug /* dbg */, 4666*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 4667*4d9fdb46SRobert Mustacchi 4668*4d9fdb46SRobert Mustacchi /* Other debug_names functions are needed... FIXME */ 4669*4d9fdb46SRobert Mustacchi 4670*4d9fdb46SRobert Mustacchi /* end .debug_names producer functions */ 4671*4d9fdb46SRobert Mustacchi 4672bc1f688bSRobert Mustacchi /* .debug_macinfo producer functions 4673bc1f688bSRobert Mustacchi Functions must be called in right order: the section is output 4674bc1f688bSRobert Mustacchi In the order these are presented. 4675bc1f688bSRobert Mustacchi */ 4676bc1f688bSRobert Mustacchi int dwarf_def_macro(Dwarf_P_Debug /*dbg*/, 4677bc1f688bSRobert Mustacchi Dwarf_Unsigned /*line*/, 4678bc1f688bSRobert Mustacchi char * /*macname, with (arglist), no space before (*/, 4679bc1f688bSRobert Mustacchi char * /*macvalue*/, 4680bc1f688bSRobert Mustacchi Dwarf_Error* /*error*/); 4681bc1f688bSRobert Mustacchi 4682bc1f688bSRobert Mustacchi int dwarf_undef_macro(Dwarf_P_Debug /*dbg*/, 4683bc1f688bSRobert Mustacchi Dwarf_Unsigned /*line*/, 4684bc1f688bSRobert Mustacchi char * /*macname, no arglist, of course*/, 4685bc1f688bSRobert Mustacchi Dwarf_Error* /*error*/); 4686bc1f688bSRobert Mustacchi 4687bc1f688bSRobert Mustacchi int dwarf_start_macro_file(Dwarf_P_Debug /*dbg*/, 4688bc1f688bSRobert Mustacchi Dwarf_Unsigned /*fileindex*/, 4689bc1f688bSRobert Mustacchi Dwarf_Unsigned /*linenumber*/, 4690bc1f688bSRobert Mustacchi Dwarf_Error* /*error*/); 4691bc1f688bSRobert Mustacchi 4692bc1f688bSRobert Mustacchi int dwarf_end_macro_file(Dwarf_P_Debug /*dbg*/, 4693bc1f688bSRobert Mustacchi Dwarf_Error* /*error*/); 4694bc1f688bSRobert Mustacchi 4695bc1f688bSRobert Mustacchi int dwarf_vendor_ext(Dwarf_P_Debug /*dbg*/, 4696bc1f688bSRobert Mustacchi Dwarf_Unsigned /*constant*/, 4697bc1f688bSRobert Mustacchi char * /*string*/, 4698bc1f688bSRobert Mustacchi Dwarf_Error* /*error*/); 4699bc1f688bSRobert Mustacchi 4700bc1f688bSRobert Mustacchi /* end macinfo producer functions */ 4701bc1f688bSRobert Mustacchi 4702bc1f688bSRobert Mustacchi int dwarf_attr_offset(Dwarf_Die /*die*/, 4703bc1f688bSRobert Mustacchi Dwarf_Attribute /*attr of above die*/, 4704bc1f688bSRobert Mustacchi Dwarf_Off * /*returns offset thru this ptr */, 4705bc1f688bSRobert Mustacchi Dwarf_Error * /*error*/); 4706bc1f688bSRobert Mustacchi 4707bc1f688bSRobert Mustacchi /* This is a hack so clients can verify offsets. 4708bc1f688bSRobert Mustacchi Added April 2005 so that debugger can detect broken offsets 4709bc1f688bSRobert Mustacchi (which happened in an IRIX executable larger than 2GB 4710bc1f688bSRobert Mustacchi with MIPSpro 7.3.1.3 toolchain.). 4711bc1f688bSRobert Mustacchi */ 4712*4d9fdb46SRobert Mustacchi int dwarf_get_section_max_offsets(Dwarf_Debug /*dbg*/, 4713bc1f688bSRobert Mustacchi Dwarf_Unsigned * /*debug_info_size*/, 4714bc1f688bSRobert Mustacchi Dwarf_Unsigned * /*debug_abbrev_size*/, 4715bc1f688bSRobert Mustacchi Dwarf_Unsigned * /*debug_line_size*/, 4716bc1f688bSRobert Mustacchi Dwarf_Unsigned * /*debug_loc_size*/, 4717bc1f688bSRobert Mustacchi Dwarf_Unsigned * /*debug_aranges_size*/, 4718bc1f688bSRobert Mustacchi Dwarf_Unsigned * /*debug_macinfo_size*/, 4719bc1f688bSRobert Mustacchi Dwarf_Unsigned * /*debug_pubnames_size*/, 4720bc1f688bSRobert Mustacchi Dwarf_Unsigned * /*debug_str_size*/, 4721bc1f688bSRobert Mustacchi Dwarf_Unsigned * /*debug_frame_size*/, 4722bc1f688bSRobert Mustacchi Dwarf_Unsigned * /*debug_ranges_size*/, 4723bc1f688bSRobert Mustacchi Dwarf_Unsigned * /*debug_pubtypes_size*/); 4724bc1f688bSRobert Mustacchi 4725*4d9fdb46SRobert Mustacchi /* New October 2011., adds .debug_types section to the sizes 4726*4d9fdb46SRobert Mustacchi returned. */ 4727*4d9fdb46SRobert Mustacchi int dwarf_get_section_max_offsets_b(Dwarf_Debug /*dbg*/, 4728*4d9fdb46SRobert Mustacchi 4729*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*debug_info_size*/, 4730*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*debug_abbrev_size*/, 4731*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*debug_line_size*/, 4732*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*debug_loc_size*/, 4733*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*debug_aranges_size*/, 4734*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*debug_macinfo_size*/, 4735*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*debug_pubnames_size*/, 4736*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*debug_str_size*/, 4737*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*debug_frame_size*/, 4738*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*debug_ranges_size*/, 4739*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*debug_pubtypes_size*/, 4740*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*debug_types_size*/); 4741*4d9fdb46SRobert Mustacchi 4742*4d9fdb46SRobert Mustacchi int dwarf_get_section_max_offsets_c(Dwarf_Debug /*dbg*/, 4743*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*debug_info_size*/, 4744*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*debug_abbrev_size*/, 4745*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*debug_line_size*/, 4746*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*debug_loc_size*/, 4747*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*debug_aranges_size*/, 4748*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*debug_macinfo_size*/, 4749*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*debug_pubnames_size*/, 4750*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*debug_str_size*/, 4751*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*debug_frame_size*/, 4752*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*debug_ranges_size*/, 4753*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*debug_pubtypes_size*/, 4754*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*debug_types_size*/, 4755*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*debug_macro_size*/, 4756*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*debug_str_offsets_size*/, 4757*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*debug_sup_size*/, 4758*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*debug_cu_index_size*/, 4759*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*debug_tu_index_size*/); 4760*4d9fdb46SRobert Mustacchi int dwarf_get_section_max_offsets_d(Dwarf_Debug /*dbg*/, 4761*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*debug_info_size*/, 4762*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*debug_abbrev_size*/, 4763*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*debug_line_size*/, 4764*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*debug_loc_size*/, 4765*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*debug_aranges_size*/, 4766*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*debug_macinfo_size*/, 4767*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*debug_pubnames_size*/, 4768*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*debug_str_size*/, 4769*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*debug_frame_size*/, 4770*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*debug_ranges_size*/, 4771*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*debug_pubtypes_size*/, 4772*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*debug_types_size*/, 4773*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*debug_macro_size*/, 4774*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*debug_str_offsets_size*/, 4775*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*debug_sup_size*/, 4776*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*debug_cu_index_size*/, 4777*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*debug_tu_index_size*/, 4778*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*debug_names_size*/, 4779*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*debug_loclists_size*/, 4780*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*debug_rnglists_size*/); 4781*4d9fdb46SRobert Mustacchi 4782*4d9fdb46SRobert Mustacchi /* The 'set' calls here return the original (before any change 4783*4d9fdb46SRobert Mustacchi by these set routines) of the respective fields. */ 4784bc1f688bSRobert Mustacchi /* Multiple releases spelled 'initial' as 'inital' . 4785bc1f688bSRobert Mustacchi The 'inital' spelling should not be used. */ 4786bc1f688bSRobert Mustacchi Dwarf_Half dwarf_set_frame_rule_inital_value(Dwarf_Debug /*dbg*/, 4787bc1f688bSRobert Mustacchi Dwarf_Half /*value*/); 4788bc1f688bSRobert Mustacchi /* Additional interface with correct 'initial' spelling. */ 4789*4d9fdb46SRobert Mustacchi /* It is likely you will want to call the following 6 functions 4790bc1f688bSRobert Mustacchi before accessing any frame information. All are useful 4791bc1f688bSRobert Mustacchi to tailor handling of pseudo-registers needed to turn 4792bc1f688bSRobert Mustacchi frame operation references into simpler forms and to 4793bc1f688bSRobert Mustacchi reflect ABI specific data. Of course altering libdwarf.h 4794*4d9fdb46SRobert Mustacchi and dwarf.h allow the same capabilities, but header changes 4795*4d9fdb46SRobert Mustacchi in the distribution would require you re-integrate your 4796*4d9fdb46SRobert Mustacchi libdwarf.h changes into the distributed libdwarf.h ... 4797*4d9fdb46SRobert Mustacchi so use the following functions instead.*/ 4798bc1f688bSRobert Mustacchi Dwarf_Half dwarf_set_frame_rule_initial_value(Dwarf_Debug /*dbg*/, 4799bc1f688bSRobert Mustacchi Dwarf_Half /*value*/); 4800bc1f688bSRobert Mustacchi Dwarf_Half dwarf_set_frame_rule_table_size(Dwarf_Debug /*dbg*/, 4801bc1f688bSRobert Mustacchi Dwarf_Half /*value*/); 4802bc1f688bSRobert Mustacchi Dwarf_Half dwarf_set_frame_cfa_value(Dwarf_Debug /*dbg*/, 4803bc1f688bSRobert Mustacchi Dwarf_Half /*value*/); 4804bc1f688bSRobert Mustacchi Dwarf_Half dwarf_set_frame_same_value(Dwarf_Debug /*dbg*/, 4805bc1f688bSRobert Mustacchi Dwarf_Half /*value*/); 4806bc1f688bSRobert Mustacchi Dwarf_Half dwarf_set_frame_undefined_value(Dwarf_Debug /*dbg*/, 4807bc1f688bSRobert Mustacchi Dwarf_Half /*value*/); 4808*4d9fdb46SRobert Mustacchi /* dwarf_set_default_address_size only sets 'value' if value is 4809*4d9fdb46SRobert Mustacchi greater than zero. */ 4810*4d9fdb46SRobert Mustacchi Dwarf_Small dwarf_set_default_address_size(Dwarf_Debug /*dbg*/, 4811*4d9fdb46SRobert Mustacchi Dwarf_Small /* value */); 4812bc1f688bSRobert Mustacchi 4813bc1f688bSRobert Mustacchi /* As of April 27, 2009, this version with no diepointer is 4814bc1f688bSRobert Mustacchi obsolete though supported. Use dwarf_get_ranges_a() instead. */ 4815bc1f688bSRobert Mustacchi int dwarf_get_ranges(Dwarf_Debug /*dbg*/, 4816bc1f688bSRobert Mustacchi Dwarf_Off /*rangesoffset*/, 4817bc1f688bSRobert Mustacchi Dwarf_Ranges ** /*rangesbuf*/, 4818bc1f688bSRobert Mustacchi Dwarf_Signed * /*listlen*/, 4819bc1f688bSRobert Mustacchi Dwarf_Unsigned * /*bytecount*/, 4820bc1f688bSRobert Mustacchi Dwarf_Error * /*error*/); 4821bc1f688bSRobert Mustacchi 4822bc1f688bSRobert Mustacchi /* This adds the address_size argument. New April 27, 2009 */ 4823bc1f688bSRobert Mustacchi int dwarf_get_ranges_a(Dwarf_Debug /*dbg*/, 4824bc1f688bSRobert Mustacchi Dwarf_Off /*rangesoffset*/, 4825bc1f688bSRobert Mustacchi Dwarf_Die /* diepointer */, 4826bc1f688bSRobert Mustacchi Dwarf_Ranges ** /*rangesbuf*/, 4827bc1f688bSRobert Mustacchi Dwarf_Signed * /*listlen*/, 4828bc1f688bSRobert Mustacchi Dwarf_Unsigned * /*bytecount*/, 4829bc1f688bSRobert Mustacchi Dwarf_Error * /*error*/); 4830bc1f688bSRobert Mustacchi 4831bc1f688bSRobert Mustacchi void dwarf_ranges_dealloc(Dwarf_Debug /*dbg*/, 4832bc1f688bSRobert Mustacchi Dwarf_Ranges * /*rangesbuf*/, 4833bc1f688bSRobert Mustacchi Dwarf_Signed /*rangecount*/); 4834bc1f688bSRobert Mustacchi 4835*4d9fdb46SRobert Mustacchi /* ======= START .debug_rnglists interfaces. New May 2020 */ 4836*4d9fdb46SRobert Mustacchi struct Dwarf_Rnglists_Entry_s; 4837*4d9fdb46SRobert Mustacchi typedef struct Dwarf_Rnglists_Entry_s * Dwarf_Rnglists_Entry; 4838*4d9fdb46SRobert Mustacchi struct Dwarf_Rnglists_Head_s; 4839*4d9fdb46SRobert Mustacchi typedef struct Dwarf_Rnglists_Head_s * Dwarf_Rnglists_Head; 4840*4d9fdb46SRobert Mustacchi 4841*4d9fdb46SRobert Mustacchi /* For DWARF5 DW_AT_ranges: DW_FORM_sec_offset DW_FORM_rnglistx */ 4842*4d9fdb46SRobert Mustacchi int dwarf_rnglists_get_rle_head(Dwarf_Attribute /*attr*/, 4843*4d9fdb46SRobert Mustacchi Dwarf_Half /*theform*/, 4844*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*index_or_offset_value*/, 4845*4d9fdb46SRobert Mustacchi Dwarf_Rnglists_Head * /*head_out*/, 4846*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*count_of_entries_in_head*/, 4847*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*global_offset_of_rle_set*/, 4848*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 4849*4d9fdb46SRobert Mustacchi 4850*4d9fdb46SRobert Mustacchi /* Get the rnglist entries details */ 4851*4d9fdb46SRobert Mustacchi int dwarf_get_rnglists_entry_fields(Dwarf_Rnglists_Head /*head*/, 4852*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*entrynum*/, 4853*4d9fdb46SRobert Mustacchi unsigned int * /*entrylen*/, 4854*4d9fdb46SRobert Mustacchi unsigned int * /*code*/, 4855*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*raw1*/, 4856*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*raw2*/, 4857*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*cooked1*/, 4858*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*cooked2*/, 4859*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 4860*4d9fdb46SRobert Mustacchi 4861*4d9fdb46SRobert Mustacchi int dwarf_dealloc_rnglists_head(Dwarf_Rnglists_Head ); 4862*4d9fdb46SRobert Mustacchi 4863*4d9fdb46SRobert Mustacchi /* Loads all the rnglists headers and 4864*4d9fdb46SRobert Mustacchi returns DW_DLV_NO_ENTRY if the section 4865*4d9fdb46SRobert Mustacchi is missing or empty. 4866*4d9fdb46SRobert Mustacchi Intended to be done quite early and 4867*4d9fdb46SRobert Mustacchi it is automatically 4868*4d9fdb46SRobert Mustacchi done if .debug_info is loaded. 4869*4d9fdb46SRobert Mustacchi Doing it more than once is never necessary 4870*4d9fdb46SRobert Mustacchi or harmful. There is no deallocation call 4871*4d9fdb46SRobert Mustacchi made visible, deallocation happens 4872*4d9fdb46SRobert Mustacchi when dwarf_finish() is called. 4873*4d9fdb46SRobert Mustacchi With DW_DLV_OK it returns the number of 4874*4d9fdb46SRobert Mustacchi rnglists headers in the section through 4875*4d9fdb46SRobert Mustacchi rnglists_count. */ 4876*4d9fdb46SRobert Mustacchi int dwarf_load_rnglists(Dwarf_Debug /*dbg*/, 4877*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*rnglists_count*/, 4878*4d9fdb46SRobert Mustacchi Dwarf_Error * /*err*/); 4879*4d9fdb46SRobert Mustacchi 4880*4d9fdb46SRobert Mustacchi /* Retrieve the offset from the context-index'th 4881*4d9fdb46SRobert Mustacchi rangelists context and the offsetentry_index 4882*4d9fdb46SRobert Mustacchi element of the array of offsets. 4883*4d9fdb46SRobert Mustacchi If an index is too large to be correct 4884*4d9fdb46SRobert Mustacchi this returns DW_DLV_NO_ENTRY. 4885*4d9fdb46SRobert Mustacchi If all is correct it returns DW_DLV_OK and 4886*4d9fdb46SRobert Mustacchi sets *offset_value_out to the offset of 4887*4d9fdb46SRobert Mustacchi the range list from the base of the offset 4888*4d9fdb46SRobert Mustacchi array, and *global_offset_value_out is set 4889*4d9fdb46SRobert Mustacchi to the .debug_rnglists section offset of 4890*4d9fdb46SRobert Mustacchi the range list. */ 4891*4d9fdb46SRobert Mustacchi int dwarf_get_rnglist_offset_index_value(Dwarf_Debug /*dbg*/, 4892*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*context_index*/, 4893*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*offsetentry_index*/, 4894*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*offset_value_out*/, 4895*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*global_offset_value_out*/, 4896*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 4897*4d9fdb46SRobert Mustacchi 4898*4d9fdb46SRobert Mustacchi 4899*4d9fdb46SRobert Mustacchi /* Used by dwarfdump to print basic data from the 4900*4d9fdb46SRobert Mustacchi data generated to look at a specific rangelist 4901*4d9fdb46SRobert Mustacchi as returned by dwarf_rnglists_index_get_rle_head() 4902*4d9fdb46SRobert Mustacchi or dwarf_rnglists_offset_get_rle_head. */ 4903*4d9fdb46SRobert Mustacchi int dwarf_get_rnglist_head_basics(Dwarf_Rnglists_Head /*head*/, 4904*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*rle_count*/, 4905*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*rnglists_version*/, 4906*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*rnglists_index_returned*/, 4907*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*bytes_total_in_rle*/, 4908*4d9fdb46SRobert Mustacchi Dwarf_Half * /*offset_size*/, 4909*4d9fdb46SRobert Mustacchi Dwarf_Half * /*address_size*/, 4910*4d9fdb46SRobert Mustacchi Dwarf_Half * /*segment_selector_size*/, 4911*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*overall offset_of_this_context*/, 4912*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*total_length of this context*/, 4913*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*offset_table_offset*/, 4914*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*offset_table_entrycount*/, 4915*4d9fdb46SRobert Mustacchi Dwarf_Bool * /*rnglists_base_present*/, 4916*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*rnglists_base*/, 4917*4d9fdb46SRobert Mustacchi Dwarf_Bool * /*rnglists_base_address_present*/, 4918*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*rnglists_base_address*/, 4919*4d9fdb46SRobert Mustacchi Dwarf_Bool * /*rnglists_debug_addr_base_present*/, 4920*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*rnglists_debug_addr_base*/, 4921*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 4922*4d9fdb46SRobert Mustacchi 4923*4d9fdb46SRobert Mustacchi /* Enables printing of details about the Range List Table 4924*4d9fdb46SRobert Mustacchi Headers, one header per call. Index starting at 0. 4925*4d9fdb46SRobert Mustacchi Returns DW_DLV_NO_ENTRY if index is too high for the table. 4926*4d9fdb46SRobert Mustacchi A .debug_rnglists section may contain any number 4927*4d9fdb46SRobert Mustacchi of Range List Table Headers with their details. */ 4928*4d9fdb46SRobert Mustacchi int dwarf_get_rnglist_context_basics(Dwarf_Debug /*dbg*/, 4929*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*index*/, 4930*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*header_offset*/, 4931*4d9fdb46SRobert Mustacchi Dwarf_Small * /*offset_size*/, 4932*4d9fdb46SRobert Mustacchi Dwarf_Small * /*extension_size*/, 4933*4d9fdb46SRobert Mustacchi unsigned int * /*version*/, /* 5 */ 4934*4d9fdb46SRobert Mustacchi Dwarf_Small * /*address_size*/, 4935*4d9fdb46SRobert Mustacchi Dwarf_Small * /*segment_selector_size*/, 4936*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*offset_entry_count*/, 4937*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*offset_of_offset_array*/, 4938*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*offset_of_first_rangeentry*/, 4939*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*offset_past_last_rangeentry*/, 4940*4d9fdb46SRobert Mustacchi Dwarf_Error * /*err*/); 4941*4d9fdb46SRobert Mustacchi 4942*4d9fdb46SRobert Mustacchi /* entry offset is offset_of_first_rangeentry. 4943*4d9fdb46SRobert Mustacchi Stop when the returned *next_entry_offset 4944*4d9fdb46SRobert Mustacchi is == offset_past_last_rangentry (from 4945*4d9fdb46SRobert Mustacchi dwarf_get_rnglist_context_plus). 4946*4d9fdb46SRobert Mustacchi This only makes sense within those ranges. 4947*4d9fdb46SRobert Mustacchi This retrieves raw detail from the section, 4948*4d9fdb46SRobert Mustacchi no base values or anything are added. 4949*4d9fdb46SRobert Mustacchi So this returns raw individual entries 4950*4d9fdb46SRobert Mustacchi for a single rnglist header, meaning a 4951*4d9fdb46SRobert Mustacchi a single Dwarf_Rnglists_Context. 4952*4d9fdb46SRobert Mustacchi 4953*4d9fdb46SRobert Mustacchi This interface assumes there is no 4954*4d9fdb46SRobert Mustacchi segment selector. */ 4955*4d9fdb46SRobert Mustacchi int dwarf_get_rnglist_raw_entry_detail(Dwarf_Debug /*dbg*/, 4956*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*entry_offset*/, 4957*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*entry_kind*/, 4958*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*entry_operand1*/, 4959*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*entry_operand2*/, 4960*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*next_entry_offset*/, 4961*4d9fdb46SRobert Mustacchi Dwarf_Error * /*err*/); 4962*4d9fdb46SRobert Mustacchi 4963*4d9fdb46SRobert Mustacchi /* If no error, returns DW_DLV_OK and sets 4964*4d9fdb46SRobert Mustacchi the entry length,kind, and operands through 4965*4d9fdb46SRobert Mustacchi the pointers. If any missing operands assign 4966*4d9fdb46SRobert Mustacchi zero back through tye operand pointers. */ 4967*4d9fdb46SRobert Mustacchi 4968*4d9fdb46SRobert Mustacchi int dwarf_get_rnglist_rle( Dwarf_Debug /*dbg*/, 4969*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*contextnumber*/, 4970*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*entry_offset*/, 4971*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*endoffset*/, 4972*4d9fdb46SRobert Mustacchi unsigned int * /*entrylen*/, 4973*4d9fdb46SRobert Mustacchi unsigned int * /*entry_kind*/, 4974*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*entry_operand1*/, 4975*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*entry_operand2*/, 4976*4d9fdb46SRobert Mustacchi Dwarf_Error * /*err*/); 4977*4d9fdb46SRobert Mustacchi 4978*4d9fdb46SRobert Mustacchi /* ======= END .debug_rnglists interfaces. */ 4979*4d9fdb46SRobert Mustacchi /* ======= START .debug_loclists interfaces. New May 2020 */ 4980*4d9fdb46SRobert Mustacchi /* These interfaces allow reading the .debug_loclists 4981*4d9fdb46SRobert Mustacchi section. Normal use of .debug_loclists uses 4982*4d9fdb46SRobert Mustacchi dwarf_get_loclist_c() to open access to any kind of location 4983*4d9fdb46SRobert Mustacchi or loclist and uses dwarf_loc_head_c_dealloc() to 4984*4d9fdb46SRobert Mustacchi deallocate that memory once one is finished with 4985*4d9fdb46SRobert Mustacchi that data. So for most purposes you do not need 4986*4d9fdb46SRobert Mustacchi to use these functions */ 4987*4d9fdb46SRobert Mustacchi struct Dwarf_Loclists_Entry_s; 4988*4d9fdb46SRobert Mustacchi typedef struct Dwarf_Loclists_Entry_s * Dwarf_Loclists_Entry; 4989*4d9fdb46SRobert Mustacchi 4990*4d9fdb46SRobert Mustacchi /* See dwarf_get_loclist_c() to open a Dwarf_Loc_Head_c 4991*4d9fdb46SRobert Mustacchi on any type of location list or expression. */ 4992*4d9fdb46SRobert Mustacchi 4993*4d9fdb46SRobert Mustacchi /* Get the loclists entries details */ 4994*4d9fdb46SRobert Mustacchi int dwarf_get_loclists_entry_fields(Dwarf_Loc_Head_c /*head*/, 4995*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*entrynum*/, 4996*4d9fdb46SRobert Mustacchi unsigned int * /*entrylen*/, 4997*4d9fdb46SRobert Mustacchi unsigned int * /*code*/, 4998*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*raw1*/, 4999*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*raw2*/, 5000*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*cooked1*/, 5001*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*cooked2*/, 5002*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 5003*4d9fdb46SRobert Mustacchi 5004*4d9fdb46SRobert Mustacchi /* Loads all the loclists headers and 5005*4d9fdb46SRobert Mustacchi returns DW_DLV_NO_ENTRY if the section 5006*4d9fdb46SRobert Mustacchi is missing or empty. 5007*4d9fdb46SRobert Mustacchi Intended to be done quite early and 5008*4d9fdb46SRobert Mustacchi it is automatically 5009*4d9fdb46SRobert Mustacchi done if .debug_info is loaded. 5010*4d9fdb46SRobert Mustacchi Doing it more than once is never necessary 5011*4d9fdb46SRobert Mustacchi or harmful. There is no deallocation call 5012*4d9fdb46SRobert Mustacchi made visible, deallocation happens 5013*4d9fdb46SRobert Mustacchi when dwarf_finish() is called. 5014*4d9fdb46SRobert Mustacchi With DW_DLV_OK it returns the number of 5015*4d9fdb46SRobert Mustacchi loclists headers in the section through 5016*4d9fdb46SRobert Mustacchi loclists_count. */ 5017*4d9fdb46SRobert Mustacchi int dwarf_load_loclists(Dwarf_Debug /*dbg*/, 5018*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*loclists_count*/, 5019*4d9fdb46SRobert Mustacchi Dwarf_Error * /*err*/); 5020*4d9fdb46SRobert Mustacchi 5021*4d9fdb46SRobert Mustacchi /* Retrieve the offset from the context-index'th 5022*4d9fdb46SRobert Mustacchi loclists context and the offsetentry_index 5023*4d9fdb46SRobert Mustacchi element of the array of offsets. 5024*4d9fdb46SRobert Mustacchi If an index is too large to be correct 5025*4d9fdb46SRobert Mustacchi this returns DW_DLV_NO_ENTRY. 5026*4d9fdb46SRobert Mustacchi If all is correct it returns DW_DLV_OK and 5027*4d9fdb46SRobert Mustacchi sets *offset_value_out to the offset of 5028*4d9fdb46SRobert Mustacchi the range list from the base of the offset 5029*4d9fdb46SRobert Mustacchi array, and *global_offset_value_out is set 5030*4d9fdb46SRobert Mustacchi to the .debug_loclists section offset of 5031*4d9fdb46SRobert Mustacchi the range list. */ 5032*4d9fdb46SRobert Mustacchi int dwarf_get_loclist_offset_index_value(Dwarf_Debug /*dbg*/, 5033*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*context_index*/, 5034*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*offsetentry_index*/, 5035*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*offset_value_out*/, 5036*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*global_offset_value_out*/, 5037*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 5038*4d9fdb46SRobert Mustacchi 5039*4d9fdb46SRobert Mustacchi /* Used by dwarfdump to print basic data from the 5040*4d9fdb46SRobert Mustacchi data generated to look at a specific rangelist 5041*4d9fdb46SRobert Mustacchi as returned by dwarf_loclists_index_get_lle_head() 5042*4d9fdb46SRobert Mustacchi or dwarf_loclists_offset_get_lle_head. */ 5043*4d9fdb46SRobert Mustacchi int dwarf_get_loclist_head_basics(Dwarf_Loc_Head_c /*head*/, 5044*4d9fdb46SRobert Mustacchi Dwarf_Small * /*lkind*/, 5045*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*lle_count*/, 5046*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*loclists_version*/, 5047*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*loclists_index_returned*/, 5048*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*bytes_total_in_rle*/, 5049*4d9fdb46SRobert Mustacchi Dwarf_Half * /*offset_size*/, 5050*4d9fdb46SRobert Mustacchi Dwarf_Half * /*address_size*/, 5051*4d9fdb46SRobert Mustacchi Dwarf_Half * /*segment_selector_size*/, 5052*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*overall offset_of_this_context*/, 5053*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*total_length of this context*/, 5054*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*offset_table_offset*/, 5055*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*offset_table_entrycount*/, 5056*4d9fdb46SRobert Mustacchi Dwarf_Bool * /*loclists_base_present*/, 5057*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*loclists_base*/, 5058*4d9fdb46SRobert Mustacchi Dwarf_Bool * /*loclists_base_address_present*/, 5059*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*loclists_base_address*/, 5060*4d9fdb46SRobert Mustacchi Dwarf_Bool * /*loclists_debug_addr_base_present*/, 5061*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*loclists_debug_addr_base*/, 5062*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*offset_this_lle_area*/, 5063*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 5064*4d9fdb46SRobert Mustacchi 5065*4d9fdb46SRobert Mustacchi /* Enables printing of details about the Range List Table 5066*4d9fdb46SRobert Mustacchi Headers, one header per call. Index starting at 0. 5067*4d9fdb46SRobert Mustacchi Returns DW_DLV_NO_ENTRY if index is too high for the table. 5068*4d9fdb46SRobert Mustacchi A .debug_loclists section may contain any number 5069*4d9fdb46SRobert Mustacchi of Location List Table Headers with their details. */ 5070*4d9fdb46SRobert Mustacchi int dwarf_get_loclist_context_basics(Dwarf_Debug /*dbg*/, 5071*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*index*/, 5072*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*header_offset*/, 5073*4d9fdb46SRobert Mustacchi Dwarf_Small * /*offset_size*/, 5074*4d9fdb46SRobert Mustacchi Dwarf_Small * /*extension_size*/, 5075*4d9fdb46SRobert Mustacchi unsigned int * /*version*/, /* 5 */ 5076*4d9fdb46SRobert Mustacchi Dwarf_Small * /*address_size*/, 5077*4d9fdb46SRobert Mustacchi Dwarf_Small * /*segment_selector_size*/, 5078*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*offset_entry_count*/, 5079*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*offset_of_offset_array*/, 5080*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*offset_of_first_locentry*/, 5081*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*offset_past_last_locentry*/, 5082*4d9fdb46SRobert Mustacchi Dwarf_Error * /*err*/); 5083*4d9fdb46SRobert Mustacchi 5084*4d9fdb46SRobert Mustacchi /* entry offset is offset_of_first_locentry. 5085*4d9fdb46SRobert Mustacchi Stop when the returned *next_entry_offset 5086*4d9fdb46SRobert Mustacchi is == offset_past_last_locentry (from 5087*4d9fdb46SRobert Mustacchi dwarf_get_loclist_context_plus). 5088*4d9fdb46SRobert Mustacchi This only makes sense within those ranges. 5089*4d9fdb46SRobert Mustacchi This retrieves raw detail from the section, 5090*4d9fdb46SRobert Mustacchi no base values or anything are added. 5091*4d9fdb46SRobert Mustacchi So this returns raw individual entries 5092*4d9fdb46SRobert Mustacchi for a single loclist header, meaning a 5093*4d9fdb46SRobert Mustacchi a single Dwarf_Loclists_Context. 5094*4d9fdb46SRobert Mustacchi 5095*4d9fdb46SRobert Mustacchi This interface assumes there is no 5096*4d9fdb46SRobert Mustacchi segment selector. */ 5097*4d9fdb46SRobert Mustacchi int dwarf_get_loclist_raw_entry_detail(Dwarf_Debug /*dbg*/, 5098*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*entry_offset*/, 5099*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*entry_kind*/, 5100*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*entry_operand1*/, 5101*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*entry_operand2*/, 5102*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*next_entry_offset*/, 5103*4d9fdb46SRobert Mustacchi Dwarf_Error * /*err*/); 5104*4d9fdb46SRobert Mustacchi 5105*4d9fdb46SRobert Mustacchi /* If no error, returns DW_DLV_OK and sets 5106*4d9fdb46SRobert Mustacchi the entry length,kind, and operands through 5107*4d9fdb46SRobert Mustacchi the pointers. If any missing operands assign 5108*4d9fdb46SRobert Mustacchi zero back through tye operand pointers. */ 5109*4d9fdb46SRobert Mustacchi 5110*4d9fdb46SRobert Mustacchi int dwarf_get_loclist_lle( Dwarf_Debug /*dbg*/, 5111*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*contextnumber*/, 5112*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*entry_offset*/, 5113*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*endoffset*/, 5114*4d9fdb46SRobert Mustacchi unsigned int * /*entrylen*/, 5115*4d9fdb46SRobert Mustacchi unsigned int * /*entry_kind*/, 5116*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*entry_operand1*/, 5117*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*entry_operand2*/, 5118*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*expr_ops_blocksize*/, 5119*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*expr_ops_offset*/, 5120*4d9fdb46SRobert Mustacchi Dwarf_Small ** /*expr_opsdata*/, 5121*4d9fdb46SRobert Mustacchi Dwarf_Error * /*err*/); 5122*4d9fdb46SRobert Mustacchi 5123*4d9fdb46SRobert Mustacchi /* ======= END .debug_loclists interfaces. */ 5124*4d9fdb46SRobert Mustacchi 5125*4d9fdb46SRobert Mustacchi /* New April 2018. 5126*4d9fdb46SRobert Mustacchi Allows applications to print the .debug_str_offsets 5127*4d9fdb46SRobert Mustacchi section. 5128*4d9fdb46SRobert Mustacchi Beginning at starting_offset zero, 5129*4d9fdb46SRobert Mustacchi returns data about the first table found. 5130*4d9fdb46SRobert Mustacchi The value *next_table_offset is the value 5131*4d9fdb46SRobert Mustacchi of the next table (if any), one byte past 5132*4d9fdb46SRobert Mustacchi the end of the table whose data is returned.. 5133*4d9fdb46SRobert Mustacchi Returns DW_DLV_NO_ENTRY if the starting offset 5134*4d9fdb46SRobert Mustacchi is past the end of valid data. 5135*4d9fdb46SRobert Mustacchi 5136*4d9fdb46SRobert Mustacchi There is no guarantee that there are no non-0 nonsense 5137*4d9fdb46SRobert Mustacchi bytes in the section outside of useful tables, 5138*4d9fdb46SRobert Mustacchi so this can fail and return nonsense or 5139*4d9fdb46SRobert Mustacchi DW_DLV_ERROR if such garbage exists. 5140*4d9fdb46SRobert Mustacchi */ 5141*4d9fdb46SRobert Mustacchi 5142*4d9fdb46SRobert Mustacchi struct Dwarf_Str_Offsets_Table_s; 5143*4d9fdb46SRobert Mustacchi typedef struct Dwarf_Str_Offsets_Table_s * Dwarf_Str_Offsets_Table; 5144*4d9fdb46SRobert Mustacchi 5145*4d9fdb46SRobert Mustacchi /* Allocates a struct Dwarf_Str_Offsets_Table_s for the section 5146*4d9fdb46SRobert Mustacchi and returns DW_DLV_OK and sets a pointer to the struct through 5147*4d9fdb46SRobert Mustacchi the table_data pointer if successful. 5148*4d9fdb46SRobert Mustacchi 5149*4d9fdb46SRobert Mustacchi If there is no such section it returns DW_DLV_NO_ENTRY. */ 5150*4d9fdb46SRobert Mustacchi int dwarf_open_str_offsets_table_access(Dwarf_Debug /*dbg*/, 5151*4d9fdb46SRobert Mustacchi Dwarf_Str_Offsets_Table * /*table_data*/, 5152*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 5153*4d9fdb46SRobert Mustacchi 5154*4d9fdb46SRobert Mustacchi /* Close access, free table_data. */ 5155*4d9fdb46SRobert Mustacchi int dwarf_close_str_offsets_table_access( 5156*4d9fdb46SRobert Mustacchi Dwarf_Str_Offsets_Table /*table_data*/, 5157*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 5158*4d9fdb46SRobert Mustacchi 5159*4d9fdb46SRobert Mustacchi /* Call till it returns DW_DLV_NO_ENTRY (normal end) 5160*4d9fdb46SRobert Mustacchi or DW_DLV_ERROR (error) and stop. 5161*4d9fdb46SRobert Mustacchi 5162*4d9fdb46SRobert Mustacchi On successful call, call dwarf_str_offsets_table_entry() 5163*4d9fdb46SRobert Mustacchi to get the individual table values on the now-active table. */ 5164*4d9fdb46SRobert Mustacchi int dwarf_next_str_offsets_table( Dwarf_Str_Offsets_Table /*table_data*/, 5165*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*unit_length*/, 5166*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*unit_length_offset*/, 5167*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*table_start_offset*/, 5168*4d9fdb46SRobert Mustacchi Dwarf_Half * /*entry_size*/, 5169*4d9fdb46SRobert Mustacchi Dwarf_Half * /*version*/, 5170*4d9fdb46SRobert Mustacchi Dwarf_Half * /*padding*/, 5171*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*table_value_count*/, 5172*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 5173*4d9fdb46SRobert Mustacchi 5174*4d9fdb46SRobert Mustacchi /* Valid index values n: 0 <= n < table_entry_count 5175*4d9fdb46SRobert Mustacchi for the active table */ 5176*4d9fdb46SRobert Mustacchi int dwarf_str_offsets_value_by_index(Dwarf_Str_Offsets_Table /*table_data*/, 5177*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*index_to_entry*/, 5178*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*entry_value*/, 5179*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 5180*4d9fdb46SRobert Mustacchi 5181*4d9fdb46SRobert Mustacchi /* After all str_offsets read this reports final 5182*4d9fdb46SRobert Mustacchi wasted-bytes count. */ 5183*4d9fdb46SRobert Mustacchi int dwarf_str_offsets_statistics(Dwarf_Str_Offsets_Table /*table_data*/, 5184*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*wasted_byte_count*/, 5185*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*table_count*/, 5186*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 5187*4d9fdb46SRobert Mustacchi 5188bc1f688bSRobert Mustacchi /* The harmless error list is a circular buffer of 5189bc1f688bSRobert Mustacchi errors we note but which do not stop us from processing 5190bc1f688bSRobert Mustacchi the object. Created so dwarfdump or other tools 5191bc1f688bSRobert Mustacchi can report such inconsequential errors without causing 5192bc1f688bSRobert Mustacchi anything to stop early. */ 5193bc1f688bSRobert Mustacchi #define DW_HARMLESS_ERROR_CIRCULAR_LIST_DEFAULT_SIZE 4 5194*4d9fdb46SRobert Mustacchi #define DW_HARMLESS_ERROR_MSG_STRING_SIZE 300 5195bc1f688bSRobert Mustacchi /* User code supplies size of array of pointers errmsg_ptrs_array 5196bc1f688bSRobert Mustacchi in count and the array of pointers (the pointers themselves 5197bc1f688bSRobert Mustacchi need not be initialized). 5198bc1f688bSRobert Mustacchi The pointers returned in the array of pointers 5199bc1f688bSRobert Mustacchi are invalidated by ANY call to libdwarf. 5200bc1f688bSRobert Mustacchi Use them before making another libdwarf call! 5201bc1f688bSRobert Mustacchi The array of string pointers passed in always has 5202bc1f688bSRobert Mustacchi a final null pointer, so if there are N pointers the 5203bc1f688bSRobert Mustacchi and M actual strings, then MIN(M,N-1) pointers are 5204bc1f688bSRobert Mustacchi set to point to error strings. The array of pointers 5205bc1f688bSRobert Mustacchi to strings always terminates with a NULL pointer. 5206bc1f688bSRobert Mustacchi If 'count' is passed in zero then errmsg_ptrs_array 5207bc1f688bSRobert Mustacchi is not touched. 5208bc1f688bSRobert Mustacchi 5209bc1f688bSRobert Mustacchi The function returns DW_DLV_NO_ENTRY if no harmless errors 5210bc1f688bSRobert Mustacchi were noted so far. Returns DW_DLV_OK if there are errors. 5211bc1f688bSRobert Mustacchi Never returns DW_DLV_ERROR. 5212bc1f688bSRobert Mustacchi 5213bc1f688bSRobert Mustacchi Each call empties the error list (discarding all current entries). 5214bc1f688bSRobert Mustacchi If newerr_count is non-NULL the count of harmless errors 5215bc1f688bSRobert Mustacchi since the last call is returned through the pointer 5216bc1f688bSRobert Mustacchi (some may have been discarded or not returned, it is a circular 5217bc1f688bSRobert Mustacchi list...). 5218bc1f688bSRobert Mustacchi If DW_DLV_NO_ENTRY is returned none of the arguments 5219bc1f688bSRobert Mustacchi here are touched or used. 5220bc1f688bSRobert Mustacchi */ 5221bc1f688bSRobert Mustacchi int dwarf_get_harmless_error_list(Dwarf_Debug /*dbg*/, 5222*4d9fdb46SRobert Mustacchi unsigned int /*count*/, 5223bc1f688bSRobert Mustacchi const char ** /*errmsg_ptrs_array*/, 5224*4d9fdb46SRobert Mustacchi unsigned int * /*newerr_count*/); 5225bc1f688bSRobert Mustacchi 5226bc1f688bSRobert Mustacchi /* Insertion is only for testing the harmless error code, it is not 5227bc1f688bSRobert Mustacchi necessarily useful otherwise. */ 5228bc1f688bSRobert Mustacchi void dwarf_insert_harmless_error(Dwarf_Debug /*dbg*/, 5229bc1f688bSRobert Mustacchi char * /*newerror*/); 5230bc1f688bSRobert Mustacchi 5231bc1f688bSRobert Mustacchi /* The size of the circular list of strings may be set 5232bc1f688bSRobert Mustacchi and reset as needed. If it is shortened excess 5233bc1f688bSRobert Mustacchi messages are simply dropped. It returns the previous 5234bc1f688bSRobert Mustacchi size. If zero passed in the size is unchanged 5235bc1f688bSRobert Mustacchi and it simply returns the current size */ 5236*4d9fdb46SRobert Mustacchi unsigned int dwarf_set_harmless_error_list_size(Dwarf_Debug /*dbg*/, 5237*4d9fdb46SRobert Mustacchi unsigned int /*maxcount*/); 5238bc1f688bSRobert Mustacchi /* The harmless error strings (if any) are freed when the dbg 5239bc1f688bSRobert Mustacchi is dwarf_finish()ed. */ 5240bc1f688bSRobert Mustacchi 5241bc1f688bSRobert Mustacchi /* When the val_in is known these dwarf_get_TAG_name (etc) 5242bc1f688bSRobert Mustacchi functions return the string corresponding to the val_in passed in 5243bc1f688bSRobert Mustacchi through the pointer s_out and the value returned is DW_DLV_OK. 5244bc1f688bSRobert Mustacchi The strings are in static storage 5245bc1f688bSRobert Mustacchi and must not be freed. 5246bc1f688bSRobert Mustacchi If DW_DLV_NO_ENTRY is returned the val_in is not known and 5247bc1f688bSRobert Mustacchi *s_out is not set. DW_DLV_ERROR is never returned.*/ 5248bc1f688bSRobert Mustacchi 5249*4d9fdb46SRobert Mustacchi /* The following copied from a generated dwarf_names.h */ 5250*4d9fdb46SRobert Mustacchi 5251*4d9fdb46SRobert Mustacchi /* BEGIN FILE */ 5252bc1f688bSRobert Mustacchi extern int dwarf_get_ACCESS_name(unsigned int /*val_in*/, const char ** /*s_out */); 5253bc1f688bSRobert Mustacchi extern int dwarf_get_ADDR_name(unsigned int /*val_in*/, const char ** /*s_out */); 5254*4d9fdb46SRobert Mustacchi extern int dwarf_get_ATCF_name(unsigned int /*val_in*/, const char ** /*s_out */); 5255*4d9fdb46SRobert Mustacchi extern int dwarf_get_ATE_name(unsigned int /*val_in*/, const char ** /*s_out */); 5256*4d9fdb46SRobert Mustacchi extern int dwarf_get_AT_name(unsigned int /*val_in*/, const char ** /*s_out */); 5257*4d9fdb46SRobert Mustacchi extern int dwarf_get_CC_name(unsigned int /*val_in*/, const char ** /*s_out */); 5258*4d9fdb46SRobert Mustacchi extern int dwarf_get_CFA_name(unsigned int /*val_in*/, const char ** /*s_out */); 5259*4d9fdb46SRobert Mustacchi extern int dwarf_get_children_name(unsigned int /*val_in*/, const char ** /*s_out */); 5260*4d9fdb46SRobert Mustacchi extern int dwarf_get_CHILDREN_name(unsigned int /*val_in*/, const char ** /*s_out */); 5261*4d9fdb46SRobert Mustacchi extern int dwarf_get_DEFAULTED_name(unsigned int /*val_in*/, const char ** /*s_out */); 5262*4d9fdb46SRobert Mustacchi extern int dwarf_get_DSC_name(unsigned int /*val_in*/, const char ** /*s_out */); 5263*4d9fdb46SRobert Mustacchi extern int dwarf_get_DS_name(unsigned int /*val_in*/, const char ** /*s_out */); 5264*4d9fdb46SRobert Mustacchi extern int dwarf_get_EH_name(unsigned int /*val_in*/, const char ** /*s_out */); 5265*4d9fdb46SRobert Mustacchi extern int dwarf_get_END_name(unsigned int /*val_in*/, const char ** /*s_out */); 5266*4d9fdb46SRobert Mustacchi extern int dwarf_get_FORM_name(unsigned int /*val_in*/, const char ** /*s_out */); 5267*4d9fdb46SRobert Mustacchi extern int dwarf_get_FRAME_name(unsigned int /*val_in*/, const char ** /*s_out */); 5268*4d9fdb46SRobert Mustacchi extern int dwarf_get_ID_name(unsigned int /*val_in*/, const char ** /*s_out */); 5269*4d9fdb46SRobert Mustacchi extern int dwarf_get_IDX_name(unsigned int /*val_in*/, const char ** /*s_out */); 5270*4d9fdb46SRobert Mustacchi extern int dwarf_get_INL_name(unsigned int /*val_in*/, const char ** /*s_out */); 5271*4d9fdb46SRobert Mustacchi extern int dwarf_get_ISA_name(unsigned int /*val_in*/, const char ** /*s_out */); 5272*4d9fdb46SRobert Mustacchi extern int dwarf_get_LANG_name(unsigned int /*val_in*/, const char ** /*s_out */); 5273*4d9fdb46SRobert Mustacchi extern int dwarf_get_LLE_name(unsigned int /*val_in*/, const char ** /*s_out */); 5274*4d9fdb46SRobert Mustacchi /* dwarf_get_LLEX_name is likely just temporary. Not standard. */ 5275*4d9fdb46SRobert Mustacchi extern int dwarf_get_LLEX_name(unsigned int /*val_in*/, const char ** /*s_out */); 5276*4d9fdb46SRobert Mustacchi extern int dwarf_get_LNCT_name(unsigned int /*val_in*/, const char ** /*s_out */); 5277*4d9fdb46SRobert Mustacchi extern int dwarf_get_LNE_name(unsigned int /*val_in*/, const char ** /*s_out */); 5278*4d9fdb46SRobert Mustacchi extern int dwarf_get_LNS_name(unsigned int /*val_in*/, const char ** /*s_out */); 5279*4d9fdb46SRobert Mustacchi extern int dwarf_get_MACINFO_name(unsigned int /*val_in*/, const char ** /*s_out */); 5280*4d9fdb46SRobert Mustacchi extern int dwarf_get_MACRO_name(unsigned int /*val_in*/, const char ** /*s_out */); 5281*4d9fdb46SRobert Mustacchi extern int dwarf_get_OP_name(unsigned int /*val_in*/, const char ** /*s_out */); 5282*4d9fdb46SRobert Mustacchi extern int dwarf_get_ORD_name(unsigned int /*val_in*/, const char ** /*s_out */); 5283*4d9fdb46SRobert Mustacchi extern int dwarf_get_RLE_name(unsigned int /*val_in*/, const char ** /*s_out */); 5284*4d9fdb46SRobert Mustacchi extern int dwarf_get_SECT_name(unsigned int /*val_in*/, const char ** /*s_out */); 5285*4d9fdb46SRobert Mustacchi extern int dwarf_get_TAG_name(unsigned int /*val_in*/, const char ** /*s_out */); 5286*4d9fdb46SRobert Mustacchi extern int dwarf_get_UT_name(unsigned int /*val_in*/, const char ** /*s_out */); 5287*4d9fdb46SRobert Mustacchi extern int dwarf_get_VIRTUALITY_name(unsigned int /*val_in*/, const char ** /*s_out */); 5288*4d9fdb46SRobert Mustacchi extern int dwarf_get_VIS_name(unsigned int /*val_in*/, const char ** /*s_out */); 5289*4d9fdb46SRobert Mustacchi /* END FILE */ 5290*4d9fdb46SRobert Mustacchi 5291*4d9fdb46SRobert Mustacchi /* Convert local offset into global offset */ 5292*4d9fdb46SRobert Mustacchi int dwarf_convert_to_global_offset(Dwarf_Attribute /*attr*/, 5293*4d9fdb46SRobert Mustacchi Dwarf_Off /*offset*/, 5294*4d9fdb46SRobert Mustacchi Dwarf_Off* /*ret_offset*/, 5295*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 5296*4d9fdb46SRobert Mustacchi 5297*4d9fdb46SRobert Mustacchi /* Get both offsets (local and global) */ 5298*4d9fdb46SRobert Mustacchi int dwarf_die_offsets(Dwarf_Die /*die*/, 5299*4d9fdb46SRobert Mustacchi Dwarf_Off* /*global_offset*/, 5300*4d9fdb46SRobert Mustacchi Dwarf_Off* /*local_offset*/, 5301*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 5302*4d9fdb46SRobert Mustacchi 5303*4d9fdb46SRobert Mustacchi /* Giving a section name, get its size and address */ 5304*4d9fdb46SRobert Mustacchi int dwarf_get_section_info_by_name(Dwarf_Debug /*dbg*/, 5305*4d9fdb46SRobert Mustacchi const char * /*section_name*/, 5306*4d9fdb46SRobert Mustacchi Dwarf_Addr* /*section_addr*/, 5307*4d9fdb46SRobert Mustacchi Dwarf_Unsigned* /*section_size*/, 5308*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 5309*4d9fdb46SRobert Mustacchi 5310*4d9fdb46SRobert Mustacchi /* Giving a section index, get its size and address */ 5311*4d9fdb46SRobert Mustacchi int dwarf_get_section_info_by_index(Dwarf_Debug /*dbg*/, 5312*4d9fdb46SRobert Mustacchi int /*section_index*/, 5313*4d9fdb46SRobert Mustacchi const char ** /*section_name*/, 5314*4d9fdb46SRobert Mustacchi Dwarf_Addr* /*section_addr*/, 5315*4d9fdb46SRobert Mustacchi Dwarf_Unsigned* /*section_size*/, 5316*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 5317*4d9fdb46SRobert Mustacchi 5318*4d9fdb46SRobert Mustacchi /* Get section count, of object file sections. */ 5319*4d9fdb46SRobert Mustacchi int dwarf_get_section_count(Dwarf_Debug /*dbg*/); 5320*4d9fdb46SRobert Mustacchi 5321*4d9fdb46SRobert Mustacchi /* Get the version and offset size of a CU context. 5322*4d9fdb46SRobert Mustacchi This is useful as a precursor to 5323*4d9fdb46SRobert Mustacchi calling dwarf_get_form_class() at times. */ 5324*4d9fdb46SRobert Mustacchi int dwarf_get_version_of_die(Dwarf_Die /*die*/, 5325*4d9fdb46SRobert Mustacchi Dwarf_Half * /*version*/, 5326*4d9fdb46SRobert Mustacchi Dwarf_Half * /*offset_size*/); 5327*4d9fdb46SRobert Mustacchi 5328*4d9fdb46SRobert Mustacchi int dwarf_discr_list(Dwarf_Debug /*dbg*/, 5329*4d9fdb46SRobert Mustacchi Dwarf_Small * /*blockpointer*/, 5330*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*blocklen*/, 5331*4d9fdb46SRobert Mustacchi Dwarf_Dsc_Head * /*dsc_head_out*/, 5332*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*dsc_array_length_out*/, 5333*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 5334*4d9fdb46SRobert Mustacchi 5335*4d9fdb46SRobert Mustacchi /* NEW September 2016. Allows easy access to DW_AT_discr_list 5336*4d9fdb46SRobert Mustacchi entry. Callers must know which is the appropriate 5337*4d9fdb46SRobert Mustacchi one of the following two interfaces, though both 5338*4d9fdb46SRobert Mustacchi will work. */ 5339*4d9fdb46SRobert Mustacchi int dwarf_discr_entry_u(Dwarf_Dsc_Head /* dsc */, 5340*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*entrynum*/, 5341*4d9fdb46SRobert Mustacchi Dwarf_Half * /*out_type*/, 5342*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*out_discr_low*/, 5343*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*out_discr_high*/, 5344*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 5345*4d9fdb46SRobert Mustacchi 5346*4d9fdb46SRobert Mustacchi /* NEW September 2016. Allows easy access to DW_AT_discr_list 5347*4d9fdb46SRobert Mustacchi entry. */ 5348*4d9fdb46SRobert Mustacchi int dwarf_discr_entry_s(Dwarf_Dsc_Head /* dsc */, 5349*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*entrynum*/, 5350*4d9fdb46SRobert Mustacchi Dwarf_Half * /*out_type*/, 5351*4d9fdb46SRobert Mustacchi Dwarf_Signed * /*out_discr_low*/, 5352*4d9fdb46SRobert Mustacchi Dwarf_Signed * /*out_discr_high*/, 5353*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 5354*4d9fdb46SRobert Mustacchi 5355*4d9fdb46SRobert Mustacchi /* New May 2017. So users can find out what groups (dwo or COMDAT) 5356*4d9fdb46SRobert Mustacchi are in the object and how much to allocate so one can get the 5357*4d9fdb46SRobert Mustacchi group-section map data. */ 5358*4d9fdb46SRobert Mustacchi int dwarf_sec_group_sizes(Dwarf_Debug /*dbg*/, 5359*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*section_count_out*/, 5360*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*group_count_out*/, 5361*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*selected_group_out*/, 5362*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*map_entry_count_out*/, 5363*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 5364*4d9fdb46SRobert Mustacchi 5365*4d9fdb46SRobert Mustacchi /* New May 2017. Reveals the map between group numbers and section numbers. 5366*4d9fdb46SRobert Mustacchi Caller must allocate the arrays with space for 'map_entry_count' 5367*4d9fdb46SRobert Mustacchi values and this function fills in the array entries. 5368*4d9fdb46SRobert Mustacchi Output ordered by group number and section number. 5369*4d9fdb46SRobert Mustacchi */ 5370*4d9fdb46SRobert Mustacchi int dwarf_sec_group_map(Dwarf_Debug /*dbg*/, 5371*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*map_entry_count*/, 5372*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*group_numbers_array*/, 5373*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*sec_numbers_array*/, 5374*4d9fdb46SRobert Mustacchi const char ** /*sec_names_array*/, 5375*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 5376*4d9fdb46SRobert Mustacchi 5377*4d9fdb46SRobert Mustacchi /* dwarf_get_endian_copy_function new. December 2019. */ 5378*4d9fdb46SRobert Mustacchi void (*dwarf_get_endian_copy_function(Dwarf_Debug /*dbg*/))(void *, const void * /*src*/, unsigned long /*srclen*/); 5379*4d9fdb46SRobert Mustacchi 5380*4d9fdb46SRobert Mustacchi /* These make the LEB encoding routines visible to libdwarf 5381*4d9fdb46SRobert Mustacchi callers. Added November, 2012. */ 5382*4d9fdb46SRobert Mustacchi int dwarf_encode_leb128(Dwarf_Unsigned /*val*/, 5383*4d9fdb46SRobert Mustacchi int * /*nbytes*/, 5384*4d9fdb46SRobert Mustacchi char * /*space*/, 5385*4d9fdb46SRobert Mustacchi int /*splen*/); 5386*4d9fdb46SRobert Mustacchi int dwarf_encode_signed_leb128(Dwarf_Signed /*val*/, 5387*4d9fdb46SRobert Mustacchi int * /*nbytes*/, 5388*4d9fdb46SRobert Mustacchi char * /*space*/, 5389*4d9fdb46SRobert Mustacchi int /*splen*/); 5390*4d9fdb46SRobert Mustacchi 5391*4d9fdb46SRobert Mustacchi /* Record some application command line options in libdwarf. 5392*4d9fdb46SRobert Mustacchi This is not arc/argv processing, just precooked setting 5393*4d9fdb46SRobert Mustacchi of a flag in libdwarf based on something the application 5394*4d9fdb46SRobert Mustacchi wants. check_verbose_mode of TRUE means do more checking 5395*4d9fdb46SRobert Mustacchi and sometimes print errors (from libdwarf). 5396*4d9fdb46SRobert Mustacchi Not restricted to a single Dwarf_Debug, it applies 5397*4d9fdb46SRobert Mustacchi to the libdwarf the executable is using. 5398*4d9fdb46SRobert Mustacchi */ 5399*4d9fdb46SRobert Mustacchi typedef struct { 5400*4d9fdb46SRobert Mustacchi Dwarf_Bool check_verbose_mode; 5401*4d9fdb46SRobert Mustacchi } Dwarf_Cmdline_Options; 5402*4d9fdb46SRobert Mustacchi extern Dwarf_Cmdline_Options dwarf_cmdline_options; 5403*4d9fdb46SRobert Mustacchi 5404*4d9fdb46SRobert Mustacchi /* Set libdwarf to reflect some application command line options. */ 5405*4d9fdb46SRobert Mustacchi void dwarf_record_cmdline_options(Dwarf_Cmdline_Options /*options*/); 5406*4d9fdb46SRobert Mustacchi 5407*4d9fdb46SRobert Mustacchi int dwarf_pro_get_string_stats(Dwarf_P_Debug /*dbg*/, 5408*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*str_count*/, 5409*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*str_total_length*/, 5410*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*count_debug_str*/, 5411*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*len_debug_str*/, 5412*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*reused_count*/, 5413*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*reused_len*/, 5414*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 5415*4d9fdb46SRobert Mustacchi 5416*4d9fdb46SRobert Mustacchi #ifndef DW_FTYPE_UNKNOWN 5417*4d9fdb46SRobert Mustacchi #define DW_FTYPE_UNKNOWN 0 5418*4d9fdb46SRobert Mustacchi #define DW_FTYPE_ELF 1 /* Unix/Linux/etc */ 5419*4d9fdb46SRobert Mustacchi #define DW_FTYPE_MACH_O 2 /* MacOS. */ 5420*4d9fdb46SRobert Mustacchi #define DW_FTYPE_PE 3 /* Windows */ 5421*4d9fdb46SRobert Mustacchi #define DW_FTYPE_ARCHIVE 4 /* unix archive */ 5422*4d9fdb46SRobert Mustacchi #define DW_FTYPE_CUSTOM_ELF 5 /* Custom ELF format. Ignore this. */ 5423*4d9fdb46SRobert Mustacchi #endif /* DW_FTYPE_UNKNOWN */ 5424*4d9fdb46SRobert Mustacchi 5425*4d9fdb46SRobert Mustacchi #ifndef DW_ENDIAN_UNKNOWN 5426*4d9fdb46SRobert Mustacchi #define DW_ENDIAN_UNKNOWN 0 5427*4d9fdb46SRobert Mustacchi #define DW_ENDIAN_BIG 1 5428*4d9fdb46SRobert Mustacchi #define DW_ENDIAN_LITTLE 2 5429*4d9fdb46SRobert Mustacchi #endif /* DW_ENDIAN_UNKNOWN */ 5430*4d9fdb46SRobert Mustacchi 5431*4d9fdb46SRobert Mustacchi /* Defined March 7 2020. Allows a caller to 5432*4d9fdb46SRobert Mustacchi avoid most tracking by the de_alloc_tree hash 5433*4d9fdb46SRobert Mustacchi table if called with v of zero. 5434*4d9fdb46SRobert Mustacchi Returns the value the flag was before this call. */ 5435*4d9fdb46SRobert Mustacchi int dwarf_set_de_alloc_flag(int v); 5436*4d9fdb46SRobert Mustacchi 5437*4d9fdb46SRobert Mustacchi int dwarf_object_detector_path(const char *path, 5438*4d9fdb46SRobert Mustacchi char *outpath, 5439*4d9fdb46SRobert Mustacchi unsigned long, 5440*4d9fdb46SRobert Mustacchi unsigned int * ftype, 5441*4d9fdb46SRobert Mustacchi unsigned int * endian, 5442*4d9fdb46SRobert Mustacchi unsigned int * offsetsize, 5443*4d9fdb46SRobert Mustacchi Dwarf_Unsigned *filesize, 5444*4d9fdb46SRobert Mustacchi int * errcode); 5445*4d9fdb46SRobert Mustacchi 5446*4d9fdb46SRobert Mustacchi int dwarf_object_detector_fd(int fd, 5447*4d9fdb46SRobert Mustacchi unsigned int *ftype, 5448*4d9fdb46SRobert Mustacchi unsigned int *endian, 5449*4d9fdb46SRobert Mustacchi unsigned int *offsetsize, 5450*4d9fdb46SRobert Mustacchi Dwarf_Unsigned *filesize, 5451*4d9fdb46SRobert Mustacchi int * errcode); 5452bc1f688bSRobert Mustacchi 5453bc1f688bSRobert Mustacchi #ifdef __cplusplus 5454bc1f688bSRobert Mustacchi } 5455bc1f688bSRobert Mustacchi #endif 5456bc1f688bSRobert Mustacchi #endif /* _LIBDWARF_H */ 5457