1*4d9fdb46SRobert Mustacchi/* 2*4d9fdb46SRobert Mustacchi 3*4d9fdb46SRobert Mustacchi Copyright (C) 2000-2010 Silicon Graphics, Inc. All Rights Reserved. 4*4d9fdb46SRobert Mustacchi Portions Copyright 2007-2010 Sun Microsystems, Inc. All rights reserved. 5*4d9fdb46SRobert Mustacchi Portions Copyright 2008-2018 David Anderson. All rights reserved. 6*4d9fdb46SRobert Mustacchi Portions Copyright 2008-2010 Arxan Technologies, Inc. All rights reserved. 7*4d9fdb46SRobert Mustacchi Portions Copyright 2010-2012 SN Systems Ltd. All rights reserved. 8*4d9fdb46SRobert 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. 13*4d9fdb46SRobert 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. 18*4d9fdb46SRobert 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. 26*4d9fdb46SRobert 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. 31*4d9fdb46SRobert Mustacchi 32*4d9fdb46SRobert Mustacchi*/ 33*4d9fdb46SRobert Mustacchi 34*4d9fdb46SRobert Mustacchi 35*4d9fdb46SRobert Mustacchi#ifndef _LIBDWARF_H 36*4d9fdb46SRobert Mustacchi#define _LIBDWARF_H 37*4d9fdb46SRobert Mustacchi#ifdef __cplusplus 38*4d9fdb46SRobert Mustacchiextern "C" { 39*4d9fdb46SRobert Mustacchi#endif 40*4d9fdb46SRobert Mustacchi/* 41*4d9fdb46SRobert Mustacchi libdwarf.h 42*4d9fdb46SRobert Mustacchi $Revision: #9 $ $Date: 2008/01/17 $ 43*4d9fdb46SRobert Mustacchi 44*4d9fdb46SRobert Mustacchi For libdwarf producers and consumers 45*4d9fdb46SRobert Mustacchi 46*4d9fdb46SRobert Mustacchi The interface is defined as having 8-byte signed and unsigned 47*4d9fdb46SRobert 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 49*4d9fdb46SRobert Mustacchi the host machine (not the target!). 50*4d9fdb46SRobert Mustacchi 51*4d9fdb46SRobert Mustacchi This contains declarations for types and all producer 52*4d9fdb46SRobert Mustacchi and consumer functions. 53*4d9fdb46SRobert Mustacchi 54*4d9fdb46SRobert Mustacchi Function declarations are written on a single line each here 55*4d9fdb46SRobert Mustacchi so one can use grep to each declaration in its entirety. 56*4d9fdb46SRobert Mustacchi The declarations are a little harder to read this way, but... 57*4d9fdb46SRobert 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 64*4d9fdb46SRobert Mustacchi*/ 65*4d9fdb46SRobert Mustacchi 66*4d9fdb46SRobert Mustacchistruct Elf; 67*4d9fdb46SRobert Mustacchitypedef struct Elf* dwarf_elf_handle; 68*4d9fdb46SRobert Mustacchi 69*4d9fdb46SRobert 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. 73*4d9fdb46SRobert Mustacchi*/ 74*4d9fdb46SRobert Mustacchi/*#define DW_PR_XZEROS "" */ 75*4d9fdb46SRobert Mustacchi#define DW_PR_XZEROS "08" 76*4d9fdb46SRobert Mustacchi 77*4d9fdb46SRobert Mustacchitypedef unsigned long long Dwarf_Unsigned; 78*4d9fdb46SRobert Mustacchitypedef signed long long Dwarf_Signed; 79*4d9fdb46SRobert Mustacchitypedef unsigned long long Dwarf_Off; 80*4d9fdb46SRobert Mustacchitypedef unsigned long long Dwarf_Addr; 81*4d9fdb46SRobert Mustacchitypedef int Dwarf_Bool; /* boolean type */ 82*4d9fdb46SRobert Mustacchitypedef unsigned short Dwarf_Half; /* 2 byte unsigned value */ 83*4d9fdb46SRobert Mustacchitypedef 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) 88*4d9fdb46SRobert Mustacchi#define DW_PR_DUx "I64x" 89*4d9fdb46SRobert Mustacchi#define DW_PR_DSx "I64x" 90*4d9fdb46SRobert Mustacchi#define DW_PR_DUu "I64u" 91*4d9fdb46SRobert 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 */ 98*4d9fdb46SRobert Mustacchi 99*4d9fdb46SRobert Mustacchitypedef void* Dwarf_Ptr; /* host machine pointer */ 100*4d9fdb46SRobert 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 Mustacchitypedef 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 114*4d9fdb46SRobert Mustacchi is 8 bytes of a signature one would use to find 115*4d9fdb46SRobert 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. 120*4d9fdb46SRobert Mustacchi*/ 121*4d9fdb46SRobert Mustacchistruct Dwarf_Sig8_s { 122*4d9fdb46SRobert Mustacchi char signature[8]; 123*4d9fdb46SRobert Mustacchi}; 124*4d9fdb46SRobert Mustacchitypedef struct Dwarf_Sig8_s Dwarf_Sig8; 125*4d9fdb46SRobert Mustacchi 126*4d9fdb46SRobert 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<>. 129*4d9fdb46SRobert Mustacchi*/ 130*4d9fdb46SRobert Mustacchitypedef struct { 131*4d9fdb46SRobert Mustacchi Dwarf_Unsigned bl_len; /* length of block bl_data points at */ 132*4d9fdb46SRobert 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; 139*4d9fdb46SRobert Mustacchi} Dwarf_Block; 140*4d9fdb46SRobert Mustacchi 141*4d9fdb46SRobert 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 Mustacchistruct Dwarf_Locdesc_c_s; 146*4d9fdb46SRobert Mustacchitypedef 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 Mustacchistruct Dwarf_Loc_Head_c_s; 153*4d9fdb46SRobert Mustacchitypedef 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 Mustacchistruct Dwarf_Macro_Context_s; 157*4d9fdb46SRobert Mustacchitypedef 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 Mustacchitypedef 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. */ 169*4d9fdb46SRobert Mustacchitypedef struct { 170*4d9fdb46SRobert Mustacchi Dwarf_Small lr_atom; /* location operation */ 171*4d9fdb46SRobert Mustacchi Dwarf_Unsigned lr_number; /* operand */ 172*4d9fdb46SRobert Mustacchi Dwarf_Unsigned lr_number2; /* for OP_BREGx and DW_OP_GNU_const_type*/ 173*4d9fdb46SRobert Mustacchi Dwarf_Unsigned lr_offset; /* offset in locexpr for OP_BRA etc */ 174*4d9fdb46SRobert Mustacchi} Dwarf_Loc; 175*4d9fdb46SRobert Mustacchi 176*4d9fdb46SRobert 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. 194*4d9fdb46SRobert Mustacchi*/ 195*4d9fdb46SRobert Mustacchitypedef 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 204*4d9fdb46SRobert Mustacchi Dwarf_Half ld_cents; /* count of location records */ 205*4d9fdb46SRobert 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) */ 208*4d9fdb46SRobert Mustacchi Dwarf_Small ld_from_loclist; 209*4d9fdb46SRobert Mustacchi 210*4d9fdb46SRobert Mustacchi Dwarf_Unsigned ld_section_offset; /* Section (not CU) offset 211*4d9fdb46SRobert Mustacchi where loc-expr begins*/ 212*4d9fdb46SRobert Mustacchi} Dwarf_Locdesc; 213*4d9fdb46SRobert Mustacchi 214*4d9fdb46SRobert Mustacchi/* First appears in DWARF3, and only ranges entries exist. 215*4d9fdb46SRobert Mustacchi The dwr_addr1/addr2 data is either an offset (DW_RANGES_ENTRY) 216*4d9fdb46SRobert Mustacchi or an address (dwr_addr2 in DW_RANGES_ADDRESS_SELECTION) or 217*4d9fdb46SRobert 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. 221*4d9fdb46SRobert Mustacchi*/ 222*4d9fdb46SRobert Mustacchienum Dwarf_Ranges_Entry_Type { DW_RANGES_ENTRY, 223*4d9fdb46SRobert Mustacchi DW_RANGES_ADDRESS_SELECTION, 224*4d9fdb46SRobert Mustacchi DW_RANGES_END 225*4d9fdb46SRobert Mustacchi}; 226*4d9fdb46SRobert Mustacchitypedef struct { 227*4d9fdb46SRobert Mustacchi Dwarf_Addr dwr_addr1; 228*4d9fdb46SRobert Mustacchi Dwarf_Addr dwr_addr2; 229*4d9fdb46SRobert Mustacchi enum Dwarf_Ranges_Entry_Type dwr_type; 230*4d9fdb46SRobert Mustacchi} Dwarf_Ranges; 231*4d9fdb46SRobert Mustacchi 232*4d9fdb46SRobert Mustacchi/* Frame description instructions expanded. 233*4d9fdb46SRobert Mustacchi*/ 234*4d9fdb46SRobert Mustacchitypedef struct { 235*4d9fdb46SRobert Mustacchi Dwarf_Small fp_base_op; 236*4d9fdb46SRobert Mustacchi Dwarf_Small fp_extended_op; 237*4d9fdb46SRobert Mustacchi Dwarf_Half fp_register; 238*4d9fdb46SRobert Mustacchi 239*4d9fdb46SRobert Mustacchi /* Value may be signed, depends on op. 240*4d9fdb46SRobert Mustacchi Any applicable data_alignment_factor has 241*4d9fdb46SRobert Mustacchi not been applied, this is the raw offset. */ 242*4d9fdb46SRobert Mustacchi Dwarf_Unsigned fp_offset; 243*4d9fdb46SRobert Mustacchi Dwarf_Off fp_instr_offset; 244*4d9fdb46SRobert Mustacchi} Dwarf_Frame_Op; /* DWARF2 */ 245*4d9fdb46SRobert Mustacchi 246*4d9fdb46SRobert Mustacchi/* ***IMPORTANT NOTE, TARGET DEPENDENCY **** 247*4d9fdb46SRobert Mustacchi DW_REG_TABLE_SIZE must be at least as large as 248*4d9fdb46SRobert Mustacchi the number of registers 249*4d9fdb46SRobert Mustacchi (DW_FRAME_LAST_REG_NUM) as defined in dwarf.h 250*4d9fdb46SRobert Mustacchi Preferably identical to DW_FRAME_LAST_REG_NUM. 251*4d9fdb46SRobert Mustacchi Ensure [0-DW_REG_TABLE_SIZE] does not overlap 252*4d9fdb46SRobert Mustacchi DW_FRAME_UNDEFINED_VAL or DW_FRAME_SAME_VAL. 253*4d9fdb46SRobert Mustacchi Also ensure DW_FRAME_REG_INITIAL_VALUE is set to what 254*4d9fdb46SRobert Mustacchi is appropriate to your cpu. 255*4d9fdb46SRobert Mustacchi For various CPUs DW_FRAME_UNDEFINED_VAL is correct 256*4d9fdb46SRobert Mustacchi as the value for DW_FRAME_REG_INITIAL_VALUE. 257*4d9fdb46SRobert Mustacchi 258*4d9fdb46SRobert Mustacchi For consumer apps, this can be set dynamically: see 259*4d9fdb46SRobert Mustacchi dwarf_set_frame_rule_table_size(); */ 260*4d9fdb46SRobert Mustacchi#ifndef DW_REG_TABLE_SIZE 261*4d9fdb46SRobert Mustacchi#define DW_REG_TABLE_SIZE 66 262*4d9fdb46SRobert Mustacchi#endif 263*4d9fdb46SRobert Mustacchi 264*4d9fdb46SRobert Mustacchi/* For MIPS, DW_FRAME_SAME_VAL is the correct default value 265*4d9fdb46SRobert Mustacchi for a frame register value. For other CPUS another value 266*4d9fdb46SRobert Mustacchi may be better, such as DW_FRAME_UNDEFINED_VAL. 267*4d9fdb46SRobert Mustacchi See dwarf_set_frame_rule_table_size 268*4d9fdb46SRobert Mustacchi*/ 269*4d9fdb46SRobert Mustacchi#ifndef DW_FRAME_REG_INITIAL_VALUE 270*4d9fdb46SRobert Mustacchi#define DW_FRAME_REG_INITIAL_VALUE DW_FRAME_SAME_VAL 271*4d9fdb46SRobert Mustacchi#endif 272*4d9fdb46SRobert Mustacchi 273*4d9fdb46SRobert Mustacchi/* Taken as meaning 'undefined value', this is not 274*4d9fdb46SRobert Mustacchi a column or register number. 275*4d9fdb46SRobert Mustacchi Only present at libdwarf runtime in the consumer 276*4d9fdb46SRobert Mustacchi interfaces. Never on disk. 277*4d9fdb46SRobert Mustacchi DW_FRAME_* Values present on disk are in dwarf.h 278*4d9fdb46SRobert Mustacchi Ensure this is > DW_REG_TABLE_SIZE (the reg table 279*4d9fdb46SRobert Mustacchi size is changeable at runtime with the *reg3() interfaces, 280*4d9fdb46SRobert Mustacchi and this value must be greater than the reg table size). 281*4d9fdb46SRobert Mustacchi*/ 282*4d9fdb46SRobert Mustacchi#define DW_FRAME_UNDEFINED_VAL 1034 283*4d9fdb46SRobert Mustacchi 284*4d9fdb46SRobert Mustacchi/* Taken as meaning 'same value' as caller had, not a column 285*4d9fdb46SRobert Mustacchi or register number. 286*4d9fdb46SRobert Mustacchi Only present at libdwarf runtime in the consumer 287*4d9fdb46SRobert Mustacchi interfaces. Never on disk. 288*4d9fdb46SRobert Mustacchi DW_FRAME_* Values present on disk are in dwarf.h 289*4d9fdb46SRobert Mustacchi Ensure this is > DW_REG_TABLE_SIZE (the reg table 290*4d9fdb46SRobert Mustacchi size is changeable at runtime with the *reg3() interfaces, 291*4d9fdb46SRobert Mustacchi and this value must be greater than the reg table size). 292*4d9fdb46SRobert Mustacchi*/ 293*4d9fdb46SRobert Mustacchi#define DW_FRAME_SAME_VAL 1035 294*4d9fdb46SRobert Mustacchi 295*4d9fdb46SRobert Mustacchi/* For DWARF3 consumer interfaces, make the CFA a column with no 296*4d9fdb46SRobert Mustacchi real table number. This is what should have been done 297*4d9fdb46SRobert Mustacchi for the DWARF2 interfaces. This actually works for 298*4d9fdb46SRobert Mustacchi both DWARF2 and DWARF3, but see the libdwarf documentation 299*4d9fdb46SRobert Mustacchi on Dwarf_Regtable3 and dwarf_get_fde_info_for_reg3() 300*4d9fdb46SRobert Mustacchi and dwarf_get_fde_info_for_all_regs3() 301*4d9fdb46SRobert Mustacchi Do NOT use this with the older dwarf_get_fde_info_for_reg() 302*4d9fdb46SRobert Mustacchi or dwarf_get_fde_info_for_all_regs() consumer interfaces. 303*4d9fdb46SRobert Mustacchi Must be higher than any register count for *any* ABI 304*4d9fdb46SRobert Mustacchi (ensures maximum applicability with minimum effort). 305*4d9fdb46SRobert Mustacchi Ensure this is > DW_REG_TABLE_SIZE (the reg table 306*4d9fdb46SRobert Mustacchi size is changeable at runtime with the *reg3() interfaces, 307*4d9fdb46SRobert Mustacchi and this value must be greater than the reg table size). 308*4d9fdb46SRobert Mustacchi Only present at libdwarf runtime in the consumer 309*4d9fdb46SRobert Mustacchi interfaces. Never on disk. 310*4d9fdb46SRobert Mustacchi*/ 311*4d9fdb46SRobert Mustacchi#define DW_FRAME_CFA_COL3 1436 312*4d9fdb46SRobert Mustacchi 313*4d9fdb46SRobert Mustacchi/* The following are all needed to evaluate DWARF3 register rules. 314*4d9fdb46SRobert Mustacchi*/ 315*4d9fdb46SRobert Mustacchi#define DW_EXPR_OFFSET 0 /* DWARF2 only sees this. */ 316*4d9fdb46SRobert Mustacchi#define DW_EXPR_VAL_OFFSET 1 317*4d9fdb46SRobert Mustacchi#define DW_EXPR_EXPRESSION 2 318*4d9fdb46SRobert Mustacchi#define DW_EXPR_VAL_EXPRESSION 3 319*4d9fdb46SRobert Mustacchi 320*4d9fdb46SRobert Mustacchitypedef struct Dwarf_Regtable_Entry_s { 321*4d9fdb46SRobert Mustacchi /* For each index i (naming a hardware register with dwarf number 322*4d9fdb46SRobert Mustacchi i) the following is true and defines the value of that register: 323*4d9fdb46SRobert Mustacchi 324*4d9fdb46SRobert Mustacchi If dw_regnum is Register DW_FRAME_UNDEFINED_VAL 325*4d9fdb46SRobert Mustacchi it is not DWARF register number but 326*4d9fdb46SRobert Mustacchi a place holder indicating the register has no defined value. 327*4d9fdb46SRobert Mustacchi If dw_regnum is Register DW_FRAME_SAME_VAL 328*4d9fdb46SRobert Mustacchi it is not DWARF register number but 329*4d9fdb46SRobert Mustacchi a place holder indicating the register has the same 330*4d9fdb46SRobert Mustacchi value in the previous frame. 331*4d9fdb46SRobert Mustacchi 332*4d9fdb46SRobert Mustacchi DW_FRAME_UNDEFINED_VAL, DW_FRAME_SAME_VAL are 333*4d9fdb46SRobert Mustacchi only present at libdwarf runtime. Never on disk. 334*4d9fdb46SRobert Mustacchi DW_FRAME_* Values present on disk are in dwarf.h 335*4d9fdb46SRobert Mustacchi 336*4d9fdb46SRobert Mustacchi Otherwise: the register number is a DWARF register number 337*4d9fdb46SRobert Mustacchi (see ABI documents for how this translates to hardware/ 338*4d9fdb46SRobert Mustacchi software register numbers in the machine hardware) 339*4d9fdb46SRobert Mustacchi and the following applies: 340*4d9fdb46SRobert Mustacchi 341*4d9fdb46SRobert Mustacchi if dw_value_type == DW_EXPR_OFFSET (the only case for dwarf2): 342*4d9fdb46SRobert Mustacchi If dw_offset_relevant is non-zero, then 343*4d9fdb46SRobert Mustacchi the value is stored at at the address CFA+N where 344*4d9fdb46SRobert Mustacchi N is a signed offset. 345*4d9fdb46SRobert Mustacchi Rule: Offset(N) 346*4d9fdb46SRobert Mustacchi If dw_offset_relevant is zero, then the value of the register 347*4d9fdb46SRobert Mustacchi is the value of (DWARF) register number dw_regnum. 348*4d9fdb46SRobert Mustacchi Rule: register(F) 349*4d9fdb46SRobert Mustacchi Other values of dw_value_type are an error. 350*4d9fdb46SRobert Mustacchi */ 351*4d9fdb46SRobert Mustacchi Dwarf_Small dw_offset_relevant; 352*4d9fdb46SRobert Mustacchi 353*4d9fdb46SRobert Mustacchi /* For DWARF2, always 0 */ 354*4d9fdb46SRobert Mustacchi Dwarf_Small dw_value_type; 355*4d9fdb46SRobert Mustacchi 356*4d9fdb46SRobert Mustacchi Dwarf_Half dw_regnum; 357*4d9fdb46SRobert Mustacchi 358*4d9fdb46SRobert Mustacchi /* The data type here should the larger of Dwarf_Addr 359*4d9fdb46SRobert Mustacchi and Dwarf_Unsigned and Dwarf_Signed. */ 360*4d9fdb46SRobert Mustacchi Dwarf_Addr dw_offset; 361*4d9fdb46SRobert Mustacchi} Dwarf_Regtable_Entry; 362*4d9fdb46SRobert Mustacchi 363*4d9fdb46SRobert Mustacchitypedef struct Dwarf_Regtable_s { 364*4d9fdb46SRobert Mustacchi struct Dwarf_Regtable_Entry_s rules[DW_REG_TABLE_SIZE]; 365*4d9fdb46SRobert Mustacchi} Dwarf_Regtable; 366*4d9fdb46SRobert Mustacchi 367*4d9fdb46SRobert Mustacchi/* opaque type. Functional interface shown later. */ 368*4d9fdb46SRobert Mustacchistruct Dwarf_Reg_value3_s; 369*4d9fdb46SRobert Mustacchitypedef struct Dwarf_Reg_value3_s Dwarf_Reg_Value3; 370*4d9fdb46SRobert Mustacchi 371*4d9fdb46SRobert Mustacchitypedef struct Dwarf_Regtable_Entry3_s { 372*4d9fdb46SRobert Mustacchi/* For each index i (naming a hardware register with dwarf number 373*4d9fdb46SRobert Mustacchi i) the following is true and defines the value of that register: 374*4d9fdb46SRobert Mustacchi 375*4d9fdb46SRobert Mustacchi If dw_regnum is Register DW_FRAME_UNDEFINED_VAL 376*4d9fdb46SRobert Mustacchi it is not DWARF register number but 377*4d9fdb46SRobert Mustacchi a place holder indicating the register has no defined value. 378*4d9fdb46SRobert Mustacchi If dw_regnum is Register DW_FRAME_SAME_VAL 379*4d9fdb46SRobert Mustacchi it is not DWARF register number but 380*4d9fdb46SRobert Mustacchi a place holder indicating the register has the same 381*4d9fdb46SRobert Mustacchi value in the previous frame. 382*4d9fdb46SRobert Mustacchi 383*4d9fdb46SRobert Mustacchi DW_FRAME_UNDEFINED_VAL, DW_FRAME_SAME_VAL and 384*4d9fdb46SRobert Mustacchi DW_FRAME_CFA_COL3 are only present at libdwarf runtime. 385*4d9fdb46SRobert Mustacchi Never on disk. 386*4d9fdb46SRobert Mustacchi DW_FRAME_* Values present on disk are in dwarf.h 387*4d9fdb46SRobert Mustacchi Because DW_FRAME_SAME_VAL and DW_FRAME_UNDEFINED_VAL 388*4d9fdb46SRobert Mustacchi and DW_FRAME_CFA_COL3 are definable at runtime 389*4d9fdb46SRobert Mustacchi consider the names symbolic in this comment, not absolute. 390*4d9fdb46SRobert Mustacchi 391*4d9fdb46SRobert Mustacchi Otherwise: the register number is a DWARF register number 392*4d9fdb46SRobert Mustacchi (see ABI documents for how this translates to hardware/ 393*4d9fdb46SRobert Mustacchi software register numbers in the machine hardware) 394*4d9fdb46SRobert Mustacchi and the following applies: 395*4d9fdb46SRobert Mustacchi 396*4d9fdb46SRobert Mustacchi In a cfa-defining entry (rt3_cfa_rule) the regnum is the 397*4d9fdb46SRobert Mustacchi CFA 'register number'. Which is some 'normal' register, 398*4d9fdb46SRobert Mustacchi not DW_FRAME_CFA_COL3, nor DW_FRAME_SAME_VAL, nor 399*4d9fdb46SRobert Mustacchi DW_FRAME_UNDEFINED_VAL. 400*4d9fdb46SRobert Mustacchi 401*4d9fdb46SRobert Mustacchi If dw_value_type == DW_EXPR_OFFSET (the only possible case for 402*4d9fdb46SRobert Mustacchi dwarf2): 403*4d9fdb46SRobert Mustacchi If dw_offset_relevant is non-zero, then 404*4d9fdb46SRobert Mustacchi the value is stored at at the address 405*4d9fdb46SRobert Mustacchi CFA+N where N is a signed offset. 406*4d9fdb46SRobert Mustacchi dw_regnum is the cfa register rule which means 407*4d9fdb46SRobert Mustacchi one ignores dw_regnum and uses the CFA appropriately. 408*4d9fdb46SRobert Mustacchi So dw_offset_or_block_len is a signed value, really, 409*4d9fdb46SRobert Mustacchi and must be printed/evaluated as such. 410*4d9fdb46SRobert Mustacchi Rule: Offset(N) 411*4d9fdb46SRobert Mustacchi If dw_offset_relevant is zero, then the value of the register 412*4d9fdb46SRobert Mustacchi is the value of (DWARF) register number dw_regnum. 413*4d9fdb46SRobert Mustacchi Rule: register(R) 414*4d9fdb46SRobert Mustacchi If dw_value_type == DW_EXPR_VAL_OFFSET 415*4d9fdb46SRobert Mustacchi the value of this register is CFA +N where N is a signed offset. 416*4d9fdb46SRobert Mustacchi dw_regnum is the cfa register rule which means 417*4d9fdb46SRobert Mustacchi one ignores dw_regnum and uses the CFA appropriately. 418*4d9fdb46SRobert Mustacchi Rule: val_offset(N) 419*4d9fdb46SRobert Mustacchi If dw_value_type == DW_EXPR_EXPRESSION 420*4d9fdb46SRobert Mustacchi The value of the register is the value at the address 421*4d9fdb46SRobert Mustacchi computed by evaluating the DWARF expression E. 422*4d9fdb46SRobert Mustacchi Rule: expression(E) 423*4d9fdb46SRobert Mustacchi The expression E byte stream is pointed to by dw_block_ptr. 424*4d9fdb46SRobert Mustacchi The expression length in bytes is given by 425*4d9fdb46SRobert Mustacchi dw_offset_or_block_len. 426*4d9fdb46SRobert Mustacchi If dw_value_type == DW_EXPR_VAL_EXPRESSION 427*4d9fdb46SRobert Mustacchi The value of the register is the value 428*4d9fdb46SRobert Mustacchi computed by evaluating the DWARF expression E. 429*4d9fdb46SRobert Mustacchi Rule: val_expression(E) 430*4d9fdb46SRobert Mustacchi The expression E byte stream is pointed to by dw_block_ptr. 431*4d9fdb46SRobert Mustacchi The expression length in bytes is given by 432*4d9fdb46SRobert Mustacchi dw_offset_or_block_len. 433*4d9fdb46SRobert Mustacchi Other values of dw_value_type are an error. 434*4d9fdb46SRobert Mustacchi*/ 435*4d9fdb46SRobert Mustacchi Dwarf_Small dw_offset_relevant; 436*4d9fdb46SRobert Mustacchi Dwarf_Small dw_value_type; 437*4d9fdb46SRobert Mustacchi Dwarf_Half dw_regnum; 438*4d9fdb46SRobert Mustacchi Dwarf_Unsigned dw_offset_or_block_len; 439*4d9fdb46SRobert Mustacchi Dwarf_Ptr dw_block_ptr; 440*4d9fdb46SRobert Mustacchi 441*4d9fdb46SRobert Mustacchi}Dwarf_Regtable_Entry3; 442*4d9fdb46SRobert Mustacchi 443*4d9fdb46SRobert Mustacchi/* For the DWARF3 version, moved the DW_FRAME_CFA_COL 444*4d9fdb46SRobert Mustacchi out of the array and into its own struct. 445*4d9fdb46SRobert Mustacchi Having it part of the array is not very easy to work 446*4d9fdb46SRobert Mustacchi with from a portability point of view: changing 447*4d9fdb46SRobert Mustacchi the number for every architecture is a pain (if one fails 448*4d9fdb46SRobert Mustacchi to set it correctly a register rule gets clobbered when 449*4d9fdb46SRobert Mustacchi setting CFA). With MIPS it just happened to be easy to use 450*4d9fdb46SRobert Mustacchi DW_FRAME_CFA_COL (it was wrong conceptually but it was easy...). 451*4d9fdb46SRobert Mustacchi 452*4d9fdb46SRobert Mustacchi rt3_rules and rt3_reg_table_size must be filled in before 453*4d9fdb46SRobert Mustacchi calling libdwarf. Filled in with a pointer to an array 454*4d9fdb46SRobert Mustacchi (pointer and array set up by the calling application) 455*4d9fdb46SRobert Mustacchi of rt3_reg_table_size Dwarf_Regtable_Entry3_s structs. 456*4d9fdb46SRobert Mustacchi libdwarf does not allocate or deallocate space for the 457*4d9fdb46SRobert Mustacchi rules, you must do so. libdwarf will initialize the 458*4d9fdb46SRobert Mustacchi contents rules array, you do not need to do so (though 459*4d9fdb46SRobert Mustacchi if you choose to initialize the array somehow that is ok: 460*4d9fdb46SRobert Mustacchi libdwarf will overwrite your initializations with its own). 461*4d9fdb46SRobert Mustacchi 462*4d9fdb46SRobert Mustacchi*/ 463*4d9fdb46SRobert Mustacchitypedef struct Dwarf_Regtable3_s { 464*4d9fdb46SRobert Mustacchi struct Dwarf_Regtable_Entry3_s rt3_cfa_rule; 465*4d9fdb46SRobert Mustacchi 466*4d9fdb46SRobert Mustacchi Dwarf_Half rt3_reg_table_size; 467*4d9fdb46SRobert Mustacchi struct Dwarf_Regtable_Entry3_s * rt3_rules; 468*4d9fdb46SRobert Mustacchi} Dwarf_Regtable3; 469*4d9fdb46SRobert Mustacchi 470*4d9fdb46SRobert Mustacchi 471*4d9fdb46SRobert Mustacchi/* Use for DW_EPXR_STANDARD., DW_EXPR_VAL_OFFSET. 472*4d9fdb46SRobert Mustacchi Returns DW_DLV_OK if the value is available. 473*4d9fdb46SRobert Mustacchi If DW_DLV_OK returns the regnum and offset thru the pointers 474*4d9fdb46SRobert Mustacchi (which the consumer must use appropriately). 475*4d9fdb46SRobert Mustacchi*/ 476*4d9fdb46SRobert Mustacchiint dwarf_frame_get_reg_register(struct Dwarf_Regtable_Entry3_s *reg_in, 477*4d9fdb46SRobert Mustacchi Dwarf_Small *offset_relevant, 478*4d9fdb46SRobert Mustacchi Dwarf_Half *regnum_out, 479*4d9fdb46SRobert Mustacchi Dwarf_Signed *offset_out); 480*4d9fdb46SRobert Mustacchi 481*4d9fdb46SRobert Mustacchi/* Use for DW_EXPR_EXPRESSION, DW_EXPR_VAL_EXPRESSION. 482*4d9fdb46SRobert Mustacchi Returns DW_DLV_OK if the value is available. 483*4d9fdb46SRobert Mustacchi The caller must pass in the address of a valid 484*4d9fdb46SRobert Mustacchi Dwarf_Block (the caller need not initialize it). 485*4d9fdb46SRobert Mustacchi*/ 486*4d9fdb46SRobert Mustacchiint dwarf_frame_get_reg_expression(struct Dwarf_Regtable_Entry3_s *reg_in, 487*4d9fdb46SRobert Mustacchi Dwarf_Block *block_out); 488*4d9fdb46SRobert Mustacchi 489*4d9fdb46SRobert Mustacchi 490*4d9fdb46SRobert Mustacchi/* For DW_DLC_SYMBOLIC_RELOCATIONS output to caller 491*4d9fdb46SRobert Mustacchi v2, adding drd_length: some relocations are 4 and 492*4d9fdb46SRobert Mustacchi some 8 bytes (pointers are 8, section offsets 4) in 493*4d9fdb46SRobert Mustacchi some dwarf environments. (MIPS relocations are all one 494*4d9fdb46SRobert Mustacchi size in any given ABI.) Changing drd_type to an unsigned char 495*4d9fdb46SRobert Mustacchi to keep struct size down. 496*4d9fdb46SRobert Mustacchi*/ 497*4d9fdb46SRobert Mustacchienum Dwarf_Rel_Type { 498*4d9fdb46SRobert Mustacchi dwarf_drt_none, /* Should not get to caller */ 499*4d9fdb46SRobert Mustacchi dwarf_drt_data_reloc, /* Simple normal relocation. */ 500*4d9fdb46SRobert Mustacchi dwarf_drt_segment_rel, /* Special reloc, exceptions. */ 501*4d9fdb46SRobert Mustacchi /* dwarf_drt_first_of_length_pair and drt_second 502*4d9fdb46SRobert Mustacchi are for for the .word end - begin case. */ 503*4d9fdb46SRobert Mustacchi dwarf_drt_first_of_length_pair, 504*4d9fdb46SRobert Mustacchi dwarf_drt_second_of_length_pair 505*4d9fdb46SRobert Mustacchi}; 506*4d9fdb46SRobert Mustacchi 507*4d9fdb46SRobert Mustacchitypedef struct Dwarf_P_Marker_s * Dwarf_P_Marker; 508*4d9fdb46SRobert Mustacchistruct Dwarf_P_Marker_s { 509*4d9fdb46SRobert Mustacchi Dwarf_Unsigned ma_marker; 510*4d9fdb46SRobert Mustacchi Dwarf_Unsigned ma_offset; 511*4d9fdb46SRobert Mustacchi}; 512*4d9fdb46SRobert Mustacchi 513*4d9fdb46SRobert Mustacchitypedef struct Dwarf_Relocation_Data_s * Dwarf_Relocation_Data; 514*4d9fdb46SRobert Mustacchistruct Dwarf_Relocation_Data_s { 515*4d9fdb46SRobert Mustacchi unsigned char drd_type; /* Cast to/from Dwarf_Rel_Type 516*4d9fdb46SRobert Mustacchi to keep size small in struct. */ 517*4d9fdb46SRobert Mustacchi unsigned char drd_length; /* Length in bytes of data being 518*4d9fdb46SRobert Mustacchi relocated. 4 for 32bit data, 519*4d9fdb46SRobert Mustacchi 8 for 64bit data. */ 520*4d9fdb46SRobert Mustacchi Dwarf_Unsigned drd_offset; /* Where the data to reloc is. */ 521*4d9fdb46SRobert Mustacchi Dwarf_Unsigned drd_symbol_index; 522*4d9fdb46SRobert Mustacchi}; 523*4d9fdb46SRobert Mustacchi 524*4d9fdb46SRobert Mustacchitypedef struct Dwarf_P_String_Attr_s * Dwarf_P_String_Attr; 525*4d9fdb46SRobert Mustacchistruct Dwarf_P_String_Attr_s { 526*4d9fdb46SRobert Mustacchi Dwarf_Unsigned sa_offset; /* Offset of string attribute data */ 527*4d9fdb46SRobert Mustacchi Dwarf_Unsigned sa_nbytes; 528*4d9fdb46SRobert Mustacchi}; 529*4d9fdb46SRobert Mustacchi 530*4d9fdb46SRobert Mustacchi 531*4d9fdb46SRobert Mustacchi/* Opaque types for Consumer Library. */ 532*4d9fdb46SRobert Mustacchitypedef struct Dwarf_Debug_s* Dwarf_Debug; 533*4d9fdb46SRobert Mustacchitypedef struct Dwarf_Die_s* Dwarf_Die; 534*4d9fdb46SRobert Mustacchitypedef struct Dwarf_Line_s* Dwarf_Line; 535*4d9fdb46SRobert Mustacchitypedef struct Dwarf_Global_s* Dwarf_Global; 536*4d9fdb46SRobert Mustacchitypedef struct Dwarf_Func_s* Dwarf_Func; 537*4d9fdb46SRobert Mustacchitypedef struct Dwarf_Type_s* Dwarf_Type; 538*4d9fdb46SRobert Mustacchitypedef struct Dwarf_Var_s* Dwarf_Var; 539*4d9fdb46SRobert Mustacchitypedef struct Dwarf_Weak_s* Dwarf_Weak; 540*4d9fdb46SRobert Mustacchitypedef struct Dwarf_Error_s* Dwarf_Error; 541*4d9fdb46SRobert Mustacchitypedef struct Dwarf_Attribute_s* Dwarf_Attribute; 542*4d9fdb46SRobert Mustacchitypedef struct Dwarf_Abbrev_s* Dwarf_Abbrev; 543*4d9fdb46SRobert Mustacchitypedef struct Dwarf_Fde_s* Dwarf_Fde; 544*4d9fdb46SRobert Mustacchitypedef struct Dwarf_Cie_s* Dwarf_Cie; 545*4d9fdb46SRobert Mustacchitypedef struct Dwarf_Arange_s* Dwarf_Arange; 546*4d9fdb46SRobert Mustacchitypedef struct Dwarf_Gdbindex_s* Dwarf_Gdbindex; 547*4d9fdb46SRobert Mustacchistruct Dwarf_Xu_Index_Header_s; 548*4d9fdb46SRobert Mustacchitypedef struct Dwarf_Xu_Index_Header_s *Dwarf_Xu_Index_Header; 549*4d9fdb46SRobert Mustacchistruct Dwarf_Line_Context_s; 550*4d9fdb46SRobert Mustacchitypedef struct Dwarf_Line_Context_s *Dwarf_Line_Context; 551*4d9fdb46SRobert Mustacchistruct Dwarf_Macro_Context_s; 552*4d9fdb46SRobert Mustacchitypedef struct Dwarf_Macro_Context_s *Dwarf_Macro_Context; 553*4d9fdb46SRobert Mustacchistruct Dwarf_Dnames_Head_s; 554*4d9fdb46SRobert Mustacchitypedef struct Dwarf_Dnames_Head_s *Dwarf_Dnames_Head; 555*4d9fdb46SRobert Mustacchi 556*4d9fdb46SRobert Mustacchi 557*4d9fdb46SRobert Mustacchi/* Opaque types for Producer Library. */ 558*4d9fdb46SRobert Mustacchitypedef struct Dwarf_P_Debug_s* Dwarf_P_Debug; 559*4d9fdb46SRobert Mustacchitypedef struct Dwarf_P_Die_s* Dwarf_P_Die; 560*4d9fdb46SRobert Mustacchitypedef struct Dwarf_P_Attribute_s* Dwarf_P_Attribute; 561*4d9fdb46SRobert Mustacchitypedef struct Dwarf_P_Fde_s* Dwarf_P_Fde; 562*4d9fdb46SRobert Mustacchitypedef struct Dwarf_P_Expr_s* Dwarf_P_Expr; 563*4d9fdb46SRobert Mustacchitypedef Dwarf_Unsigned Dwarf_Tag; 564*4d9fdb46SRobert Mustacchi 565*4d9fdb46SRobert Mustacchi 566*4d9fdb46SRobert Mustacchi/* error handler function 567*4d9fdb46SRobert Mustacchi*/ 568*4d9fdb46SRobert Mustacchitypedef void (*Dwarf_Handler)(Dwarf_Error /*error*/, Dwarf_Ptr /*errarg*/); 569*4d9fdb46SRobert Mustacchi 570*4d9fdb46SRobert Mustacchi 571*4d9fdb46SRobert Mustacchi/* Begin libdwarf Object File Interface declarations. 572*4d9fdb46SRobert Mustacchi 573*4d9fdb46SRobert MustacchiAs of February 2008 there are multiple dwarf_reader object access 574*4d9fdb46SRobert Mustacchiinitialization methods available: 575*4d9fdb46SRobert MustacchiThe traditional dwarf_elf_init() and dwarf_init() and dwarf_finish() 576*4d9fdb46SRobert Mustacchi which assume libelf and POSIX file access. 577*4d9fdb46SRobert MustacchiAn object-file and library agnostic dwarf_object_init() and dwarf_object_finish() 578*4d9fdb46SRobert Mustacchi which allow the coder to provide object access routines 579*4d9fdb46SRobert Mustacchi abstracting away the elf interface. So there is no dependence in the 580*4d9fdb46SRobert Mustacchi reader code on the object format and no dependence on libelf. 581*4d9fdb46SRobert Mustacchi See the code in dwarf_elf_access.c and dwarf_original_elf_init.c 582*4d9fdb46SRobert Mustacchi to see an example of initializing the structures mentioned below. 583*4d9fdb46SRobert Mustacchi 584*4d9fdb46SRobert MustacchiProjects using dwarf_elf_init() or dwarf_init() can ignore 585*4d9fdb46SRobert Mustacchithe Dwarf_Obj_Access* structures entirely as all these details 586*4d9fdb46SRobert Mustacchiare completed for you. 587*4d9fdb46SRobert Mustacchi 588*4d9fdb46SRobert MustacchiAs of March 2017 additional 589*4d9fdb46SRobert Mustacchifunctions dwarf_elf_init_b 590*4d9fdb46SRobert Mustacchiand dwarf_init_b 591*4d9fdb46SRobert Mustacchiand dwarf_object_init_b 592*4d9fdb46SRobert Mustacchiadd a groupnumber argument so DWARF5 593*4d9fdb46SRobert Mustacchisplit-dwarf sections can be accessed. 594*4d9fdb46SRobert Mustacchi*/ 595*4d9fdb46SRobert Mustacchi 596*4d9fdb46SRobert Mustacchitypedef struct Dwarf_Obj_Access_Interface_s Dwarf_Obj_Access_Interface; 597*4d9fdb46SRobert Mustacchitypedef struct Dwarf_Obj_Access_Methods_s Dwarf_Obj_Access_Methods; 598*4d9fdb46SRobert Mustacchitypedef struct Dwarf_Obj_Access_Section_s Dwarf_Obj_Access_Section; 599*4d9fdb46SRobert Mustacchi 600*4d9fdb46SRobert Mustacchi 601*4d9fdb46SRobert Mustacchi/* Used in the get_section interface function 602*4d9fdb46SRobert Mustacchi in Dwarf_Obj_Access_Section_s. Since libdwarf 603*4d9fdb46SRobert Mustacchi depends on standard DWARF section names an object 604*4d9fdb46SRobert Mustacchi format that has no such names (but has some 605*4d9fdb46SRobert Mustacchi method of setting up 'sections equivalents') 606*4d9fdb46SRobert Mustacchi must arrange to return standard DWARF section 607*4d9fdb46SRobert Mustacchi names in the 'name' field. libdwarf does 608*4d9fdb46SRobert Mustacchi not free the strings in 'name'. */ 609*4d9fdb46SRobert Mustacchistruct 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. */ 613*4d9fdb46SRobert 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. */ 619*4d9fdb46SRobert 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. */ 623*4d9fdb46SRobert Mustacchi const char* name; 624*4d9fdb46SRobert Mustacchi /* Set link to zero if it is meaningless. If non-zero 625*4d9fdb46SRobert Mustacchi it should be a link to a rela section or from symtab 626*4d9fdb46SRobert Mustacchi to strtab. In Elf it is sh_link. */ 627*4d9fdb46SRobert 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; 638*4d9fdb46SRobert Mustacchi}; 639*4d9fdb46SRobert Mustacchi 640*4d9fdb46SRobert Mustacchi/* Returned by the get_endianness function in 641*4d9fdb46SRobert Mustacchi Dwarf_Obj_Access_Methods_s. */ 642*4d9fdb46SRobert Mustacchitypedef enum { 643*4d9fdb46SRobert Mustacchi DW_OBJECT_MSB, 644*4d9fdb46SRobert Mustacchi DW_OBJECT_LSB 645*4d9fdb46SRobert Mustacchi} Dwarf_Endianness; 646*4d9fdb46SRobert Mustacchi 647*4d9fdb46SRobert Mustacchi/* The functions we need to access object data from libdwarf are declared here. 648*4d9fdb46SRobert Mustacchi 649*4d9fdb46SRobert Mustacchi In these function pointer declarations 650*4d9fdb46SRobert Mustacchi 'void *obj' is intended to be a pointer (the object field in 651*4d9fdb46SRobert Mustacchi Dwarf_Obj_Access_Interface_s) 652*4d9fdb46SRobert Mustacchi that hides the library-specific and object-specific data that makes 653*4d9fdb46SRobert Mustacchi it possible to handle multiple object formats and multiple libraries. 654*4d9fdb46SRobert Mustacchi It's not required that one handles multiple such in a single libdwarf 655*4d9fdb46SRobert Mustacchi archive/shared-library (but not ruled out either). 656*4d9fdb46SRobert Mustacchi See dwarf_elf_object_access_internals_t and dwarf_elf_access.c 657*4d9fdb46SRobert Mustacchi for an example. 658*4d9fdb46SRobert Mustacchi 659*4d9fdb46SRobert Mustacchi*/ 660*4d9fdb46SRobert Mustacchistruct 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. */ 679*4d9fdb46SRobert Mustacchi int (*get_section_info)(void* obj, Dwarf_Half section_index, 680*4d9fdb46SRobert Mustacchi Dwarf_Obj_Access_Section* return_section, int* error); 681*4d9fdb46SRobert Mustacchi /* 682*4d9fdb46SRobert Mustacchi get_byte_order 683*4d9fdb46SRobert 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. */ 716*4d9fdb46SRobert 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 */ 726*4d9fdb46SRobert 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. */ 744*4d9fdb46SRobert Mustacchi int (*load_section)(void* obj, Dwarf_Half section_index, 745*4d9fdb46SRobert Mustacchi Dwarf_Small** return_data, int* error); 746*4d9fdb46SRobert Mustacchi 747*4d9fdb46SRobert 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. */ 763*4d9fdb46SRobert Mustacchi int (*relocate_a_section)(void* obj, Dwarf_Half section_index, 764*4d9fdb46SRobert Mustacchi Dwarf_Debug dbg, 765*4d9fdb46SRobert Mustacchi int* error); 766*4d9fdb46SRobert Mustacchi 767*4d9fdb46SRobert Mustacchi}; 768*4d9fdb46SRobert Mustacchi 769*4d9fdb46SRobert Mustacchi 770*4d9fdb46SRobert Mustacchi 771*4d9fdb46SRobert Mustacchi/* These structures are allocated and deallocated by your code 772*4d9fdb46SRobert 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 775*4d9fdb46SRobert Mustacchi struct Dwarf_Obj_Access_Interface_s or its content. 776*4d9fdb46SRobert Mustacchi (libdwarf does record a pointer to this struct: you must 777*4d9fdb46SRobert Mustacchi ensure that pointer remains valid for as long as 778*4d9fdb46SRobert Mustacchi a libdwarf instance is open (meaning 779*4d9fdb46SRobert Mustacchi after dwarf_init) and before dwarf_finish)). 780*4d9fdb46SRobert Mustacchi 781*4d9fdb46SRobert Mustacchi If you are reading Elf objects and libelf use dwarf_init() 782*4d9fdb46SRobert Mustacchi or dwarf_elf_init() which take care of these details. 783*4d9fdb46SRobert Mustacchi*/ 784*4d9fdb46SRobert Mustacchistruct Dwarf_Obj_Access_Interface_s { 785*4d9fdb46SRobert Mustacchi /* object is a void* as it hides the data the object access routines 786*4d9fdb46SRobert Mustacchi need (which varies by library in use and object format). 787*4d9fdb46SRobert Mustacchi */ 788*4d9fdb46SRobert Mustacchi void* object; 789*4d9fdb46SRobert Mustacchi const Dwarf_Obj_Access_Methods * methods; 790*4d9fdb46SRobert Mustacchi}; 791*4d9fdb46SRobert Mustacchi 792*4d9fdb46SRobert Mustacchi/* End libdwarf Object File Interface */ 793*4d9fdb46SRobert Mustacchi 794*4d9fdb46SRobert Mustacchi/* 795*4d9fdb46SRobert Mustacchi Dwarf_dealloc() alloc_type arguments. 796*4d9fdb46SRobert Mustacchi Argument points to: 797*4d9fdb46SRobert Mustacchi*/ 798*4d9fdb46SRobert Mustacchi#define DW_DLA_STRING 0x01 /* char* */ 799*4d9fdb46SRobert Mustacchi#define DW_DLA_LOC 0x02 /* Dwarf_Loc */ 800*4d9fdb46SRobert Mustacchi#define DW_DLA_LOCDESC 0x03 /* Dwarf_Locdesc */ 801*4d9fdb46SRobert Mustacchi#define DW_DLA_ELLIST 0x04 /* Dwarf_Ellist (not used)*/ 802*4d9fdb46SRobert Mustacchi#define DW_DLA_BOUNDS 0x05 /* Dwarf_Bounds (not used) */ 803*4d9fdb46SRobert Mustacchi#define DW_DLA_BLOCK 0x06 /* Dwarf_Block */ 804*4d9fdb46SRobert Mustacchi#define DW_DLA_DEBUG 0x07 /* Dwarf_Debug */ 805*4d9fdb46SRobert Mustacchi#define DW_DLA_DIE 0x08 /* Dwarf_Die */ 806*4d9fdb46SRobert Mustacchi#define DW_DLA_LINE 0x09 /* Dwarf_Line */ 807*4d9fdb46SRobert Mustacchi#define DW_DLA_ATTR 0x0a /* Dwarf_Attribute */ 808*4d9fdb46SRobert Mustacchi#define DW_DLA_TYPE 0x0b /* Dwarf_Type (not used) */ 809*4d9fdb46SRobert Mustacchi#define DW_DLA_SUBSCR 0x0c /* Dwarf_Subscr (not used) */ 810*4d9fdb46SRobert Mustacchi#define DW_DLA_GLOBAL 0x0d /* Dwarf_Global */ 811*4d9fdb46SRobert Mustacchi#define DW_DLA_ERROR 0x0e /* Dwarf_Error */ 812*4d9fdb46SRobert Mustacchi#define DW_DLA_LIST 0x0f /* a list */ 813*4d9fdb46SRobert Mustacchi#define DW_DLA_LINEBUF 0x10 /* Dwarf_Line* (not used) */ 814*4d9fdb46SRobert Mustacchi#define DW_DLA_ARANGE 0x11 /* Dwarf_Arange */ 815*4d9fdb46SRobert Mustacchi#define DW_DLA_ABBREV 0x12 /* Dwarf_Abbrev */ 816*4d9fdb46SRobert Mustacchi#define DW_DLA_FRAME_OP 0x13 /* Dwarf_Frame_Op */ 817*4d9fdb46SRobert Mustacchi#define DW_DLA_CIE 0x14 /* Dwarf_Cie */ 818*4d9fdb46SRobert Mustacchi#define DW_DLA_FDE 0x15 /* Dwarf_Fde */ 819*4d9fdb46SRobert Mustacchi#define DW_DLA_LOC_BLOCK 0x16 /* Dwarf_Loc */ 820*4d9fdb46SRobert Mustacchi#define DW_DLA_FRAME_BLOCK 0x17 /* Dwarf_Frame Block (not used) */ 821*4d9fdb46SRobert Mustacchi#define DW_DLA_FUNC 0x18 /* Dwarf_Func */ 822*4d9fdb46SRobert Mustacchi#define DW_DLA_TYPENAME 0x19 /* Dwarf_Type */ 823*4d9fdb46SRobert Mustacchi#define DW_DLA_VAR 0x1a /* Dwarf_Var */ 824*4d9fdb46SRobert Mustacchi#define DW_DLA_WEAK 0x1b /* Dwarf_Weak */ 825*4d9fdb46SRobert Mustacchi#define DW_DLA_ADDR 0x1c /* Dwarf_Addr sized entries */ 826*4d9fdb46SRobert 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 */ 840*4d9fdb46SRobert Mustacchi 841*4d9fdb46SRobert Mustacchi/* The augmenter string for CIE */ 842*4d9fdb46SRobert Mustacchi#define DW_CIE_AUGMENTER_STRING_V0 "z" 843*4d9fdb46SRobert Mustacchi 844*4d9fdb46SRobert Mustacchi/* dwarf_init() access arguments 845*4d9fdb46SRobert Mustacchi*/ 846*4d9fdb46SRobert Mustacchi#define DW_DLC_READ 0 /* read only access */ 847*4d9fdb46SRobert Mustacchi#define DW_DLC_WRITE 1 /* write only access */ 848*4d9fdb46SRobert Mustacchi#define DW_DLC_RDWR 2 /* read/write access NOT SUPPORTED*/ 849*4d9fdb46SRobert 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. 861*4d9fdb46SRobert Mustacchi 862*4d9fdb46SRobert 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 MustacchiOld 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 908*4d9fdb46SRobert Mustacchi 909*4d9fdb46SRobert 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 */ 915*4d9fdb46SRobert Mustacchi#define DW_DLC_SYMBOLIC_RELOCATIONS 0x04000000 916*4d9fdb46SRobert Mustacchi 917*4d9fdb46SRobert Mustacchi 918*4d9fdb46SRobert Mustacchi#define DW_DLC_TARGET_BIGENDIAN 0x08000000 /* Big endian target */ 919*4d9fdb46SRobert Mustacchi#define DW_DLC_TARGET_LITTLEENDIAN 0x00100000 /* Little endian target */ 920*4d9fdb46SRobert Mustacchi 921*4d9fdb46SRobert Mustacchi 922*4d9fdb46SRobert Mustacchi/* dwarf_pcline function, slide arguments 923*4d9fdb46SRobert Mustacchi*/ 924*4d9fdb46SRobert Mustacchi#define DW_DLS_BACKWARD -1 /* slide backward to find line */ 925*4d9fdb46SRobert Mustacchi#define DW_DLS_NOSLIDE 0 /* match exactly without sliding */ 926*4d9fdb46SRobert Mustacchi#define DW_DLS_FORWARD 1 /* slide forward to find line */ 927*4d9fdb46SRobert Mustacchi 928*4d9fdb46SRobert Mustacchi/* libdwarf error numbers 929*4d9fdb46SRobert Mustacchi*/ 930*4d9fdb46SRobert Mustacchi#define DW_DLE_NE 0 /* no error */ 931*4d9fdb46SRobert Mustacchi#define DW_DLE_VMM 1 /* dwarf format/library version mismatch */ 932*4d9fdb46SRobert Mustacchi#define DW_DLE_MAP 2 /* memory map failure */ 933*4d9fdb46SRobert Mustacchi#define DW_DLE_LEE 3 /* libelf error */ 934*4d9fdb46SRobert Mustacchi#define DW_DLE_NDS 4 /* no debug section */ 935*4d9fdb46SRobert Mustacchi#define DW_DLE_NLS 5 /* no line section */ 936*4d9fdb46SRobert Mustacchi#define DW_DLE_ID 6 /* invalid descriptor for query */ 937*4d9fdb46SRobert Mustacchi#define DW_DLE_IOF 7 /* I/O failure */ 938*4d9fdb46SRobert Mustacchi#define DW_DLE_MAF 8 /* memory allocation failure */ 939*4d9fdb46SRobert Mustacchi#define DW_DLE_IA 9 /* invalid argument */ 940*4d9fdb46SRobert Mustacchi#define DW_DLE_MDE 10 /* mangled debugging entry */ 941*4d9fdb46SRobert Mustacchi#define DW_DLE_MLE 11 /* mangled line number entry */ 942*4d9fdb46SRobert Mustacchi#define DW_DLE_FNO 12 /* file not open */ 943*4d9fdb46SRobert Mustacchi#define DW_DLE_FNR 13 /* file not a regular file */ 944*4d9fdb46SRobert Mustacchi#define DW_DLE_FWA 14 /* file open with wrong access */ 945*4d9fdb46SRobert Mustacchi#define DW_DLE_NOB 15 /* not an object file */ 946*4d9fdb46SRobert Mustacchi#define DW_DLE_MOF 16 /* mangled object file header */ 947*4d9fdb46SRobert Mustacchi#define DW_DLE_EOLL 17 /* end of location list entries */ 948*4d9fdb46SRobert Mustacchi#define DW_DLE_NOLL 18 /* no location list section */ 949*4d9fdb46SRobert Mustacchi#define DW_DLE_BADOFF 19 /* Invalid offset */ 950*4d9fdb46SRobert Mustacchi#define DW_DLE_EOS 20 /* end of section */ 951*4d9fdb46SRobert Mustacchi#define DW_DLE_ATRUNC 21 /* abbreviations section appears truncated*/ 952*4d9fdb46SRobert Mustacchi#define DW_DLE_BADBITC 22 /* Address size passed to dwarf bad*/ 953*4d9fdb46SRobert Mustacchi /* It is not an allowed size (64 or 32) */ 954*4d9fdb46SRobert Mustacchi /* Error codes defined by the current Libdwarf Implementation. */ 955*4d9fdb46SRobert Mustacchi#define DW_DLE_DBG_ALLOC 23 956*4d9fdb46SRobert Mustacchi#define DW_DLE_FSTAT_ERROR 24 957*4d9fdb46SRobert Mustacchi#define DW_DLE_FSTAT_MODE_ERROR 25 958*4d9fdb46SRobert Mustacchi#define DW_DLE_INIT_ACCESS_WRONG 26 959*4d9fdb46SRobert Mustacchi#define DW_DLE_ELF_BEGIN_ERROR 27 960*4d9fdb46SRobert Mustacchi#define DW_DLE_ELF_GETEHDR_ERROR 28 961*4d9fdb46SRobert Mustacchi#define DW_DLE_ELF_GETSHDR_ERROR 29 962*4d9fdb46SRobert Mustacchi#define DW_DLE_ELF_STRPTR_ERROR 30 963*4d9fdb46SRobert Mustacchi#define DW_DLE_DEBUG_INFO_DUPLICATE 31 964*4d9fdb46SRobert Mustacchi#define DW_DLE_DEBUG_INFO_NULL 32 965*4d9fdb46SRobert Mustacchi#define DW_DLE_DEBUG_ABBREV_DUPLICATE 33 966*4d9fdb46SRobert Mustacchi#define DW_DLE_DEBUG_ABBREV_NULL 34 967*4d9fdb46SRobert Mustacchi#define DW_DLE_DEBUG_ARANGES_DUPLICATE 35 968*4d9fdb46SRobert Mustacchi#define DW_DLE_DEBUG_ARANGES_NULL 36 969*4d9fdb46SRobert Mustacchi#define DW_DLE_DEBUG_LINE_DUPLICATE 37 970*4d9fdb46SRobert Mustacchi#define DW_DLE_DEBUG_LINE_NULL 38 971*4d9fdb46SRobert Mustacchi#define DW_DLE_DEBUG_LOC_DUPLICATE 39 972*4d9fdb46SRobert Mustacchi#define DW_DLE_DEBUG_LOC_NULL 40 973*4d9fdb46SRobert Mustacchi#define DW_DLE_DEBUG_MACINFO_DUPLICATE 41 974*4d9fdb46SRobert Mustacchi#define DW_DLE_DEBUG_MACINFO_NULL 42 975*4d9fdb46SRobert Mustacchi#define DW_DLE_DEBUG_PUBNAMES_DUPLICATE 43 976*4d9fdb46SRobert Mustacchi#define DW_DLE_DEBUG_PUBNAMES_NULL 44 977*4d9fdb46SRobert Mustacchi#define DW_DLE_DEBUG_STR_DUPLICATE 45 978*4d9fdb46SRobert Mustacchi#define DW_DLE_DEBUG_STR_NULL 46 979*4d9fdb46SRobert Mustacchi#define DW_DLE_CU_LENGTH_ERROR 47 980*4d9fdb46SRobert Mustacchi#define DW_DLE_VERSION_STAMP_ERROR 48 981*4d9fdb46SRobert Mustacchi#define DW_DLE_ABBREV_OFFSET_ERROR 49 982*4d9fdb46SRobert Mustacchi#define DW_DLE_ADDRESS_SIZE_ERROR 50 983*4d9fdb46SRobert Mustacchi#define DW_DLE_DEBUG_INFO_PTR_NULL 51 984*4d9fdb46SRobert Mustacchi#define DW_DLE_DIE_NULL 52 985*4d9fdb46SRobert Mustacchi#define DW_DLE_STRING_OFFSET_BAD 53 986*4d9fdb46SRobert Mustacchi#define DW_DLE_DEBUG_LINE_LENGTH_BAD 54 987*4d9fdb46SRobert Mustacchi#define DW_DLE_LINE_PROLOG_LENGTH_BAD 55 988*4d9fdb46SRobert Mustacchi#define DW_DLE_LINE_NUM_OPERANDS_BAD 56 989*4d9fdb46SRobert Mustacchi#define DW_DLE_LINE_SET_ADDR_ERROR 57 /* No longer used. */ 990*4d9fdb46SRobert Mustacchi#define DW_DLE_LINE_EXT_OPCODE_BAD 58 991*4d9fdb46SRobert Mustacchi#define DW_DLE_DWARF_LINE_NULL 59 992*4d9fdb46SRobert Mustacchi#define DW_DLE_INCL_DIR_NUM_BAD 60 993*4d9fdb46SRobert Mustacchi#define DW_DLE_LINE_FILE_NUM_BAD 61 994*4d9fdb46SRobert Mustacchi#define DW_DLE_ALLOC_FAIL 62 995*4d9fdb46SRobert Mustacchi#define DW_DLE_NO_CALLBACK_FUNC 63 996*4d9fdb46SRobert Mustacchi#define DW_DLE_SECT_ALLOC 64 997*4d9fdb46SRobert Mustacchi#define DW_DLE_FILE_ENTRY_ALLOC 65 998*4d9fdb46SRobert Mustacchi#define DW_DLE_LINE_ALLOC 66 999*4d9fdb46SRobert Mustacchi#define DW_DLE_FPGM_ALLOC 67 1000*4d9fdb46SRobert Mustacchi#define DW_DLE_INCDIR_ALLOC 68 1001*4d9fdb46SRobert Mustacchi#define DW_DLE_STRING_ALLOC 69 1002*4d9fdb46SRobert Mustacchi#define DW_DLE_CHUNK_ALLOC 70 1003*4d9fdb46SRobert Mustacchi#define DW_DLE_BYTEOFF_ERR 71 1004*4d9fdb46SRobert Mustacchi#define DW_DLE_CIE_ALLOC 72 1005*4d9fdb46SRobert Mustacchi#define DW_DLE_FDE_ALLOC 73 1006*4d9fdb46SRobert Mustacchi#define DW_DLE_REGNO_OVFL 74 1007*4d9fdb46SRobert Mustacchi#define DW_DLE_CIE_OFFS_ALLOC 75 1008*4d9fdb46SRobert Mustacchi#define DW_DLE_WRONG_ADDRESS 76 1009*4d9fdb46SRobert Mustacchi#define DW_DLE_EXTRA_NEIGHBORS 77 1010*4d9fdb46SRobert Mustacchi#define DW_DLE_WRONG_TAG 78 1011*4d9fdb46SRobert Mustacchi#define DW_DLE_DIE_ALLOC 79 1012*4d9fdb46SRobert Mustacchi#define DW_DLE_PARENT_EXISTS 80 1013*4d9fdb46SRobert Mustacchi#define DW_DLE_DBG_NULL 81 1014*4d9fdb46SRobert Mustacchi#define DW_DLE_DEBUGLINE_ERROR 82 1015*4d9fdb46SRobert Mustacchi#define DW_DLE_DEBUGFRAME_ERROR 83 1016*4d9fdb46SRobert Mustacchi#define DW_DLE_DEBUGINFO_ERROR 84 1017*4d9fdb46SRobert Mustacchi#define DW_DLE_ATTR_ALLOC 85 1018*4d9fdb46SRobert Mustacchi#define DW_DLE_ABBREV_ALLOC 86 1019*4d9fdb46SRobert Mustacchi#define DW_DLE_OFFSET_UFLW 87 1020*4d9fdb46SRobert Mustacchi#define DW_DLE_ELF_SECT_ERR 88 1021*4d9fdb46SRobert Mustacchi#define DW_DLE_DEBUG_FRAME_LENGTH_BAD 89 1022*4d9fdb46SRobert Mustacchi#define DW_DLE_FRAME_VERSION_BAD 90 1023*4d9fdb46SRobert Mustacchi#define DW_DLE_CIE_RET_ADDR_REG_ERROR 91 1024*4d9fdb46SRobert Mustacchi#define DW_DLE_FDE_NULL 92 1025*4d9fdb46SRobert Mustacchi#define DW_DLE_FDE_DBG_NULL 93 1026*4d9fdb46SRobert Mustacchi#define DW_DLE_CIE_NULL 94 1027*4d9fdb46SRobert Mustacchi#define DW_DLE_CIE_DBG_NULL 95 1028*4d9fdb46SRobert Mustacchi#define DW_DLE_FRAME_TABLE_COL_BAD 96 1029*4d9fdb46SRobert Mustacchi#define DW_DLE_PC_NOT_IN_FDE_RANGE 97 1030*4d9fdb46SRobert Mustacchi#define DW_DLE_CIE_INSTR_EXEC_ERROR 98 1031*4d9fdb46SRobert Mustacchi#define DW_DLE_FRAME_INSTR_EXEC_ERROR 99 1032*4d9fdb46SRobert Mustacchi#define DW_DLE_FDE_PTR_NULL 100 1033*4d9fdb46SRobert Mustacchi#define DW_DLE_RET_OP_LIST_NULL 101 1034*4d9fdb46SRobert Mustacchi#define DW_DLE_LINE_CONTEXT_NULL 102 1035*4d9fdb46SRobert Mustacchi#define DW_DLE_DBG_NO_CU_CONTEXT 103 1036*4d9fdb46SRobert Mustacchi#define DW_DLE_DIE_NO_CU_CONTEXT 104 1037*4d9fdb46SRobert Mustacchi#define DW_DLE_FIRST_DIE_NOT_CU 105 1038*4d9fdb46SRobert Mustacchi#define DW_DLE_NEXT_DIE_PTR_NULL 106 1039*4d9fdb46SRobert Mustacchi#define DW_DLE_DEBUG_FRAME_DUPLICATE 107 1040*4d9fdb46SRobert Mustacchi#define DW_DLE_DEBUG_FRAME_NULL 108 1041*4d9fdb46SRobert Mustacchi#define DW_DLE_ABBREV_DECODE_ERROR 109 1042*4d9fdb46SRobert Mustacchi#define DW_DLE_DWARF_ABBREV_NULL 110 1043*4d9fdb46SRobert Mustacchi#define DW_DLE_ATTR_NULL 111 1044*4d9fdb46SRobert Mustacchi#define DW_DLE_DIE_BAD 112 1045*4d9fdb46SRobert Mustacchi#define DW_DLE_DIE_ABBREV_BAD 113 1046*4d9fdb46SRobert Mustacchi#define DW_DLE_ATTR_FORM_BAD 114 1047*4d9fdb46SRobert Mustacchi#define DW_DLE_ATTR_NO_CU_CONTEXT 115 1048*4d9fdb46SRobert Mustacchi#define DW_DLE_ATTR_FORM_SIZE_BAD 116 1049*4d9fdb46SRobert Mustacchi#define DW_DLE_ATTR_DBG_NULL 117 1050*4d9fdb46SRobert Mustacchi#define DW_DLE_BAD_REF_FORM 118 1051*4d9fdb46SRobert Mustacchi#define DW_DLE_ATTR_FORM_OFFSET_BAD 119 1052*4d9fdb46SRobert Mustacchi#define DW_DLE_LINE_OFFSET_BAD 120 1053*4d9fdb46SRobert Mustacchi#define DW_DLE_DEBUG_STR_OFFSET_BAD 121 1054*4d9fdb46SRobert Mustacchi#define DW_DLE_STRING_PTR_NULL 122 1055*4d9fdb46SRobert Mustacchi#define DW_DLE_PUBNAMES_VERSION_ERROR 123 1056*4d9fdb46SRobert Mustacchi#define DW_DLE_PUBNAMES_LENGTH_BAD 124 1057*4d9fdb46SRobert Mustacchi#define DW_DLE_GLOBAL_NULL 125 1058*4d9fdb46SRobert Mustacchi#define DW_DLE_GLOBAL_CONTEXT_NULL 126 1059*4d9fdb46SRobert Mustacchi#define DW_DLE_DIR_INDEX_BAD 127 1060*4d9fdb46SRobert Mustacchi#define DW_DLE_LOC_EXPR_BAD 128 1061*4d9fdb46SRobert Mustacchi#define DW_DLE_DIE_LOC_EXPR_BAD 129 1062*4d9fdb46SRobert Mustacchi#define DW_DLE_ADDR_ALLOC 130 1063*4d9fdb46SRobert Mustacchi#define DW_DLE_OFFSET_BAD 131 1064*4d9fdb46SRobert Mustacchi#define DW_DLE_MAKE_CU_CONTEXT_FAIL 132 1065*4d9fdb46SRobert Mustacchi#define DW_DLE_REL_ALLOC 133 1066*4d9fdb46SRobert Mustacchi#define DW_DLE_ARANGE_OFFSET_BAD 134 1067*4d9fdb46SRobert Mustacchi#define DW_DLE_SEGMENT_SIZE_BAD 135 1068*4d9fdb46SRobert Mustacchi#define DW_DLE_ARANGE_LENGTH_BAD 136 1069*4d9fdb46SRobert Mustacchi#define DW_DLE_ARANGE_DECODE_ERROR 137 1070*4d9fdb46SRobert Mustacchi#define DW_DLE_ARANGES_NULL 138 1071*4d9fdb46SRobert Mustacchi#define DW_DLE_ARANGE_NULL 139 1072*4d9fdb46SRobert Mustacchi#define DW_DLE_NO_FILE_NAME 140 1073*4d9fdb46SRobert Mustacchi#define DW_DLE_NO_COMP_DIR 141 1074*4d9fdb46SRobert Mustacchi#define DW_DLE_CU_ADDRESS_SIZE_BAD 142 1075*4d9fdb46SRobert Mustacchi#define DW_DLE_INPUT_ATTR_BAD 143 1076*4d9fdb46SRobert Mustacchi#define DW_DLE_EXPR_NULL 144 1077*4d9fdb46SRobert Mustacchi#define DW_DLE_BAD_EXPR_OPCODE 145 1078*4d9fdb46SRobert Mustacchi#define DW_DLE_EXPR_LENGTH_BAD 146 1079*4d9fdb46SRobert Mustacchi#define DW_DLE_MULTIPLE_RELOC_IN_EXPR 147 1080*4d9fdb46SRobert Mustacchi#define DW_DLE_ELF_GETIDENT_ERROR 148 1081*4d9fdb46SRobert Mustacchi#define DW_DLE_NO_AT_MIPS_FDE 149 1082*4d9fdb46SRobert Mustacchi#define DW_DLE_NO_CIE_FOR_FDE 150 1083*4d9fdb46SRobert Mustacchi#define DW_DLE_DIE_ABBREV_LIST_NULL 151 1084*4d9fdb46SRobert Mustacchi#define DW_DLE_DEBUG_FUNCNAMES_DUPLICATE 152 1085*4d9fdb46SRobert Mustacchi#define DW_DLE_DEBUG_FUNCNAMES_NULL 153 1086*4d9fdb46SRobert Mustacchi#define DW_DLE_DEBUG_FUNCNAMES_VERSION_ERROR 154 1087*4d9fdb46SRobert Mustacchi#define DW_DLE_DEBUG_FUNCNAMES_LENGTH_BAD 155 1088*4d9fdb46SRobert Mustacchi#define DW_DLE_FUNC_NULL 156 1089*4d9fdb46SRobert Mustacchi#define DW_DLE_FUNC_CONTEXT_NULL 157 1090*4d9fdb46SRobert Mustacchi#define DW_DLE_DEBUG_TYPENAMES_DUPLICATE 158 1091*4d9fdb46SRobert Mustacchi#define DW_DLE_DEBUG_TYPENAMES_NULL 159 1092*4d9fdb46SRobert Mustacchi#define DW_DLE_DEBUG_TYPENAMES_VERSION_ERROR 160 1093*4d9fdb46SRobert Mustacchi#define DW_DLE_DEBUG_TYPENAMES_LENGTH_BAD 161 1094*4d9fdb46SRobert Mustacchi#define DW_DLE_TYPE_NULL 162 1095*4d9fdb46SRobert Mustacchi#define DW_DLE_TYPE_CONTEXT_NULL 163 1096*4d9fdb46SRobert Mustacchi#define DW_DLE_DEBUG_VARNAMES_DUPLICATE 164 1097*4d9fdb46SRobert Mustacchi#define DW_DLE_DEBUG_VARNAMES_NULL 165 1098*4d9fdb46SRobert Mustacchi#define DW_DLE_DEBUG_VARNAMES_VERSION_ERROR 166 1099*4d9fdb46SRobert Mustacchi#define DW_DLE_DEBUG_VARNAMES_LENGTH_BAD 167 1100*4d9fdb46SRobert Mustacchi#define DW_DLE_VAR_NULL 168 1101*4d9fdb46SRobert Mustacchi#define DW_DLE_VAR_CONTEXT_NULL 169 1102*4d9fdb46SRobert Mustacchi#define DW_DLE_DEBUG_WEAKNAMES_DUPLICATE 170 1103*4d9fdb46SRobert Mustacchi#define DW_DLE_DEBUG_WEAKNAMES_NULL 171 1104*4d9fdb46SRobert Mustacchi#define DW_DLE_DEBUG_WEAKNAMES_VERSION_ERROR 172 1105*4d9fdb46SRobert Mustacchi#define DW_DLE_DEBUG_WEAKNAMES_LENGTH_BAD 173 1106*4d9fdb46SRobert Mustacchi#define DW_DLE_WEAK_NULL 174 1107*4d9fdb46SRobert Mustacchi#define DW_DLE_WEAK_CONTEXT_NULL 175 1108*4d9fdb46SRobert Mustacchi#define DW_DLE_LOCDESC_COUNT_WRONG 176 1109*4d9fdb46SRobert Mustacchi#define DW_DLE_MACINFO_STRING_NULL 177 1110*4d9fdb46SRobert Mustacchi#define DW_DLE_MACINFO_STRING_EMPTY 178 1111*4d9fdb46SRobert Mustacchi#define DW_DLE_MACINFO_INTERNAL_ERROR_SPACE 179 1112*4d9fdb46SRobert Mustacchi#define DW_DLE_MACINFO_MALLOC_FAIL 180 1113*4d9fdb46SRobert Mustacchi#define DW_DLE_DEBUGMACINFO_ERROR 181 1114*4d9fdb46SRobert Mustacchi#define DW_DLE_DEBUG_MACRO_LENGTH_BAD 182 1115*4d9fdb46SRobert Mustacchi#define DW_DLE_DEBUG_MACRO_MAX_BAD 183 1116*4d9fdb46SRobert Mustacchi#define DW_DLE_DEBUG_MACRO_INTERNAL_ERR 184 1117*4d9fdb46SRobert Mustacchi#define DW_DLE_DEBUG_MACRO_MALLOC_SPACE 185 1118*4d9fdb46SRobert Mustacchi#define DW_DLE_DEBUG_MACRO_INCONSISTENT 186 1119*4d9fdb46SRobert Mustacchi#define DW_DLE_DF_NO_CIE_AUGMENTATION 187 1120*4d9fdb46SRobert Mustacchi#define DW_DLE_DF_REG_NUM_TOO_HIGH 188 1121*4d9fdb46SRobert Mustacchi#define DW_DLE_DF_MAKE_INSTR_NO_INIT 189 1122*4d9fdb46SRobert Mustacchi#define DW_DLE_DF_NEW_LOC_LESS_OLD_LOC 190 1123*4d9fdb46SRobert Mustacchi#define DW_DLE_DF_POP_EMPTY_STACK 191 1124*4d9fdb46SRobert Mustacchi#define DW_DLE_DF_ALLOC_FAIL 192 1125*4d9fdb46SRobert Mustacchi#define DW_DLE_DF_FRAME_DECODING_ERROR 193 1126*4d9fdb46SRobert Mustacchi#define DW_DLE_DEBUG_LOC_SECTION_SHORT 194 1127*4d9fdb46SRobert Mustacchi#define DW_DLE_FRAME_AUGMENTATION_UNKNOWN 195 1128*4d9fdb46SRobert Mustacchi#define DW_DLE_PUBTYPE_CONTEXT 196 /* Unused. */ 1129*4d9fdb46SRobert Mustacchi#define DW_DLE_DEBUG_PUBTYPES_LENGTH_BAD 197 1130*4d9fdb46SRobert Mustacchi#define DW_DLE_DEBUG_PUBTYPES_VERSION_ERROR 198 1131*4d9fdb46SRobert Mustacchi#define DW_DLE_DEBUG_PUBTYPES_DUPLICATE 199 1132*4d9fdb46SRobert Mustacchi#define DW_DLE_FRAME_CIE_DECODE_ERROR 200 1133*4d9fdb46SRobert Mustacchi#define DW_DLE_FRAME_REGISTER_UNREPRESENTABLE 201 1134*4d9fdb46SRobert Mustacchi#define DW_DLE_FRAME_REGISTER_COUNT_MISMATCH 202 1135*4d9fdb46SRobert Mustacchi#define DW_DLE_LINK_LOOP 203 1136*4d9fdb46SRobert Mustacchi#define DW_DLE_STRP_OFFSET_BAD 204 1137*4d9fdb46SRobert Mustacchi#define DW_DLE_DEBUG_RANGES_DUPLICATE 205 1138*4d9fdb46SRobert Mustacchi#define DW_DLE_DEBUG_RANGES_OFFSET_BAD 206 1139*4d9fdb46SRobert Mustacchi#define DW_DLE_DEBUG_RANGES_MISSING_END 207 1140*4d9fdb46SRobert Mustacchi#define DW_DLE_DEBUG_RANGES_OUT_OF_MEM 208 1141*4d9fdb46SRobert Mustacchi#define DW_DLE_DEBUG_SYMTAB_ERR 209 1142*4d9fdb46SRobert Mustacchi#define DW_DLE_DEBUG_STRTAB_ERR 210 1143*4d9fdb46SRobert Mustacchi#define DW_DLE_RELOC_MISMATCH_INDEX 211 1144*4d9fdb46SRobert Mustacchi#define DW_DLE_RELOC_MISMATCH_RELOC_INDEX 212 1145*4d9fdb46SRobert Mustacchi#define DW_DLE_RELOC_MISMATCH_STRTAB_INDEX 213 1146*4d9fdb46SRobert Mustacchi#define DW_DLE_RELOC_SECTION_MISMATCH 214 1147*4d9fdb46SRobert Mustacchi#define DW_DLE_RELOC_SECTION_MISSING_INDEX 215 1148*4d9fdb46SRobert Mustacchi#define DW_DLE_RELOC_SECTION_LENGTH_ODD 216 1149*4d9fdb46SRobert Mustacchi#define DW_DLE_RELOC_SECTION_PTR_NULL 217 1150*4d9fdb46SRobert Mustacchi#define DW_DLE_RELOC_SECTION_MALLOC_FAIL 218 1151*4d9fdb46SRobert Mustacchi#define DW_DLE_NO_ELF64_SUPPORT 219 1152*4d9fdb46SRobert Mustacchi#define DW_DLE_MISSING_ELF64_SUPPORT 220 1153*4d9fdb46SRobert Mustacchi#define DW_DLE_ORPHAN_FDE 221 1154*4d9fdb46SRobert Mustacchi#define DW_DLE_DUPLICATE_INST_BLOCK 222 1155*4d9fdb46SRobert Mustacchi#define DW_DLE_BAD_REF_SIG8_FORM 223 1156*4d9fdb46SRobert Mustacchi#define DW_DLE_ATTR_EXPRLOC_FORM_BAD 224 1157*4d9fdb46SRobert Mustacchi#define DW_DLE_FORM_SEC_OFFSET_LENGTH_BAD 225 1158*4d9fdb46SRobert Mustacchi#define DW_DLE_NOT_REF_FORM 226 1159*4d9fdb46SRobert 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 1403*4d9fdb46SRobert Mustacchi 1404*4d9fdb46SRobert Mustacchi /* LAST MUST EQUAL LAST ERROR NUMBER */ 1405*4d9fdb46SRobert Mustacchi#define DW_DLE_LAST 469 1406*4d9fdb46SRobert Mustacchi 1407*4d9fdb46SRobert Mustacchi#define DW_DLE_LO_USER 0x10000 1408*4d9fdb46SRobert Mustacchi 1409*4d9fdb46SRobert Mustacchi /* Taken as meaning 'undefined value', this is not 1410*4d9fdb46SRobert Mustacchi a column or register number. 1411*4d9fdb46SRobert Mustacchi Only present at libdwarf runtime. Never on disk. 1412*4d9fdb46SRobert Mustacchi DW_FRAME_* Values present on disk are in dwarf.h 1413*4d9fdb46SRobert Mustacchi */ 1414*4d9fdb46SRobert Mustacchi#define DW_FRAME_UNDEFINED_VAL 1034 1415*4d9fdb46SRobert Mustacchi 1416*4d9fdb46SRobert Mustacchi /* Taken as meaning 'same value' as caller had, not a column 1417*4d9fdb46SRobert Mustacchi or register number 1418*4d9fdb46SRobert Mustacchi Only present at libdwarf runtime. Never on disk. 1419*4d9fdb46SRobert Mustacchi DW_FRAME_* Values present on disk are in dwarf.h 1420*4d9fdb46SRobert Mustacchi */ 1421*4d9fdb46SRobert Mustacchi#define DW_FRAME_SAME_VAL 1035 1422*4d9fdb46SRobert Mustacchi 1423*4d9fdb46SRobert Mustacchi 1424*4d9fdb46SRobert Mustacchi 1425*4d9fdb46SRobert Mustacchi/* error return values 1426*4d9fdb46SRobert Mustacchi*/ 1427*4d9fdb46SRobert Mustacchi#define DW_DLV_BADADDR (~(Dwarf_Addr)0) 1428*4d9fdb46SRobert Mustacchi /* for functions returning target address */ 1429*4d9fdb46SRobert Mustacchi 1430*4d9fdb46SRobert Mustacchi#define DW_DLV_NOCOUNT ((Dwarf_Signed)-1) 1431*4d9fdb46SRobert Mustacchi /* for functions returning count */ 1432*4d9fdb46SRobert Mustacchi 1433*4d9fdb46SRobert Mustacchi#define DW_DLV_BADOFFSET (~(Dwarf_Off)0) 1434*4d9fdb46SRobert Mustacchi /* for functions returning offset */ 1435*4d9fdb46SRobert Mustacchi 1436*4d9fdb46SRobert Mustacchi/* standard return values for functions */ 1437*4d9fdb46SRobert Mustacchi#define DW_DLV_NO_ENTRY -1 1438*4d9fdb46SRobert Mustacchi#define DW_DLV_OK 0 1439*4d9fdb46SRobert Mustacchi#define DW_DLV_ERROR 1 1440*4d9fdb46SRobert Mustacchi 1441*4d9fdb46SRobert Mustacchi/* Special values for offset_into_exception_table field of dwarf fde's. */ 1442*4d9fdb46SRobert Mustacchi/* The following value indicates that there is no Exception table offset 1443*4d9fdb46SRobert Mustacchi associated with a dwarf frame. */ 1444*4d9fdb46SRobert Mustacchi#define DW_DLX_NO_EH_OFFSET (-1LL) 1445*4d9fdb46SRobert Mustacchi/* The following value indicates that the producer was unable to analyse the 1446*4d9fdb46SRobert Mustacchi source file to generate Exception tables for this function. */ 1447*4d9fdb46SRobert Mustacchi#define DW_DLX_EH_OFFSET_UNAVAILABLE (-2LL) 1448*4d9fdb46SRobert Mustacchi 1449*4d9fdb46SRobert Mustacchi/* The dwarf specification separates FORMs into 1450*4d9fdb46SRobert Mustacchidifferent classes. To do the seperation properly 1451*4d9fdb46SRobert Mustacchirequires 4 pieces of data as of DWARF4 (thus the 1452*4d9fdb46SRobert Mustacchifunction arguments listed here). 1453*4d9fdb46SRobert MustacchiThe DWARF4 specification class definition suffices to 1454*4d9fdb46SRobert Mustacchidescribe all DWARF versions. 1455*4d9fdb46SRobert MustacchiSee section 7.5.4, Attribute Encodings. 1456*4d9fdb46SRobert MustacchiA return of DW_FORM_CLASS_UNKNOWN means we could not properly figure 1457*4d9fdb46SRobert Mustacchiout 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 Mustacchienum 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 1501*4d9fdb46SRobert Mustacchi 1502*4d9fdb46SRobert Mustacchi/*===========================================================================*/ 1503*4d9fdb46SRobert Mustacchi/* Dwarf consumer interface initialization and termination operations */ 1504*4d9fdb46SRobert 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 Mustacchiint 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 Mustacchiint 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 1534*4d9fdb46SRobert Mustacchiint dwarf_init(int /*fd*/, 1535*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*access*/, 1536*4d9fdb46SRobert Mustacchi Dwarf_Handler /*errhand*/, 1537*4d9fdb46SRobert Mustacchi Dwarf_Ptr /*errarg*/, 1538*4d9fdb46SRobert Mustacchi Dwarf_Debug* /*dbg*/, 1539*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 1540*4d9fdb46SRobert 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. */ 1544*4d9fdb46SRobert Mustacchi/* Initialization based on libelf/sgi-fastlibelf open pointer. */ 1545*4d9fdb46SRobert Mustacchi/* New March 2017 */ 1546*4d9fdb46SRobert Mustacchiint 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*/); 1553*4d9fdb46SRobert Mustacchiint dwarf_elf_init(dwarf_elf_handle /*elf*/, 1554*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*access*/, 1555*4d9fdb46SRobert Mustacchi Dwarf_Handler /*errhand*/, 1556*4d9fdb46SRobert Mustacchi Dwarf_Ptr /*errarg*/, 1557*4d9fdb46SRobert Mustacchi Dwarf_Debug* /*dbg*/, 1558*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 1559*4d9fdb46SRobert 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 Mustacchiint dwarf_add_file_path(Dwarf_Debug /*dbg*/, 1566*4d9fdb46SRobert Mustacchi const char * /*file_name*/, 1567*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 1568*4d9fdb46SRobert Mustacchi 1569*4d9fdb46SRobert Mustacchi/* Undocumented function for memory allocator. */ 1570*4d9fdb46SRobert Mustacchivoid dwarf_print_memory_stats(Dwarf_Debug /*dbg*/); 1571*4d9fdb46SRobert Mustacchi 1572*4d9fdb46SRobert Mustacchiint dwarf_get_elf(Dwarf_Debug /*dbg*/, 1573*4d9fdb46SRobert Mustacchi dwarf_elf_handle* /*return_elfptr*/, 1574*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 1575*4d9fdb46SRobert Mustacchi 1576*4d9fdb46SRobert Mustacchiint dwarf_finish(Dwarf_Debug /*dbg*/, Dwarf_Error* /*error*/); 1577*4d9fdb46SRobert Mustacchi 1578*4d9fdb46SRobert Mustacchi 1579*4d9fdb46SRobert Mustacchi/* NEW March 2017. */ 1580*4d9fdb46SRobert Mustacchiint 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 1587*4d9fdb46SRobert Mustacchiint dwarf_object_init(Dwarf_Obj_Access_Interface* /*obj*/, 1588*4d9fdb46SRobert Mustacchi Dwarf_Handler /*errhand*/, 1589*4d9fdb46SRobert Mustacchi Dwarf_Ptr /*errarg*/, 1590*4d9fdb46SRobert Mustacchi Dwarf_Debug* /*dbg*/, 1591*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 1592*4d9fdb46SRobert Mustacchi 1593*4d9fdb46SRobert Mustacchiint 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 Mustacchiint dwarf_get_tied_dbg(Dwarf_Debug /*dbg*/, 1599*4d9fdb46SRobert Mustacchi Dwarf_Debug * /*tieddbg_out*/, 1600*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 1601*4d9fdb46SRobert Mustacchi 1602*4d9fdb46SRobert Mustacchiint dwarf_object_finish(Dwarf_Debug /*dbg*/, 1603*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 1604*4d9fdb46SRobert Mustacchi 1605*4d9fdb46SRobert Mustacchi/* Returns the version string. Example: "20190922" 1606*4d9fdb46SRobert Mustacchi which is in ISO date format. */ 1607*4d9fdb46SRobert Mustacchiconst 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 Mustacchiint 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 Mustacchiint 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 Mustacchiint 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 Mustacchiint 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 */ 1654*4d9fdb46SRobert Mustacchiint dwarf_next_cu_header_b(Dwarf_Debug /*dbg*/, 1655*4d9fdb46SRobert Mustacchi Dwarf_Unsigned* /*cu_header_length*/, 1656*4d9fdb46SRobert Mustacchi Dwarf_Half* /*version_stamp*/, 1657*4d9fdb46SRobert Mustacchi Dwarf_Off* /*abbrev_offset*/, 1658*4d9fdb46SRobert Mustacchi Dwarf_Half* /*address_size*/, 1659*4d9fdb46SRobert Mustacchi Dwarf_Half* /*length_size*/, 1660*4d9fdb46SRobert Mustacchi Dwarf_Half* /*extension_size*/, 1661*4d9fdb46SRobert Mustacchi Dwarf_Unsigned* /*next_cu_header_offset*/, 1662*4d9fdb46SRobert 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 Mustacchiint 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. */ 1680*4d9fdb46SRobert Mustacchiint dwarf_next_cu_header(Dwarf_Debug /*dbg*/, 1681*4d9fdb46SRobert Mustacchi Dwarf_Unsigned* /*cu_header_length*/, 1682*4d9fdb46SRobert Mustacchi Dwarf_Half* /*version_stamp*/, 1683*4d9fdb46SRobert Mustacchi Dwarf_Off* /*abbrev_offset*/, 1684*4d9fdb46SRobert Mustacchi Dwarf_Half* /*address_size*/, 1685*4d9fdb46SRobert Mustacchi Dwarf_Unsigned* /*next_cu_header_offset*/, 1686*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 1687*4d9fdb46SRobert Mustacchi 1688*4d9fdb46SRobert Mustacchiint dwarf_siblingof(Dwarf_Debug /*dbg*/, 1689*4d9fdb46SRobert Mustacchi Dwarf_Die /*die*/, 1690*4d9fdb46SRobert Mustacchi Dwarf_Die* /*return_siblingdie*/, 1691*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 1692*4d9fdb46SRobert Mustacchi/* dwarf_siblingof_b new October 2011. */ 1693*4d9fdb46SRobert Mustacchiint 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 Mustacchiint 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*/); 1705*4d9fdb46SRobert Mustacchi 1706*4d9fdb46SRobert Mustacchiint dwarf_child(Dwarf_Die /*die*/, 1707*4d9fdb46SRobert Mustacchi Dwarf_Die* /*return_childdie*/, 1708*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 1709*4d9fdb46SRobert Mustacchi 1710*4d9fdb46SRobert Mustacchi/* Finding die given global (not CU-relative) offset. 1711*4d9fdb46SRobert Mustacchi Applies only to debug_info. */ 1712*4d9fdb46SRobert Mustacchiint dwarf_offdie(Dwarf_Debug /*dbg*/, 1713*4d9fdb46SRobert Mustacchi Dwarf_Off /*offset*/, 1714*4d9fdb46SRobert Mustacchi Dwarf_Die* /*return_die*/, 1715*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 1716*4d9fdb46SRobert 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 Mustacchiint dwarf_offdie_b(Dwarf_Debug /*dbg*/, 1721*4d9fdb46SRobert Mustacchi Dwarf_Off /*offset*/, 1722*4d9fdb46SRobert Mustacchi Dwarf_Bool /*is_info*/, 1723*4d9fdb46SRobert Mustacchi Dwarf_Die* /*return_die*/, 1724*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 1725*4d9fdb46SRobert 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 MustacchiDwarf_Bool dwarf_get_die_infotypes_flag(Dwarf_Die /*die*/); 1731*4d9fdb46SRobert 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 Mustacchiint dwarf_die_abbrev_global_offset(Dwarf_Die /*die*/, 1736*4d9fdb46SRobert Mustacchi Dwarf_Off * /*abbrev_offset*/, 1737*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*abbrev_count*/, 1738*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 1739*4d9fdb46SRobert Mustacchi 1740*4d9fdb46SRobert Mustacchi/* operations on DIEs */ 1741*4d9fdb46SRobert Mustacchiint dwarf_tag(Dwarf_Die /*die*/, 1742*4d9fdb46SRobert Mustacchi Dwarf_Half* /*return_tag*/, 1743*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 1744*4d9fdb46SRobert Mustacchi 1745*4d9fdb46SRobert Mustacchi/* dwarf_dieoffset returns the global debug_info 1746*4d9fdb46SRobert Mustacchi section offset, not the CU relative offset. */ 1747*4d9fdb46SRobert Mustacchiint dwarf_dieoffset(Dwarf_Die /*die*/, 1748*4d9fdb46SRobert Mustacchi Dwarf_Off* /*return_offset*/, 1749*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 1750*4d9fdb46SRobert 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 Mustacchiint 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 MustacchiDwarf_Bool dwarf_addr_form_is_indexed(int form); 1767*4d9fdb46SRobert Mustacchi 1768*4d9fdb46SRobert Mustacchi 1769*4d9fdb46SRobert Mustacchi/* dwarf_CU_dieoffset_given_die returns 1770*4d9fdb46SRobert Mustacchi the global debug_info section offset of the CU die 1771*4d9fdb46SRobert Mustacchi that is the CU containing the given_die 1772*4d9fdb46SRobert Mustacchi (the passed in DIE can be any DIE). 1773*4d9fdb46SRobert Mustacchi This information makes it possible for a consumer to 1774*4d9fdb46SRobert Mustacchi find and print CU context information for any die. 1775*4d9fdb46SRobert Mustacchi See also dwarf_get_cu_die_offset_given_cu_header_offset. */ 1776*4d9fdb46SRobert Mustacchiint dwarf_CU_dieoffset_given_die(Dwarf_Die /*given_die*/, 1777*4d9fdb46SRobert Mustacchi Dwarf_Off* /*return_offset*/, 1778*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 1779*4d9fdb46SRobert Mustacchi 1780*4d9fdb46SRobert Mustacchi/* dwarf_die_CU_offset returns the CU relative offset 1781*4d9fdb46SRobert Mustacchi not the global debug_info section offset, given 1782*4d9fdb46SRobert Mustacchi any DIE in the CU. See also dwarf_CU_dieoffset_given_die. 1783*4d9fdb46SRobert Mustacchi */ 1784*4d9fdb46SRobert Mustacchiint dwarf_die_CU_offset(Dwarf_Die /*die*/, 1785*4d9fdb46SRobert Mustacchi Dwarf_Off* /*return_offset*/, 1786*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 1787*4d9fdb46SRobert Mustacchi 1788*4d9fdb46SRobert Mustacchiint dwarf_die_CU_offset_range(Dwarf_Die /*die*/, 1789*4d9fdb46SRobert Mustacchi Dwarf_Off* /*return_CU_header_offset*/, 1790*4d9fdb46SRobert Mustacchi Dwarf_Off* /*return_CU_length_bytes*/, 1791*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 1792*4d9fdb46SRobert Mustacchi 1793*4d9fdb46SRobert Mustacchiint dwarf_attr (Dwarf_Die /*die*/, 1794*4d9fdb46SRobert Mustacchi Dwarf_Half /*attr*/, 1795*4d9fdb46SRobert Mustacchi Dwarf_Attribute * /*returned_attr*/, 1796*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 1797*4d9fdb46SRobert Mustacchi 1798*4d9fdb46SRobert Mustacchiint 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 1803*4d9fdb46SRobert Mustacchiint dwarf_diename(Dwarf_Die /*die*/, 1804*4d9fdb46SRobert Mustacchi char ** /*diename*/, 1805*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 1806*4d9fdb46SRobert Mustacchi 1807*4d9fdb46SRobert Mustacchi/* Returns the abbrev code of the die. Cannot fail. */ 1808*4d9fdb46SRobert Mustacchiint dwarf_die_abbrev_code(Dwarf_Die /*die */); 1809*4d9fdb46SRobert 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 Mustacchiint dwarf_die_abbrev_children_flag(Dwarf_Die /*die*/, 1813*4d9fdb46SRobert Mustacchi Dwarf_Half * /*ab_has_child*/); 1814*4d9fdb46SRobert 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 Mustacchiint dwarf_validate_die_sibling(Dwarf_Die /*sibling*/,Dwarf_Off* /*offset*/); 1824*4d9fdb46SRobert Mustacchi 1825*4d9fdb46SRobert Mustacchi/* convenience functions, alternative to using dwarf_attrlist */ 1826*4d9fdb46SRobert Mustacchiint dwarf_hasattr(Dwarf_Die /*die*/, 1827*4d9fdb46SRobert Mustacchi Dwarf_Half /*attr*/, 1828*4d9fdb46SRobert Mustacchi Dwarf_Bool * /*returned_bool*/, 1829*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 1830*4d9fdb46SRobert Mustacchi 1831*4d9fdb46SRobert Mustacchi/* Returns the children offsets for the given offset */ 1832*4d9fdb46SRobert Mustacchiint 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 Mustacchiint 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 Mustacchiint 1858*4d9fdb46SRobert Mustacchidwarf_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 Mustacchiint 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 Mustacchiint 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 Mustacchiint 1893*4d9fdb46SRobert Mustacchidwarf_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 Mustacchiint 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 Mustacchiint 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 Mustacchivoid 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). */ 1935*4d9fdb46SRobert Mustacchiint dwarf_loclist_n(Dwarf_Attribute /*attr*/, 1936*4d9fdb46SRobert Mustacchi Dwarf_Locdesc*** /*llbuf*/, 1937*4d9fdb46SRobert Mustacchi Dwarf_Signed * /*locCount*/, 1938*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 1939*4d9fdb46SRobert Mustacchi 1940*4d9fdb46SRobert Mustacchi/* The original interfaces. Please do not use this. */ 1941*4d9fdb46SRobert Mustacchiint dwarf_loclist(Dwarf_Attribute /*attr*/, /* inflexible! */ 1942*4d9fdb46SRobert Mustacchi Dwarf_Locdesc** /*llbuf*/, 1943*4d9fdb46SRobert Mustacchi Dwarf_Signed * /*locCount*/, 1944*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 1945*4d9fdb46SRobert Mustacchi 1946*4d9fdb46SRobert Mustacchi/* Extracts a dwarf expression from an expression byte stream. 1947*4d9fdb46SRobert Mustacchi Useful to get expressions from DW_CFA_def_cfa_expression 1948*4d9fdb46SRobert Mustacchi DW_CFA_expression DW_CFA_val_expression expression bytes. 1949*4d9fdb46SRobert Mustacchi 27 April 2009: dwarf_loclist_from_expr interface with 1950*4d9fdb46SRobert Mustacchi no addr_size is obsolete but supported, 1951*4d9fdb46SRobert Mustacchi use dwarf_loclist_from_expr_a instead. 1952*4d9fdb46SRobert Mustacchi*/ 1953*4d9fdb46SRobert Mustacchiint 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*/, 1958*4d9fdb46SRobert Mustacchi Dwarf_Error * /* error*/ ); 1959*4d9fdb46SRobert Mustacchi 1960*4d9fdb46SRobert Mustacchi/* dwarf_loclist_from_expr_a new 27 Apr 2009: 1961*4d9fdb46SRobert Mustacchi added addr_size argument. */ 1962*4d9fdb46SRobert Mustacchiint 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*/, 1968*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 1969*4d9fdb46SRobert 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 Mustacchiint 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*/ , 1983*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/ ); 1984*4d9fdb46SRobert Mustacchi 1985*4d9fdb46SRobert Mustacchiint dwarf_lowpc(Dwarf_Die /*die*/, 1986*4d9fdb46SRobert Mustacchi Dwarf_Addr * /*returned_addr*/, 1987*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 1988*4d9fdb46SRobert 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 Mustacchiint 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 */ 2003*4d9fdb46SRobert Mustacchiint dwarf_highpc(Dwarf_Die /*die*/, 2004*4d9fdb46SRobert Mustacchi Dwarf_Addr * /*returned_addr*/, 2005*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 2006*4d9fdb46SRobert Mustacchi 2007*4d9fdb46SRobert Mustacchi/* New January 2016. */ 2008*4d9fdb46SRobert Mustacchiint dwarf_dietype_offset(Dwarf_Die /*die*/, 2009*4d9fdb46SRobert Mustacchi Dwarf_Off * /*return_off*/, 2010*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 2011*4d9fdb46SRobert Mustacchi 2012*4d9fdb46SRobert Mustacchiint dwarf_bytesize(Dwarf_Die /*die*/, 2013*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*returned_size*/, 2014*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 2015*4d9fdb46SRobert Mustacchi 2016*4d9fdb46SRobert Mustacchiint dwarf_bitsize(Dwarf_Die /*die*/, 2017*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*returned_size*/, 2018*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 2019*4d9fdb46SRobert Mustacchi 2020*4d9fdb46SRobert Mustacchiint dwarf_bitoffset(Dwarf_Die /*die*/, 2021*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*returned_offset*/, 2022*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 2023*4d9fdb46SRobert Mustacchi 2024*4d9fdb46SRobert Mustacchiint dwarf_srclang(Dwarf_Die /*die*/, 2025*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*returned_lang*/, 2026*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 2027*4d9fdb46SRobert Mustacchi 2028*4d9fdb46SRobert Mustacchiint dwarf_arrayorder(Dwarf_Die /*die*/, 2029*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*returned_order*/, 2030*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 2031*4d9fdb46SRobert Mustacchi 2032*4d9fdb46SRobert Mustacchi/* end of convenience function list */ 2033*4d9fdb46SRobert Mustacchi 2034*4d9fdb46SRobert Mustacchi/* this is the main interface to attributes of a DIE */ 2035*4d9fdb46SRobert Mustacchiint dwarf_attrlist(Dwarf_Die /*die*/, 2036*4d9fdb46SRobert Mustacchi Dwarf_Attribute** /*attrbuf*/, 2037*4d9fdb46SRobert Mustacchi Dwarf_Signed * /*attrcount*/, 2038*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 2039*4d9fdb46SRobert Mustacchi 2040*4d9fdb46SRobert Mustacchi/* query operations for attributes */ 2041*4d9fdb46SRobert Mustacchiint dwarf_hasform(Dwarf_Attribute /*attr*/, 2042*4d9fdb46SRobert Mustacchi Dwarf_Half /*form*/, 2043*4d9fdb46SRobert Mustacchi Dwarf_Bool * /*returned_bool*/, 2044*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 2045*4d9fdb46SRobert Mustacchi 2046*4d9fdb46SRobert Mustacchiint dwarf_whatform(Dwarf_Attribute /*attr*/, 2047*4d9fdb46SRobert Mustacchi Dwarf_Half * /*returned_final_form*/, 2048*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 2049*4d9fdb46SRobert Mustacchi 2050*4d9fdb46SRobert Mustacchiint dwarf_whatform_direct(Dwarf_Attribute /*attr*/, 2051*4d9fdb46SRobert Mustacchi Dwarf_Half * /*returned_initial_form*/, 2052*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 2053*4d9fdb46SRobert Mustacchiint dwarf_whatattr(Dwarf_Attribute /*attr*/, 2054*4d9fdb46SRobert Mustacchi Dwarf_Half * /*returned_attr_num*/, 2055*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 2056*4d9fdb46SRobert Mustacchi 2057*4d9fdb46SRobert Mustacchi/* 2058*4d9fdb46SRobert Mustacchi The following are concerned with the Primary Interface: getting 2059*4d9fdb46SRobert Mustacchi the actual data values. One function per 'kind' of FORM. 2060*4d9fdb46SRobert Mustacchi*/ 2061*4d9fdb46SRobert Mustacchi/* dwarf_formref returns, thru return_offset, a CU-relative offset 2062*4d9fdb46SRobert Mustacchi and does not allow DW_FORM_ref_addr*/ 2063*4d9fdb46SRobert Mustacchiint dwarf_formref(Dwarf_Attribute /*attr*/, 2064*4d9fdb46SRobert Mustacchi Dwarf_Off* /*return_offset*/, 2065*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 2066*4d9fdb46SRobert Mustacchi/* dwarf_global_formref returns, thru return_offset, 2067*4d9fdb46SRobert Mustacchi a debug_info-relative offset and does allow all reference forms*/ 2068*4d9fdb46SRobert Mustacchiint dwarf_global_formref(Dwarf_Attribute /*attr*/, 2069*4d9fdb46SRobert Mustacchi Dwarf_Off* /*return_offset*/, 2070*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 2071*4d9fdb46SRobert Mustacchi 2072*4d9fdb46SRobert Mustacchi/* dwarf_formsig8 returns in the caller-provided 8 byte area 2073*4d9fdb46SRobert Mustacchi the 8 bytes of a DW_FORM_ref_sig8. Not a string. */ 2074*4d9fdb46SRobert Mustacchiint dwarf_formsig8(Dwarf_Attribute /*attr*/, 2075*4d9fdb46SRobert Mustacchi Dwarf_Sig8 * /*returned sig bytes*/, 2076*4d9fdb46SRobert 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 Mustacchiint dwarf_formsig8_const(Dwarf_Attribute /*attr*/, 2080*4d9fdb46SRobert Mustacchi Dwarf_Sig8 * /*returned sig bytes*/, 2081*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 2082*4d9fdb46SRobert Mustacchi 2083*4d9fdb46SRobert Mustacchiint dwarf_formaddr(Dwarf_Attribute /*attr*/, 2084*4d9fdb46SRobert Mustacchi Dwarf_Addr * /*returned_addr*/, 2085*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 2086*4d9fdb46SRobert 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 Mustacchiint dwarf_get_debug_addr_index(Dwarf_Attribute /*attr*/, 2092*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*return_index*/, 2093*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 2094*4d9fdb46SRobert Mustacchi 2095*4d9fdb46SRobert Mustacchiint dwarf_formflag(Dwarf_Attribute /*attr*/, 2096*4d9fdb46SRobert Mustacchi Dwarf_Bool * /*returned_bool*/, 2097*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 2098*4d9fdb46SRobert Mustacchi 2099*4d9fdb46SRobert Mustacchiint dwarf_formdata16(Dwarf_Attribute /*attr*/, 2100*4d9fdb46SRobert Mustacchi Dwarf_Form_Data16 * /*returned_val*/, 2101*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 2102*4d9fdb46SRobert Mustacchi 2103*4d9fdb46SRobert Mustacchiint dwarf_formudata(Dwarf_Attribute /*attr*/, 2104*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*returned_val*/, 2105*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 2106*4d9fdb46SRobert Mustacchi 2107*4d9fdb46SRobert Mustacchiint dwarf_formsdata(Dwarf_Attribute /*attr*/, 2108*4d9fdb46SRobert Mustacchi Dwarf_Signed * /*returned_val*/, 2109*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 2110*4d9fdb46SRobert Mustacchi 2111*4d9fdb46SRobert Mustacchiint dwarf_formblock(Dwarf_Attribute /*attr*/, 2112*4d9fdb46SRobert Mustacchi Dwarf_Block ** /*returned_block*/, 2113*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 2114*4d9fdb46SRobert Mustacchi 2115*4d9fdb46SRobert Mustacchiint dwarf_formstring(Dwarf_Attribute /*attr*/, 2116*4d9fdb46SRobert Mustacchi char ** /*returned_string*/, 2117*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 2118*4d9fdb46SRobert 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 Mustacchiint 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 2128*4d9fdb46SRobert Mustacchiint dwarf_formexprloc(Dwarf_Attribute /*attr*/, 2129*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*return_exprlen*/, 2130*4d9fdb46SRobert Mustacchi Dwarf_Ptr * /*block_ptr*/, 2131*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 2132*4d9fdb46SRobert Mustacchi 2133*4d9fdb46SRobert Mustacchi 2134*4d9fdb46SRobert Mustacchi/* end attribute query operations. */ 2135*4d9fdb46SRobert Mustacchi 2136*4d9fdb46SRobert Mustacchi/* Start line number operations */ 2137*4d9fdb46SRobert Mustacchi/* dwarf_srclines is the original interface from 1993. */ 2138*4d9fdb46SRobert Mustacchiint dwarf_srclines(Dwarf_Die /*die*/, 2139*4d9fdb46SRobert Mustacchi Dwarf_Line** /*linebuf*/, 2140*4d9fdb46SRobert Mustacchi Dwarf_Signed * /*linecount*/, 2141*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 2142*4d9fdb46SRobert 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 Mustacchiint 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 2172*4d9fdb46SRobert Mustacchivoid dwarf_srclines_dealloc(Dwarf_Debug /*dbg*/, 2173*4d9fdb46SRobert Mustacchi Dwarf_Line* /*linebuf*/, 2174*4d9fdb46SRobert Mustacchi Dwarf_Signed /*count */); 2175*4d9fdb46SRobert Mustacchi 2176*4d9fdb46SRobert 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 Mustacchiint 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 Mustacchiint 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 Mustacchiint 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 Mustacchivoid 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 Mustacchiint 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 Mustacchiint 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 Mustacchiint 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 Mustacchiint 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 Mustacchiint 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 Mustacchiint 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 Mustacchiint 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 Mustacchiint 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 Mustacchiint 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 Mustacchiint 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 Mustacchiint 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 Mustacchiint 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. */ 2340*4d9fdb46SRobert Mustacchiint dwarf_srcfiles(Dwarf_Die /*die*/, 2341*4d9fdb46SRobert Mustacchi char*** /*srcfiles*/, 2342*4d9fdb46SRobert Mustacchi Dwarf_Signed * /*filecount*/, 2343*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 2344*4d9fdb46SRobert Mustacchi 2345*4d9fdb46SRobert Mustacchiint dwarf_linebeginstatement(Dwarf_Line /*line*/, 2346*4d9fdb46SRobert Mustacchi Dwarf_Bool * /*returned_bool*/, 2347*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 2348*4d9fdb46SRobert Mustacchi 2349*4d9fdb46SRobert Mustacchiint dwarf_lineendsequence(Dwarf_Line /*line*/, 2350*4d9fdb46SRobert Mustacchi Dwarf_Bool * /*returned_bool*/, 2351*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 2352*4d9fdb46SRobert Mustacchi 2353*4d9fdb46SRobert Mustacchiint dwarf_lineno(Dwarf_Line /*line*/, 2354*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*returned_lineno*/, 2355*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 2356*4d9fdb46SRobert Mustacchi 2357*4d9fdb46SRobert Mustacchiint dwarf_line_srcfileno(Dwarf_Line /*line*/, 2358*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*ret_fileno*/, 2359*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 2360*4d9fdb46SRobert Mustacchi 2361*4d9fdb46SRobert Mustacchi/* Is the line address from DW_LNS_set_address? */ 2362*4d9fdb46SRobert Mustacchiint 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 2366*4d9fdb46SRobert Mustacchiint dwarf_lineaddr(Dwarf_Line /*line*/, 2367*4d9fdb46SRobert Mustacchi Dwarf_Addr * /*returned_addr*/, 2368*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 2369*4d9fdb46SRobert Mustacchi 2370*4d9fdb46SRobert Mustacchi/* dwarf_lineoff is OBSOLETE as of December 2011. Do not use. */ 2371*4d9fdb46SRobert Mustacchiint dwarf_lineoff(Dwarf_Line /*line*/, 2372*4d9fdb46SRobert Mustacchi Dwarf_Signed * /*returned_lineoffset*/, 2373*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 2374*4d9fdb46SRobert 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 Mustacchiint dwarf_lineoff_b(Dwarf_Line /*line*/, 2379*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*returned_lineoffset*/, 2380*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 2381*4d9fdb46SRobert Mustacchi 2382*4d9fdb46SRobert Mustacchiint dwarf_linesrc(Dwarf_Line /*line*/, 2383*4d9fdb46SRobert Mustacchi char ** /*returned_name*/, 2384*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 2385*4d9fdb46SRobert Mustacchi 2386*4d9fdb46SRobert Mustacchiint dwarf_lineblock(Dwarf_Line /*line*/, 2387*4d9fdb46SRobert Mustacchi Dwarf_Bool * /*returned_bool*/, 2388*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 2389*4d9fdb46SRobert 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 Mustacchiint 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 */, 2397*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 2398*4d9fdb46SRobert Mustacchi/* End line table operations */ 2399*4d9fdb46SRobert 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 Mustacchiint 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 Mustacchiint 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 Mustacchiint 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 Mustacchiint 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 Mustacchiint 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 Mustacchiint 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 Mustacchiint 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 Mustacchiint 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 Mustacchiint 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 Mustacchiint 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 Mustacchiint 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 Mustacchiint 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 Mustacchiint 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 Mustacchiint 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 Mustacchiint 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 Mustacchiint 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 Mustacchiint 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 Mustacchiint 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 Mustacchiint dwarf_return_empty_pubnames(Dwarf_Debug /*dbg*/, 2634*4d9fdb46SRobert Mustacchi int /* flag */, 2635*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 2636*4d9fdb46SRobert Mustacchi 2637*4d9fdb46SRobert Mustacchiint dwarf_get_globals(Dwarf_Debug /*dbg*/, 2638*4d9fdb46SRobert Mustacchi Dwarf_Global** /*globals*/, 2639*4d9fdb46SRobert Mustacchi Dwarf_Signed * /*number_of_globals*/, 2640*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 2641*4d9fdb46SRobert Mustacchivoid dwarf_globals_dealloc(Dwarf_Debug /*dbg*/, 2642*4d9fdb46SRobert Mustacchi Dwarf_Global* /*globals*/, 2643*4d9fdb46SRobert Mustacchi Dwarf_Signed /*number_of_globals*/); 2644*4d9fdb46SRobert Mustacchi 2645*4d9fdb46SRobert Mustacchiint dwarf_globname(Dwarf_Global /*glob*/, 2646*4d9fdb46SRobert Mustacchi char ** /*returned_name*/, 2647*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 2648*4d9fdb46SRobert Mustacchi 2649*4d9fdb46SRobert Mustacchiint dwarf_global_die_offset(Dwarf_Global /*global*/, 2650*4d9fdb46SRobert Mustacchi Dwarf_Off* /*return_offset*/, 2651*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 2652*4d9fdb46SRobert Mustacchi 2653*4d9fdb46SRobert Mustacchi/* This returns the CU die global offset if one knows the 2654*4d9fdb46SRobert Mustacchi CU header global offset. 2655*4d9fdb46SRobert Mustacchi See also dwarf_CU_dieoffset_given_die(). */ 2656*4d9fdb46SRobert Mustacchiint dwarf_get_cu_die_offset_given_cu_header_offset( 2657*4d9fdb46SRobert Mustacchi Dwarf_Debug /*dbg*/, 2658*4d9fdb46SRobert Mustacchi Dwarf_Off /*in_cu_header_offset*/, 2659*4d9fdb46SRobert Mustacchi Dwarf_Off * /*out_cu_die_offset*/, 2660*4d9fdb46SRobert Mustacchi Dwarf_Error * /*err*/); 2661*4d9fdb46SRobert Mustacchi 2662*4d9fdb46SRobert Mustacchi/* The _b form is new October 2011. */ 2663*4d9fdb46SRobert Mustacchiint 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 2671*4d9fdb46SRobert Mustacchi#ifdef __sgi /* pragma is sgi MIPS only */ 2672*4d9fdb46SRobert Mustacchi#pragma optional dwarf_get_cu_die_offset_given_cu_header_offset 2673*4d9fdb46SRobert Mustacchi#endif 2674*4d9fdb46SRobert Mustacchi 2675*4d9fdb46SRobert Mustacchiint dwarf_global_cu_offset(Dwarf_Global /*global*/, 2676*4d9fdb46SRobert Mustacchi Dwarf_Off* /*return_offset*/, 2677*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 2678*4d9fdb46SRobert Mustacchi 2679*4d9fdb46SRobert Mustacchiint dwarf_global_name_offsets(Dwarf_Global /*global*/, 2680*4d9fdb46SRobert Mustacchi char ** /*returned_name*/, 2681*4d9fdb46SRobert Mustacchi Dwarf_Off* /*die_offset*/, 2682*4d9fdb46SRobert Mustacchi Dwarf_Off* /*cu_offset*/, 2683*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 2684*4d9fdb46SRobert 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 Mustacchiint 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 2699*4d9fdb46SRobert Mustacchi/* Static function name operations. */ 2700*4d9fdb46SRobert Mustacchiint dwarf_get_funcs(Dwarf_Debug /*dbg*/, 2701*4d9fdb46SRobert Mustacchi Dwarf_Func** /*funcs*/, 2702*4d9fdb46SRobert Mustacchi Dwarf_Signed * /*number_of_funcs*/, 2703*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 2704*4d9fdb46SRobert Mustacchivoid dwarf_funcs_dealloc(Dwarf_Debug /*dbg*/, 2705*4d9fdb46SRobert Mustacchi Dwarf_Func* /*funcs*/, 2706*4d9fdb46SRobert Mustacchi Dwarf_Signed /*number_of_funcs*/); 2707*4d9fdb46SRobert Mustacchi 2708*4d9fdb46SRobert Mustacchiint dwarf_funcname(Dwarf_Func /*func*/, 2709*4d9fdb46SRobert Mustacchi char ** /*returned_name*/, 2710*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 2711*4d9fdb46SRobert Mustacchi 2712*4d9fdb46SRobert Mustacchiint dwarf_func_die_offset(Dwarf_Func /*func*/, 2713*4d9fdb46SRobert Mustacchi Dwarf_Off* /*return_offset*/, 2714*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 2715*4d9fdb46SRobert Mustacchi 2716*4d9fdb46SRobert Mustacchiint dwarf_func_cu_offset(Dwarf_Func /*func*/, 2717*4d9fdb46SRobert Mustacchi Dwarf_Off* /*return_offset*/, 2718*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 2719*4d9fdb46SRobert Mustacchi 2720*4d9fdb46SRobert Mustacchiint dwarf_func_name_offsets(Dwarf_Func /*func*/, 2721*4d9fdb46SRobert Mustacchi char ** /*returned_name*/, 2722*4d9fdb46SRobert Mustacchi Dwarf_Off* /*die_offset*/, 2723*4d9fdb46SRobert Mustacchi Dwarf_Off* /*cu_offset*/, 2724*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 2725*4d9fdb46SRobert Mustacchi 2726*4d9fdb46SRobert Mustacchi/* User-defined type name operations, SGI IRIX .debug_typenames section. 2727*4d9fdb46SRobert Mustacchi Same content as DWARF3 .debug_pubtypes, but defined years before 2728*4d9fdb46SRobert Mustacchi .debug_pubtypes was defined. SGI IRIX only. */ 2729*4d9fdb46SRobert Mustacchiint dwarf_get_types(Dwarf_Debug /*dbg*/, 2730*4d9fdb46SRobert Mustacchi Dwarf_Type** /*types*/, 2731*4d9fdb46SRobert Mustacchi Dwarf_Signed * /*number_of_types*/, 2732*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 2733*4d9fdb46SRobert Mustacchivoid dwarf_types_dealloc(Dwarf_Debug /*dbg*/, 2734*4d9fdb46SRobert Mustacchi Dwarf_Type* /*types*/, 2735*4d9fdb46SRobert Mustacchi Dwarf_Signed /*number_of_types*/); 2736*4d9fdb46SRobert Mustacchi 2737*4d9fdb46SRobert Mustacchi 2738*4d9fdb46SRobert Mustacchiint dwarf_typename(Dwarf_Type /*type*/, 2739*4d9fdb46SRobert Mustacchi char ** /*returned_name*/, 2740*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 2741*4d9fdb46SRobert Mustacchi 2742*4d9fdb46SRobert Mustacchiint dwarf_type_die_offset(Dwarf_Type /*type*/, 2743*4d9fdb46SRobert Mustacchi Dwarf_Off* /*return_offset*/, 2744*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 2745*4d9fdb46SRobert Mustacchi 2746*4d9fdb46SRobert Mustacchiint dwarf_type_cu_offset(Dwarf_Type /*type*/, 2747*4d9fdb46SRobert Mustacchi Dwarf_Off* /*return_offset*/, 2748*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 2749*4d9fdb46SRobert Mustacchi 2750*4d9fdb46SRobert Mustacchiint dwarf_type_name_offsets(Dwarf_Type /*type*/, 2751*4d9fdb46SRobert Mustacchi char ** /*returned_name*/, 2752*4d9fdb46SRobert Mustacchi Dwarf_Off* /*die_offset*/, 2753*4d9fdb46SRobert Mustacchi Dwarf_Off* /*cu_offset*/, 2754*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 2755*4d9fdb46SRobert Mustacchi 2756*4d9fdb46SRobert Mustacchi/* User-defined type name operations, DWARF3 .debug_pubtypes section. 2757*4d9fdb46SRobert Mustacchi*/ 2758*4d9fdb46SRobert Mustacchiint dwarf_get_pubtypes(Dwarf_Debug /*dbg*/, 2759*4d9fdb46SRobert Mustacchi Dwarf_Type** /*types*/, 2760*4d9fdb46SRobert Mustacchi Dwarf_Signed * /*number_of_types*/, 2761*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 2762*4d9fdb46SRobert Mustacchivoid dwarf_pubtypes_dealloc(Dwarf_Debug /*dbg*/, 2763*4d9fdb46SRobert Mustacchi Dwarf_Type* /*pubtypes*/, 2764*4d9fdb46SRobert Mustacchi Dwarf_Signed /*number_of_pubtypes*/); 2765*4d9fdb46SRobert Mustacchi 2766*4d9fdb46SRobert Mustacchi 2767*4d9fdb46SRobert Mustacchiint dwarf_pubtypename(Dwarf_Type /*type*/, 2768*4d9fdb46SRobert Mustacchi char ** /*returned_name*/, 2769*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 2770*4d9fdb46SRobert Mustacchi 2771*4d9fdb46SRobert Mustacchiint dwarf_pubtype_type_die_offset(Dwarf_Type /*type*/, 2772*4d9fdb46SRobert Mustacchi Dwarf_Off* /*return_offset*/, 2773*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 2774*4d9fdb46SRobert Mustacchi 2775*4d9fdb46SRobert Mustacchiint dwarf_pubtype_cu_offset(Dwarf_Type /*type*/, 2776*4d9fdb46SRobert Mustacchi Dwarf_Off* /*return_offset*/, 2777*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 2778*4d9fdb46SRobert Mustacchi 2779*4d9fdb46SRobert Mustacchiint dwarf_pubtype_name_offsets(Dwarf_Type /*type*/, 2780*4d9fdb46SRobert Mustacchi char ** /*returned_name*/, 2781*4d9fdb46SRobert Mustacchi Dwarf_Off* /*die_offset*/, 2782*4d9fdb46SRobert Mustacchi Dwarf_Off* /*cu_offset*/, 2783*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 2784*4d9fdb46SRobert Mustacchi 2785*4d9fdb46SRobert Mustacchi/* File-scope static variable name operations. */ 2786*4d9fdb46SRobert Mustacchiint dwarf_get_vars(Dwarf_Debug /*dbg*/, 2787*4d9fdb46SRobert Mustacchi Dwarf_Var** /*vars*/, 2788*4d9fdb46SRobert Mustacchi Dwarf_Signed * /*number_of_vars*/, 2789*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 2790*4d9fdb46SRobert Mustacchivoid dwarf_vars_dealloc(Dwarf_Debug /*dbg*/, 2791*4d9fdb46SRobert Mustacchi Dwarf_Var* /*vars*/, 2792*4d9fdb46SRobert Mustacchi Dwarf_Signed /*number_of_vars*/); 2793*4d9fdb46SRobert Mustacchi 2794*4d9fdb46SRobert Mustacchi 2795*4d9fdb46SRobert Mustacchiint dwarf_varname(Dwarf_Var /*var*/, 2796*4d9fdb46SRobert Mustacchi char ** /*returned_name*/, 2797*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 2798*4d9fdb46SRobert Mustacchi 2799*4d9fdb46SRobert Mustacchiint dwarf_var_die_offset(Dwarf_Var /*var*/, 2800*4d9fdb46SRobert Mustacchi Dwarf_Off* /*return_offset*/, 2801*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 2802*4d9fdb46SRobert Mustacchi 2803*4d9fdb46SRobert Mustacchiint dwarf_var_cu_offset(Dwarf_Var /*var*/, 2804*4d9fdb46SRobert Mustacchi Dwarf_Off* /*return_offset*/, 2805*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 2806*4d9fdb46SRobert Mustacchi 2807*4d9fdb46SRobert Mustacchiint dwarf_var_name_offsets(Dwarf_Var /*var*/, 2808*4d9fdb46SRobert Mustacchi char ** /*returned_name*/, 2809*4d9fdb46SRobert Mustacchi Dwarf_Off* /*die_offset*/, 2810*4d9fdb46SRobert Mustacchi Dwarf_Off* /*cu_offset*/, 2811*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 2812*4d9fdb46SRobert Mustacchi 2813*4d9fdb46SRobert Mustacchi/* weak name operations. */ 2814*4d9fdb46SRobert Mustacchiint dwarf_get_weaks(Dwarf_Debug /*dbg*/, 2815*4d9fdb46SRobert Mustacchi Dwarf_Weak** /*weaks*/, 2816*4d9fdb46SRobert Mustacchi Dwarf_Signed * /*number_of_weaks*/, 2817*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 2818*4d9fdb46SRobert Mustacchivoid dwarf_weaks_dealloc(Dwarf_Debug /*dbg*/, 2819*4d9fdb46SRobert Mustacchi Dwarf_Weak* /*weaks*/, 2820*4d9fdb46SRobert Mustacchi Dwarf_Signed /*number_of_weaks*/); 2821*4d9fdb46SRobert Mustacchi 2822*4d9fdb46SRobert Mustacchi 2823*4d9fdb46SRobert Mustacchiint dwarf_weakname(Dwarf_Weak /*weak*/, 2824*4d9fdb46SRobert Mustacchi char ** /*returned_name*/, 2825*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 2826*4d9fdb46SRobert Mustacchi 2827*4d9fdb46SRobert Mustacchiint dwarf_weak_die_offset(Dwarf_Weak /*weak*/, 2828*4d9fdb46SRobert Mustacchi Dwarf_Off* /*return_offset*/, 2829*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 2830*4d9fdb46SRobert Mustacchi 2831*4d9fdb46SRobert Mustacchiint dwarf_weak_cu_offset(Dwarf_Weak /*weak*/, 2832*4d9fdb46SRobert Mustacchi Dwarf_Off* /*return_offset*/, 2833*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 2834*4d9fdb46SRobert Mustacchi 2835*4d9fdb46SRobert Mustacchiint dwarf_weak_name_offsets(Dwarf_Weak /*weak*/, 2836*4d9fdb46SRobert Mustacchi char ** /*returned_name*/, 2837*4d9fdb46SRobert Mustacchi Dwarf_Off* /*die_offset*/, 2838*4d9fdb46SRobert Mustacchi Dwarf_Off* /*cu_offset*/, 2839*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 2840*4d9fdb46SRobert Mustacchi 2841*4d9fdb46SRobert Mustacchi/* location list section operation. (.debug_loc access) */ 2842*4d9fdb46SRobert Mustacchiint dwarf_get_loclist_entry(Dwarf_Debug /*dbg*/, 2843*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*offset*/, 2844*4d9fdb46SRobert Mustacchi Dwarf_Addr* /*hipc*/, 2845*4d9fdb46SRobert Mustacchi Dwarf_Addr* /*lopc*/, 2846*4d9fdb46SRobert Mustacchi Dwarf_Ptr* /*data*/, 2847*4d9fdb46SRobert Mustacchi Dwarf_Unsigned* /*entry_len*/, 2848*4d9fdb46SRobert Mustacchi Dwarf_Unsigned* /*next_entry*/, 2849*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 2850*4d9fdb46SRobert Mustacchi 2851*4d9fdb46SRobert Mustacchi/* abbreviation section operations */ 2852*4d9fdb46SRobert Mustacchiint dwarf_get_abbrev(Dwarf_Debug /*dbg*/, 2853*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*offset*/, 2854*4d9fdb46SRobert Mustacchi Dwarf_Abbrev * /*returned_abbrev*/, 2855*4d9fdb46SRobert Mustacchi Dwarf_Unsigned* /*length*/, 2856*4d9fdb46SRobert Mustacchi Dwarf_Unsigned* /*attr_count*/, 2857*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 2858*4d9fdb46SRobert Mustacchi 2859*4d9fdb46SRobert Mustacchiint dwarf_get_abbrev_tag(Dwarf_Abbrev /*abbrev*/, 2860*4d9fdb46SRobert Mustacchi Dwarf_Half* /*return_tag_number*/, 2861*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 2862*4d9fdb46SRobert Mustacchiint dwarf_get_abbrev_code(Dwarf_Abbrev /*abbrev*/, 2863*4d9fdb46SRobert Mustacchi Dwarf_Unsigned* /*return_code_number*/, 2864*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 2865*4d9fdb46SRobert Mustacchi 2866*4d9fdb46SRobert Mustacchi/* See comments in dwarf_abbrev.c. Not an entirely safe function. */ 2867*4d9fdb46SRobert Mustacchiint dwarf_get_abbrev_count(Dwarf_Debug /*dbg*/); 2868*4d9fdb46SRobert Mustacchi 2869*4d9fdb46SRobert Mustacchiint dwarf_get_abbrev_children_flag(Dwarf_Abbrev /*abbrev*/, 2870*4d9fdb46SRobert Mustacchi Dwarf_Signed* /*return_flag*/, 2871*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 2872*4d9fdb46SRobert 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 Mustacchiint 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. */ 2890*4d9fdb46SRobert Mustacchiint dwarf_get_abbrev_entry(Dwarf_Abbrev /*abbrev*/, 2891*4d9fdb46SRobert Mustacchi Dwarf_Signed /*index*/, 2892*4d9fdb46SRobert Mustacchi Dwarf_Half * /*returned_attr_num*/, 2893*4d9fdb46SRobert Mustacchi Dwarf_Signed* /*form*/, 2894*4d9fdb46SRobert Mustacchi Dwarf_Off* /*offset*/, 2895*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 2896*4d9fdb46SRobert Mustacchi 2897*4d9fdb46SRobert Mustacchiint 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 2901*4d9fdb46SRobert Mustacchi/* consumer string section operation */ 2902*4d9fdb46SRobert Mustacchiint dwarf_get_str(Dwarf_Debug /*dbg*/, 2903*4d9fdb46SRobert Mustacchi Dwarf_Off /*offset*/, 2904*4d9fdb46SRobert Mustacchi char** /*string*/, 2905*4d9fdb46SRobert Mustacchi Dwarf_Signed * /*strlen_of_string*/, 2906*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 2907*4d9fdb46SRobert Mustacchi 2908*4d9fdb46SRobert Mustacchi/* New November 2015 */ 2909*4d9fdb46SRobert Mustacchiint 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 Mustacchiint 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 2918*4d9fdb46SRobert Mustacchi/* Consumer op on gnu .eh_frame info */ 2919*4d9fdb46SRobert Mustacchiint dwarf_get_fde_list_eh( 2920*4d9fdb46SRobert Mustacchi Dwarf_Debug /*dbg*/, 2921*4d9fdb46SRobert Mustacchi Dwarf_Cie** /*cie_data*/, 2922*4d9fdb46SRobert Mustacchi Dwarf_Signed* /*cie_element_count*/, 2923*4d9fdb46SRobert Mustacchi Dwarf_Fde** /*fde_data*/, 2924*4d9fdb46SRobert Mustacchi Dwarf_Signed* /*fde_element_count*/, 2925*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 2926*4d9fdb46SRobert Mustacchi 2927*4d9fdb46SRobert Mustacchi 2928*4d9fdb46SRobert Mustacchi/* consumer operations on frame info: .debug_frame */ 2929*4d9fdb46SRobert Mustacchiint dwarf_get_fde_list(Dwarf_Debug /*dbg*/, 2930*4d9fdb46SRobert Mustacchi Dwarf_Cie** /*cie_data*/, 2931*4d9fdb46SRobert Mustacchi Dwarf_Signed* /*cie_element_count*/, 2932*4d9fdb46SRobert Mustacchi Dwarf_Fde** /*fde_data*/, 2933*4d9fdb46SRobert Mustacchi Dwarf_Signed* /*fde_element_count*/, 2934*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 2935*4d9fdb46SRobert Mustacchi 2936*4d9fdb46SRobert Mustacchi/* Release storage gotten by dwarf_get_fde_list_eh() or 2937*4d9fdb46SRobert Mustacchi dwarf_get_fde_list() */ 2938*4d9fdb46SRobert Mustacchivoid 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*/); 2943*4d9fdb46SRobert Mustacchi 2944*4d9fdb46SRobert Mustacchi 2945*4d9fdb46SRobert Mustacchi 2946*4d9fdb46SRobert Mustacchiint dwarf_get_fde_range(Dwarf_Fde /*fde*/, 2947*4d9fdb46SRobert Mustacchi Dwarf_Addr* /*low_pc*/, 2948*4d9fdb46SRobert Mustacchi Dwarf_Unsigned* /*func_length*/, 2949*4d9fdb46SRobert Mustacchi Dwarf_Ptr* /*fde_bytes*/, 2950*4d9fdb46SRobert Mustacchi Dwarf_Unsigned* /*fde_byte_length*/, 2951*4d9fdb46SRobert Mustacchi Dwarf_Off* /*cie_offset*/, 2952*4d9fdb46SRobert Mustacchi Dwarf_Signed* /*cie_index*/, 2953*4d9fdb46SRobert Mustacchi Dwarf_Off* /*fde_offset*/, 2954*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 2955*4d9fdb46SRobert Mustacchi 2956*4d9fdb46SRobert Mustacchi/* Useful for IRIX only: see dwarf_get_cie_augmentation_data() 2957*4d9fdb46SRobert Mustacchi dwarf_get_fde_augmentation_data() for GNU .eh_frame. */ 2958*4d9fdb46SRobert Mustacchiint dwarf_get_fde_exception_info(Dwarf_Fde /*fde*/, 2959*4d9fdb46SRobert Mustacchi Dwarf_Signed* /* offset_into_exception_tables */, 2960*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 2961*4d9fdb46SRobert Mustacchi 2962*4d9fdb46SRobert Mustacchi 2963*4d9fdb46SRobert Mustacchiint dwarf_get_cie_of_fde(Dwarf_Fde /*fde*/, 2964*4d9fdb46SRobert Mustacchi Dwarf_Cie * /*cie_returned*/, 2965*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 2966*4d9fdb46SRobert Mustacchi 2967*4d9fdb46SRobert Mustacchiint 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*/); 2978*4d9fdb46SRobert Mustacchiint dwarf_get_cie_info(Dwarf_Cie /*cie*/, 2979*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*bytes_in_cie*/, 2980*4d9fdb46SRobert Mustacchi Dwarf_Small* /*version*/, 2981*4d9fdb46SRobert Mustacchi char ** /*augmenter*/, 2982*4d9fdb46SRobert Mustacchi Dwarf_Unsigned* /*code_alignment_factor*/, 2983*4d9fdb46SRobert Mustacchi Dwarf_Signed* /*data_alignment_factor*/, 2984*4d9fdb46SRobert Mustacchi Dwarf_Half* /*return_address_register_rule*/, 2985*4d9fdb46SRobert Mustacchi Dwarf_Ptr* /*initial_instructions*/, 2986*4d9fdb46SRobert Mustacchi Dwarf_Unsigned* /*initial_instructions_length*/, 2987*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 2988*4d9fdb46SRobert Mustacchi 2989*4d9fdb46SRobert Mustacchi/* dwarf_get_cie_index new September 2009. */ 2990*4d9fdb46SRobert Mustacchiint dwarf_get_cie_index( 2991*4d9fdb46SRobert Mustacchi Dwarf_Cie /*cie*/, 2992*4d9fdb46SRobert Mustacchi Dwarf_Signed* /*index*/, 2993*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/ ); 2994*4d9fdb46SRobert Mustacchi 2995*4d9fdb46SRobert Mustacchi 2996*4d9fdb46SRobert Mustacchiint dwarf_get_fde_instr_bytes(Dwarf_Fde /*fde*/, 2997*4d9fdb46SRobert Mustacchi Dwarf_Ptr * /*outinstrs*/, Dwarf_Unsigned * /*outlen*/, 2998*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 2999*4d9fdb46SRobert Mustacchi 3000*4d9fdb46SRobert Mustacchiint dwarf_get_fde_info_for_all_regs(Dwarf_Fde /*fde*/, 3001*4d9fdb46SRobert Mustacchi Dwarf_Addr /*pc_requested*/, 3002*4d9fdb46SRobert Mustacchi Dwarf_Regtable* /*reg_table*/, 3003*4d9fdb46SRobert Mustacchi Dwarf_Addr* /*row_pc*/, 3004*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 3005*4d9fdb46SRobert Mustacchi 3006*4d9fdb46SRobert Mustacchiint dwarf_get_fde_info_for_all_regs3(Dwarf_Fde /*fde*/, 3007*4d9fdb46SRobert Mustacchi Dwarf_Addr /*pc_requested*/, 3008*4d9fdb46SRobert Mustacchi Dwarf_Regtable3* /*reg_table*/, 3009*4d9fdb46SRobert Mustacchi Dwarf_Addr* /*row_pc*/, 3010*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 3011*4d9fdb46SRobert Mustacchi 3012*4d9fdb46SRobert Mustacchi/* In this older interface DW_FRAME_CFA_COL is a meaningful 3013*4d9fdb46SRobert Mustacchi column (which does not work well with DWARF3 or 3014*4d9fdb46SRobert Mustacchi non-MIPS architectures). */ 3015*4d9fdb46SRobert Mustacchiint dwarf_get_fde_info_for_reg(Dwarf_Fde /*fde*/, 3016*4d9fdb46SRobert Mustacchi Dwarf_Half /*table_column*/, 3017*4d9fdb46SRobert Mustacchi Dwarf_Addr /*pc_requested*/, 3018*4d9fdb46SRobert Mustacchi Dwarf_Signed* /*offset_relevant*/, 3019*4d9fdb46SRobert Mustacchi Dwarf_Signed* /*register*/, 3020*4d9fdb46SRobert Mustacchi Dwarf_Signed* /*offset*/, 3021*4d9fdb46SRobert Mustacchi Dwarf_Addr* /*row_pc*/, 3022*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 3023*4d9fdb46SRobert Mustacchi 3024*4d9fdb46SRobert Mustacchi/* See discussion of dw_value_type, libdwarf.h. 3025*4d9fdb46SRobert Mustacchi Use of DW_FRAME_CFA_COL is not meaningful in this interface. 3026*4d9fdb46SRobert Mustacchi See dwarf_get_fde_info_for_cfa_reg3(). 3027*4d9fdb46SRobert Mustacchi*/ 3028*4d9fdb46SRobert Mustacchi/* dwarf_get_fde_info_for_reg3 is useful on a single column, but 3029*4d9fdb46SRobert Mustacchi it is inefficient to iterate across all table_columns using this 3030*4d9fdb46SRobert Mustacchi function. Instead call dwarf_get_fde_info_for_all_regs3() and index 3031*4d9fdb46SRobert Mustacchi into the table it fills in. */ 3032*4d9fdb46SRobert Mustacchiint dwarf_get_fde_info_for_reg3(Dwarf_Fde /*fde*/, 3033*4d9fdb46SRobert Mustacchi Dwarf_Half /*table_column*/, 3034*4d9fdb46SRobert Mustacchi Dwarf_Addr /*pc_requested*/, 3035*4d9fdb46SRobert Mustacchi Dwarf_Small * /*value_type*/, 3036*4d9fdb46SRobert Mustacchi Dwarf_Signed * /*offset_relevant*/, 3037*4d9fdb46SRobert Mustacchi Dwarf_Signed * /*register*/, 3038*4d9fdb46SRobert Mustacchi Dwarf_Signed * /*offset_or_block_len*/, 3039*4d9fdb46SRobert Mustacchi Dwarf_Ptr * /*block_ptr */, 3040*4d9fdb46SRobert Mustacchi Dwarf_Addr * /*row_pc_out*/, 3041*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 3042*4d9fdb46SRobert Mustacchi 3043*4d9fdb46SRobert Mustacchiint 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 Mustacchiint 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. */ 3070*4d9fdb46SRobert Mustacchiint dwarf_get_fde_info_for_cfa_reg3(Dwarf_Fde /*fde*/, 3071*4d9fdb46SRobert Mustacchi Dwarf_Addr /*pc_requested*/, 3072*4d9fdb46SRobert Mustacchi Dwarf_Small * /*value_type*/, 3073*4d9fdb46SRobert Mustacchi Dwarf_Signed * /*offset_relevant*/, 3074*4d9fdb46SRobert Mustacchi Dwarf_Signed* /*register*/, 3075*4d9fdb46SRobert Mustacchi Dwarf_Signed* /*offset_or_block_len*/, 3076*4d9fdb46SRobert Mustacchi Dwarf_Ptr * /*block_ptr */, 3077*4d9fdb46SRobert Mustacchi Dwarf_Addr* /*row_pc_out*/, 3078*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 3079*4d9fdb46SRobert Mustacchi 3080*4d9fdb46SRobert Mustacchiint dwarf_get_fde_for_die(Dwarf_Debug /*dbg*/, 3081*4d9fdb46SRobert Mustacchi Dwarf_Die /*subr_die */, 3082*4d9fdb46SRobert Mustacchi Dwarf_Fde * /*returned_fde*/, 3083*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 3084*4d9fdb46SRobert Mustacchi 3085*4d9fdb46SRobert Mustacchiint dwarf_get_fde_n(Dwarf_Fde* /*fde_data*/, 3086*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*fde_index*/, 3087*4d9fdb46SRobert Mustacchi Dwarf_Fde * /*returned_fde*/, 3088*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 3089*4d9fdb46SRobert Mustacchi 3090*4d9fdb46SRobert Mustacchiint dwarf_get_fde_at_pc(Dwarf_Fde* /*fde_data*/, 3091*4d9fdb46SRobert Mustacchi Dwarf_Addr /*pc_of_interest*/, 3092*4d9fdb46SRobert Mustacchi Dwarf_Fde * /*returned_fde*/, 3093*4d9fdb46SRobert Mustacchi Dwarf_Addr* /*lopc*/, 3094*4d9fdb46SRobert Mustacchi Dwarf_Addr* /*hipc*/, 3095*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 3096*4d9fdb46SRobert Mustacchi 3097*4d9fdb46SRobert Mustacchi/* GNU .eh_frame augmentation information, raw form, see 3098*4d9fdb46SRobert Mustacchi Linux Standard Base Core Specification version 3.0 . */ 3099*4d9fdb46SRobert Mustacchiint dwarf_get_cie_augmentation_data(Dwarf_Cie /* cie*/, 3100*4d9fdb46SRobert Mustacchi Dwarf_Small ** /* augdata */, 3101*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /* augdata_len */, 3102*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 3103*4d9fdb46SRobert Mustacchi/* GNU .eh_frame augmentation information, raw form, see 3104*4d9fdb46SRobert Mustacchi Linux Standard Base Core Specification version 3.0 . */ 3105*4d9fdb46SRobert Mustacchiint dwarf_get_fde_augmentation_data(Dwarf_Fde /* fde*/, 3106*4d9fdb46SRobert Mustacchi Dwarf_Small ** /* augdata */, 3107*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /* augdata_len */, 3108*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 3109*4d9fdb46SRobert Mustacchi 3110*4d9fdb46SRobert Mustacchiint dwarf_expand_frame_instructions(Dwarf_Cie /*cie*/, 3111*4d9fdb46SRobert Mustacchi Dwarf_Ptr /*instruction*/, 3112*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*i_length*/, 3113*4d9fdb46SRobert Mustacchi Dwarf_Frame_Op** /*returned_op_list*/, 3114*4d9fdb46SRobert Mustacchi Dwarf_Signed* /*op_count*/, 3115*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 3116*4d9fdb46SRobert Mustacchi 3117*4d9fdb46SRobert Mustacchi/* Operations on .debug_aranges. */ 3118*4d9fdb46SRobert Mustacchiint dwarf_get_aranges(Dwarf_Debug /*dbg*/, 3119*4d9fdb46SRobert Mustacchi Dwarf_Arange** /*aranges*/, 3120*4d9fdb46SRobert Mustacchi Dwarf_Signed * /*arange_count*/, 3121*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 3122*4d9fdb46SRobert Mustacchi 3123*4d9fdb46SRobert Mustacchiint 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 Mustacchiint 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 3131*4d9fdb46SRobert Mustacchi 3132*4d9fdb46SRobert Mustacchi 3133*4d9fdb46SRobert Mustacchiint dwarf_get_arange( 3134*4d9fdb46SRobert Mustacchi Dwarf_Arange* /*aranges*/, 3135*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*arange_count*/, 3136*4d9fdb46SRobert Mustacchi Dwarf_Addr /*address*/, 3137*4d9fdb46SRobert Mustacchi Dwarf_Arange * /*returned_arange*/, 3138*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 3139*4d9fdb46SRobert Mustacchi 3140*4d9fdb46SRobert Mustacchiint dwarf_get_cu_die_offset( 3141*4d9fdb46SRobert Mustacchi Dwarf_Arange /*arange*/, 3142*4d9fdb46SRobert Mustacchi Dwarf_Off* /*return_offset*/, 3143*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 3144*4d9fdb46SRobert Mustacchi 3145*4d9fdb46SRobert Mustacchiint dwarf_get_arange_cu_header_offset( 3146*4d9fdb46SRobert Mustacchi Dwarf_Arange /*arange*/, 3147*4d9fdb46SRobert Mustacchi Dwarf_Off* /*return_cu_header_offset*/, 3148*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 3149*4d9fdb46SRobert Mustacchi#ifdef __sgi /* pragma is sgi MIPS only */ 3150*4d9fdb46SRobert Mustacchi#pragma optional dwarf_get_arange_cu_header_offset 3151*4d9fdb46SRobert Mustacchi#endif 3152*4d9fdb46SRobert Mustacchi 3153*4d9fdb46SRobert Mustacchi/* DWARF2,3 interface. No longer really adequate (it was never 3154*4d9fdb46SRobert Mustacchi right for segmented address spaces, please switch 3155*4d9fdb46SRobert Mustacchi to using dwarf_get_arange_info_b instead. 3156*4d9fdb46SRobert Mustacchi There is no effective difference between these 3157*4d9fdb46SRobert Mustacchi functions if the address space 3158*4d9fdb46SRobert Mustacchi of the target is not segmented. */ 3159*4d9fdb46SRobert Mustacchiint dwarf_get_arange_info( 3160*4d9fdb46SRobert Mustacchi Dwarf_Arange /*arange*/, 3161*4d9fdb46SRobert Mustacchi Dwarf_Addr* /*start*/, 3162*4d9fdb46SRobert Mustacchi Dwarf_Unsigned* /*length*/, 3163*4d9fdb46SRobert Mustacchi Dwarf_Off* /*cu_die_offset*/, 3164*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/ ); 3165*4d9fdb46SRobert Mustacchi 3166*4d9fdb46SRobert Mustacchi/* New for DWARF4, entries may have segment information. 3167*4d9fdb46SRobert Mustacchi *segment is only meaningful if *segment_entry_size is non-zero. */ 3168*4d9fdb46SRobert Mustacchiint dwarf_get_arange_info_b( 3169*4d9fdb46SRobert Mustacchi Dwarf_Arange /*arange*/, 3170*4d9fdb46SRobert Mustacchi Dwarf_Unsigned* /*segment*/, 3171*4d9fdb46SRobert Mustacchi Dwarf_Unsigned* /*segment_entry_size*/, 3172*4d9fdb46SRobert Mustacchi Dwarf_Addr * /*start*/, 3173*4d9fdb46SRobert Mustacchi Dwarf_Unsigned* /*length*/, 3174*4d9fdb46SRobert Mustacchi Dwarf_Off * /*cu_die_offset*/, 3175*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/ ); 3176*4d9fdb46SRobert Mustacchi 3177*4d9fdb46SRobert Mustacchi/* BEGIN: DWARF5 .debug_macro interfaces 3178*4d9fdb46SRobert Mustacchi NEW November 2015. */ 3179*4d9fdb46SRobert Mustacchiint 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 Mustacchiint 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 Mustacchivoid dwarf_dealloc_macro_context(Dwarf_Macro_Context /*mc*/); 3199*4d9fdb46SRobert Mustacchiint 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 Mustacchiint 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 Mustacchiint 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 Mustacchiint 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 Mustacchiint 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 Mustacchiint 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 Mustacchiint 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. */ 3259*4d9fdb46SRobert Mustacchi 3260*4d9fdb46SRobert Mustacchi/* consumer .debug_macinfo information interface. 3261*4d9fdb46SRobert Mustacchi*/ 3262*4d9fdb46SRobert Mustacchistruct Dwarf_Macro_Details_s { 3263*4d9fdb46SRobert Mustacchi Dwarf_Off dmd_offset; /* offset, in the section, 3264*4d9fdb46SRobert Mustacchi of this macro info */ 3265*4d9fdb46SRobert Mustacchi Dwarf_Small dmd_type; /* the type, DW_MACINFO_define etc*/ 3266*4d9fdb46SRobert 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 */ 3269*4d9fdb46SRobert Mustacchi 3270*4d9fdb46SRobert Mustacchi Dwarf_Signed dmd_fileindex;/* the source file index: 3271*4d9fdb46SRobert Mustacchi applies to define undef start_file */ 3272*4d9fdb46SRobert Mustacchi char * dmd_macro; /* macro name (with value for defineop) 3273*4d9fdb46SRobert Mustacchi string from vendor ext */ 3274*4d9fdb46SRobert Mustacchi}; 3275*4d9fdb46SRobert Mustacchi 3276*4d9fdb46SRobert Mustacchi/* dwarf_print_lines is for use by dwarfdump: it prints 3277*4d9fdb46SRobert Mustacchi line info to stdout. 3278*4d9fdb46SRobert Mustacchi The _dwarf name is obsolete. Use dwarf_ instead. 3279*4d9fdb46SRobert Mustacchi Added extra argnument 2/2009 for better checking. 3280*4d9fdb46SRobert Mustacchi*/ 3281*4d9fdb46SRobert Mustacchiint _dwarf_print_lines(Dwarf_Die /*cu_die*/,Dwarf_Error * /*error*/); 3282*4d9fdb46SRobert Mustacchiint dwarf_print_lines(Dwarf_Die /*cu_die*/,Dwarf_Error * /*error*/, 3283*4d9fdb46SRobert Mustacchi int * /*error_count_out */); 3284*4d9fdb46SRobert 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 Mustacchitypedef void (* dwarf_printf_callback_function_type) 3300*4d9fdb46SRobert Mustacchi (void * /*user_pointer*/, const char * /*linecontent*/); 3301*4d9fdb46SRobert Mustacchi 3302*4d9fdb46SRobert Mustacchistruct 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 Mustacchistruct Dwarf_Printf_Callback_Info_s 3314*4d9fdb46SRobert Mustacchidwarf_register_printf_callback(Dwarf_Debug /*dbg*/, 3315*4d9fdb46SRobert Mustacchi struct Dwarf_Printf_Callback_Info_s * /*newvalues*/); 3316*4d9fdb46SRobert Mustacchi 3317*4d9fdb46SRobert Mustacchi 3318*4d9fdb46SRobert Mustacchi/* dwarf_check_lineheader lets dwarfdump get detailed messages 3319*4d9fdb46SRobert Mustacchi about some compiler errors we detect. 3320*4d9fdb46SRobert Mustacchi We return the count of detected errors through the 3321*4d9fdb46SRobert 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(). 3325*4d9fdb46SRobert Mustacchi*/ 3326*4d9fdb46SRobert Mustacchiint dwarf_check_lineheader_b(Dwarf_Die /*cu_die*/, 3327*4d9fdb46SRobert Mustacchi int */*errcount_out*/, 3328*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 3329*4d9fdb46SRobert Mustacchivoid dwarf_check_lineheader(Dwarf_Die /*cu_die*/, 3330*4d9fdb46SRobert Mustacchi int * /*errcount_out*/); 3331*4d9fdb46SRobert Mustacchi 3332*4d9fdb46SRobert Mustacchi/* dwarf_ld_sort_lines helps SGI IRIX ld 3333*4d9fdb46SRobert Mustacchi rearrange lines in .debug_line in a .o created with a text 3334*4d9fdb46SRobert Mustacchi section per function. 3335*4d9fdb46SRobert Mustacchi -OPT:procedure_reorder=ON 3336*4d9fdb46SRobert Mustacchi where ld-cord (cord(1)ing by ld, 3337*4d9fdb46SRobert Mustacchi not by cord(1)) may have changed the function order. 3338*4d9fdb46SRobert Mustacchi The _dwarf name is obsolete. Use dwarf_ instead. 3339*4d9fdb46SRobert Mustacchi*/ 3340*4d9fdb46SRobert Mustacchiint _dwarf_ld_sort_lines( 3341*4d9fdb46SRobert Mustacchi void * /*orig_buffer*/, 3342*4d9fdb46SRobert Mustacchi unsigned long /* buffer_len*/, 3343*4d9fdb46SRobert Mustacchi int /*is_64_bit*/, 3344*4d9fdb46SRobert Mustacchi int * /*any_change*/, 3345*4d9fdb46SRobert Mustacchi int * /*err_code*/); 3346*4d9fdb46SRobert Mustacchiint dwarf_ld_sort_lines( 3347*4d9fdb46SRobert Mustacchi void * /*orig_buffer*/, 3348*4d9fdb46SRobert Mustacchi unsigned long /*buffer_len*/, 3349*4d9fdb46SRobert Mustacchi int /*is_64_bit*/, 3350*4d9fdb46SRobert Mustacchi int * /*any_change*/, 3351*4d9fdb46SRobert Mustacchi int * /*err_code*/); 3352*4d9fdb46SRobert Mustacchi 3353*4d9fdb46SRobert Mustacchi/* Used by dwarfdump -v to print fde offsets from debugging 3354*4d9fdb46SRobert Mustacchi info. 3355*4d9fdb46SRobert Mustacchi The _dwarf name is obsolete. Use dwarf_ instead. 3356*4d9fdb46SRobert Mustacchi*/ 3357*4d9fdb46SRobert Mustacchiint _dwarf_fde_section_offset(Dwarf_Debug /*dbg*/, 3358*4d9fdb46SRobert Mustacchi Dwarf_Fde /*in_fde*/, 3359*4d9fdb46SRobert Mustacchi Dwarf_Off * /*fde_off*/, 3360*4d9fdb46SRobert Mustacchi Dwarf_Off * /*cie_off*/, 3361*4d9fdb46SRobert Mustacchi Dwarf_Error * /*err*/); 3362*4d9fdb46SRobert Mustacchi 3363*4d9fdb46SRobert Mustacchiint dwarf_fde_section_offset(Dwarf_Debug /*dbg*/, 3364*4d9fdb46SRobert Mustacchi Dwarf_Fde /*in_fde*/, 3365*4d9fdb46SRobert Mustacchi Dwarf_Off * /*fde_off*/, 3366*4d9fdb46SRobert Mustacchi Dwarf_Off * /*cie_off*/, 3367*4d9fdb46SRobert Mustacchi Dwarf_Error * /*err*/); 3368*4d9fdb46SRobert Mustacchi 3369*4d9fdb46SRobert Mustacchi/* Used by dwarfdump -v to print cie offsets from debugging 3370*4d9fdb46SRobert Mustacchi info. 3371*4d9fdb46SRobert Mustacchi The _dwarf name is obsolete. Use dwarf_ instead. 3372*4d9fdb46SRobert Mustacchi*/ 3373*4d9fdb46SRobert Mustacchiint dwarf_cie_section_offset(Dwarf_Debug /*dbg*/, 3374*4d9fdb46SRobert Mustacchi Dwarf_Cie /*in_cie*/, 3375*4d9fdb46SRobert Mustacchi Dwarf_Off * /*cie_off */, 3376*4d9fdb46SRobert Mustacchi Dwarf_Error * /*err*/); 3377*4d9fdb46SRobert Mustacchiint _dwarf_cie_section_offset(Dwarf_Debug /*dbg*/, 3378*4d9fdb46SRobert Mustacchi Dwarf_Cie /*in_cie*/, 3379*4d9fdb46SRobert Mustacchi Dwarf_Off * /*cie_off*/, 3380*4d9fdb46SRobert Mustacchi Dwarf_Error * /*err*/); 3381*4d9fdb46SRobert Mustacchi 3382*4d9fdb46SRobert Mustacchitypedef struct Dwarf_Macro_Details_s Dwarf_Macro_Details; 3383*4d9fdb46SRobert Mustacchi 3384*4d9fdb46SRobert Mustacchichar *dwarf_find_macro_value_start(char * /*macro_string*/); 3385*4d9fdb46SRobert Mustacchi 3386*4d9fdb46SRobert Mustacchiint dwarf_get_macro_details(Dwarf_Debug /*dbg*/, 3387*4d9fdb46SRobert Mustacchi Dwarf_Off /*macro_offset*/, 3388*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*maximum_count*/, 3389*4d9fdb46SRobert Mustacchi Dwarf_Signed * /*entry_count*/, 3390*4d9fdb46SRobert Mustacchi Dwarf_Macro_Details ** /*details*/, 3391*4d9fdb46SRobert Mustacchi Dwarf_Error * /*err*/); 3392*4d9fdb46SRobert Mustacchi 3393*4d9fdb46SRobert Mustacchi 3394*4d9fdb46SRobert Mustacchi/* dwarf_get_offset_size() New October 2015 */ 3395*4d9fdb46SRobert Mustacchiint dwarf_get_offset_size(Dwarf_Debug /*dbg*/, 3396*4d9fdb46SRobert Mustacchi Dwarf_Half * /*offset_size*/, 3397*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 3398*4d9fdb46SRobert Mustacchiint dwarf_get_address_size(Dwarf_Debug /*dbg*/, 3399*4d9fdb46SRobert Mustacchi Dwarf_Half * /*addr_size*/, 3400*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 3401*4d9fdb46SRobert Mustacchiint dwarf_get_die_address_size(Dwarf_Die /*die*/, 3402*4d9fdb46SRobert Mustacchi Dwarf_Half * /*addr_size*/, 3403*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 3404*4d9fdb46SRobert Mustacchi 3405*4d9fdb46SRobert Mustacchienum Dwarf_Form_Class dwarf_get_form_class( 3406*4d9fdb46SRobert Mustacchi Dwarf_Half /* dwversion */, 3407*4d9fdb46SRobert Mustacchi Dwarf_Half /* attrnum */, 3408*4d9fdb46SRobert Mustacchi Dwarf_Half /*offset_size */, 3409*4d9fdb46SRobert Mustacchi Dwarf_Half /*form*/); 3410*4d9fdb46SRobert Mustacchi 3411*4d9fdb46SRobert 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 Mustacchiint 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 Mustacchiint 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 Mustacchiint 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 Mustacchiint 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 Mustacchiint 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 Mustacchiint 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 Mustacchiint 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 Mustacchiint 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 Mustacchiint 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 Mustacchiint 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 Mustacchiint 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 Mustacchiint 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 Mustacchiint 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 Mustacchivoid 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 Mustacchiint 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 Mustacchiint 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 Mustacchiint 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 Mustacchiint 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 Mustacchiint 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 Mustacchivoid 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 Mustacchistruct 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 Mustacchitypedef 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 Mustacchiint 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 Mustacchiint 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 MustacchiDwarf_Unsigned dwarf_errno(Dwarf_Error /*error*/); 3635*4d9fdb46SRobert Mustacchichar* dwarf_errmsg(Dwarf_Error /*error*/); 3636*4d9fdb46SRobert Mustacchichar* dwarf_errmsg_by_number(Dwarf_Unsigned /* errornum */); 3637*4d9fdb46SRobert Mustacchivoid dwarf_error_creation(Dwarf_Debug /*dbg*/ , 3638*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/, char * /*errmsg*/); 3639*4d9fdb46SRobert Mustacchi 3640*4d9fdb46SRobert Mustacchi 3641*4d9fdb46SRobert 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. */ 3649*4d9fdb46SRobert Mustacchiint dwarf_set_stringcheck(int /*stringcheck*/); 3650*4d9fdb46SRobert Mustacchi 3651*4d9fdb46SRobert 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. */ 3664*4d9fdb46SRobert Mustacchiint dwarf_set_reloc_application(int /*apply*/); 3665*4d9fdb46SRobert Mustacchi 3666*4d9fdb46SRobert Mustacchi/* Never Implemented */ 3667*4d9fdb46SRobert MustacchiDwarf_Handler dwarf_seterrhand(Dwarf_Debug /*dbg*/, 3668*4d9fdb46SRobert Mustacchi Dwarf_Handler /*errhand*/); 3669*4d9fdb46SRobert Mustacchi 3670*4d9fdb46SRobert Mustacchi/* Unimplemented */ 3671*4d9fdb46SRobert MustacchiDwarf_Ptr dwarf_seterrarg(Dwarf_Debug /*dbg*/, Dwarf_Ptr /*errarg*/); 3672*4d9fdb46SRobert Mustacchi 3673*4d9fdb46SRobert Mustacchivoid dwarf_dealloc(Dwarf_Debug /*dbg*/, void* /*space*/, 3674*4d9fdb46SRobert 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 Mustacchivoid dwarf_dealloc_error(Dwarf_Debug /*dbg*/, Dwarf_Error /*err*/); 3679*4d9fdb46SRobert Mustacchivoid dwarf_dealloc_die( Dwarf_Die /*die*/); 3680*4d9fdb46SRobert Mustacchivoid dwarf_dealloc_attribute(Dwarf_Attribute /*attr*/); 3681*4d9fdb46SRobert Mustacchi 3682*4d9fdb46SRobert Mustacchi 3683*4d9fdb46SRobert Mustacchi/* DWARF Producer Interface */ 3684*4d9fdb46SRobert Mustacchi 3685*4d9fdb46SRobert Mustacchi/* New form June, 2011. Adds user_data argument. */ 3686*4d9fdb46SRobert Mustacchitypedef int (*Dwarf_Callback_Func)( 3687*4d9fdb46SRobert Mustacchi const char* /*name*/, 3688*4d9fdb46SRobert Mustacchi int /*size*/, 3689*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*type*/, 3690*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*flags*/, 3691*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*link*/, 3692*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*info*/, 3693*4d9fdb46SRobert Mustacchi Dwarf_Unsigned* /*sect_name_index*/, 3694*4d9fdb46SRobert Mustacchi void * /*user_data*/, 3695*4d9fdb46SRobert Mustacchi int* /*error*/); 3696*4d9fdb46SRobert 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 Mustacchiint dwarf_producer_init( 3701*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*flags*/, 3702*4d9fdb46SRobert Mustacchi Dwarf_Callback_Func /*func*/, 3703*4d9fdb46SRobert Mustacchi Dwarf_Handler /*errhand*/, 3704*4d9fdb46SRobert 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 */ 3710*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 3711*4d9fdb46SRobert 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 Mustacchiint dwarf_pro_set_default_string_form(Dwarf_P_Debug /*dbg*/, 3716*4d9fdb46SRobert Mustacchi int /*desired_form*/, 3717*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 3718*4d9fdb46SRobert Mustacchi 3719*4d9fdb46SRobert Mustacchi/* the old interface. Still supported. */ 3720*4d9fdb46SRobert MustacchiDwarf_Signed dwarf_transform_to_disk_form(Dwarf_P_Debug /*dbg*/, 3721*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 3722*4d9fdb46SRobert Mustacchi/* New September 2016. The preferred interface. */ 3723*4d9fdb46SRobert Mustacchiint dwarf_transform_to_disk_form_a(Dwarf_P_Debug /*dbg*/, 3724*4d9fdb46SRobert Mustacchi Dwarf_Signed * /*nbufs_out*/, 3725*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 3726*4d9fdb46SRobert Mustacchi 3727*4d9fdb46SRobert Mustacchi/* New September 2016. Preferred. */ 3728*4d9fdb46SRobert Mustacchiint 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. */ 3736*4d9fdb46SRobert MustacchiDwarf_Ptr dwarf_get_section_bytes(Dwarf_P_Debug /*dbg*/, 3737*4d9fdb46SRobert Mustacchi Dwarf_Signed /*dwarf_section*/, 3738*4d9fdb46SRobert Mustacchi Dwarf_Signed* /*elf_section_index*/, 3739*4d9fdb46SRobert Mustacchi Dwarf_Unsigned* /*length*/, 3740*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 3741*4d9fdb46SRobert Mustacchi 3742*4d9fdb46SRobert Mustacchiint dwarf_get_relocation_info_count( 3743*4d9fdb46SRobert Mustacchi Dwarf_P_Debug /*dbg*/, 3744*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*count_of_relocation_sections*/, 3745*4d9fdb46SRobert Mustacchi int * /*drd_buffer_version*/, 3746*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 3747*4d9fdb46SRobert Mustacchi 3748*4d9fdb46SRobert Mustacchiint dwarf_get_relocation_info( 3749*4d9fdb46SRobert Mustacchi Dwarf_P_Debug /*dbg*/, 3750*4d9fdb46SRobert Mustacchi Dwarf_Signed * /*elf_section_index*/, 3751*4d9fdb46SRobert Mustacchi Dwarf_Signed * /*elf_section_index_link*/, 3752*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*relocation_buffer_count*/, 3753*4d9fdb46SRobert Mustacchi Dwarf_Relocation_Data * /*reldata_buffer*/, 3754*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 3755*4d9fdb46SRobert Mustacchi 3756*4d9fdb46SRobert Mustacchi/* v1: no drd_length field, enum explicit */ 3757*4d9fdb46SRobert Mustacchi/* v2: has the drd_length field, enum value in uchar member */ 3758*4d9fdb46SRobert Mustacchi#define DWARF_DRD_BUFFER_VERSION 2 3759*4d9fdb46SRobert Mustacchi 3760*4d9fdb46SRobert Mustacchi/* Markers are not written to DWARF2/3/4, they are user 3761*4d9fdb46SRobert Mustacchi defined and may be used for any purpose. 3762*4d9fdb46SRobert Mustacchi*/ 3763*4d9fdb46SRobert MustacchiDwarf_Signed dwarf_get_die_markers( 3764*4d9fdb46SRobert Mustacchi Dwarf_P_Debug /*dbg*/, 3765*4d9fdb46SRobert Mustacchi Dwarf_P_Marker * /*marker_list*/, 3766*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*marker_count*/, 3767*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 3768*4d9fdb46SRobert Mustacchi 3769*4d9fdb46SRobert Mustacchi/* Preferred version December 2018. */ 3770*4d9fdb46SRobert Mustacchiint 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 3776*4d9fdb46SRobert Mustacchiint dwarf_get_string_attributes_count(Dwarf_P_Debug, 3777*4d9fdb46SRobert Mustacchi Dwarf_Unsigned *, 3778*4d9fdb46SRobert Mustacchi int *, 3779*4d9fdb46SRobert Mustacchi Dwarf_Error *); 3780*4d9fdb46SRobert Mustacchi 3781*4d9fdb46SRobert Mustacchiint dwarf_get_string_attributes_info(Dwarf_P_Debug, 3782*4d9fdb46SRobert Mustacchi Dwarf_Signed *, 3783*4d9fdb46SRobert Mustacchi Dwarf_Unsigned *, 3784*4d9fdb46SRobert Mustacchi Dwarf_P_String_Attr *, 3785*4d9fdb46SRobert Mustacchi Dwarf_Error *); 3786*4d9fdb46SRobert Mustacchi 3787*4d9fdb46SRobert Mustacchivoid dwarf_reset_section_bytes(Dwarf_P_Debug /*dbg*/); 3788*4d9fdb46SRobert Mustacchi 3789*4d9fdb46SRobert MustacchiDwarf_Unsigned dwarf_producer_finish(Dwarf_P_Debug /*dbg*/, 3790*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 3791*4d9fdb46SRobert Mustacchi 3792*4d9fdb46SRobert Mustacchi/* Returns DW_DLV_OK or DW_DLV_ERROR */ 3793*4d9fdb46SRobert Mustacchiint dwarf_producer_finish_a(Dwarf_P_Debug /*dbg*/, 3794*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 3795*4d9fdb46SRobert Mustacchi 3796*4d9fdb46SRobert Mustacchi/* Producer attribute addition functions. */ 3797*4d9fdb46SRobert MustacchiDwarf_P_Attribute dwarf_add_AT_targ_address(Dwarf_P_Debug /*dbg*/, 3798*4d9fdb46SRobert Mustacchi Dwarf_P_Die /*ownerdie*/, 3799*4d9fdb46SRobert Mustacchi Dwarf_Half /*attr*/, 3800*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*pc_value*/, 3801*4d9fdb46SRobert Mustacchi Dwarf_Signed /*sym_index*/, 3802*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 3803*4d9fdb46SRobert MustacchiDwarf_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 Mustacchiint 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 Mustacchiint 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*/); 3827*4d9fdb46SRobert Mustacchi 3828*4d9fdb46SRobert MustacchiDwarf_P_Attribute dwarf_add_AT_block(Dwarf_P_Debug /*dbg*/, 3829*4d9fdb46SRobert Mustacchi Dwarf_P_Die /*ownerdie*/, 3830*4d9fdb46SRobert Mustacchi Dwarf_Half /*attr*/, 3831*4d9fdb46SRobert Mustacchi Dwarf_Small* /*block_data*/, 3832*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*block_len*/, 3833*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 3834*4d9fdb46SRobert Mustacchi 3835*4d9fdb46SRobert MustacchiDwarf_P_Attribute dwarf_add_AT_ref_address(Dwarf_P_Debug /*dbg*/, 3836*4d9fdb46SRobert Mustacchi Dwarf_P_Die /*ownerdie*/, 3837*4d9fdb46SRobert Mustacchi Dwarf_Half /*attr*/, 3838*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*pc_value*/, 3839*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*sym_index*/, 3840*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 3841*4d9fdb46SRobert Mustacchi 3842*4d9fdb46SRobert Mustacchi/* New December 2018. Preferred version. */ 3843*4d9fdb46SRobert Mustacchiint dwarf_add_AT_ref_address_a(Dwarf_P_Debug /*dbg*/, 3844*4d9fdb46SRobert Mustacchi Dwarf_P_Die /*ownerdie*/, 3845*4d9fdb46SRobert Mustacchi Dwarf_Half /*attr*/, 3846*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*pc_value*/, 3847*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*sym_index*/, 3848*4d9fdb46SRobert Mustacchi Dwarf_P_Attribute * /*attr_out*/, 3849*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 3850*4d9fdb46SRobert Mustacchi 3851*4d9fdb46SRobert MustacchiDwarf_P_Attribute dwarf_add_AT_unsigned_const(Dwarf_P_Debug /*dbg*/, 3852*4d9fdb46SRobert Mustacchi Dwarf_P_Die /*ownerdie*/, 3853*4d9fdb46SRobert Mustacchi Dwarf_Half /*attr*/, 3854*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*value*/, 3855*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 3856*4d9fdb46SRobert Mustacchi 3857*4d9fdb46SRobert Mustacchi/* New December 2018. Preferred version. */ 3858*4d9fdb46SRobert Mustacchiint 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 3865*4d9fdb46SRobert MustacchiDwarf_P_Attribute dwarf_add_AT_signed_const(Dwarf_P_Debug /*dbg*/, 3866*4d9fdb46SRobert Mustacchi Dwarf_P_Die /*ownerdie*/, 3867*4d9fdb46SRobert Mustacchi Dwarf_Half /*attr*/, 3868*4d9fdb46SRobert Mustacchi Dwarf_Signed /*value*/, 3869*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 3870*4d9fdb46SRobert Mustacchi 3871*4d9fdb46SRobert Mustacchi/* New December 2018. Preferred version. */ 3872*4d9fdb46SRobert Mustacchiint 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 3879*4d9fdb46SRobert MustacchiDwarf_P_Attribute dwarf_add_AT_reference(Dwarf_P_Debug /*dbg*/, 3880*4d9fdb46SRobert Mustacchi Dwarf_P_Die /*ownerdie*/, 3881*4d9fdb46SRobert Mustacchi Dwarf_Half /*attr*/, 3882*4d9fdb46SRobert Mustacchi Dwarf_P_Die /*otherdie*/, 3883*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 3884*4d9fdb46SRobert 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 MustacchiDwarf_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 Mustacchiint 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 Mustacchiint 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 3917*4d9fdb46SRobert MustacchiDwarf_P_Attribute dwarf_add_AT_dataref( 3918*4d9fdb46SRobert Mustacchi Dwarf_P_Debug /*dbg*/, 3919*4d9fdb46SRobert Mustacchi Dwarf_P_Die /*ownerdie*/, 3920*4d9fdb46SRobert Mustacchi Dwarf_Half /*attr*/, 3921*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*pcvalue*/, 3922*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*sym_index*/, 3923*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 3924*4d9fdb46SRobert Mustacchi 3925*4d9fdb46SRobert Mustacchi/* New December 2018. Preferred version. */ 3926*4d9fdb46SRobert Mustacchiint 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 MustacchiDwarf_P_Attribute dwarf_add_AT_const_value_string( 3936*4d9fdb46SRobert Mustacchi Dwarf_P_Die /*ownerdie*/, 3937*4d9fdb46SRobert Mustacchi char* /*string_value*/, 3938*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 3939*4d9fdb46SRobert Mustacchi 3940*4d9fdb46SRobert Mustacchi/* New December 2018. Preferred version. */ 3941*4d9fdb46SRobert Mustacchiint 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 3947*4d9fdb46SRobert MustacchiDwarf_P_Attribute dwarf_add_AT_location_expr(Dwarf_P_Debug /*dbg*/, 3948*4d9fdb46SRobert Mustacchi Dwarf_P_Die /*ownerdie*/, 3949*4d9fdb46SRobert Mustacchi Dwarf_Half /*attr*/, 3950*4d9fdb46SRobert Mustacchi Dwarf_P_Expr /*loc_expr*/, 3951*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 3952*4d9fdb46SRobert Mustacchi 3953*4d9fdb46SRobert Mustacchi/* New December 2018. Preferred version. */ 3954*4d9fdb46SRobert Mustacchiint 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 3961*4d9fdb46SRobert MustacchiDwarf_P_Attribute dwarf_add_AT_string(Dwarf_P_Debug /*dbg*/, 3962*4d9fdb46SRobert Mustacchi Dwarf_P_Die /*ownerdie*/, 3963*4d9fdb46SRobert Mustacchi Dwarf_Half /*attr*/, 3964*4d9fdb46SRobert Mustacchi char* /*string*/, 3965*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 3966*4d9fdb46SRobert Mustacchi 3967*4d9fdb46SRobert Mustacchi/* Preferred as of December 2018. */ 3968*4d9fdb46SRobert Mustacchiint 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 3975*4d9fdb46SRobert MustacchiDwarf_P_Attribute dwarf_add_AT_flag(Dwarf_P_Debug /*dbg*/, 3976*4d9fdb46SRobert Mustacchi Dwarf_P_Die /*ownerdie*/, 3977*4d9fdb46SRobert Mustacchi Dwarf_Half /*attr*/, 3978*4d9fdb46SRobert Mustacchi Dwarf_Small /*flag*/, 3979*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 3980*4d9fdb46SRobert Mustacchi 3981*4d9fdb46SRobert Mustacchi/* New December 2018. Preferred version. */ 3982*4d9fdb46SRobert Mustacchiint 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 3989*4d9fdb46SRobert MustacchiDwarf_P_Attribute dwarf_add_AT_producer(Dwarf_P_Die /*ownerdie*/, 3990*4d9fdb46SRobert Mustacchi char* /*producer_string*/, 3991*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 3992*4d9fdb46SRobert Mustacchi 3993*4d9fdb46SRobert Mustacchi/* New December 2018. Preferred version. */ 3994*4d9fdb46SRobert Mustacchiint 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 Mustacchiint 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 Mustacchiint 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 MustacchiDwarf_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 Mustacchiint 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. */ 4030*4d9fdb46SRobert MustacchiDwarf_P_Attribute dwarf_add_AT_const_value_signedint(Dwarf_P_Die /*ownerdie*/, 4031*4d9fdb46SRobert Mustacchi Dwarf_Signed /*signed_value*/, 4032*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 4033*4d9fdb46SRobert Mustacchi 4034*4d9fdb46SRobert Mustacchi/* Preferred as of December 2018. */ 4035*4d9fdb46SRobert Mustacchiint 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 MustacchiDwarf_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 Mustacchiint 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. */ 4054*4d9fdb46SRobert MustacchiDwarf_P_Attribute dwarf_add_AT_const_value_unsignedint( 4055*4d9fdb46SRobert Mustacchi Dwarf_P_Die /*ownerdie*/, 4056*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*unsigned_value*/, 4057*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 4058*4d9fdb46SRobert Mustacchi 4059*4d9fdb46SRobert Mustacchi/* New December 2018. Preferred version. */ 4060*4d9fdb46SRobert Mustacchiint 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 4066*4d9fdb46SRobert MustacchiDwarf_P_Attribute dwarf_add_AT_comp_dir(Dwarf_P_Die /*ownerdie*/, 4067*4d9fdb46SRobert Mustacchi char* /*current_working_directory*/, 4068*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 4069*4d9fdb46SRobert Mustacchi 4070*4d9fdb46SRobert Mustacchi/* New December 2018. Preferred version. */ 4071*4d9fdb46SRobert Mustacchiint 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 4076*4d9fdb46SRobert MustacchiDwarf_P_Attribute dwarf_add_AT_name(Dwarf_P_Die /*die*/, 4077*4d9fdb46SRobert Mustacchi char* /*name*/, 4078*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 4079*4d9fdb46SRobert Mustacchi 4080*4d9fdb46SRobert Mustacchi/* New December 2018. Preferred version. */ 4081*4d9fdb46SRobert Mustacchiint 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 MustacchiDwarf_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 Mustacchiint 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 4101*4d9fdb46SRobert Mustacchi/* Producer line creation functions (.debug_line) */ 4102*4d9fdb46SRobert MustacchiDwarf_Unsigned dwarf_add_directory_decl(Dwarf_P_Debug /*dbg*/, 4103*4d9fdb46SRobert Mustacchi char* /*name*/, 4104*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 4105*4d9fdb46SRobert Mustacchi 4106*4d9fdb46SRobert Mustacchi/* New December 2018. Preferred version. */ 4107*4d9fdb46SRobert Mustacchiint 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 4112*4d9fdb46SRobert MustacchiDwarf_Unsigned dwarf_add_file_decl(Dwarf_P_Debug /*dbg*/, 4113*4d9fdb46SRobert Mustacchi char* /*name*/, 4114*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*dir_index*/, 4115*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*time_last_modified*/, 4116*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*length*/, 4117*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 4118*4d9fdb46SRobert Mustacchi 4119*4d9fdb46SRobert Mustacchi/* New December 2018. Preferred version. */ 4120*4d9fdb46SRobert Mustacchiint 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 Mustacchiint 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 MustacchiDwarf_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 4155*4d9fdb46SRobert MustacchiDwarf_Unsigned dwarf_add_line_entry(Dwarf_P_Debug /*dbg*/, 4156*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*file_index*/, 4157*4d9fdb46SRobert Mustacchi Dwarf_Addr /*code_address*/, 4158*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*lineno*/, 4159*4d9fdb46SRobert Mustacchi Dwarf_Signed /*column_number*/, 4160*4d9fdb46SRobert Mustacchi Dwarf_Bool /*is_source_stmt_begin*/, 4161*4d9fdb46SRobert Mustacchi Dwarf_Bool /*is_basic_block_begin*/, 4162*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 4163*4d9fdb46SRobert Mustacchi 4164*4d9fdb46SRobert MustacchiDwarf_Unsigned dwarf_lne_set_address(Dwarf_P_Debug /*dbg*/, 4165*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*offset*/, 4166*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*symbol_index*/, 4167*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 4168*4d9fdb46SRobert Mustacchi 4169*4d9fdb46SRobert Mustacchi/* New December 2018. Preferred version. */ 4170*4d9fdb46SRobert Mustacchiint 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 4175*4d9fdb46SRobert MustacchiDwarf_Unsigned dwarf_lne_end_sequence(Dwarf_P_Debug /*dbg*/, 4176*4d9fdb46SRobert Mustacchi Dwarf_Addr /*end_address*/, 4177*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 4178*4d9fdb46SRobert Mustacchi 4179*4d9fdb46SRobert Mustacchi/* New December 2018. Preferred version. */ 4180*4d9fdb46SRobert Mustacchiint 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 4184*4d9fdb46SRobert Mustacchi/* Producer .debug_frame functions */ 4185*4d9fdb46SRobert MustacchiDwarf_Unsigned dwarf_add_frame_cie(Dwarf_P_Debug /*dbg*/, 4186*4d9fdb46SRobert Mustacchi char* /*augmenter*/, 4187*4d9fdb46SRobert Mustacchi Dwarf_Small /*code_alignment_factor*/, 4188*4d9fdb46SRobert Mustacchi Dwarf_Small /*data_alignment_factor*/, 4189*4d9fdb46SRobert Mustacchi Dwarf_Small /*return_address_reg*/, 4190*4d9fdb46SRobert Mustacchi Dwarf_Ptr /*initialization_bytes*/, 4191*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*init_byte_len*/, 4192*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 4193*4d9fdb46SRobert Mustacchi 4194*4d9fdb46SRobert Mustacchi/* New December 2018. Preferred version. */ 4195*4d9fdb46SRobert Mustacchiint 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 4205*4d9fdb46SRobert MustacchiDwarf_Unsigned dwarf_add_frame_fde( 4206*4d9fdb46SRobert Mustacchi Dwarf_P_Debug /*dbg*/, 4207*4d9fdb46SRobert Mustacchi Dwarf_P_Fde /*fde*/, 4208*4d9fdb46SRobert Mustacchi Dwarf_P_Die /*corresponding subprogram die*/, 4209*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*cie_to_use*/, 4210*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*virt_addr_of_described_code*/, 4211*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*length_of_code*/, 4212*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*symbol_index*/, 4213*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 4214*4d9fdb46SRobert Mustacchi 4215*4d9fdb46SRobert MustacchiDwarf_Unsigned dwarf_add_frame_fde_b( 4216*4d9fdb46SRobert Mustacchi Dwarf_P_Debug /*dbg*/, 4217*4d9fdb46SRobert Mustacchi Dwarf_P_Fde /*fde*/, 4218*4d9fdb46SRobert Mustacchi Dwarf_P_Die /*die*/, 4219*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*cie*/, 4220*4d9fdb46SRobert Mustacchi Dwarf_Addr /*virt_addr*/, 4221*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*code_len*/, 4222*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*sym_idx*/, 4223*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*sym_idx_of_end*/, 4224*4d9fdb46SRobert Mustacchi Dwarf_Addr /*offset_from_end_sym*/, 4225*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 4226*4d9fdb46SRobert Mustacchi 4227*4d9fdb46SRobert Mustacchi/* New December 2018. Preferred version. */ 4228*4d9fdb46SRobert Mustacchiint 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 Mustacchiint 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 4257*4d9fdb46SRobert MustacchiDwarf_Unsigned dwarf_add_frame_info_b( 4258*4d9fdb46SRobert Mustacchi Dwarf_P_Debug /*dbg*/, 4259*4d9fdb46SRobert Mustacchi Dwarf_P_Fde /*fde*/, 4260*4d9fdb46SRobert Mustacchi Dwarf_P_Die /*die*/, 4261*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*cie*/, 4262*4d9fdb46SRobert Mustacchi Dwarf_Addr /*virt_addr*/, 4263*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*code_len*/, 4264*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*symidx*/, 4265*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*end_symbol */, 4266*4d9fdb46SRobert Mustacchi Dwarf_Addr /*offset_from_end_symbol */, 4267*4d9fdb46SRobert Mustacchi Dwarf_Signed /*offset_into_exception_tables*/, 4268*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*exception_table_symbol*/, 4269*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 4270*4d9fdb46SRobert Mustacchi 4271*4d9fdb46SRobert MustacchiDwarf_Unsigned dwarf_add_frame_info( 4272*4d9fdb46SRobert Mustacchi Dwarf_P_Debug /*dbg*/, 4273*4d9fdb46SRobert Mustacchi Dwarf_P_Fde /*fde*/, 4274*4d9fdb46SRobert Mustacchi Dwarf_P_Die /*die*/, 4275*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*cie*/, 4276*4d9fdb46SRobert Mustacchi Dwarf_Addr /*virt_addr*/, 4277*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*code_len*/, 4278*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*symidx*/, 4279*4d9fdb46SRobert Mustacchi Dwarf_Signed /*offset_into_exception_tables*/, 4280*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*exception_table_symbol*/, 4281*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 4282*4d9fdb46SRobert Mustacchi 4283*4d9fdb46SRobert Mustacchi/* The fde returned is just the one passed in. Silly. */ 4284*4d9fdb46SRobert MustacchiDwarf_P_Fde dwarf_add_fde_inst( 4285*4d9fdb46SRobert Mustacchi Dwarf_P_Fde /*fde*/, 4286*4d9fdb46SRobert Mustacchi Dwarf_Small /*op*/, 4287*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*val1*/, 4288*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*val2*/, 4289*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 4290*4d9fdb46SRobert Mustacchi 4291*4d9fdb46SRobert Mustacchi/* New December 2018. Preferred version. */ 4292*4d9fdb46SRobert Mustacchiint 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 4299*4d9fdb46SRobert Mustacchi/* New September 17, 2009 */ 4300*4d9fdb46SRobert Mustacchiint dwarf_insert_fde_inst_bytes( 4301*4d9fdb46SRobert Mustacchi Dwarf_P_Debug /*dbg*/, 4302*4d9fdb46SRobert Mustacchi Dwarf_P_Fde /*fde*/, 4303*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*len*/, 4304*4d9fdb46SRobert Mustacchi Dwarf_Ptr /*ibytes*/, 4305*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 4306*4d9fdb46SRobert Mustacchi 4307*4d9fdb46SRobert MustacchiDwarf_P_Fde dwarf_new_fde(Dwarf_P_Debug /*dbg*/, 4308*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 4309*4d9fdb46SRobert Mustacchi 4310*4d9fdb46SRobert Mustacchi/* New December 2018. Preferred version. */ 4311*4d9fdb46SRobert Mustacchiint dwarf_new_fde_a(Dwarf_P_Debug /*dbg*/, 4312*4d9fdb46SRobert Mustacchi Dwarf_P_Fde * /*fde_out*/, 4313*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 4314*4d9fdb46SRobert Mustacchi 4315*4d9fdb46SRobert MustacchiDwarf_P_Fde dwarf_fde_cfa_offset( 4316*4d9fdb46SRobert Mustacchi Dwarf_P_Fde /*fde*/, 4317*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*register_number*/, 4318*4d9fdb46SRobert Mustacchi Dwarf_Signed /*offset*/, 4319*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 4320*4d9fdb46SRobert Mustacchi 4321*4d9fdb46SRobert Mustacchi/* New December 2018. Preferred version. */ 4322*4d9fdb46SRobert Mustacchiint 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 Mustacchiint 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 4341*4d9fdb46SRobert MustacchiDwarf_P_Die dwarf_new_die( 4342*4d9fdb46SRobert Mustacchi Dwarf_P_Debug /*dbg*/, 4343*4d9fdb46SRobert Mustacchi Dwarf_Tag /*tag*/, 4344*4d9fdb46SRobert Mustacchi Dwarf_P_Die /*parent*/, 4345*4d9fdb46SRobert Mustacchi Dwarf_P_Die /*child*/, 4346*4d9fdb46SRobert Mustacchi Dwarf_P_Die /*left */, 4347*4d9fdb46SRobert Mustacchi Dwarf_P_Die /*right*/, 4348*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 4349*4d9fdb46SRobert Mustacchi 4350*4d9fdb46SRobert Mustacchi/* New September 2016. */ 4351*4d9fdb46SRobert Mustacchiint 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. */ 4357*4d9fdb46SRobert MustacchiDwarf_Unsigned dwarf_add_die_to_debug( 4358*4d9fdb46SRobert Mustacchi Dwarf_P_Debug /*dbg*/, 4359*4d9fdb46SRobert Mustacchi Dwarf_P_Die /*die*/, 4360*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 4361*4d9fdb46SRobert Mustacchi 4362*4d9fdb46SRobert Mustacchi/* Markers are not written to DWARF2/3/4, they are user 4363*4d9fdb46SRobert Mustacchi defined and may be used for any purpose. 4364*4d9fdb46SRobert Mustacchi*/ 4365*4d9fdb46SRobert MustacchiDwarf_Unsigned dwarf_add_die_marker( 4366*4d9fdb46SRobert Mustacchi Dwarf_P_Debug /*dbg*/, 4367*4d9fdb46SRobert Mustacchi Dwarf_P_Die /*die*/, 4368*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*marker*/, 4369*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 4370*4d9fdb46SRobert Mustacchi 4371*4d9fdb46SRobert Mustacchi/* Preferred version, new December 2018. */ 4372*4d9fdb46SRobert Mustacchiint 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 4377*4d9fdb46SRobert MustacchiDwarf_Unsigned dwarf_get_die_marker( 4378*4d9fdb46SRobert Mustacchi Dwarf_P_Debug /*dbg*/, 4379*4d9fdb46SRobert Mustacchi Dwarf_P_Die /*die*/, 4380*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*marker*/, 4381*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 4382*4d9fdb46SRobert Mustacchi 4383*4d9fdb46SRobert Mustacchi/* Preferred version, new December 2018. */ 4384*4d9fdb46SRobert Mustacchiint 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 Mustacchiint 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. */ 4400*4d9fdb46SRobert MustacchiDwarf_P_Die dwarf_die_link( 4401*4d9fdb46SRobert Mustacchi Dwarf_P_Die /*die*/, 4402*4d9fdb46SRobert Mustacchi Dwarf_P_Die /*parent*/, 4403*4d9fdb46SRobert Mustacchi Dwarf_P_Die /*child*/, 4404*4d9fdb46SRobert Mustacchi Dwarf_P_Die /*left*/, 4405*4d9fdb46SRobert Mustacchi Dwarf_P_Die /*right*/, 4406*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 4407*4d9fdb46SRobert Mustacchi 4408*4d9fdb46SRobert Mustacchivoid dwarf_dealloc_compressed_block( 4409*4d9fdb46SRobert Mustacchi Dwarf_P_Debug, 4410*4d9fdb46SRobert Mustacchi void * 4411*4d9fdb46SRobert Mustacchi); 4412*4d9fdb46SRobert 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. */ 4416*4d9fdb46SRobert Mustacchivoid dwarf_dealloc_uncompressed_block( 4417*4d9fdb46SRobert Mustacchi Dwarf_Debug, 4418*4d9fdb46SRobert Mustacchi void * 4419*4d9fdb46SRobert Mustacchi); 4420*4d9fdb46SRobert 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 Mustacchiint 4430*4d9fdb46SRobert Mustacchidwarf_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. */ 4438*4d9fdb46SRobert Mustacchivoid * dwarf_compress_integer_block( 4439*4d9fdb46SRobert Mustacchi Dwarf_P_Debug, /*dbg*/ 4440*4d9fdb46SRobert Mustacchi Dwarf_Bool, /*signed==true (or unsigned)*/ 4441*4d9fdb46SRobert Mustacchi Dwarf_Small, /*size of integer units: 8, 16, 32, 64*/ 4442*4d9fdb46SRobert Mustacchi void*, /*data*/ 4443*4d9fdb46SRobert Mustacchi Dwarf_Unsigned, /*number of elements*/ 4444*4d9fdb46SRobert Mustacchi Dwarf_Unsigned*, /*number of bytes in output block*/ 4445*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/ 4446*4d9fdb46SRobert Mustacchi); 4447*4d9fdb46SRobert 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 Mustacchiint 4456*4d9fdb46SRobert Mustacchidwarf_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 4463*4d9fdb46SRobert 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. */ 4475*4d9fdb46SRobert Mustacchivoid * dwarf_uncompress_integer_block( 4476*4d9fdb46SRobert Mustacchi Dwarf_Debug, /*dbg */ 4477*4d9fdb46SRobert Mustacchi Dwarf_Bool, /*signed==true (or unsigned) */ 4478*4d9fdb46SRobert Mustacchi Dwarf_Small, /*size of integer units: 8, 16, 32, 64 */ 4479*4d9fdb46SRobert Mustacchi void*, /*input data */ 4480*4d9fdb46SRobert Mustacchi Dwarf_Unsigned, /*number of bytes in input */ 4481*4d9fdb46SRobert Mustacchi Dwarf_Unsigned*, /*number of units in output block */ 4482*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error */ 4483*4d9fdb46SRobert Mustacchi); 4484*4d9fdb46SRobert Mustacchi 4485*4d9fdb46SRobert Mustacchi/* Operations to create location expressions. */ 4486*4d9fdb46SRobert MustacchiDwarf_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 Mustacchiint dwarf_new_expr_a(Dwarf_P_Debug /*dbg*/, 4491*4d9fdb46SRobert Mustacchi Dwarf_P_Expr * /*expr_out*/, 4492*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 4493*4d9fdb46SRobert Mustacchi 4494*4d9fdb46SRobert Mustacchivoid dwarf_expr_reset( 4495*4d9fdb46SRobert Mustacchi Dwarf_P_Expr /*expr*/, 4496*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 4497*4d9fdb46SRobert Mustacchi 4498*4d9fdb46SRobert MustacchiDwarf_Unsigned dwarf_add_expr_gen( 4499*4d9fdb46SRobert Mustacchi Dwarf_P_Expr /*expr*/, 4500*4d9fdb46SRobert Mustacchi Dwarf_Small /*opcode*/, 4501*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*val1*/, 4502*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*val2*/, 4503*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 4504*4d9fdb46SRobert Mustacchi 4505*4d9fdb46SRobert Mustacchi/* New December 2018. Preferred version. */ 4506*4d9fdb46SRobert Mustacchiint 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 4514*4d9fdb46SRobert MustacchiDwarf_Unsigned dwarf_add_expr_addr( 4515*4d9fdb46SRobert Mustacchi Dwarf_P_Expr /*expr*/, 4516*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*addr*/, 4517*4d9fdb46SRobert Mustacchi Dwarf_Signed /*sym_index*/, 4518*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 4519*4d9fdb46SRobert Mustacchi 4520*4d9fdb46SRobert MustacchiDwarf_Unsigned dwarf_add_expr_addr_b( 4521*4d9fdb46SRobert Mustacchi Dwarf_P_Expr /*expr*/, 4522*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*addr*/, 4523*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*sym_index*/, 4524*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 4525*4d9fdb46SRobert Mustacchi 4526*4d9fdb46SRobert Mustacchi 4527*4d9fdb46SRobert Mustacchi/* New December 2018. Preferred version. */ 4528*4d9fdb46SRobert Mustacchiint 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 4535*4d9fdb46SRobert MustacchiDwarf_Unsigned dwarf_expr_current_offset( 4536*4d9fdb46SRobert Mustacchi Dwarf_P_Expr /*expr*/, 4537*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 4538*4d9fdb46SRobert Mustacchi 4539*4d9fdb46SRobert Mustacchi/* New December 2018. Preferred version. */ 4540*4d9fdb46SRobert Mustacchiint 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 4545*4d9fdb46SRobert MustacchiDwarf_Addr dwarf_expr_into_block( 4546*4d9fdb46SRobert Mustacchi Dwarf_P_Expr /*expr*/, 4547*4d9fdb46SRobert Mustacchi Dwarf_Unsigned* /*length*/, 4548*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 4549*4d9fdb46SRobert Mustacchi 4550*4d9fdb46SRobert Mustacchi/* New December 2018. Preferred version. */ 4551*4d9fdb46SRobert Mustacchiint 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 4557*4d9fdb46SRobert MustacchiDwarf_Unsigned dwarf_add_arange(Dwarf_P_Debug /*dbg*/, 4558*4d9fdb46SRobert Mustacchi Dwarf_Addr /*begin_address*/, 4559*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*length*/, 4560*4d9fdb46SRobert Mustacchi Dwarf_Signed /*symbol_index*/, 4561*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 4562*4d9fdb46SRobert Mustacchi 4563*4d9fdb46SRobert MustacchiDwarf_Unsigned dwarf_add_arange_b( 4564*4d9fdb46SRobert Mustacchi Dwarf_P_Debug /*dbg*/, 4565*4d9fdb46SRobert Mustacchi Dwarf_Addr /*begin_address*/, 4566*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*length*/, 4567*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*symbol_index*/, 4568*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*end_symbol_index*/, 4569*4d9fdb46SRobert Mustacchi Dwarf_Addr /*offset_from_end_symbol*/, 4570*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 4571*4d9fdb46SRobert Mustacchi 4572*4d9fdb46SRobert Mustacchi/* New December 2018. Preferred version. */ 4573*4d9fdb46SRobert Mustacchiint 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 4582*4d9fdb46SRobert MustacchiDwarf_Unsigned dwarf_add_pubname( 4583*4d9fdb46SRobert Mustacchi Dwarf_P_Debug /*dbg*/, 4584*4d9fdb46SRobert Mustacchi Dwarf_P_Die /*die*/, 4585*4d9fdb46SRobert Mustacchi char* /*pubname_name*/, 4586*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 4587*4d9fdb46SRobert Mustacchi 4588*4d9fdb46SRobert Mustacchi/* New December 2018. Preferred version. */ 4589*4d9fdb46SRobert Mustacchiint 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 MustacchiDwarf_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 Mustacchiint 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 4609*4d9fdb46SRobert MustacchiDwarf_Unsigned dwarf_add_funcname( 4610*4d9fdb46SRobert Mustacchi Dwarf_P_Debug /*dbg*/, 4611*4d9fdb46SRobert Mustacchi Dwarf_P_Die /*die*/, 4612*4d9fdb46SRobert Mustacchi char* /*func_name*/, 4613*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 4614*4d9fdb46SRobert Mustacchi 4615*4d9fdb46SRobert Mustacchi/* New December 2018. Preferred version. */ 4616*4d9fdb46SRobert Mustacchiint 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 4622*4d9fdb46SRobert MustacchiDwarf_Unsigned dwarf_add_typename( 4623*4d9fdb46SRobert Mustacchi Dwarf_P_Debug /*dbg*/, 4624*4d9fdb46SRobert Mustacchi Dwarf_P_Die /*die*/, 4625*4d9fdb46SRobert Mustacchi char* /*type_name*/, 4626*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 4627*4d9fdb46SRobert Mustacchi 4628*4d9fdb46SRobert Mustacchi/* New December 2018. Preferred version. */ 4629*4d9fdb46SRobert Mustacchiint 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 4635*4d9fdb46SRobert MustacchiDwarf_Unsigned dwarf_add_varname( 4636*4d9fdb46SRobert Mustacchi Dwarf_P_Debug /*dbg*/, 4637*4d9fdb46SRobert Mustacchi Dwarf_P_Die /*die*/, 4638*4d9fdb46SRobert Mustacchi char* /*var_name*/, 4639*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 4640*4d9fdb46SRobert Mustacchi 4641*4d9fdb46SRobert Mustacchi/* New December 2018. Preferred version. */ 4642*4d9fdb46SRobert Mustacchiint 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 4648*4d9fdb46SRobert MustacchiDwarf_Unsigned dwarf_add_weakname( 4649*4d9fdb46SRobert Mustacchi Dwarf_P_Debug /*dbg*/, 4650*4d9fdb46SRobert Mustacchi Dwarf_P_Die /*die*/, 4651*4d9fdb46SRobert Mustacchi char* /*weak_name*/, 4652*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 4653*4d9fdb46SRobert Mustacchi 4654*4d9fdb46SRobert Mustacchiint 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 Mustacchiint 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 4672*4d9fdb46SRobert Mustacchi/* .debug_macinfo producer functions 4673*4d9fdb46SRobert Mustacchi Functions must be called in right order: the section is output 4674*4d9fdb46SRobert Mustacchi In the order these are presented. 4675*4d9fdb46SRobert Mustacchi*/ 4676*4d9fdb46SRobert Mustacchiint dwarf_def_macro(Dwarf_P_Debug /*dbg*/, 4677*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*line*/, 4678*4d9fdb46SRobert Mustacchi char * /*macname, with (arglist), no space before (*/, 4679*4d9fdb46SRobert Mustacchi char * /*macvalue*/, 4680*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 4681*4d9fdb46SRobert Mustacchi 4682*4d9fdb46SRobert Mustacchiint dwarf_undef_macro(Dwarf_P_Debug /*dbg*/, 4683*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*line*/, 4684*4d9fdb46SRobert Mustacchi char * /*macname, no arglist, of course*/, 4685*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 4686*4d9fdb46SRobert Mustacchi 4687*4d9fdb46SRobert Mustacchiint dwarf_start_macro_file(Dwarf_P_Debug /*dbg*/, 4688*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*fileindex*/, 4689*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*linenumber*/, 4690*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 4691*4d9fdb46SRobert Mustacchi 4692*4d9fdb46SRobert Mustacchiint dwarf_end_macro_file(Dwarf_P_Debug /*dbg*/, 4693*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 4694*4d9fdb46SRobert Mustacchi 4695*4d9fdb46SRobert Mustacchiint dwarf_vendor_ext(Dwarf_P_Debug /*dbg*/, 4696*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*constant*/, 4697*4d9fdb46SRobert Mustacchi char * /*string*/, 4698*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 4699*4d9fdb46SRobert Mustacchi 4700*4d9fdb46SRobert Mustacchi/* end macinfo producer functions */ 4701*4d9fdb46SRobert Mustacchi 4702*4d9fdb46SRobert Mustacchiint dwarf_attr_offset(Dwarf_Die /*die*/, 4703*4d9fdb46SRobert Mustacchi Dwarf_Attribute /*attr of above die*/, 4704*4d9fdb46SRobert Mustacchi Dwarf_Off * /*returns offset thru this ptr */, 4705*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 4706*4d9fdb46SRobert Mustacchi 4707*4d9fdb46SRobert Mustacchi/* This is a hack so clients can verify offsets. 4708*4d9fdb46SRobert Mustacchi Added April 2005 so that debugger can detect broken offsets 4709*4d9fdb46SRobert Mustacchi (which happened in an IRIX executable larger than 2GB 4710*4d9fdb46SRobert Mustacchi with MIPSpro 7.3.1.3 toolchain.). 4711*4d9fdb46SRobert Mustacchi*/ 4712*4d9fdb46SRobert Mustacchiint dwarf_get_section_max_offsets(Dwarf_Debug /*dbg*/, 4713*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*debug_info_size*/, 4714*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*debug_abbrev_size*/, 4715*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*debug_line_size*/, 4716*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*debug_loc_size*/, 4717*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*debug_aranges_size*/, 4718*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*debug_macinfo_size*/, 4719*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*debug_pubnames_size*/, 4720*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*debug_str_size*/, 4721*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*debug_frame_size*/, 4722*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*debug_ranges_size*/, 4723*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*debug_pubtypes_size*/); 4724*4d9fdb46SRobert Mustacchi 4725*4d9fdb46SRobert Mustacchi/* New October 2011., adds .debug_types section to the sizes 4726*4d9fdb46SRobert Mustacchi returned. */ 4727*4d9fdb46SRobert Mustacchiint 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 Mustacchiint 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 Mustacchiint 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. */ 4784*4d9fdb46SRobert Mustacchi/* Multiple releases spelled 'initial' as 'inital' . 4785*4d9fdb46SRobert Mustacchi The 'inital' spelling should not be used. */ 4786*4d9fdb46SRobert MustacchiDwarf_Half dwarf_set_frame_rule_inital_value(Dwarf_Debug /*dbg*/, 4787*4d9fdb46SRobert Mustacchi Dwarf_Half /*value*/); 4788*4d9fdb46SRobert Mustacchi/* Additional interface with correct 'initial' spelling. */ 4789*4d9fdb46SRobert Mustacchi/* It is likely you will want to call the following 6 functions 4790*4d9fdb46SRobert Mustacchi before accessing any frame information. All are useful 4791*4d9fdb46SRobert Mustacchi to tailor handling of pseudo-registers needed to turn 4792*4d9fdb46SRobert Mustacchi frame operation references into simpler forms and to 4793*4d9fdb46SRobert 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.*/ 4798*4d9fdb46SRobert MustacchiDwarf_Half dwarf_set_frame_rule_initial_value(Dwarf_Debug /*dbg*/, 4799*4d9fdb46SRobert Mustacchi Dwarf_Half /*value*/); 4800*4d9fdb46SRobert MustacchiDwarf_Half dwarf_set_frame_rule_table_size(Dwarf_Debug /*dbg*/, 4801*4d9fdb46SRobert Mustacchi Dwarf_Half /*value*/); 4802*4d9fdb46SRobert MustacchiDwarf_Half dwarf_set_frame_cfa_value(Dwarf_Debug /*dbg*/, 4803*4d9fdb46SRobert Mustacchi Dwarf_Half /*value*/); 4804*4d9fdb46SRobert MustacchiDwarf_Half dwarf_set_frame_same_value(Dwarf_Debug /*dbg*/, 4805*4d9fdb46SRobert Mustacchi Dwarf_Half /*value*/); 4806*4d9fdb46SRobert MustacchiDwarf_Half dwarf_set_frame_undefined_value(Dwarf_Debug /*dbg*/, 4807*4d9fdb46SRobert 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 MustacchiDwarf_Small dwarf_set_default_address_size(Dwarf_Debug /*dbg*/, 4811*4d9fdb46SRobert Mustacchi Dwarf_Small /* value */); 4812*4d9fdb46SRobert Mustacchi 4813*4d9fdb46SRobert Mustacchi/* As of April 27, 2009, this version with no diepointer is 4814*4d9fdb46SRobert Mustacchi obsolete though supported. Use dwarf_get_ranges_a() instead. */ 4815*4d9fdb46SRobert Mustacchiint dwarf_get_ranges(Dwarf_Debug /*dbg*/, 4816*4d9fdb46SRobert Mustacchi Dwarf_Off /*rangesoffset*/, 4817*4d9fdb46SRobert Mustacchi Dwarf_Ranges ** /*rangesbuf*/, 4818*4d9fdb46SRobert Mustacchi Dwarf_Signed * /*listlen*/, 4819*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*bytecount*/, 4820*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 4821*4d9fdb46SRobert Mustacchi 4822*4d9fdb46SRobert Mustacchi/* This adds the address_size argument. New April 27, 2009 */ 4823*4d9fdb46SRobert Mustacchiint dwarf_get_ranges_a(Dwarf_Debug /*dbg*/, 4824*4d9fdb46SRobert Mustacchi Dwarf_Off /*rangesoffset*/, 4825*4d9fdb46SRobert Mustacchi Dwarf_Die /* diepointer */, 4826*4d9fdb46SRobert Mustacchi Dwarf_Ranges ** /*rangesbuf*/, 4827*4d9fdb46SRobert Mustacchi Dwarf_Signed * /*listlen*/, 4828*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*bytecount*/, 4829*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 4830*4d9fdb46SRobert Mustacchi 4831*4d9fdb46SRobert Mustacchivoid dwarf_ranges_dealloc(Dwarf_Debug /*dbg*/, 4832*4d9fdb46SRobert Mustacchi Dwarf_Ranges * /*rangesbuf*/, 4833*4d9fdb46SRobert Mustacchi Dwarf_Signed /*rangecount*/); 4834*4d9fdb46SRobert Mustacchi 4835*4d9fdb46SRobert Mustacchi/* ======= START .debug_rnglists interfaces. New May 2020 */ 4836*4d9fdb46SRobert Mustacchistruct Dwarf_Rnglists_Entry_s; 4837*4d9fdb46SRobert Mustacchitypedef struct Dwarf_Rnglists_Entry_s * Dwarf_Rnglists_Entry; 4838*4d9fdb46SRobert Mustacchistruct Dwarf_Rnglists_Head_s; 4839*4d9fdb46SRobert Mustacchitypedef 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 Mustacchiint 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 Mustacchiint 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 Mustacchiint 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 Mustacchiint 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 Mustacchiint 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 Mustacchiint 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 Mustacchiint 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 Mustacchiint 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 Mustacchiint 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 Mustacchistruct Dwarf_Loclists_Entry_s; 4988*4d9fdb46SRobert Mustacchitypedef 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 Mustacchiint 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 Mustacchiint 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 Mustacchiint 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 Mustacchiint 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 Mustacchiint 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 Mustacchiint 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 Mustacchiint 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 Mustacchistruct Dwarf_Str_Offsets_Table_s; 5143*4d9fdb46SRobert Mustacchitypedef 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 Mustacchiint 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 Mustacchiint 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 Mustacchiint 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 Mustacchiint 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 Mustacchiint 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 5188*4d9fdb46SRobert Mustacchi/* The harmless error list is a circular buffer of 5189*4d9fdb46SRobert Mustacchi errors we note but which do not stop us from processing 5190*4d9fdb46SRobert Mustacchi the object. Created so dwarfdump or other tools 5191*4d9fdb46SRobert Mustacchi can report such inconsequential errors without causing 5192*4d9fdb46SRobert Mustacchi anything to stop early. */ 5193*4d9fdb46SRobert Mustacchi#define DW_HARMLESS_ERROR_CIRCULAR_LIST_DEFAULT_SIZE 4 5194*4d9fdb46SRobert Mustacchi#define DW_HARMLESS_ERROR_MSG_STRING_SIZE 300 5195*4d9fdb46SRobert Mustacchi/* User code supplies size of array of pointers errmsg_ptrs_array 5196*4d9fdb46SRobert Mustacchi in count and the array of pointers (the pointers themselves 5197*4d9fdb46SRobert Mustacchi need not be initialized). 5198*4d9fdb46SRobert Mustacchi The pointers returned in the array of pointers 5199*4d9fdb46SRobert Mustacchi are invalidated by ANY call to libdwarf. 5200*4d9fdb46SRobert Mustacchi Use them before making another libdwarf call! 5201*4d9fdb46SRobert Mustacchi The array of string pointers passed in always has 5202*4d9fdb46SRobert Mustacchi a final null pointer, so if there are N pointers the 5203*4d9fdb46SRobert Mustacchi and M actual strings, then MIN(M,N-1) pointers are 5204*4d9fdb46SRobert Mustacchi set to point to error strings. The array of pointers 5205*4d9fdb46SRobert Mustacchi to strings always terminates with a NULL pointer. 5206*4d9fdb46SRobert Mustacchi If 'count' is passed in zero then errmsg_ptrs_array 5207*4d9fdb46SRobert Mustacchi is not touched. 5208*4d9fdb46SRobert Mustacchi 5209*4d9fdb46SRobert Mustacchi The function returns DW_DLV_NO_ENTRY if no harmless errors 5210*4d9fdb46SRobert Mustacchi were noted so far. Returns DW_DLV_OK if there are errors. 5211*4d9fdb46SRobert Mustacchi Never returns DW_DLV_ERROR. 5212*4d9fdb46SRobert Mustacchi 5213*4d9fdb46SRobert Mustacchi Each call empties the error list (discarding all current entries). 5214*4d9fdb46SRobert Mustacchi If newerr_count is non-NULL the count of harmless errors 5215*4d9fdb46SRobert Mustacchi since the last call is returned through the pointer 5216*4d9fdb46SRobert Mustacchi (some may have been discarded or not returned, it is a circular 5217*4d9fdb46SRobert Mustacchi list...). 5218*4d9fdb46SRobert Mustacchi If DW_DLV_NO_ENTRY is returned none of the arguments 5219*4d9fdb46SRobert Mustacchi here are touched or used. 5220*4d9fdb46SRobert Mustacchi */ 5221*4d9fdb46SRobert Mustacchiint dwarf_get_harmless_error_list(Dwarf_Debug /*dbg*/, 5222*4d9fdb46SRobert Mustacchi unsigned int /*count*/, 5223*4d9fdb46SRobert Mustacchi const char ** /*errmsg_ptrs_array*/, 5224*4d9fdb46SRobert Mustacchi unsigned int * /*newerr_count*/); 5225*4d9fdb46SRobert Mustacchi 5226*4d9fdb46SRobert Mustacchi/* Insertion is only for testing the harmless error code, it is not 5227*4d9fdb46SRobert Mustacchi necessarily useful otherwise. */ 5228*4d9fdb46SRobert Mustacchivoid dwarf_insert_harmless_error(Dwarf_Debug /*dbg*/, 5229*4d9fdb46SRobert Mustacchi char * /*newerror*/); 5230*4d9fdb46SRobert Mustacchi 5231*4d9fdb46SRobert Mustacchi/* The size of the circular list of strings may be set 5232*4d9fdb46SRobert Mustacchi and reset as needed. If it is shortened excess 5233*4d9fdb46SRobert Mustacchi messages are simply dropped. It returns the previous 5234*4d9fdb46SRobert Mustacchi size. If zero passed in the size is unchanged 5235*4d9fdb46SRobert Mustacchi and it simply returns the current size */ 5236*4d9fdb46SRobert Mustacchiunsigned int dwarf_set_harmless_error_list_size(Dwarf_Debug /*dbg*/, 5237*4d9fdb46SRobert Mustacchi unsigned int /*maxcount*/); 5238*4d9fdb46SRobert Mustacchi/* The harmless error strings (if any) are freed when the dbg 5239*4d9fdb46SRobert Mustacchi is dwarf_finish()ed. */ 5240*4d9fdb46SRobert Mustacchi 5241*4d9fdb46SRobert Mustacchi/* When the val_in is known these dwarf_get_TAG_name (etc) 5242*4d9fdb46SRobert Mustacchi functions return the string corresponding to the val_in passed in 5243*4d9fdb46SRobert Mustacchi through the pointer s_out and the value returned is DW_DLV_OK. 5244*4d9fdb46SRobert Mustacchi The strings are in static storage 5245*4d9fdb46SRobert Mustacchi and must not be freed. 5246*4d9fdb46SRobert Mustacchi If DW_DLV_NO_ENTRY is returned the val_in is not known and 5247*4d9fdb46SRobert Mustacchi *s_out is not set. DW_DLV_ERROR is never returned.*/ 5248*4d9fdb46SRobert Mustacchi 5249*4d9fdb46SRobert Mustacchi/* The following copied from a generated dwarf_names.h */ 5250*4d9fdb46SRobert Mustacchi 5251*4d9fdb46SRobert Mustacchi/* BEGIN FILE */ 5252*4d9fdb46SRobert Mustacchiextern int dwarf_get_ACCESS_name(unsigned int /*val_in*/, const char ** /*s_out */); 5253*4d9fdb46SRobert Mustacchiextern int dwarf_get_ADDR_name(unsigned int /*val_in*/, const char ** /*s_out */); 5254*4d9fdb46SRobert Mustacchiextern int dwarf_get_ATCF_name(unsigned int /*val_in*/, const char ** /*s_out */); 5255*4d9fdb46SRobert Mustacchiextern int dwarf_get_ATE_name(unsigned int /*val_in*/, const char ** /*s_out */); 5256*4d9fdb46SRobert Mustacchiextern int dwarf_get_AT_name(unsigned int /*val_in*/, const char ** /*s_out */); 5257*4d9fdb46SRobert Mustacchiextern int dwarf_get_CC_name(unsigned int /*val_in*/, const char ** /*s_out */); 5258*4d9fdb46SRobert Mustacchiextern int dwarf_get_CFA_name(unsigned int /*val_in*/, const char ** /*s_out */); 5259*4d9fdb46SRobert Mustacchiextern int dwarf_get_children_name(unsigned int /*val_in*/, const char ** /*s_out */); 5260*4d9fdb46SRobert Mustacchiextern int dwarf_get_CHILDREN_name(unsigned int /*val_in*/, const char ** /*s_out */); 5261*4d9fdb46SRobert Mustacchiextern int dwarf_get_DEFAULTED_name(unsigned int /*val_in*/, const char ** /*s_out */); 5262*4d9fdb46SRobert Mustacchiextern int dwarf_get_DSC_name(unsigned int /*val_in*/, const char ** /*s_out */); 5263*4d9fdb46SRobert Mustacchiextern int dwarf_get_DS_name(unsigned int /*val_in*/, const char ** /*s_out */); 5264*4d9fdb46SRobert Mustacchiextern int dwarf_get_EH_name(unsigned int /*val_in*/, const char ** /*s_out */); 5265*4d9fdb46SRobert Mustacchiextern int dwarf_get_END_name(unsigned int /*val_in*/, const char ** /*s_out */); 5266*4d9fdb46SRobert Mustacchiextern int dwarf_get_FORM_name(unsigned int /*val_in*/, const char ** /*s_out */); 5267*4d9fdb46SRobert Mustacchiextern int dwarf_get_FRAME_name(unsigned int /*val_in*/, const char ** /*s_out */); 5268*4d9fdb46SRobert Mustacchiextern int dwarf_get_ID_name(unsigned int /*val_in*/, const char ** /*s_out */); 5269*4d9fdb46SRobert Mustacchiextern int dwarf_get_IDX_name(unsigned int /*val_in*/, const char ** /*s_out */); 5270*4d9fdb46SRobert Mustacchiextern int dwarf_get_INL_name(unsigned int /*val_in*/, const char ** /*s_out */); 5271*4d9fdb46SRobert Mustacchiextern int dwarf_get_ISA_name(unsigned int /*val_in*/, const char ** /*s_out */); 5272*4d9fdb46SRobert Mustacchiextern int dwarf_get_LANG_name(unsigned int /*val_in*/, const char ** /*s_out */); 5273*4d9fdb46SRobert Mustacchiextern 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 Mustacchiextern int dwarf_get_LLEX_name(unsigned int /*val_in*/, const char ** /*s_out */); 5276*4d9fdb46SRobert Mustacchiextern int dwarf_get_LNCT_name(unsigned int /*val_in*/, const char ** /*s_out */); 5277*4d9fdb46SRobert Mustacchiextern int dwarf_get_LNE_name(unsigned int /*val_in*/, const char ** /*s_out */); 5278*4d9fdb46SRobert Mustacchiextern int dwarf_get_LNS_name(unsigned int /*val_in*/, const char ** /*s_out */); 5279*4d9fdb46SRobert Mustacchiextern int dwarf_get_MACINFO_name(unsigned int /*val_in*/, const char ** /*s_out */); 5280*4d9fdb46SRobert Mustacchiextern int dwarf_get_MACRO_name(unsigned int /*val_in*/, const char ** /*s_out */); 5281*4d9fdb46SRobert Mustacchiextern int dwarf_get_OP_name(unsigned int /*val_in*/, const char ** /*s_out */); 5282*4d9fdb46SRobert Mustacchiextern int dwarf_get_ORD_name(unsigned int /*val_in*/, const char ** /*s_out */); 5283*4d9fdb46SRobert Mustacchiextern int dwarf_get_RLE_name(unsigned int /*val_in*/, const char ** /*s_out */); 5284*4d9fdb46SRobert Mustacchiextern int dwarf_get_SECT_name(unsigned int /*val_in*/, const char ** /*s_out */); 5285*4d9fdb46SRobert Mustacchiextern int dwarf_get_TAG_name(unsigned int /*val_in*/, const char ** /*s_out */); 5286*4d9fdb46SRobert Mustacchiextern int dwarf_get_UT_name(unsigned int /*val_in*/, const char ** /*s_out */); 5287*4d9fdb46SRobert Mustacchiextern int dwarf_get_VIRTUALITY_name(unsigned int /*val_in*/, const char ** /*s_out */); 5288*4d9fdb46SRobert Mustacchiextern 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 Mustacchiint 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 Mustacchiint 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 Mustacchiint 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 Mustacchiint 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 Mustacchiint 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 Mustacchiint 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 Mustacchiint 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 Mustacchiint 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 Mustacchiint 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 Mustacchiint 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 Mustacchiint 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 Mustacchivoid (*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 Mustacchiint dwarf_encode_leb128(Dwarf_Unsigned /*val*/, 5383*4d9fdb46SRobert Mustacchi int * /*nbytes*/, 5384*4d9fdb46SRobert Mustacchi char * /*space*/, 5385*4d9fdb46SRobert Mustacchi int /*splen*/); 5386*4d9fdb46SRobert Mustacchiint 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 Mustacchitypedef struct { 5400*4d9fdb46SRobert Mustacchi Dwarf_Bool check_verbose_mode; 5401*4d9fdb46SRobert Mustacchi} Dwarf_Cmdline_Options; 5402*4d9fdb46SRobert Mustacchiextern Dwarf_Cmdline_Options dwarf_cmdline_options; 5403*4d9fdb46SRobert Mustacchi 5404*4d9fdb46SRobert Mustacchi/* Set libdwarf to reflect some application command line options. */ 5405*4d9fdb46SRobert Mustacchivoid dwarf_record_cmdline_options(Dwarf_Cmdline_Options /*options*/); 5406*4d9fdb46SRobert Mustacchi 5407*4d9fdb46SRobert Mustacchiint 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 Mustacchiint dwarf_set_de_alloc_flag(int v); 5436*4d9fdb46SRobert Mustacchi 5437*4d9fdb46SRobert Mustacchiint 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 Mustacchiint 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); 5452*4d9fdb46SRobert Mustacchi 5453*4d9fdb46SRobert Mustacchi#ifdef __cplusplus 5454*4d9fdb46SRobert Mustacchi} 5455*4d9fdb46SRobert Mustacchi#endif 5456*4d9fdb46SRobert Mustacchi#endif /* _LIBDWARF_H */ 5457