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