1*7fd79137SRobert Mustacchi /* 2*7fd79137SRobert Mustacchi 3*7fd79137SRobert Mustacchi Copyright (C) 2000-2010 Silicon Graphics, Inc. All Rights Reserved. 4*7fd79137SRobert Mustacchi Portions Copyright 2007-2010 Sun Microsystems, Inc. All rights reserved. 5*7fd79137SRobert Mustacchi Portions Copyright 2008-2010 David Anderson. All rights reserved. 6*7fd79137SRobert Mustacchi Portions Copyright 2008-2010 Arxan Technologies, Inc. All rights reserved. 7*7fd79137SRobert Mustacchi 8*7fd79137SRobert Mustacchi This program is free software; you can redistribute it and/or modify it 9*7fd79137SRobert Mustacchi under the terms of version 2.1 of the GNU Lesser General Public License 10*7fd79137SRobert Mustacchi as published by the Free Software Foundation. 11*7fd79137SRobert Mustacchi 12*7fd79137SRobert Mustacchi This program is distributed in the hope that it would be useful, but 13*7fd79137SRobert Mustacchi WITHOUT ANY WARRANTY; without even the implied warranty of 14*7fd79137SRobert Mustacchi MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 15*7fd79137SRobert Mustacchi 16*7fd79137SRobert Mustacchi Further, this software is distributed without any warranty that it is 17*7fd79137SRobert Mustacchi free of the rightful claim of any third person regarding infringement 18*7fd79137SRobert Mustacchi or the like. Any license provided herein, whether implied or 19*7fd79137SRobert Mustacchi otherwise, applies only to this software file. Patent licenses, if 20*7fd79137SRobert Mustacchi any, provided herein do not apply to combinations of this program with 21*7fd79137SRobert Mustacchi other software, or any other product whatsoever. 22*7fd79137SRobert Mustacchi 23*7fd79137SRobert Mustacchi You should have received a copy of the GNU Lesser General Public 24*7fd79137SRobert Mustacchi License along with this program; if not, write the Free Software 25*7fd79137SRobert Mustacchi Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston MA 02110-1301, 26*7fd79137SRobert Mustacchi USA. 27*7fd79137SRobert Mustacchi 28*7fd79137SRobert Mustacchi Contact information: Silicon Graphics, Inc., 1500 Crittenden Lane, 29*7fd79137SRobert Mustacchi Mountain View, CA 94043, or: 30*7fd79137SRobert Mustacchi 31*7fd79137SRobert Mustacchi http://www.sgi.com 32*7fd79137SRobert Mustacchi 33*7fd79137SRobert Mustacchi For further information regarding this notice, see: 34*7fd79137SRobert Mustacchi 35*7fd79137SRobert Mustacchi http://oss.sgi.com/projects/GenInfo/NoticeExplan 36*7fd79137SRobert Mustacchi 37*7fd79137SRobert Mustacchi */ 38*7fd79137SRobert Mustacchi 39*7fd79137SRobert Mustacchi 40*7fd79137SRobert Mustacchi #ifndef _LIBDWARF_H 41*7fd79137SRobert Mustacchi #define _LIBDWARF_H 42*7fd79137SRobert Mustacchi #ifdef __cplusplus 43*7fd79137SRobert Mustacchi extern "C" { 44*7fd79137SRobert Mustacchi #endif 45*7fd79137SRobert Mustacchi /* 46*7fd79137SRobert Mustacchi libdwarf.h 47*7fd79137SRobert Mustacchi $Revision: #9 $ $Date: 2008/01/17 $ 48*7fd79137SRobert Mustacchi 49*7fd79137SRobert Mustacchi For libdwarf producers and consumers 50*7fd79137SRobert Mustacchi 51*7fd79137SRobert Mustacchi The interface is defined as having 8-byte signed and unsigned 52*7fd79137SRobert Mustacchi values so it can handle 64-or-32bit target on 64-or-32bit host. 53*7fd79137SRobert Mustacchi Addr is the native size: it represents pointers on 54*7fd79137SRobert Mustacchi the host machine (not the target!). 55*7fd79137SRobert Mustacchi 56*7fd79137SRobert Mustacchi This contains declarations for types and all producer 57*7fd79137SRobert Mustacchi and consumer functions. 58*7fd79137SRobert Mustacchi 59*7fd79137SRobert Mustacchi Function declarations are written on a single line each here 60*7fd79137SRobert Mustacchi so one can use grep to each declaration in its entirety. 61*7fd79137SRobert Mustacchi The declarations are a little harder to read this way, but... 62*7fd79137SRobert Mustacchi 63*7fd79137SRobert Mustacchi */ 64*7fd79137SRobert Mustacchi 65*7fd79137SRobert Mustacchi struct Elf; 66*7fd79137SRobert Mustacchi typedef struct Elf* dwarf_elf_handle; 67*7fd79137SRobert Mustacchi 68*7fd79137SRobert Mustacchi /* To enable printing with printf regardless of the 69*7fd79137SRobert Mustacchi actual underlying data type, we define the DW_PR_xxx macros. */ 70*7fd79137SRobert Mustacchi #if (_MIPS_SZLONG == 64) 71*7fd79137SRobert Mustacchi /* Special case for MIPS, so -64 (LP64) build gets simple -long-. 72*7fd79137SRobert Mustacchi Non-MIPS LP64 or ILP64 environments should probably ensure 73*7fd79137SRobert Mustacchi _MIPS_SZLONG set to 64 everywhere this header is #included. 74*7fd79137SRobert Mustacchi */ 75*7fd79137SRobert Mustacchi typedef int Dwarf_Bool; /* boolean type */ 76*7fd79137SRobert Mustacchi typedef unsigned long Dwarf_Off; /* 4 or 8 byte file offset */ 77*7fd79137SRobert Mustacchi typedef unsigned long Dwarf_Unsigned; /* 4 or 8 byte unsigned value */ 78*7fd79137SRobert Mustacchi typedef unsigned short Dwarf_Half; /* 2 byte unsigned value */ 79*7fd79137SRobert Mustacchi typedef unsigned char Dwarf_Small; /* 1 byte unsigned value */ 80*7fd79137SRobert Mustacchi typedef signed long Dwarf_Signed; /* 4 or 8 byte signed value */ 81*7fd79137SRobert Mustacchi typedef unsigned long Dwarf_Addr; /* target memory address */ 82*7fd79137SRobert Mustacchi #define DW_PR_DUx "lx" 83*7fd79137SRobert Mustacchi #define DW_PR_DSx "lx" 84*7fd79137SRobert Mustacchi #define DW_PR_DUu "lu" 85*7fd79137SRobert Mustacchi #define DW_PR_DSd "ld" 86*7fd79137SRobert Mustacchi 87*7fd79137SRobert Mustacchi #else /* 32-bit */ 88*7fd79137SRobert Mustacchi /* This is for ILP32, allowing i/o of 64bit dwarf info. 89*7fd79137SRobert Mustacchi Also should be fine for LP64 and ILP64 cases. 90*7fd79137SRobert Mustacchi */ 91*7fd79137SRobert Mustacchi typedef int Dwarf_Bool; /* boolean type */ 92*7fd79137SRobert Mustacchi typedef unsigned long long Dwarf_Off; /* 8 byte file offset */ 93*7fd79137SRobert Mustacchi typedef unsigned long long Dwarf_Unsigned; /* 8 byte unsigned value*/ 94*7fd79137SRobert Mustacchi typedef unsigned short Dwarf_Half; /* 2 byte unsigned value */ 95*7fd79137SRobert Mustacchi typedef unsigned char Dwarf_Small; /* 1 byte unsigned value */ 96*7fd79137SRobert Mustacchi typedef signed long long Dwarf_Signed; /* 8 byte signed value */ 97*7fd79137SRobert Mustacchi typedef unsigned long long Dwarf_Addr; /* target memory address */ 98*7fd79137SRobert Mustacchi #define DW_PR_DUx "llx" 99*7fd79137SRobert Mustacchi #define DW_PR_DSx "llx" 100*7fd79137SRobert Mustacchi #define DW_PR_DUu "llu" 101*7fd79137SRobert Mustacchi #define DW_PR_DSd "lld" 102*7fd79137SRobert Mustacchi #endif 103*7fd79137SRobert Mustacchi #ifdef HAVE_NONSTANDARD_PRINTF_64_FORMAT 104*7fd79137SRobert Mustacchi /* Windows does not use std C formatting, so allow it. */ 105*7fd79137SRobert Mustacchi #undef DW_PR_DUx 106*7fd79137SRobert Mustacchi #undef DW_PR_DSx 107*7fd79137SRobert Mustacchi #undef DW_PR_DUu 108*7fd79137SRobert Mustacchi #undef DW_PR_DSd 109*7fd79137SRobert Mustacchi #define DW_PR_DUx "I64x" 110*7fd79137SRobert Mustacchi #define DW_PR_DSx "I64x" 111*7fd79137SRobert Mustacchi #define DW_PR_DUu "I64u" 112*7fd79137SRobert Mustacchi #define DW_PR_DSd "I64d" 113*7fd79137SRobert Mustacchi #endif /* HAVE_NONSTANDARD_FORMAT */ 114*7fd79137SRobert Mustacchi 115*7fd79137SRobert Mustacchi typedef void* Dwarf_Ptr; /* host machine pointer */ 116*7fd79137SRobert Mustacchi 117*7fd79137SRobert Mustacchi /* Used for DW_FORM_ref_sig8. It is not a string, it 118*7fd79137SRobert Mustacchi is 8 bytes of a signature one would use to find 119*7fd79137SRobert Mustacchi a type unit. See dwarf_formsig8() 120*7fd79137SRobert Mustacchi */ 121*7fd79137SRobert Mustacchi typedef struct { 122*7fd79137SRobert Mustacchi char signature[8]; 123*7fd79137SRobert Mustacchi } Dwarf_Sig8; 124*7fd79137SRobert Mustacchi 125*7fd79137SRobert Mustacchi /* Contains info on an uninterpreted block of data 126*7fd79137SRobert Mustacchi */ 127*7fd79137SRobert Mustacchi typedef struct { 128*7fd79137SRobert Mustacchi Dwarf_Unsigned bl_len; /* length of block */ 129*7fd79137SRobert Mustacchi Dwarf_Ptr bl_data; /* uninterpreted data */ 130*7fd79137SRobert Mustacchi Dwarf_Small bl_from_loclist; /*non-0 if loclist, else debug_info*/ 131*7fd79137SRobert Mustacchi Dwarf_Unsigned bl_section_offset; /* Section (not CU) offset 132*7fd79137SRobert Mustacchi which 'data' comes from. */ 133*7fd79137SRobert Mustacchi } Dwarf_Block; 134*7fd79137SRobert Mustacchi 135*7fd79137SRobert Mustacchi 136*7fd79137SRobert Mustacchi /* location record 137*7fd79137SRobert Mustacchi */ 138*7fd79137SRobert Mustacchi typedef struct { 139*7fd79137SRobert Mustacchi Dwarf_Small lr_atom; /* location operation */ 140*7fd79137SRobert Mustacchi Dwarf_Unsigned lr_number; /* operand */ 141*7fd79137SRobert Mustacchi Dwarf_Unsigned lr_number2; /* for OP_BREGx */ 142*7fd79137SRobert Mustacchi Dwarf_Unsigned lr_offset; /* offset in locexpr for OP_BRA etc */ 143*7fd79137SRobert Mustacchi } Dwarf_Loc; 144*7fd79137SRobert Mustacchi 145*7fd79137SRobert Mustacchi 146*7fd79137SRobert Mustacchi /* location description 147*7fd79137SRobert Mustacchi */ 148*7fd79137SRobert Mustacchi typedef struct { 149*7fd79137SRobert Mustacchi Dwarf_Addr ld_lopc; /* beginning of active range */ 150*7fd79137SRobert Mustacchi Dwarf_Addr ld_hipc; /* end of active range */ 151*7fd79137SRobert Mustacchi Dwarf_Half ld_cents; /* count of location records */ 152*7fd79137SRobert Mustacchi Dwarf_Loc* ld_s; /* pointer to list of same */ 153*7fd79137SRobert Mustacchi Dwarf_Small ld_from_loclist; 154*7fd79137SRobert Mustacchi /* non-0 if loclist, else debug_info*/ 155*7fd79137SRobert Mustacchi 156*7fd79137SRobert Mustacchi Dwarf_Unsigned ld_section_offset; /* Section (not CU) offset 157*7fd79137SRobert Mustacchi where loc-expr begins*/ 158*7fd79137SRobert Mustacchi } Dwarf_Locdesc; 159*7fd79137SRobert Mustacchi 160*7fd79137SRobert Mustacchi /* First appears in DWARF3. 161*7fd79137SRobert Mustacchi The dwr_addr1/addr2 data is either an offset (DW_RANGES_ENTRY) 162*7fd79137SRobert Mustacchi or an address (dwr_addr2 in DW_RANGES_ADDRESS_SELECTION) or 163*7fd79137SRobert Mustacchi both are zero (DW_RANGES_END). 164*7fd79137SRobert Mustacchi */ 165*7fd79137SRobert Mustacchi enum Dwarf_Ranges_Entry_Type { DW_RANGES_ENTRY, 166*7fd79137SRobert Mustacchi DW_RANGES_ADDRESS_SELECTION, 167*7fd79137SRobert Mustacchi DW_RANGES_END }; 168*7fd79137SRobert Mustacchi typedef struct { 169*7fd79137SRobert Mustacchi Dwarf_Addr dwr_addr1; 170*7fd79137SRobert Mustacchi Dwarf_Addr dwr_addr2; 171*7fd79137SRobert Mustacchi enum Dwarf_Ranges_Entry_Type dwr_type; 172*7fd79137SRobert Mustacchi } Dwarf_Ranges; 173*7fd79137SRobert Mustacchi 174*7fd79137SRobert Mustacchi /* Frame description instructions expanded. 175*7fd79137SRobert Mustacchi */ 176*7fd79137SRobert Mustacchi typedef struct { 177*7fd79137SRobert Mustacchi Dwarf_Small fp_base_op; 178*7fd79137SRobert Mustacchi Dwarf_Small fp_extended_op; 179*7fd79137SRobert Mustacchi Dwarf_Half fp_register; 180*7fd79137SRobert Mustacchi 181*7fd79137SRobert Mustacchi /* Value may be signed, depends on op. 182*7fd79137SRobert Mustacchi Any applicable data_alignment_factor has 183*7fd79137SRobert Mustacchi not been applied, this is the raw offset. */ 184*7fd79137SRobert Mustacchi Dwarf_Unsigned fp_offset; 185*7fd79137SRobert Mustacchi Dwarf_Off fp_instr_offset; 186*7fd79137SRobert Mustacchi } Dwarf_Frame_Op; /* DWARF2 */ 187*7fd79137SRobert Mustacchi 188*7fd79137SRobert Mustacchi typedef struct { 189*7fd79137SRobert Mustacchi Dwarf_Small fp_base_op; 190*7fd79137SRobert Mustacchi Dwarf_Small fp_extended_op; 191*7fd79137SRobert Mustacchi Dwarf_Half fp_register; 192*7fd79137SRobert Mustacchi 193*7fd79137SRobert Mustacchi /* Value may be signed, depends on op. 194*7fd79137SRobert Mustacchi Any applicable data_alignment_factor has 195*7fd79137SRobert Mustacchi not been applied, this is the raw offset. */ 196*7fd79137SRobert Mustacchi Dwarf_Unsigned fp_offset_or_block_len; 197*7fd79137SRobert Mustacchi Dwarf_Small *fp_expr_block; 198*7fd79137SRobert Mustacchi 199*7fd79137SRobert Mustacchi Dwarf_Off fp_instr_offset; 200*7fd79137SRobert Mustacchi } Dwarf_Frame_Op3; /* DWARF3 and DWARF2 compatible */ 201*7fd79137SRobert Mustacchi 202*7fd79137SRobert Mustacchi /* ***IMPORTANT NOTE, TARGET DEPENDENCY **** 203*7fd79137SRobert Mustacchi DW_REG_TABLE_SIZE must be at least as large as 204*7fd79137SRobert Mustacchi the number of registers 205*7fd79137SRobert Mustacchi (DW_FRAME_LAST_REG_NUM) as defined in dwarf.h 206*7fd79137SRobert Mustacchi Preferably identical to DW_FRAME_LAST_REG_NUM. 207*7fd79137SRobert Mustacchi Ensure [0-DW_REG_TABLE_SIZE] does not overlap 208*7fd79137SRobert Mustacchi DW_FRAME_UNDEFINED_VAL or DW_FRAME_SAME_VAL. 209*7fd79137SRobert Mustacchi Also ensure DW_FRAME_REG_INITIAL_VALUE is set to what 210*7fd79137SRobert Mustacchi is appropriate to your cpu. 211*7fd79137SRobert Mustacchi For various CPUs DW_FRAME_UNDEFINED_VAL is correct 212*7fd79137SRobert Mustacchi as the value for DW_FRAME_REG_INITIAL_VALUE. 213*7fd79137SRobert Mustacchi 214*7fd79137SRobert Mustacchi For consumer apps, this can be set dynamically: see 215*7fd79137SRobert Mustacchi dwarf_set_frame_rule_table_size(); 216*7fd79137SRobert Mustacchi */ 217*7fd79137SRobert Mustacchi #ifndef DW_REG_TABLE_SIZE 218*7fd79137SRobert Mustacchi #define DW_REG_TABLE_SIZE 66 219*7fd79137SRobert Mustacchi #endif 220*7fd79137SRobert Mustacchi 221*7fd79137SRobert Mustacchi /* For MIPS, DW_FRAME_SAME_VAL is the correct default value 222*7fd79137SRobert Mustacchi for a frame register value. For other CPUS another value 223*7fd79137SRobert Mustacchi may be better, such as DW_FRAME_UNDEFINED_VAL. 224*7fd79137SRobert Mustacchi See dwarf_set_frame_rule_table_size 225*7fd79137SRobert Mustacchi */ 226*7fd79137SRobert Mustacchi #ifndef DW_FRAME_REG_INITIAL_VALUE 227*7fd79137SRobert Mustacchi #define DW_FRAME_REG_INITIAL_VALUE DW_FRAME_SAME_VAL 228*7fd79137SRobert Mustacchi #endif 229*7fd79137SRobert Mustacchi 230*7fd79137SRobert Mustacchi /* Taken as meaning 'undefined value', this is not 231*7fd79137SRobert Mustacchi a column or register number. 232*7fd79137SRobert Mustacchi Only present at libdwarf runtime in the consumer 233*7fd79137SRobert Mustacchi interfaces. Never on disk. 234*7fd79137SRobert Mustacchi DW_FRAME_* Values present on disk are in dwarf.h 235*7fd79137SRobert Mustacchi Ensure this is > DW_REG_TABLE_SIZE (the reg table 236*7fd79137SRobert Mustacchi size is changeable at runtime with the *reg3() interfaces, 237*7fd79137SRobert Mustacchi and this value must be greater than the reg table size). 238*7fd79137SRobert Mustacchi */ 239*7fd79137SRobert Mustacchi #define DW_FRAME_UNDEFINED_VAL 1034 240*7fd79137SRobert Mustacchi 241*7fd79137SRobert Mustacchi /* Taken as meaning 'same value' as caller had, not a column 242*7fd79137SRobert Mustacchi or register number. 243*7fd79137SRobert Mustacchi Only present at libdwarf runtime in the consumer 244*7fd79137SRobert Mustacchi interfaces. Never on disk. 245*7fd79137SRobert Mustacchi DW_FRAME_* Values present on disk are in dwarf.h 246*7fd79137SRobert Mustacchi Ensure this is > DW_REG_TABLE_SIZE (the reg table 247*7fd79137SRobert Mustacchi size is changeable at runtime with the *reg3() interfaces, 248*7fd79137SRobert Mustacchi and this value must be greater than the reg table size). 249*7fd79137SRobert Mustacchi */ 250*7fd79137SRobert Mustacchi #define DW_FRAME_SAME_VAL 1035 251*7fd79137SRobert Mustacchi 252*7fd79137SRobert Mustacchi /* For DWARF3 consumer interfaces, make the CFA a column with no 253*7fd79137SRobert Mustacchi real table number. This is what should have been done 254*7fd79137SRobert Mustacchi for the DWARF2 interfaces. This actually works for 255*7fd79137SRobert Mustacchi both DWARF2 and DWARF3, but see the libdwarf documentation 256*7fd79137SRobert Mustacchi on Dwarf_Regtable3 and dwarf_get_fde_info_for_reg3() 257*7fd79137SRobert Mustacchi and dwarf_get_fde_info_for_all_regs3() 258*7fd79137SRobert Mustacchi Do NOT use this with the older dwarf_get_fde_info_for_reg() 259*7fd79137SRobert Mustacchi or dwarf_get_fde_info_for_all_regs() consumer interfaces. 260*7fd79137SRobert Mustacchi Must be higher than any register count for *any* ABI 261*7fd79137SRobert Mustacchi (ensures maximum applicability with minimum effort). 262*7fd79137SRobert Mustacchi Ensure this is > DW_REG_TABLE_SIZE (the reg table 263*7fd79137SRobert Mustacchi size is changeable at runtime with the *reg3() interfaces, 264*7fd79137SRobert Mustacchi and this value must be greater than the reg table size). 265*7fd79137SRobert Mustacchi Only present at libdwarf runtime in the consumer 266*7fd79137SRobert Mustacchi interfaces. Never on disk. 267*7fd79137SRobert Mustacchi */ 268*7fd79137SRobert Mustacchi #define DW_FRAME_CFA_COL3 1436 269*7fd79137SRobert Mustacchi 270*7fd79137SRobert Mustacchi /* The following are all needed to evaluate DWARF3 register rules. 271*7fd79137SRobert Mustacchi */ 272*7fd79137SRobert Mustacchi #define DW_EXPR_OFFSET 0 /* DWARF2 only sees this. */ 273*7fd79137SRobert Mustacchi #define DW_EXPR_VAL_OFFSET 1 274*7fd79137SRobert Mustacchi #define DW_EXPR_EXPRESSION 2 275*7fd79137SRobert Mustacchi #define DW_EXPR_VAL_EXPRESSION 3 276*7fd79137SRobert Mustacchi 277*7fd79137SRobert Mustacchi typedef struct Dwarf_Regtable_Entry_s { 278*7fd79137SRobert Mustacchi /* For each index i (naming a hardware register with dwarf number 279*7fd79137SRobert Mustacchi i) the following is true and defines the value of that register: 280*7fd79137SRobert Mustacchi 281*7fd79137SRobert Mustacchi If dw_regnum is Register DW_FRAME_UNDEFINED_VAL 282*7fd79137SRobert Mustacchi it is not DWARF register number but 283*7fd79137SRobert Mustacchi a place holder indicating the register has no defined value. 284*7fd79137SRobert Mustacchi If dw_regnum is Register DW_FRAME_SAME_VAL 285*7fd79137SRobert Mustacchi it is not DWARF register number but 286*7fd79137SRobert Mustacchi a place holder indicating the register has the same 287*7fd79137SRobert Mustacchi value in the previous frame. 288*7fd79137SRobert Mustacchi DW_FRAME_UNDEFINED_VAL, DW_FRAME_SAME_VAL are 289*7fd79137SRobert Mustacchi only present at libdwarf runtime. Never on disk. 290*7fd79137SRobert Mustacchi DW_FRAME_* Values present on disk are in dwarf.h 291*7fd79137SRobert Mustacchi 292*7fd79137SRobert Mustacchi Otherwise: the register number is a DWARF register number 293*7fd79137SRobert Mustacchi (see ABI documents for how this translates to hardware/ 294*7fd79137SRobert Mustacchi software register numbers in the machine hardware) 295*7fd79137SRobert Mustacchi and the following applies: 296*7fd79137SRobert Mustacchi 297*7fd79137SRobert Mustacchi if dw_value_type == DW_EXPR_OFFSET (the only case for dwarf2): 298*7fd79137SRobert Mustacchi If dw_offset_relevant is non-zero, then 299*7fd79137SRobert Mustacchi the value is stored at at the address CFA+N where 300*7fd79137SRobert Mustacchi N is a signed offset. 301*7fd79137SRobert Mustacchi Rule: Offset(N) 302*7fd79137SRobert Mustacchi If dw_offset_relevant is zero, then the value of the register 303*7fd79137SRobert Mustacchi is the value of (DWARF) register number dw_regnum. 304*7fd79137SRobert Mustacchi Rule: register(F) 305*7fd79137SRobert Mustacchi Other values of dw_value_type are an error. 306*7fd79137SRobert Mustacchi */ 307*7fd79137SRobert Mustacchi Dwarf_Small dw_offset_relevant; 308*7fd79137SRobert Mustacchi 309*7fd79137SRobert Mustacchi /* For DWARF2, always 0 */ 310*7fd79137SRobert Mustacchi Dwarf_Small dw_value_type; 311*7fd79137SRobert Mustacchi 312*7fd79137SRobert Mustacchi Dwarf_Half dw_regnum; 313*7fd79137SRobert Mustacchi 314*7fd79137SRobert Mustacchi /* The data type here should the larger of Dwarf_Addr 315*7fd79137SRobert Mustacchi and Dwarf_Unsigned and Dwarf_Signed. */ 316*7fd79137SRobert Mustacchi Dwarf_Addr dw_offset; 317*7fd79137SRobert Mustacchi } Dwarf_Regtable_Entry; 318*7fd79137SRobert Mustacchi 319*7fd79137SRobert Mustacchi typedef struct Dwarf_Regtable_s { 320*7fd79137SRobert Mustacchi struct Dwarf_Regtable_Entry_s rules[DW_REG_TABLE_SIZE]; 321*7fd79137SRobert Mustacchi } Dwarf_Regtable; 322*7fd79137SRobert Mustacchi 323*7fd79137SRobert Mustacchi /* opaque type. Functional interface shown later. */ 324*7fd79137SRobert Mustacchi struct Dwarf_Reg_value3_s; 325*7fd79137SRobert Mustacchi typedef struct Dwarf_Reg_value3_s Dwarf_Reg_Value3; 326*7fd79137SRobert Mustacchi 327*7fd79137SRobert Mustacchi typedef struct Dwarf_Regtable_Entry3_s { 328*7fd79137SRobert Mustacchi /* For each index i (naming a hardware register with dwarf number 329*7fd79137SRobert Mustacchi i) the following is true and defines the value of that register: 330*7fd79137SRobert Mustacchi 331*7fd79137SRobert Mustacchi If dw_regnum is Register DW_FRAME_UNDEFINED_VAL 332*7fd79137SRobert Mustacchi it is not DWARF register number but 333*7fd79137SRobert Mustacchi a place holder indicating the register has no defined value. 334*7fd79137SRobert Mustacchi If dw_regnum is Register DW_FRAME_SAME_VAL 335*7fd79137SRobert Mustacchi it is not DWARF register number but 336*7fd79137SRobert Mustacchi a place holder indicating the register has the same 337*7fd79137SRobert Mustacchi value in the previous frame. 338*7fd79137SRobert Mustacchi DW_FRAME_UNDEFINED_VAL, DW_FRAME_SAME_VAL and 339*7fd79137SRobert Mustacchi DW_FRAME_CFA_COL3 are only present at libdwarf runtime. 340*7fd79137SRobert Mustacchi Never on disk. 341*7fd79137SRobert Mustacchi DW_FRAME_* Values present on disk are in dwarf.h 342*7fd79137SRobert Mustacchi Because DW_FRAME_SAME_VAL and DW_FRAME_UNDEFINED_VAL 343*7fd79137SRobert Mustacchi and DW_FRAME_CFA_COL3 are defineable at runtime 344*7fd79137SRobert Mustacchi consider the names symbolic in this comment, not absolute. 345*7fd79137SRobert Mustacchi 346*7fd79137SRobert Mustacchi Otherwise: the register number is a DWARF register number 347*7fd79137SRobert Mustacchi (see ABI documents for how this translates to hardware/ 348*7fd79137SRobert Mustacchi software register numbers in the machine hardware) 349*7fd79137SRobert Mustacchi and the following applies: 350*7fd79137SRobert Mustacchi 351*7fd79137SRobert Mustacchi In a cfa-defining entry (rt3_cfa_rule) the regnum is the 352*7fd79137SRobert Mustacchi CFA 'register number'. Which is some 'normal' register, 353*7fd79137SRobert Mustacchi not DW_FRAME_CFA_COL3, nor DW_FRAME_SAME_VAL, nor 354*7fd79137SRobert Mustacchi DW_FRAME_UNDEFINED_VAL. 355*7fd79137SRobert Mustacchi 356*7fd79137SRobert Mustacchi If dw_value_type == DW_EXPR_OFFSET (the only possible case for 357*7fd79137SRobert Mustacchi dwarf2): 358*7fd79137SRobert Mustacchi If dw_offset_relevant is non-zero, then 359*7fd79137SRobert Mustacchi the value is stored at at the address 360*7fd79137SRobert Mustacchi CFA+N where N is a signed offset. 361*7fd79137SRobert Mustacchi dw_regnum is the cfa register rule which means 362*7fd79137SRobert Mustacchi one ignores dw_regnum and uses the CFA appropriately. 363*7fd79137SRobert Mustacchi So dw_offset_or_block_len is a signed value, really, 364*7fd79137SRobert Mustacchi and must be printed/evaluated as such. 365*7fd79137SRobert Mustacchi Rule: Offset(N) 366*7fd79137SRobert Mustacchi If dw_offset_relevant is zero, then the value of the register 367*7fd79137SRobert Mustacchi is the value of (DWARF) register number dw_regnum. 368*7fd79137SRobert Mustacchi Rule: register(R) 369*7fd79137SRobert Mustacchi If dw_value_type == DW_EXPR_VAL_OFFSET 370*7fd79137SRobert Mustacchi the value of this register is CFA +N where N is a signed offset. 371*7fd79137SRobert Mustacchi dw_regnum is the cfa register rule which means 372*7fd79137SRobert Mustacchi one ignores dw_regnum and uses the CFA appropriately. 373*7fd79137SRobert Mustacchi Rule: val_offset(N) 374*7fd79137SRobert Mustacchi If dw_value_type == DW_EXPR_EXPRESSION 375*7fd79137SRobert Mustacchi The value of the register is the value at the address 376*7fd79137SRobert Mustacchi computed by evaluating the DWARF expression E. 377*7fd79137SRobert Mustacchi Rule: expression(E) 378*7fd79137SRobert Mustacchi The expression E byte stream is pointed to by dw_block_ptr. 379*7fd79137SRobert Mustacchi The expression length in bytes is given by 380*7fd79137SRobert Mustacchi dw_offset_or_block_len. 381*7fd79137SRobert Mustacchi If dw_value_type == DW_EXPR_VAL_EXPRESSION 382*7fd79137SRobert Mustacchi The value of the register is the value 383*7fd79137SRobert Mustacchi computed by evaluating the DWARF expression E. 384*7fd79137SRobert Mustacchi Rule: val_expression(E) 385*7fd79137SRobert Mustacchi The expression E byte stream is pointed to by dw_block_ptr. 386*7fd79137SRobert Mustacchi The expression length in bytes is given by 387*7fd79137SRobert Mustacchi dw_offset_or_block_len. 388*7fd79137SRobert Mustacchi Other values of dw_value_type are an error. 389*7fd79137SRobert Mustacchi */ 390*7fd79137SRobert Mustacchi Dwarf_Small dw_offset_relevant; 391*7fd79137SRobert Mustacchi Dwarf_Small dw_value_type; 392*7fd79137SRobert Mustacchi Dwarf_Half dw_regnum; 393*7fd79137SRobert Mustacchi Dwarf_Unsigned dw_offset_or_block_len; 394*7fd79137SRobert Mustacchi Dwarf_Ptr dw_block_ptr; 395*7fd79137SRobert Mustacchi 396*7fd79137SRobert Mustacchi }Dwarf_Regtable_Entry3; 397*7fd79137SRobert Mustacchi 398*7fd79137SRobert Mustacchi /* For the DWARF3 version, moved the DW_FRAME_CFA_COL 399*7fd79137SRobert Mustacchi out of the array and into its own struct. 400*7fd79137SRobert Mustacchi Having it part of the array is not very easy to work 401*7fd79137SRobert Mustacchi with from a portability point of view: changing 402*7fd79137SRobert Mustacchi the number for every architecture is a pain (if one fails 403*7fd79137SRobert Mustacchi to set it correctly a register rule gets clobbered when 404*7fd79137SRobert Mustacchi setting CFA). With MIPS it just happened to be easy to use 405*7fd79137SRobert Mustacchi DW_FRAME_CFA_COL (it was wrong conceptually but it was easy...). 406*7fd79137SRobert Mustacchi 407*7fd79137SRobert Mustacchi rt3_rules and rt3_reg_table_size must be filled in before 408*7fd79137SRobert Mustacchi calling libdwarf. Filled in with a pointer to an array 409*7fd79137SRobert Mustacchi (pointer and array set up by the calling application) 410*7fd79137SRobert Mustacchi of rt3_reg_table_size Dwarf_Regtable_Entry3_s structs. 411*7fd79137SRobert Mustacchi libdwarf does not allocate or deallocate space for the 412*7fd79137SRobert Mustacchi rules, you must do so. libdwarf will initialize the 413*7fd79137SRobert Mustacchi contents rules array, you do not need to do so (though 414*7fd79137SRobert Mustacchi if you choose to initialize the array somehow that is ok: 415*7fd79137SRobert Mustacchi libdwarf will overwrite your initializations with its own). 416*7fd79137SRobert Mustacchi 417*7fd79137SRobert Mustacchi */ 418*7fd79137SRobert Mustacchi typedef struct Dwarf_Regtable3_s { 419*7fd79137SRobert Mustacchi struct Dwarf_Regtable_Entry3_s rt3_cfa_rule; 420*7fd79137SRobert Mustacchi 421*7fd79137SRobert Mustacchi Dwarf_Half rt3_reg_table_size; 422*7fd79137SRobert Mustacchi struct Dwarf_Regtable_Entry3_s * rt3_rules; 423*7fd79137SRobert Mustacchi } Dwarf_Regtable3; 424*7fd79137SRobert Mustacchi 425*7fd79137SRobert Mustacchi 426*7fd79137SRobert Mustacchi /* Use for DW_EPXR_STANDARD., DW_EXPR_VAL_OFFSET. 427*7fd79137SRobert Mustacchi Returns DW_DLV_OK if the value is available. 428*7fd79137SRobert Mustacchi If DW_DLV_OK returns the regnum and offset thru the pointers 429*7fd79137SRobert Mustacchi (which the consumer must use appropriately). 430*7fd79137SRobert Mustacchi */ 431*7fd79137SRobert Mustacchi int dwarf_frame_get_reg_register(struct Dwarf_Regtable_Entry3_s *reg_in, 432*7fd79137SRobert Mustacchi Dwarf_Small *offset_relevant, 433*7fd79137SRobert Mustacchi Dwarf_Half *regnum_out, 434*7fd79137SRobert Mustacchi Dwarf_Signed *offset_out); 435*7fd79137SRobert Mustacchi 436*7fd79137SRobert Mustacchi /* Use for DW_EXPR_EXPRESSION, DW_EXPR_VAL_EXPRESSION. 437*7fd79137SRobert Mustacchi Returns DW_DLV_OK if the value is available. 438*7fd79137SRobert Mustacchi The caller must pass in the address of a valid 439*7fd79137SRobert Mustacchi Dwarf_Block (the caller need not initialize it). 440*7fd79137SRobert Mustacchi */ 441*7fd79137SRobert Mustacchi int dwarf_frame_get_reg_expression(struct Dwarf_Regtable_Entry3_s *reg_in, 442*7fd79137SRobert Mustacchi Dwarf_Block *block_out); 443*7fd79137SRobert Mustacchi 444*7fd79137SRobert Mustacchi 445*7fd79137SRobert Mustacchi /* For DW_DLC_SYMBOLIC_RELOCATIONS output to caller 446*7fd79137SRobert Mustacchi v2, adding drd_length: some relocations are 4 and 447*7fd79137SRobert Mustacchi some 8 bytes (pointers are 8, section offsets 4) in 448*7fd79137SRobert Mustacchi some dwarf environments. (MIPS relocations are all one 449*7fd79137SRobert Mustacchi size in any given ABI.) Changing drd_type to an unsigned char 450*7fd79137SRobert Mustacchi to keep struct size down. 451*7fd79137SRobert Mustacchi */ 452*7fd79137SRobert Mustacchi enum Dwarf_Rel_Type { 453*7fd79137SRobert Mustacchi dwarf_drt_none, /* Should not get to caller */ 454*7fd79137SRobert Mustacchi dwarf_drt_data_reloc, /* Simple normal relocation. */ 455*7fd79137SRobert Mustacchi dwarf_drt_segment_rel, /* Special reloc, exceptions. */ 456*7fd79137SRobert Mustacchi /* dwarf_drt_first_of_length_pair and drt_second 457*7fd79137SRobert Mustacchi are for for the .word end - begin case. */ 458*7fd79137SRobert Mustacchi dwarf_drt_first_of_length_pair, 459*7fd79137SRobert Mustacchi dwarf_drt_second_of_length_pair 460*7fd79137SRobert Mustacchi }; 461*7fd79137SRobert Mustacchi 462*7fd79137SRobert Mustacchi typedef struct Dwarf_P_Marker_s * Dwarf_P_Marker; 463*7fd79137SRobert Mustacchi struct Dwarf_P_Marker_s { 464*7fd79137SRobert Mustacchi Dwarf_Unsigned ma_marker; 465*7fd79137SRobert Mustacchi Dwarf_Unsigned ma_offset; 466*7fd79137SRobert Mustacchi }; 467*7fd79137SRobert Mustacchi 468*7fd79137SRobert Mustacchi typedef struct Dwarf_Relocation_Data_s * Dwarf_Relocation_Data; 469*7fd79137SRobert Mustacchi struct Dwarf_Relocation_Data_s { 470*7fd79137SRobert Mustacchi unsigned char drd_type; /* Cast to/from Dwarf_Rel_Type 471*7fd79137SRobert Mustacchi to keep size small in struct. */ 472*7fd79137SRobert Mustacchi unsigned char drd_length; /* Length in bytes of data being 473*7fd79137SRobert Mustacchi relocated. 4 for 32bit data, 474*7fd79137SRobert Mustacchi 8 for 64bit data. */ 475*7fd79137SRobert Mustacchi Dwarf_Unsigned drd_offset; /* Where the data to reloc is. */ 476*7fd79137SRobert Mustacchi Dwarf_Unsigned drd_symbol_index; 477*7fd79137SRobert Mustacchi }; 478*7fd79137SRobert Mustacchi 479*7fd79137SRobert Mustacchi typedef struct Dwarf_P_String_Attr_s * Dwarf_P_String_Attr; 480*7fd79137SRobert Mustacchi struct Dwarf_P_String_Attr_s { 481*7fd79137SRobert Mustacchi Dwarf_Unsigned sa_offset; /* Offset of string attribute data */ 482*7fd79137SRobert Mustacchi Dwarf_Unsigned sa_nbytes; 483*7fd79137SRobert Mustacchi }; 484*7fd79137SRobert Mustacchi 485*7fd79137SRobert Mustacchi 486*7fd79137SRobert Mustacchi /* Opaque types for Consumer Library. */ 487*7fd79137SRobert Mustacchi typedef struct Dwarf_Debug_s* Dwarf_Debug; 488*7fd79137SRobert Mustacchi typedef struct Dwarf_Die_s* Dwarf_Die; 489*7fd79137SRobert Mustacchi typedef struct Dwarf_Line_s* Dwarf_Line; 490*7fd79137SRobert Mustacchi typedef struct Dwarf_Global_s* Dwarf_Global; 491*7fd79137SRobert Mustacchi typedef struct Dwarf_Func_s* Dwarf_Func; 492*7fd79137SRobert Mustacchi typedef struct Dwarf_Type_s* Dwarf_Type; 493*7fd79137SRobert Mustacchi typedef struct Dwarf_Var_s* Dwarf_Var; 494*7fd79137SRobert Mustacchi typedef struct Dwarf_Weak_s* Dwarf_Weak; 495*7fd79137SRobert Mustacchi typedef struct Dwarf_Error_s* Dwarf_Error; 496*7fd79137SRobert Mustacchi typedef struct Dwarf_Attribute_s* Dwarf_Attribute; 497*7fd79137SRobert Mustacchi typedef struct Dwarf_Abbrev_s* Dwarf_Abbrev; 498*7fd79137SRobert Mustacchi typedef struct Dwarf_Fde_s* Dwarf_Fde; 499*7fd79137SRobert Mustacchi typedef struct Dwarf_Cie_s* Dwarf_Cie; 500*7fd79137SRobert Mustacchi typedef struct Dwarf_Arange_s* Dwarf_Arange; 501*7fd79137SRobert Mustacchi 502*7fd79137SRobert Mustacchi /* Opaque types for Producer Library. */ 503*7fd79137SRobert Mustacchi typedef struct Dwarf_P_Debug_s* Dwarf_P_Debug; 504*7fd79137SRobert Mustacchi typedef struct Dwarf_P_Die_s* Dwarf_P_Die; 505*7fd79137SRobert Mustacchi typedef struct Dwarf_P_Attribute_s* Dwarf_P_Attribute; 506*7fd79137SRobert Mustacchi typedef struct Dwarf_P_Fde_s* Dwarf_P_Fde; 507*7fd79137SRobert Mustacchi typedef struct Dwarf_P_Expr_s* Dwarf_P_Expr; 508*7fd79137SRobert Mustacchi typedef Dwarf_Unsigned Dwarf_Tag; 509*7fd79137SRobert Mustacchi 510*7fd79137SRobert Mustacchi 511*7fd79137SRobert Mustacchi /* error handler function 512*7fd79137SRobert Mustacchi */ 513*7fd79137SRobert Mustacchi typedef void (*Dwarf_Handler)(Dwarf_Error /*error*/, Dwarf_Ptr /*errarg*/); 514*7fd79137SRobert Mustacchi 515*7fd79137SRobert Mustacchi 516*7fd79137SRobert Mustacchi /* Begin libdwarf Object File Interface declarations. 517*7fd79137SRobert Mustacchi 518*7fd79137SRobert Mustacchi As of February 2008 there are multiple dwarf_reader object access 519*7fd79137SRobert Mustacchi initialization methods available: 520*7fd79137SRobert Mustacchi The traditional dwarf_elf_init() and dwarf_init() and dwarf_finish() 521*7fd79137SRobert Mustacchi which assume libelf and POSIX file access. 522*7fd79137SRobert Mustacchi An object-file and library agnostic dwarf_object_init() and dwarf_object_finish() 523*7fd79137SRobert Mustacchi which allow the coder to provide object access routines 524*7fd79137SRobert Mustacchi abstracting away the elf interface. So there is no dependence in the 525*7fd79137SRobert Mustacchi reader code on the object format and no dependence on libelf. 526*7fd79137SRobert Mustacchi See the code in dwarf_elf_access.c and dwarf_original_elf_init.c 527*7fd79137SRobert Mustacchi to see an example of initializing the structures mentioned below. 528*7fd79137SRobert Mustacchi 529*7fd79137SRobert Mustacchi Projects using dwarf_elf_init() or dwarf_init() can ignore 530*7fd79137SRobert Mustacchi the Dwarf_Obj_Access* structures entirely as all these details 531*7fd79137SRobert Mustacchi are completed for you. 532*7fd79137SRobert Mustacchi 533*7fd79137SRobert Mustacchi */ 534*7fd79137SRobert Mustacchi 535*7fd79137SRobert Mustacchi typedef struct Dwarf_Obj_Access_Interface_s Dwarf_Obj_Access_Interface; 536*7fd79137SRobert Mustacchi typedef struct Dwarf_Obj_Access_Methods_s Dwarf_Obj_Access_Methods; 537*7fd79137SRobert Mustacchi typedef struct Dwarf_Obj_Access_Section_s Dwarf_Obj_Access_Section; 538*7fd79137SRobert Mustacchi 539*7fd79137SRobert Mustacchi 540*7fd79137SRobert Mustacchi /* Used in the get_section interface function 541*7fd79137SRobert Mustacchi in Dwarf_Obj_Access_Section_s. Since libdwarf 542*7fd79137SRobert Mustacchi depends on standard DWARF section names an object 543*7fd79137SRobert Mustacchi format that has no such names (but has some 544*7fd79137SRobert Mustacchi method of setting up 'sections equivalents') 545*7fd79137SRobert Mustacchi must arrange to return standard DWARF section 546*7fd79137SRobert Mustacchi names in the 'name' field. libdwarf does 547*7fd79137SRobert Mustacchi not free the strings in 'name'. */ 548*7fd79137SRobert Mustacchi struct Dwarf_Obj_Access_Section_s { 549*7fd79137SRobert Mustacchi Dwarf_Addr addr; 550*7fd79137SRobert Mustacchi Dwarf_Unsigned size; 551*7fd79137SRobert Mustacchi const char* name; 552*7fd79137SRobert Mustacchi /* Set link to zero if it is meaningless. If non-zero 553*7fd79137SRobert Mustacchi it should be a link to a rela section or from symtab 554*7fd79137SRobert Mustacchi to strtab. In Elf it is sh_link. */ 555*7fd79137SRobert Mustacchi Dwarf_Unsigned link; 556*7fd79137SRobert Mustacchi }; 557*7fd79137SRobert Mustacchi 558*7fd79137SRobert Mustacchi /* Returned by the get_endianness function in 559*7fd79137SRobert Mustacchi Dwarf_Obj_Access_Methods_s. */ 560*7fd79137SRobert Mustacchi typedef enum { 561*7fd79137SRobert Mustacchi DW_OBJECT_MSB, 562*7fd79137SRobert Mustacchi DW_OBJECT_LSB 563*7fd79137SRobert Mustacchi } Dwarf_Endianness; 564*7fd79137SRobert Mustacchi 565*7fd79137SRobert Mustacchi /* The functions we need to access object data from libdwarf are declared here. 566*7fd79137SRobert Mustacchi 567*7fd79137SRobert Mustacchi In these function pointer declarations 568*7fd79137SRobert Mustacchi 'void *obj' is intended to be a pointer (the object field in 569*7fd79137SRobert Mustacchi Dwarf_Obj_Access_Interface_s) 570*7fd79137SRobert Mustacchi that hides the library-specific and object-specific data that makes 571*7fd79137SRobert Mustacchi it possible to handle multiple object formats and multiple libraries. 572*7fd79137SRobert Mustacchi It's not required that one handles multiple such in a single libdwarf 573*7fd79137SRobert Mustacchi archive/shared-library (but not ruled out either). 574*7fd79137SRobert Mustacchi See dwarf_elf_object_access_internals_t and dwarf_elf_access.c 575*7fd79137SRobert Mustacchi for an example. 576*7fd79137SRobert Mustacchi 577*7fd79137SRobert Mustacchi */ 578*7fd79137SRobert Mustacchi struct Dwarf_Obj_Access_Methods_s { 579*7fd79137SRobert Mustacchi /** 580*7fd79137SRobert Mustacchi * get_section_info 581*7fd79137SRobert Mustacchi * 582*7fd79137SRobert Mustacchi * Get address, size, and name info about a section. 583*7fd79137SRobert Mustacchi * 584*7fd79137SRobert Mustacchi * Parameters 585*7fd79137SRobert Mustacchi * section_index - Zero-based index. 586*7fd79137SRobert Mustacchi * return_section - Pointer to a structure in which section info 587*7fd79137SRobert Mustacchi * will be placed. Caller must provide a valid pointer to a 588*7fd79137SRobert Mustacchi * structure area. The structure's contents will be overwritten 589*7fd79137SRobert Mustacchi * by the call to get_section_info. 590*7fd79137SRobert Mustacchi * error - A pointer to an integer in which an error code may be stored. 591*7fd79137SRobert Mustacchi * 592*7fd79137SRobert Mustacchi * Return 593*7fd79137SRobert Mustacchi * DW_DLV_OK - Everything ok. 594*7fd79137SRobert Mustacchi * DW_DLV_ERROR - Error occurred. Use 'error' to determine the 595*7fd79137SRobert Mustacchi * libdwarf defined error. 596*7fd79137SRobert Mustacchi * DW_DLV_NO_ENTRY - No such section. 597*7fd79137SRobert Mustacchi */ 598*7fd79137SRobert Mustacchi int (*get_section_info)(void* obj, Dwarf_Half section_index, 599*7fd79137SRobert Mustacchi Dwarf_Obj_Access_Section* return_section, int* error); 600*7fd79137SRobert Mustacchi /** 601*7fd79137SRobert Mustacchi * get_byte_order 602*7fd79137SRobert Mustacchi * 603*7fd79137SRobert Mustacchi * Get whether the object file represented by this interface is big-endian 604*7fd79137SRobert Mustacchi * (DW_OBJECT_MSB) or little endian (DW_OBJECT_LSB). 605*7fd79137SRobert Mustacchi * 606*7fd79137SRobert Mustacchi * Parameters 607*7fd79137SRobert Mustacchi * obj - Equivalent to 'this' in OO languages. 608*7fd79137SRobert Mustacchi * 609*7fd79137SRobert Mustacchi * Return 610*7fd79137SRobert Mustacchi * Endianness of object. Cannot fail. 611*7fd79137SRobert Mustacchi */ 612*7fd79137SRobert Mustacchi Dwarf_Endianness (*get_byte_order)(void* obj); 613*7fd79137SRobert Mustacchi /** 614*7fd79137SRobert Mustacchi * get_length_size 615*7fd79137SRobert Mustacchi * 616*7fd79137SRobert Mustacchi * Get the size of a length field in the underlying object file. 617*7fd79137SRobert Mustacchi * libdwarf currently supports * 4 and 8 byte sizes, but may 618*7fd79137SRobert Mustacchi * support larger in the future. 619*7fd79137SRobert Mustacchi * Perhaps the return type should be an enumeration? 620*7fd79137SRobert Mustacchi * 621*7fd79137SRobert Mustacchi * Parameters 622*7fd79137SRobert Mustacchi * obj - Equivalent to 'this' in OO languages. 623*7fd79137SRobert Mustacchi * 624*7fd79137SRobert Mustacchi * Return 625*7fd79137SRobert Mustacchi * Size of length. Cannot fail. 626*7fd79137SRobert Mustacchi */ 627*7fd79137SRobert Mustacchi Dwarf_Small (*get_length_size)(void* obj); 628*7fd79137SRobert Mustacchi /** 629*7fd79137SRobert Mustacchi * get_pointer_size 630*7fd79137SRobert Mustacchi * 631*7fd79137SRobert Mustacchi * Get the size of a pointer field in the underlying object file. 632*7fd79137SRobert Mustacchi * libdwarf currently supports 4 and 8 byte sizes. 633*7fd79137SRobert Mustacchi * Perhaps the return type should be an enumeration? 634*7fd79137SRobert Mustacchi 635*7fd79137SRobert Mustacchi * Return 636*7fd79137SRobert Mustacchi * Size of pointer. Cannot fail. 637*7fd79137SRobert Mustacchi */ 638*7fd79137SRobert Mustacchi Dwarf_Small (*get_pointer_size)(void* obj); 639*7fd79137SRobert Mustacchi /** 640*7fd79137SRobert Mustacchi * get_section_count 641*7fd79137SRobert Mustacchi * 642*7fd79137SRobert Mustacchi * Get the number of sections in the object file. 643*7fd79137SRobert Mustacchi * 644*7fd79137SRobert Mustacchi * Parameters 645*7fd79137SRobert Mustacchi * 646*7fd79137SRobert Mustacchi * Return 647*7fd79137SRobert Mustacchi * Number of sections 648*7fd79137SRobert Mustacchi */ 649*7fd79137SRobert Mustacchi Dwarf_Unsigned (*get_section_count)(void* obj); 650*7fd79137SRobert Mustacchi /** 651*7fd79137SRobert Mustacchi * load_section 652*7fd79137SRobert Mustacchi * 653*7fd79137SRobert Mustacchi * Get a pointer to an array of bytes that represent the section. 654*7fd79137SRobert Mustacchi * 655*7fd79137SRobert Mustacchi * Parameters 656*7fd79137SRobert Mustacchi * section_index - Zero-based index. 657*7fd79137SRobert Mustacchi * return_data - The address of a pointer to which the section data block 658*7fd79137SRobert Mustacchi * will be assigned. 659*7fd79137SRobert Mustacchi * error - Pointer to an integer for returning libdwarf-defined 660*7fd79137SRobert Mustacchi * error numbers. 661*7fd79137SRobert Mustacchi * 662*7fd79137SRobert Mustacchi * Return 663*7fd79137SRobert Mustacchi * DW_DLV_OK - No error. 664*7fd79137SRobert Mustacchi * DW_DLV_ERROR - Error. Use 'error' to indicate a libdwarf-defined 665*7fd79137SRobert Mustacchi * error number. 666*7fd79137SRobert Mustacchi * DW_DLV_NO_ENTRY - No such section. 667*7fd79137SRobert Mustacchi */ 668*7fd79137SRobert Mustacchi int (*load_section)(void* obj, Dwarf_Half section_index, 669*7fd79137SRobert Mustacchi Dwarf_Small** return_data, int* error); 670*7fd79137SRobert Mustacchi 671*7fd79137SRobert Mustacchi /** 672*7fd79137SRobert Mustacchi * relocate_a_section 673*7fd79137SRobert Mustacchi * If relocations are not supported leave this pointer NULL. 674*7fd79137SRobert Mustacchi * 675*7fd79137SRobert Mustacchi * Get a pointer to an array of bytes that represent the section. 676*7fd79137SRobert Mustacchi * 677*7fd79137SRobert Mustacchi * Parameters 678*7fd79137SRobert Mustacchi * section_index - Zero-based index of the section to be relocated. 679*7fd79137SRobert Mustacchi * error - Pointer to an integer for returning libdwarf-defined 680*7fd79137SRobert Mustacchi * error numbers. 681*7fd79137SRobert Mustacchi * 682*7fd79137SRobert Mustacchi * Return 683*7fd79137SRobert Mustacchi * DW_DLV_OK - No error. 684*7fd79137SRobert Mustacchi * DW_DLV_ERROR - Error. Use 'error' to indicate a libdwarf-defined 685*7fd79137SRobert Mustacchi * error number. 686*7fd79137SRobert Mustacchi * DW_DLV_NO_ENTRY - No such section. 687*7fd79137SRobert Mustacchi */ 688*7fd79137SRobert Mustacchi int (*relocate_a_section)(void* obj, Dwarf_Half section_index, 689*7fd79137SRobert Mustacchi Dwarf_Debug dbg, 690*7fd79137SRobert Mustacchi int* error); 691*7fd79137SRobert Mustacchi 692*7fd79137SRobert Mustacchi }; 693*7fd79137SRobert Mustacchi 694*7fd79137SRobert Mustacchi 695*7fd79137SRobert Mustacchi 696*7fd79137SRobert Mustacchi /* These structures are allocated and deallocated by your code 697*7fd79137SRobert Mustacchi when you are using the libdwarf Object File Interface 698*7fd79137SRobert Mustacchi [dwarf_object_init() and dwarf_object_finish()] directly. 699*7fd79137SRobert Mustacchi dwarf_object_finish() does not free 700*7fd79137SRobert Mustacchi struct Dwarf_Obj_Access_Interface_s or its content. 701*7fd79137SRobert Mustacchi (libdwarf does record a pointer to this struct: you must 702*7fd79137SRobert Mustacchi ensure that pointer remains valid for as long as 703*7fd79137SRobert Mustacchi a libdwarf instance is open (meaning 704*7fd79137SRobert Mustacchi after dwarf_init() and before dwarf_finish()). 705*7fd79137SRobert Mustacchi 706*7fd79137SRobert Mustacchi If you are reading Elf objects and libelf use dwarf_init() 707*7fd79137SRobert Mustacchi or dwarf_elf_init() which take care of these details. 708*7fd79137SRobert Mustacchi */ 709*7fd79137SRobert Mustacchi struct Dwarf_Obj_Access_Interface_s { 710*7fd79137SRobert Mustacchi /* object is a void* as it hides the data the object access routines 711*7fd79137SRobert Mustacchi need (which varies by library in use and object format). 712*7fd79137SRobert Mustacchi */ 713*7fd79137SRobert Mustacchi void* object; 714*7fd79137SRobert Mustacchi const Dwarf_Obj_Access_Methods * methods; 715*7fd79137SRobert Mustacchi }; 716*7fd79137SRobert Mustacchi 717*7fd79137SRobert Mustacchi /* End libdwarf Object File Interface */ 718*7fd79137SRobert Mustacchi 719*7fd79137SRobert Mustacchi /* 720*7fd79137SRobert Mustacchi Dwarf_dealloc() alloc_type arguments. 721*7fd79137SRobert Mustacchi Argument points to: 722*7fd79137SRobert Mustacchi */ 723*7fd79137SRobert Mustacchi #define DW_DLA_STRING 0x01 /* char* */ 724*7fd79137SRobert Mustacchi #define DW_DLA_LOC 0x02 /* Dwarf_Loc */ 725*7fd79137SRobert Mustacchi #define DW_DLA_LOCDESC 0x03 /* Dwarf_Locdesc */ 726*7fd79137SRobert Mustacchi #define DW_DLA_ELLIST 0x04 /* Dwarf_Ellist (not used)*/ 727*7fd79137SRobert Mustacchi #define DW_DLA_BOUNDS 0x05 /* Dwarf_Bounds (not used) */ 728*7fd79137SRobert Mustacchi #define DW_DLA_BLOCK 0x06 /* Dwarf_Block */ 729*7fd79137SRobert Mustacchi #define DW_DLA_DEBUG 0x07 /* Dwarf_Debug */ 730*7fd79137SRobert Mustacchi #define DW_DLA_DIE 0x08 /* Dwarf_Die */ 731*7fd79137SRobert Mustacchi #define DW_DLA_LINE 0x09 /* Dwarf_Line */ 732*7fd79137SRobert Mustacchi #define DW_DLA_ATTR 0x0a /* Dwarf_Attribute */ 733*7fd79137SRobert Mustacchi #define DW_DLA_TYPE 0x0b /* Dwarf_Type (not used) */ 734*7fd79137SRobert Mustacchi #define DW_DLA_SUBSCR 0x0c /* Dwarf_Subscr (not used) */ 735*7fd79137SRobert Mustacchi #define DW_DLA_GLOBAL 0x0d /* Dwarf_Global */ 736*7fd79137SRobert Mustacchi #define DW_DLA_ERROR 0x0e /* Dwarf_Error */ 737*7fd79137SRobert Mustacchi #define DW_DLA_LIST 0x0f /* a list */ 738*7fd79137SRobert Mustacchi #define DW_DLA_LINEBUF 0x10 /* Dwarf_Line* (not used) */ 739*7fd79137SRobert Mustacchi #define DW_DLA_ARANGE 0x11 /* Dwarf_Arange */ 740*7fd79137SRobert Mustacchi #define DW_DLA_ABBREV 0x12 /* Dwarf_Abbrev */ 741*7fd79137SRobert Mustacchi #define DW_DLA_FRAME_OP 0x13 /* Dwarf_Frame_Op */ 742*7fd79137SRobert Mustacchi #define DW_DLA_CIE 0x14 /* Dwarf_Cie */ 743*7fd79137SRobert Mustacchi #define DW_DLA_FDE 0x15 /* Dwarf_Fde */ 744*7fd79137SRobert Mustacchi #define DW_DLA_LOC_BLOCK 0x16 /* Dwarf_Loc Block (not used) */ 745*7fd79137SRobert Mustacchi #define DW_DLA_FRAME_BLOCK 0x17 /* Dwarf_Frame Block (not used) */ 746*7fd79137SRobert Mustacchi #define DW_DLA_FUNC 0x18 /* Dwarf_Func */ 747*7fd79137SRobert Mustacchi #define DW_DLA_TYPENAME 0x19 /* Dwarf_Type */ 748*7fd79137SRobert Mustacchi #define DW_DLA_VAR 0x1a /* Dwarf_Var */ 749*7fd79137SRobert Mustacchi #define DW_DLA_WEAK 0x1b /* Dwarf_Weak */ 750*7fd79137SRobert Mustacchi #define DW_DLA_ADDR 0x1c /* Dwarf_Addr sized entries */ 751*7fd79137SRobert Mustacchi #define DW_DLA_RANGES 0x1d /* Dwarf_Ranges */ 752*7fd79137SRobert Mustacchi 753*7fd79137SRobert Mustacchi /* The augmenter string for CIE */ 754*7fd79137SRobert Mustacchi #define DW_CIE_AUGMENTER_STRING_V0 "z" 755*7fd79137SRobert Mustacchi 756*7fd79137SRobert Mustacchi /* dwarf_init() access arguments 757*7fd79137SRobert Mustacchi */ 758*7fd79137SRobert Mustacchi #define DW_DLC_READ 0 /* read only access */ 759*7fd79137SRobert Mustacchi #define DW_DLC_WRITE 1 /* write only access */ 760*7fd79137SRobert Mustacchi #define DW_DLC_RDWR 2 /* read/write access NOT SUPPORTED*/ 761*7fd79137SRobert Mustacchi 762*7fd79137SRobert Mustacchi /* pro_init() access flag modifiers 763*7fd79137SRobert Mustacchi If HAVE_DWARF2_99_EXTENSION is defined at libdwarf build time 764*7fd79137SRobert Mustacchi and DW_DLC_OFFSET_SIZE_64 is passed in pro_init() flags then the DWARF3 765*7fd79137SRobert Mustacchi 64 bit offset extension is used to generate 64 bit offsets. 766*7fd79137SRobert Mustacchi */ 767*7fd79137SRobert Mustacchi #define DW_DLC_SIZE_64 0x40000000 /* 32-bit address-size target */ 768*7fd79137SRobert Mustacchi #define DW_DLC_SIZE_32 0x20000000 /* 64-bit address-size target */ 769*7fd79137SRobert Mustacchi #define DW_DLC_OFFSET_SIZE_64 0x10000000 /* 64-bit offset-size DWARF */ 770*7fd79137SRobert Mustacchi 771*7fd79137SRobert Mustacchi /* dwarf_pro_init() access flag modifiers 772*7fd79137SRobert Mustacchi */ 773*7fd79137SRobert Mustacchi #define DW_DLC_ISA_MIPS 0x00000000 /* MIPS target */ 774*7fd79137SRobert Mustacchi #define DW_DLC_ISA_IA64 0x01000000 /* IA64 target */ 775*7fd79137SRobert Mustacchi #define DW_DLC_STREAM_RELOCATIONS 0x02000000 /* Old style binary relocs */ 776*7fd79137SRobert Mustacchi 777*7fd79137SRobert Mustacchi /* Usable with assembly output because it is up to the producer to 778*7fd79137SRobert Mustacchi deal with locations in whatever manner the producer code wishes. 779*7fd79137SRobert Mustacchi Possibly emitting text an assembler will recognize. */ 780*7fd79137SRobert Mustacchi #define DW_DLC_SYMBOLIC_RELOCATIONS 0x04000000 781*7fd79137SRobert Mustacchi 782*7fd79137SRobert Mustacchi #define DW_DLC_TARGET_BIGENDIAN 0x08000000 /* Big endian target */ 783*7fd79137SRobert Mustacchi #define DW_DLC_TARGET_LITTLEENDIAN 0x00100000 /* Little endian target */ 784*7fd79137SRobert Mustacchi 785*7fd79137SRobert Mustacchi #if 0 786*7fd79137SRobert Mustacchi /* 787*7fd79137SRobert Mustacchi The libdwarf producer interfaces jumble these two semantics together in 788*7fd79137SRobert Mustacchi confusing ways. We *should* have flags like these... 789*7fd79137SRobert Mustacchi But changing the code means a lot of diffs. So for now, 790*7fd79137SRobert Mustacchi we leave things as they are 791*7fd79137SRobert Mustacchi */ 792*7fd79137SRobert Mustacchi #define DW_DLC_SUN_OFFSET32 0x00010000 /* use 32-bit sec offsets */ 793*7fd79137SRobert Mustacchi #define DW_DLC_SUN_OFFSET64 0x00020000 /* use 64-bit sec offsets */ 794*7fd79137SRobert Mustacchi #define DW_DLC_SUN_POINTER32 0x00040000 /* use 4 for address_size */ 795*7fd79137SRobert Mustacchi #define DW_DLC_SUN_POINTER64 0x00080000 /* use 8 for address_size */ 796*7fd79137SRobert Mustacchi #endif 797*7fd79137SRobert Mustacchi 798*7fd79137SRobert Mustacchi /* dwarf_pcline() slide arguments 799*7fd79137SRobert Mustacchi */ 800*7fd79137SRobert Mustacchi #define DW_DLS_BACKWARD -1 /* slide backward to find line */ 801*7fd79137SRobert Mustacchi #define DW_DLS_NOSLIDE 0 /* match exactly without sliding */ 802*7fd79137SRobert Mustacchi #define DW_DLS_FORWARD 1 /* slide forward to find line */ 803*7fd79137SRobert Mustacchi 804*7fd79137SRobert Mustacchi /* libdwarf error numbers 805*7fd79137SRobert Mustacchi */ 806*7fd79137SRobert Mustacchi #define DW_DLE_NE 0 /* no error */ 807*7fd79137SRobert Mustacchi #define DW_DLE_VMM 1 /* dwarf format/library version mismatch */ 808*7fd79137SRobert Mustacchi #define DW_DLE_MAP 2 /* memory map failure */ 809*7fd79137SRobert Mustacchi #define DW_DLE_LEE 3 /* libelf error */ 810*7fd79137SRobert Mustacchi #define DW_DLE_NDS 4 /* no debug section */ 811*7fd79137SRobert Mustacchi #define DW_DLE_NLS 5 /* no line section */ 812*7fd79137SRobert Mustacchi #define DW_DLE_ID 6 /* invalid descriptor for query */ 813*7fd79137SRobert Mustacchi #define DW_DLE_IOF 7 /* I/O failure */ 814*7fd79137SRobert Mustacchi #define DW_DLE_MAF 8 /* memory allocation failure */ 815*7fd79137SRobert Mustacchi #define DW_DLE_IA 9 /* invalid argument */ 816*7fd79137SRobert Mustacchi #define DW_DLE_MDE 10 /* mangled debugging entry */ 817*7fd79137SRobert Mustacchi #define DW_DLE_MLE 11 /* mangled line number entry */ 818*7fd79137SRobert Mustacchi #define DW_DLE_FNO 12 /* file not open */ 819*7fd79137SRobert Mustacchi #define DW_DLE_FNR 13 /* file not a regular file */ 820*7fd79137SRobert Mustacchi #define DW_DLE_FWA 14 /* file open with wrong access */ 821*7fd79137SRobert Mustacchi #define DW_DLE_NOB 15 /* not an object file */ 822*7fd79137SRobert Mustacchi #define DW_DLE_MOF 16 /* mangled object file header */ 823*7fd79137SRobert Mustacchi #define DW_DLE_EOLL 17 /* end of location list entries */ 824*7fd79137SRobert Mustacchi #define DW_DLE_NOLL 18 /* no location list section */ 825*7fd79137SRobert Mustacchi #define DW_DLE_BADOFF 19 /* Invalid offset */ 826*7fd79137SRobert Mustacchi #define DW_DLE_EOS 20 /* end of section */ 827*7fd79137SRobert Mustacchi #define DW_DLE_ATRUNC 21 /* abbreviations section appears truncated*/ 828*7fd79137SRobert Mustacchi #define DW_DLE_BADBITC 22 /* Address size passed to dwarf bad*/ 829*7fd79137SRobert Mustacchi /* It is not an allowed size (64 or 32) */ 830*7fd79137SRobert Mustacchi /* Error codes defined by the current Libdwarf Implementation. */ 831*7fd79137SRobert Mustacchi #define DW_DLE_DBG_ALLOC 23 832*7fd79137SRobert Mustacchi #define DW_DLE_FSTAT_ERROR 24 833*7fd79137SRobert Mustacchi #define DW_DLE_FSTAT_MODE_ERROR 25 834*7fd79137SRobert Mustacchi #define DW_DLE_INIT_ACCESS_WRONG 26 835*7fd79137SRobert Mustacchi #define DW_DLE_ELF_BEGIN_ERROR 27 836*7fd79137SRobert Mustacchi #define DW_DLE_ELF_GETEHDR_ERROR 28 837*7fd79137SRobert Mustacchi #define DW_DLE_ELF_GETSHDR_ERROR 29 838*7fd79137SRobert Mustacchi #define DW_DLE_ELF_STRPTR_ERROR 30 839*7fd79137SRobert Mustacchi #define DW_DLE_DEBUG_INFO_DUPLICATE 31 840*7fd79137SRobert Mustacchi #define DW_DLE_DEBUG_INFO_NULL 32 841*7fd79137SRobert Mustacchi #define DW_DLE_DEBUG_ABBREV_DUPLICATE 33 842*7fd79137SRobert Mustacchi #define DW_DLE_DEBUG_ABBREV_NULL 34 843*7fd79137SRobert Mustacchi #define DW_DLE_DEBUG_ARANGES_DUPLICATE 35 844*7fd79137SRobert Mustacchi #define DW_DLE_DEBUG_ARANGES_NULL 36 845*7fd79137SRobert Mustacchi #define DW_DLE_DEBUG_LINE_DUPLICATE 37 846*7fd79137SRobert Mustacchi #define DW_DLE_DEBUG_LINE_NULL 38 847*7fd79137SRobert Mustacchi #define DW_DLE_DEBUG_LOC_DUPLICATE 39 848*7fd79137SRobert Mustacchi #define DW_DLE_DEBUG_LOC_NULL 40 849*7fd79137SRobert Mustacchi #define DW_DLE_DEBUG_MACINFO_DUPLICATE 41 850*7fd79137SRobert Mustacchi #define DW_DLE_DEBUG_MACINFO_NULL 42 851*7fd79137SRobert Mustacchi #define DW_DLE_DEBUG_PUBNAMES_DUPLICATE 43 852*7fd79137SRobert Mustacchi #define DW_DLE_DEBUG_PUBNAMES_NULL 44 853*7fd79137SRobert Mustacchi #define DW_DLE_DEBUG_STR_DUPLICATE 45 854*7fd79137SRobert Mustacchi #define DW_DLE_DEBUG_STR_NULL 46 855*7fd79137SRobert Mustacchi #define DW_DLE_CU_LENGTH_ERROR 47 856*7fd79137SRobert Mustacchi #define DW_DLE_VERSION_STAMP_ERROR 48 857*7fd79137SRobert Mustacchi #define DW_DLE_ABBREV_OFFSET_ERROR 49 858*7fd79137SRobert Mustacchi #define DW_DLE_ADDRESS_SIZE_ERROR 50 859*7fd79137SRobert Mustacchi #define DW_DLE_DEBUG_INFO_PTR_NULL 51 860*7fd79137SRobert Mustacchi #define DW_DLE_DIE_NULL 52 861*7fd79137SRobert Mustacchi #define DW_DLE_STRING_OFFSET_BAD 53 862*7fd79137SRobert Mustacchi #define DW_DLE_DEBUG_LINE_LENGTH_BAD 54 863*7fd79137SRobert Mustacchi #define DW_DLE_LINE_PROLOG_LENGTH_BAD 55 864*7fd79137SRobert Mustacchi #define DW_DLE_LINE_NUM_OPERANDS_BAD 56 865*7fd79137SRobert Mustacchi #define DW_DLE_LINE_SET_ADDR_ERROR 57 /* No longer used. */ 866*7fd79137SRobert Mustacchi #define DW_DLE_LINE_EXT_OPCODE_BAD 58 867*7fd79137SRobert Mustacchi #define DW_DLE_DWARF_LINE_NULL 59 868*7fd79137SRobert Mustacchi #define DW_DLE_INCL_DIR_NUM_BAD 60 869*7fd79137SRobert Mustacchi #define DW_DLE_LINE_FILE_NUM_BAD 61 870*7fd79137SRobert Mustacchi #define DW_DLE_ALLOC_FAIL 62 871*7fd79137SRobert Mustacchi #define DW_DLE_NO_CALLBACK_FUNC 63 872*7fd79137SRobert Mustacchi #define DW_DLE_SECT_ALLOC 64 873*7fd79137SRobert Mustacchi #define DW_DLE_FILE_ENTRY_ALLOC 65 874*7fd79137SRobert Mustacchi #define DW_DLE_LINE_ALLOC 66 875*7fd79137SRobert Mustacchi #define DW_DLE_FPGM_ALLOC 67 876*7fd79137SRobert Mustacchi #define DW_DLE_INCDIR_ALLOC 68 877*7fd79137SRobert Mustacchi #define DW_DLE_STRING_ALLOC 69 878*7fd79137SRobert Mustacchi #define DW_DLE_CHUNK_ALLOC 70 879*7fd79137SRobert Mustacchi #define DW_DLE_BYTEOFF_ERR 71 880*7fd79137SRobert Mustacchi #define DW_DLE_CIE_ALLOC 72 881*7fd79137SRobert Mustacchi #define DW_DLE_FDE_ALLOC 73 882*7fd79137SRobert Mustacchi #define DW_DLE_REGNO_OVFL 74 883*7fd79137SRobert Mustacchi #define DW_DLE_CIE_OFFS_ALLOC 75 884*7fd79137SRobert Mustacchi #define DW_DLE_WRONG_ADDRESS 76 885*7fd79137SRobert Mustacchi #define DW_DLE_EXTRA_NEIGHBORS 77 886*7fd79137SRobert Mustacchi #define DW_DLE_WRONG_TAG 78 887*7fd79137SRobert Mustacchi #define DW_DLE_DIE_ALLOC 79 888*7fd79137SRobert Mustacchi #define DW_DLE_PARENT_EXISTS 80 889*7fd79137SRobert Mustacchi #define DW_DLE_DBG_NULL 81 890*7fd79137SRobert Mustacchi #define DW_DLE_DEBUGLINE_ERROR 82 891*7fd79137SRobert Mustacchi #define DW_DLE_DEBUGFRAME_ERROR 83 892*7fd79137SRobert Mustacchi #define DW_DLE_DEBUGINFO_ERROR 84 893*7fd79137SRobert Mustacchi #define DW_DLE_ATTR_ALLOC 85 894*7fd79137SRobert Mustacchi #define DW_DLE_ABBREV_ALLOC 86 895*7fd79137SRobert Mustacchi #define DW_DLE_OFFSET_UFLW 87 896*7fd79137SRobert Mustacchi #define DW_DLE_ELF_SECT_ERR 88 897*7fd79137SRobert Mustacchi #define DW_DLE_DEBUG_FRAME_LENGTH_BAD 89 898*7fd79137SRobert Mustacchi #define DW_DLE_FRAME_VERSION_BAD 90 899*7fd79137SRobert Mustacchi #define DW_DLE_CIE_RET_ADDR_REG_ERROR 91 900*7fd79137SRobert Mustacchi #define DW_DLE_FDE_NULL 92 901*7fd79137SRobert Mustacchi #define DW_DLE_FDE_DBG_NULL 93 902*7fd79137SRobert Mustacchi #define DW_DLE_CIE_NULL 94 903*7fd79137SRobert Mustacchi #define DW_DLE_CIE_DBG_NULL 95 904*7fd79137SRobert Mustacchi #define DW_DLE_FRAME_TABLE_COL_BAD 96 905*7fd79137SRobert Mustacchi #define DW_DLE_PC_NOT_IN_FDE_RANGE 97 906*7fd79137SRobert Mustacchi #define DW_DLE_CIE_INSTR_EXEC_ERROR 98 907*7fd79137SRobert Mustacchi #define DW_DLE_FRAME_INSTR_EXEC_ERROR 99 908*7fd79137SRobert Mustacchi #define DW_DLE_FDE_PTR_NULL 100 909*7fd79137SRobert Mustacchi #define DW_DLE_RET_OP_LIST_NULL 101 910*7fd79137SRobert Mustacchi #define DW_DLE_LINE_CONTEXT_NULL 102 911*7fd79137SRobert Mustacchi #define DW_DLE_DBG_NO_CU_CONTEXT 103 912*7fd79137SRobert Mustacchi #define DW_DLE_DIE_NO_CU_CONTEXT 104 913*7fd79137SRobert Mustacchi #define DW_DLE_FIRST_DIE_NOT_CU 105 914*7fd79137SRobert Mustacchi #define DW_DLE_NEXT_DIE_PTR_NULL 106 915*7fd79137SRobert Mustacchi #define DW_DLE_DEBUG_FRAME_DUPLICATE 107 916*7fd79137SRobert Mustacchi #define DW_DLE_DEBUG_FRAME_NULL 108 917*7fd79137SRobert Mustacchi #define DW_DLE_ABBREV_DECODE_ERROR 109 918*7fd79137SRobert Mustacchi #define DW_DLE_DWARF_ABBREV_NULL 110 919*7fd79137SRobert Mustacchi #define DW_DLE_ATTR_NULL 111 920*7fd79137SRobert Mustacchi #define DW_DLE_DIE_BAD 112 921*7fd79137SRobert Mustacchi #define DW_DLE_DIE_ABBREV_BAD 113 922*7fd79137SRobert Mustacchi #define DW_DLE_ATTR_FORM_BAD 114 923*7fd79137SRobert Mustacchi #define DW_DLE_ATTR_NO_CU_CONTEXT 115 924*7fd79137SRobert Mustacchi #define DW_DLE_ATTR_FORM_SIZE_BAD 116 925*7fd79137SRobert Mustacchi #define DW_DLE_ATTR_DBG_NULL 117 926*7fd79137SRobert Mustacchi #define DW_DLE_BAD_REF_FORM 118 927*7fd79137SRobert Mustacchi #define DW_DLE_ATTR_FORM_OFFSET_BAD 119 928*7fd79137SRobert Mustacchi #define DW_DLE_LINE_OFFSET_BAD 120 929*7fd79137SRobert Mustacchi #define DW_DLE_DEBUG_STR_OFFSET_BAD 121 930*7fd79137SRobert Mustacchi #define DW_DLE_STRING_PTR_NULL 122 931*7fd79137SRobert Mustacchi #define DW_DLE_PUBNAMES_VERSION_ERROR 123 932*7fd79137SRobert Mustacchi #define DW_DLE_PUBNAMES_LENGTH_BAD 124 933*7fd79137SRobert Mustacchi #define DW_DLE_GLOBAL_NULL 125 934*7fd79137SRobert Mustacchi #define DW_DLE_GLOBAL_CONTEXT_NULL 126 935*7fd79137SRobert Mustacchi #define DW_DLE_DIR_INDEX_BAD 127 936*7fd79137SRobert Mustacchi #define DW_DLE_LOC_EXPR_BAD 128 937*7fd79137SRobert Mustacchi #define DW_DLE_DIE_LOC_EXPR_BAD 129 938*7fd79137SRobert Mustacchi #define DW_DLE_ADDR_ALLOC 130 939*7fd79137SRobert Mustacchi #define DW_DLE_OFFSET_BAD 131 940*7fd79137SRobert Mustacchi #define DW_DLE_MAKE_CU_CONTEXT_FAIL 132 941*7fd79137SRobert Mustacchi #define DW_DLE_REL_ALLOC 133 942*7fd79137SRobert Mustacchi #define DW_DLE_ARANGE_OFFSET_BAD 134 943*7fd79137SRobert Mustacchi #define DW_DLE_SEGMENT_SIZE_BAD 135 944*7fd79137SRobert Mustacchi #define DW_DLE_ARANGE_LENGTH_BAD 136 945*7fd79137SRobert Mustacchi #define DW_DLE_ARANGE_DECODE_ERROR 137 946*7fd79137SRobert Mustacchi #define DW_DLE_ARANGES_NULL 138 947*7fd79137SRobert Mustacchi #define DW_DLE_ARANGE_NULL 139 948*7fd79137SRobert Mustacchi #define DW_DLE_NO_FILE_NAME 140 949*7fd79137SRobert Mustacchi #define DW_DLE_NO_COMP_DIR 141 950*7fd79137SRobert Mustacchi #define DW_DLE_CU_ADDRESS_SIZE_BAD 142 951*7fd79137SRobert Mustacchi #define DW_DLE_INPUT_ATTR_BAD 143 952*7fd79137SRobert Mustacchi #define DW_DLE_EXPR_NULL 144 953*7fd79137SRobert Mustacchi #define DW_DLE_BAD_EXPR_OPCODE 145 954*7fd79137SRobert Mustacchi #define DW_DLE_EXPR_LENGTH_BAD 146 955*7fd79137SRobert Mustacchi #define DW_DLE_MULTIPLE_RELOC_IN_EXPR 147 956*7fd79137SRobert Mustacchi #define DW_DLE_ELF_GETIDENT_ERROR 148 957*7fd79137SRobert Mustacchi #define DW_DLE_NO_AT_MIPS_FDE 149 958*7fd79137SRobert Mustacchi #define DW_DLE_NO_CIE_FOR_FDE 150 959*7fd79137SRobert Mustacchi #define DW_DLE_DIE_ABBREV_LIST_NULL 151 960*7fd79137SRobert Mustacchi #define DW_DLE_DEBUG_FUNCNAMES_DUPLICATE 152 961*7fd79137SRobert Mustacchi #define DW_DLE_DEBUG_FUNCNAMES_NULL 153 962*7fd79137SRobert Mustacchi #define DW_DLE_DEBUG_FUNCNAMES_VERSION_ERROR 154 963*7fd79137SRobert Mustacchi #define DW_DLE_DEBUG_FUNCNAMES_LENGTH_BAD 155 964*7fd79137SRobert Mustacchi #define DW_DLE_FUNC_NULL 156 965*7fd79137SRobert Mustacchi #define DW_DLE_FUNC_CONTEXT_NULL 157 966*7fd79137SRobert Mustacchi #define DW_DLE_DEBUG_TYPENAMES_DUPLICATE 158 967*7fd79137SRobert Mustacchi #define DW_DLE_DEBUG_TYPENAMES_NULL 159 968*7fd79137SRobert Mustacchi #define DW_DLE_DEBUG_TYPENAMES_VERSION_ERROR 160 969*7fd79137SRobert Mustacchi #define DW_DLE_DEBUG_TYPENAMES_LENGTH_BAD 161 970*7fd79137SRobert Mustacchi #define DW_DLE_TYPE_NULL 162 971*7fd79137SRobert Mustacchi #define DW_DLE_TYPE_CONTEXT_NULL 163 972*7fd79137SRobert Mustacchi #define DW_DLE_DEBUG_VARNAMES_DUPLICATE 164 973*7fd79137SRobert Mustacchi #define DW_DLE_DEBUG_VARNAMES_NULL 165 974*7fd79137SRobert Mustacchi #define DW_DLE_DEBUG_VARNAMES_VERSION_ERROR 166 975*7fd79137SRobert Mustacchi #define DW_DLE_DEBUG_VARNAMES_LENGTH_BAD 167 976*7fd79137SRobert Mustacchi #define DW_DLE_VAR_NULL 168 977*7fd79137SRobert Mustacchi #define DW_DLE_VAR_CONTEXT_NULL 169 978*7fd79137SRobert Mustacchi #define DW_DLE_DEBUG_WEAKNAMES_DUPLICATE 170 979*7fd79137SRobert Mustacchi #define DW_DLE_DEBUG_WEAKNAMES_NULL 171 980*7fd79137SRobert Mustacchi #define DW_DLE_DEBUG_WEAKNAMES_VERSION_ERROR 172 981*7fd79137SRobert Mustacchi #define DW_DLE_DEBUG_WEAKNAMES_LENGTH_BAD 173 982*7fd79137SRobert Mustacchi #define DW_DLE_WEAK_NULL 174 983*7fd79137SRobert Mustacchi #define DW_DLE_WEAK_CONTEXT_NULL 175 984*7fd79137SRobert Mustacchi #define DW_DLE_LOCDESC_COUNT_WRONG 176 985*7fd79137SRobert Mustacchi #define DW_DLE_MACINFO_STRING_NULL 177 986*7fd79137SRobert Mustacchi #define DW_DLE_MACINFO_STRING_EMPTY 178 987*7fd79137SRobert Mustacchi #define DW_DLE_MACINFO_INTERNAL_ERROR_SPACE 179 988*7fd79137SRobert Mustacchi #define DW_DLE_MACINFO_MALLOC_FAIL 180 989*7fd79137SRobert Mustacchi #define DW_DLE_DEBUGMACINFO_ERROR 181 990*7fd79137SRobert Mustacchi #define DW_DLE_DEBUG_MACRO_LENGTH_BAD 182 991*7fd79137SRobert Mustacchi #define DW_DLE_DEBUG_MACRO_MAX_BAD 183 992*7fd79137SRobert Mustacchi #define DW_DLE_DEBUG_MACRO_INTERNAL_ERR 184 993*7fd79137SRobert Mustacchi #define DW_DLE_DEBUG_MACRO_MALLOC_SPACE 185 994*7fd79137SRobert Mustacchi #define DW_DLE_DEBUG_MACRO_INCONSISTENT 186 995*7fd79137SRobert Mustacchi #define DW_DLE_DF_NO_CIE_AUGMENTATION 187 996*7fd79137SRobert Mustacchi #define DW_DLE_DF_REG_NUM_TOO_HIGH 188 997*7fd79137SRobert Mustacchi #define DW_DLE_DF_MAKE_INSTR_NO_INIT 189 998*7fd79137SRobert Mustacchi #define DW_DLE_DF_NEW_LOC_LESS_OLD_LOC 190 999*7fd79137SRobert Mustacchi #define DW_DLE_DF_POP_EMPTY_STACK 191 1000*7fd79137SRobert Mustacchi #define DW_DLE_DF_ALLOC_FAIL 192 1001*7fd79137SRobert Mustacchi #define DW_DLE_DF_FRAME_DECODING_ERROR 193 1002*7fd79137SRobert Mustacchi #define DW_DLE_DEBUG_LOC_SECTION_SHORT 194 1003*7fd79137SRobert Mustacchi #define DW_DLE_FRAME_AUGMENTATION_UNKNOWN 195 1004*7fd79137SRobert Mustacchi #define DW_DLE_PUBTYPE_CONTEXT 196 /* Unused. */ 1005*7fd79137SRobert Mustacchi #define DW_DLE_DEBUG_PUBTYPES_LENGTH_BAD 197 1006*7fd79137SRobert Mustacchi #define DW_DLE_DEBUG_PUBTYPES_VERSION_ERROR 198 1007*7fd79137SRobert Mustacchi #define DW_DLE_DEBUG_PUBTYPES_DUPLICATE 199 1008*7fd79137SRobert Mustacchi #define DW_DLE_FRAME_CIE_DECODE_ERROR 200 1009*7fd79137SRobert Mustacchi #define DW_DLE_FRAME_REGISTER_UNREPRESENTABLE 201 1010*7fd79137SRobert Mustacchi #define DW_DLE_FRAME_REGISTER_COUNT_MISMATCH 202 1011*7fd79137SRobert Mustacchi #define DW_DLE_LINK_LOOP 203 1012*7fd79137SRobert Mustacchi #define DW_DLE_STRP_OFFSET_BAD 204 1013*7fd79137SRobert Mustacchi #define DW_DLE_DEBUG_RANGES_DUPLICATE 205 1014*7fd79137SRobert Mustacchi #define DW_DLE_DEBUG_RANGES_OFFSET_BAD 206 1015*7fd79137SRobert Mustacchi #define DW_DLE_DEBUG_RANGES_MISSING_END 207 1016*7fd79137SRobert Mustacchi #define DW_DLE_DEBUG_RANGES_OUT_OF_MEM 208 1017*7fd79137SRobert Mustacchi #define DW_DLE_DEBUG_SYMTAB_ERR 209 1018*7fd79137SRobert Mustacchi #define DW_DLE_DEBUG_STRTAB_ERR 210 1019*7fd79137SRobert Mustacchi #define DW_DLE_RELOC_MISMATCH_INDEX 211 1020*7fd79137SRobert Mustacchi #define DW_DLE_RELOC_MISMATCH_RELOC_INDEX 212 1021*7fd79137SRobert Mustacchi #define DW_DLE_RELOC_MISMATCH_STRTAB_INDEX 213 1022*7fd79137SRobert Mustacchi #define DW_DLE_RELOC_SECTION_MISMATCH 214 1023*7fd79137SRobert Mustacchi #define DW_DLE_RELOC_SECTION_MISSING_INDEX 215 1024*7fd79137SRobert Mustacchi #define DW_DLE_RELOC_SECTION_LENGTH_ODD 216 1025*7fd79137SRobert Mustacchi #define DW_DLE_RELOC_SECTION_PTR_NULL 217 1026*7fd79137SRobert Mustacchi #define DW_DLE_RELOC_SECTION_MALLOC_FAIL 218 1027*7fd79137SRobert Mustacchi #define DW_DLE_NO_ELF64_SUPPORT 219 1028*7fd79137SRobert Mustacchi #define DW_DLE_MISSING_ELF64_SUPPORT 220 1029*7fd79137SRobert Mustacchi #define DW_DLE_ORPHAN_FDE 221 1030*7fd79137SRobert Mustacchi #define DW_DLE_DUPLICATE_INST_BLOCK 222 1031*7fd79137SRobert Mustacchi #define DW_DLE_BAD_REF_SIG8_FORM 223 1032*7fd79137SRobert Mustacchi #define DW_DLE_ATTR_EXPRLOC_FORM_BAD 224 1033*7fd79137SRobert Mustacchi #define DW_DLE_FORM_SEC_OFFSET_LENGTH_BAD 225 1034*7fd79137SRobert Mustacchi #define DW_DLE_NOT_REF_FORM 226 1035*7fd79137SRobert Mustacchi #define DW_DLE_DEBUG_FRAME_LENGTH_NOT_MULTIPLE 227 1036*7fd79137SRobert Mustacchi 1037*7fd79137SRobert Mustacchi 1038*7fd79137SRobert Mustacchi 1039*7fd79137SRobert Mustacchi /* DW_DLE_LAST MUST EQUAL LAST ERROR NUMBER */ 1040*7fd79137SRobert Mustacchi #define DW_DLE_LAST 227 1041*7fd79137SRobert Mustacchi #define DW_DLE_LO_USER 0x10000 1042*7fd79137SRobert Mustacchi 1043*7fd79137SRobert Mustacchi /* Taken as meaning 'undefined value', this is not 1044*7fd79137SRobert Mustacchi a column or register number. 1045*7fd79137SRobert Mustacchi Only present at libdwarf runtime. Never on disk. 1046*7fd79137SRobert Mustacchi DW_FRAME_* Values present on disk are in dwarf.h 1047*7fd79137SRobert Mustacchi */ 1048*7fd79137SRobert Mustacchi #define DW_FRAME_UNDEFINED_VAL 1034 1049*7fd79137SRobert Mustacchi 1050*7fd79137SRobert Mustacchi /* Taken as meaning 'same value' as caller had, not a column 1051*7fd79137SRobert Mustacchi or register number 1052*7fd79137SRobert Mustacchi Only present at libdwarf runtime. Never on disk. 1053*7fd79137SRobert Mustacchi DW_FRAME_* Values present on disk are in dwarf.h 1054*7fd79137SRobert Mustacchi */ 1055*7fd79137SRobert Mustacchi #define DW_FRAME_SAME_VAL 1035 1056*7fd79137SRobert Mustacchi 1057*7fd79137SRobert Mustacchi 1058*7fd79137SRobert Mustacchi 1059*7fd79137SRobert Mustacchi /* error return values 1060*7fd79137SRobert Mustacchi */ 1061*7fd79137SRobert Mustacchi #define DW_DLV_BADADDR (~(Dwarf_Addr)0) 1062*7fd79137SRobert Mustacchi /* for functions returning target address */ 1063*7fd79137SRobert Mustacchi 1064*7fd79137SRobert Mustacchi #define DW_DLV_NOCOUNT ((Dwarf_Signed)-1) 1065*7fd79137SRobert Mustacchi /* for functions returning count */ 1066*7fd79137SRobert Mustacchi 1067*7fd79137SRobert Mustacchi #define DW_DLV_BADOFFSET (~(Dwarf_Off)0) 1068*7fd79137SRobert Mustacchi /* for functions returning offset */ 1069*7fd79137SRobert Mustacchi 1070*7fd79137SRobert Mustacchi /* standard return values for functions */ 1071*7fd79137SRobert Mustacchi #define DW_DLV_NO_ENTRY -1 1072*7fd79137SRobert Mustacchi #define DW_DLV_OK 0 1073*7fd79137SRobert Mustacchi #define DW_DLV_ERROR 1 1074*7fd79137SRobert Mustacchi 1075*7fd79137SRobert Mustacchi /* Special values for offset_into_exception_table field of dwarf fde's. */ 1076*7fd79137SRobert Mustacchi /* The following value indicates that there is no Exception table offset 1077*7fd79137SRobert Mustacchi associated with a dwarf frame. */ 1078*7fd79137SRobert Mustacchi #define DW_DLX_NO_EH_OFFSET (-1LL) 1079*7fd79137SRobert Mustacchi /* The following value indicates that the producer was unable to analyse the 1080*7fd79137SRobert Mustacchi source file to generate Exception tables for this function. */ 1081*7fd79137SRobert Mustacchi #define DW_DLX_EH_OFFSET_UNAVAILABLE (-2LL) 1082*7fd79137SRobert Mustacchi 1083*7fd79137SRobert Mustacchi 1084*7fd79137SRobert Mustacchi /*===========================================================================*/ 1085*7fd79137SRobert Mustacchi /* Dwarf consumer interface initialization and termination operations */ 1086*7fd79137SRobert Mustacchi 1087*7fd79137SRobert Mustacchi /* Initialization based on Unix open fd (using libelf internally). */ 1088*7fd79137SRobert Mustacchi int dwarf_init(int /*fd*/, 1089*7fd79137SRobert Mustacchi Dwarf_Unsigned /*access*/, 1090*7fd79137SRobert Mustacchi Dwarf_Handler /*errhand*/, 1091*7fd79137SRobert Mustacchi Dwarf_Ptr /*errarg*/, 1092*7fd79137SRobert Mustacchi Dwarf_Debug* /*dbg*/, 1093*7fd79137SRobert Mustacchi Dwarf_Error* /*error*/); 1094*7fd79137SRobert Mustacchi 1095*7fd79137SRobert Mustacchi /* Initialization based on libelf/sgi-fastlibelf open pointer. */ 1096*7fd79137SRobert Mustacchi int dwarf_elf_init(dwarf_elf_handle /*elf*/, 1097*7fd79137SRobert Mustacchi Dwarf_Unsigned /*access*/, 1098*7fd79137SRobert Mustacchi Dwarf_Handler /*errhand*/, 1099*7fd79137SRobert Mustacchi Dwarf_Ptr /*errarg*/, 1100*7fd79137SRobert Mustacchi Dwarf_Debug* /*dbg*/, 1101*7fd79137SRobert Mustacchi Dwarf_Error* /*error*/); 1102*7fd79137SRobert Mustacchi 1103*7fd79137SRobert Mustacchi /* Undocumented function for memory allocator. */ 1104*7fd79137SRobert Mustacchi void dwarf_print_memory_stats(Dwarf_Debug /*dbg*/); 1105*7fd79137SRobert Mustacchi 1106*7fd79137SRobert Mustacchi int dwarf_get_elf(Dwarf_Debug /*dbg*/, 1107*7fd79137SRobert Mustacchi dwarf_elf_handle* /*return_elfptr*/, 1108*7fd79137SRobert Mustacchi Dwarf_Error* /*error*/); 1109*7fd79137SRobert Mustacchi 1110*7fd79137SRobert Mustacchi int dwarf_finish(Dwarf_Debug /*dbg*/, Dwarf_Error* /*error*/); 1111*7fd79137SRobert Mustacchi 1112*7fd79137SRobert Mustacchi 1113*7fd79137SRobert Mustacchi int dwarf_object_init(Dwarf_Obj_Access_Interface* /* obj */, 1114*7fd79137SRobert Mustacchi Dwarf_Handler /* errhand */, 1115*7fd79137SRobert Mustacchi Dwarf_Ptr /* errarg */, 1116*7fd79137SRobert Mustacchi Dwarf_Debug* /* dbg */, 1117*7fd79137SRobert Mustacchi Dwarf_Error* /* error */); 1118*7fd79137SRobert Mustacchi 1119*7fd79137SRobert Mustacchi int dwarf_object_finish(Dwarf_Debug /* dbg */, 1120*7fd79137SRobert Mustacchi Dwarf_Error* /* error */); 1121*7fd79137SRobert Mustacchi 1122*7fd79137SRobert Mustacchi /* die traversal operations */ 1123*7fd79137SRobert Mustacchi int dwarf_next_cu_header_b(Dwarf_Debug /*dbg*/, 1124*7fd79137SRobert Mustacchi Dwarf_Unsigned* /*cu_header_length*/, 1125*7fd79137SRobert Mustacchi Dwarf_Half* /*version_stamp*/, 1126*7fd79137SRobert Mustacchi Dwarf_Off* /*abbrev_offset*/, 1127*7fd79137SRobert Mustacchi Dwarf_Half* /*address_size*/, 1128*7fd79137SRobert Mustacchi Dwarf_Half* /*length_size*/, 1129*7fd79137SRobert Mustacchi Dwarf_Half* /*extension_size*/, 1130*7fd79137SRobert Mustacchi Dwarf_Unsigned* /*next_cu_header_offset*/, 1131*7fd79137SRobert Mustacchi Dwarf_Error* /*error*/); 1132*7fd79137SRobert Mustacchi /* The following is now obsolete, though supported. November 2009. */ 1133*7fd79137SRobert Mustacchi int dwarf_next_cu_header(Dwarf_Debug /*dbg*/, 1134*7fd79137SRobert Mustacchi Dwarf_Unsigned* /*cu_header_length*/, 1135*7fd79137SRobert Mustacchi Dwarf_Half* /*version_stamp*/, 1136*7fd79137SRobert Mustacchi Dwarf_Off* /*abbrev_offset*/, 1137*7fd79137SRobert Mustacchi Dwarf_Half* /*address_size*/, 1138*7fd79137SRobert Mustacchi Dwarf_Unsigned* /*next_cu_header_offset*/, 1139*7fd79137SRobert Mustacchi Dwarf_Error* /*error*/); 1140*7fd79137SRobert Mustacchi 1141*7fd79137SRobert Mustacchi int dwarf_siblingof(Dwarf_Debug /*dbg*/, 1142*7fd79137SRobert Mustacchi Dwarf_Die /*die*/, 1143*7fd79137SRobert Mustacchi Dwarf_Die* /*return_siblingdie*/, 1144*7fd79137SRobert Mustacchi Dwarf_Error* /*error*/); 1145*7fd79137SRobert Mustacchi 1146*7fd79137SRobert Mustacchi int dwarf_child(Dwarf_Die /*die*/, 1147*7fd79137SRobert Mustacchi Dwarf_Die* /*return_childdie*/, 1148*7fd79137SRobert Mustacchi Dwarf_Error* /*error*/); 1149*7fd79137SRobert Mustacchi 1150*7fd79137SRobert Mustacchi /* Finding die given global (not CU-relative) offset */ 1151*7fd79137SRobert Mustacchi int dwarf_offdie(Dwarf_Debug /*dbg*/, 1152*7fd79137SRobert Mustacchi Dwarf_Off /*offset*/, 1153*7fd79137SRobert Mustacchi Dwarf_Die* /*return_die*/, 1154*7fd79137SRobert Mustacchi Dwarf_Error* /*error*/); 1155*7fd79137SRobert Mustacchi 1156*7fd79137SRobert Mustacchi /* Higher level functions (Unimplemented) */ 1157*7fd79137SRobert Mustacchi int dwarf_pcfile(Dwarf_Debug /*dbg*/, 1158*7fd79137SRobert Mustacchi Dwarf_Addr /*pc*/, 1159*7fd79137SRobert Mustacchi Dwarf_Die* /*return_die*/, 1160*7fd79137SRobert Mustacchi Dwarf_Error* /*error*/); 1161*7fd79137SRobert Mustacchi 1162*7fd79137SRobert Mustacchi /* Unimplemented */ 1163*7fd79137SRobert Mustacchi int dwarf_pcsubr(Dwarf_Debug /*dbg*/, 1164*7fd79137SRobert Mustacchi Dwarf_Addr /*pc*/, 1165*7fd79137SRobert Mustacchi Dwarf_Die* /*return_die*/, 1166*7fd79137SRobert Mustacchi Dwarf_Error* /*error*/); 1167*7fd79137SRobert Mustacchi 1168*7fd79137SRobert Mustacchi /* Unimplemented */ 1169*7fd79137SRobert Mustacchi int dwarf_pcscope(Dwarf_Debug /*dbg*/, 1170*7fd79137SRobert Mustacchi Dwarf_Addr /*pc*/, 1171*7fd79137SRobert Mustacchi Dwarf_Die* /*return_die*/, 1172*7fd79137SRobert Mustacchi Dwarf_Error* /*error*/); 1173*7fd79137SRobert Mustacchi 1174*7fd79137SRobert Mustacchi /* operations on DIEs */ 1175*7fd79137SRobert Mustacchi int dwarf_tag(Dwarf_Die /*die*/, 1176*7fd79137SRobert Mustacchi Dwarf_Half* /*return_tag*/, 1177*7fd79137SRobert Mustacchi Dwarf_Error* /*error*/); 1178*7fd79137SRobert Mustacchi 1179*7fd79137SRobert Mustacchi /* utility? */ 1180*7fd79137SRobert Mustacchi /* dwarf_dieoffset returns the global debug_info 1181*7fd79137SRobert Mustacchi section offset, not the CU relative offset. */ 1182*7fd79137SRobert Mustacchi int dwarf_dieoffset(Dwarf_Die /*die*/, 1183*7fd79137SRobert Mustacchi Dwarf_Off* /*return_offset*/, 1184*7fd79137SRobert Mustacchi Dwarf_Error* /*error*/); 1185*7fd79137SRobert Mustacchi 1186*7fd79137SRobert Mustacchi /* dwarf_CU_dieoffset_given_die returns 1187*7fd79137SRobert Mustacchi the global debug_info section offset of the CU die 1188*7fd79137SRobert Mustacchi that is the CU containing the given_die 1189*7fd79137SRobert Mustacchi (the passed in DIE can be any DIE). 1190*7fd79137SRobert Mustacchi This information makes it possible for a consumer to 1191*7fd79137SRobert Mustacchi find and print CU context information for any die. 1192*7fd79137SRobert Mustacchi See also dwarf_get_cu_die_offset_given_cu_header_offset(). */ 1193*7fd79137SRobert Mustacchi int dwarf_CU_dieoffset_given_die(Dwarf_Die /*given_die*/, 1194*7fd79137SRobert Mustacchi Dwarf_Off* /*return_offset*/, 1195*7fd79137SRobert Mustacchi Dwarf_Error* /*error*/); 1196*7fd79137SRobert Mustacchi 1197*7fd79137SRobert Mustacchi /* dwarf_die_CU_offset returns the CU relative offset 1198*7fd79137SRobert Mustacchi not the global debug_info section offset, given 1199*7fd79137SRobert Mustacchi any DIE in the CU. See also dwarf_CU_dieoffset_given_die(). 1200*7fd79137SRobert Mustacchi */ 1201*7fd79137SRobert Mustacchi int dwarf_die_CU_offset(Dwarf_Die /*die*/, 1202*7fd79137SRobert Mustacchi Dwarf_Off* /*return_offset*/, 1203*7fd79137SRobert Mustacchi Dwarf_Error* /*error*/); 1204*7fd79137SRobert Mustacchi 1205*7fd79137SRobert Mustacchi int dwarf_die_CU_offset_range(Dwarf_Die /*die*/, 1206*7fd79137SRobert Mustacchi Dwarf_Off* /*return_CU_header_offset*/, 1207*7fd79137SRobert Mustacchi Dwarf_Off* /*return_CU_length_bytes*/, 1208*7fd79137SRobert Mustacchi Dwarf_Error* /*error*/); 1209*7fd79137SRobert Mustacchi 1210*7fd79137SRobert Mustacchi int dwarf_attr (Dwarf_Die /*die*/, 1211*7fd79137SRobert Mustacchi Dwarf_Half /*attr*/, 1212*7fd79137SRobert Mustacchi Dwarf_Attribute * /*returned_attr*/, 1213*7fd79137SRobert Mustacchi Dwarf_Error* /*error*/); 1214*7fd79137SRobert Mustacchi 1215*7fd79137SRobert Mustacchi int dwarf_diename(Dwarf_Die /*die*/, 1216*7fd79137SRobert Mustacchi char ** /*diename*/, 1217*7fd79137SRobert Mustacchi Dwarf_Error* /*error*/); 1218*7fd79137SRobert Mustacchi 1219*7fd79137SRobert Mustacchi /* Returns the abbrev code of the die. Cannot fail. */ 1220*7fd79137SRobert Mustacchi int dwarf_die_abbrev_code(Dwarf_Die /*die */); 1221*7fd79137SRobert Mustacchi 1222*7fd79137SRobert Mustacchi 1223*7fd79137SRobert Mustacchi /* convenience functions, alternative to using dwarf_attrlist() */ 1224*7fd79137SRobert Mustacchi int dwarf_hasattr(Dwarf_Die /*die*/, 1225*7fd79137SRobert Mustacchi Dwarf_Half /*attr*/, 1226*7fd79137SRobert Mustacchi Dwarf_Bool * /*returned_bool*/, 1227*7fd79137SRobert Mustacchi Dwarf_Error* /*error*/); 1228*7fd79137SRobert Mustacchi 1229*7fd79137SRobert Mustacchi /* dwarf_loclist_n preferred over dwarf_loclist */ 1230*7fd79137SRobert Mustacchi int dwarf_loclist_n(Dwarf_Attribute /*attr*/, 1231*7fd79137SRobert Mustacchi Dwarf_Locdesc*** /*llbuf*/, 1232*7fd79137SRobert Mustacchi Dwarf_Signed * /*locCount*/, 1233*7fd79137SRobert Mustacchi Dwarf_Error* /*error*/); 1234*7fd79137SRobert Mustacchi 1235*7fd79137SRobert Mustacchi int dwarf_loclist(Dwarf_Attribute /*attr*/, /* inflexible! */ 1236*7fd79137SRobert Mustacchi Dwarf_Locdesc** /*llbuf*/, 1237*7fd79137SRobert Mustacchi Dwarf_Signed * /*locCount*/, 1238*7fd79137SRobert Mustacchi Dwarf_Error* /*error*/); 1239*7fd79137SRobert Mustacchi 1240*7fd79137SRobert Mustacchi /* Extracts a dwarf expression from an expression byte stream. 1241*7fd79137SRobert Mustacchi Useful to get expressions from DW_CFA_def_cfa_expression 1242*7fd79137SRobert Mustacchi DW_CFA_expression DW_CFA_val_expression expression bytes. 1243*7fd79137SRobert Mustacchi 27 April 2009: dwarf_loclist_from_expr() interface with 1244*7fd79137SRobert Mustacchi no addr_size is obsolete but supported, 1245*7fd79137SRobert Mustacchi use dwarf_loclist_from_expr_a() instead. 1246*7fd79137SRobert Mustacchi */ 1247*7fd79137SRobert Mustacchi int dwarf_loclist_from_expr(Dwarf_Debug dbg, 1248*7fd79137SRobert Mustacchi Dwarf_Ptr expression_in, 1249*7fd79137SRobert Mustacchi Dwarf_Unsigned expression_length, 1250*7fd79137SRobert Mustacchi Dwarf_Locdesc ** llbuf, 1251*7fd79137SRobert Mustacchi Dwarf_Signed * listlen, Dwarf_Error * error); 1252*7fd79137SRobert Mustacchi 1253*7fd79137SRobert Mustacchi /* dwarf_loclist_from_expr_a() new 27 Apr 2009: added addr_size argument. */ 1254*7fd79137SRobert Mustacchi int dwarf_loclist_from_expr_a(Dwarf_Debug dbg, 1255*7fd79137SRobert Mustacchi Dwarf_Ptr expression_in, 1256*7fd79137SRobert Mustacchi Dwarf_Unsigned expression_length, 1257*7fd79137SRobert Mustacchi Dwarf_Half addr_size, 1258*7fd79137SRobert Mustacchi Dwarf_Locdesc ** llbuf, 1259*7fd79137SRobert Mustacchi Dwarf_Signed * listlen, Dwarf_Error * error); 1260*7fd79137SRobert Mustacchi 1261*7fd79137SRobert Mustacchi /* Unimplemented */ 1262*7fd79137SRobert Mustacchi int dwarf_stringlen(Dwarf_Die /*die*/, 1263*7fd79137SRobert Mustacchi Dwarf_Locdesc ** /*returned_locdesc*/, 1264*7fd79137SRobert Mustacchi Dwarf_Error* /*error*/); 1265*7fd79137SRobert Mustacchi 1266*7fd79137SRobert Mustacchi /* Unimplemented */ 1267*7fd79137SRobert Mustacchi int dwarf_subscrcnt(Dwarf_Die /*die*/, 1268*7fd79137SRobert Mustacchi Dwarf_Signed * /*returned_count*/, 1269*7fd79137SRobert Mustacchi Dwarf_Error* /*error*/); 1270*7fd79137SRobert Mustacchi 1271*7fd79137SRobert Mustacchi /* Unimplemented */ 1272*7fd79137SRobert Mustacchi int dwarf_nthsubscr(Dwarf_Die /*die*/, 1273*7fd79137SRobert Mustacchi Dwarf_Unsigned /*ssndx*/, 1274*7fd79137SRobert Mustacchi Dwarf_Die * /*returned_die*/, 1275*7fd79137SRobert Mustacchi Dwarf_Error* /*error*/); 1276*7fd79137SRobert Mustacchi 1277*7fd79137SRobert Mustacchi int dwarf_lowpc(Dwarf_Die /*die*/, 1278*7fd79137SRobert Mustacchi Dwarf_Addr * /*returned_addr*/, 1279*7fd79137SRobert Mustacchi Dwarf_Error* /*error*/); 1280*7fd79137SRobert Mustacchi 1281*7fd79137SRobert Mustacchi int dwarf_highpc(Dwarf_Die /*die*/, 1282*7fd79137SRobert Mustacchi Dwarf_Addr * /*returned_addr*/, 1283*7fd79137SRobert Mustacchi Dwarf_Error* /*error*/); 1284*7fd79137SRobert Mustacchi 1285*7fd79137SRobert Mustacchi int dwarf_bytesize(Dwarf_Die /*die*/, 1286*7fd79137SRobert Mustacchi Dwarf_Unsigned * /*returned_size*/, 1287*7fd79137SRobert Mustacchi Dwarf_Error* /*error*/); 1288*7fd79137SRobert Mustacchi 1289*7fd79137SRobert Mustacchi /* Unimplemented */ 1290*7fd79137SRobert Mustacchi int dwarf_isbitfield(Dwarf_Die /*die*/, 1291*7fd79137SRobert Mustacchi Dwarf_Bool * /*returned_bool*/, 1292*7fd79137SRobert Mustacchi Dwarf_Error* /*error*/); 1293*7fd79137SRobert Mustacchi 1294*7fd79137SRobert Mustacchi int dwarf_bitsize(Dwarf_Die /*die*/, 1295*7fd79137SRobert Mustacchi Dwarf_Unsigned * /*returned_size*/, 1296*7fd79137SRobert Mustacchi Dwarf_Error* /*error*/); 1297*7fd79137SRobert Mustacchi 1298*7fd79137SRobert Mustacchi int dwarf_bitoffset(Dwarf_Die /*die*/, 1299*7fd79137SRobert Mustacchi Dwarf_Unsigned * /*returned_offset*/, 1300*7fd79137SRobert Mustacchi Dwarf_Error* /*error*/); 1301*7fd79137SRobert Mustacchi 1302*7fd79137SRobert Mustacchi int dwarf_srclang(Dwarf_Die /*die*/, 1303*7fd79137SRobert Mustacchi Dwarf_Unsigned * /*returned_lang*/, 1304*7fd79137SRobert Mustacchi Dwarf_Error* /*error*/); 1305*7fd79137SRobert Mustacchi 1306*7fd79137SRobert Mustacchi int dwarf_arrayorder(Dwarf_Die /*die*/, 1307*7fd79137SRobert Mustacchi Dwarf_Unsigned * /*returned_order*/, 1308*7fd79137SRobert Mustacchi Dwarf_Error* /*error*/); 1309*7fd79137SRobert Mustacchi 1310*7fd79137SRobert Mustacchi /* end of convenience function list */ 1311*7fd79137SRobert Mustacchi 1312*7fd79137SRobert Mustacchi /* this is the main interface to attributes of a DIE */ 1313*7fd79137SRobert Mustacchi int dwarf_attrlist(Dwarf_Die /*die*/, 1314*7fd79137SRobert Mustacchi Dwarf_Attribute** /*attrbuf*/, 1315*7fd79137SRobert Mustacchi Dwarf_Signed * /*attrcount*/, 1316*7fd79137SRobert Mustacchi Dwarf_Error* /*error*/); 1317*7fd79137SRobert Mustacchi 1318*7fd79137SRobert Mustacchi /* query operations for attributes */ 1319*7fd79137SRobert Mustacchi int dwarf_hasform(Dwarf_Attribute /*attr*/, 1320*7fd79137SRobert Mustacchi Dwarf_Half /*form*/, 1321*7fd79137SRobert Mustacchi Dwarf_Bool * /*returned_bool*/, 1322*7fd79137SRobert Mustacchi Dwarf_Error* /*error*/); 1323*7fd79137SRobert Mustacchi 1324*7fd79137SRobert Mustacchi int dwarf_whatform(Dwarf_Attribute /*attr*/, 1325*7fd79137SRobert Mustacchi Dwarf_Half * /*returned_form*/, 1326*7fd79137SRobert Mustacchi Dwarf_Error* /*error*/); 1327*7fd79137SRobert Mustacchi 1328*7fd79137SRobert Mustacchi int dwarf_whatform_direct(Dwarf_Attribute /*attr*/, 1329*7fd79137SRobert Mustacchi Dwarf_Half * /*returned_form*/, 1330*7fd79137SRobert Mustacchi Dwarf_Error* /*error*/); 1331*7fd79137SRobert Mustacchi 1332*7fd79137SRobert Mustacchi int dwarf_whatattr(Dwarf_Attribute /*attr*/, 1333*7fd79137SRobert Mustacchi Dwarf_Half * /*returned_attr_num*/, 1334*7fd79137SRobert Mustacchi Dwarf_Error* /*error*/); 1335*7fd79137SRobert Mustacchi 1336*7fd79137SRobert Mustacchi /* 1337*7fd79137SRobert Mustacchi The following are concerned with the Primary Interface: getting 1338*7fd79137SRobert Mustacchi the actual data values. One function per 'kind' of FORM. 1339*7fd79137SRobert Mustacchi */ 1340*7fd79137SRobert Mustacchi /* dwarf_formref returns, thru return_offset, a CU-relative offset 1341*7fd79137SRobert Mustacchi and does not allow DW_FORM_ref_addr*/ 1342*7fd79137SRobert Mustacchi int dwarf_formref(Dwarf_Attribute /*attr*/, 1343*7fd79137SRobert Mustacchi Dwarf_Off* /*return_offset*/, 1344*7fd79137SRobert Mustacchi Dwarf_Error* /*error*/); 1345*7fd79137SRobert Mustacchi /* dwarf_global_formref returns, thru return_offset, 1346*7fd79137SRobert Mustacchi a debug_info-relative offset and does allow all reference forms*/ 1347*7fd79137SRobert Mustacchi int dwarf_global_formref(Dwarf_Attribute /*attr*/, 1348*7fd79137SRobert Mustacchi Dwarf_Off* /*return_offset*/, 1349*7fd79137SRobert Mustacchi Dwarf_Error* /*error*/); 1350*7fd79137SRobert Mustacchi 1351*7fd79137SRobert Mustacchi /* dwarf_formsig8 returns in the caller-provided 8 byte area 1352*7fd79137SRobert Mustacchi the 8 bytes of a DW_FORM_ref_sig8. Not a string. */ 1353*7fd79137SRobert Mustacchi int dwarf_formsig8(Dwarf_Attribute /*attr*/, 1354*7fd79137SRobert Mustacchi Dwarf_Sig8 * /*returned sig bytes*/, 1355*7fd79137SRobert Mustacchi Dwarf_Error* /*error*/); 1356*7fd79137SRobert Mustacchi 1357*7fd79137SRobert Mustacchi int dwarf_formaddr(Dwarf_Attribute /*attr*/, 1358*7fd79137SRobert Mustacchi Dwarf_Addr * /*returned_addr*/, 1359*7fd79137SRobert Mustacchi Dwarf_Error* /*error*/); 1360*7fd79137SRobert Mustacchi 1361*7fd79137SRobert Mustacchi int dwarf_formflag(Dwarf_Attribute /*attr*/, 1362*7fd79137SRobert Mustacchi Dwarf_Bool * /*returned_bool*/, 1363*7fd79137SRobert Mustacchi Dwarf_Error* /*error*/); 1364*7fd79137SRobert Mustacchi 1365*7fd79137SRobert Mustacchi int dwarf_formudata(Dwarf_Attribute /*attr*/, 1366*7fd79137SRobert Mustacchi Dwarf_Unsigned * /*returned_val*/, 1367*7fd79137SRobert Mustacchi Dwarf_Error* /*error*/); 1368*7fd79137SRobert Mustacchi 1369*7fd79137SRobert Mustacchi int dwarf_formsdata(Dwarf_Attribute /*attr*/, 1370*7fd79137SRobert Mustacchi Dwarf_Signed * /*returned_val*/, 1371*7fd79137SRobert Mustacchi Dwarf_Error* /*error*/); 1372*7fd79137SRobert Mustacchi 1373*7fd79137SRobert Mustacchi int dwarf_formblock(Dwarf_Attribute /*attr*/, 1374*7fd79137SRobert Mustacchi Dwarf_Block ** /*returned_block*/, 1375*7fd79137SRobert Mustacchi Dwarf_Error* /*error*/); 1376*7fd79137SRobert Mustacchi 1377*7fd79137SRobert Mustacchi int dwarf_formstring(Dwarf_Attribute /*attr*/, 1378*7fd79137SRobert Mustacchi char ** /*returned_string*/, 1379*7fd79137SRobert Mustacchi Dwarf_Error* /*error*/); 1380*7fd79137SRobert Mustacchi 1381*7fd79137SRobert Mustacchi int dwarf_formexprloc(Dwarf_Attribute /*attr*/, 1382*7fd79137SRobert Mustacchi Dwarf_Unsigned * /*return_exprlen*/, 1383*7fd79137SRobert Mustacchi Dwarf_Ptr * /*block_ptr*/, 1384*7fd79137SRobert Mustacchi Dwarf_Error * /*error*/); 1385*7fd79137SRobert Mustacchi 1386*7fd79137SRobert Mustacchi 1387*7fd79137SRobert Mustacchi /* end attribute query operations. */ 1388*7fd79137SRobert Mustacchi 1389*7fd79137SRobert Mustacchi /* line number operations */ 1390*7fd79137SRobert Mustacchi /* dwarf_srclines is the normal interface */ 1391*7fd79137SRobert Mustacchi int dwarf_srclines(Dwarf_Die /*die*/, 1392*7fd79137SRobert Mustacchi Dwarf_Line** /*linebuf*/, 1393*7fd79137SRobert Mustacchi Dwarf_Signed * /*linecount*/, 1394*7fd79137SRobert Mustacchi Dwarf_Error* /*error*/); 1395*7fd79137SRobert Mustacchi 1396*7fd79137SRobert Mustacchi /* dwarf_srclines_dealloc, created July 2005, is the new 1397*7fd79137SRobert Mustacchi method for deallocating what dwarf_srclines returns. 1398*7fd79137SRobert Mustacchi More complete free than using dwarf_dealloc directly. */ 1399*7fd79137SRobert Mustacchi void dwarf_srclines_dealloc(Dwarf_Debug /*dbg*/, 1400*7fd79137SRobert Mustacchi Dwarf_Line* /*linebuf*/, 1401*7fd79137SRobert Mustacchi Dwarf_Signed /*count */); 1402*7fd79137SRobert Mustacchi 1403*7fd79137SRobert Mustacchi 1404*7fd79137SRobert Mustacchi int dwarf_srcfiles(Dwarf_Die /*die*/, 1405*7fd79137SRobert Mustacchi char*** /*srcfiles*/, 1406*7fd79137SRobert Mustacchi Dwarf_Signed * /*filecount*/, 1407*7fd79137SRobert Mustacchi Dwarf_Error* /*error*/); 1408*7fd79137SRobert Mustacchi 1409*7fd79137SRobert Mustacchi /* Unimplemented. */ 1410*7fd79137SRobert Mustacchi int dwarf_dieline(Dwarf_Die /*die*/, 1411*7fd79137SRobert Mustacchi Dwarf_Line * /*returned_line*/, 1412*7fd79137SRobert Mustacchi Dwarf_Error * /*error*/); 1413*7fd79137SRobert Mustacchi 1414*7fd79137SRobert Mustacchi int dwarf_linebeginstatement(Dwarf_Line /*line*/, 1415*7fd79137SRobert Mustacchi Dwarf_Bool * /*returned_bool*/, 1416*7fd79137SRobert Mustacchi Dwarf_Error* /*error*/); 1417*7fd79137SRobert Mustacchi 1418*7fd79137SRobert Mustacchi int dwarf_lineendsequence(Dwarf_Line /*line*/, 1419*7fd79137SRobert Mustacchi Dwarf_Bool * /*returned_bool*/, 1420*7fd79137SRobert Mustacchi Dwarf_Error* /*error*/); 1421*7fd79137SRobert Mustacchi 1422*7fd79137SRobert Mustacchi int dwarf_lineno(Dwarf_Line /*line*/, 1423*7fd79137SRobert Mustacchi Dwarf_Unsigned * /*returned_lineno*/, 1424*7fd79137SRobert Mustacchi Dwarf_Error* /*error*/); 1425*7fd79137SRobert Mustacchi 1426*7fd79137SRobert Mustacchi int dwarf_line_srcfileno(Dwarf_Line /*line*/, 1427*7fd79137SRobert Mustacchi Dwarf_Unsigned * /*ret_fileno*/, 1428*7fd79137SRobert Mustacchi Dwarf_Error * /*error*/); 1429*7fd79137SRobert Mustacchi 1430*7fd79137SRobert Mustacchi int dwarf_lineaddr(Dwarf_Line /*line*/, 1431*7fd79137SRobert Mustacchi Dwarf_Addr * /*returned_addr*/, 1432*7fd79137SRobert Mustacchi Dwarf_Error* /*error*/); 1433*7fd79137SRobert Mustacchi 1434*7fd79137SRobert Mustacchi int dwarf_lineoff(Dwarf_Line /*line*/, 1435*7fd79137SRobert Mustacchi Dwarf_Signed * /*returned_lineoffset*/, 1436*7fd79137SRobert Mustacchi Dwarf_Error* /*error*/); 1437*7fd79137SRobert Mustacchi 1438*7fd79137SRobert Mustacchi int dwarf_linesrc(Dwarf_Line /*line*/, 1439*7fd79137SRobert Mustacchi char ** /*returned_name*/, 1440*7fd79137SRobert Mustacchi Dwarf_Error* /*error*/); 1441*7fd79137SRobert Mustacchi 1442*7fd79137SRobert Mustacchi int dwarf_lineblock(Dwarf_Line /*line*/, 1443*7fd79137SRobert Mustacchi Dwarf_Bool * /*returned_bool*/, 1444*7fd79137SRobert Mustacchi Dwarf_Error* /*error*/); 1445*7fd79137SRobert Mustacchi 1446*7fd79137SRobert Mustacchi /* tertiary interface to line info */ 1447*7fd79137SRobert Mustacchi /* Unimplemented */ 1448*7fd79137SRobert Mustacchi int dwarf_pclines(Dwarf_Debug /*dbg*/, 1449*7fd79137SRobert Mustacchi Dwarf_Addr /*pc*/, 1450*7fd79137SRobert Mustacchi Dwarf_Line** /*linebuf*/, 1451*7fd79137SRobert Mustacchi Dwarf_Signed * /*linecount*/, 1452*7fd79137SRobert Mustacchi Dwarf_Signed /*slide*/, 1453*7fd79137SRobert Mustacchi Dwarf_Error* /*error*/); 1454*7fd79137SRobert Mustacchi /* end line number operations */ 1455*7fd79137SRobert Mustacchi 1456*7fd79137SRobert Mustacchi /* global name space operations (.debug_pubnames access) */ 1457*7fd79137SRobert Mustacchi int dwarf_get_globals(Dwarf_Debug /*dbg*/, 1458*7fd79137SRobert Mustacchi Dwarf_Global** /*globals*/, 1459*7fd79137SRobert Mustacchi Dwarf_Signed * /*number_of_globals*/, 1460*7fd79137SRobert Mustacchi Dwarf_Error* /*error*/); 1461*7fd79137SRobert Mustacchi void dwarf_globals_dealloc(Dwarf_Debug /*dbg*/, 1462*7fd79137SRobert Mustacchi Dwarf_Global* /*globals*/, 1463*7fd79137SRobert Mustacchi Dwarf_Signed /*number_of_globals*/); 1464*7fd79137SRobert Mustacchi 1465*7fd79137SRobert Mustacchi int dwarf_globname(Dwarf_Global /*glob*/, 1466*7fd79137SRobert Mustacchi char ** /*returned_name*/, 1467*7fd79137SRobert Mustacchi Dwarf_Error* /*error*/); 1468*7fd79137SRobert Mustacchi 1469*7fd79137SRobert Mustacchi int dwarf_global_die_offset(Dwarf_Global /*global*/, 1470*7fd79137SRobert Mustacchi Dwarf_Off* /*return_offset*/, 1471*7fd79137SRobert Mustacchi Dwarf_Error * /*error*/); 1472*7fd79137SRobert Mustacchi 1473*7fd79137SRobert Mustacchi /* This returns the CU die global offset if one knows the 1474*7fd79137SRobert Mustacchi CU header global offset. 1475*7fd79137SRobert Mustacchi See also dwarf_CU_dieoffset_given_die(). */ 1476*7fd79137SRobert Mustacchi int dwarf_get_cu_die_offset_given_cu_header_offset( 1477*7fd79137SRobert Mustacchi Dwarf_Debug /*dbg*/, 1478*7fd79137SRobert Mustacchi Dwarf_Off /*in_cu_header_offset*/, 1479*7fd79137SRobert Mustacchi Dwarf_Off * /*out_cu_die_offset*/, 1480*7fd79137SRobert Mustacchi Dwarf_Error * /*err*/); 1481*7fd79137SRobert Mustacchi #ifdef __sgi /* pragma is sgi MIPS only */ 1482*7fd79137SRobert Mustacchi #pragma optional dwarf_get_cu_die_offset_given_cu_header_offset 1483*7fd79137SRobert Mustacchi #endif 1484*7fd79137SRobert Mustacchi 1485*7fd79137SRobert Mustacchi int dwarf_global_cu_offset(Dwarf_Global /*global*/, 1486*7fd79137SRobert Mustacchi Dwarf_Off* /*return_offset*/, 1487*7fd79137SRobert Mustacchi Dwarf_Error* /*error*/); 1488*7fd79137SRobert Mustacchi 1489*7fd79137SRobert Mustacchi int dwarf_global_name_offsets(Dwarf_Global /*global*/, 1490*7fd79137SRobert Mustacchi char ** /*returned_name*/, 1491*7fd79137SRobert Mustacchi Dwarf_Off* /*die_offset*/, 1492*7fd79137SRobert Mustacchi Dwarf_Off* /*cu_offset*/, 1493*7fd79137SRobert Mustacchi Dwarf_Error* /*error*/); 1494*7fd79137SRobert Mustacchi 1495*7fd79137SRobert Mustacchi /* Static function name operations. */ 1496*7fd79137SRobert Mustacchi int dwarf_get_funcs(Dwarf_Debug /*dbg*/, 1497*7fd79137SRobert Mustacchi Dwarf_Func** /*funcs*/, 1498*7fd79137SRobert Mustacchi Dwarf_Signed * /*number_of_funcs*/, 1499*7fd79137SRobert Mustacchi Dwarf_Error* /*error*/); 1500*7fd79137SRobert Mustacchi void dwarf_funcs_dealloc(Dwarf_Debug /*dbg*/, 1501*7fd79137SRobert Mustacchi Dwarf_Func* /*funcs*/, 1502*7fd79137SRobert Mustacchi Dwarf_Signed /*number_of_funcs*/); 1503*7fd79137SRobert Mustacchi 1504*7fd79137SRobert Mustacchi int dwarf_funcname(Dwarf_Func /*func*/, 1505*7fd79137SRobert Mustacchi char ** /*returned_name*/, 1506*7fd79137SRobert Mustacchi Dwarf_Error* /*error*/); 1507*7fd79137SRobert Mustacchi 1508*7fd79137SRobert Mustacchi int dwarf_func_die_offset(Dwarf_Func /*func*/, 1509*7fd79137SRobert Mustacchi Dwarf_Off* /*return_offset*/, 1510*7fd79137SRobert Mustacchi Dwarf_Error* /*error*/); 1511*7fd79137SRobert Mustacchi 1512*7fd79137SRobert Mustacchi int dwarf_func_cu_offset(Dwarf_Func /*func*/, 1513*7fd79137SRobert Mustacchi Dwarf_Off* /*return_offset*/, 1514*7fd79137SRobert Mustacchi Dwarf_Error* /*error*/); 1515*7fd79137SRobert Mustacchi 1516*7fd79137SRobert Mustacchi int dwarf_func_name_offsets(Dwarf_Func /*func*/, 1517*7fd79137SRobert Mustacchi char ** /*returned_name*/, 1518*7fd79137SRobert Mustacchi Dwarf_Off* /*die_offset*/, 1519*7fd79137SRobert Mustacchi Dwarf_Off* /*cu_offset*/, 1520*7fd79137SRobert Mustacchi Dwarf_Error* /*error*/); 1521*7fd79137SRobert Mustacchi 1522*7fd79137SRobert Mustacchi /* User-defined type name operations, SGI IRIX .debug_typenames section. 1523*7fd79137SRobert Mustacchi Same content as DWARF3 .debug_pubtypes, but defined years before 1524*7fd79137SRobert Mustacchi .debug_pubtypes was defined. SGI IRIX only. */ 1525*7fd79137SRobert Mustacchi int dwarf_get_types(Dwarf_Debug /*dbg*/, 1526*7fd79137SRobert Mustacchi Dwarf_Type** /*types*/, 1527*7fd79137SRobert Mustacchi Dwarf_Signed * /*number_of_types*/, 1528*7fd79137SRobert Mustacchi Dwarf_Error* /*error*/); 1529*7fd79137SRobert Mustacchi void dwarf_types_dealloc(Dwarf_Debug /*dbg*/, 1530*7fd79137SRobert Mustacchi Dwarf_Type* /*types*/, 1531*7fd79137SRobert Mustacchi Dwarf_Signed /*number_of_types*/); 1532*7fd79137SRobert Mustacchi 1533*7fd79137SRobert Mustacchi 1534*7fd79137SRobert Mustacchi int dwarf_typename(Dwarf_Type /*type*/, 1535*7fd79137SRobert Mustacchi char ** /*returned_name*/, 1536*7fd79137SRobert Mustacchi Dwarf_Error* /*error*/); 1537*7fd79137SRobert Mustacchi 1538*7fd79137SRobert Mustacchi int dwarf_type_die_offset(Dwarf_Type /*type*/, 1539*7fd79137SRobert Mustacchi Dwarf_Off* /*return_offset*/, 1540*7fd79137SRobert Mustacchi Dwarf_Error* /*error*/); 1541*7fd79137SRobert Mustacchi 1542*7fd79137SRobert Mustacchi int dwarf_type_cu_offset(Dwarf_Type /*type*/, 1543*7fd79137SRobert Mustacchi Dwarf_Off* /*return_offset*/, 1544*7fd79137SRobert Mustacchi Dwarf_Error* /*error*/); 1545*7fd79137SRobert Mustacchi 1546*7fd79137SRobert Mustacchi int dwarf_type_name_offsets(Dwarf_Type /*type*/, 1547*7fd79137SRobert Mustacchi char ** /*returned_name*/, 1548*7fd79137SRobert Mustacchi Dwarf_Off* /*die_offset*/, 1549*7fd79137SRobert Mustacchi Dwarf_Off* /*cu_offset*/, 1550*7fd79137SRobert Mustacchi Dwarf_Error* /*error*/); 1551*7fd79137SRobert Mustacchi 1552*7fd79137SRobert Mustacchi /* User-defined type name operations, DWARF3 .debug_pubtypes section. 1553*7fd79137SRobert Mustacchi */ 1554*7fd79137SRobert Mustacchi int dwarf_get_pubtypes(Dwarf_Debug /*dbg*/, 1555*7fd79137SRobert Mustacchi Dwarf_Type** /*types*/, 1556*7fd79137SRobert Mustacchi Dwarf_Signed * /*number_of_types*/, 1557*7fd79137SRobert Mustacchi Dwarf_Error* /*error*/); 1558*7fd79137SRobert Mustacchi void dwarf_pubtypes_dealloc(Dwarf_Debug /*dbg*/, 1559*7fd79137SRobert Mustacchi Dwarf_Type* /*pubtypes*/, 1560*7fd79137SRobert Mustacchi Dwarf_Signed /*number_of_pubtypes*/); 1561*7fd79137SRobert Mustacchi 1562*7fd79137SRobert Mustacchi 1563*7fd79137SRobert Mustacchi int dwarf_pubtypename(Dwarf_Type /*type*/, 1564*7fd79137SRobert Mustacchi char ** /*returned_name*/, 1565*7fd79137SRobert Mustacchi Dwarf_Error* /*error*/); 1566*7fd79137SRobert Mustacchi 1567*7fd79137SRobert Mustacchi int dwarf_pubtype_die_offset(Dwarf_Type /*type*/, 1568*7fd79137SRobert Mustacchi Dwarf_Off* /*return_offset*/, 1569*7fd79137SRobert Mustacchi Dwarf_Error* /*error*/); 1570*7fd79137SRobert Mustacchi 1571*7fd79137SRobert Mustacchi int dwarf_pubtype_cu_offset(Dwarf_Type /*type*/, 1572*7fd79137SRobert Mustacchi Dwarf_Off* /*return_offset*/, 1573*7fd79137SRobert Mustacchi Dwarf_Error* /*error*/); 1574*7fd79137SRobert Mustacchi 1575*7fd79137SRobert Mustacchi int dwarf_pubtype_name_offsets(Dwarf_Type /*type*/, 1576*7fd79137SRobert Mustacchi char ** /*returned_name*/, 1577*7fd79137SRobert Mustacchi Dwarf_Off* /*die_offset*/, 1578*7fd79137SRobert Mustacchi Dwarf_Off* /*cu_offset*/, 1579*7fd79137SRobert Mustacchi Dwarf_Error* /*error*/); 1580*7fd79137SRobert Mustacchi 1581*7fd79137SRobert Mustacchi /* File-scope static variable name operations. */ 1582*7fd79137SRobert Mustacchi int dwarf_get_vars(Dwarf_Debug /*dbg*/, 1583*7fd79137SRobert Mustacchi Dwarf_Var** /*vars*/, 1584*7fd79137SRobert Mustacchi Dwarf_Signed * /*number_of_vars*/, 1585*7fd79137SRobert Mustacchi Dwarf_Error* /*error*/); 1586*7fd79137SRobert Mustacchi void dwarf_vars_dealloc(Dwarf_Debug /*dbg*/, 1587*7fd79137SRobert Mustacchi Dwarf_Var* /*vars*/, 1588*7fd79137SRobert Mustacchi Dwarf_Signed /*number_of_vars*/); 1589*7fd79137SRobert Mustacchi 1590*7fd79137SRobert Mustacchi 1591*7fd79137SRobert Mustacchi int dwarf_varname(Dwarf_Var /*var*/, 1592*7fd79137SRobert Mustacchi char ** /*returned_name*/, 1593*7fd79137SRobert Mustacchi Dwarf_Error* /*error*/); 1594*7fd79137SRobert Mustacchi 1595*7fd79137SRobert Mustacchi int dwarf_var_die_offset(Dwarf_Var /*var*/, 1596*7fd79137SRobert Mustacchi Dwarf_Off* /*return_offset*/, 1597*7fd79137SRobert Mustacchi Dwarf_Error* /*error*/); 1598*7fd79137SRobert Mustacchi 1599*7fd79137SRobert Mustacchi int dwarf_var_cu_offset(Dwarf_Var /*var*/, 1600*7fd79137SRobert Mustacchi Dwarf_Off* /*return_offset*/, 1601*7fd79137SRobert Mustacchi Dwarf_Error* /*error*/); 1602*7fd79137SRobert Mustacchi 1603*7fd79137SRobert Mustacchi int dwarf_var_name_offsets(Dwarf_Var /*var*/, 1604*7fd79137SRobert Mustacchi char ** /*returned_name*/, 1605*7fd79137SRobert Mustacchi Dwarf_Off* /*die_offset*/, 1606*7fd79137SRobert Mustacchi Dwarf_Off* /*cu_offset*/, 1607*7fd79137SRobert Mustacchi Dwarf_Error* /*error*/); 1608*7fd79137SRobert Mustacchi 1609*7fd79137SRobert Mustacchi /* weak name operations. */ 1610*7fd79137SRobert Mustacchi int dwarf_get_weaks(Dwarf_Debug /*dbg*/, 1611*7fd79137SRobert Mustacchi Dwarf_Weak** /*weaks*/, 1612*7fd79137SRobert Mustacchi Dwarf_Signed * /*number_of_weaks*/, 1613*7fd79137SRobert Mustacchi Dwarf_Error* /*error*/); 1614*7fd79137SRobert Mustacchi void dwarf_weaks_dealloc(Dwarf_Debug /*dbg*/, 1615*7fd79137SRobert Mustacchi Dwarf_Weak* /*weaks*/, 1616*7fd79137SRobert Mustacchi Dwarf_Signed /*number_of_weaks*/); 1617*7fd79137SRobert Mustacchi 1618*7fd79137SRobert Mustacchi 1619*7fd79137SRobert Mustacchi int dwarf_weakname(Dwarf_Weak /*weak*/, 1620*7fd79137SRobert Mustacchi char ** /*returned_name*/, 1621*7fd79137SRobert Mustacchi Dwarf_Error* /*error*/); 1622*7fd79137SRobert Mustacchi 1623*7fd79137SRobert Mustacchi int dwarf_weak_die_offset(Dwarf_Weak /*weak*/, 1624*7fd79137SRobert Mustacchi Dwarf_Off* /*return_offset*/, 1625*7fd79137SRobert Mustacchi Dwarf_Error* /*error*/); 1626*7fd79137SRobert Mustacchi 1627*7fd79137SRobert Mustacchi int dwarf_weak_cu_offset(Dwarf_Weak /*weak*/, 1628*7fd79137SRobert Mustacchi Dwarf_Off* /*return_offset*/, 1629*7fd79137SRobert Mustacchi Dwarf_Error* /*error*/); 1630*7fd79137SRobert Mustacchi 1631*7fd79137SRobert Mustacchi int dwarf_weak_name_offsets(Dwarf_Weak /*weak*/, 1632*7fd79137SRobert Mustacchi char ** /*returned_name*/, 1633*7fd79137SRobert Mustacchi Dwarf_Off* /*die_offset*/, 1634*7fd79137SRobert Mustacchi Dwarf_Off* /*cu_offset*/, 1635*7fd79137SRobert Mustacchi Dwarf_Error* /*error*/); 1636*7fd79137SRobert Mustacchi 1637*7fd79137SRobert Mustacchi /* location list section operation. (.debug_loc access) */ 1638*7fd79137SRobert Mustacchi int dwarf_get_loclist_entry(Dwarf_Debug /*dbg*/, 1639*7fd79137SRobert Mustacchi Dwarf_Unsigned /*offset*/, 1640*7fd79137SRobert Mustacchi Dwarf_Addr* /*hipc*/, 1641*7fd79137SRobert Mustacchi Dwarf_Addr* /*lopc*/, 1642*7fd79137SRobert Mustacchi Dwarf_Ptr* /*data*/, 1643*7fd79137SRobert Mustacchi Dwarf_Unsigned* /*entry_len*/, 1644*7fd79137SRobert Mustacchi Dwarf_Unsigned* /*next_entry*/, 1645*7fd79137SRobert Mustacchi Dwarf_Error* /*error*/); 1646*7fd79137SRobert Mustacchi 1647*7fd79137SRobert Mustacchi /* abbreviation section operations */ 1648*7fd79137SRobert Mustacchi int dwarf_get_abbrev(Dwarf_Debug /*dbg*/, 1649*7fd79137SRobert Mustacchi Dwarf_Unsigned /*offset*/, 1650*7fd79137SRobert Mustacchi Dwarf_Abbrev * /*returned_abbrev*/, 1651*7fd79137SRobert Mustacchi Dwarf_Unsigned* /*length*/, 1652*7fd79137SRobert Mustacchi Dwarf_Unsigned* /*attr_count*/, 1653*7fd79137SRobert Mustacchi Dwarf_Error* /*error*/); 1654*7fd79137SRobert Mustacchi 1655*7fd79137SRobert Mustacchi int dwarf_get_abbrev_tag(Dwarf_Abbrev /*abbrev*/, 1656*7fd79137SRobert Mustacchi Dwarf_Half* /*return_tag_number*/, 1657*7fd79137SRobert Mustacchi Dwarf_Error* /*error*/); 1658*7fd79137SRobert Mustacchi int dwarf_get_abbrev_code(Dwarf_Abbrev /*abbrev*/, 1659*7fd79137SRobert Mustacchi Dwarf_Unsigned* /*return_code_number*/, 1660*7fd79137SRobert Mustacchi Dwarf_Error* /*error*/); 1661*7fd79137SRobert Mustacchi 1662*7fd79137SRobert Mustacchi int dwarf_get_abbrev_children_flag(Dwarf_Abbrev /*abbrev*/, 1663*7fd79137SRobert Mustacchi Dwarf_Signed* /*return_flag*/, 1664*7fd79137SRobert Mustacchi Dwarf_Error* /*error*/); 1665*7fd79137SRobert Mustacchi 1666*7fd79137SRobert Mustacchi int dwarf_get_abbrev_entry(Dwarf_Abbrev /*abbrev*/, 1667*7fd79137SRobert Mustacchi Dwarf_Signed /*index*/, 1668*7fd79137SRobert Mustacchi Dwarf_Half * /*returned_attr_num*/, 1669*7fd79137SRobert Mustacchi Dwarf_Signed* /*form*/, 1670*7fd79137SRobert Mustacchi Dwarf_Off* /*offset*/, 1671*7fd79137SRobert Mustacchi Dwarf_Error* /*error*/); 1672*7fd79137SRobert Mustacchi 1673*7fd79137SRobert Mustacchi /* consumer string section operation */ 1674*7fd79137SRobert Mustacchi int dwarf_get_str(Dwarf_Debug /*dbg*/, 1675*7fd79137SRobert Mustacchi Dwarf_Off /*offset*/, 1676*7fd79137SRobert Mustacchi char** /*string*/, 1677*7fd79137SRobert Mustacchi Dwarf_Signed * /*strlen_of_string*/, 1678*7fd79137SRobert Mustacchi Dwarf_Error* /*error*/); 1679*7fd79137SRobert Mustacchi 1680*7fd79137SRobert Mustacchi /* Consumer op on gnu .eh_frame info */ 1681*7fd79137SRobert Mustacchi int dwarf_get_fde_list_eh( 1682*7fd79137SRobert Mustacchi Dwarf_Debug /*dbg*/, 1683*7fd79137SRobert Mustacchi Dwarf_Cie** /*cie_data*/, 1684*7fd79137SRobert Mustacchi Dwarf_Signed* /*cie_element_count*/, 1685*7fd79137SRobert Mustacchi Dwarf_Fde** /*fde_data*/, 1686*7fd79137SRobert Mustacchi Dwarf_Signed* /*fde_element_count*/, 1687*7fd79137SRobert Mustacchi Dwarf_Error* /*error*/); 1688*7fd79137SRobert Mustacchi 1689*7fd79137SRobert Mustacchi 1690*7fd79137SRobert Mustacchi /* consumer operations on frame info: .debug_frame */ 1691*7fd79137SRobert Mustacchi int dwarf_get_fde_list(Dwarf_Debug /*dbg*/, 1692*7fd79137SRobert Mustacchi Dwarf_Cie** /*cie_data*/, 1693*7fd79137SRobert Mustacchi Dwarf_Signed* /*cie_element_count*/, 1694*7fd79137SRobert Mustacchi Dwarf_Fde** /*fde_data*/, 1695*7fd79137SRobert Mustacchi Dwarf_Signed* /*fde_element_count*/, 1696*7fd79137SRobert Mustacchi Dwarf_Error* /*error*/); 1697*7fd79137SRobert Mustacchi 1698*7fd79137SRobert Mustacchi /* Release storage gotten by dwarf_get_fde_list_eh() or 1699*7fd79137SRobert Mustacchi dwarf_get_fde_list() */ 1700*7fd79137SRobert Mustacchi void dwarf_fde_cie_list_dealloc(Dwarf_Debug dbg, 1701*7fd79137SRobert Mustacchi Dwarf_Cie *cie_data, 1702*7fd79137SRobert Mustacchi Dwarf_Signed cie_element_count, 1703*7fd79137SRobert Mustacchi Dwarf_Fde *fde_data, 1704*7fd79137SRobert Mustacchi Dwarf_Signed fde_element_count); 1705*7fd79137SRobert Mustacchi 1706*7fd79137SRobert Mustacchi 1707*7fd79137SRobert Mustacchi 1708*7fd79137SRobert Mustacchi int dwarf_get_fde_range(Dwarf_Fde /*fde*/, 1709*7fd79137SRobert Mustacchi Dwarf_Addr* /*low_pc*/, 1710*7fd79137SRobert Mustacchi Dwarf_Unsigned* /*func_length*/, 1711*7fd79137SRobert Mustacchi Dwarf_Ptr* /*fde_bytes*/, 1712*7fd79137SRobert Mustacchi Dwarf_Unsigned* /*fde_byte_length*/, 1713*7fd79137SRobert Mustacchi Dwarf_Off* /*cie_offset*/, 1714*7fd79137SRobert Mustacchi Dwarf_Signed* /*cie_index*/, 1715*7fd79137SRobert Mustacchi Dwarf_Off* /*fde_offset*/, 1716*7fd79137SRobert Mustacchi Dwarf_Error* /*error*/); 1717*7fd79137SRobert Mustacchi 1718*7fd79137SRobert Mustacchi /* Useful for IRIX only: see dwarf_get_cie_augmentation_data() 1719*7fd79137SRobert Mustacchi dwarf_get_fde_augmentation_data() for GNU .eh_frame. */ 1720*7fd79137SRobert Mustacchi int dwarf_get_fde_exception_info(Dwarf_Fde /*fde*/, 1721*7fd79137SRobert Mustacchi Dwarf_Signed* /* offset_into_exception_tables */, 1722*7fd79137SRobert Mustacchi Dwarf_Error* /*error*/); 1723*7fd79137SRobert Mustacchi 1724*7fd79137SRobert Mustacchi 1725*7fd79137SRobert Mustacchi int dwarf_get_cie_of_fde(Dwarf_Fde /*fde*/, 1726*7fd79137SRobert Mustacchi Dwarf_Cie * /*cie_returned*/, 1727*7fd79137SRobert Mustacchi Dwarf_Error* /*error*/); 1728*7fd79137SRobert Mustacchi 1729*7fd79137SRobert Mustacchi int dwarf_get_cie_info(Dwarf_Cie /*cie*/, 1730*7fd79137SRobert Mustacchi Dwarf_Unsigned * /*bytes_in_cie*/, 1731*7fd79137SRobert Mustacchi Dwarf_Small* /*version*/, 1732*7fd79137SRobert Mustacchi char ** /*augmenter*/, 1733*7fd79137SRobert Mustacchi Dwarf_Unsigned* /*code_alignment_factor*/, 1734*7fd79137SRobert Mustacchi Dwarf_Signed* /*data_alignment_factor*/, 1735*7fd79137SRobert Mustacchi Dwarf_Half* /*return_address_register_rule*/, 1736*7fd79137SRobert Mustacchi Dwarf_Ptr* /*initial_instructions*/, 1737*7fd79137SRobert Mustacchi Dwarf_Unsigned* /*initial_instructions_length*/, 1738*7fd79137SRobert Mustacchi Dwarf_Error* /*error*/); 1739*7fd79137SRobert Mustacchi 1740*7fd79137SRobert Mustacchi /* dwarf_get_cie_index new September 2009. */ 1741*7fd79137SRobert Mustacchi int dwarf_get_cie_index( 1742*7fd79137SRobert Mustacchi Dwarf_Cie /*cie*/, 1743*7fd79137SRobert Mustacchi Dwarf_Signed* /*index*/, 1744*7fd79137SRobert Mustacchi Dwarf_Error* /*error*/ ); 1745*7fd79137SRobert Mustacchi 1746*7fd79137SRobert Mustacchi 1747*7fd79137SRobert Mustacchi int dwarf_get_fde_instr_bytes(Dwarf_Fde /*fde*/, 1748*7fd79137SRobert Mustacchi Dwarf_Ptr * /*outinstrs*/, Dwarf_Unsigned * /*outlen*/, 1749*7fd79137SRobert Mustacchi Dwarf_Error * /*error*/); 1750*7fd79137SRobert Mustacchi 1751*7fd79137SRobert Mustacchi int dwarf_get_fde_info_for_all_regs(Dwarf_Fde /*fde*/, 1752*7fd79137SRobert Mustacchi Dwarf_Addr /*pc_requested*/, 1753*7fd79137SRobert Mustacchi Dwarf_Regtable* /*reg_table*/, 1754*7fd79137SRobert Mustacchi Dwarf_Addr* /*row_pc*/, 1755*7fd79137SRobert Mustacchi Dwarf_Error* /*error*/); 1756*7fd79137SRobert Mustacchi 1757*7fd79137SRobert Mustacchi int dwarf_get_fde_info_for_all_regs3(Dwarf_Fde /*fde*/, 1758*7fd79137SRobert Mustacchi Dwarf_Addr /*pc_requested*/, 1759*7fd79137SRobert Mustacchi Dwarf_Regtable3* /*reg_table*/, 1760*7fd79137SRobert Mustacchi Dwarf_Addr* /*row_pc*/, 1761*7fd79137SRobert Mustacchi Dwarf_Error* /*error*/); 1762*7fd79137SRobert Mustacchi 1763*7fd79137SRobert Mustacchi /* In this older interface DW_FRAME_CFA_COL is a meaningful 1764*7fd79137SRobert Mustacchi column (which does not work well with DWARF3 or 1765*7fd79137SRobert Mustacchi non-MIPS architectures). */ 1766*7fd79137SRobert Mustacchi int dwarf_get_fde_info_for_reg(Dwarf_Fde /*fde*/, 1767*7fd79137SRobert Mustacchi Dwarf_Half /*table_column*/, 1768*7fd79137SRobert Mustacchi Dwarf_Addr /*pc_requested*/, 1769*7fd79137SRobert Mustacchi Dwarf_Signed* /*offset_relevant*/, 1770*7fd79137SRobert Mustacchi Dwarf_Signed* /*register*/, 1771*7fd79137SRobert Mustacchi Dwarf_Signed* /*offset*/, 1772*7fd79137SRobert Mustacchi Dwarf_Addr* /*row_pc*/, 1773*7fd79137SRobert Mustacchi Dwarf_Error* /*error*/); 1774*7fd79137SRobert Mustacchi 1775*7fd79137SRobert Mustacchi /* See discussion of dw_value_type, libdwarf.h. 1776*7fd79137SRobert Mustacchi Use of DW_FRAME_CFA_COL is not meaningful in this interface. 1777*7fd79137SRobert Mustacchi See dwarf_get_fde_info_for_cfa_reg3(). 1778*7fd79137SRobert Mustacchi */ 1779*7fd79137SRobert Mustacchi /* dwarf_get_fde_info_for_reg3 is useful on a single column, but 1780*7fd79137SRobert Mustacchi it is inefficient to iterate across all table_columns using this 1781*7fd79137SRobert Mustacchi function. Instead call dwarf_get_fde_info_for_all_regs3() and index 1782*7fd79137SRobert Mustacchi into the table it fills in. */ 1783*7fd79137SRobert Mustacchi int dwarf_get_fde_info_for_reg3(Dwarf_Fde /*fde*/, 1784*7fd79137SRobert Mustacchi Dwarf_Half /*table_column*/, 1785*7fd79137SRobert Mustacchi Dwarf_Addr /*pc_requested*/, 1786*7fd79137SRobert Mustacchi Dwarf_Small * /*value_type*/, 1787*7fd79137SRobert Mustacchi Dwarf_Signed * /*offset_relevant*/, 1788*7fd79137SRobert Mustacchi Dwarf_Signed* /*register*/, 1789*7fd79137SRobert Mustacchi Dwarf_Signed* /*offset_or_block_len*/, 1790*7fd79137SRobert Mustacchi Dwarf_Ptr * /*block_ptr */, 1791*7fd79137SRobert Mustacchi Dwarf_Addr* /*row_pc_out*/, 1792*7fd79137SRobert Mustacchi Dwarf_Error* /*error*/); 1793*7fd79137SRobert Mustacchi 1794*7fd79137SRobert Mustacchi /* Use this to get the cfa. */ 1795*7fd79137SRobert Mustacchi int dwarf_get_fde_info_for_cfa_reg3(Dwarf_Fde /*fde*/, 1796*7fd79137SRobert Mustacchi Dwarf_Addr /*pc_requested*/, 1797*7fd79137SRobert Mustacchi Dwarf_Small * /*value_type*/, 1798*7fd79137SRobert Mustacchi Dwarf_Signed * /*offset_relevant*/, 1799*7fd79137SRobert Mustacchi Dwarf_Signed* /*register*/, 1800*7fd79137SRobert Mustacchi Dwarf_Signed* /*offset_or_block_len*/, 1801*7fd79137SRobert Mustacchi Dwarf_Ptr * /*block_ptr */, 1802*7fd79137SRobert Mustacchi Dwarf_Addr* /*row_pc_out*/, 1803*7fd79137SRobert Mustacchi Dwarf_Error* /*error*/); 1804*7fd79137SRobert Mustacchi 1805*7fd79137SRobert Mustacchi int dwarf_get_fde_for_die(Dwarf_Debug /*dbg*/, 1806*7fd79137SRobert Mustacchi Dwarf_Die /*subr_die */, 1807*7fd79137SRobert Mustacchi Dwarf_Fde * /*returned_fde*/, 1808*7fd79137SRobert Mustacchi Dwarf_Error* /*error*/); 1809*7fd79137SRobert Mustacchi 1810*7fd79137SRobert Mustacchi int dwarf_get_fde_n(Dwarf_Fde* /*fde_data*/, 1811*7fd79137SRobert Mustacchi Dwarf_Unsigned /*fde_index*/, 1812*7fd79137SRobert Mustacchi Dwarf_Fde * /*returned_fde*/, 1813*7fd79137SRobert Mustacchi Dwarf_Error* /*error*/); 1814*7fd79137SRobert Mustacchi 1815*7fd79137SRobert Mustacchi int dwarf_get_fde_at_pc(Dwarf_Fde* /*fde_data*/, 1816*7fd79137SRobert Mustacchi Dwarf_Addr /*pc_of_interest*/, 1817*7fd79137SRobert Mustacchi Dwarf_Fde * /*returned_fde*/, 1818*7fd79137SRobert Mustacchi Dwarf_Addr* /*lopc*/, 1819*7fd79137SRobert Mustacchi Dwarf_Addr* /*hipc*/, 1820*7fd79137SRobert Mustacchi Dwarf_Error* /*error*/); 1821*7fd79137SRobert Mustacchi 1822*7fd79137SRobert Mustacchi /* GNU .eh_frame augmentation information, raw form, see 1823*7fd79137SRobert Mustacchi Linux Standard Base Core Specification version 3.0 . */ 1824*7fd79137SRobert Mustacchi int dwarf_get_cie_augmentation_data(Dwarf_Cie /* cie*/, 1825*7fd79137SRobert Mustacchi Dwarf_Small ** /* augdata */, 1826*7fd79137SRobert Mustacchi Dwarf_Unsigned * /* augdata_len */, 1827*7fd79137SRobert Mustacchi Dwarf_Error* /*error*/); 1828*7fd79137SRobert Mustacchi /* GNU .eh_frame augmentation information, raw form, see 1829*7fd79137SRobert Mustacchi Linux Standard Base Core Specification version 3.0 . */ 1830*7fd79137SRobert Mustacchi int dwarf_get_fde_augmentation_data(Dwarf_Fde /* fde*/, 1831*7fd79137SRobert Mustacchi Dwarf_Small ** /* augdata */, 1832*7fd79137SRobert Mustacchi Dwarf_Unsigned * /* augdata_len */, 1833*7fd79137SRobert Mustacchi Dwarf_Error* /*error*/); 1834*7fd79137SRobert Mustacchi 1835*7fd79137SRobert Mustacchi int dwarf_expand_frame_instructions(Dwarf_Cie /*cie*/, 1836*7fd79137SRobert Mustacchi Dwarf_Ptr /*instruction*/, 1837*7fd79137SRobert Mustacchi Dwarf_Unsigned /*i_length*/, 1838*7fd79137SRobert Mustacchi Dwarf_Frame_Op** /*returned_op_list*/, 1839*7fd79137SRobert Mustacchi Dwarf_Signed* /*op_count*/, 1840*7fd79137SRobert Mustacchi Dwarf_Error* /*error*/); 1841*7fd79137SRobert Mustacchi 1842*7fd79137SRobert Mustacchi /* Operations on .debug_aranges. */ 1843*7fd79137SRobert Mustacchi int dwarf_get_aranges(Dwarf_Debug /*dbg*/, 1844*7fd79137SRobert Mustacchi Dwarf_Arange** /*aranges*/, 1845*7fd79137SRobert Mustacchi Dwarf_Signed * /*arange_count*/, 1846*7fd79137SRobert Mustacchi Dwarf_Error* /*error*/); 1847*7fd79137SRobert Mustacchi 1848*7fd79137SRobert Mustacchi 1849*7fd79137SRobert Mustacchi 1850*7fd79137SRobert Mustacchi int dwarf_get_arange( 1851*7fd79137SRobert Mustacchi Dwarf_Arange* /*aranges*/, 1852*7fd79137SRobert Mustacchi Dwarf_Unsigned /*arange_count*/, 1853*7fd79137SRobert Mustacchi Dwarf_Addr /*address*/, 1854*7fd79137SRobert Mustacchi Dwarf_Arange * /*returned_arange*/, 1855*7fd79137SRobert Mustacchi Dwarf_Error* /*error*/); 1856*7fd79137SRobert Mustacchi 1857*7fd79137SRobert Mustacchi int dwarf_get_cu_die_offset( 1858*7fd79137SRobert Mustacchi Dwarf_Arange /*arange*/, 1859*7fd79137SRobert Mustacchi Dwarf_Off* /*return_offset*/, 1860*7fd79137SRobert Mustacchi Dwarf_Error* /*error*/); 1861*7fd79137SRobert Mustacchi 1862*7fd79137SRobert Mustacchi int dwarf_get_arange_cu_header_offset( 1863*7fd79137SRobert Mustacchi Dwarf_Arange /*arange*/, 1864*7fd79137SRobert Mustacchi Dwarf_Off* /*return_cu_header_offset*/, 1865*7fd79137SRobert Mustacchi Dwarf_Error* /*error*/); 1866*7fd79137SRobert Mustacchi #ifdef __sgi /* pragma is sgi MIPS only */ 1867*7fd79137SRobert Mustacchi #pragma optional dwarf_get_arange_cu_header_offset 1868*7fd79137SRobert Mustacchi #endif 1869*7fd79137SRobert Mustacchi 1870*7fd79137SRobert Mustacchi /* DWARF2,3 interface. No longer really adequate (it was never 1871*7fd79137SRobert Mustacchi right for segmented address spaces, please switch 1872*7fd79137SRobert Mustacchi to using dwarf_get_arange_info_b instead. 1873*7fd79137SRobert Mustacchi There is no effective difference between these 1874*7fd79137SRobert Mustacchi functions if the address space 1875*7fd79137SRobert Mustacchi of the target is not segmented. */ 1876*7fd79137SRobert Mustacchi int dwarf_get_arange_info( 1877*7fd79137SRobert Mustacchi Dwarf_Arange /*arange*/, 1878*7fd79137SRobert Mustacchi Dwarf_Addr* /*start*/, 1879*7fd79137SRobert Mustacchi Dwarf_Unsigned* /*length*/, 1880*7fd79137SRobert Mustacchi Dwarf_Off* /*cu_die_offset*/, 1881*7fd79137SRobert Mustacchi Dwarf_Error* /*error*/ ); 1882*7fd79137SRobert Mustacchi 1883*7fd79137SRobert Mustacchi /* New for DWARF4, entries may have segment information. 1884*7fd79137SRobert Mustacchi *segment is only meaningful if *segment_entry_size is non-zero. */ 1885*7fd79137SRobert Mustacchi int dwarf_get_arange_info_b( 1886*7fd79137SRobert Mustacchi Dwarf_Arange /*arange*/, 1887*7fd79137SRobert Mustacchi Dwarf_Unsigned* /*segment*/, 1888*7fd79137SRobert Mustacchi Dwarf_Unsigned* /*segment_entry_size*/, 1889*7fd79137SRobert Mustacchi Dwarf_Addr * /*start*/, 1890*7fd79137SRobert Mustacchi Dwarf_Unsigned* /*length*/, 1891*7fd79137SRobert Mustacchi Dwarf_Off * /*cu_die_offset*/, 1892*7fd79137SRobert Mustacchi Dwarf_Error * /*error*/ ); 1893*7fd79137SRobert Mustacchi 1894*7fd79137SRobert Mustacchi 1895*7fd79137SRobert Mustacchi /* consumer .debug_macinfo information interface. 1896*7fd79137SRobert Mustacchi */ 1897*7fd79137SRobert Mustacchi struct Dwarf_Macro_Details_s { 1898*7fd79137SRobert Mustacchi Dwarf_Off dmd_offset; /* offset, in the section, 1899*7fd79137SRobert Mustacchi of this macro info */ 1900*7fd79137SRobert Mustacchi Dwarf_Small dmd_type; /* the type, DW_MACINFO_define etc*/ 1901*7fd79137SRobert Mustacchi Dwarf_Signed dmd_lineno; /* the source line number where 1902*7fd79137SRobert Mustacchi applicable and vend_def # if 1903*7fd79137SRobert Mustacchi vendor_extension op 1904*7fd79137SRobert Mustacchi */ 1905*7fd79137SRobert Mustacchi 1906*7fd79137SRobert Mustacchi Dwarf_Signed dmd_fileindex;/* the source file index: 1907*7fd79137SRobert Mustacchi applies to define undef start_file 1908*7fd79137SRobert Mustacchi */ 1909*7fd79137SRobert Mustacchi char * dmd_macro; /* macro name (with value for defineop) 1910*7fd79137SRobert Mustacchi string from vendor ext 1911*7fd79137SRobert Mustacchi */ 1912*7fd79137SRobert Mustacchi }; 1913*7fd79137SRobert Mustacchi 1914*7fd79137SRobert Mustacchi /* dwarf_print_lines is for use by dwarfdump: it prints 1915*7fd79137SRobert Mustacchi line info to stdout. 1916*7fd79137SRobert Mustacchi The _dwarf name is obsolete. Use dwarf_ instead. 1917*7fd79137SRobert Mustacchi Added extra argnument 2/2009 for better checking. 1918*7fd79137SRobert Mustacchi */ 1919*7fd79137SRobert Mustacchi int _dwarf_print_lines(Dwarf_Die /*cu_die*/,Dwarf_Error * /*error*/); 1920*7fd79137SRobert Mustacchi int dwarf_print_lines(Dwarf_Die /*cu_die*/,Dwarf_Error * /*error*/, 1921*7fd79137SRobert Mustacchi int * /*error_count_out */); 1922*7fd79137SRobert Mustacchi 1923*7fd79137SRobert Mustacchi /* dwarf_check_lineheader lets dwarfdump get detailed messages 1924*7fd79137SRobert Mustacchi about some compiler errors we detect. 1925*7fd79137SRobert Mustacchi We return the count of detected errors throught the 1926*7fd79137SRobert Mustacchi pointer. 1927*7fd79137SRobert Mustacchi */ 1928*7fd79137SRobert Mustacchi void dwarf_check_lineheader(Dwarf_Die /*cu_die*/,int *errcount_out); 1929*7fd79137SRobert Mustacchi 1930*7fd79137SRobert Mustacchi /* dwarf_ld_sort_lines helps SGI IRIX ld 1931*7fd79137SRobert Mustacchi rearrange lines in .debug_line in a .o created with a text 1932*7fd79137SRobert Mustacchi section per function. 1933*7fd79137SRobert Mustacchi -OPT:procedure_reorder=ON 1934*7fd79137SRobert Mustacchi where ld-cord (cord(1)ing by ld, 1935*7fd79137SRobert Mustacchi not by cord(1)) may have changed the function order. 1936*7fd79137SRobert Mustacchi The _dwarf name is obsolete. Use dwarf_ instead. 1937*7fd79137SRobert Mustacchi */ 1938*7fd79137SRobert Mustacchi int _dwarf_ld_sort_lines( 1939*7fd79137SRobert Mustacchi void * /*orig_buffer*/, 1940*7fd79137SRobert Mustacchi unsigned long /* buffer_len*/, 1941*7fd79137SRobert Mustacchi int /*is_64_bit*/, 1942*7fd79137SRobert Mustacchi int * /*any_change*/, 1943*7fd79137SRobert Mustacchi int * /*err_code*/); 1944*7fd79137SRobert Mustacchi int dwarf_ld_sort_lines( 1945*7fd79137SRobert Mustacchi void * /*orig_buffer*/, 1946*7fd79137SRobert Mustacchi unsigned long /*buffer_len*/, 1947*7fd79137SRobert Mustacchi int /*is_64_bit*/, 1948*7fd79137SRobert Mustacchi int * /*any_change*/, 1949*7fd79137SRobert Mustacchi int * /*err_code*/); 1950*7fd79137SRobert Mustacchi 1951*7fd79137SRobert Mustacchi /* Used by dwarfdump -v to print fde offsets from debugging 1952*7fd79137SRobert Mustacchi info. 1953*7fd79137SRobert Mustacchi The _dwarf name is obsolete. Use dwarf_ instead. 1954*7fd79137SRobert Mustacchi */ 1955*7fd79137SRobert Mustacchi int _dwarf_fde_section_offset(Dwarf_Debug dbg, 1956*7fd79137SRobert Mustacchi Dwarf_Fde /*in_fde*/, 1957*7fd79137SRobert Mustacchi Dwarf_Off * /*fde_off*/, 1958*7fd79137SRobert Mustacchi Dwarf_Off * /*cie_off*/, 1959*7fd79137SRobert Mustacchi Dwarf_Error * /*err*/); 1960*7fd79137SRobert Mustacchi int dwarf_fde_section_offset(Dwarf_Debug dbg, 1961*7fd79137SRobert Mustacchi Dwarf_Fde /*in_fde*/, 1962*7fd79137SRobert Mustacchi Dwarf_Off * /*fde_off*/, 1963*7fd79137SRobert Mustacchi Dwarf_Off * /*cie_off*/, 1964*7fd79137SRobert Mustacchi Dwarf_Error * /*err*/); 1965*7fd79137SRobert Mustacchi 1966*7fd79137SRobert Mustacchi /* Used by dwarfdump -v to print cie offsets from debugging 1967*7fd79137SRobert Mustacchi info. 1968*7fd79137SRobert Mustacchi The _dwarf name is obsolete. Use dwarf_ instead. 1969*7fd79137SRobert Mustacchi */ 1970*7fd79137SRobert Mustacchi int dwarf_cie_section_offset(Dwarf_Debug /*dbg*/, 1971*7fd79137SRobert Mustacchi Dwarf_Cie /*in_cie*/, 1972*7fd79137SRobert Mustacchi Dwarf_Off * /*cie_off */, 1973*7fd79137SRobert Mustacchi Dwarf_Error * /*err*/); 1974*7fd79137SRobert Mustacchi int _dwarf_cie_section_offset(Dwarf_Debug /*dbg*/, 1975*7fd79137SRobert Mustacchi Dwarf_Cie /*in_cie*/, 1976*7fd79137SRobert Mustacchi Dwarf_Off * /*cie_off*/, 1977*7fd79137SRobert Mustacchi Dwarf_Error * /*err*/); 1978*7fd79137SRobert Mustacchi 1979*7fd79137SRobert Mustacchi typedef struct Dwarf_Macro_Details_s Dwarf_Macro_Details; 1980*7fd79137SRobert Mustacchi 1981*7fd79137SRobert Mustacchi int dwarf_get_macro(Dwarf_Debug /*dbg*/, 1982*7fd79137SRobert Mustacchi char * /*requested_macro_name*/, 1983*7fd79137SRobert Mustacchi Dwarf_Addr /*pc_of_request*/, 1984*7fd79137SRobert Mustacchi char ** /*returned_macro_value*/, 1985*7fd79137SRobert Mustacchi Dwarf_Error * /*error*/); 1986*7fd79137SRobert Mustacchi 1987*7fd79137SRobert Mustacchi int dwarf_get_all_defined_macros(Dwarf_Debug /*dbg*/, 1988*7fd79137SRobert Mustacchi Dwarf_Addr /*pc_of_request*/, 1989*7fd79137SRobert Mustacchi Dwarf_Signed * /*returned_count*/, 1990*7fd79137SRobert Mustacchi char *** /*returned_pointers_to_macros*/, 1991*7fd79137SRobert Mustacchi Dwarf_Error * /*error*/); 1992*7fd79137SRobert Mustacchi 1993*7fd79137SRobert Mustacchi char *dwarf_find_macro_value_start(char * /*macro_string*/); 1994*7fd79137SRobert Mustacchi 1995*7fd79137SRobert Mustacchi int dwarf_get_macro_details(Dwarf_Debug /*dbg*/, 1996*7fd79137SRobert Mustacchi Dwarf_Off /*macro_offset*/, 1997*7fd79137SRobert Mustacchi Dwarf_Unsigned /*maximum_count*/, 1998*7fd79137SRobert Mustacchi Dwarf_Signed * /*entry_count*/, 1999*7fd79137SRobert Mustacchi Dwarf_Macro_Details ** /*details*/, 2000*7fd79137SRobert Mustacchi Dwarf_Error * /*err*/); 2001*7fd79137SRobert Mustacchi 2002*7fd79137SRobert Mustacchi 2003*7fd79137SRobert Mustacchi int dwarf_get_address_size(Dwarf_Debug /*dbg*/, 2004*7fd79137SRobert Mustacchi Dwarf_Half * /*addr_size*/, 2005*7fd79137SRobert Mustacchi Dwarf_Error * /*error*/); 2006*7fd79137SRobert Mustacchi int dwarf_get_die_address_size(Dwarf_Die /*die*/, 2007*7fd79137SRobert Mustacchi Dwarf_Half * /*addr_size*/, 2008*7fd79137SRobert Mustacchi Dwarf_Error * /*error*/); 2009*7fd79137SRobert Mustacchi 2010*7fd79137SRobert Mustacchi /* The dwarf specification separates FORMs into 2011*7fd79137SRobert Mustacchi different classes. To do the seperation properly 2012*7fd79137SRobert Mustacchi requires 4 pieces of data as of DWARF4 (thus the 2013*7fd79137SRobert Mustacchi function arguments listed here). 2014*7fd79137SRobert Mustacchi The DWARF4 specification class definition suffices to 2015*7fd79137SRobert Mustacchi describe all DWARF versions. 2016*7fd79137SRobert Mustacchi See section 7.5.4, Attribute Encodings. 2017*7fd79137SRobert Mustacchi A return of DW_FORM_CLASS_UNKNOWN means we could not properly figure 2018*7fd79137SRobert Mustacchi out what form-class it is. 2019*7fd79137SRobert Mustacchi 2020*7fd79137SRobert Mustacchi DW_FORM_CLASS_FRAMEPTR is MIPS/IRIX only, and refers 2021*7fd79137SRobert Mustacchi to the DW_AT_MIPS_fde attribute (a reference to the 2022*7fd79137SRobert Mustacchi .debug_frame section). 2023*7fd79137SRobert Mustacchi */ 2024*7fd79137SRobert Mustacchi enum Dwarf_Form_Class { 2025*7fd79137SRobert Mustacchi DW_FORM_CLASS_UNKNOWN, DW_FORM_CLASS_ADDRESS, 2026*7fd79137SRobert Mustacchi DW_FORM_CLASS_BLOCK, DW_FORM_CLASS_CONSTANT, 2027*7fd79137SRobert Mustacchi DW_FORM_CLASS_EXPRLOC, DW_FORM_CLASS_FLAG, 2028*7fd79137SRobert Mustacchi DW_FORM_CLASS_LINEPTR, DW_FORM_CLASS_LOCLISTPTR, 2029*7fd79137SRobert Mustacchi DW_FORM_CLASS_MACPTR, DW_FORM_CLASS_RANGELISTPTR, 2030*7fd79137SRobert Mustacchi DW_FORM_CLASS_REFERENCE, DW_FORM_CLASS_STRING, 2031*7fd79137SRobert Mustacchi DW_FORM_CLASS_FRAMEPTR 2032*7fd79137SRobert Mustacchi }; 2033*7fd79137SRobert Mustacchi 2034*7fd79137SRobert Mustacchi enum Dwarf_Form_Class dwarf_get_form_class( 2035*7fd79137SRobert Mustacchi Dwarf_Half /* dwversion */, 2036*7fd79137SRobert Mustacchi Dwarf_Half /* attrnum */, 2037*7fd79137SRobert Mustacchi Dwarf_Half /*offset_size */, 2038*7fd79137SRobert Mustacchi Dwarf_Half /*form*/); 2039*7fd79137SRobert Mustacchi 2040*7fd79137SRobert Mustacchi /* utility operations */ 2041*7fd79137SRobert Mustacchi Dwarf_Unsigned dwarf_errno(Dwarf_Error /*error*/); 2042*7fd79137SRobert Mustacchi 2043*7fd79137SRobert Mustacchi char* dwarf_errmsg(Dwarf_Error /*error*/); 2044*7fd79137SRobert Mustacchi 2045*7fd79137SRobert Mustacchi /* stringcheck zero is default and means do all 2046*7fd79137SRobert Mustacchi ** string length validity checks. 2047*7fd79137SRobert Mustacchi ** Call with parameter value 1 to turn off many such checks (and 2048*7fd79137SRobert Mustacchi ** increase performance). 2049*7fd79137SRobert Mustacchi ** Call with zero for safest running. 2050*7fd79137SRobert Mustacchi ** Actual value saved and returned is only 8 bits! Upper bits 2051*7fd79137SRobert Mustacchi ** ignored by libdwarf (and zero on return). 2052*7fd79137SRobert Mustacchi ** Returns previous value. 2053*7fd79137SRobert Mustacchi */ 2054*7fd79137SRobert Mustacchi int dwarf_set_stringcheck(int /*stringcheck*/); 2055*7fd79137SRobert Mustacchi 2056*7fd79137SRobert Mustacchi /* 'apply' defaults to 1 and means do all 2057*7fd79137SRobert Mustacchi * 'rela' relocations on reading in a dwarf object section with 2058*7fd79137SRobert Mustacchi * such relocations. 2059*7fd79137SRobert Mustacchi * Call with parameter value 0 to turn off application of 2060*7fd79137SRobert Mustacchi * such relocations. 2061*7fd79137SRobert Mustacchi * Since the static linker leaves 'bogus' data in object sections 2062*7fd79137SRobert Mustacchi * with a 'rela' relocation section such data cannot be read 2063*7fd79137SRobert Mustacchi * sensibly without processing the relocations. Such relocations 2064*7fd79137SRobert Mustacchi * do not exist in executables and shared objects (.so), the 2065*7fd79137SRobert Mustacchi * relocations only exist in plain .o relocatable object files. 2066*7fd79137SRobert Mustacchi * Actual value saved and returned is only 8 bits! Upper bits 2067*7fd79137SRobert Mustacchi * ignored by libdwarf (and zero on return). 2068*7fd79137SRobert Mustacchi * Returns previous value. 2069*7fd79137SRobert Mustacchi * */ 2070*7fd79137SRobert Mustacchi int dwarf_set_reloc_application(int /*apply*/); 2071*7fd79137SRobert Mustacchi 2072*7fd79137SRobert Mustacchi 2073*7fd79137SRobert Mustacchi /* Unimplemented */ 2074*7fd79137SRobert Mustacchi Dwarf_Handler dwarf_seterrhand(Dwarf_Debug /*dbg*/, Dwarf_Handler /*errhand*/); 2075*7fd79137SRobert Mustacchi 2076*7fd79137SRobert Mustacchi /* Unimplemented */ 2077*7fd79137SRobert Mustacchi Dwarf_Ptr dwarf_seterrarg(Dwarf_Debug /*dbg*/, Dwarf_Ptr /*errarg*/); 2078*7fd79137SRobert Mustacchi 2079*7fd79137SRobert Mustacchi void dwarf_dealloc(Dwarf_Debug /*dbg*/, void* /*space*/, 2080*7fd79137SRobert Mustacchi Dwarf_Unsigned /*type*/); 2081*7fd79137SRobert Mustacchi 2082*7fd79137SRobert Mustacchi /* DWARF Producer Interface */ 2083*7fd79137SRobert Mustacchi 2084*7fd79137SRobert Mustacchi typedef int (*Dwarf_Callback_Func)( 2085*7fd79137SRobert Mustacchi char* /*name*/, 2086*7fd79137SRobert Mustacchi int /*size*/, 2087*7fd79137SRobert Mustacchi Dwarf_Unsigned /*type*/, 2088*7fd79137SRobert Mustacchi Dwarf_Unsigned /*flags*/, 2089*7fd79137SRobert Mustacchi Dwarf_Unsigned /*link*/, 2090*7fd79137SRobert Mustacchi Dwarf_Unsigned /*info*/, 2091*7fd79137SRobert Mustacchi int* /*sect name index*/, 2092*7fd79137SRobert Mustacchi int* /*error*/); 2093*7fd79137SRobert Mustacchi 2094*7fd79137SRobert Mustacchi Dwarf_P_Debug dwarf_producer_init( 2095*7fd79137SRobert Mustacchi Dwarf_Unsigned /*creation_flags*/, 2096*7fd79137SRobert Mustacchi Dwarf_Callback_Func /*func*/, 2097*7fd79137SRobert Mustacchi Dwarf_Handler /*errhand*/, 2098*7fd79137SRobert Mustacchi Dwarf_Ptr /*errarg*/, 2099*7fd79137SRobert Mustacchi Dwarf_Error* /*error*/); 2100*7fd79137SRobert Mustacchi 2101*7fd79137SRobert Mustacchi typedef int (*Dwarf_Callback_Func_b)( 2102*7fd79137SRobert Mustacchi char* /*name*/, 2103*7fd79137SRobert Mustacchi int /*size*/, 2104*7fd79137SRobert Mustacchi Dwarf_Unsigned /*type*/, 2105*7fd79137SRobert Mustacchi Dwarf_Unsigned /*flags*/, 2106*7fd79137SRobert Mustacchi Dwarf_Unsigned /*link*/, 2107*7fd79137SRobert Mustacchi Dwarf_Unsigned /*info*/, 2108*7fd79137SRobert Mustacchi Dwarf_Unsigned* /*sect_name_index*/, 2109*7fd79137SRobert Mustacchi int* /*error*/); 2110*7fd79137SRobert Mustacchi 2111*7fd79137SRobert Mustacchi 2112*7fd79137SRobert Mustacchi Dwarf_P_Debug dwarf_producer_init_b( 2113*7fd79137SRobert Mustacchi Dwarf_Unsigned /*flags*/, 2114*7fd79137SRobert Mustacchi Dwarf_Callback_Func_b /*func*/, 2115*7fd79137SRobert Mustacchi Dwarf_Handler /*errhand*/, 2116*7fd79137SRobert Mustacchi Dwarf_Ptr /*errarg*/, 2117*7fd79137SRobert Mustacchi Dwarf_Error * /*error*/); 2118*7fd79137SRobert Mustacchi 2119*7fd79137SRobert Mustacchi 2120*7fd79137SRobert Mustacchi Dwarf_Signed dwarf_transform_to_disk_form(Dwarf_P_Debug /*dbg*/, 2121*7fd79137SRobert Mustacchi Dwarf_Error* /*error*/); 2122*7fd79137SRobert Mustacchi 2123*7fd79137SRobert Mustacchi Dwarf_Ptr dwarf_get_section_bytes(Dwarf_P_Debug /*dbg*/, 2124*7fd79137SRobert Mustacchi Dwarf_Signed /*dwarf_section*/, 2125*7fd79137SRobert Mustacchi Dwarf_Signed* /*elf_section_index*/, 2126*7fd79137SRobert Mustacchi Dwarf_Unsigned* /*length*/, 2127*7fd79137SRobert Mustacchi Dwarf_Error* /*error*/); 2128*7fd79137SRobert Mustacchi 2129*7fd79137SRobert Mustacchi int dwarf_get_relocation_info_count( 2130*7fd79137SRobert Mustacchi Dwarf_P_Debug /*dbg*/, 2131*7fd79137SRobert Mustacchi Dwarf_Unsigned * /*count_of_relocation_sections*/, 2132*7fd79137SRobert Mustacchi int * /*drd_buffer_version*/, 2133*7fd79137SRobert Mustacchi Dwarf_Error* /*error*/); 2134*7fd79137SRobert Mustacchi 2135*7fd79137SRobert Mustacchi int dwarf_get_relocation_info( 2136*7fd79137SRobert Mustacchi Dwarf_P_Debug /*dbg*/, 2137*7fd79137SRobert Mustacchi Dwarf_Signed * /*elf_section_index*/, 2138*7fd79137SRobert Mustacchi Dwarf_Signed * /*elf_section_index_link*/, 2139*7fd79137SRobert Mustacchi Dwarf_Unsigned * /*relocation_buffer_count*/, 2140*7fd79137SRobert Mustacchi Dwarf_Relocation_Data * /*reldata_buffer*/, 2141*7fd79137SRobert Mustacchi Dwarf_Error* /*error*/); 2142*7fd79137SRobert Mustacchi 2143*7fd79137SRobert Mustacchi /* v1: no drd_length field, enum explicit */ 2144*7fd79137SRobert Mustacchi /* v2: has the drd_length field, enum value in uchar member */ 2145*7fd79137SRobert Mustacchi #define DWARF_DRD_BUFFER_VERSION 2 2146*7fd79137SRobert Mustacchi 2147*7fd79137SRobert Mustacchi /* Markers are not written to DWARF2/3/4, they are user 2148*7fd79137SRobert Mustacchi defined and may be used for any purpose. 2149*7fd79137SRobert Mustacchi */ 2150*7fd79137SRobert Mustacchi Dwarf_Signed dwarf_get_die_markers( 2151*7fd79137SRobert Mustacchi Dwarf_P_Debug /*dbg*/, 2152*7fd79137SRobert Mustacchi Dwarf_P_Marker * /*marker_list*/, 2153*7fd79137SRobert Mustacchi Dwarf_Unsigned * /*marker_count*/, 2154*7fd79137SRobert Mustacchi Dwarf_Error * /*error*/); 2155*7fd79137SRobert Mustacchi 2156*7fd79137SRobert Mustacchi int dwarf_get_string_attributes_count(Dwarf_P_Debug, 2157*7fd79137SRobert Mustacchi Dwarf_Unsigned *, 2158*7fd79137SRobert Mustacchi int *, 2159*7fd79137SRobert Mustacchi Dwarf_Error *); 2160*7fd79137SRobert Mustacchi 2161*7fd79137SRobert Mustacchi int dwarf_get_string_attributes_info(Dwarf_P_Debug, 2162*7fd79137SRobert Mustacchi Dwarf_Signed *, 2163*7fd79137SRobert Mustacchi Dwarf_Unsigned *, 2164*7fd79137SRobert Mustacchi Dwarf_P_String_Attr *, 2165*7fd79137SRobert Mustacchi Dwarf_Error *); 2166*7fd79137SRobert Mustacchi 2167*7fd79137SRobert Mustacchi void dwarf_reset_section_bytes(Dwarf_P_Debug /*dbg*/); 2168*7fd79137SRobert Mustacchi 2169*7fd79137SRobert Mustacchi Dwarf_Unsigned dwarf_producer_finish(Dwarf_P_Debug /*dbg*/, 2170*7fd79137SRobert Mustacchi Dwarf_Error* /*error*/); 2171*7fd79137SRobert Mustacchi 2172*7fd79137SRobert Mustacchi /* Producer attribute addition functions. */ 2173*7fd79137SRobert Mustacchi Dwarf_P_Attribute dwarf_add_AT_targ_address(Dwarf_P_Debug /*dbg*/, 2174*7fd79137SRobert Mustacchi Dwarf_P_Die /*ownerdie*/, 2175*7fd79137SRobert Mustacchi Dwarf_Half /*attr*/, 2176*7fd79137SRobert Mustacchi Dwarf_Unsigned /*pc_value*/, 2177*7fd79137SRobert Mustacchi Dwarf_Signed /*sym_index*/, 2178*7fd79137SRobert Mustacchi Dwarf_Error* /*error*/); 2179*7fd79137SRobert Mustacchi 2180*7fd79137SRobert Mustacchi Dwarf_P_Attribute dwarf_add_AT_block(Dwarf_P_Debug /*dbg*/, 2181*7fd79137SRobert Mustacchi Dwarf_P_Die /*ownerdie*/, 2182*7fd79137SRobert Mustacchi Dwarf_Half /*attr*/, 2183*7fd79137SRobert Mustacchi Dwarf_Small* /*block_data*/, 2184*7fd79137SRobert Mustacchi Dwarf_Unsigned /*block_len*/, 2185*7fd79137SRobert Mustacchi Dwarf_Error* /*error*/); 2186*7fd79137SRobert Mustacchi 2187*7fd79137SRobert Mustacchi Dwarf_P_Attribute dwarf_add_AT_targ_address_b(Dwarf_P_Debug /*dbg*/, 2188*7fd79137SRobert Mustacchi Dwarf_P_Die /*ownerdie*/, 2189*7fd79137SRobert Mustacchi Dwarf_Half /*attr*/, 2190*7fd79137SRobert Mustacchi Dwarf_Unsigned /*pc_value*/, 2191*7fd79137SRobert Mustacchi Dwarf_Unsigned /*sym_index*/, 2192*7fd79137SRobert Mustacchi Dwarf_Error* /*error*/); 2193*7fd79137SRobert Mustacchi 2194*7fd79137SRobert Mustacchi Dwarf_P_Attribute dwarf_add_AT_ref_address(Dwarf_P_Debug /*dbg*/, 2195*7fd79137SRobert Mustacchi Dwarf_P_Die /*ownerdie*/, 2196*7fd79137SRobert Mustacchi Dwarf_Half /*attr*/, 2197*7fd79137SRobert Mustacchi Dwarf_Unsigned /*pc_value*/, 2198*7fd79137SRobert Mustacchi Dwarf_Unsigned /*sym_index*/, 2199*7fd79137SRobert Mustacchi Dwarf_Error* /*error*/); 2200*7fd79137SRobert Mustacchi 2201*7fd79137SRobert Mustacchi Dwarf_P_Attribute dwarf_add_AT_unsigned_const(Dwarf_P_Debug /*dbg*/, 2202*7fd79137SRobert Mustacchi Dwarf_P_Die /*ownerdie*/, 2203*7fd79137SRobert Mustacchi Dwarf_Half /*attr*/, 2204*7fd79137SRobert Mustacchi Dwarf_Unsigned /*value*/, 2205*7fd79137SRobert Mustacchi Dwarf_Error* /*error*/); 2206*7fd79137SRobert Mustacchi 2207*7fd79137SRobert Mustacchi Dwarf_P_Attribute dwarf_add_AT_signed_const(Dwarf_P_Debug /*dbg*/, 2208*7fd79137SRobert Mustacchi Dwarf_P_Die /*ownerdie*/, 2209*7fd79137SRobert Mustacchi Dwarf_Half /*attr*/, 2210*7fd79137SRobert Mustacchi Dwarf_Signed /*value*/, 2211*7fd79137SRobert Mustacchi Dwarf_Error* /*error*/); 2212*7fd79137SRobert Mustacchi 2213*7fd79137SRobert Mustacchi Dwarf_P_Attribute dwarf_add_AT_reference(Dwarf_P_Debug /*dbg*/, 2214*7fd79137SRobert Mustacchi Dwarf_P_Die /*ownerdie*/, 2215*7fd79137SRobert Mustacchi Dwarf_Half /*attr*/, 2216*7fd79137SRobert Mustacchi Dwarf_P_Die /*otherdie*/, 2217*7fd79137SRobert Mustacchi Dwarf_Error* /*error*/); 2218*7fd79137SRobert Mustacchi 2219*7fd79137SRobert Mustacchi Dwarf_P_Attribute dwarf_add_AT_dataref( 2220*7fd79137SRobert Mustacchi Dwarf_P_Debug /* dbg*/, 2221*7fd79137SRobert Mustacchi Dwarf_P_Die /*ownerdie*/, 2222*7fd79137SRobert Mustacchi Dwarf_Half /*attr*/, 2223*7fd79137SRobert Mustacchi Dwarf_Unsigned /*pcvalue*/, 2224*7fd79137SRobert Mustacchi Dwarf_Unsigned /*sym_index*/, 2225*7fd79137SRobert Mustacchi Dwarf_Error* /*error*/); 2226*7fd79137SRobert Mustacchi 2227*7fd79137SRobert Mustacchi Dwarf_P_Attribute dwarf_add_AT_const_value_string(Dwarf_P_Die /*ownerdie*/, 2228*7fd79137SRobert Mustacchi char* /*string_value*/, 2229*7fd79137SRobert Mustacchi Dwarf_Error* /*error*/); 2230*7fd79137SRobert Mustacchi 2231*7fd79137SRobert Mustacchi Dwarf_P_Attribute dwarf_add_AT_location_expr(Dwarf_P_Debug /*dbg*/, 2232*7fd79137SRobert Mustacchi Dwarf_P_Die /*ownerdie*/, 2233*7fd79137SRobert Mustacchi Dwarf_Half /*attr*/, 2234*7fd79137SRobert Mustacchi Dwarf_P_Expr /*loc_expr*/, 2235*7fd79137SRobert Mustacchi Dwarf_Error* /*error*/); 2236*7fd79137SRobert Mustacchi 2237*7fd79137SRobert Mustacchi Dwarf_P_Attribute dwarf_add_AT_string(Dwarf_P_Debug /*dbg*/, 2238*7fd79137SRobert Mustacchi Dwarf_P_Die /*ownerdie*/, 2239*7fd79137SRobert Mustacchi Dwarf_Half /*attr*/, 2240*7fd79137SRobert Mustacchi char* /*string*/, 2241*7fd79137SRobert Mustacchi Dwarf_Error* /*error*/); 2242*7fd79137SRobert Mustacchi 2243*7fd79137SRobert Mustacchi Dwarf_P_Attribute dwarf_add_AT_flag(Dwarf_P_Debug /*dbg*/, 2244*7fd79137SRobert Mustacchi Dwarf_P_Die /*ownerdie*/, 2245*7fd79137SRobert Mustacchi Dwarf_Half /*attr*/, 2246*7fd79137SRobert Mustacchi Dwarf_Small /*flag*/, 2247*7fd79137SRobert Mustacchi Dwarf_Error* /*error*/); 2248*7fd79137SRobert Mustacchi 2249*7fd79137SRobert Mustacchi Dwarf_P_Attribute dwarf_add_AT_producer(Dwarf_P_Die /*ownerdie*/, 2250*7fd79137SRobert Mustacchi char* /*producer_string*/, 2251*7fd79137SRobert Mustacchi Dwarf_Error* /*error*/); 2252*7fd79137SRobert Mustacchi 2253*7fd79137SRobert Mustacchi Dwarf_P_Attribute dwarf_add_AT_const_value_signedint(Dwarf_P_Die /*ownerdie*/, 2254*7fd79137SRobert Mustacchi Dwarf_Signed /*signed_value*/, 2255*7fd79137SRobert Mustacchi Dwarf_Error* /*error*/); 2256*7fd79137SRobert Mustacchi 2257*7fd79137SRobert Mustacchi Dwarf_P_Attribute dwarf_add_AT_const_value_unsignedint( 2258*7fd79137SRobert Mustacchi Dwarf_P_Die /*ownerdie*/, 2259*7fd79137SRobert Mustacchi Dwarf_Unsigned /*unsigned_value*/, 2260*7fd79137SRobert Mustacchi Dwarf_Error* /*error*/); 2261*7fd79137SRobert Mustacchi 2262*7fd79137SRobert Mustacchi Dwarf_P_Attribute dwarf_add_AT_comp_dir(Dwarf_P_Die /*ownerdie*/, 2263*7fd79137SRobert Mustacchi char* /*current_working_directory*/, 2264*7fd79137SRobert Mustacchi Dwarf_Error* /*error*/); 2265*7fd79137SRobert Mustacchi 2266*7fd79137SRobert Mustacchi Dwarf_P_Attribute dwarf_add_AT_name(Dwarf_P_Die /*die*/, 2267*7fd79137SRobert Mustacchi char* /*name*/, 2268*7fd79137SRobert Mustacchi Dwarf_Error* /*error*/); 2269*7fd79137SRobert Mustacchi 2270*7fd79137SRobert Mustacchi /* Producer line creation functions (.debug_line) */ 2271*7fd79137SRobert Mustacchi Dwarf_Unsigned dwarf_add_directory_decl(Dwarf_P_Debug /*dbg*/, 2272*7fd79137SRobert Mustacchi char* /*name*/, 2273*7fd79137SRobert Mustacchi Dwarf_Error* /*error*/); 2274*7fd79137SRobert Mustacchi 2275*7fd79137SRobert Mustacchi Dwarf_Unsigned dwarf_add_file_decl(Dwarf_P_Debug /*dbg*/, 2276*7fd79137SRobert Mustacchi char* /*name*/, 2277*7fd79137SRobert Mustacchi Dwarf_Unsigned /*dir_index*/, 2278*7fd79137SRobert Mustacchi Dwarf_Unsigned /*time_last_modified*/, 2279*7fd79137SRobert Mustacchi Dwarf_Unsigned /*length*/, 2280*7fd79137SRobert Mustacchi Dwarf_Error* /*error*/); 2281*7fd79137SRobert Mustacchi 2282*7fd79137SRobert Mustacchi Dwarf_Unsigned dwarf_add_line_entry(Dwarf_P_Debug /*dbg*/, 2283*7fd79137SRobert Mustacchi Dwarf_Unsigned /*file_index*/, 2284*7fd79137SRobert Mustacchi Dwarf_Addr /*code_address*/, 2285*7fd79137SRobert Mustacchi Dwarf_Unsigned /*lineno*/, 2286*7fd79137SRobert Mustacchi Dwarf_Signed /*column_number*/, 2287*7fd79137SRobert Mustacchi Dwarf_Bool /*is_source_stmt_begin*/, 2288*7fd79137SRobert Mustacchi Dwarf_Bool /*is_basic_block_begin*/, 2289*7fd79137SRobert Mustacchi Dwarf_Error* /*error*/); 2290*7fd79137SRobert Mustacchi 2291*7fd79137SRobert Mustacchi Dwarf_Unsigned dwarf_lne_set_address(Dwarf_P_Debug /*dbg*/, 2292*7fd79137SRobert Mustacchi Dwarf_Unsigned /*offset*/, 2293*7fd79137SRobert Mustacchi Dwarf_Unsigned /*symbol_index*/, 2294*7fd79137SRobert Mustacchi Dwarf_Error* /*error*/); 2295*7fd79137SRobert Mustacchi 2296*7fd79137SRobert Mustacchi Dwarf_Unsigned dwarf_lne_end_sequence(Dwarf_P_Debug /*dbg*/, 2297*7fd79137SRobert Mustacchi Dwarf_Addr /*end_address*/, 2298*7fd79137SRobert Mustacchi Dwarf_Error* /*error*/); 2299*7fd79137SRobert Mustacchi 2300*7fd79137SRobert Mustacchi /* Producer .debug_frame functions */ 2301*7fd79137SRobert Mustacchi Dwarf_Unsigned dwarf_add_frame_cie(Dwarf_P_Debug /*dbg*/, 2302*7fd79137SRobert Mustacchi char* /*augmenter*/, 2303*7fd79137SRobert Mustacchi Dwarf_Small /*code_alignent_factor*/, 2304*7fd79137SRobert Mustacchi Dwarf_Small /*data_alignment_factor*/, 2305*7fd79137SRobert Mustacchi Dwarf_Small /*return_address_reg*/, 2306*7fd79137SRobert Mustacchi Dwarf_Ptr /*initialization_bytes*/, 2307*7fd79137SRobert Mustacchi Dwarf_Unsigned /*init_byte_len*/, 2308*7fd79137SRobert Mustacchi Dwarf_Error* /*error*/); 2309*7fd79137SRobert Mustacchi 2310*7fd79137SRobert Mustacchi Dwarf_Unsigned dwarf_add_frame_fde( 2311*7fd79137SRobert Mustacchi Dwarf_P_Debug /*dbg*/, 2312*7fd79137SRobert Mustacchi Dwarf_P_Fde /*fde*/, 2313*7fd79137SRobert Mustacchi Dwarf_P_Die /*corresponding subprogram die*/, 2314*7fd79137SRobert Mustacchi Dwarf_Unsigned /*cie_to_use*/, 2315*7fd79137SRobert Mustacchi Dwarf_Unsigned /*virt_addr_of_described_code*/, 2316*7fd79137SRobert Mustacchi Dwarf_Unsigned /*length_of_code*/, 2317*7fd79137SRobert Mustacchi Dwarf_Unsigned /*symbol_index*/, 2318*7fd79137SRobert Mustacchi Dwarf_Error* /*error*/); 2319*7fd79137SRobert Mustacchi 2320*7fd79137SRobert Mustacchi Dwarf_Unsigned dwarf_add_frame_fde_b( 2321*7fd79137SRobert Mustacchi Dwarf_P_Debug /*dbg*/, 2322*7fd79137SRobert Mustacchi Dwarf_P_Fde /*fde*/, 2323*7fd79137SRobert Mustacchi Dwarf_P_Die /*die*/, 2324*7fd79137SRobert Mustacchi Dwarf_Unsigned /*cie*/, 2325*7fd79137SRobert Mustacchi Dwarf_Addr /*virt_addr*/, 2326*7fd79137SRobert Mustacchi Dwarf_Unsigned /*code_len*/, 2327*7fd79137SRobert Mustacchi Dwarf_Unsigned /*sym_idx*/, 2328*7fd79137SRobert Mustacchi Dwarf_Unsigned /*sym_idx_of_end*/, 2329*7fd79137SRobert Mustacchi Dwarf_Addr /*offset_from_end_sym*/, 2330*7fd79137SRobert Mustacchi Dwarf_Error* /*error*/); 2331*7fd79137SRobert Mustacchi 2332*7fd79137SRobert Mustacchi Dwarf_Unsigned dwarf_add_frame_info_b( 2333*7fd79137SRobert Mustacchi Dwarf_P_Debug dbg /*dbg*/, 2334*7fd79137SRobert Mustacchi Dwarf_P_Fde /*fde*/, 2335*7fd79137SRobert Mustacchi Dwarf_P_Die /*die*/, 2336*7fd79137SRobert Mustacchi Dwarf_Unsigned /*cie*/, 2337*7fd79137SRobert Mustacchi Dwarf_Addr /*virt_addr*/, 2338*7fd79137SRobert Mustacchi Dwarf_Unsigned /*code_len*/, 2339*7fd79137SRobert Mustacchi Dwarf_Unsigned /*symidx*/, 2340*7fd79137SRobert Mustacchi Dwarf_Unsigned /*end_symbol */, 2341*7fd79137SRobert Mustacchi Dwarf_Addr /*offset_from_end_symbol */, 2342*7fd79137SRobert Mustacchi Dwarf_Signed /*offset_into_exception_tables*/, 2343*7fd79137SRobert Mustacchi Dwarf_Unsigned /*exception_table_symbol*/, 2344*7fd79137SRobert Mustacchi Dwarf_Error* /*error*/); 2345*7fd79137SRobert Mustacchi 2346*7fd79137SRobert Mustacchi Dwarf_Unsigned dwarf_add_frame_info( 2347*7fd79137SRobert Mustacchi Dwarf_P_Debug dbg /*dbg*/, 2348*7fd79137SRobert Mustacchi Dwarf_P_Fde /*fde*/, 2349*7fd79137SRobert Mustacchi Dwarf_P_Die /*die*/, 2350*7fd79137SRobert Mustacchi Dwarf_Unsigned /*cie*/, 2351*7fd79137SRobert Mustacchi Dwarf_Addr /*virt_addr*/, 2352*7fd79137SRobert Mustacchi Dwarf_Unsigned /*code_len*/, 2353*7fd79137SRobert Mustacchi Dwarf_Unsigned /*symidx*/, 2354*7fd79137SRobert Mustacchi Dwarf_Signed /*offset_into_exception_tables*/, 2355*7fd79137SRobert Mustacchi Dwarf_Unsigned /*exception_table_symbol*/, 2356*7fd79137SRobert Mustacchi Dwarf_Error* /*error*/); 2357*7fd79137SRobert Mustacchi 2358*7fd79137SRobert Mustacchi Dwarf_P_Fde dwarf_add_fde_inst( 2359*7fd79137SRobert Mustacchi Dwarf_P_Fde /*fde*/, 2360*7fd79137SRobert Mustacchi Dwarf_Small /*op*/, 2361*7fd79137SRobert Mustacchi Dwarf_Unsigned /*val1*/, 2362*7fd79137SRobert Mustacchi Dwarf_Unsigned /*val2*/, 2363*7fd79137SRobert Mustacchi Dwarf_Error* /*error*/); 2364*7fd79137SRobert Mustacchi 2365*7fd79137SRobert Mustacchi /* New September 17, 2009 */ 2366*7fd79137SRobert Mustacchi int dwarf_insert_fde_inst_bytes( 2367*7fd79137SRobert Mustacchi Dwarf_P_Debug /*dbg*/, 2368*7fd79137SRobert Mustacchi Dwarf_P_Fde /*fde*/, 2369*7fd79137SRobert Mustacchi Dwarf_Unsigned /*len*/, 2370*7fd79137SRobert Mustacchi Dwarf_Ptr /*ibytes*/, 2371*7fd79137SRobert Mustacchi Dwarf_Error* /*error*/); 2372*7fd79137SRobert Mustacchi 2373*7fd79137SRobert Mustacchi 2374*7fd79137SRobert Mustacchi Dwarf_P_Fde dwarf_new_fde(Dwarf_P_Debug /*dbg*/, Dwarf_Error* /*error*/); 2375*7fd79137SRobert Mustacchi 2376*7fd79137SRobert Mustacchi Dwarf_P_Fde dwarf_fde_cfa_offset( 2377*7fd79137SRobert Mustacchi Dwarf_P_Fde /*fde*/, 2378*7fd79137SRobert Mustacchi Dwarf_Unsigned /*register_number*/, 2379*7fd79137SRobert Mustacchi Dwarf_Signed /*offset*/, 2380*7fd79137SRobert Mustacchi Dwarf_Error* /*error*/); 2381*7fd79137SRobert Mustacchi 2382*7fd79137SRobert Mustacchi /* die creation & addition routines */ 2383*7fd79137SRobert Mustacchi Dwarf_P_Die dwarf_new_die( 2384*7fd79137SRobert Mustacchi Dwarf_P_Debug /*dbg*/, 2385*7fd79137SRobert Mustacchi Dwarf_Tag /*tag*/, 2386*7fd79137SRobert Mustacchi Dwarf_P_Die /*parent*/, 2387*7fd79137SRobert Mustacchi Dwarf_P_Die /*child*/, 2388*7fd79137SRobert Mustacchi Dwarf_P_Die /*left */, 2389*7fd79137SRobert Mustacchi Dwarf_P_Die /*right*/, 2390*7fd79137SRobert Mustacchi Dwarf_Error* /*error*/); 2391*7fd79137SRobert Mustacchi 2392*7fd79137SRobert Mustacchi Dwarf_Unsigned dwarf_add_die_to_debug( 2393*7fd79137SRobert Mustacchi Dwarf_P_Debug /*dbg*/, 2394*7fd79137SRobert Mustacchi Dwarf_P_Die /*die*/, 2395*7fd79137SRobert Mustacchi Dwarf_Error* /*error*/); 2396*7fd79137SRobert Mustacchi 2397*7fd79137SRobert Mustacchi /* Markers are not written to DWARF2/3/4, they are user 2398*7fd79137SRobert Mustacchi defined and may be used for any purpose. 2399*7fd79137SRobert Mustacchi */ 2400*7fd79137SRobert Mustacchi Dwarf_Unsigned dwarf_add_die_marker( 2401*7fd79137SRobert Mustacchi Dwarf_P_Debug /*dbg*/, 2402*7fd79137SRobert Mustacchi Dwarf_P_Die /*die*/, 2403*7fd79137SRobert Mustacchi Dwarf_Unsigned /*marker*/, 2404*7fd79137SRobert Mustacchi Dwarf_Error * /*error*/); 2405*7fd79137SRobert Mustacchi 2406*7fd79137SRobert Mustacchi Dwarf_Unsigned dwarf_get_die_marker( 2407*7fd79137SRobert Mustacchi Dwarf_P_Debug /*dbg*/, 2408*7fd79137SRobert Mustacchi Dwarf_P_Die /*die*/, 2409*7fd79137SRobert Mustacchi Dwarf_Unsigned * /*marker*/, 2410*7fd79137SRobert Mustacchi Dwarf_Error * /*error*/); 2411*7fd79137SRobert Mustacchi 2412*7fd79137SRobert Mustacchi Dwarf_P_Die dwarf_die_link( 2413*7fd79137SRobert Mustacchi Dwarf_P_Die /*die*/, 2414*7fd79137SRobert Mustacchi Dwarf_P_Die /*parent*/, 2415*7fd79137SRobert Mustacchi Dwarf_P_Die /*child*/, 2416*7fd79137SRobert Mustacchi Dwarf_P_Die /*left*/, 2417*7fd79137SRobert Mustacchi Dwarf_P_Die /*right*/, 2418*7fd79137SRobert Mustacchi Dwarf_Error* /*error*/); 2419*7fd79137SRobert Mustacchi 2420*7fd79137SRobert Mustacchi void dwarf_dealloc_compressed_block( 2421*7fd79137SRobert Mustacchi Dwarf_P_Debug, 2422*7fd79137SRobert Mustacchi void * 2423*7fd79137SRobert Mustacchi ); 2424*7fd79137SRobert Mustacchi 2425*7fd79137SRobert Mustacchi /* Call this passing in return value from dwarf_uncompress_integer_block() 2426*7fd79137SRobert Mustacchi * to free the space the decompression allocated. */ 2427*7fd79137SRobert Mustacchi void dwarf_dealloc_uncompressed_block( 2428*7fd79137SRobert Mustacchi Dwarf_Debug, 2429*7fd79137SRobert Mustacchi void * 2430*7fd79137SRobert Mustacchi ); 2431*7fd79137SRobert Mustacchi 2432*7fd79137SRobert Mustacchi void * dwarf_compress_integer_block( 2433*7fd79137SRobert Mustacchi Dwarf_P_Debug, /* dbg */ 2434*7fd79137SRobert Mustacchi Dwarf_Bool, /* signed==true (or unsigned) */ 2435*7fd79137SRobert Mustacchi Dwarf_Small, /* size of integer units: 8, 16, 32, 64 */ 2436*7fd79137SRobert Mustacchi void*, /* data */ 2437*7fd79137SRobert Mustacchi Dwarf_Unsigned, /* number of elements */ 2438*7fd79137SRobert Mustacchi Dwarf_Unsigned*, /* number of bytes in output block */ 2439*7fd79137SRobert Mustacchi Dwarf_Error* /* error */ 2440*7fd79137SRobert Mustacchi ); 2441*7fd79137SRobert Mustacchi 2442*7fd79137SRobert Mustacchi /* Decode an array of signed leb integers (so of course the 2443*7fd79137SRobert Mustacchi * array is not composed of fixed length values, but is instead 2444*7fd79137SRobert Mustacchi * a sequence of sleb values). 2445*7fd79137SRobert Mustacchi * Returns a DW_DLV_BADADDR on error. 2446*7fd79137SRobert Mustacchi * Otherwise returns a pointer to an array of 32bit integers. 2447*7fd79137SRobert Mustacchi * The signed argument must be non-zero (the decode 2448*7fd79137SRobert Mustacchi * assumes sleb integers in the input data) at this time. 2449*7fd79137SRobert Mustacchi * Size of integer units must be 32 (32 bits each) at this time. 2450*7fd79137SRobert Mustacchi * Number of bytes in block is a byte count (not array count). 2451*7fd79137SRobert Mustacchi * Returns number of units in output block (ie, number of elements 2452*7fd79137SRobert Mustacchi * of the array that the return value points to) thru the argument. 2453*7fd79137SRobert Mustacchi */ 2454*7fd79137SRobert Mustacchi void * dwarf_uncompress_integer_block( 2455*7fd79137SRobert Mustacchi Dwarf_Debug, /* dbg */ 2456*7fd79137SRobert Mustacchi Dwarf_Bool, /* signed==true (or unsigned) */ 2457*7fd79137SRobert Mustacchi Dwarf_Small, /* size of integer units: 8, 16, 32, 64 */ 2458*7fd79137SRobert Mustacchi void*, /* input data */ 2459*7fd79137SRobert Mustacchi Dwarf_Unsigned, /* number of bytes in input */ 2460*7fd79137SRobert Mustacchi Dwarf_Unsigned*, /* number of units in output block */ 2461*7fd79137SRobert Mustacchi Dwarf_Error* /* error */ 2462*7fd79137SRobert Mustacchi ); 2463*7fd79137SRobert Mustacchi 2464*7fd79137SRobert Mustacchi /* Operations to create location expressions. */ 2465*7fd79137SRobert Mustacchi Dwarf_P_Expr dwarf_new_expr(Dwarf_P_Debug /*dbg*/, Dwarf_Error* /*error*/); 2466*7fd79137SRobert Mustacchi 2467*7fd79137SRobert Mustacchi void dwarf_expr_reset( 2468*7fd79137SRobert Mustacchi Dwarf_P_Expr /*expr*/, 2469*7fd79137SRobert Mustacchi Dwarf_Error* /*error*/); 2470*7fd79137SRobert Mustacchi 2471*7fd79137SRobert Mustacchi Dwarf_Unsigned dwarf_add_expr_gen( 2472*7fd79137SRobert Mustacchi Dwarf_P_Expr /*expr*/, 2473*7fd79137SRobert Mustacchi Dwarf_Small /*opcode*/, 2474*7fd79137SRobert Mustacchi Dwarf_Unsigned /*val1*/, 2475*7fd79137SRobert Mustacchi Dwarf_Unsigned /*val2*/, 2476*7fd79137SRobert Mustacchi Dwarf_Error* /*error*/); 2477*7fd79137SRobert Mustacchi 2478*7fd79137SRobert Mustacchi Dwarf_Unsigned dwarf_add_expr_addr( 2479*7fd79137SRobert Mustacchi Dwarf_P_Expr /*expr*/, 2480*7fd79137SRobert Mustacchi Dwarf_Unsigned /*addr*/, 2481*7fd79137SRobert Mustacchi Dwarf_Signed /*sym_index*/, 2482*7fd79137SRobert Mustacchi Dwarf_Error* /*error*/); 2483*7fd79137SRobert Mustacchi 2484*7fd79137SRobert Mustacchi Dwarf_Unsigned dwarf_add_expr_addr_b( 2485*7fd79137SRobert Mustacchi Dwarf_P_Expr /*expr*/, 2486*7fd79137SRobert Mustacchi Dwarf_Unsigned /*addr*/, 2487*7fd79137SRobert Mustacchi Dwarf_Unsigned /*sym_index*/, 2488*7fd79137SRobert Mustacchi Dwarf_Error* /*error*/); 2489*7fd79137SRobert Mustacchi 2490*7fd79137SRobert Mustacchi Dwarf_Unsigned dwarf_expr_current_offset( 2491*7fd79137SRobert Mustacchi Dwarf_P_Expr /*expr*/, 2492*7fd79137SRobert Mustacchi Dwarf_Error* /*error*/); 2493*7fd79137SRobert Mustacchi 2494*7fd79137SRobert Mustacchi Dwarf_Addr dwarf_expr_into_block( 2495*7fd79137SRobert Mustacchi Dwarf_P_Expr /*expr*/, 2496*7fd79137SRobert Mustacchi Dwarf_Unsigned* /*length*/, 2497*7fd79137SRobert Mustacchi Dwarf_Error* /*error*/); 2498*7fd79137SRobert Mustacchi 2499*7fd79137SRobert Mustacchi Dwarf_Unsigned dwarf_add_arange(Dwarf_P_Debug /*dbg*/, 2500*7fd79137SRobert Mustacchi Dwarf_Addr /*begin_address*/, 2501*7fd79137SRobert Mustacchi Dwarf_Unsigned /*length*/, 2502*7fd79137SRobert Mustacchi Dwarf_Signed /*symbol_index*/, 2503*7fd79137SRobert Mustacchi Dwarf_Error* /*error*/); 2504*7fd79137SRobert Mustacchi 2505*7fd79137SRobert Mustacchi Dwarf_Unsigned dwarf_add_arange_b( 2506*7fd79137SRobert Mustacchi Dwarf_P_Debug /*dbg*/, 2507*7fd79137SRobert Mustacchi Dwarf_Addr /*begin_address*/, 2508*7fd79137SRobert Mustacchi Dwarf_Unsigned /*length*/, 2509*7fd79137SRobert Mustacchi Dwarf_Unsigned /*symbol_index*/, 2510*7fd79137SRobert Mustacchi Dwarf_Unsigned /*end_symbol_index*/, 2511*7fd79137SRobert Mustacchi Dwarf_Addr /*offset_from_end_symbol*/, 2512*7fd79137SRobert Mustacchi Dwarf_Error * /*error*/); 2513*7fd79137SRobert Mustacchi 2514*7fd79137SRobert Mustacchi Dwarf_Unsigned dwarf_add_pubname( 2515*7fd79137SRobert Mustacchi Dwarf_P_Debug /*dbg*/, 2516*7fd79137SRobert Mustacchi Dwarf_P_Die /*die*/, 2517*7fd79137SRobert Mustacchi char* /*pubname_name*/, 2518*7fd79137SRobert Mustacchi Dwarf_Error* /*error*/); 2519*7fd79137SRobert Mustacchi 2520*7fd79137SRobert Mustacchi Dwarf_Unsigned dwarf_add_funcname( 2521*7fd79137SRobert Mustacchi Dwarf_P_Debug /*dbg*/, 2522*7fd79137SRobert Mustacchi Dwarf_P_Die /*die*/, 2523*7fd79137SRobert Mustacchi char* /*func_name*/, 2524*7fd79137SRobert Mustacchi Dwarf_Error* /*error*/); 2525*7fd79137SRobert Mustacchi 2526*7fd79137SRobert Mustacchi Dwarf_Unsigned dwarf_add_typename( 2527*7fd79137SRobert Mustacchi Dwarf_P_Debug /*dbg*/, 2528*7fd79137SRobert Mustacchi Dwarf_P_Die /*die*/, 2529*7fd79137SRobert Mustacchi char* /*type_name*/, 2530*7fd79137SRobert Mustacchi Dwarf_Error* /*error*/); 2531*7fd79137SRobert Mustacchi 2532*7fd79137SRobert Mustacchi Dwarf_Unsigned dwarf_add_varname( 2533*7fd79137SRobert Mustacchi Dwarf_P_Debug /*dbg*/, 2534*7fd79137SRobert Mustacchi Dwarf_P_Die /*die*/, 2535*7fd79137SRobert Mustacchi char* /*var_name*/, 2536*7fd79137SRobert Mustacchi Dwarf_Error* /*error*/); 2537*7fd79137SRobert Mustacchi 2538*7fd79137SRobert Mustacchi Dwarf_Unsigned dwarf_add_weakname( 2539*7fd79137SRobert Mustacchi Dwarf_P_Debug /*dbg*/, 2540*7fd79137SRobert Mustacchi Dwarf_P_Die /*die*/, 2541*7fd79137SRobert Mustacchi char* /*weak_name*/, 2542*7fd79137SRobert Mustacchi Dwarf_Error* /*error*/); 2543*7fd79137SRobert Mustacchi 2544*7fd79137SRobert Mustacchi /* .debug_macinfo producer functions 2545*7fd79137SRobert Mustacchi Functions must be called in right order: the section is output 2546*7fd79137SRobert Mustacchi In the order these are presented. 2547*7fd79137SRobert Mustacchi */ 2548*7fd79137SRobert Mustacchi int dwarf_def_macro(Dwarf_P_Debug /*dbg*/, 2549*7fd79137SRobert Mustacchi Dwarf_Unsigned /*line*/, 2550*7fd79137SRobert Mustacchi char * /*macname, with (arglist), no space before (*/, 2551*7fd79137SRobert Mustacchi char * /*macvalue*/, 2552*7fd79137SRobert Mustacchi Dwarf_Error* /*error*/); 2553*7fd79137SRobert Mustacchi 2554*7fd79137SRobert Mustacchi int dwarf_undef_macro(Dwarf_P_Debug /*dbg*/, 2555*7fd79137SRobert Mustacchi Dwarf_Unsigned /*line*/, 2556*7fd79137SRobert Mustacchi char * /*macname, no arglist, of course*/, 2557*7fd79137SRobert Mustacchi Dwarf_Error* /*error*/); 2558*7fd79137SRobert Mustacchi 2559*7fd79137SRobert Mustacchi int dwarf_start_macro_file(Dwarf_P_Debug /*dbg*/, 2560*7fd79137SRobert Mustacchi Dwarf_Unsigned /*fileindex*/, 2561*7fd79137SRobert Mustacchi Dwarf_Unsigned /*linenumber*/, 2562*7fd79137SRobert Mustacchi Dwarf_Error* /*error*/); 2563*7fd79137SRobert Mustacchi 2564*7fd79137SRobert Mustacchi int dwarf_end_macro_file(Dwarf_P_Debug /*dbg*/, 2565*7fd79137SRobert Mustacchi Dwarf_Error* /*error*/); 2566*7fd79137SRobert Mustacchi 2567*7fd79137SRobert Mustacchi int dwarf_vendor_ext(Dwarf_P_Debug /*dbg*/, 2568*7fd79137SRobert Mustacchi Dwarf_Unsigned /*constant*/, 2569*7fd79137SRobert Mustacchi char * /*string*/, 2570*7fd79137SRobert Mustacchi Dwarf_Error* /*error*/); 2571*7fd79137SRobert Mustacchi 2572*7fd79137SRobert Mustacchi /* end macinfo producer functions */ 2573*7fd79137SRobert Mustacchi 2574*7fd79137SRobert Mustacchi int dwarf_attr_offset(Dwarf_Die /*die*/, 2575*7fd79137SRobert Mustacchi Dwarf_Attribute /*attr of above die*/, 2576*7fd79137SRobert Mustacchi Dwarf_Off * /*returns offset thru this ptr */, 2577*7fd79137SRobert Mustacchi Dwarf_Error * /*error*/); 2578*7fd79137SRobert Mustacchi 2579*7fd79137SRobert Mustacchi /* This is a hack so clients can verify offsets. 2580*7fd79137SRobert Mustacchi Added April 2005 so that debugger can detect broken offsets 2581*7fd79137SRobert Mustacchi (which happened in an IRIX executable larger than 2GB 2582*7fd79137SRobert Mustacchi with MIPSpro 7.3.1.3 toolchain.). 2583*7fd79137SRobert Mustacchi */ 2584*7fd79137SRobert Mustacchi int 2585*7fd79137SRobert Mustacchi dwarf_get_section_max_offsets(Dwarf_Debug /*dbg*/, 2586*7fd79137SRobert Mustacchi Dwarf_Unsigned * /*debug_info_size*/, 2587*7fd79137SRobert Mustacchi Dwarf_Unsigned * /*debug_abbrev_size*/, 2588*7fd79137SRobert Mustacchi Dwarf_Unsigned * /*debug_line_size*/, 2589*7fd79137SRobert Mustacchi Dwarf_Unsigned * /*debug_loc_size*/, 2590*7fd79137SRobert Mustacchi Dwarf_Unsigned * /*debug_aranges_size*/, 2591*7fd79137SRobert Mustacchi Dwarf_Unsigned * /*debug_macinfo_size*/, 2592*7fd79137SRobert Mustacchi Dwarf_Unsigned * /*debug_pubnames_size*/, 2593*7fd79137SRobert Mustacchi Dwarf_Unsigned * /*debug_str_size*/, 2594*7fd79137SRobert Mustacchi Dwarf_Unsigned * /*debug_frame_size*/, 2595*7fd79137SRobert Mustacchi Dwarf_Unsigned * /*debug_ranges_size*/, 2596*7fd79137SRobert Mustacchi Dwarf_Unsigned * /*debug_pubtypes_size*/); 2597*7fd79137SRobert Mustacchi 2598*7fd79137SRobert Mustacchi /* Multiple releases spelled 'initial' as 'inital' . 2599*7fd79137SRobert Mustacchi The 'inital' spelling should not be used. */ 2600*7fd79137SRobert Mustacchi Dwarf_Half dwarf_set_frame_rule_inital_value(Dwarf_Debug /*dbg*/, 2601*7fd79137SRobert Mustacchi Dwarf_Half /*value*/); 2602*7fd79137SRobert Mustacchi /* Additional interface with correct 'initial' spelling. */ 2603*7fd79137SRobert Mustacchi /* It is likely you will want to call the following 5 functions 2604*7fd79137SRobert Mustacchi before accessing any frame information. All are useful 2605*7fd79137SRobert Mustacchi to tailor handling of pseudo-registers needed to turn 2606*7fd79137SRobert Mustacchi frame operation references into simpler forms and to 2607*7fd79137SRobert Mustacchi reflect ABI specific data. Of course altering libdwarf.h 2608*7fd79137SRobert Mustacchi and dwarf.h allow the same capabilities, but such header changes 2609*7fd79137SRobert Mustacchi do not let one change these values at runtime. */ 2610*7fd79137SRobert Mustacchi Dwarf_Half dwarf_set_frame_rule_initial_value(Dwarf_Debug /*dbg*/, 2611*7fd79137SRobert Mustacchi Dwarf_Half /*value*/); 2612*7fd79137SRobert Mustacchi Dwarf_Half dwarf_set_frame_rule_table_size(Dwarf_Debug /*dbg*/, 2613*7fd79137SRobert Mustacchi Dwarf_Half /*value*/); 2614*7fd79137SRobert Mustacchi Dwarf_Half dwarf_set_frame_cfa_value(Dwarf_Debug /*dbg*/, 2615*7fd79137SRobert Mustacchi Dwarf_Half /*value*/); 2616*7fd79137SRobert Mustacchi Dwarf_Half dwarf_set_frame_same_value(Dwarf_Debug /*dbg*/, 2617*7fd79137SRobert Mustacchi Dwarf_Half /*value*/); 2618*7fd79137SRobert Mustacchi Dwarf_Half dwarf_set_frame_undefined_value(Dwarf_Debug /*dbg*/, 2619*7fd79137SRobert Mustacchi Dwarf_Half /*value*/); 2620*7fd79137SRobert Mustacchi 2621*7fd79137SRobert Mustacchi /* As of April 27, 2009, this version with no diepointer is 2622*7fd79137SRobert Mustacchi obsolete though supported. Use dwarf_get_ranges_a() instead. */ 2623*7fd79137SRobert Mustacchi int dwarf_get_ranges(Dwarf_Debug /*dbg*/, 2624*7fd79137SRobert Mustacchi Dwarf_Off /*rangesoffset*/, 2625*7fd79137SRobert Mustacchi Dwarf_Ranges ** /*rangesbuf*/, 2626*7fd79137SRobert Mustacchi Dwarf_Signed * /*listlen*/, 2627*7fd79137SRobert Mustacchi Dwarf_Unsigned * /*bytecount*/, 2628*7fd79137SRobert Mustacchi Dwarf_Error * /*error*/); 2629*7fd79137SRobert Mustacchi 2630*7fd79137SRobert Mustacchi /* This adds the address_size argument. New April 27, 2009 */ 2631*7fd79137SRobert Mustacchi int dwarf_get_ranges_a(Dwarf_Debug /*dbg*/, 2632*7fd79137SRobert Mustacchi Dwarf_Off /*rangesoffset*/, 2633*7fd79137SRobert Mustacchi Dwarf_Die /* diepointer */, 2634*7fd79137SRobert Mustacchi Dwarf_Ranges ** /*rangesbuf*/, 2635*7fd79137SRobert Mustacchi Dwarf_Signed * /*listlen*/, 2636*7fd79137SRobert Mustacchi Dwarf_Unsigned * /*bytecount*/, 2637*7fd79137SRobert Mustacchi Dwarf_Error * /*error*/); 2638*7fd79137SRobert Mustacchi 2639*7fd79137SRobert Mustacchi void dwarf_ranges_dealloc(Dwarf_Debug /*dbg*/, 2640*7fd79137SRobert Mustacchi Dwarf_Ranges * /*rangesbuf*/, 2641*7fd79137SRobert Mustacchi Dwarf_Signed /*rangecount*/); 2642*7fd79137SRobert Mustacchi 2643*7fd79137SRobert Mustacchi /* The harmless error list is a circular buffer of 2644*7fd79137SRobert Mustacchi errors we note but which do not stop us from processing 2645*7fd79137SRobert Mustacchi the object. Created so dwarfdump or other tools 2646*7fd79137SRobert Mustacchi can report such inconsequential errors without causing 2647*7fd79137SRobert Mustacchi anything to stop early. */ 2648*7fd79137SRobert Mustacchi #define DW_HARMLESS_ERROR_CIRCULAR_LIST_DEFAULT_SIZE 4 2649*7fd79137SRobert Mustacchi #define DW_HARMLESS_ERROR_MSG_STRING_SIZE 200 2650*7fd79137SRobert Mustacchi /* User code supplies size of array of pointers errmsg_ptrs_array 2651*7fd79137SRobert Mustacchi in count and the array of pointers (the pointers themselves 2652*7fd79137SRobert Mustacchi need not be initialized). 2653*7fd79137SRobert Mustacchi The pointers returned in the array of pointers 2654*7fd79137SRobert Mustacchi are invalidated by ANY call to libdwarf. 2655*7fd79137SRobert Mustacchi Use them before making another libdwarf call! 2656*7fd79137SRobert Mustacchi The array of string pointers passed in always has 2657*7fd79137SRobert Mustacchi a final null pointer, so if there are N pointers the 2658*7fd79137SRobert Mustacchi and M actual strings, then MIN(M,N-1) pointers are 2659*7fd79137SRobert Mustacchi set to point to error strings. The array of pointers 2660*7fd79137SRobert Mustacchi to strings always terminates with a NULL pointer. 2661*7fd79137SRobert Mustacchi If 'count' is passed in zero then errmsg_ptrs_array 2662*7fd79137SRobert Mustacchi is not touched. 2663*7fd79137SRobert Mustacchi 2664*7fd79137SRobert Mustacchi The function returns DW_DLV_NO_ENTRY if no harmless errors 2665*7fd79137SRobert Mustacchi were noted so far. Returns DW_DLV_OK if there are errors. 2666*7fd79137SRobert Mustacchi Never returns DW_DLV_ERROR. 2667*7fd79137SRobert Mustacchi 2668*7fd79137SRobert Mustacchi Each call empties the error list (discarding all current entries). 2669*7fd79137SRobert Mustacchi If newerr_count is non-NULL the count of harmless errors 2670*7fd79137SRobert Mustacchi since the last call is returned through the pointer 2671*7fd79137SRobert Mustacchi (some may have been discarded or not returned, it is a circular 2672*7fd79137SRobert Mustacchi list...). 2673*7fd79137SRobert Mustacchi If DW_DLV_NO_ENTRY is returned none of the arguments 2674*7fd79137SRobert Mustacchi here are touched or used. 2675*7fd79137SRobert Mustacchi */ 2676*7fd79137SRobert Mustacchi int dwarf_get_harmless_error_list(Dwarf_Debug /*dbg*/, 2677*7fd79137SRobert Mustacchi unsigned /*count*/, 2678*7fd79137SRobert Mustacchi const char ** /*errmsg_ptrs_array*/, 2679*7fd79137SRobert Mustacchi unsigned * /*newerr_count*/); 2680*7fd79137SRobert Mustacchi 2681*7fd79137SRobert Mustacchi /* Insertion is only for testing the harmless error code, it is not 2682*7fd79137SRobert Mustacchi necessarily useful otherwise. */ 2683*7fd79137SRobert Mustacchi void dwarf_insert_harmless_error(Dwarf_Debug /*dbg*/, 2684*7fd79137SRobert Mustacchi char * /*newerror*/); 2685*7fd79137SRobert Mustacchi 2686*7fd79137SRobert Mustacchi /* The size of the circular list of strings may be set 2687*7fd79137SRobert Mustacchi and reset as needed. If it is shortened excess 2688*7fd79137SRobert Mustacchi messages are simply dropped. It returns the previous 2689*7fd79137SRobert Mustacchi size. If zero passed in the size is unchanged 2690*7fd79137SRobert Mustacchi and it simply returns the current size */ 2691*7fd79137SRobert Mustacchi unsigned dwarf_set_harmless_error_list_size(Dwarf_Debug /*dbg*/, 2692*7fd79137SRobert Mustacchi unsigned /*maxcount*/); 2693*7fd79137SRobert Mustacchi /* The harmless error strings (if any) are freed when the dbg 2694*7fd79137SRobert Mustacchi is dwarf_finish()ed. */ 2695*7fd79137SRobert Mustacchi 2696*7fd79137SRobert Mustacchi /* When the val_in is known these dwarf_get_TAG_name (etc) 2697*7fd79137SRobert Mustacchi functions return the string corresponding to the val_in passed in 2698*7fd79137SRobert Mustacchi through the pointer s_out and the value returned is DW_DLV_OK. 2699*7fd79137SRobert Mustacchi The strings are in static storage 2700*7fd79137SRobert Mustacchi and must not be freed. 2701*7fd79137SRobert Mustacchi If DW_DLV_NO_ENTRY is returned the val_in is not known and 2702*7fd79137SRobert Mustacchi *s_out is not set. DW_DLV_ERROR is never returned.*/ 2703*7fd79137SRobert Mustacchi 2704*7fd79137SRobert Mustacchi extern int dwarf_get_TAG_name(unsigned int /*val_in*/, const char ** /*s_out */); 2705*7fd79137SRobert Mustacchi extern int dwarf_get_children_name(unsigned int /*val_in*/, const char ** /*s_out */); 2706*7fd79137SRobert Mustacchi extern int dwarf_get_FORM_name(unsigned int /*val_in*/, const char ** /*s_out */); 2707*7fd79137SRobert Mustacchi extern int dwarf_get_AT_name(unsigned int /*val_in*/, const char ** /*s_out */); 2708*7fd79137SRobert Mustacchi extern int dwarf_get_OP_name(unsigned int /*val_in*/, const char ** /*s_out */); 2709*7fd79137SRobert Mustacchi extern int dwarf_get_ATE_name(unsigned int /*val_in*/, const char ** /*s_out */); 2710*7fd79137SRobert Mustacchi extern int dwarf_get_DS_name(unsigned int /*val_in*/, const char ** /*s_out */); 2711*7fd79137SRobert Mustacchi extern int dwarf_get_END_name(unsigned int /*val_in*/, const char ** /*s_out */); 2712*7fd79137SRobert Mustacchi extern int dwarf_get_ATCF_name(unsigned int /*val_in*/, const char ** /*s_out */); 2713*7fd79137SRobert Mustacchi extern int dwarf_get_ACCESS_name(unsigned int /*val_in*/, const char ** /*s_out */); 2714*7fd79137SRobert Mustacchi extern int dwarf_get_VIS_name(unsigned int /*val_in*/, const char ** /*s_out */); 2715*7fd79137SRobert Mustacchi extern int dwarf_get_VIRTUALITY_name(unsigned int /*val_in*/, const char ** /*s_out */); 2716*7fd79137SRobert Mustacchi extern int dwarf_get_LANG_name(unsigned int /*val_in*/, const char ** /*s_out */); 2717*7fd79137SRobert Mustacchi extern int dwarf_get_ID_name(unsigned int /*val_in*/, const char ** /*s_out */); 2718*7fd79137SRobert Mustacchi extern int dwarf_get_CC_name(unsigned int /*val_in*/, const char ** /*s_out */); 2719*7fd79137SRobert Mustacchi extern int dwarf_get_INL_name(unsigned int /*val_in*/, const char ** /*s_out */); 2720*7fd79137SRobert Mustacchi extern int dwarf_get_ORD_name(unsigned int /*val_in*/, const char ** /*s_out */); 2721*7fd79137SRobert Mustacchi extern int dwarf_get_DSC_name(unsigned int /*val_in*/, const char ** /*s_out */); 2722*7fd79137SRobert Mustacchi extern int dwarf_get_LNS_name(unsigned int /*val_in*/, const char ** /*s_out */); 2723*7fd79137SRobert Mustacchi extern int dwarf_get_LNE_name(unsigned int /*val_in*/, const char ** /*s_out */); 2724*7fd79137SRobert Mustacchi extern int dwarf_get_MACINFO_name(unsigned int /*val_in*/, const char ** /*s_out */); 2725*7fd79137SRobert Mustacchi extern int dwarf_get_CFA_name(unsigned int /*val_in*/, const char ** /*s_out */); 2726*7fd79137SRobert Mustacchi extern int dwarf_get_EH_name(unsigned int /*val_in*/, const char ** /*s_out */); 2727*7fd79137SRobert Mustacchi extern int dwarf_get_FRAME_name(unsigned int /*val_in*/, const char ** /*s_out */); 2728*7fd79137SRobert Mustacchi extern int dwarf_get_CHILDREN_name(unsigned int /*val_in*/, const char ** /*s_out */); 2729*7fd79137SRobert Mustacchi extern int dwarf_get_ADDR_name(unsigned int /*val_in*/, const char ** /*s_out */); 2730*7fd79137SRobert Mustacchi 2731*7fd79137SRobert Mustacchi #ifdef __cplusplus 2732*7fd79137SRobert Mustacchi } 2733*7fd79137SRobert Mustacchi #endif 2734*7fd79137SRobert Mustacchi #endif /* _LIBDWARF_H */ 2735*7fd79137SRobert Mustacchi 2736*7fd79137SRobert Mustacchi 2737