149d3bc91SRichard Lowe /* 249d3bc91SRichard Lowe 3*07dc1947SRichard Lowe Copyright (C) 2000-2010 Silicon Graphics, Inc. All Rights Reserved. 4*07dc1947SRichard Lowe Portions Copyright 2007-2010 Sun Microsystems, Inc. All rights reserved. 5*07dc1947SRichard Lowe Portions Copyright 2008-2010 David Anderson. All rights reserved. 6*07dc1947SRichard Lowe Portions Copyright 2008-2010 Arxan Technologies, Inc. All rights reserved. 749d3bc91SRichard Lowe 849d3bc91SRichard Lowe This program is free software; you can redistribute it and/or modify it 949d3bc91SRichard Lowe under the terms of version 2.1 of the GNU Lesser General Public License 1049d3bc91SRichard Lowe as published by the Free Software Foundation. 1149d3bc91SRichard Lowe 1249d3bc91SRichard Lowe This program is distributed in the hope that it would be useful, but 1349d3bc91SRichard Lowe WITHOUT ANY WARRANTY; without even the implied warranty of 1449d3bc91SRichard Lowe MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 1549d3bc91SRichard Lowe 1649d3bc91SRichard Lowe Further, this software is distributed without any warranty that it is 1749d3bc91SRichard Lowe free of the rightful claim of any third person regarding infringement 1849d3bc91SRichard Lowe or the like. Any license provided herein, whether implied or 1949d3bc91SRichard Lowe otherwise, applies only to this software file. Patent licenses, if 2049d3bc91SRichard Lowe any, provided herein do not apply to combinations of this program with 2149d3bc91SRichard Lowe other software, or any other product whatsoever. 2249d3bc91SRichard Lowe 2349d3bc91SRichard Lowe You should have received a copy of the GNU Lesser General Public 2449d3bc91SRichard Lowe License along with this program; if not, write the Free Software 25*07dc1947SRichard Lowe Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston MA 02110-1301, 2649d3bc91SRichard Lowe USA. 2749d3bc91SRichard Lowe 28*07dc1947SRichard Lowe Contact information: Silicon Graphics, Inc., 1500 Crittenden Lane, 2949d3bc91SRichard Lowe Mountain View, CA 94043, or: 3049d3bc91SRichard Lowe 3149d3bc91SRichard Lowe http://www.sgi.com 3249d3bc91SRichard Lowe 3349d3bc91SRichard Lowe For further information regarding this notice, see: 3449d3bc91SRichard Lowe 3549d3bc91SRichard Lowe http://oss.sgi.com/projects/GenInfo/NoticeExplan 3649d3bc91SRichard Lowe 3749d3bc91SRichard Lowe */ 3849d3bc91SRichard Lowe 3949d3bc91SRichard Lowe 4049d3bc91SRichard Lowe #ifndef _LIBDWARF_H 4149d3bc91SRichard Lowe #define _LIBDWARF_H 4249d3bc91SRichard Lowe #ifdef __cplusplus 4349d3bc91SRichard Lowe extern "C" { 4449d3bc91SRichard Lowe #endif 4549d3bc91SRichard Lowe /* 4649d3bc91SRichard Lowe libdwarf.h 47*07dc1947SRichard Lowe $Revision: #9 $ $Date: 2008/01/17 $ 4849d3bc91SRichard Lowe 4949d3bc91SRichard Lowe For libdwarf producers and consumers 5049d3bc91SRichard Lowe 5149d3bc91SRichard Lowe The interface is defined as having 8-byte signed and unsigned 5249d3bc91SRichard Lowe values so it can handle 64-or-32bit target on 64-or-32bit host. 5349d3bc91SRichard Lowe Addr is the native size: it represents pointers on 5449d3bc91SRichard Lowe the host machine (not the target!). 5549d3bc91SRichard Lowe 5649d3bc91SRichard Lowe This contains declarations for types and all producer 5749d3bc91SRichard Lowe and consumer functions. 5849d3bc91SRichard Lowe 5949d3bc91SRichard Lowe Function declarations are written on a single line each here 6049d3bc91SRichard Lowe so one can use grep to each declaration in its entirety. 6149d3bc91SRichard Lowe The declarations are a little harder to read this way, but... 6249d3bc91SRichard Lowe 6349d3bc91SRichard Lowe */ 6449d3bc91SRichard Lowe 6549d3bc91SRichard Lowe struct Elf; 6649d3bc91SRichard Lowe typedef struct Elf* dwarf_elf_handle; 6749d3bc91SRichard Lowe 68*07dc1947SRichard Lowe /* To enable printing with printf regardless of the 69*07dc1947SRichard Lowe actual underlying data type, we define the DW_PR_xxx macros. */ 7049d3bc91SRichard Lowe #if (_MIPS_SZLONG == 64) 7149d3bc91SRichard Lowe /* Special case for MIPS, so -64 (LP64) build gets simple -long-. 7249d3bc91SRichard Lowe Non-MIPS LP64 or ILP64 environments should probably ensure 7349d3bc91SRichard Lowe _MIPS_SZLONG set to 64 everywhere this header is #included. 7449d3bc91SRichard Lowe */ 7549d3bc91SRichard Lowe typedef int Dwarf_Bool; /* boolean type */ 7649d3bc91SRichard Lowe typedef unsigned long Dwarf_Off; /* 4 or 8 byte file offset */ 7749d3bc91SRichard Lowe typedef unsigned long Dwarf_Unsigned; /* 4 or 8 byte unsigned value */ 7849d3bc91SRichard Lowe typedef unsigned short Dwarf_Half; /* 2 byte unsigned value */ 7949d3bc91SRichard Lowe typedef unsigned char Dwarf_Small; /* 1 byte unsigned value */ 8049d3bc91SRichard Lowe typedef signed long Dwarf_Signed; /* 4 or 8 byte signed value */ 8149d3bc91SRichard Lowe typedef unsigned long Dwarf_Addr; /* target memory address */ 82*07dc1947SRichard Lowe #define DW_PR_DUx "lx" 83*07dc1947SRichard Lowe #define DW_PR_DSx "lx" 84*07dc1947SRichard Lowe #define DW_PR_DUu "lu" 85*07dc1947SRichard Lowe #define DW_PR_DSd "ld" 86*07dc1947SRichard Lowe 8749d3bc91SRichard Lowe #else /* 32-bit */ 8849d3bc91SRichard Lowe /* This is for ILP32, allowing i/o of 64bit dwarf info. 8949d3bc91SRichard Lowe Also should be fine for LP64 and ILP64 cases. 9049d3bc91SRichard Lowe */ 9149d3bc91SRichard Lowe typedef int Dwarf_Bool; /* boolean type */ 9249d3bc91SRichard Lowe typedef unsigned long long Dwarf_Off; /* 8 byte file offset */ 9349d3bc91SRichard Lowe typedef unsigned long long Dwarf_Unsigned; /* 8 byte unsigned value*/ 9449d3bc91SRichard Lowe typedef unsigned short Dwarf_Half; /* 2 byte unsigned value */ 9549d3bc91SRichard Lowe typedef unsigned char Dwarf_Small; /* 1 byte unsigned value */ 9649d3bc91SRichard Lowe typedef signed long long Dwarf_Signed; /* 8 byte signed value */ 9749d3bc91SRichard Lowe typedef unsigned long long Dwarf_Addr; /* target memory address */ 98*07dc1947SRichard Lowe #define DW_PR_DUx "llx" 99*07dc1947SRichard Lowe #define DW_PR_DSx "llx" 100*07dc1947SRichard Lowe #define DW_PR_DUu "llu" 101*07dc1947SRichard Lowe #define DW_PR_DSd "lld" 10249d3bc91SRichard Lowe #endif 103*07dc1947SRichard Lowe #ifdef HAVE_NONSTANDARD_PRINTF_64_FORMAT 104*07dc1947SRichard Lowe /* Windows does not use std C formatting, so allow it. */ 105*07dc1947SRichard Lowe #undef DW_PR_DUx 106*07dc1947SRichard Lowe #undef DW_PR_DSx 107*07dc1947SRichard Lowe #undef DW_PR_DUu 108*07dc1947SRichard Lowe #undef DW_PR_DSd 109*07dc1947SRichard Lowe #define DW_PR_DUx "I64x" 110*07dc1947SRichard Lowe #define DW_PR_DSx "I64x" 111*07dc1947SRichard Lowe #define DW_PR_DUu "I64u" 112*07dc1947SRichard Lowe #define DW_PR_DSd "I64d" 113*07dc1947SRichard Lowe #endif /* HAVE_NONSTANDARD_FORMAT */ 114*07dc1947SRichard Lowe 11549d3bc91SRichard Lowe typedef void* Dwarf_Ptr; /* host machine pointer */ 11649d3bc91SRichard Lowe 117*07dc1947SRichard Lowe /* Used for DW_FORM_ref_sig8. It is not a string, it 118*07dc1947SRichard Lowe is 8 bytes of a signature one would use to find 119*07dc1947SRichard Lowe a type unit. See dwarf_formsig8() 120*07dc1947SRichard Lowe */ 121*07dc1947SRichard Lowe typedef struct { 122*07dc1947SRichard Lowe char signature[8]; 123*07dc1947SRichard Lowe } Dwarf_Sig8; 124*07dc1947SRichard Lowe 12549d3bc91SRichard Lowe /* Contains info on an uninterpreted block of data 12649d3bc91SRichard Lowe */ 12749d3bc91SRichard Lowe typedef struct { 12849d3bc91SRichard Lowe Dwarf_Unsigned bl_len; /* length of block */ 12949d3bc91SRichard Lowe Dwarf_Ptr bl_data; /* uninterpreted data */ 13049d3bc91SRichard Lowe Dwarf_Small bl_from_loclist; /*non-0 if loclist, else debug_info*/ 13149d3bc91SRichard Lowe Dwarf_Unsigned bl_section_offset; /* Section (not CU) offset 13249d3bc91SRichard Lowe which 'data' comes from. */ 13349d3bc91SRichard Lowe } Dwarf_Block; 13449d3bc91SRichard Lowe 13549d3bc91SRichard Lowe 13649d3bc91SRichard Lowe /* location record 13749d3bc91SRichard Lowe */ 13849d3bc91SRichard Lowe typedef struct { 13949d3bc91SRichard Lowe Dwarf_Small lr_atom; /* location operation */ 14049d3bc91SRichard Lowe Dwarf_Unsigned lr_number; /* operand */ 14149d3bc91SRichard Lowe Dwarf_Unsigned lr_number2; /* for OP_BREGx */ 14249d3bc91SRichard Lowe Dwarf_Unsigned lr_offset; /* offset in locexpr for OP_BRA etc */ 14349d3bc91SRichard Lowe } Dwarf_Loc; 14449d3bc91SRichard Lowe 14549d3bc91SRichard Lowe 14649d3bc91SRichard Lowe /* location description 14749d3bc91SRichard Lowe */ 14849d3bc91SRichard Lowe typedef struct { 14949d3bc91SRichard Lowe Dwarf_Addr ld_lopc; /* beginning of active range */ 15049d3bc91SRichard Lowe Dwarf_Addr ld_hipc; /* end of active range */ 15149d3bc91SRichard Lowe Dwarf_Half ld_cents; /* count of location records */ 15249d3bc91SRichard Lowe Dwarf_Loc* ld_s; /* pointer to list of same */ 15349d3bc91SRichard Lowe Dwarf_Small ld_from_loclist; 15449d3bc91SRichard Lowe /* non-0 if loclist, else debug_info*/ 15549d3bc91SRichard Lowe 15649d3bc91SRichard Lowe Dwarf_Unsigned ld_section_offset; /* Section (not CU) offset 15749d3bc91SRichard Lowe where loc-expr begins*/ 15849d3bc91SRichard Lowe } Dwarf_Locdesc; 15949d3bc91SRichard Lowe 160*07dc1947SRichard Lowe /* First appears in DWARF3. 161*07dc1947SRichard Lowe The dwr_addr1/addr2 data is either an offset (DW_RANGES_ENTRY) 162*07dc1947SRichard Lowe or an address (dwr_addr2 in DW_RANGES_ADDRESS_SELECTION) or 163*07dc1947SRichard Lowe both are zero (DW_RANGES_END). 164*07dc1947SRichard Lowe */ 165*07dc1947SRichard Lowe enum Dwarf_Ranges_Entry_Type { DW_RANGES_ENTRY, 166*07dc1947SRichard Lowe DW_RANGES_ADDRESS_SELECTION, 167*07dc1947SRichard Lowe DW_RANGES_END }; 168*07dc1947SRichard Lowe typedef struct { 169*07dc1947SRichard Lowe Dwarf_Addr dwr_addr1; 170*07dc1947SRichard Lowe Dwarf_Addr dwr_addr2; 171*07dc1947SRichard Lowe enum Dwarf_Ranges_Entry_Type dwr_type; 172*07dc1947SRichard Lowe } Dwarf_Ranges; 173*07dc1947SRichard Lowe 17449d3bc91SRichard Lowe /* Frame description instructions expanded. 17549d3bc91SRichard Lowe */ 17649d3bc91SRichard Lowe typedef struct { 17749d3bc91SRichard Lowe Dwarf_Small fp_base_op; 17849d3bc91SRichard Lowe Dwarf_Small fp_extended_op; 17949d3bc91SRichard Lowe Dwarf_Half fp_register; 180*07dc1947SRichard Lowe 181*07dc1947SRichard Lowe /* Value may be signed, depends on op. 182*07dc1947SRichard Lowe Any applicable data_alignment_factor has 183*07dc1947SRichard Lowe not been applied, this is the raw offset. */ 18449d3bc91SRichard Lowe Dwarf_Unsigned fp_offset; 18549d3bc91SRichard Lowe Dwarf_Off fp_instr_offset; 186*07dc1947SRichard Lowe } Dwarf_Frame_Op; /* DWARF2 */ 18749d3bc91SRichard Lowe 18849d3bc91SRichard Lowe typedef struct { 189*07dc1947SRichard Lowe Dwarf_Small fp_base_op; 190*07dc1947SRichard Lowe Dwarf_Small fp_extended_op; 191*07dc1947SRichard Lowe Dwarf_Half fp_register; 192*07dc1947SRichard Lowe 193*07dc1947SRichard Lowe /* Value may be signed, depends on op. 194*07dc1947SRichard Lowe Any applicable data_alignment_factor has 195*07dc1947SRichard Lowe not been applied, this is the raw offset. */ 196*07dc1947SRichard Lowe Dwarf_Unsigned fp_offset_or_block_len; 197*07dc1947SRichard Lowe Dwarf_Small *fp_expr_block; 198*07dc1947SRichard Lowe 199*07dc1947SRichard Lowe Dwarf_Off fp_instr_offset; 200*07dc1947SRichard Lowe } Dwarf_Frame_Op3; /* DWARF3 and DWARF2 compatible */ 201*07dc1947SRichard Lowe 202*07dc1947SRichard Lowe /* ***IMPORTANT NOTE, TARGET DEPENDENCY **** 203*07dc1947SRichard Lowe DW_REG_TABLE_SIZE must be at least as large as 204*07dc1947SRichard Lowe the number of registers 205*07dc1947SRichard Lowe (DW_FRAME_LAST_REG_NUM) as defined in dwarf.h 206*07dc1947SRichard Lowe Preferably identical to DW_FRAME_LAST_REG_NUM. 207*07dc1947SRichard Lowe Ensure [0-DW_REG_TABLE_SIZE] does not overlap 208*07dc1947SRichard Lowe DW_FRAME_UNDEFINED_VAL or DW_FRAME_SAME_VAL. 209*07dc1947SRichard Lowe Also ensure DW_FRAME_REG_INITIAL_VALUE is set to what 210*07dc1947SRichard Lowe is appropriate to your cpu. 211*07dc1947SRichard Lowe For various CPUs DW_FRAME_UNDEFINED_VAL is correct 212*07dc1947SRichard Lowe as the value for DW_FRAME_REG_INITIAL_VALUE. 213*07dc1947SRichard Lowe 214*07dc1947SRichard Lowe For consumer apps, this can be set dynamically: see 215*07dc1947SRichard Lowe dwarf_set_frame_rule_table_size(); 216*07dc1947SRichard Lowe */ 217*07dc1947SRichard Lowe #ifndef DW_REG_TABLE_SIZE 218*07dc1947SRichard Lowe #define DW_REG_TABLE_SIZE 66 219*07dc1947SRichard Lowe #endif 220*07dc1947SRichard Lowe 221*07dc1947SRichard Lowe /* For MIPS, DW_FRAME_SAME_VAL is the correct default value 222*07dc1947SRichard Lowe for a frame register value. For other CPUS another value 223*07dc1947SRichard Lowe may be better, such as DW_FRAME_UNDEFINED_VAL. 224*07dc1947SRichard Lowe See dwarf_set_frame_rule_table_size 225*07dc1947SRichard Lowe */ 226*07dc1947SRichard Lowe #ifndef DW_FRAME_REG_INITIAL_VALUE 227*07dc1947SRichard Lowe #define DW_FRAME_REG_INITIAL_VALUE DW_FRAME_SAME_VAL 228*07dc1947SRichard Lowe #endif 229*07dc1947SRichard Lowe 230*07dc1947SRichard Lowe /* Taken as meaning 'undefined value', this is not 231*07dc1947SRichard Lowe a column or register number. 232*07dc1947SRichard Lowe Only present at libdwarf runtime in the consumer 233*07dc1947SRichard Lowe interfaces. Never on disk. 234*07dc1947SRichard Lowe DW_FRAME_* Values present on disk are in dwarf.h 235*07dc1947SRichard Lowe Ensure this is > DW_REG_TABLE_SIZE (the reg table 236*07dc1947SRichard Lowe size is changeable at runtime with the *reg3() interfaces, 237*07dc1947SRichard Lowe and this value must be greater than the reg table size). 238*07dc1947SRichard Lowe */ 239*07dc1947SRichard Lowe #define DW_FRAME_UNDEFINED_VAL 1034 240*07dc1947SRichard Lowe 241*07dc1947SRichard Lowe /* Taken as meaning 'same value' as caller had, not a column 242*07dc1947SRichard Lowe or register number. 243*07dc1947SRichard Lowe Only present at libdwarf runtime in the consumer 244*07dc1947SRichard Lowe interfaces. Never on disk. 245*07dc1947SRichard Lowe DW_FRAME_* Values present on disk are in dwarf.h 246*07dc1947SRichard Lowe Ensure this is > DW_REG_TABLE_SIZE (the reg table 247*07dc1947SRichard Lowe size is changeable at runtime with the *reg3() interfaces, 248*07dc1947SRichard Lowe and this value must be greater than the reg table size). 249*07dc1947SRichard Lowe */ 250*07dc1947SRichard Lowe #define DW_FRAME_SAME_VAL 1035 251*07dc1947SRichard Lowe 252*07dc1947SRichard Lowe /* For DWARF3 consumer interfaces, make the CFA a column with no 253*07dc1947SRichard Lowe real table number. This is what should have been done 254*07dc1947SRichard Lowe for the DWARF2 interfaces. This actually works for 255*07dc1947SRichard Lowe both DWARF2 and DWARF3, but see the libdwarf documentation 256*07dc1947SRichard Lowe on Dwarf_Regtable3 and dwarf_get_fde_info_for_reg3() 257*07dc1947SRichard Lowe and dwarf_get_fde_info_for_all_regs3() 258*07dc1947SRichard Lowe Do NOT use this with the older dwarf_get_fde_info_for_reg() 259*07dc1947SRichard Lowe or dwarf_get_fde_info_for_all_regs() consumer interfaces. 260*07dc1947SRichard Lowe Must be higher than any register count for *any* ABI 261*07dc1947SRichard Lowe (ensures maximum applicability with minimum effort). 262*07dc1947SRichard Lowe Ensure this is > DW_REG_TABLE_SIZE (the reg table 263*07dc1947SRichard Lowe size is changeable at runtime with the *reg3() interfaces, 264*07dc1947SRichard Lowe and this value must be greater than the reg table size). 265*07dc1947SRichard Lowe Only present at libdwarf runtime in the consumer 266*07dc1947SRichard Lowe interfaces. Never on disk. 267*07dc1947SRichard Lowe */ 268*07dc1947SRichard Lowe #define DW_FRAME_CFA_COL3 1436 269*07dc1947SRichard Lowe 270*07dc1947SRichard Lowe /* The following are all needed to evaluate DWARF3 register rules. 271*07dc1947SRichard Lowe */ 272*07dc1947SRichard Lowe #define DW_EXPR_OFFSET 0 /* DWARF2 only sees this. */ 273*07dc1947SRichard Lowe #define DW_EXPR_VAL_OFFSET 1 274*07dc1947SRichard Lowe #define DW_EXPR_EXPRESSION 2 275*07dc1947SRichard Lowe #define DW_EXPR_VAL_EXPRESSION 3 276*07dc1947SRichard Lowe 277*07dc1947SRichard Lowe typedef struct Dwarf_Regtable_Entry_s { 278*07dc1947SRichard Lowe /* For each index i (naming a hardware register with dwarf number 279*07dc1947SRichard Lowe i) the following is true and defines the value of that register: 280*07dc1947SRichard Lowe 281*07dc1947SRichard Lowe If dw_regnum is Register DW_FRAME_UNDEFINED_VAL 282*07dc1947SRichard Lowe it is not DWARF register number but 283*07dc1947SRichard Lowe a place holder indicating the register has no defined value. 284*07dc1947SRichard Lowe If dw_regnum is Register DW_FRAME_SAME_VAL 285*07dc1947SRichard Lowe it is not DWARF register number but 286*07dc1947SRichard Lowe a place holder indicating the register has the same 287*07dc1947SRichard Lowe value in the previous frame. 288*07dc1947SRichard Lowe DW_FRAME_UNDEFINED_VAL, DW_FRAME_SAME_VAL are 289*07dc1947SRichard Lowe only present at libdwarf runtime. Never on disk. 290*07dc1947SRichard Lowe DW_FRAME_* Values present on disk are in dwarf.h 291*07dc1947SRichard Lowe 292*07dc1947SRichard Lowe Otherwise: the register number is a DWARF register number 293*07dc1947SRichard Lowe (see ABI documents for how this translates to hardware/ 294*07dc1947SRichard Lowe software register numbers in the machine hardware) 295*07dc1947SRichard Lowe and the following applies: 296*07dc1947SRichard Lowe 297*07dc1947SRichard Lowe if dw_value_type == DW_EXPR_OFFSET (the only case for dwarf2): 298*07dc1947SRichard Lowe If dw_offset_relevant is non-zero, then 299*07dc1947SRichard Lowe the value is stored at at the address CFA+N where 300*07dc1947SRichard Lowe N is a signed offset. 301*07dc1947SRichard Lowe Rule: Offset(N) 302*07dc1947SRichard Lowe If dw_offset_relevant is zero, then the value of the register 303*07dc1947SRichard Lowe is the value of (DWARF) register number dw_regnum. 304*07dc1947SRichard Lowe Rule: register(F) 305*07dc1947SRichard Lowe Other values of dw_value_type are an error. 306*07dc1947SRichard Lowe */ 30749d3bc91SRichard Lowe Dwarf_Small dw_offset_relevant; 308*07dc1947SRichard Lowe 309*07dc1947SRichard Lowe /* For DWARF2, always 0 */ 310*07dc1947SRichard Lowe Dwarf_Small dw_value_type; 311*07dc1947SRichard Lowe 31249d3bc91SRichard Lowe Dwarf_Half dw_regnum; 313*07dc1947SRichard Lowe 314*07dc1947SRichard Lowe /* The data type here should the larger of Dwarf_Addr 315*07dc1947SRichard Lowe and Dwarf_Unsigned and Dwarf_Signed. */ 31649d3bc91SRichard Lowe Dwarf_Addr dw_offset; 317*07dc1947SRichard Lowe } Dwarf_Regtable_Entry; 318*07dc1947SRichard Lowe 319*07dc1947SRichard Lowe typedef struct Dwarf_Regtable_s { 320*07dc1947SRichard Lowe struct Dwarf_Regtable_Entry_s rules[DW_REG_TABLE_SIZE]; 32149d3bc91SRichard Lowe } Dwarf_Regtable; 32249d3bc91SRichard Lowe 323*07dc1947SRichard Lowe /* opaque type. Functional interface shown later. */ 324*07dc1947SRichard Lowe struct Dwarf_Reg_value3_s; 325*07dc1947SRichard Lowe typedef struct Dwarf_Reg_value3_s Dwarf_Reg_Value3; 326*07dc1947SRichard Lowe 327*07dc1947SRichard Lowe typedef struct Dwarf_Regtable_Entry3_s { 328*07dc1947SRichard Lowe /* For each index i (naming a hardware register with dwarf number 329*07dc1947SRichard Lowe i) the following is true and defines the value of that register: 330*07dc1947SRichard Lowe 331*07dc1947SRichard Lowe If dw_regnum is Register DW_FRAME_UNDEFINED_VAL 332*07dc1947SRichard Lowe it is not DWARF register number but 333*07dc1947SRichard Lowe a place holder indicating the register has no defined value. 334*07dc1947SRichard Lowe If dw_regnum is Register DW_FRAME_SAME_VAL 335*07dc1947SRichard Lowe it is not DWARF register number but 336*07dc1947SRichard Lowe a place holder indicating the register has the same 337*07dc1947SRichard Lowe value in the previous frame. 338*07dc1947SRichard Lowe DW_FRAME_UNDEFINED_VAL, DW_FRAME_SAME_VAL and 339*07dc1947SRichard Lowe DW_FRAME_CFA_COL3 are only present at libdwarf runtime. 340*07dc1947SRichard Lowe Never on disk. 341*07dc1947SRichard Lowe DW_FRAME_* Values present on disk are in dwarf.h 342*07dc1947SRichard Lowe Because DW_FRAME_SAME_VAL and DW_FRAME_UNDEFINED_VAL 343*07dc1947SRichard Lowe and DW_FRAME_CFA_COL3 are defineable at runtime 344*07dc1947SRichard Lowe consider the names symbolic in this comment, not absolute. 345*07dc1947SRichard Lowe 346*07dc1947SRichard Lowe Otherwise: the register number is a DWARF register number 347*07dc1947SRichard Lowe (see ABI documents for how this translates to hardware/ 348*07dc1947SRichard Lowe software register numbers in the machine hardware) 349*07dc1947SRichard Lowe and the following applies: 350*07dc1947SRichard Lowe 351*07dc1947SRichard Lowe In a cfa-defining entry (rt3_cfa_rule) the regnum is the 352*07dc1947SRichard Lowe CFA 'register number'. Which is some 'normal' register, 353*07dc1947SRichard Lowe not DW_FRAME_CFA_COL3, nor DW_FRAME_SAME_VAL, nor 354*07dc1947SRichard Lowe DW_FRAME_UNDEFINED_VAL. 355*07dc1947SRichard Lowe 356*07dc1947SRichard Lowe If dw_value_type == DW_EXPR_OFFSET (the only possible case for 357*07dc1947SRichard Lowe dwarf2): 358*07dc1947SRichard Lowe If dw_offset_relevant is non-zero, then 359*07dc1947SRichard Lowe the value is stored at at the address 360*07dc1947SRichard Lowe CFA+N where N is a signed offset. 361*07dc1947SRichard Lowe dw_regnum is the cfa register rule which means 362*07dc1947SRichard Lowe one ignores dw_regnum and uses the CFA appropriately. 363*07dc1947SRichard Lowe So dw_offset_or_block_len is a signed value, really, 364*07dc1947SRichard Lowe and must be printed/evaluated as such. 365*07dc1947SRichard Lowe Rule: Offset(N) 366*07dc1947SRichard Lowe If dw_offset_relevant is zero, then the value of the register 367*07dc1947SRichard Lowe is the value of (DWARF) register number dw_regnum. 368*07dc1947SRichard Lowe Rule: register(R) 369*07dc1947SRichard Lowe If dw_value_type == DW_EXPR_VAL_OFFSET 370*07dc1947SRichard Lowe the value of this register is CFA +N where N is a signed offset. 371*07dc1947SRichard Lowe dw_regnum is the cfa register rule which means 372*07dc1947SRichard Lowe one ignores dw_regnum and uses the CFA appropriately. 373*07dc1947SRichard Lowe Rule: val_offset(N) 374*07dc1947SRichard Lowe If dw_value_type == DW_EXPR_EXPRESSION 375*07dc1947SRichard Lowe The value of the register is the value at the address 376*07dc1947SRichard Lowe computed by evaluating the DWARF expression E. 377*07dc1947SRichard Lowe Rule: expression(E) 378*07dc1947SRichard Lowe The expression E byte stream is pointed to by dw_block_ptr. 379*07dc1947SRichard Lowe The expression length in bytes is given by 380*07dc1947SRichard Lowe dw_offset_or_block_len. 381*07dc1947SRichard Lowe If dw_value_type == DW_EXPR_VAL_EXPRESSION 382*07dc1947SRichard Lowe The value of the register is the value 383*07dc1947SRichard Lowe computed by evaluating the DWARF expression E. 384*07dc1947SRichard Lowe Rule: val_expression(E) 385*07dc1947SRichard Lowe The expression E byte stream is pointed to by dw_block_ptr. 386*07dc1947SRichard Lowe The expression length in bytes is given by 387*07dc1947SRichard Lowe dw_offset_or_block_len. 388*07dc1947SRichard Lowe Other values of dw_value_type are an error. 389*07dc1947SRichard Lowe */ 390*07dc1947SRichard Lowe Dwarf_Small dw_offset_relevant; 391*07dc1947SRichard Lowe Dwarf_Small dw_value_type; 392*07dc1947SRichard Lowe Dwarf_Half dw_regnum; 393*07dc1947SRichard Lowe Dwarf_Unsigned dw_offset_or_block_len; 394*07dc1947SRichard Lowe Dwarf_Ptr dw_block_ptr; 395*07dc1947SRichard Lowe 396*07dc1947SRichard Lowe }Dwarf_Regtable_Entry3; 397*07dc1947SRichard Lowe 398*07dc1947SRichard Lowe /* For the DWARF3 version, moved the DW_FRAME_CFA_COL 399*07dc1947SRichard Lowe out of the array and into its own struct. 400*07dc1947SRichard Lowe Having it part of the array is not very easy to work 401*07dc1947SRichard Lowe with from a portability point of view: changing 402*07dc1947SRichard Lowe the number for every architecture is a pain (if one fails 403*07dc1947SRichard Lowe to set it correctly a register rule gets clobbered when 404*07dc1947SRichard Lowe setting CFA). With MIPS it just happened to be easy to use 405*07dc1947SRichard Lowe DW_FRAME_CFA_COL (it was wrong conceptually but it was easy...). 406*07dc1947SRichard Lowe 407*07dc1947SRichard Lowe rt3_rules and rt3_reg_table_size must be filled in before 408*07dc1947SRichard Lowe calling libdwarf. Filled in with a pointer to an array 409*07dc1947SRichard Lowe (pointer and array set up by the calling application) 410*07dc1947SRichard Lowe of rt3_reg_table_size Dwarf_Regtable_Entry3_s structs. 411*07dc1947SRichard Lowe libdwarf does not allocate or deallocate space for the 412*07dc1947SRichard Lowe rules, you must do so. libdwarf will initialize the 413*07dc1947SRichard Lowe contents rules array, you do not need to do so (though 414*07dc1947SRichard Lowe if you choose to initialize the array somehow that is ok: 415*07dc1947SRichard Lowe libdwarf will overwrite your initializations with its own). 416*07dc1947SRichard Lowe 417*07dc1947SRichard Lowe */ 418*07dc1947SRichard Lowe typedef struct Dwarf_Regtable3_s { 419*07dc1947SRichard Lowe struct Dwarf_Regtable_Entry3_s rt3_cfa_rule; 420*07dc1947SRichard Lowe 421*07dc1947SRichard Lowe Dwarf_Half rt3_reg_table_size; 422*07dc1947SRichard Lowe struct Dwarf_Regtable_Entry3_s * rt3_rules; 423*07dc1947SRichard Lowe } Dwarf_Regtable3; 424*07dc1947SRichard Lowe 425*07dc1947SRichard Lowe 426*07dc1947SRichard Lowe /* Use for DW_EPXR_STANDARD., DW_EXPR_VAL_OFFSET. 427*07dc1947SRichard Lowe Returns DW_DLV_OK if the value is available. 428*07dc1947SRichard Lowe If DW_DLV_OK returns the regnum and offset thru the pointers 429*07dc1947SRichard Lowe (which the consumer must use appropriately). 430*07dc1947SRichard Lowe */ 431*07dc1947SRichard Lowe int dwarf_frame_get_reg_register(struct Dwarf_Regtable_Entry3_s *reg_in, 432*07dc1947SRichard Lowe Dwarf_Small *offset_relevant, 433*07dc1947SRichard Lowe Dwarf_Half *regnum_out, 434*07dc1947SRichard Lowe Dwarf_Signed *offset_out); 435*07dc1947SRichard Lowe 436*07dc1947SRichard Lowe /* Use for DW_EXPR_EXPRESSION, DW_EXPR_VAL_EXPRESSION. 437*07dc1947SRichard Lowe Returns DW_DLV_OK if the value is available. 438*07dc1947SRichard Lowe The caller must pass in the address of a valid 439*07dc1947SRichard Lowe Dwarf_Block (the caller need not initialize it). 440*07dc1947SRichard Lowe */ 441*07dc1947SRichard Lowe int dwarf_frame_get_reg_expression(struct Dwarf_Regtable_Entry3_s *reg_in, 442*07dc1947SRichard Lowe Dwarf_Block *block_out); 443*07dc1947SRichard Lowe 444*07dc1947SRichard Lowe 445*07dc1947SRichard Lowe /* For DW_DLC_SYMBOLIC_RELOCATIONS output to caller 44649d3bc91SRichard Lowe v2, adding drd_length: some relocations are 4 and 44749d3bc91SRichard Lowe some 8 bytes (pointers are 8, section offsets 4) in 44849d3bc91SRichard Lowe some dwarf environments. (MIPS relocations are all one 44949d3bc91SRichard Lowe size in any given ABI.) Changing drd_type to an unsigned char 45049d3bc91SRichard Lowe to keep struct size down. 45149d3bc91SRichard Lowe */ 45249d3bc91SRichard Lowe enum Dwarf_Rel_Type { 453*07dc1947SRichard Lowe dwarf_drt_none, /* Should not get to caller */ 454*07dc1947SRichard Lowe dwarf_drt_data_reloc, /* Simple normal relocation. */ 455*07dc1947SRichard Lowe dwarf_drt_segment_rel, /* Special reloc, exceptions. */ 456*07dc1947SRichard Lowe /* dwarf_drt_first_of_length_pair and drt_second 457*07dc1947SRichard Lowe are for for the .word end - begin case. */ 458*07dc1947SRichard Lowe dwarf_drt_first_of_length_pair, 45949d3bc91SRichard Lowe dwarf_drt_second_of_length_pair 46049d3bc91SRichard Lowe }; 461*07dc1947SRichard Lowe 462*07dc1947SRichard Lowe typedef struct Dwarf_P_Marker_s * Dwarf_P_Marker; 463*07dc1947SRichard Lowe struct Dwarf_P_Marker_s { 464*07dc1947SRichard Lowe Dwarf_Unsigned ma_marker; 465*07dc1947SRichard Lowe Dwarf_Unsigned ma_offset; 466*07dc1947SRichard Lowe }; 467*07dc1947SRichard Lowe 46849d3bc91SRichard Lowe typedef struct Dwarf_Relocation_Data_s * Dwarf_Relocation_Data; 46949d3bc91SRichard Lowe struct Dwarf_Relocation_Data_s { 470*07dc1947SRichard Lowe unsigned char drd_type; /* Cast to/from Dwarf_Rel_Type 471*07dc1947SRichard Lowe to keep size small in struct. */ 472*07dc1947SRichard Lowe unsigned char drd_length; /* Length in bytes of data being 473*07dc1947SRichard Lowe relocated. 4 for 32bit data, 474*07dc1947SRichard Lowe 8 for 64bit data. */ 475*07dc1947SRichard Lowe Dwarf_Unsigned drd_offset; /* Where the data to reloc is. */ 47649d3bc91SRichard Lowe Dwarf_Unsigned drd_symbol_index; 47749d3bc91SRichard Lowe }; 47849d3bc91SRichard Lowe 479*07dc1947SRichard Lowe typedef struct Dwarf_P_String_Attr_s * Dwarf_P_String_Attr; 480*07dc1947SRichard Lowe struct Dwarf_P_String_Attr_s { 481*07dc1947SRichard Lowe Dwarf_Unsigned sa_offset; /* Offset of string attribute data */ 482*07dc1947SRichard Lowe Dwarf_Unsigned sa_nbytes; 483*07dc1947SRichard Lowe }; 484*07dc1947SRichard Lowe 485*07dc1947SRichard Lowe 48649d3bc91SRichard Lowe /* Opaque types for Consumer Library. */ 48749d3bc91SRichard Lowe typedef struct Dwarf_Debug_s* Dwarf_Debug; 48849d3bc91SRichard Lowe typedef struct Dwarf_Die_s* Dwarf_Die; 48949d3bc91SRichard Lowe typedef struct Dwarf_Line_s* Dwarf_Line; 49049d3bc91SRichard Lowe typedef struct Dwarf_Global_s* Dwarf_Global; 49149d3bc91SRichard Lowe typedef struct Dwarf_Func_s* Dwarf_Func; 49249d3bc91SRichard Lowe typedef struct Dwarf_Type_s* Dwarf_Type; 49349d3bc91SRichard Lowe typedef struct Dwarf_Var_s* Dwarf_Var; 49449d3bc91SRichard Lowe typedef struct Dwarf_Weak_s* Dwarf_Weak; 49549d3bc91SRichard Lowe typedef struct Dwarf_Error_s* Dwarf_Error; 49649d3bc91SRichard Lowe typedef struct Dwarf_Attribute_s* Dwarf_Attribute; 49749d3bc91SRichard Lowe typedef struct Dwarf_Abbrev_s* Dwarf_Abbrev; 49849d3bc91SRichard Lowe typedef struct Dwarf_Fde_s* Dwarf_Fde; 49949d3bc91SRichard Lowe typedef struct Dwarf_Cie_s* Dwarf_Cie; 50049d3bc91SRichard Lowe typedef struct Dwarf_Arange_s* Dwarf_Arange; 50149d3bc91SRichard Lowe 50249d3bc91SRichard Lowe /* Opaque types for Producer Library. */ 50349d3bc91SRichard Lowe typedef struct Dwarf_P_Debug_s* Dwarf_P_Debug; 50449d3bc91SRichard Lowe typedef struct Dwarf_P_Die_s* Dwarf_P_Die; 50549d3bc91SRichard Lowe typedef struct Dwarf_P_Attribute_s* Dwarf_P_Attribute; 50649d3bc91SRichard Lowe typedef struct Dwarf_P_Fde_s* Dwarf_P_Fde; 50749d3bc91SRichard Lowe typedef struct Dwarf_P_Expr_s* Dwarf_P_Expr; 50849d3bc91SRichard Lowe typedef Dwarf_Unsigned Dwarf_Tag; 50949d3bc91SRichard Lowe 51049d3bc91SRichard Lowe 51149d3bc91SRichard Lowe /* error handler function 51249d3bc91SRichard Lowe */ 51349d3bc91SRichard Lowe typedef void (*Dwarf_Handler)(Dwarf_Error /*error*/, Dwarf_Ptr /*errarg*/); 51449d3bc91SRichard Lowe 51549d3bc91SRichard Lowe 516*07dc1947SRichard Lowe /* Begin libdwarf Object File Interface declarations. 517*07dc1947SRichard Lowe 518*07dc1947SRichard Lowe As of February 2008 there are multiple dwarf_reader object access 519*07dc1947SRichard Lowe initialization methods available: 520*07dc1947SRichard Lowe The traditional dwarf_elf_init() and dwarf_init() and dwarf_finish() 521*07dc1947SRichard Lowe which assume libelf and POSIX file access. 522*07dc1947SRichard Lowe An object-file and library agnostic dwarf_object_init() and dwarf_object_finish() 523*07dc1947SRichard Lowe which allow the coder to provide object access routines 524*07dc1947SRichard Lowe abstracting away the elf interface. So there is no dependence in the 525*07dc1947SRichard Lowe reader code on the object format and no dependence on libelf. 526*07dc1947SRichard Lowe See the code in dwarf_elf_access.c and dwarf_original_elf_init.c 527*07dc1947SRichard Lowe to see an example of initializing the structures mentioned below. 528*07dc1947SRichard Lowe 529*07dc1947SRichard Lowe Projects using dwarf_elf_init() or dwarf_init() can ignore 530*07dc1947SRichard Lowe the Dwarf_Obj_Access* structures entirely as all these details 531*07dc1947SRichard Lowe are completed for you. 532*07dc1947SRichard Lowe 533*07dc1947SRichard Lowe */ 534*07dc1947SRichard Lowe 535*07dc1947SRichard Lowe typedef struct Dwarf_Obj_Access_Interface_s Dwarf_Obj_Access_Interface; 536*07dc1947SRichard Lowe typedef struct Dwarf_Obj_Access_Methods_s Dwarf_Obj_Access_Methods; 537*07dc1947SRichard Lowe typedef struct Dwarf_Obj_Access_Section_s Dwarf_Obj_Access_Section; 538*07dc1947SRichard Lowe 539*07dc1947SRichard Lowe 540*07dc1947SRichard Lowe /* Used in the get_section interface function 541*07dc1947SRichard Lowe in Dwarf_Obj_Access_Section_s. Since libdwarf 542*07dc1947SRichard Lowe depends on standard DWARF section names an object 543*07dc1947SRichard Lowe format that has no such names (but has some 544*07dc1947SRichard Lowe method of setting up 'sections equivalents') 545*07dc1947SRichard Lowe must arrange to return standard DWARF section 546*07dc1947SRichard Lowe names in the 'name' field. libdwarf does 547*07dc1947SRichard Lowe not free the strings in 'name'. */ 548*07dc1947SRichard Lowe struct Dwarf_Obj_Access_Section_s { 549*07dc1947SRichard Lowe Dwarf_Addr addr; 550*07dc1947SRichard Lowe Dwarf_Unsigned size; 551*07dc1947SRichard Lowe const char* name; 552*07dc1947SRichard Lowe /* Set link to zero if it is meaningless. If non-zero 553*07dc1947SRichard Lowe it should be a link to a rela section or from symtab 554*07dc1947SRichard Lowe to strtab. In Elf it is sh_link. */ 555*07dc1947SRichard Lowe Dwarf_Unsigned link; 556*07dc1947SRichard Lowe }; 557*07dc1947SRichard Lowe 558*07dc1947SRichard Lowe /* Returned by the get_endianness function in 559*07dc1947SRichard Lowe Dwarf_Obj_Access_Methods_s. */ 560*07dc1947SRichard Lowe typedef enum { 561*07dc1947SRichard Lowe DW_OBJECT_MSB, 562*07dc1947SRichard Lowe DW_OBJECT_LSB 563*07dc1947SRichard Lowe } Dwarf_Endianness; 564*07dc1947SRichard Lowe 565*07dc1947SRichard Lowe /* The functions we need to access object data from libdwarf are declared here. 566*07dc1947SRichard Lowe 567*07dc1947SRichard Lowe In these function pointer declarations 568*07dc1947SRichard Lowe 'void *obj' is intended to be a pointer (the object field in 569*07dc1947SRichard Lowe Dwarf_Obj_Access_Interface_s) 570*07dc1947SRichard Lowe that hides the library-specific and object-specific data that makes 571*07dc1947SRichard Lowe it possible to handle multiple object formats and multiple libraries. 572*07dc1947SRichard Lowe It's not required that one handles multiple such in a single libdwarf 573*07dc1947SRichard Lowe archive/shared-library (but not ruled out either). 574*07dc1947SRichard Lowe See dwarf_elf_object_access_internals_t and dwarf_elf_access.c 575*07dc1947SRichard Lowe for an example. 576*07dc1947SRichard Lowe 577*07dc1947SRichard Lowe */ 578*07dc1947SRichard Lowe struct Dwarf_Obj_Access_Methods_s { 579*07dc1947SRichard Lowe /** 580*07dc1947SRichard Lowe * get_section_info 581*07dc1947SRichard Lowe * 582*07dc1947SRichard Lowe * Get address, size, and name info about a section. 583*07dc1947SRichard Lowe * 584*07dc1947SRichard Lowe * Parameters 585*07dc1947SRichard Lowe * section_index - Zero-based index. 586*07dc1947SRichard Lowe * return_section - Pointer to a structure in which section info 587*07dc1947SRichard Lowe * will be placed. Caller must provide a valid pointer to a 588*07dc1947SRichard Lowe * structure area. The structure's contents will be overwritten 589*07dc1947SRichard Lowe * by the call to get_section_info. 590*07dc1947SRichard Lowe * error - A pointer to an integer in which an error code may be stored. 591*07dc1947SRichard Lowe * 592*07dc1947SRichard Lowe * Return 593*07dc1947SRichard Lowe * DW_DLV_OK - Everything ok. 594*07dc1947SRichard Lowe * DW_DLV_ERROR - Error occurred. Use 'error' to determine the 595*07dc1947SRichard Lowe * libdwarf defined error. 596*07dc1947SRichard Lowe * DW_DLV_NO_ENTRY - No such section. 597*07dc1947SRichard Lowe */ 598*07dc1947SRichard Lowe int (*get_section_info)(void* obj, Dwarf_Half section_index, 599*07dc1947SRichard Lowe Dwarf_Obj_Access_Section* return_section, int* error); 600*07dc1947SRichard Lowe /** 601*07dc1947SRichard Lowe * get_byte_order 602*07dc1947SRichard Lowe * 603*07dc1947SRichard Lowe * Get whether the object file represented by this interface is big-endian 604*07dc1947SRichard Lowe * (DW_OBJECT_MSB) or little endian (DW_OBJECT_LSB). 605*07dc1947SRichard Lowe * 606*07dc1947SRichard Lowe * Parameters 607*07dc1947SRichard Lowe * obj - Equivalent to 'this' in OO languages. 608*07dc1947SRichard Lowe * 609*07dc1947SRichard Lowe * Return 610*07dc1947SRichard Lowe * Endianness of object. Cannot fail. 611*07dc1947SRichard Lowe */ 612*07dc1947SRichard Lowe Dwarf_Endianness (*get_byte_order)(void* obj); 613*07dc1947SRichard Lowe /** 614*07dc1947SRichard Lowe * get_length_size 615*07dc1947SRichard Lowe * 616*07dc1947SRichard Lowe * Get the size of a length field in the underlying object file. 617*07dc1947SRichard Lowe * libdwarf currently supports * 4 and 8 byte sizes, but may 618*07dc1947SRichard Lowe * support larger in the future. 619*07dc1947SRichard Lowe * Perhaps the return type should be an enumeration? 620*07dc1947SRichard Lowe * 621*07dc1947SRichard Lowe * Parameters 622*07dc1947SRichard Lowe * obj - Equivalent to 'this' in OO languages. 623*07dc1947SRichard Lowe * 624*07dc1947SRichard Lowe * Return 625*07dc1947SRichard Lowe * Size of length. Cannot fail. 626*07dc1947SRichard Lowe */ 627*07dc1947SRichard Lowe Dwarf_Small (*get_length_size)(void* obj); 628*07dc1947SRichard Lowe /** 629*07dc1947SRichard Lowe * get_pointer_size 630*07dc1947SRichard Lowe * 631*07dc1947SRichard Lowe * Get the size of a pointer field in the underlying object file. 632*07dc1947SRichard Lowe * libdwarf currently supports 4 and 8 byte sizes. 633*07dc1947SRichard Lowe * Perhaps the return type should be an enumeration? 634*07dc1947SRichard Lowe 635*07dc1947SRichard Lowe * Return 636*07dc1947SRichard Lowe * Size of pointer. Cannot fail. 637*07dc1947SRichard Lowe */ 638*07dc1947SRichard Lowe Dwarf_Small (*get_pointer_size)(void* obj); 639*07dc1947SRichard Lowe /** 640*07dc1947SRichard Lowe * get_section_count 641*07dc1947SRichard Lowe * 642*07dc1947SRichard Lowe * Get the number of sections in the object file. 643*07dc1947SRichard Lowe * 644*07dc1947SRichard Lowe * Parameters 645*07dc1947SRichard Lowe * 646*07dc1947SRichard Lowe * Return 647*07dc1947SRichard Lowe * Number of sections 648*07dc1947SRichard Lowe */ 649*07dc1947SRichard Lowe Dwarf_Unsigned (*get_section_count)(void* obj); 650*07dc1947SRichard Lowe /** 651*07dc1947SRichard Lowe * load_section 652*07dc1947SRichard Lowe * 653*07dc1947SRichard Lowe * Get a pointer to an array of bytes that represent the section. 654*07dc1947SRichard Lowe * 655*07dc1947SRichard Lowe * Parameters 656*07dc1947SRichard Lowe * section_index - Zero-based index. 657*07dc1947SRichard Lowe * return_data - The address of a pointer to which the section data block 658*07dc1947SRichard Lowe * will be assigned. 659*07dc1947SRichard Lowe * error - Pointer to an integer for returning libdwarf-defined 660*07dc1947SRichard Lowe * error numbers. 661*07dc1947SRichard Lowe * 662*07dc1947SRichard Lowe * Return 663*07dc1947SRichard Lowe * DW_DLV_OK - No error. 664*07dc1947SRichard Lowe * DW_DLV_ERROR - Error. Use 'error' to indicate a libdwarf-defined 665*07dc1947SRichard Lowe * error number. 666*07dc1947SRichard Lowe * DW_DLV_NO_ENTRY - No such section. 667*07dc1947SRichard Lowe */ 668*07dc1947SRichard Lowe int (*load_section)(void* obj, Dwarf_Half section_index, 669*07dc1947SRichard Lowe Dwarf_Small** return_data, int* error); 670*07dc1947SRichard Lowe 671*07dc1947SRichard Lowe /** 672*07dc1947SRichard Lowe * relocate_a_section 673*07dc1947SRichard Lowe * If relocations are not supported leave this pointer NULL. 674*07dc1947SRichard Lowe * 675*07dc1947SRichard Lowe * Get a pointer to an array of bytes that represent the section. 676*07dc1947SRichard Lowe * 677*07dc1947SRichard Lowe * Parameters 678*07dc1947SRichard Lowe * section_index - Zero-based index of the section to be relocated. 679*07dc1947SRichard Lowe * error - Pointer to an integer for returning libdwarf-defined 680*07dc1947SRichard Lowe * error numbers. 681*07dc1947SRichard Lowe * 682*07dc1947SRichard Lowe * Return 683*07dc1947SRichard Lowe * DW_DLV_OK - No error. 684*07dc1947SRichard Lowe * DW_DLV_ERROR - Error. Use 'error' to indicate a libdwarf-defined 685*07dc1947SRichard Lowe * error number. 686*07dc1947SRichard Lowe * DW_DLV_NO_ENTRY - No such section. 687*07dc1947SRichard Lowe */ 688*07dc1947SRichard Lowe int (*relocate_a_section)(void* obj, Dwarf_Half section_index, 689*07dc1947SRichard Lowe Dwarf_Debug dbg, 690*07dc1947SRichard Lowe int* error); 691*07dc1947SRichard Lowe 692*07dc1947SRichard Lowe }; 693*07dc1947SRichard Lowe 694*07dc1947SRichard Lowe 695*07dc1947SRichard Lowe 696*07dc1947SRichard Lowe /* These structures are allocated and deallocated by your code 697*07dc1947SRichard Lowe when you are using the libdwarf Object File Interface 698*07dc1947SRichard Lowe [dwarf_object_init() and dwarf_object_finish()] directly. 699*07dc1947SRichard Lowe dwarf_object_finish() does not free 700*07dc1947SRichard Lowe struct Dwarf_Obj_Access_Interface_s or its content. 701*07dc1947SRichard Lowe (libdwarf does record a pointer to this struct: you must 702*07dc1947SRichard Lowe ensure that pointer remains valid for as long as 703*07dc1947SRichard Lowe a libdwarf instance is open (meaning 704*07dc1947SRichard Lowe after dwarf_init() and before dwarf_finish()). 705*07dc1947SRichard Lowe 706*07dc1947SRichard Lowe If you are reading Elf objects and libelf use dwarf_init() 707*07dc1947SRichard Lowe or dwarf_elf_init() which take care of these details. 708*07dc1947SRichard Lowe */ 709*07dc1947SRichard Lowe struct Dwarf_Obj_Access_Interface_s { 710*07dc1947SRichard Lowe /* object is a void* as it hides the data the object access routines 711*07dc1947SRichard Lowe need (which varies by library in use and object format). 712*07dc1947SRichard Lowe */ 713*07dc1947SRichard Lowe void* object; 714*07dc1947SRichard Lowe const Dwarf_Obj_Access_Methods * methods; 715*07dc1947SRichard Lowe }; 716*07dc1947SRichard Lowe 717*07dc1947SRichard Lowe /* End libdwarf Object File Interface */ 718*07dc1947SRichard Lowe 71949d3bc91SRichard Lowe /* 72049d3bc91SRichard Lowe Dwarf_dealloc() alloc_type arguments. 72149d3bc91SRichard Lowe Argument points to: 72249d3bc91SRichard Lowe */ 72349d3bc91SRichard Lowe #define DW_DLA_STRING 0x01 /* char* */ 72449d3bc91SRichard Lowe #define DW_DLA_LOC 0x02 /* Dwarf_Loc */ 72549d3bc91SRichard Lowe #define DW_DLA_LOCDESC 0x03 /* Dwarf_Locdesc */ 72649d3bc91SRichard Lowe #define DW_DLA_ELLIST 0x04 /* Dwarf_Ellist (not used)*/ 72749d3bc91SRichard Lowe #define DW_DLA_BOUNDS 0x05 /* Dwarf_Bounds (not used) */ 72849d3bc91SRichard Lowe #define DW_DLA_BLOCK 0x06 /* Dwarf_Block */ 72949d3bc91SRichard Lowe #define DW_DLA_DEBUG 0x07 /* Dwarf_Debug */ 73049d3bc91SRichard Lowe #define DW_DLA_DIE 0x08 /* Dwarf_Die */ 73149d3bc91SRichard Lowe #define DW_DLA_LINE 0x09 /* Dwarf_Line */ 73249d3bc91SRichard Lowe #define DW_DLA_ATTR 0x0a /* Dwarf_Attribute */ 73349d3bc91SRichard Lowe #define DW_DLA_TYPE 0x0b /* Dwarf_Type (not used) */ 73449d3bc91SRichard Lowe #define DW_DLA_SUBSCR 0x0c /* Dwarf_Subscr (not used) */ 73549d3bc91SRichard Lowe #define DW_DLA_GLOBAL 0x0d /* Dwarf_Global */ 73649d3bc91SRichard Lowe #define DW_DLA_ERROR 0x0e /* Dwarf_Error */ 73749d3bc91SRichard Lowe #define DW_DLA_LIST 0x0f /* a list */ 73849d3bc91SRichard Lowe #define DW_DLA_LINEBUF 0x10 /* Dwarf_Line* (not used) */ 73949d3bc91SRichard Lowe #define DW_DLA_ARANGE 0x11 /* Dwarf_Arange */ 74049d3bc91SRichard Lowe #define DW_DLA_ABBREV 0x12 /* Dwarf_Abbrev */ 74149d3bc91SRichard Lowe #define DW_DLA_FRAME_OP 0x13 /* Dwarf_Frame_Op */ 74249d3bc91SRichard Lowe #define DW_DLA_CIE 0x14 /* Dwarf_Cie */ 74349d3bc91SRichard Lowe #define DW_DLA_FDE 0x15 /* Dwarf_Fde */ 74449d3bc91SRichard Lowe #define DW_DLA_LOC_BLOCK 0x16 /* Dwarf_Loc Block (not used) */ 74549d3bc91SRichard Lowe #define DW_DLA_FRAME_BLOCK 0x17 /* Dwarf_Frame Block (not used) */ 74649d3bc91SRichard Lowe #define DW_DLA_FUNC 0x18 /* Dwarf_Func */ 74749d3bc91SRichard Lowe #define DW_DLA_TYPENAME 0x19 /* Dwarf_Type */ 74849d3bc91SRichard Lowe #define DW_DLA_VAR 0x1a /* Dwarf_Var */ 74949d3bc91SRichard Lowe #define DW_DLA_WEAK 0x1b /* Dwarf_Weak */ 75049d3bc91SRichard Lowe #define DW_DLA_ADDR 0x1c /* Dwarf_Addr sized entries */ 751*07dc1947SRichard Lowe #define DW_DLA_RANGES 0x1d /* Dwarf_Ranges */ 75249d3bc91SRichard Lowe 75349d3bc91SRichard Lowe /* The augmenter string for CIE */ 75449d3bc91SRichard Lowe #define DW_CIE_AUGMENTER_STRING_V0 "z" 75549d3bc91SRichard Lowe 75649d3bc91SRichard Lowe /* dwarf_init() access arguments 75749d3bc91SRichard Lowe */ 75849d3bc91SRichard Lowe #define DW_DLC_READ 0 /* read only access */ 75949d3bc91SRichard Lowe #define DW_DLC_WRITE 1 /* write only access */ 76049d3bc91SRichard Lowe #define DW_DLC_RDWR 2 /* read/write access NOT SUPPORTED*/ 76149d3bc91SRichard Lowe 762*07dc1947SRichard Lowe /* pro_init() access flag modifiers 763*07dc1947SRichard Lowe If HAVE_DWARF2_99_EXTENSION is defined at libdwarf build time 764*07dc1947SRichard Lowe and DW_DLC_OFFSET_SIZE_64 is passed in pro_init() flags then the DWARF3 765*07dc1947SRichard Lowe 64 bit offset extension is used to generate 64 bit offsets. 76649d3bc91SRichard Lowe */ 767*07dc1947SRichard Lowe #define DW_DLC_SIZE_64 0x40000000 /* 32-bit address-size target */ 768*07dc1947SRichard Lowe #define DW_DLC_SIZE_32 0x20000000 /* 64-bit address-size target */ 769*07dc1947SRichard Lowe #define DW_DLC_OFFSET_SIZE_64 0x10000000 /* 64-bit offset-size DWARF */ 77049d3bc91SRichard Lowe 771*07dc1947SRichard Lowe /* dwarf_pro_init() access flag modifiers 77249d3bc91SRichard Lowe */ 77349d3bc91SRichard Lowe #define DW_DLC_ISA_MIPS 0x00000000 /* MIPS target */ 77449d3bc91SRichard Lowe #define DW_DLC_ISA_IA64 0x01000000 /* IA64 target */ 775*07dc1947SRichard Lowe #define DW_DLC_STREAM_RELOCATIONS 0x02000000 /* Old style binary relocs */ 776*07dc1947SRichard Lowe 777*07dc1947SRichard Lowe /* Usable with assembly output because it is up to the producer to 778*07dc1947SRichard Lowe deal with locations in whatever manner the producer code wishes. 779*07dc1947SRichard Lowe Possibly emitting text an assembler will recognize. */ 780*07dc1947SRichard Lowe #define DW_DLC_SYMBOLIC_RELOCATIONS 0x04000000 781*07dc1947SRichard Lowe 782*07dc1947SRichard Lowe #define DW_DLC_TARGET_BIGENDIAN 0x08000000 /* Big endian target */ 783*07dc1947SRichard Lowe #define DW_DLC_TARGET_LITTLEENDIAN 0x00100000 /* Little endian target */ 784*07dc1947SRichard Lowe 785*07dc1947SRichard Lowe #if 0 786*07dc1947SRichard Lowe /* 787*07dc1947SRichard Lowe The libdwarf producer interfaces jumble these two semantics together in 788*07dc1947SRichard Lowe confusing ways. We *should* have flags like these... 789*07dc1947SRichard Lowe But changing the code means a lot of diffs. So for now, 790*07dc1947SRichard Lowe we leave things as they are 791*07dc1947SRichard Lowe */ 792*07dc1947SRichard Lowe #define DW_DLC_SUN_OFFSET32 0x00010000 /* use 32-bit sec offsets */ 793*07dc1947SRichard Lowe #define DW_DLC_SUN_OFFSET64 0x00020000 /* use 64-bit sec offsets */ 794*07dc1947SRichard Lowe #define DW_DLC_SUN_POINTER32 0x00040000 /* use 4 for address_size */ 795*07dc1947SRichard Lowe #define DW_DLC_SUN_POINTER64 0x00080000 /* use 8 for address_size */ 796*07dc1947SRichard Lowe #endif 79749d3bc91SRichard Lowe 79849d3bc91SRichard Lowe /* dwarf_pcline() slide arguments 79949d3bc91SRichard Lowe */ 80049d3bc91SRichard Lowe #define DW_DLS_BACKWARD -1 /* slide backward to find line */ 80149d3bc91SRichard Lowe #define DW_DLS_NOSLIDE 0 /* match exactly without sliding */ 80249d3bc91SRichard Lowe #define DW_DLS_FORWARD 1 /* slide forward to find line */ 80349d3bc91SRichard Lowe 80449d3bc91SRichard Lowe /* libdwarf error numbers 80549d3bc91SRichard Lowe */ 80649d3bc91SRichard Lowe #define DW_DLE_NE 0 /* no error */ 80749d3bc91SRichard Lowe #define DW_DLE_VMM 1 /* dwarf format/library version mismatch */ 80849d3bc91SRichard Lowe #define DW_DLE_MAP 2 /* memory map failure */ 80949d3bc91SRichard Lowe #define DW_DLE_LEE 3 /* libelf error */ 81049d3bc91SRichard Lowe #define DW_DLE_NDS 4 /* no debug section */ 81149d3bc91SRichard Lowe #define DW_DLE_NLS 5 /* no line section */ 81249d3bc91SRichard Lowe #define DW_DLE_ID 6 /* invalid descriptor for query */ 81349d3bc91SRichard Lowe #define DW_DLE_IOF 7 /* I/O failure */ 81449d3bc91SRichard Lowe #define DW_DLE_MAF 8 /* memory allocation failure */ 81549d3bc91SRichard Lowe #define DW_DLE_IA 9 /* invalid argument */ 81649d3bc91SRichard Lowe #define DW_DLE_MDE 10 /* mangled debugging entry */ 81749d3bc91SRichard Lowe #define DW_DLE_MLE 11 /* mangled line number entry */ 81849d3bc91SRichard Lowe #define DW_DLE_FNO 12 /* file not open */ 81949d3bc91SRichard Lowe #define DW_DLE_FNR 13 /* file not a regular file */ 82049d3bc91SRichard Lowe #define DW_DLE_FWA 14 /* file open with wrong access */ 82149d3bc91SRichard Lowe #define DW_DLE_NOB 15 /* not an object file */ 82249d3bc91SRichard Lowe #define DW_DLE_MOF 16 /* mangled object file header */ 82349d3bc91SRichard Lowe #define DW_DLE_EOLL 17 /* end of location list entries */ 82449d3bc91SRichard Lowe #define DW_DLE_NOLL 18 /* no location list section */ 82549d3bc91SRichard Lowe #define DW_DLE_BADOFF 19 /* Invalid offset */ 82649d3bc91SRichard Lowe #define DW_DLE_EOS 20 /* end of section */ 82749d3bc91SRichard Lowe #define DW_DLE_ATRUNC 21 /* abbreviations section appears truncated*/ 82849d3bc91SRichard Lowe #define DW_DLE_BADBITC 22 /* Address size passed to dwarf bad*/ 82949d3bc91SRichard Lowe /* It is not an allowed size (64 or 32) */ 83049d3bc91SRichard Lowe /* Error codes defined by the current Libdwarf Implementation. */ 83149d3bc91SRichard Lowe #define DW_DLE_DBG_ALLOC 23 83249d3bc91SRichard Lowe #define DW_DLE_FSTAT_ERROR 24 83349d3bc91SRichard Lowe #define DW_DLE_FSTAT_MODE_ERROR 25 83449d3bc91SRichard Lowe #define DW_DLE_INIT_ACCESS_WRONG 26 83549d3bc91SRichard Lowe #define DW_DLE_ELF_BEGIN_ERROR 27 83649d3bc91SRichard Lowe #define DW_DLE_ELF_GETEHDR_ERROR 28 83749d3bc91SRichard Lowe #define DW_DLE_ELF_GETSHDR_ERROR 29 83849d3bc91SRichard Lowe #define DW_DLE_ELF_STRPTR_ERROR 30 83949d3bc91SRichard Lowe #define DW_DLE_DEBUG_INFO_DUPLICATE 31 84049d3bc91SRichard Lowe #define DW_DLE_DEBUG_INFO_NULL 32 84149d3bc91SRichard Lowe #define DW_DLE_DEBUG_ABBREV_DUPLICATE 33 84249d3bc91SRichard Lowe #define DW_DLE_DEBUG_ABBREV_NULL 34 84349d3bc91SRichard Lowe #define DW_DLE_DEBUG_ARANGES_DUPLICATE 35 84449d3bc91SRichard Lowe #define DW_DLE_DEBUG_ARANGES_NULL 36 84549d3bc91SRichard Lowe #define DW_DLE_DEBUG_LINE_DUPLICATE 37 84649d3bc91SRichard Lowe #define DW_DLE_DEBUG_LINE_NULL 38 84749d3bc91SRichard Lowe #define DW_DLE_DEBUG_LOC_DUPLICATE 39 84849d3bc91SRichard Lowe #define DW_DLE_DEBUG_LOC_NULL 40 84949d3bc91SRichard Lowe #define DW_DLE_DEBUG_MACINFO_DUPLICATE 41 85049d3bc91SRichard Lowe #define DW_DLE_DEBUG_MACINFO_NULL 42 85149d3bc91SRichard Lowe #define DW_DLE_DEBUG_PUBNAMES_DUPLICATE 43 85249d3bc91SRichard Lowe #define DW_DLE_DEBUG_PUBNAMES_NULL 44 85349d3bc91SRichard Lowe #define DW_DLE_DEBUG_STR_DUPLICATE 45 85449d3bc91SRichard Lowe #define DW_DLE_DEBUG_STR_NULL 46 85549d3bc91SRichard Lowe #define DW_DLE_CU_LENGTH_ERROR 47 85649d3bc91SRichard Lowe #define DW_DLE_VERSION_STAMP_ERROR 48 85749d3bc91SRichard Lowe #define DW_DLE_ABBREV_OFFSET_ERROR 49 85849d3bc91SRichard Lowe #define DW_DLE_ADDRESS_SIZE_ERROR 50 85949d3bc91SRichard Lowe #define DW_DLE_DEBUG_INFO_PTR_NULL 51 86049d3bc91SRichard Lowe #define DW_DLE_DIE_NULL 52 86149d3bc91SRichard Lowe #define DW_DLE_STRING_OFFSET_BAD 53 86249d3bc91SRichard Lowe #define DW_DLE_DEBUG_LINE_LENGTH_BAD 54 86349d3bc91SRichard Lowe #define DW_DLE_LINE_PROLOG_LENGTH_BAD 55 86449d3bc91SRichard Lowe #define DW_DLE_LINE_NUM_OPERANDS_BAD 56 865*07dc1947SRichard Lowe #define DW_DLE_LINE_SET_ADDR_ERROR 57 /* No longer used. */ 86649d3bc91SRichard Lowe #define DW_DLE_LINE_EXT_OPCODE_BAD 58 86749d3bc91SRichard Lowe #define DW_DLE_DWARF_LINE_NULL 59 86849d3bc91SRichard Lowe #define DW_DLE_INCL_DIR_NUM_BAD 60 86949d3bc91SRichard Lowe #define DW_DLE_LINE_FILE_NUM_BAD 61 87049d3bc91SRichard Lowe #define DW_DLE_ALLOC_FAIL 62 87149d3bc91SRichard Lowe #define DW_DLE_NO_CALLBACK_FUNC 63 87249d3bc91SRichard Lowe #define DW_DLE_SECT_ALLOC 64 87349d3bc91SRichard Lowe #define DW_DLE_FILE_ENTRY_ALLOC 65 87449d3bc91SRichard Lowe #define DW_DLE_LINE_ALLOC 66 87549d3bc91SRichard Lowe #define DW_DLE_FPGM_ALLOC 67 87649d3bc91SRichard Lowe #define DW_DLE_INCDIR_ALLOC 68 87749d3bc91SRichard Lowe #define DW_DLE_STRING_ALLOC 69 87849d3bc91SRichard Lowe #define DW_DLE_CHUNK_ALLOC 70 87949d3bc91SRichard Lowe #define DW_DLE_BYTEOFF_ERR 71 88049d3bc91SRichard Lowe #define DW_DLE_CIE_ALLOC 72 88149d3bc91SRichard Lowe #define DW_DLE_FDE_ALLOC 73 88249d3bc91SRichard Lowe #define DW_DLE_REGNO_OVFL 74 88349d3bc91SRichard Lowe #define DW_DLE_CIE_OFFS_ALLOC 75 88449d3bc91SRichard Lowe #define DW_DLE_WRONG_ADDRESS 76 88549d3bc91SRichard Lowe #define DW_DLE_EXTRA_NEIGHBORS 77 88649d3bc91SRichard Lowe #define DW_DLE_WRONG_TAG 78 88749d3bc91SRichard Lowe #define DW_DLE_DIE_ALLOC 79 88849d3bc91SRichard Lowe #define DW_DLE_PARENT_EXISTS 80 88949d3bc91SRichard Lowe #define DW_DLE_DBG_NULL 81 89049d3bc91SRichard Lowe #define DW_DLE_DEBUGLINE_ERROR 82 89149d3bc91SRichard Lowe #define DW_DLE_DEBUGFRAME_ERROR 83 89249d3bc91SRichard Lowe #define DW_DLE_DEBUGINFO_ERROR 84 89349d3bc91SRichard Lowe #define DW_DLE_ATTR_ALLOC 85 89449d3bc91SRichard Lowe #define DW_DLE_ABBREV_ALLOC 86 89549d3bc91SRichard Lowe #define DW_DLE_OFFSET_UFLW 87 89649d3bc91SRichard Lowe #define DW_DLE_ELF_SECT_ERR 88 89749d3bc91SRichard Lowe #define DW_DLE_DEBUG_FRAME_LENGTH_BAD 89 89849d3bc91SRichard Lowe #define DW_DLE_FRAME_VERSION_BAD 90 89949d3bc91SRichard Lowe #define DW_DLE_CIE_RET_ADDR_REG_ERROR 91 90049d3bc91SRichard Lowe #define DW_DLE_FDE_NULL 92 90149d3bc91SRichard Lowe #define DW_DLE_FDE_DBG_NULL 93 90249d3bc91SRichard Lowe #define DW_DLE_CIE_NULL 94 90349d3bc91SRichard Lowe #define DW_DLE_CIE_DBG_NULL 95 90449d3bc91SRichard Lowe #define DW_DLE_FRAME_TABLE_COL_BAD 96 90549d3bc91SRichard Lowe #define DW_DLE_PC_NOT_IN_FDE_RANGE 97 90649d3bc91SRichard Lowe #define DW_DLE_CIE_INSTR_EXEC_ERROR 98 90749d3bc91SRichard Lowe #define DW_DLE_FRAME_INSTR_EXEC_ERROR 99 90849d3bc91SRichard Lowe #define DW_DLE_FDE_PTR_NULL 100 90949d3bc91SRichard Lowe #define DW_DLE_RET_OP_LIST_NULL 101 91049d3bc91SRichard Lowe #define DW_DLE_LINE_CONTEXT_NULL 102 91149d3bc91SRichard Lowe #define DW_DLE_DBG_NO_CU_CONTEXT 103 91249d3bc91SRichard Lowe #define DW_DLE_DIE_NO_CU_CONTEXT 104 91349d3bc91SRichard Lowe #define DW_DLE_FIRST_DIE_NOT_CU 105 91449d3bc91SRichard Lowe #define DW_DLE_NEXT_DIE_PTR_NULL 106 91549d3bc91SRichard Lowe #define DW_DLE_DEBUG_FRAME_DUPLICATE 107 91649d3bc91SRichard Lowe #define DW_DLE_DEBUG_FRAME_NULL 108 91749d3bc91SRichard Lowe #define DW_DLE_ABBREV_DECODE_ERROR 109 91849d3bc91SRichard Lowe #define DW_DLE_DWARF_ABBREV_NULL 110 91949d3bc91SRichard Lowe #define DW_DLE_ATTR_NULL 111 92049d3bc91SRichard Lowe #define DW_DLE_DIE_BAD 112 92149d3bc91SRichard Lowe #define DW_DLE_DIE_ABBREV_BAD 113 92249d3bc91SRichard Lowe #define DW_DLE_ATTR_FORM_BAD 114 92349d3bc91SRichard Lowe #define DW_DLE_ATTR_NO_CU_CONTEXT 115 92449d3bc91SRichard Lowe #define DW_DLE_ATTR_FORM_SIZE_BAD 116 92549d3bc91SRichard Lowe #define DW_DLE_ATTR_DBG_NULL 117 92649d3bc91SRichard Lowe #define DW_DLE_BAD_REF_FORM 118 92749d3bc91SRichard Lowe #define DW_DLE_ATTR_FORM_OFFSET_BAD 119 92849d3bc91SRichard Lowe #define DW_DLE_LINE_OFFSET_BAD 120 92949d3bc91SRichard Lowe #define DW_DLE_DEBUG_STR_OFFSET_BAD 121 93049d3bc91SRichard Lowe #define DW_DLE_STRING_PTR_NULL 122 93149d3bc91SRichard Lowe #define DW_DLE_PUBNAMES_VERSION_ERROR 123 93249d3bc91SRichard Lowe #define DW_DLE_PUBNAMES_LENGTH_BAD 124 93349d3bc91SRichard Lowe #define DW_DLE_GLOBAL_NULL 125 93449d3bc91SRichard Lowe #define DW_DLE_GLOBAL_CONTEXT_NULL 126 93549d3bc91SRichard Lowe #define DW_DLE_DIR_INDEX_BAD 127 93649d3bc91SRichard Lowe #define DW_DLE_LOC_EXPR_BAD 128 93749d3bc91SRichard Lowe #define DW_DLE_DIE_LOC_EXPR_BAD 129 93849d3bc91SRichard Lowe #define DW_DLE_ADDR_ALLOC 130 93949d3bc91SRichard Lowe #define DW_DLE_OFFSET_BAD 131 94049d3bc91SRichard Lowe #define DW_DLE_MAKE_CU_CONTEXT_FAIL 132 94149d3bc91SRichard Lowe #define DW_DLE_REL_ALLOC 133 94249d3bc91SRichard Lowe #define DW_DLE_ARANGE_OFFSET_BAD 134 94349d3bc91SRichard Lowe #define DW_DLE_SEGMENT_SIZE_BAD 135 94449d3bc91SRichard Lowe #define DW_DLE_ARANGE_LENGTH_BAD 136 94549d3bc91SRichard Lowe #define DW_DLE_ARANGE_DECODE_ERROR 137 94649d3bc91SRichard Lowe #define DW_DLE_ARANGES_NULL 138 94749d3bc91SRichard Lowe #define DW_DLE_ARANGE_NULL 139 94849d3bc91SRichard Lowe #define DW_DLE_NO_FILE_NAME 140 94949d3bc91SRichard Lowe #define DW_DLE_NO_COMP_DIR 141 95049d3bc91SRichard Lowe #define DW_DLE_CU_ADDRESS_SIZE_BAD 142 95149d3bc91SRichard Lowe #define DW_DLE_INPUT_ATTR_BAD 143 95249d3bc91SRichard Lowe #define DW_DLE_EXPR_NULL 144 95349d3bc91SRichard Lowe #define DW_DLE_BAD_EXPR_OPCODE 145 95449d3bc91SRichard Lowe #define DW_DLE_EXPR_LENGTH_BAD 146 95549d3bc91SRichard Lowe #define DW_DLE_MULTIPLE_RELOC_IN_EXPR 147 95649d3bc91SRichard Lowe #define DW_DLE_ELF_GETIDENT_ERROR 148 95749d3bc91SRichard Lowe #define DW_DLE_NO_AT_MIPS_FDE 149 95849d3bc91SRichard Lowe #define DW_DLE_NO_CIE_FOR_FDE 150 95949d3bc91SRichard Lowe #define DW_DLE_DIE_ABBREV_LIST_NULL 151 96049d3bc91SRichard Lowe #define DW_DLE_DEBUG_FUNCNAMES_DUPLICATE 152 96149d3bc91SRichard Lowe #define DW_DLE_DEBUG_FUNCNAMES_NULL 153 96249d3bc91SRichard Lowe #define DW_DLE_DEBUG_FUNCNAMES_VERSION_ERROR 154 96349d3bc91SRichard Lowe #define DW_DLE_DEBUG_FUNCNAMES_LENGTH_BAD 155 96449d3bc91SRichard Lowe #define DW_DLE_FUNC_NULL 156 96549d3bc91SRichard Lowe #define DW_DLE_FUNC_CONTEXT_NULL 157 96649d3bc91SRichard Lowe #define DW_DLE_DEBUG_TYPENAMES_DUPLICATE 158 96749d3bc91SRichard Lowe #define DW_DLE_DEBUG_TYPENAMES_NULL 159 96849d3bc91SRichard Lowe #define DW_DLE_DEBUG_TYPENAMES_VERSION_ERROR 160 96949d3bc91SRichard Lowe #define DW_DLE_DEBUG_TYPENAMES_LENGTH_BAD 161 97049d3bc91SRichard Lowe #define DW_DLE_TYPE_NULL 162 97149d3bc91SRichard Lowe #define DW_DLE_TYPE_CONTEXT_NULL 163 97249d3bc91SRichard Lowe #define DW_DLE_DEBUG_VARNAMES_DUPLICATE 164 97349d3bc91SRichard Lowe #define DW_DLE_DEBUG_VARNAMES_NULL 165 97449d3bc91SRichard Lowe #define DW_DLE_DEBUG_VARNAMES_VERSION_ERROR 166 97549d3bc91SRichard Lowe #define DW_DLE_DEBUG_VARNAMES_LENGTH_BAD 167 97649d3bc91SRichard Lowe #define DW_DLE_VAR_NULL 168 97749d3bc91SRichard Lowe #define DW_DLE_VAR_CONTEXT_NULL 169 97849d3bc91SRichard Lowe #define DW_DLE_DEBUG_WEAKNAMES_DUPLICATE 170 97949d3bc91SRichard Lowe #define DW_DLE_DEBUG_WEAKNAMES_NULL 171 98049d3bc91SRichard Lowe #define DW_DLE_DEBUG_WEAKNAMES_VERSION_ERROR 172 98149d3bc91SRichard Lowe #define DW_DLE_DEBUG_WEAKNAMES_LENGTH_BAD 173 98249d3bc91SRichard Lowe #define DW_DLE_WEAK_NULL 174 98349d3bc91SRichard Lowe #define DW_DLE_WEAK_CONTEXT_NULL 175 98449d3bc91SRichard Lowe #define DW_DLE_LOCDESC_COUNT_WRONG 176 98549d3bc91SRichard Lowe #define DW_DLE_MACINFO_STRING_NULL 177 98649d3bc91SRichard Lowe #define DW_DLE_MACINFO_STRING_EMPTY 178 98749d3bc91SRichard Lowe #define DW_DLE_MACINFO_INTERNAL_ERROR_SPACE 179 98849d3bc91SRichard Lowe #define DW_DLE_MACINFO_MALLOC_FAIL 180 98949d3bc91SRichard Lowe #define DW_DLE_DEBUGMACINFO_ERROR 181 99049d3bc91SRichard Lowe #define DW_DLE_DEBUG_MACRO_LENGTH_BAD 182 99149d3bc91SRichard Lowe #define DW_DLE_DEBUG_MACRO_MAX_BAD 183 99249d3bc91SRichard Lowe #define DW_DLE_DEBUG_MACRO_INTERNAL_ERR 184 99349d3bc91SRichard Lowe #define DW_DLE_DEBUG_MACRO_MALLOC_SPACE 185 99449d3bc91SRichard Lowe #define DW_DLE_DEBUG_MACRO_INCONSISTENT 186 99549d3bc91SRichard Lowe #define DW_DLE_DF_NO_CIE_AUGMENTATION 187 99649d3bc91SRichard Lowe #define DW_DLE_DF_REG_NUM_TOO_HIGH 188 99749d3bc91SRichard Lowe #define DW_DLE_DF_MAKE_INSTR_NO_INIT 189 99849d3bc91SRichard Lowe #define DW_DLE_DF_NEW_LOC_LESS_OLD_LOC 190 99949d3bc91SRichard Lowe #define DW_DLE_DF_POP_EMPTY_STACK 191 100049d3bc91SRichard Lowe #define DW_DLE_DF_ALLOC_FAIL 192 100149d3bc91SRichard Lowe #define DW_DLE_DF_FRAME_DECODING_ERROR 193 100249d3bc91SRichard Lowe #define DW_DLE_DEBUG_LOC_SECTION_SHORT 194 1003*07dc1947SRichard Lowe #define DW_DLE_FRAME_AUGMENTATION_UNKNOWN 195 1004*07dc1947SRichard Lowe #define DW_DLE_PUBTYPE_CONTEXT 196 /* Unused. */ 1005*07dc1947SRichard Lowe #define DW_DLE_DEBUG_PUBTYPES_LENGTH_BAD 197 1006*07dc1947SRichard Lowe #define DW_DLE_DEBUG_PUBTYPES_VERSION_ERROR 198 1007*07dc1947SRichard Lowe #define DW_DLE_DEBUG_PUBTYPES_DUPLICATE 199 1008*07dc1947SRichard Lowe #define DW_DLE_FRAME_CIE_DECODE_ERROR 200 1009*07dc1947SRichard Lowe #define DW_DLE_FRAME_REGISTER_UNREPRESENTABLE 201 1010*07dc1947SRichard Lowe #define DW_DLE_FRAME_REGISTER_COUNT_MISMATCH 202 1011*07dc1947SRichard Lowe #define DW_DLE_LINK_LOOP 203 1012*07dc1947SRichard Lowe #define DW_DLE_STRP_OFFSET_BAD 204 1013*07dc1947SRichard Lowe #define DW_DLE_DEBUG_RANGES_DUPLICATE 205 1014*07dc1947SRichard Lowe #define DW_DLE_DEBUG_RANGES_OFFSET_BAD 206 1015*07dc1947SRichard Lowe #define DW_DLE_DEBUG_RANGES_MISSING_END 207 1016*07dc1947SRichard Lowe #define DW_DLE_DEBUG_RANGES_OUT_OF_MEM 208 1017*07dc1947SRichard Lowe #define DW_DLE_DEBUG_SYMTAB_ERR 209 1018*07dc1947SRichard Lowe #define DW_DLE_DEBUG_STRTAB_ERR 210 1019*07dc1947SRichard Lowe #define DW_DLE_RELOC_MISMATCH_INDEX 211 1020*07dc1947SRichard Lowe #define DW_DLE_RELOC_MISMATCH_RELOC_INDEX 212 1021*07dc1947SRichard Lowe #define DW_DLE_RELOC_MISMATCH_STRTAB_INDEX 213 1022*07dc1947SRichard Lowe #define DW_DLE_RELOC_SECTION_MISMATCH 214 1023*07dc1947SRichard Lowe #define DW_DLE_RELOC_SECTION_MISSING_INDEX 215 1024*07dc1947SRichard Lowe #define DW_DLE_RELOC_SECTION_LENGTH_ODD 216 1025*07dc1947SRichard Lowe #define DW_DLE_RELOC_SECTION_PTR_NULL 217 1026*07dc1947SRichard Lowe #define DW_DLE_RELOC_SECTION_MALLOC_FAIL 218 1027*07dc1947SRichard Lowe #define DW_DLE_NO_ELF64_SUPPORT 219 1028*07dc1947SRichard Lowe #define DW_DLE_MISSING_ELF64_SUPPORT 220 1029*07dc1947SRichard Lowe #define DW_DLE_ORPHAN_FDE 221 1030*07dc1947SRichard Lowe #define DW_DLE_DUPLICATE_INST_BLOCK 222 1031*07dc1947SRichard Lowe #define DW_DLE_BAD_REF_SIG8_FORM 223 1032*07dc1947SRichard Lowe #define DW_DLE_ATTR_EXPRLOC_FORM_BAD 224 1033*07dc1947SRichard Lowe #define DW_DLE_FORM_SEC_OFFSET_LENGTH_BAD 225 1034*07dc1947SRichard Lowe #define DW_DLE_NOT_REF_FORM 226 1035*07dc1947SRichard Lowe #define DW_DLE_DEBUG_FRAME_LENGTH_NOT_MULTIPLE 227 1036*07dc1947SRichard Lowe 1037*07dc1947SRichard Lowe 103849d3bc91SRichard Lowe 103949d3bc91SRichard Lowe /* DW_DLE_LAST MUST EQUAL LAST ERROR NUMBER */ 1040*07dc1947SRichard Lowe #define DW_DLE_LAST 227 104149d3bc91SRichard Lowe #define DW_DLE_LO_USER 0x10000 104249d3bc91SRichard Lowe 1043*07dc1947SRichard Lowe /* Taken as meaning 'undefined value', this is not 104449d3bc91SRichard Lowe a column or register number. 104549d3bc91SRichard Lowe Only present at libdwarf runtime. Never on disk. 104649d3bc91SRichard Lowe DW_FRAME_* Values present on disk are in dwarf.h 104749d3bc91SRichard Lowe */ 104849d3bc91SRichard Lowe #define DW_FRAME_UNDEFINED_VAL 1034 104949d3bc91SRichard Lowe 1050*07dc1947SRichard Lowe /* Taken as meaning 'same value' as caller had, not a column 105149d3bc91SRichard Lowe or register number 105249d3bc91SRichard Lowe Only present at libdwarf runtime. Never on disk. 105349d3bc91SRichard Lowe DW_FRAME_* Values present on disk are in dwarf.h 105449d3bc91SRichard Lowe */ 105549d3bc91SRichard Lowe #define DW_FRAME_SAME_VAL 1035 105649d3bc91SRichard Lowe 105749d3bc91SRichard Lowe 105849d3bc91SRichard Lowe 105949d3bc91SRichard Lowe /* error return values 106049d3bc91SRichard Lowe */ 106149d3bc91SRichard Lowe #define DW_DLV_BADADDR (~(Dwarf_Addr)0) 106249d3bc91SRichard Lowe /* for functions returning target address */ 106349d3bc91SRichard Lowe 106449d3bc91SRichard Lowe #define DW_DLV_NOCOUNT ((Dwarf_Signed)-1) 106549d3bc91SRichard Lowe /* for functions returning count */ 106649d3bc91SRichard Lowe 106749d3bc91SRichard Lowe #define DW_DLV_BADOFFSET (~(Dwarf_Off)0) 106849d3bc91SRichard Lowe /* for functions returning offset */ 106949d3bc91SRichard Lowe 107049d3bc91SRichard Lowe /* standard return values for functions */ 107149d3bc91SRichard Lowe #define DW_DLV_NO_ENTRY -1 107249d3bc91SRichard Lowe #define DW_DLV_OK 0 107349d3bc91SRichard Lowe #define DW_DLV_ERROR 1 107449d3bc91SRichard Lowe 107549d3bc91SRichard Lowe /* Special values for offset_into_exception_table field of dwarf fde's. */ 107649d3bc91SRichard Lowe /* The following value indicates that there is no Exception table offset 107749d3bc91SRichard Lowe associated with a dwarf frame. */ 107849d3bc91SRichard Lowe #define DW_DLX_NO_EH_OFFSET (-1LL) 107949d3bc91SRichard Lowe /* The following value indicates that the producer was unable to analyse the 108049d3bc91SRichard Lowe source file to generate Exception tables for this function. */ 108149d3bc91SRichard Lowe #define DW_DLX_EH_OFFSET_UNAVAILABLE (-2LL) 108249d3bc91SRichard Lowe 108349d3bc91SRichard Lowe 108449d3bc91SRichard Lowe /*===========================================================================*/ 108549d3bc91SRichard Lowe /* Dwarf consumer interface initialization and termination operations */ 108649d3bc91SRichard Lowe 1087*07dc1947SRichard Lowe /* Initialization based on Unix open fd (using libelf internally). */ 108849d3bc91SRichard Lowe int dwarf_init(int /*fd*/, 108949d3bc91SRichard Lowe Dwarf_Unsigned /*access*/, 109049d3bc91SRichard Lowe Dwarf_Handler /*errhand*/, 109149d3bc91SRichard Lowe Dwarf_Ptr /*errarg*/, 109249d3bc91SRichard Lowe Dwarf_Debug* /*dbg*/, 109349d3bc91SRichard Lowe Dwarf_Error* /*error*/); 109449d3bc91SRichard Lowe 1095*07dc1947SRichard Lowe /* Initialization based on libelf/sgi-fastlibelf open pointer. */ 109649d3bc91SRichard Lowe int dwarf_elf_init(dwarf_elf_handle /*elf*/, 109749d3bc91SRichard Lowe Dwarf_Unsigned /*access*/, 109849d3bc91SRichard Lowe Dwarf_Handler /*errhand*/, 109949d3bc91SRichard Lowe Dwarf_Ptr /*errarg*/, 110049d3bc91SRichard Lowe Dwarf_Debug* /*dbg*/, 110149d3bc91SRichard Lowe Dwarf_Error* /*error*/); 110249d3bc91SRichard Lowe 110349d3bc91SRichard Lowe /* Undocumented function for memory allocator. */ 110449d3bc91SRichard Lowe void dwarf_print_memory_stats(Dwarf_Debug /*dbg*/); 110549d3bc91SRichard Lowe 110649d3bc91SRichard Lowe int dwarf_get_elf(Dwarf_Debug /*dbg*/, 110749d3bc91SRichard Lowe dwarf_elf_handle* /*return_elfptr*/, 110849d3bc91SRichard Lowe Dwarf_Error* /*error*/); 110949d3bc91SRichard Lowe 111049d3bc91SRichard Lowe int dwarf_finish(Dwarf_Debug /*dbg*/, Dwarf_Error* /*error*/); 111149d3bc91SRichard Lowe 1112*07dc1947SRichard Lowe 1113*07dc1947SRichard Lowe int dwarf_object_init(Dwarf_Obj_Access_Interface* /* obj */, 1114*07dc1947SRichard Lowe Dwarf_Handler /* errhand */, 1115*07dc1947SRichard Lowe Dwarf_Ptr /* errarg */, 1116*07dc1947SRichard Lowe Dwarf_Debug* /* dbg */, 1117*07dc1947SRichard Lowe Dwarf_Error* /* error */); 1118*07dc1947SRichard Lowe 1119*07dc1947SRichard Lowe int dwarf_object_finish(Dwarf_Debug /* dbg */, 1120*07dc1947SRichard Lowe Dwarf_Error* /* error */); 1121*07dc1947SRichard Lowe 112249d3bc91SRichard Lowe /* die traversal operations */ 1123*07dc1947SRichard Lowe int dwarf_next_cu_header_b(Dwarf_Debug /*dbg*/, 1124*07dc1947SRichard Lowe Dwarf_Unsigned* /*cu_header_length*/, 1125*07dc1947SRichard Lowe Dwarf_Half* /*version_stamp*/, 1126*07dc1947SRichard Lowe Dwarf_Off* /*abbrev_offset*/, 1127*07dc1947SRichard Lowe Dwarf_Half* /*address_size*/, 1128*07dc1947SRichard Lowe Dwarf_Half* /*length_size*/, 1129*07dc1947SRichard Lowe Dwarf_Half* /*extension_size*/, 1130*07dc1947SRichard Lowe Dwarf_Unsigned* /*next_cu_header_offset*/, 1131*07dc1947SRichard Lowe Dwarf_Error* /*error*/); 1132*07dc1947SRichard Lowe /* The following is now obsolete, though supported. November 2009. */ 113349d3bc91SRichard Lowe int dwarf_next_cu_header(Dwarf_Debug /*dbg*/, 113449d3bc91SRichard Lowe Dwarf_Unsigned* /*cu_header_length*/, 113549d3bc91SRichard Lowe Dwarf_Half* /*version_stamp*/, 113649d3bc91SRichard Lowe Dwarf_Off* /*abbrev_offset*/, 113749d3bc91SRichard Lowe Dwarf_Half* /*address_size*/, 113849d3bc91SRichard Lowe Dwarf_Unsigned* /*next_cu_header_offset*/, 113949d3bc91SRichard Lowe Dwarf_Error* /*error*/); 114049d3bc91SRichard Lowe 114149d3bc91SRichard Lowe int dwarf_siblingof(Dwarf_Debug /*dbg*/, 114249d3bc91SRichard Lowe Dwarf_Die /*die*/, 114349d3bc91SRichard Lowe Dwarf_Die* /*return_siblingdie*/, 114449d3bc91SRichard Lowe Dwarf_Error* /*error*/); 114549d3bc91SRichard Lowe 114649d3bc91SRichard Lowe int dwarf_child(Dwarf_Die /*die*/, 114749d3bc91SRichard Lowe Dwarf_Die* /*return_childdie*/, 114849d3bc91SRichard Lowe Dwarf_Error* /*error*/); 114949d3bc91SRichard Lowe 1150*07dc1947SRichard Lowe /* Finding die given global (not CU-relative) offset */ 115149d3bc91SRichard Lowe int dwarf_offdie(Dwarf_Debug /*dbg*/, 115249d3bc91SRichard Lowe Dwarf_Off /*offset*/, 115349d3bc91SRichard Lowe Dwarf_Die* /*return_die*/, 115449d3bc91SRichard Lowe Dwarf_Error* /*error*/); 115549d3bc91SRichard Lowe 1156*07dc1947SRichard Lowe /* Higher level functions (Unimplemented) */ 115749d3bc91SRichard Lowe int dwarf_pcfile(Dwarf_Debug /*dbg*/, 115849d3bc91SRichard Lowe Dwarf_Addr /*pc*/, 115949d3bc91SRichard Lowe Dwarf_Die* /*return_die*/, 116049d3bc91SRichard Lowe Dwarf_Error* /*error*/); 116149d3bc91SRichard Lowe 116249d3bc91SRichard Lowe /* Unimplemented */ 116349d3bc91SRichard Lowe int dwarf_pcsubr(Dwarf_Debug /*dbg*/, 116449d3bc91SRichard Lowe Dwarf_Addr /*pc*/, 116549d3bc91SRichard Lowe Dwarf_Die* /*return_die*/, 116649d3bc91SRichard Lowe Dwarf_Error* /*error*/); 116749d3bc91SRichard Lowe 116849d3bc91SRichard Lowe /* Unimplemented */ 116949d3bc91SRichard Lowe int dwarf_pcscope(Dwarf_Debug /*dbg*/, 117049d3bc91SRichard Lowe Dwarf_Addr /*pc*/, 117149d3bc91SRichard Lowe Dwarf_Die* /*return_die*/, 117249d3bc91SRichard Lowe Dwarf_Error* /*error*/); 117349d3bc91SRichard Lowe 117449d3bc91SRichard Lowe /* operations on DIEs */ 117549d3bc91SRichard Lowe int dwarf_tag(Dwarf_Die /*die*/, 117649d3bc91SRichard Lowe Dwarf_Half* /*return_tag*/, 117749d3bc91SRichard Lowe Dwarf_Error* /*error*/); 117849d3bc91SRichard Lowe 117949d3bc91SRichard Lowe /* utility? */ 1180*07dc1947SRichard Lowe /* dwarf_dieoffset returns the global debug_info 1181*07dc1947SRichard Lowe section offset, not the CU relative offset. */ 118249d3bc91SRichard Lowe int dwarf_dieoffset(Dwarf_Die /*die*/, 118349d3bc91SRichard Lowe Dwarf_Off* /*return_offset*/, 118449d3bc91SRichard Lowe Dwarf_Error* /*error*/); 118549d3bc91SRichard Lowe 1186*07dc1947SRichard Lowe /* dwarf_CU_dieoffset_given_die returns 1187*07dc1947SRichard Lowe the global debug_info section offset of the CU die 1188*07dc1947SRichard Lowe that is the CU containing the given_die 1189*07dc1947SRichard Lowe (the passed in DIE can be any DIE). 1190*07dc1947SRichard Lowe This information makes it possible for a consumer to 1191*07dc1947SRichard Lowe find and print CU context information for any die. 1192*07dc1947SRichard Lowe See also dwarf_get_cu_die_offset_given_cu_header_offset(). */ 1193*07dc1947SRichard Lowe int dwarf_CU_dieoffset_given_die(Dwarf_Die /*given_die*/, 1194*07dc1947SRichard Lowe Dwarf_Off* /*return_offset*/, 1195*07dc1947SRichard Lowe Dwarf_Error* /*error*/); 1196*07dc1947SRichard Lowe 1197*07dc1947SRichard Lowe /* dwarf_die_CU_offset returns the CU relative offset 1198*07dc1947SRichard Lowe not the global debug_info section offset, given 1199*07dc1947SRichard Lowe any DIE in the CU. See also dwarf_CU_dieoffset_given_die(). 1200*07dc1947SRichard Lowe */ 120149d3bc91SRichard Lowe int dwarf_die_CU_offset(Dwarf_Die /*die*/, 120249d3bc91SRichard Lowe Dwarf_Off* /*return_offset*/, 120349d3bc91SRichard Lowe Dwarf_Error* /*error*/); 120449d3bc91SRichard Lowe 1205*07dc1947SRichard Lowe int dwarf_die_CU_offset_range(Dwarf_Die /*die*/, 1206*07dc1947SRichard Lowe Dwarf_Off* /*return_CU_header_offset*/, 1207*07dc1947SRichard Lowe Dwarf_Off* /*return_CU_length_bytes*/, 1208*07dc1947SRichard Lowe Dwarf_Error* /*error*/); 1209*07dc1947SRichard Lowe 121049d3bc91SRichard Lowe int dwarf_attr (Dwarf_Die /*die*/, 121149d3bc91SRichard Lowe Dwarf_Half /*attr*/, 121249d3bc91SRichard Lowe Dwarf_Attribute * /*returned_attr*/, 121349d3bc91SRichard Lowe Dwarf_Error* /*error*/); 121449d3bc91SRichard Lowe 121549d3bc91SRichard Lowe int dwarf_diename(Dwarf_Die /*die*/, 121649d3bc91SRichard Lowe char ** /*diename*/, 121749d3bc91SRichard Lowe Dwarf_Error* /*error*/); 121849d3bc91SRichard Lowe 1219*07dc1947SRichard Lowe /* Returns the abbrev code of the die. Cannot fail. */ 1220*07dc1947SRichard Lowe int dwarf_die_abbrev_code(Dwarf_Die /*die */); 1221*07dc1947SRichard Lowe 1222*07dc1947SRichard Lowe 122349d3bc91SRichard Lowe /* convenience functions, alternative to using dwarf_attrlist() */ 122449d3bc91SRichard Lowe int dwarf_hasattr(Dwarf_Die /*die*/, 122549d3bc91SRichard Lowe Dwarf_Half /*attr*/, 122649d3bc91SRichard Lowe Dwarf_Bool * /*returned_bool*/, 122749d3bc91SRichard Lowe Dwarf_Error* /*error*/); 122849d3bc91SRichard Lowe 122949d3bc91SRichard Lowe /* dwarf_loclist_n preferred over dwarf_loclist */ 123049d3bc91SRichard Lowe int dwarf_loclist_n(Dwarf_Attribute /*attr*/, 123149d3bc91SRichard Lowe Dwarf_Locdesc*** /*llbuf*/, 123249d3bc91SRichard Lowe Dwarf_Signed * /*locCount*/, 123349d3bc91SRichard Lowe Dwarf_Error* /*error*/); 123449d3bc91SRichard Lowe 123549d3bc91SRichard Lowe int dwarf_loclist(Dwarf_Attribute /*attr*/, /* inflexible! */ 123649d3bc91SRichard Lowe Dwarf_Locdesc** /*llbuf*/, 123749d3bc91SRichard Lowe Dwarf_Signed * /*locCount*/, 123849d3bc91SRichard Lowe Dwarf_Error* /*error*/); 123949d3bc91SRichard Lowe 1240*07dc1947SRichard Lowe /* Extracts a dwarf expression from an expression byte stream. 1241*07dc1947SRichard Lowe Useful to get expressions from DW_CFA_def_cfa_expression 1242*07dc1947SRichard Lowe DW_CFA_expression DW_CFA_val_expression expression bytes. 1243*07dc1947SRichard Lowe 27 April 2009: dwarf_loclist_from_expr() interface with 1244*07dc1947SRichard Lowe no addr_size is obsolete but supported, 1245*07dc1947SRichard Lowe use dwarf_loclist_from_expr_a() instead. 1246*07dc1947SRichard Lowe */ 1247*07dc1947SRichard Lowe int dwarf_loclist_from_expr(Dwarf_Debug dbg, 1248*07dc1947SRichard Lowe Dwarf_Ptr expression_in, 1249*07dc1947SRichard Lowe Dwarf_Unsigned expression_length, 1250*07dc1947SRichard Lowe Dwarf_Locdesc ** llbuf, 1251*07dc1947SRichard Lowe Dwarf_Signed * listlen, Dwarf_Error * error); 1252*07dc1947SRichard Lowe 1253*07dc1947SRichard Lowe /* dwarf_loclist_from_expr_a() new 27 Apr 2009: added addr_size argument. */ 1254*07dc1947SRichard Lowe int dwarf_loclist_from_expr_a(Dwarf_Debug dbg, 1255*07dc1947SRichard Lowe Dwarf_Ptr expression_in, 1256*07dc1947SRichard Lowe Dwarf_Unsigned expression_length, 1257*07dc1947SRichard Lowe Dwarf_Half addr_size, 1258*07dc1947SRichard Lowe Dwarf_Locdesc ** llbuf, 1259*07dc1947SRichard Lowe Dwarf_Signed * listlen, Dwarf_Error * error); 1260*07dc1947SRichard Lowe 126149d3bc91SRichard Lowe /* Unimplemented */ 126249d3bc91SRichard Lowe int dwarf_stringlen(Dwarf_Die /*die*/, 126349d3bc91SRichard Lowe Dwarf_Locdesc ** /*returned_locdesc*/, 126449d3bc91SRichard Lowe Dwarf_Error* /*error*/); 126549d3bc91SRichard Lowe 126649d3bc91SRichard Lowe /* Unimplemented */ 126749d3bc91SRichard Lowe int dwarf_subscrcnt(Dwarf_Die /*die*/, 126849d3bc91SRichard Lowe Dwarf_Signed * /*returned_count*/, 126949d3bc91SRichard Lowe Dwarf_Error* /*error*/); 127049d3bc91SRichard Lowe 127149d3bc91SRichard Lowe /* Unimplemented */ 127249d3bc91SRichard Lowe int dwarf_nthsubscr(Dwarf_Die /*die*/, 127349d3bc91SRichard Lowe Dwarf_Unsigned /*ssndx*/, 127449d3bc91SRichard Lowe Dwarf_Die * /*returned_die*/, 127549d3bc91SRichard Lowe Dwarf_Error* /*error*/); 127649d3bc91SRichard Lowe 127749d3bc91SRichard Lowe int dwarf_lowpc(Dwarf_Die /*die*/, 127849d3bc91SRichard Lowe Dwarf_Addr * /*returned_addr*/, 127949d3bc91SRichard Lowe Dwarf_Error* /*error*/); 128049d3bc91SRichard Lowe 128149d3bc91SRichard Lowe int dwarf_highpc(Dwarf_Die /*die*/, 128249d3bc91SRichard Lowe Dwarf_Addr * /*returned_addr*/, 128349d3bc91SRichard Lowe Dwarf_Error* /*error*/); 128449d3bc91SRichard Lowe 128549d3bc91SRichard Lowe int dwarf_bytesize(Dwarf_Die /*die*/, 128649d3bc91SRichard Lowe Dwarf_Unsigned * /*returned_size*/, 128749d3bc91SRichard Lowe Dwarf_Error* /*error*/); 128849d3bc91SRichard Lowe 128949d3bc91SRichard Lowe /* Unimplemented */ 129049d3bc91SRichard Lowe int dwarf_isbitfield(Dwarf_Die /*die*/, 129149d3bc91SRichard Lowe Dwarf_Bool * /*returned_bool*/, 129249d3bc91SRichard Lowe Dwarf_Error* /*error*/); 129349d3bc91SRichard Lowe 129449d3bc91SRichard Lowe int dwarf_bitsize(Dwarf_Die /*die*/, 129549d3bc91SRichard Lowe Dwarf_Unsigned * /*returned_size*/, 129649d3bc91SRichard Lowe Dwarf_Error* /*error*/); 129749d3bc91SRichard Lowe 129849d3bc91SRichard Lowe int dwarf_bitoffset(Dwarf_Die /*die*/, 129949d3bc91SRichard Lowe Dwarf_Unsigned * /*returned_offset*/, 130049d3bc91SRichard Lowe Dwarf_Error* /*error*/); 130149d3bc91SRichard Lowe 130249d3bc91SRichard Lowe int dwarf_srclang(Dwarf_Die /*die*/, 130349d3bc91SRichard Lowe Dwarf_Unsigned * /*returned_lang*/, 130449d3bc91SRichard Lowe Dwarf_Error* /*error*/); 130549d3bc91SRichard Lowe 130649d3bc91SRichard Lowe int dwarf_arrayorder(Dwarf_Die /*die*/, 130749d3bc91SRichard Lowe Dwarf_Unsigned * /*returned_order*/, 130849d3bc91SRichard Lowe Dwarf_Error* /*error*/); 130949d3bc91SRichard Lowe 131049d3bc91SRichard Lowe /* end of convenience function list */ 131149d3bc91SRichard Lowe 131249d3bc91SRichard Lowe /* this is the main interface to attributes of a DIE */ 131349d3bc91SRichard Lowe int dwarf_attrlist(Dwarf_Die /*die*/, 131449d3bc91SRichard Lowe Dwarf_Attribute** /*attrbuf*/, 131549d3bc91SRichard Lowe Dwarf_Signed * /*attrcount*/, 131649d3bc91SRichard Lowe Dwarf_Error* /*error*/); 131749d3bc91SRichard Lowe 131849d3bc91SRichard Lowe /* query operations for attributes */ 131949d3bc91SRichard Lowe int dwarf_hasform(Dwarf_Attribute /*attr*/, 132049d3bc91SRichard Lowe Dwarf_Half /*form*/, 132149d3bc91SRichard Lowe Dwarf_Bool * /*returned_bool*/, 132249d3bc91SRichard Lowe Dwarf_Error* /*error*/); 132349d3bc91SRichard Lowe 132449d3bc91SRichard Lowe int dwarf_whatform(Dwarf_Attribute /*attr*/, 132549d3bc91SRichard Lowe Dwarf_Half * /*returned_form*/, 132649d3bc91SRichard Lowe Dwarf_Error* /*error*/); 132749d3bc91SRichard Lowe 132849d3bc91SRichard Lowe int dwarf_whatform_direct(Dwarf_Attribute /*attr*/, 132949d3bc91SRichard Lowe Dwarf_Half * /*returned_form*/, 133049d3bc91SRichard Lowe Dwarf_Error* /*error*/); 133149d3bc91SRichard Lowe 133249d3bc91SRichard Lowe int dwarf_whatattr(Dwarf_Attribute /*attr*/, 133349d3bc91SRichard Lowe Dwarf_Half * /*returned_attr_num*/, 133449d3bc91SRichard Lowe Dwarf_Error* /*error*/); 133549d3bc91SRichard Lowe 133649d3bc91SRichard Lowe /* 133749d3bc91SRichard Lowe The following are concerned with the Primary Interface: getting 133849d3bc91SRichard Lowe the actual data values. One function per 'kind' of FORM. 133949d3bc91SRichard Lowe */ 134049d3bc91SRichard Lowe /* dwarf_formref returns, thru return_offset, a CU-relative offset 1341*07dc1947SRichard Lowe and does not allow DW_FORM_ref_addr*/ 134249d3bc91SRichard Lowe int dwarf_formref(Dwarf_Attribute /*attr*/, 134349d3bc91SRichard Lowe Dwarf_Off* /*return_offset*/, 134449d3bc91SRichard Lowe Dwarf_Error* /*error*/); 134549d3bc91SRichard Lowe /* dwarf_global_formref returns, thru return_offset, 134649d3bc91SRichard Lowe a debug_info-relative offset and does allow all reference forms*/ 134749d3bc91SRichard Lowe int dwarf_global_formref(Dwarf_Attribute /*attr*/, 134849d3bc91SRichard Lowe Dwarf_Off* /*return_offset*/, 134949d3bc91SRichard Lowe Dwarf_Error* /*error*/); 135049d3bc91SRichard Lowe 1351*07dc1947SRichard Lowe /* dwarf_formsig8 returns in the caller-provided 8 byte area 1352*07dc1947SRichard Lowe the 8 bytes of a DW_FORM_ref_sig8. Not a string. */ 1353*07dc1947SRichard Lowe int dwarf_formsig8(Dwarf_Attribute /*attr*/, 1354*07dc1947SRichard Lowe Dwarf_Sig8 * /*returned sig bytes*/, 1355*07dc1947SRichard Lowe Dwarf_Error* /*error*/); 1356*07dc1947SRichard Lowe 135749d3bc91SRichard Lowe int dwarf_formaddr(Dwarf_Attribute /*attr*/, 135849d3bc91SRichard Lowe Dwarf_Addr * /*returned_addr*/, 135949d3bc91SRichard Lowe Dwarf_Error* /*error*/); 136049d3bc91SRichard Lowe 136149d3bc91SRichard Lowe int dwarf_formflag(Dwarf_Attribute /*attr*/, 136249d3bc91SRichard Lowe Dwarf_Bool * /*returned_bool*/, 136349d3bc91SRichard Lowe Dwarf_Error* /*error*/); 136449d3bc91SRichard Lowe 136549d3bc91SRichard Lowe int dwarf_formudata(Dwarf_Attribute /*attr*/, 136649d3bc91SRichard Lowe Dwarf_Unsigned * /*returned_val*/, 136749d3bc91SRichard Lowe Dwarf_Error* /*error*/); 136849d3bc91SRichard Lowe 136949d3bc91SRichard Lowe int dwarf_formsdata(Dwarf_Attribute /*attr*/, 137049d3bc91SRichard Lowe Dwarf_Signed * /*returned_val*/, 137149d3bc91SRichard Lowe Dwarf_Error* /*error*/); 137249d3bc91SRichard Lowe 137349d3bc91SRichard Lowe int dwarf_formblock(Dwarf_Attribute /*attr*/, 137449d3bc91SRichard Lowe Dwarf_Block ** /*returned_block*/, 137549d3bc91SRichard Lowe Dwarf_Error* /*error*/); 137649d3bc91SRichard Lowe 137749d3bc91SRichard Lowe int dwarf_formstring(Dwarf_Attribute /*attr*/, 137849d3bc91SRichard Lowe char ** /*returned_string*/, 137949d3bc91SRichard Lowe Dwarf_Error* /*error*/); 138049d3bc91SRichard Lowe 1381*07dc1947SRichard Lowe int dwarf_formexprloc(Dwarf_Attribute /*attr*/, 1382*07dc1947SRichard Lowe Dwarf_Unsigned * /*return_exprlen*/, 1383*07dc1947SRichard Lowe Dwarf_Ptr * /*block_ptr*/, 1384*07dc1947SRichard Lowe Dwarf_Error * /*error*/); 1385*07dc1947SRichard Lowe 1386*07dc1947SRichard Lowe 138749d3bc91SRichard Lowe /* end attribute query operations. */ 138849d3bc91SRichard Lowe 138949d3bc91SRichard Lowe /* line number operations */ 139049d3bc91SRichard Lowe /* dwarf_srclines is the normal interface */ 139149d3bc91SRichard Lowe int dwarf_srclines(Dwarf_Die /*die*/, 139249d3bc91SRichard Lowe Dwarf_Line** /*linebuf*/, 139349d3bc91SRichard Lowe Dwarf_Signed * /*linecount*/, 139449d3bc91SRichard Lowe Dwarf_Error* /*error*/); 139549d3bc91SRichard Lowe 1396*07dc1947SRichard Lowe /* dwarf_srclines_dealloc, created July 2005, is the new 1397*07dc1947SRichard Lowe method for deallocating what dwarf_srclines returns. 1398*07dc1947SRichard Lowe More complete free than using dwarf_dealloc directly. */ 1399*07dc1947SRichard Lowe void dwarf_srclines_dealloc(Dwarf_Debug /*dbg*/, 1400*07dc1947SRichard Lowe Dwarf_Line* /*linebuf*/, 1401*07dc1947SRichard Lowe Dwarf_Signed /*count */); 1402*07dc1947SRichard Lowe 1403*07dc1947SRichard Lowe 140449d3bc91SRichard Lowe int dwarf_srcfiles(Dwarf_Die /*die*/, 140549d3bc91SRichard Lowe char*** /*srcfiles*/, 140649d3bc91SRichard Lowe Dwarf_Signed * /*filecount*/, 140749d3bc91SRichard Lowe Dwarf_Error* /*error*/); 140849d3bc91SRichard Lowe 140949d3bc91SRichard Lowe /* Unimplemented. */ 141049d3bc91SRichard Lowe int dwarf_dieline(Dwarf_Die /*die*/, 141149d3bc91SRichard Lowe Dwarf_Line * /*returned_line*/, 141249d3bc91SRichard Lowe Dwarf_Error * /*error*/); 141349d3bc91SRichard Lowe 141449d3bc91SRichard Lowe int dwarf_linebeginstatement(Dwarf_Line /*line*/, 141549d3bc91SRichard Lowe Dwarf_Bool * /*returned_bool*/, 141649d3bc91SRichard Lowe Dwarf_Error* /*error*/); 141749d3bc91SRichard Lowe 141849d3bc91SRichard Lowe int dwarf_lineendsequence(Dwarf_Line /*line*/, 141949d3bc91SRichard Lowe Dwarf_Bool * /*returned_bool*/, 142049d3bc91SRichard Lowe Dwarf_Error* /*error*/); 142149d3bc91SRichard Lowe 142249d3bc91SRichard Lowe int dwarf_lineno(Dwarf_Line /*line*/, 142349d3bc91SRichard Lowe Dwarf_Unsigned * /*returned_lineno*/, 142449d3bc91SRichard Lowe Dwarf_Error* /*error*/); 142549d3bc91SRichard Lowe 1426*07dc1947SRichard Lowe int dwarf_line_srcfileno(Dwarf_Line /*line*/, 1427*07dc1947SRichard Lowe Dwarf_Unsigned * /*ret_fileno*/, 1428*07dc1947SRichard Lowe Dwarf_Error * /*error*/); 1429*07dc1947SRichard Lowe 143049d3bc91SRichard Lowe int dwarf_lineaddr(Dwarf_Line /*line*/, 143149d3bc91SRichard Lowe Dwarf_Addr * /*returned_addr*/, 143249d3bc91SRichard Lowe Dwarf_Error* /*error*/); 143349d3bc91SRichard Lowe 143449d3bc91SRichard Lowe int dwarf_lineoff(Dwarf_Line /*line*/, 143549d3bc91SRichard Lowe Dwarf_Signed * /*returned_lineoffset*/, 143649d3bc91SRichard Lowe Dwarf_Error* /*error*/); 143749d3bc91SRichard Lowe 143849d3bc91SRichard Lowe int dwarf_linesrc(Dwarf_Line /*line*/, 143949d3bc91SRichard Lowe char ** /*returned_name*/, 144049d3bc91SRichard Lowe Dwarf_Error* /*error*/); 144149d3bc91SRichard Lowe 144249d3bc91SRichard Lowe int dwarf_lineblock(Dwarf_Line /*line*/, 144349d3bc91SRichard Lowe Dwarf_Bool * /*returned_bool*/, 144449d3bc91SRichard Lowe Dwarf_Error* /*error*/); 144549d3bc91SRichard Lowe 144649d3bc91SRichard Lowe /* tertiary interface to line info */ 144749d3bc91SRichard Lowe /* Unimplemented */ 144849d3bc91SRichard Lowe int dwarf_pclines(Dwarf_Debug /*dbg*/, 144949d3bc91SRichard Lowe Dwarf_Addr /*pc*/, 145049d3bc91SRichard Lowe Dwarf_Line** /*linebuf*/, 145149d3bc91SRichard Lowe Dwarf_Signed * /*linecount*/, 145249d3bc91SRichard Lowe Dwarf_Signed /*slide*/, 145349d3bc91SRichard Lowe Dwarf_Error* /*error*/); 145449d3bc91SRichard Lowe /* end line number operations */ 145549d3bc91SRichard Lowe 145649d3bc91SRichard Lowe /* global name space operations (.debug_pubnames access) */ 145749d3bc91SRichard Lowe int dwarf_get_globals(Dwarf_Debug /*dbg*/, 145849d3bc91SRichard Lowe Dwarf_Global** /*globals*/, 145949d3bc91SRichard Lowe Dwarf_Signed * /*number_of_globals*/, 146049d3bc91SRichard Lowe Dwarf_Error* /*error*/); 1461*07dc1947SRichard Lowe void dwarf_globals_dealloc(Dwarf_Debug /*dbg*/, 1462*07dc1947SRichard Lowe Dwarf_Global* /*globals*/, 1463*07dc1947SRichard Lowe Dwarf_Signed /*number_of_globals*/); 146449d3bc91SRichard Lowe 146549d3bc91SRichard Lowe int dwarf_globname(Dwarf_Global /*glob*/, 146649d3bc91SRichard Lowe char ** /*returned_name*/, 146749d3bc91SRichard Lowe Dwarf_Error* /*error*/); 146849d3bc91SRichard Lowe 146949d3bc91SRichard Lowe int dwarf_global_die_offset(Dwarf_Global /*global*/, 147049d3bc91SRichard Lowe Dwarf_Off* /*return_offset*/, 147149d3bc91SRichard Lowe Dwarf_Error * /*error*/); 147249d3bc91SRichard Lowe 1473*07dc1947SRichard Lowe /* This returns the CU die global offset if one knows the 1474*07dc1947SRichard Lowe CU header global offset. 1475*07dc1947SRichard Lowe See also dwarf_CU_dieoffset_given_die(). */ 147649d3bc91SRichard Lowe int dwarf_get_cu_die_offset_given_cu_header_offset( 147749d3bc91SRichard Lowe Dwarf_Debug /*dbg*/, 147849d3bc91SRichard Lowe Dwarf_Off /*in_cu_header_offset*/, 147949d3bc91SRichard Lowe Dwarf_Off * /*out_cu_die_offset*/, 148049d3bc91SRichard Lowe Dwarf_Error * /*err*/); 148149d3bc91SRichard Lowe #ifdef __sgi /* pragma is sgi MIPS only */ 148249d3bc91SRichard Lowe #pragma optional dwarf_get_cu_die_offset_given_cu_header_offset 148349d3bc91SRichard Lowe #endif 148449d3bc91SRichard Lowe 148549d3bc91SRichard Lowe int dwarf_global_cu_offset(Dwarf_Global /*global*/, 148649d3bc91SRichard Lowe Dwarf_Off* /*return_offset*/, 148749d3bc91SRichard Lowe Dwarf_Error* /*error*/); 148849d3bc91SRichard Lowe 148949d3bc91SRichard Lowe int dwarf_global_name_offsets(Dwarf_Global /*global*/, 149049d3bc91SRichard Lowe char ** /*returned_name*/, 149149d3bc91SRichard Lowe Dwarf_Off* /*die_offset*/, 149249d3bc91SRichard Lowe Dwarf_Off* /*cu_offset*/, 149349d3bc91SRichard Lowe Dwarf_Error* /*error*/); 149449d3bc91SRichard Lowe 149549d3bc91SRichard Lowe /* Static function name operations. */ 149649d3bc91SRichard Lowe int dwarf_get_funcs(Dwarf_Debug /*dbg*/, 149749d3bc91SRichard Lowe Dwarf_Func** /*funcs*/, 149849d3bc91SRichard Lowe Dwarf_Signed * /*number_of_funcs*/, 149949d3bc91SRichard Lowe Dwarf_Error* /*error*/); 1500*07dc1947SRichard Lowe void dwarf_funcs_dealloc(Dwarf_Debug /*dbg*/, 1501*07dc1947SRichard Lowe Dwarf_Func* /*funcs*/, 1502*07dc1947SRichard Lowe Dwarf_Signed /*number_of_funcs*/); 150349d3bc91SRichard Lowe 150449d3bc91SRichard Lowe int dwarf_funcname(Dwarf_Func /*func*/, 150549d3bc91SRichard Lowe char ** /*returned_name*/, 150649d3bc91SRichard Lowe Dwarf_Error* /*error*/); 150749d3bc91SRichard Lowe 150849d3bc91SRichard Lowe int dwarf_func_die_offset(Dwarf_Func /*func*/, 150949d3bc91SRichard Lowe Dwarf_Off* /*return_offset*/, 151049d3bc91SRichard Lowe Dwarf_Error* /*error*/); 151149d3bc91SRichard Lowe 151249d3bc91SRichard Lowe int dwarf_func_cu_offset(Dwarf_Func /*func*/, 151349d3bc91SRichard Lowe Dwarf_Off* /*return_offset*/, 151449d3bc91SRichard Lowe Dwarf_Error* /*error*/); 151549d3bc91SRichard Lowe 151649d3bc91SRichard Lowe int dwarf_func_name_offsets(Dwarf_Func /*func*/, 151749d3bc91SRichard Lowe char ** /*returned_name*/, 151849d3bc91SRichard Lowe Dwarf_Off* /*die_offset*/, 151949d3bc91SRichard Lowe Dwarf_Off* /*cu_offset*/, 152049d3bc91SRichard Lowe Dwarf_Error* /*error*/); 152149d3bc91SRichard Lowe 1522*07dc1947SRichard Lowe /* User-defined type name operations, SGI IRIX .debug_typenames section. 1523*07dc1947SRichard Lowe Same content as DWARF3 .debug_pubtypes, but defined years before 1524*07dc1947SRichard Lowe .debug_pubtypes was defined. SGI IRIX only. */ 152549d3bc91SRichard Lowe int dwarf_get_types(Dwarf_Debug /*dbg*/, 152649d3bc91SRichard Lowe Dwarf_Type** /*types*/, 152749d3bc91SRichard Lowe Dwarf_Signed * /*number_of_types*/, 152849d3bc91SRichard Lowe Dwarf_Error* /*error*/); 1529*07dc1947SRichard Lowe void dwarf_types_dealloc(Dwarf_Debug /*dbg*/, 1530*07dc1947SRichard Lowe Dwarf_Type* /*types*/, 1531*07dc1947SRichard Lowe Dwarf_Signed /*number_of_types*/); 1532*07dc1947SRichard Lowe 153349d3bc91SRichard Lowe 153449d3bc91SRichard Lowe int dwarf_typename(Dwarf_Type /*type*/, 153549d3bc91SRichard Lowe char ** /*returned_name*/, 153649d3bc91SRichard Lowe Dwarf_Error* /*error*/); 153749d3bc91SRichard Lowe 153849d3bc91SRichard Lowe int dwarf_type_die_offset(Dwarf_Type /*type*/, 153949d3bc91SRichard Lowe Dwarf_Off* /*return_offset*/, 154049d3bc91SRichard Lowe Dwarf_Error* /*error*/); 154149d3bc91SRichard Lowe 154249d3bc91SRichard Lowe int dwarf_type_cu_offset(Dwarf_Type /*type*/, 154349d3bc91SRichard Lowe Dwarf_Off* /*return_offset*/, 154449d3bc91SRichard Lowe Dwarf_Error* /*error*/); 154549d3bc91SRichard Lowe 154649d3bc91SRichard Lowe int dwarf_type_name_offsets(Dwarf_Type /*type*/, 154749d3bc91SRichard Lowe char ** /*returned_name*/, 154849d3bc91SRichard Lowe Dwarf_Off* /*die_offset*/, 154949d3bc91SRichard Lowe Dwarf_Off* /*cu_offset*/, 155049d3bc91SRichard Lowe Dwarf_Error* /*error*/); 155149d3bc91SRichard Lowe 1552*07dc1947SRichard Lowe /* User-defined type name operations, DWARF3 .debug_pubtypes section. 1553*07dc1947SRichard Lowe */ 1554*07dc1947SRichard Lowe int dwarf_get_pubtypes(Dwarf_Debug /*dbg*/, 1555*07dc1947SRichard Lowe Dwarf_Type** /*types*/, 1556*07dc1947SRichard Lowe Dwarf_Signed * /*number_of_types*/, 1557*07dc1947SRichard Lowe Dwarf_Error* /*error*/); 1558*07dc1947SRichard Lowe void dwarf_pubtypes_dealloc(Dwarf_Debug /*dbg*/, 1559*07dc1947SRichard Lowe Dwarf_Type* /*pubtypes*/, 1560*07dc1947SRichard Lowe Dwarf_Signed /*number_of_pubtypes*/); 1561*07dc1947SRichard Lowe 1562*07dc1947SRichard Lowe 1563*07dc1947SRichard Lowe int dwarf_pubtypename(Dwarf_Type /*type*/, 1564*07dc1947SRichard Lowe char ** /*returned_name*/, 1565*07dc1947SRichard Lowe Dwarf_Error* /*error*/); 1566*07dc1947SRichard Lowe 1567*07dc1947SRichard Lowe int dwarf_pubtype_die_offset(Dwarf_Type /*type*/, 1568*07dc1947SRichard Lowe Dwarf_Off* /*return_offset*/, 1569*07dc1947SRichard Lowe Dwarf_Error* /*error*/); 1570*07dc1947SRichard Lowe 1571*07dc1947SRichard Lowe int dwarf_pubtype_cu_offset(Dwarf_Type /*type*/, 1572*07dc1947SRichard Lowe Dwarf_Off* /*return_offset*/, 1573*07dc1947SRichard Lowe Dwarf_Error* /*error*/); 1574*07dc1947SRichard Lowe 1575*07dc1947SRichard Lowe int dwarf_pubtype_name_offsets(Dwarf_Type /*type*/, 1576*07dc1947SRichard Lowe char ** /*returned_name*/, 1577*07dc1947SRichard Lowe Dwarf_Off* /*die_offset*/, 1578*07dc1947SRichard Lowe Dwarf_Off* /*cu_offset*/, 1579*07dc1947SRichard Lowe Dwarf_Error* /*error*/); 1580*07dc1947SRichard Lowe 158149d3bc91SRichard Lowe /* File-scope static variable name operations. */ 158249d3bc91SRichard Lowe int dwarf_get_vars(Dwarf_Debug /*dbg*/, 158349d3bc91SRichard Lowe Dwarf_Var** /*vars*/, 158449d3bc91SRichard Lowe Dwarf_Signed * /*number_of_vars*/, 158549d3bc91SRichard Lowe Dwarf_Error* /*error*/); 1586*07dc1947SRichard Lowe void dwarf_vars_dealloc(Dwarf_Debug /*dbg*/, 1587*07dc1947SRichard Lowe Dwarf_Var* /*vars*/, 1588*07dc1947SRichard Lowe Dwarf_Signed /*number_of_vars*/); 1589*07dc1947SRichard Lowe 159049d3bc91SRichard Lowe 159149d3bc91SRichard Lowe int dwarf_varname(Dwarf_Var /*var*/, 159249d3bc91SRichard Lowe char ** /*returned_name*/, 159349d3bc91SRichard Lowe Dwarf_Error* /*error*/); 159449d3bc91SRichard Lowe 159549d3bc91SRichard Lowe int dwarf_var_die_offset(Dwarf_Var /*var*/, 159649d3bc91SRichard Lowe Dwarf_Off* /*return_offset*/, 159749d3bc91SRichard Lowe Dwarf_Error* /*error*/); 159849d3bc91SRichard Lowe 159949d3bc91SRichard Lowe int dwarf_var_cu_offset(Dwarf_Var /*var*/, 160049d3bc91SRichard Lowe Dwarf_Off* /*return_offset*/, 160149d3bc91SRichard Lowe Dwarf_Error* /*error*/); 160249d3bc91SRichard Lowe 160349d3bc91SRichard Lowe int dwarf_var_name_offsets(Dwarf_Var /*var*/, 160449d3bc91SRichard Lowe char ** /*returned_name*/, 160549d3bc91SRichard Lowe Dwarf_Off* /*die_offset*/, 160649d3bc91SRichard Lowe Dwarf_Off* /*cu_offset*/, 160749d3bc91SRichard Lowe Dwarf_Error* /*error*/); 160849d3bc91SRichard Lowe 160949d3bc91SRichard Lowe /* weak name operations. */ 161049d3bc91SRichard Lowe int dwarf_get_weaks(Dwarf_Debug /*dbg*/, 161149d3bc91SRichard Lowe Dwarf_Weak** /*weaks*/, 161249d3bc91SRichard Lowe Dwarf_Signed * /*number_of_weaks*/, 161349d3bc91SRichard Lowe Dwarf_Error* /*error*/); 1614*07dc1947SRichard Lowe void dwarf_weaks_dealloc(Dwarf_Debug /*dbg*/, 1615*07dc1947SRichard Lowe Dwarf_Weak* /*weaks*/, 1616*07dc1947SRichard Lowe Dwarf_Signed /*number_of_weaks*/); 1617*07dc1947SRichard Lowe 161849d3bc91SRichard Lowe 161949d3bc91SRichard Lowe int dwarf_weakname(Dwarf_Weak /*weak*/, 162049d3bc91SRichard Lowe char ** /*returned_name*/, 162149d3bc91SRichard Lowe Dwarf_Error* /*error*/); 162249d3bc91SRichard Lowe 162349d3bc91SRichard Lowe int dwarf_weak_die_offset(Dwarf_Weak /*weak*/, 162449d3bc91SRichard Lowe Dwarf_Off* /*return_offset*/, 162549d3bc91SRichard Lowe Dwarf_Error* /*error*/); 162649d3bc91SRichard Lowe 162749d3bc91SRichard Lowe int dwarf_weak_cu_offset(Dwarf_Weak /*weak*/, 162849d3bc91SRichard Lowe Dwarf_Off* /*return_offset*/, 162949d3bc91SRichard Lowe Dwarf_Error* /*error*/); 163049d3bc91SRichard Lowe 163149d3bc91SRichard Lowe int dwarf_weak_name_offsets(Dwarf_Weak /*weak*/, 163249d3bc91SRichard Lowe char ** /*returned_name*/, 163349d3bc91SRichard Lowe Dwarf_Off* /*die_offset*/, 163449d3bc91SRichard Lowe Dwarf_Off* /*cu_offset*/, 163549d3bc91SRichard Lowe Dwarf_Error* /*error*/); 163649d3bc91SRichard Lowe 163749d3bc91SRichard Lowe /* location list section operation. (.debug_loc access) */ 163849d3bc91SRichard Lowe int dwarf_get_loclist_entry(Dwarf_Debug /*dbg*/, 163949d3bc91SRichard Lowe Dwarf_Unsigned /*offset*/, 164049d3bc91SRichard Lowe Dwarf_Addr* /*hipc*/, 164149d3bc91SRichard Lowe Dwarf_Addr* /*lopc*/, 164249d3bc91SRichard Lowe Dwarf_Ptr* /*data*/, 164349d3bc91SRichard Lowe Dwarf_Unsigned* /*entry_len*/, 164449d3bc91SRichard Lowe Dwarf_Unsigned* /*next_entry*/, 164549d3bc91SRichard Lowe Dwarf_Error* /*error*/); 164649d3bc91SRichard Lowe 164749d3bc91SRichard Lowe /* abbreviation section operations */ 164849d3bc91SRichard Lowe int dwarf_get_abbrev(Dwarf_Debug /*dbg*/, 164949d3bc91SRichard Lowe Dwarf_Unsigned /*offset*/, 165049d3bc91SRichard Lowe Dwarf_Abbrev * /*returned_abbrev*/, 165149d3bc91SRichard Lowe Dwarf_Unsigned* /*length*/, 165249d3bc91SRichard Lowe Dwarf_Unsigned* /*attr_count*/, 165349d3bc91SRichard Lowe Dwarf_Error* /*error*/); 165449d3bc91SRichard Lowe 165549d3bc91SRichard Lowe int dwarf_get_abbrev_tag(Dwarf_Abbrev /*abbrev*/, 165649d3bc91SRichard Lowe Dwarf_Half* /*return_tag_number*/, 165749d3bc91SRichard Lowe Dwarf_Error* /*error*/); 165849d3bc91SRichard Lowe int dwarf_get_abbrev_code(Dwarf_Abbrev /*abbrev*/, 165949d3bc91SRichard Lowe Dwarf_Unsigned* /*return_code_number*/, 166049d3bc91SRichard Lowe Dwarf_Error* /*error*/); 166149d3bc91SRichard Lowe 166249d3bc91SRichard Lowe int dwarf_get_abbrev_children_flag(Dwarf_Abbrev /*abbrev*/, 166349d3bc91SRichard Lowe Dwarf_Signed* /*return_flag*/, 166449d3bc91SRichard Lowe Dwarf_Error* /*error*/); 166549d3bc91SRichard Lowe 166649d3bc91SRichard Lowe int dwarf_get_abbrev_entry(Dwarf_Abbrev /*abbrev*/, 166749d3bc91SRichard Lowe Dwarf_Signed /*index*/, 166849d3bc91SRichard Lowe Dwarf_Half * /*returned_attr_num*/, 166949d3bc91SRichard Lowe Dwarf_Signed* /*form*/, 167049d3bc91SRichard Lowe Dwarf_Off* /*offset*/, 167149d3bc91SRichard Lowe Dwarf_Error* /*error*/); 167249d3bc91SRichard Lowe 167349d3bc91SRichard Lowe /* consumer string section operation */ 167449d3bc91SRichard Lowe int dwarf_get_str(Dwarf_Debug /*dbg*/, 167549d3bc91SRichard Lowe Dwarf_Off /*offset*/, 167649d3bc91SRichard Lowe char** /*string*/, 167749d3bc91SRichard Lowe Dwarf_Signed * /*strlen_of_string*/, 167849d3bc91SRichard Lowe Dwarf_Error* /*error*/); 167949d3bc91SRichard Lowe 168049d3bc91SRichard Lowe /* Consumer op on gnu .eh_frame info */ 168149d3bc91SRichard Lowe int dwarf_get_fde_list_eh( 168249d3bc91SRichard Lowe Dwarf_Debug /*dbg*/, 168349d3bc91SRichard Lowe Dwarf_Cie** /*cie_data*/, 168449d3bc91SRichard Lowe Dwarf_Signed* /*cie_element_count*/, 168549d3bc91SRichard Lowe Dwarf_Fde** /*fde_data*/, 168649d3bc91SRichard Lowe Dwarf_Signed* /*fde_element_count*/, 168749d3bc91SRichard Lowe Dwarf_Error* /*error*/); 168849d3bc91SRichard Lowe 168949d3bc91SRichard Lowe 169049d3bc91SRichard Lowe /* consumer operations on frame info: .debug_frame */ 169149d3bc91SRichard Lowe int dwarf_get_fde_list(Dwarf_Debug /*dbg*/, 169249d3bc91SRichard Lowe Dwarf_Cie** /*cie_data*/, 169349d3bc91SRichard Lowe Dwarf_Signed* /*cie_element_count*/, 169449d3bc91SRichard Lowe Dwarf_Fde** /*fde_data*/, 169549d3bc91SRichard Lowe Dwarf_Signed* /*fde_element_count*/, 169649d3bc91SRichard Lowe Dwarf_Error* /*error*/); 169749d3bc91SRichard Lowe 1698*07dc1947SRichard Lowe /* Release storage gotten by dwarf_get_fde_list_eh() or 1699*07dc1947SRichard Lowe dwarf_get_fde_list() */ 1700*07dc1947SRichard Lowe void dwarf_fde_cie_list_dealloc(Dwarf_Debug dbg, 1701*07dc1947SRichard Lowe Dwarf_Cie *cie_data, 1702*07dc1947SRichard Lowe Dwarf_Signed cie_element_count, 1703*07dc1947SRichard Lowe Dwarf_Fde *fde_data, 1704*07dc1947SRichard Lowe Dwarf_Signed fde_element_count); 1705*07dc1947SRichard Lowe 1706*07dc1947SRichard Lowe 170749d3bc91SRichard Lowe 170849d3bc91SRichard Lowe int dwarf_get_fde_range(Dwarf_Fde /*fde*/, 170949d3bc91SRichard Lowe Dwarf_Addr* /*low_pc*/, 171049d3bc91SRichard Lowe Dwarf_Unsigned* /*func_length*/, 171149d3bc91SRichard Lowe Dwarf_Ptr* /*fde_bytes*/, 171249d3bc91SRichard Lowe Dwarf_Unsigned* /*fde_byte_length*/, 171349d3bc91SRichard Lowe Dwarf_Off* /*cie_offset*/, 171449d3bc91SRichard Lowe Dwarf_Signed* /*cie_index*/, 171549d3bc91SRichard Lowe Dwarf_Off* /*fde_offset*/, 171649d3bc91SRichard Lowe Dwarf_Error* /*error*/); 171749d3bc91SRichard Lowe 1718*07dc1947SRichard Lowe /* Useful for IRIX only: see dwarf_get_cie_augmentation_data() 1719*07dc1947SRichard Lowe dwarf_get_fde_augmentation_data() for GNU .eh_frame. */ 172049d3bc91SRichard Lowe int dwarf_get_fde_exception_info(Dwarf_Fde /*fde*/, 172149d3bc91SRichard Lowe Dwarf_Signed* /* offset_into_exception_tables */, 172249d3bc91SRichard Lowe Dwarf_Error* /*error*/); 172349d3bc91SRichard Lowe 1724*07dc1947SRichard Lowe 172549d3bc91SRichard Lowe int dwarf_get_cie_of_fde(Dwarf_Fde /*fde*/, 172649d3bc91SRichard Lowe Dwarf_Cie * /*cie_returned*/, 172749d3bc91SRichard Lowe Dwarf_Error* /*error*/); 172849d3bc91SRichard Lowe 172949d3bc91SRichard Lowe int dwarf_get_cie_info(Dwarf_Cie /*cie*/, 173049d3bc91SRichard Lowe Dwarf_Unsigned * /*bytes_in_cie*/, 173149d3bc91SRichard Lowe Dwarf_Small* /*version*/, 173249d3bc91SRichard Lowe char ** /*augmenter*/, 173349d3bc91SRichard Lowe Dwarf_Unsigned* /*code_alignment_factor*/, 173449d3bc91SRichard Lowe Dwarf_Signed* /*data_alignment_factor*/, 173549d3bc91SRichard Lowe Dwarf_Half* /*return_address_register_rule*/, 173649d3bc91SRichard Lowe Dwarf_Ptr* /*initial_instructions*/, 173749d3bc91SRichard Lowe Dwarf_Unsigned* /*initial_instructions_length*/, 173849d3bc91SRichard Lowe Dwarf_Error* /*error*/); 173949d3bc91SRichard Lowe 1740*07dc1947SRichard Lowe /* dwarf_get_cie_index new September 2009. */ 1741*07dc1947SRichard Lowe int dwarf_get_cie_index( 1742*07dc1947SRichard Lowe Dwarf_Cie /*cie*/, 1743*07dc1947SRichard Lowe Dwarf_Signed* /*index*/, 1744*07dc1947SRichard Lowe Dwarf_Error* /*error*/ ); 1745*07dc1947SRichard Lowe 1746*07dc1947SRichard Lowe 174749d3bc91SRichard Lowe int dwarf_get_fde_instr_bytes(Dwarf_Fde /*fde*/, 174849d3bc91SRichard Lowe Dwarf_Ptr * /*outinstrs*/, Dwarf_Unsigned * /*outlen*/, 174949d3bc91SRichard Lowe Dwarf_Error * /*error*/); 175049d3bc91SRichard Lowe 175149d3bc91SRichard Lowe int dwarf_get_fde_info_for_all_regs(Dwarf_Fde /*fde*/, 175249d3bc91SRichard Lowe Dwarf_Addr /*pc_requested*/, 175349d3bc91SRichard Lowe Dwarf_Regtable* /*reg_table*/, 175449d3bc91SRichard Lowe Dwarf_Addr* /*row_pc*/, 175549d3bc91SRichard Lowe Dwarf_Error* /*error*/); 175649d3bc91SRichard Lowe 1757*07dc1947SRichard Lowe int dwarf_get_fde_info_for_all_regs3(Dwarf_Fde /*fde*/, 1758*07dc1947SRichard Lowe Dwarf_Addr /*pc_requested*/, 1759*07dc1947SRichard Lowe Dwarf_Regtable3* /*reg_table*/, 1760*07dc1947SRichard Lowe Dwarf_Addr* /*row_pc*/, 1761*07dc1947SRichard Lowe Dwarf_Error* /*error*/); 1762*07dc1947SRichard Lowe 1763*07dc1947SRichard Lowe /* In this older interface DW_FRAME_CFA_COL is a meaningful 1764*07dc1947SRichard Lowe column (which does not work well with DWARF3 or 1765*07dc1947SRichard Lowe non-MIPS architectures). */ 176649d3bc91SRichard Lowe int dwarf_get_fde_info_for_reg(Dwarf_Fde /*fde*/, 176749d3bc91SRichard Lowe Dwarf_Half /*table_column*/, 176849d3bc91SRichard Lowe Dwarf_Addr /*pc_requested*/, 176949d3bc91SRichard Lowe Dwarf_Signed* /*offset_relevant*/, 177049d3bc91SRichard Lowe Dwarf_Signed* /*register*/, 177149d3bc91SRichard Lowe Dwarf_Signed* /*offset*/, 177249d3bc91SRichard Lowe Dwarf_Addr* /*row_pc*/, 177349d3bc91SRichard Lowe Dwarf_Error* /*error*/); 177449d3bc91SRichard Lowe 1775*07dc1947SRichard Lowe /* See discussion of dw_value_type, libdwarf.h. 1776*07dc1947SRichard Lowe Use of DW_FRAME_CFA_COL is not meaningful in this interface. 1777*07dc1947SRichard Lowe See dwarf_get_fde_info_for_cfa_reg3(). 1778*07dc1947SRichard Lowe */ 1779*07dc1947SRichard Lowe /* dwarf_get_fde_info_for_reg3 is useful on a single column, but 1780*07dc1947SRichard Lowe it is inefficient to iterate across all table_columns using this 1781*07dc1947SRichard Lowe function. Instead call dwarf_get_fde_info_for_all_regs3() and index 1782*07dc1947SRichard Lowe into the table it fills in. */ 1783*07dc1947SRichard Lowe int dwarf_get_fde_info_for_reg3(Dwarf_Fde /*fde*/, 1784*07dc1947SRichard Lowe Dwarf_Half /*table_column*/, 1785*07dc1947SRichard Lowe Dwarf_Addr /*pc_requested*/, 1786*07dc1947SRichard Lowe Dwarf_Small * /*value_type*/, 1787*07dc1947SRichard Lowe Dwarf_Signed * /*offset_relevant*/, 1788*07dc1947SRichard Lowe Dwarf_Signed* /*register*/, 1789*07dc1947SRichard Lowe Dwarf_Signed* /*offset_or_block_len*/, 1790*07dc1947SRichard Lowe Dwarf_Ptr * /*block_ptr */, 1791*07dc1947SRichard Lowe Dwarf_Addr* /*row_pc_out*/, 1792*07dc1947SRichard Lowe Dwarf_Error* /*error*/); 1793*07dc1947SRichard Lowe 1794*07dc1947SRichard Lowe /* Use this to get the cfa. */ 1795*07dc1947SRichard Lowe int dwarf_get_fde_info_for_cfa_reg3(Dwarf_Fde /*fde*/, 1796*07dc1947SRichard Lowe Dwarf_Addr /*pc_requested*/, 1797*07dc1947SRichard Lowe Dwarf_Small * /*value_type*/, 1798*07dc1947SRichard Lowe Dwarf_Signed * /*offset_relevant*/, 1799*07dc1947SRichard Lowe Dwarf_Signed* /*register*/, 1800*07dc1947SRichard Lowe Dwarf_Signed* /*offset_or_block_len*/, 1801*07dc1947SRichard Lowe Dwarf_Ptr * /*block_ptr */, 1802*07dc1947SRichard Lowe Dwarf_Addr* /*row_pc_out*/, 1803*07dc1947SRichard Lowe Dwarf_Error* /*error*/); 1804*07dc1947SRichard Lowe 180549d3bc91SRichard Lowe int dwarf_get_fde_for_die(Dwarf_Debug /*dbg*/, 180649d3bc91SRichard Lowe Dwarf_Die /*subr_die */, 180749d3bc91SRichard Lowe Dwarf_Fde * /*returned_fde*/, 180849d3bc91SRichard Lowe Dwarf_Error* /*error*/); 180949d3bc91SRichard Lowe 181049d3bc91SRichard Lowe int dwarf_get_fde_n(Dwarf_Fde* /*fde_data*/, 181149d3bc91SRichard Lowe Dwarf_Unsigned /*fde_index*/, 181249d3bc91SRichard Lowe Dwarf_Fde * /*returned_fde*/, 181349d3bc91SRichard Lowe Dwarf_Error* /*error*/); 181449d3bc91SRichard Lowe 181549d3bc91SRichard Lowe int dwarf_get_fde_at_pc(Dwarf_Fde* /*fde_data*/, 181649d3bc91SRichard Lowe Dwarf_Addr /*pc_of_interest*/, 181749d3bc91SRichard Lowe Dwarf_Fde * /*returned_fde*/, 181849d3bc91SRichard Lowe Dwarf_Addr* /*lopc*/, 181949d3bc91SRichard Lowe Dwarf_Addr* /*hipc*/, 182049d3bc91SRichard Lowe Dwarf_Error* /*error*/); 182149d3bc91SRichard Lowe 1822*07dc1947SRichard Lowe /* GNU .eh_frame augmentation information, raw form, see 1823*07dc1947SRichard Lowe Linux Standard Base Core Specification version 3.0 . */ 1824*07dc1947SRichard Lowe int dwarf_get_cie_augmentation_data(Dwarf_Cie /* cie*/, 1825*07dc1947SRichard Lowe Dwarf_Small ** /* augdata */, 1826*07dc1947SRichard Lowe Dwarf_Unsigned * /* augdata_len */, 1827*07dc1947SRichard Lowe Dwarf_Error* /*error*/); 1828*07dc1947SRichard Lowe /* GNU .eh_frame augmentation information, raw form, see 1829*07dc1947SRichard Lowe Linux Standard Base Core Specification version 3.0 . */ 1830*07dc1947SRichard Lowe int dwarf_get_fde_augmentation_data(Dwarf_Fde /* fde*/, 1831*07dc1947SRichard Lowe Dwarf_Small ** /* augdata */, 1832*07dc1947SRichard Lowe Dwarf_Unsigned * /* augdata_len */, 1833*07dc1947SRichard Lowe Dwarf_Error* /*error*/); 1834*07dc1947SRichard Lowe 1835*07dc1947SRichard Lowe int dwarf_expand_frame_instructions(Dwarf_Cie /*cie*/, 183649d3bc91SRichard Lowe Dwarf_Ptr /*instruction*/, 183749d3bc91SRichard Lowe Dwarf_Unsigned /*i_length*/, 183849d3bc91SRichard Lowe Dwarf_Frame_Op** /*returned_op_list*/, 183949d3bc91SRichard Lowe Dwarf_Signed* /*op_count*/, 184049d3bc91SRichard Lowe Dwarf_Error* /*error*/); 184149d3bc91SRichard Lowe 184249d3bc91SRichard Lowe /* Operations on .debug_aranges. */ 184349d3bc91SRichard Lowe int dwarf_get_aranges(Dwarf_Debug /*dbg*/, 184449d3bc91SRichard Lowe Dwarf_Arange** /*aranges*/, 184549d3bc91SRichard Lowe Dwarf_Signed * /*arange_count*/, 184649d3bc91SRichard Lowe Dwarf_Error* /*error*/); 184749d3bc91SRichard Lowe 184849d3bc91SRichard Lowe 184949d3bc91SRichard Lowe 185049d3bc91SRichard Lowe int dwarf_get_arange( 185149d3bc91SRichard Lowe Dwarf_Arange* /*aranges*/, 185249d3bc91SRichard Lowe Dwarf_Unsigned /*arange_count*/, 185349d3bc91SRichard Lowe Dwarf_Addr /*address*/, 185449d3bc91SRichard Lowe Dwarf_Arange * /*returned_arange*/, 185549d3bc91SRichard Lowe Dwarf_Error* /*error*/); 185649d3bc91SRichard Lowe 185749d3bc91SRichard Lowe int dwarf_get_cu_die_offset( 185849d3bc91SRichard Lowe Dwarf_Arange /*arange*/, 185949d3bc91SRichard Lowe Dwarf_Off* /*return_offset*/, 186049d3bc91SRichard Lowe Dwarf_Error* /*error*/); 186149d3bc91SRichard Lowe 186249d3bc91SRichard Lowe int dwarf_get_arange_cu_header_offset( 186349d3bc91SRichard Lowe Dwarf_Arange /*arange*/, 186449d3bc91SRichard Lowe Dwarf_Off* /*return_cu_header_offset*/, 186549d3bc91SRichard Lowe Dwarf_Error* /*error*/); 186649d3bc91SRichard Lowe #ifdef __sgi /* pragma is sgi MIPS only */ 186749d3bc91SRichard Lowe #pragma optional dwarf_get_arange_cu_header_offset 186849d3bc91SRichard Lowe #endif 186949d3bc91SRichard Lowe 1870*07dc1947SRichard Lowe /* DWARF2,3 interface. No longer really adequate (it was never 1871*07dc1947SRichard Lowe right for segmented address spaces, please switch 1872*07dc1947SRichard Lowe to using dwarf_get_arange_info_b instead. 1873*07dc1947SRichard Lowe There is no effective difference between these 1874*07dc1947SRichard Lowe functions if the address space 1875*07dc1947SRichard Lowe of the target is not segmented. */ 187649d3bc91SRichard Lowe int dwarf_get_arange_info( 187749d3bc91SRichard Lowe Dwarf_Arange /*arange*/, 187849d3bc91SRichard Lowe Dwarf_Addr* /*start*/, 187949d3bc91SRichard Lowe Dwarf_Unsigned* /*length*/, 188049d3bc91SRichard Lowe Dwarf_Off* /*cu_die_offset*/, 188149d3bc91SRichard Lowe Dwarf_Error* /*error*/ ); 188249d3bc91SRichard Lowe 1883*07dc1947SRichard Lowe /* New for DWARF4, entries may have segment information. 1884*07dc1947SRichard Lowe *segment is only meaningful if *segment_entry_size is non-zero. */ 1885*07dc1947SRichard Lowe int dwarf_get_arange_info_b( 1886*07dc1947SRichard Lowe Dwarf_Arange /*arange*/, 1887*07dc1947SRichard Lowe Dwarf_Unsigned* /*segment*/, 1888*07dc1947SRichard Lowe Dwarf_Unsigned* /*segment_entry_size*/, 1889*07dc1947SRichard Lowe Dwarf_Addr * /*start*/, 1890*07dc1947SRichard Lowe Dwarf_Unsigned* /*length*/, 1891*07dc1947SRichard Lowe Dwarf_Off * /*cu_die_offset*/, 1892*07dc1947SRichard Lowe Dwarf_Error * /*error*/ ); 1893*07dc1947SRichard Lowe 189449d3bc91SRichard Lowe 189549d3bc91SRichard Lowe /* consumer .debug_macinfo information interface. 189649d3bc91SRichard Lowe */ 189749d3bc91SRichard Lowe struct Dwarf_Macro_Details_s { 189849d3bc91SRichard Lowe Dwarf_Off dmd_offset; /* offset, in the section, 189949d3bc91SRichard Lowe of this macro info */ 190049d3bc91SRichard Lowe Dwarf_Small dmd_type; /* the type, DW_MACINFO_define etc*/ 190149d3bc91SRichard Lowe Dwarf_Signed dmd_lineno; /* the source line number where 190249d3bc91SRichard Lowe applicable and vend_def # if 190349d3bc91SRichard Lowe vendor_extension op 190449d3bc91SRichard Lowe */ 190549d3bc91SRichard Lowe 190649d3bc91SRichard Lowe Dwarf_Signed dmd_fileindex;/* the source file index: 190749d3bc91SRichard Lowe applies to define undef start_file 190849d3bc91SRichard Lowe */ 190949d3bc91SRichard Lowe char * dmd_macro; /* macro name (with value for defineop) 191049d3bc91SRichard Lowe string from vendor ext 191149d3bc91SRichard Lowe */ 191249d3bc91SRichard Lowe }; 191349d3bc91SRichard Lowe 1914*07dc1947SRichard Lowe /* dwarf_print_lines is for use by dwarfdump: it prints 191549d3bc91SRichard Lowe line info to stdout. 1916*07dc1947SRichard Lowe The _dwarf name is obsolete. Use dwarf_ instead. 1917*07dc1947SRichard Lowe Added extra argnument 2/2009 for better checking. 191849d3bc91SRichard Lowe */ 1919*07dc1947SRichard Lowe int _dwarf_print_lines(Dwarf_Die /*cu_die*/,Dwarf_Error * /*error*/); 1920*07dc1947SRichard Lowe int dwarf_print_lines(Dwarf_Die /*cu_die*/,Dwarf_Error * /*error*/, 1921*07dc1947SRichard Lowe int * /*error_count_out */); 192249d3bc91SRichard Lowe 1923*07dc1947SRichard Lowe /* dwarf_check_lineheader lets dwarfdump get detailed messages 1924*07dc1947SRichard Lowe about some compiler errors we detect. 1925*07dc1947SRichard Lowe We return the count of detected errors throught the 1926*07dc1947SRichard Lowe pointer. 1927*07dc1947SRichard Lowe */ 1928*07dc1947SRichard Lowe void dwarf_check_lineheader(Dwarf_Die /*cu_die*/,int *errcount_out); 1929*07dc1947SRichard Lowe 1930*07dc1947SRichard Lowe /* dwarf_ld_sort_lines helps SGI IRIX ld 1931*07dc1947SRichard Lowe rearrange lines in .debug_line in a .o created with a text 193249d3bc91SRichard Lowe section per function. 193349d3bc91SRichard Lowe -OPT:procedure_reorder=ON 193449d3bc91SRichard Lowe where ld-cord (cord(1)ing by ld, 193549d3bc91SRichard Lowe not by cord(1)) may have changed the function order. 1936*07dc1947SRichard Lowe The _dwarf name is obsolete. Use dwarf_ instead. 193749d3bc91SRichard Lowe */ 193849d3bc91SRichard Lowe int _dwarf_ld_sort_lines( 1939*07dc1947SRichard Lowe void * /*orig_buffer*/, 1940*07dc1947SRichard Lowe unsigned long /* buffer_len*/, 1941*07dc1947SRichard Lowe int /*is_64_bit*/, 1942*07dc1947SRichard Lowe int * /*any_change*/, 1943*07dc1947SRichard Lowe int * /*err_code*/); 1944*07dc1947SRichard Lowe int dwarf_ld_sort_lines( 1945*07dc1947SRichard Lowe void * /*orig_buffer*/, 1946*07dc1947SRichard Lowe unsigned long /*buffer_len*/, 1947*07dc1947SRichard Lowe int /*is_64_bit*/, 1948*07dc1947SRichard Lowe int * /*any_change*/, 1949*07dc1947SRichard Lowe int * /*err_code*/); 195049d3bc91SRichard Lowe 1951*07dc1947SRichard Lowe /* Used by dwarfdump -v to print fde offsets from debugging 1952*07dc1947SRichard Lowe info. 1953*07dc1947SRichard Lowe The _dwarf name is obsolete. Use dwarf_ instead. 195449d3bc91SRichard Lowe */ 1955*07dc1947SRichard Lowe int _dwarf_fde_section_offset(Dwarf_Debug dbg, 1956*07dc1947SRichard Lowe Dwarf_Fde /*in_fde*/, 1957*07dc1947SRichard Lowe Dwarf_Off * /*fde_off*/, 1958*07dc1947SRichard Lowe Dwarf_Off * /*cie_off*/, 1959*07dc1947SRichard Lowe Dwarf_Error * /*err*/); 1960*07dc1947SRichard Lowe int dwarf_fde_section_offset(Dwarf_Debug dbg, 1961*07dc1947SRichard Lowe Dwarf_Fde /*in_fde*/, 1962*07dc1947SRichard Lowe Dwarf_Off * /*fde_off*/, 1963*07dc1947SRichard Lowe Dwarf_Off * /*cie_off*/, 1964*07dc1947SRichard Lowe Dwarf_Error * /*err*/); 196549d3bc91SRichard Lowe 1966*07dc1947SRichard Lowe /* Used by dwarfdump -v to print cie offsets from debugging 1967*07dc1947SRichard Lowe info. 1968*07dc1947SRichard Lowe The _dwarf name is obsolete. Use dwarf_ instead. 196949d3bc91SRichard Lowe */ 1970*07dc1947SRichard Lowe int dwarf_cie_section_offset(Dwarf_Debug /*dbg*/, 1971*07dc1947SRichard Lowe Dwarf_Cie /*in_cie*/, 1972*07dc1947SRichard Lowe Dwarf_Off * /*cie_off */, 1973*07dc1947SRichard Lowe Dwarf_Error * /*err*/); 1974*07dc1947SRichard Lowe int _dwarf_cie_section_offset(Dwarf_Debug /*dbg*/, 1975*07dc1947SRichard Lowe Dwarf_Cie /*in_cie*/, 1976*07dc1947SRichard Lowe Dwarf_Off * /*cie_off*/, 1977*07dc1947SRichard Lowe Dwarf_Error * /*err*/); 197849d3bc91SRichard Lowe 197949d3bc91SRichard Lowe typedef struct Dwarf_Macro_Details_s Dwarf_Macro_Details; 198049d3bc91SRichard Lowe 198149d3bc91SRichard Lowe int dwarf_get_macro(Dwarf_Debug /*dbg*/, 198249d3bc91SRichard Lowe char * /*requested_macro_name*/, 198349d3bc91SRichard Lowe Dwarf_Addr /*pc_of_request*/, 198449d3bc91SRichard Lowe char ** /*returned_macro_value*/, 198549d3bc91SRichard Lowe Dwarf_Error * /*error*/); 198649d3bc91SRichard Lowe 198749d3bc91SRichard Lowe int dwarf_get_all_defined_macros(Dwarf_Debug /*dbg*/, 198849d3bc91SRichard Lowe Dwarf_Addr /*pc_of_request*/, 198949d3bc91SRichard Lowe Dwarf_Signed * /*returned_count*/, 199049d3bc91SRichard Lowe char *** /*returned_pointers_to_macros*/, 199149d3bc91SRichard Lowe Dwarf_Error * /*error*/); 199249d3bc91SRichard Lowe 199349d3bc91SRichard Lowe char *dwarf_find_macro_value_start(char * /*macro_string*/); 199449d3bc91SRichard Lowe 199549d3bc91SRichard Lowe int dwarf_get_macro_details(Dwarf_Debug /*dbg*/, 199649d3bc91SRichard Lowe Dwarf_Off /*macro_offset*/, 199749d3bc91SRichard Lowe Dwarf_Unsigned /*maximum_count*/, 199849d3bc91SRichard Lowe Dwarf_Signed * /*entry_count*/, 199949d3bc91SRichard Lowe Dwarf_Macro_Details ** /*details*/, 200049d3bc91SRichard Lowe Dwarf_Error * /*err*/); 200149d3bc91SRichard Lowe 200249d3bc91SRichard Lowe 200349d3bc91SRichard Lowe int dwarf_get_address_size(Dwarf_Debug /*dbg*/, 200449d3bc91SRichard Lowe Dwarf_Half * /*addr_size*/, 200549d3bc91SRichard Lowe Dwarf_Error * /*error*/); 2006*07dc1947SRichard Lowe int dwarf_get_die_address_size(Dwarf_Die /*die*/, 2007*07dc1947SRichard Lowe Dwarf_Half * /*addr_size*/, 2008*07dc1947SRichard Lowe Dwarf_Error * /*error*/); 2009*07dc1947SRichard Lowe 2010*07dc1947SRichard Lowe /* The dwarf specification separates FORMs into 2011*07dc1947SRichard Lowe different classes. To do the seperation properly 2012*07dc1947SRichard Lowe requires 4 pieces of data as of DWARF4 (thus the 2013*07dc1947SRichard Lowe function arguments listed here). 2014*07dc1947SRichard Lowe The DWARF4 specification class definition suffices to 2015*07dc1947SRichard Lowe describe all DWARF versions. 2016*07dc1947SRichard Lowe See section 7.5.4, Attribute Encodings. 2017*07dc1947SRichard Lowe A return of DW_FORM_CLASS_UNKNOWN means we could not properly figure 2018*07dc1947SRichard Lowe out what form-class it is. 2019*07dc1947SRichard Lowe 2020*07dc1947SRichard Lowe DW_FORM_CLASS_FRAMEPTR is MIPS/IRIX only, and refers 2021*07dc1947SRichard Lowe to the DW_AT_MIPS_fde attribute (a reference to the 2022*07dc1947SRichard Lowe .debug_frame section). 2023*07dc1947SRichard Lowe */ 2024*07dc1947SRichard Lowe enum Dwarf_Form_Class { 2025*07dc1947SRichard Lowe DW_FORM_CLASS_UNKNOWN, DW_FORM_CLASS_ADDRESS, 2026*07dc1947SRichard Lowe DW_FORM_CLASS_BLOCK, DW_FORM_CLASS_CONSTANT, 2027*07dc1947SRichard Lowe DW_FORM_CLASS_EXPRLOC, DW_FORM_CLASS_FLAG, 2028*07dc1947SRichard Lowe DW_FORM_CLASS_LINEPTR, DW_FORM_CLASS_LOCLISTPTR, 2029*07dc1947SRichard Lowe DW_FORM_CLASS_MACPTR, DW_FORM_CLASS_RANGELISTPTR, 2030*07dc1947SRichard Lowe DW_FORM_CLASS_REFERENCE, DW_FORM_CLASS_STRING, 2031*07dc1947SRichard Lowe DW_FORM_CLASS_FRAMEPTR 2032*07dc1947SRichard Lowe }; 2033*07dc1947SRichard Lowe 2034*07dc1947SRichard Lowe enum Dwarf_Form_Class dwarf_get_form_class( 2035*07dc1947SRichard Lowe Dwarf_Half /* dwversion */, 2036*07dc1947SRichard Lowe Dwarf_Half /* attrnum */, 2037*07dc1947SRichard Lowe Dwarf_Half /*offset_size */, 2038*07dc1947SRichard Lowe Dwarf_Half /*form*/); 203949d3bc91SRichard Lowe 204049d3bc91SRichard Lowe /* utility operations */ 204149d3bc91SRichard Lowe Dwarf_Unsigned dwarf_errno(Dwarf_Error /*error*/); 204249d3bc91SRichard Lowe 204349d3bc91SRichard Lowe char* dwarf_errmsg(Dwarf_Error /*error*/); 204449d3bc91SRichard Lowe 204549d3bc91SRichard Lowe /* stringcheck zero is default and means do all 204649d3bc91SRichard Lowe ** string length validity checks. 204749d3bc91SRichard Lowe ** Call with parameter value 1 to turn off many such checks (and 204849d3bc91SRichard Lowe ** increase performance). 204949d3bc91SRichard Lowe ** Call with zero for safest running. 205049d3bc91SRichard Lowe ** Actual value saved and returned is only 8 bits! Upper bits 205149d3bc91SRichard Lowe ** ignored by libdwarf (and zero on return). 205249d3bc91SRichard Lowe ** Returns previous value. 205349d3bc91SRichard Lowe */ 205449d3bc91SRichard Lowe int dwarf_set_stringcheck(int /*stringcheck*/); 205549d3bc91SRichard Lowe 2056*07dc1947SRichard Lowe /* 'apply' defaults to 1 and means do all 2057*07dc1947SRichard Lowe * 'rela' relocations on reading in a dwarf object section with 2058*07dc1947SRichard Lowe * such relocations. 2059*07dc1947SRichard Lowe * Call with parameter value 0 to turn off application of 2060*07dc1947SRichard Lowe * such relocations. 2061*07dc1947SRichard Lowe * Since the static linker leaves 'bogus' data in object sections 2062*07dc1947SRichard Lowe * with a 'rela' relocation section such data cannot be read 2063*07dc1947SRichard Lowe * sensibly without processing the relocations. Such relocations 2064*07dc1947SRichard Lowe * do not exist in executables and shared objects (.so), the 2065*07dc1947SRichard Lowe * relocations only exist in plain .o relocatable object files. 2066*07dc1947SRichard Lowe * Actual value saved and returned is only 8 bits! Upper bits 2067*07dc1947SRichard Lowe * ignored by libdwarf (and zero on return). 2068*07dc1947SRichard Lowe * Returns previous value. 2069*07dc1947SRichard Lowe * */ 2070*07dc1947SRichard Lowe int dwarf_set_reloc_application(int /*apply*/); 2071*07dc1947SRichard Lowe 2072*07dc1947SRichard Lowe 207349d3bc91SRichard Lowe /* Unimplemented */ 207449d3bc91SRichard Lowe Dwarf_Handler dwarf_seterrhand(Dwarf_Debug /*dbg*/, Dwarf_Handler /*errhand*/); 207549d3bc91SRichard Lowe 207649d3bc91SRichard Lowe /* Unimplemented */ 207749d3bc91SRichard Lowe Dwarf_Ptr dwarf_seterrarg(Dwarf_Debug /*dbg*/, Dwarf_Ptr /*errarg*/); 207849d3bc91SRichard Lowe 207949d3bc91SRichard Lowe void dwarf_dealloc(Dwarf_Debug /*dbg*/, void* /*space*/, 208049d3bc91SRichard Lowe Dwarf_Unsigned /*type*/); 208149d3bc91SRichard Lowe 208249d3bc91SRichard Lowe /* DWARF Producer Interface */ 208349d3bc91SRichard Lowe 208449d3bc91SRichard Lowe typedef int (*Dwarf_Callback_Func)( 208549d3bc91SRichard Lowe char* /*name*/, 208649d3bc91SRichard Lowe int /*size*/, 208749d3bc91SRichard Lowe Dwarf_Unsigned /*type*/, 208849d3bc91SRichard Lowe Dwarf_Unsigned /*flags*/, 208949d3bc91SRichard Lowe Dwarf_Unsigned /*link*/, 209049d3bc91SRichard Lowe Dwarf_Unsigned /*info*/, 209149d3bc91SRichard Lowe int* /*sect name index*/, 209249d3bc91SRichard Lowe int* /*error*/); 209349d3bc91SRichard Lowe 209449d3bc91SRichard Lowe Dwarf_P_Debug dwarf_producer_init( 209549d3bc91SRichard Lowe Dwarf_Unsigned /*creation_flags*/, 209649d3bc91SRichard Lowe Dwarf_Callback_Func /*func*/, 209749d3bc91SRichard Lowe Dwarf_Handler /*errhand*/, 209849d3bc91SRichard Lowe Dwarf_Ptr /*errarg*/, 209949d3bc91SRichard Lowe Dwarf_Error* /*error*/); 210049d3bc91SRichard Lowe 210149d3bc91SRichard Lowe typedef int (*Dwarf_Callback_Func_b)( 210249d3bc91SRichard Lowe char* /*name*/, 210349d3bc91SRichard Lowe int /*size*/, 210449d3bc91SRichard Lowe Dwarf_Unsigned /*type*/, 210549d3bc91SRichard Lowe Dwarf_Unsigned /*flags*/, 210649d3bc91SRichard Lowe Dwarf_Unsigned /*link*/, 210749d3bc91SRichard Lowe Dwarf_Unsigned /*info*/, 210849d3bc91SRichard Lowe Dwarf_Unsigned* /*sect_name_index*/, 210949d3bc91SRichard Lowe int* /*error*/); 211049d3bc91SRichard Lowe 211149d3bc91SRichard Lowe 211249d3bc91SRichard Lowe Dwarf_P_Debug dwarf_producer_init_b( 211349d3bc91SRichard Lowe Dwarf_Unsigned /*flags*/, 211449d3bc91SRichard Lowe Dwarf_Callback_Func_b /*func*/, 211549d3bc91SRichard Lowe Dwarf_Handler /*errhand*/, 211649d3bc91SRichard Lowe Dwarf_Ptr /*errarg*/, 211749d3bc91SRichard Lowe Dwarf_Error * /*error*/); 211849d3bc91SRichard Lowe 211949d3bc91SRichard Lowe 212049d3bc91SRichard Lowe Dwarf_Signed dwarf_transform_to_disk_form(Dwarf_P_Debug /*dbg*/, 212149d3bc91SRichard Lowe Dwarf_Error* /*error*/); 212249d3bc91SRichard Lowe 212349d3bc91SRichard Lowe Dwarf_Ptr dwarf_get_section_bytes(Dwarf_P_Debug /*dbg*/, 212449d3bc91SRichard Lowe Dwarf_Signed /*dwarf_section*/, 212549d3bc91SRichard Lowe Dwarf_Signed* /*elf_section_index*/, 212649d3bc91SRichard Lowe Dwarf_Unsigned* /*length*/, 212749d3bc91SRichard Lowe Dwarf_Error* /*error*/); 212849d3bc91SRichard Lowe 212949d3bc91SRichard Lowe int dwarf_get_relocation_info_count( 213049d3bc91SRichard Lowe Dwarf_P_Debug /*dbg*/, 213149d3bc91SRichard Lowe Dwarf_Unsigned * /*count_of_relocation_sections*/, 213249d3bc91SRichard Lowe int * /*drd_buffer_version*/, 213349d3bc91SRichard Lowe Dwarf_Error* /*error*/); 213449d3bc91SRichard Lowe 213549d3bc91SRichard Lowe int dwarf_get_relocation_info( 213649d3bc91SRichard Lowe Dwarf_P_Debug /*dbg*/, 213749d3bc91SRichard Lowe Dwarf_Signed * /*elf_section_index*/, 213849d3bc91SRichard Lowe Dwarf_Signed * /*elf_section_index_link*/, 213949d3bc91SRichard Lowe Dwarf_Unsigned * /*relocation_buffer_count*/, 214049d3bc91SRichard Lowe Dwarf_Relocation_Data * /*reldata_buffer*/, 214149d3bc91SRichard Lowe Dwarf_Error* /*error*/); 214249d3bc91SRichard Lowe 214349d3bc91SRichard Lowe /* v1: no drd_length field, enum explicit */ 214449d3bc91SRichard Lowe /* v2: has the drd_length field, enum value in uchar member */ 214549d3bc91SRichard Lowe #define DWARF_DRD_BUFFER_VERSION 2 214649d3bc91SRichard Lowe 2147*07dc1947SRichard Lowe /* Markers are not written to DWARF2/3/4, they are user 2148*07dc1947SRichard Lowe defined and may be used for any purpose. 2149*07dc1947SRichard Lowe */ 2150*07dc1947SRichard Lowe Dwarf_Signed dwarf_get_die_markers( 2151*07dc1947SRichard Lowe Dwarf_P_Debug /*dbg*/, 2152*07dc1947SRichard Lowe Dwarf_P_Marker * /*marker_list*/, 2153*07dc1947SRichard Lowe Dwarf_Unsigned * /*marker_count*/, 2154*07dc1947SRichard Lowe Dwarf_Error * /*error*/); 2155*07dc1947SRichard Lowe 2156*07dc1947SRichard Lowe int dwarf_get_string_attributes_count(Dwarf_P_Debug, 2157*07dc1947SRichard Lowe Dwarf_Unsigned *, 2158*07dc1947SRichard Lowe int *, 2159*07dc1947SRichard Lowe Dwarf_Error *); 2160*07dc1947SRichard Lowe 2161*07dc1947SRichard Lowe int dwarf_get_string_attributes_info(Dwarf_P_Debug, 2162*07dc1947SRichard Lowe Dwarf_Signed *, 2163*07dc1947SRichard Lowe Dwarf_Unsigned *, 2164*07dc1947SRichard Lowe Dwarf_P_String_Attr *, 2165*07dc1947SRichard Lowe Dwarf_Error *); 2166*07dc1947SRichard Lowe 216749d3bc91SRichard Lowe void dwarf_reset_section_bytes(Dwarf_P_Debug /*dbg*/); 216849d3bc91SRichard Lowe 216949d3bc91SRichard Lowe Dwarf_Unsigned dwarf_producer_finish(Dwarf_P_Debug /*dbg*/, 217049d3bc91SRichard Lowe Dwarf_Error* /*error*/); 217149d3bc91SRichard Lowe 217249d3bc91SRichard Lowe /* Producer attribute addition functions. */ 217349d3bc91SRichard Lowe Dwarf_P_Attribute dwarf_add_AT_targ_address(Dwarf_P_Debug /*dbg*/, 217449d3bc91SRichard Lowe Dwarf_P_Die /*ownerdie*/, 217549d3bc91SRichard Lowe Dwarf_Half /*attr*/, 217649d3bc91SRichard Lowe Dwarf_Unsigned /*pc_value*/, 217749d3bc91SRichard Lowe Dwarf_Signed /*sym_index*/, 217849d3bc91SRichard Lowe Dwarf_Error* /*error*/); 217949d3bc91SRichard Lowe 2180*07dc1947SRichard Lowe Dwarf_P_Attribute dwarf_add_AT_block(Dwarf_P_Debug /*dbg*/, 2181*07dc1947SRichard Lowe Dwarf_P_Die /*ownerdie*/, 2182*07dc1947SRichard Lowe Dwarf_Half /*attr*/, 2183*07dc1947SRichard Lowe Dwarf_Small* /*block_data*/, 2184*07dc1947SRichard Lowe Dwarf_Unsigned /*block_len*/, 2185*07dc1947SRichard Lowe Dwarf_Error* /*error*/); 2186*07dc1947SRichard Lowe 218749d3bc91SRichard Lowe Dwarf_P_Attribute dwarf_add_AT_targ_address_b(Dwarf_P_Debug /*dbg*/, 218849d3bc91SRichard Lowe Dwarf_P_Die /*ownerdie*/, 218949d3bc91SRichard Lowe Dwarf_Half /*attr*/, 219049d3bc91SRichard Lowe Dwarf_Unsigned /*pc_value*/, 219149d3bc91SRichard Lowe Dwarf_Unsigned /*sym_index*/, 219249d3bc91SRichard Lowe Dwarf_Error* /*error*/); 219349d3bc91SRichard Lowe 2194*07dc1947SRichard Lowe Dwarf_P_Attribute dwarf_add_AT_ref_address(Dwarf_P_Debug /*dbg*/, 2195*07dc1947SRichard Lowe Dwarf_P_Die /*ownerdie*/, 2196*07dc1947SRichard Lowe Dwarf_Half /*attr*/, 2197*07dc1947SRichard Lowe Dwarf_Unsigned /*pc_value*/, 2198*07dc1947SRichard Lowe Dwarf_Unsigned /*sym_index*/, 2199*07dc1947SRichard Lowe Dwarf_Error* /*error*/); 2200*07dc1947SRichard Lowe 220149d3bc91SRichard Lowe Dwarf_P_Attribute dwarf_add_AT_unsigned_const(Dwarf_P_Debug /*dbg*/, 220249d3bc91SRichard Lowe Dwarf_P_Die /*ownerdie*/, 220349d3bc91SRichard Lowe Dwarf_Half /*attr*/, 220449d3bc91SRichard Lowe Dwarf_Unsigned /*value*/, 220549d3bc91SRichard Lowe Dwarf_Error* /*error*/); 220649d3bc91SRichard Lowe 220749d3bc91SRichard Lowe Dwarf_P_Attribute dwarf_add_AT_signed_const(Dwarf_P_Debug /*dbg*/, 220849d3bc91SRichard Lowe Dwarf_P_Die /*ownerdie*/, 220949d3bc91SRichard Lowe Dwarf_Half /*attr*/, 221049d3bc91SRichard Lowe Dwarf_Signed /*value*/, 221149d3bc91SRichard Lowe Dwarf_Error* /*error*/); 221249d3bc91SRichard Lowe 221349d3bc91SRichard Lowe Dwarf_P_Attribute dwarf_add_AT_reference(Dwarf_P_Debug /*dbg*/, 221449d3bc91SRichard Lowe Dwarf_P_Die /*ownerdie*/, 221549d3bc91SRichard Lowe Dwarf_Half /*attr*/, 221649d3bc91SRichard Lowe Dwarf_P_Die /*otherdie*/, 221749d3bc91SRichard Lowe Dwarf_Error* /*error*/); 221849d3bc91SRichard Lowe 2219*07dc1947SRichard Lowe Dwarf_P_Attribute dwarf_add_AT_dataref( 2220*07dc1947SRichard Lowe Dwarf_P_Debug /* dbg*/, 2221*07dc1947SRichard Lowe Dwarf_P_Die /*ownerdie*/, 2222*07dc1947SRichard Lowe Dwarf_Half /*attr*/, 2223*07dc1947SRichard Lowe Dwarf_Unsigned /*pcvalue*/, 2224*07dc1947SRichard Lowe Dwarf_Unsigned /*sym_index*/, 2225*07dc1947SRichard Lowe Dwarf_Error* /*error*/); 2226*07dc1947SRichard Lowe 222749d3bc91SRichard Lowe Dwarf_P_Attribute dwarf_add_AT_const_value_string(Dwarf_P_Die /*ownerdie*/, 222849d3bc91SRichard Lowe char* /*string_value*/, 222949d3bc91SRichard Lowe Dwarf_Error* /*error*/); 223049d3bc91SRichard Lowe 223149d3bc91SRichard Lowe Dwarf_P_Attribute dwarf_add_AT_location_expr(Dwarf_P_Debug /*dbg*/, 223249d3bc91SRichard Lowe Dwarf_P_Die /*ownerdie*/, 223349d3bc91SRichard Lowe Dwarf_Half /*attr*/, 223449d3bc91SRichard Lowe Dwarf_P_Expr /*loc_expr*/, 223549d3bc91SRichard Lowe Dwarf_Error* /*error*/); 223649d3bc91SRichard Lowe 223749d3bc91SRichard Lowe Dwarf_P_Attribute dwarf_add_AT_string(Dwarf_P_Debug /*dbg*/, 223849d3bc91SRichard Lowe Dwarf_P_Die /*ownerdie*/, 223949d3bc91SRichard Lowe Dwarf_Half /*attr*/, 224049d3bc91SRichard Lowe char* /*string*/, 224149d3bc91SRichard Lowe Dwarf_Error* /*error*/); 224249d3bc91SRichard Lowe 224349d3bc91SRichard Lowe Dwarf_P_Attribute dwarf_add_AT_flag(Dwarf_P_Debug /*dbg*/, 224449d3bc91SRichard Lowe Dwarf_P_Die /*ownerdie*/, 224549d3bc91SRichard Lowe Dwarf_Half /*attr*/, 224649d3bc91SRichard Lowe Dwarf_Small /*flag*/, 224749d3bc91SRichard Lowe Dwarf_Error* /*error*/); 224849d3bc91SRichard Lowe 224949d3bc91SRichard Lowe Dwarf_P_Attribute dwarf_add_AT_producer(Dwarf_P_Die /*ownerdie*/, 225049d3bc91SRichard Lowe char* /*producer_string*/, 225149d3bc91SRichard Lowe Dwarf_Error* /*error*/); 225249d3bc91SRichard Lowe 225349d3bc91SRichard Lowe Dwarf_P_Attribute dwarf_add_AT_const_value_signedint(Dwarf_P_Die /*ownerdie*/, 225449d3bc91SRichard Lowe Dwarf_Signed /*signed_value*/, 225549d3bc91SRichard Lowe Dwarf_Error* /*error*/); 225649d3bc91SRichard Lowe 225749d3bc91SRichard Lowe Dwarf_P_Attribute dwarf_add_AT_const_value_unsignedint( 225849d3bc91SRichard Lowe Dwarf_P_Die /*ownerdie*/, 225949d3bc91SRichard Lowe Dwarf_Unsigned /*unsigned_value*/, 226049d3bc91SRichard Lowe Dwarf_Error* /*error*/); 226149d3bc91SRichard Lowe 226249d3bc91SRichard Lowe Dwarf_P_Attribute dwarf_add_AT_comp_dir(Dwarf_P_Die /*ownerdie*/, 226349d3bc91SRichard Lowe char* /*current_working_directory*/, 226449d3bc91SRichard Lowe Dwarf_Error* /*error*/); 226549d3bc91SRichard Lowe 226649d3bc91SRichard Lowe Dwarf_P_Attribute dwarf_add_AT_name(Dwarf_P_Die /*die*/, 226749d3bc91SRichard Lowe char* /*name*/, 226849d3bc91SRichard Lowe Dwarf_Error* /*error*/); 226949d3bc91SRichard Lowe 227049d3bc91SRichard Lowe /* Producer line creation functions (.debug_line) */ 227149d3bc91SRichard Lowe Dwarf_Unsigned dwarf_add_directory_decl(Dwarf_P_Debug /*dbg*/, 227249d3bc91SRichard Lowe char* /*name*/, 227349d3bc91SRichard Lowe Dwarf_Error* /*error*/); 227449d3bc91SRichard Lowe 227549d3bc91SRichard Lowe Dwarf_Unsigned dwarf_add_file_decl(Dwarf_P_Debug /*dbg*/, 227649d3bc91SRichard Lowe char* /*name*/, 227749d3bc91SRichard Lowe Dwarf_Unsigned /*dir_index*/, 227849d3bc91SRichard Lowe Dwarf_Unsigned /*time_last_modified*/, 227949d3bc91SRichard Lowe Dwarf_Unsigned /*length*/, 228049d3bc91SRichard Lowe Dwarf_Error* /*error*/); 228149d3bc91SRichard Lowe 228249d3bc91SRichard Lowe Dwarf_Unsigned dwarf_add_line_entry(Dwarf_P_Debug /*dbg*/, 228349d3bc91SRichard Lowe Dwarf_Unsigned /*file_index*/, 228449d3bc91SRichard Lowe Dwarf_Addr /*code_address*/, 228549d3bc91SRichard Lowe Dwarf_Unsigned /*lineno*/, 228649d3bc91SRichard Lowe Dwarf_Signed /*column_number*/, 228749d3bc91SRichard Lowe Dwarf_Bool /*is_source_stmt_begin*/, 228849d3bc91SRichard Lowe Dwarf_Bool /*is_basic_block_begin*/, 228949d3bc91SRichard Lowe Dwarf_Error* /*error*/); 229049d3bc91SRichard Lowe 229149d3bc91SRichard Lowe Dwarf_Unsigned dwarf_lne_set_address(Dwarf_P_Debug /*dbg*/, 229249d3bc91SRichard Lowe Dwarf_Unsigned /*offset*/, 229349d3bc91SRichard Lowe Dwarf_Unsigned /*symbol_index*/, 229449d3bc91SRichard Lowe Dwarf_Error* /*error*/); 229549d3bc91SRichard Lowe 229649d3bc91SRichard Lowe Dwarf_Unsigned dwarf_lne_end_sequence(Dwarf_P_Debug /*dbg*/, 229749d3bc91SRichard Lowe Dwarf_Addr /*end_address*/, 229849d3bc91SRichard Lowe Dwarf_Error* /*error*/); 229949d3bc91SRichard Lowe 230049d3bc91SRichard Lowe /* Producer .debug_frame functions */ 230149d3bc91SRichard Lowe Dwarf_Unsigned dwarf_add_frame_cie(Dwarf_P_Debug /*dbg*/, 230249d3bc91SRichard Lowe char* /*augmenter*/, 230349d3bc91SRichard Lowe Dwarf_Small /*code_alignent_factor*/, 230449d3bc91SRichard Lowe Dwarf_Small /*data_alignment_factor*/, 230549d3bc91SRichard Lowe Dwarf_Small /*return_address_reg*/, 230649d3bc91SRichard Lowe Dwarf_Ptr /*initialization_bytes*/, 230749d3bc91SRichard Lowe Dwarf_Unsigned /*init_byte_len*/, 230849d3bc91SRichard Lowe Dwarf_Error* /*error*/); 230949d3bc91SRichard Lowe 231049d3bc91SRichard Lowe Dwarf_Unsigned dwarf_add_frame_fde( 231149d3bc91SRichard Lowe Dwarf_P_Debug /*dbg*/, 231249d3bc91SRichard Lowe Dwarf_P_Fde /*fde*/, 231349d3bc91SRichard Lowe Dwarf_P_Die /*corresponding subprogram die*/, 231449d3bc91SRichard Lowe Dwarf_Unsigned /*cie_to_use*/, 231549d3bc91SRichard Lowe Dwarf_Unsigned /*virt_addr_of_described_code*/, 231649d3bc91SRichard Lowe Dwarf_Unsigned /*length_of_code*/, 231749d3bc91SRichard Lowe Dwarf_Unsigned /*symbol_index*/, 231849d3bc91SRichard Lowe Dwarf_Error* /*error*/); 231949d3bc91SRichard Lowe 232049d3bc91SRichard Lowe Dwarf_Unsigned dwarf_add_frame_fde_b( 232149d3bc91SRichard Lowe Dwarf_P_Debug /*dbg*/, 232249d3bc91SRichard Lowe Dwarf_P_Fde /*fde*/, 232349d3bc91SRichard Lowe Dwarf_P_Die /*die*/, 232449d3bc91SRichard Lowe Dwarf_Unsigned /*cie*/, 232549d3bc91SRichard Lowe Dwarf_Addr /*virt_addr*/, 232649d3bc91SRichard Lowe Dwarf_Unsigned /*code_len*/, 232749d3bc91SRichard Lowe Dwarf_Unsigned /*sym_idx*/, 232849d3bc91SRichard Lowe Dwarf_Unsigned /*sym_idx_of_end*/, 232949d3bc91SRichard Lowe Dwarf_Addr /*offset_from_end_sym*/, 233049d3bc91SRichard Lowe Dwarf_Error* /*error*/); 233149d3bc91SRichard Lowe 233249d3bc91SRichard Lowe Dwarf_Unsigned dwarf_add_frame_info_b( 233349d3bc91SRichard Lowe Dwarf_P_Debug dbg /*dbg*/, 233449d3bc91SRichard Lowe Dwarf_P_Fde /*fde*/, 233549d3bc91SRichard Lowe Dwarf_P_Die /*die*/, 233649d3bc91SRichard Lowe Dwarf_Unsigned /*cie*/, 233749d3bc91SRichard Lowe Dwarf_Addr /*virt_addr*/, 233849d3bc91SRichard Lowe Dwarf_Unsigned /*code_len*/, 233949d3bc91SRichard Lowe Dwarf_Unsigned /*symidx*/, 234049d3bc91SRichard Lowe Dwarf_Unsigned /*end_symbol */, 234149d3bc91SRichard Lowe Dwarf_Addr /*offset_from_end_symbol */, 234249d3bc91SRichard Lowe Dwarf_Signed /*offset_into_exception_tables*/, 234349d3bc91SRichard Lowe Dwarf_Unsigned /*exception_table_symbol*/, 234449d3bc91SRichard Lowe Dwarf_Error* /*error*/); 234549d3bc91SRichard Lowe 234649d3bc91SRichard Lowe Dwarf_Unsigned dwarf_add_frame_info( 234749d3bc91SRichard Lowe Dwarf_P_Debug dbg /*dbg*/, 234849d3bc91SRichard Lowe Dwarf_P_Fde /*fde*/, 234949d3bc91SRichard Lowe Dwarf_P_Die /*die*/, 235049d3bc91SRichard Lowe Dwarf_Unsigned /*cie*/, 235149d3bc91SRichard Lowe Dwarf_Addr /*virt_addr*/, 235249d3bc91SRichard Lowe Dwarf_Unsigned /*code_len*/, 235349d3bc91SRichard Lowe Dwarf_Unsigned /*symidx*/, 235449d3bc91SRichard Lowe Dwarf_Signed /*offset_into_exception_tables*/, 235549d3bc91SRichard Lowe Dwarf_Unsigned /*exception_table_symbol*/, 235649d3bc91SRichard Lowe Dwarf_Error* /*error*/); 235749d3bc91SRichard Lowe 235849d3bc91SRichard Lowe Dwarf_P_Fde dwarf_add_fde_inst( 235949d3bc91SRichard Lowe Dwarf_P_Fde /*fde*/, 236049d3bc91SRichard Lowe Dwarf_Small /*op*/, 236149d3bc91SRichard Lowe Dwarf_Unsigned /*val1*/, 236249d3bc91SRichard Lowe Dwarf_Unsigned /*val2*/, 236349d3bc91SRichard Lowe Dwarf_Error* /*error*/); 236449d3bc91SRichard Lowe 2365*07dc1947SRichard Lowe /* New September 17, 2009 */ 2366*07dc1947SRichard Lowe int dwarf_insert_fde_inst_bytes( 2367*07dc1947SRichard Lowe Dwarf_P_Debug /*dbg*/, 2368*07dc1947SRichard Lowe Dwarf_P_Fde /*fde*/, 2369*07dc1947SRichard Lowe Dwarf_Unsigned /*len*/, 2370*07dc1947SRichard Lowe Dwarf_Ptr /*ibytes*/, 2371*07dc1947SRichard Lowe Dwarf_Error* /*error*/); 2372*07dc1947SRichard Lowe 2373*07dc1947SRichard Lowe 237449d3bc91SRichard Lowe Dwarf_P_Fde dwarf_new_fde(Dwarf_P_Debug /*dbg*/, Dwarf_Error* /*error*/); 237549d3bc91SRichard Lowe 237649d3bc91SRichard Lowe Dwarf_P_Fde dwarf_fde_cfa_offset( 237749d3bc91SRichard Lowe Dwarf_P_Fde /*fde*/, 237849d3bc91SRichard Lowe Dwarf_Unsigned /*register_number*/, 237949d3bc91SRichard Lowe Dwarf_Signed /*offset*/, 238049d3bc91SRichard Lowe Dwarf_Error* /*error*/); 238149d3bc91SRichard Lowe 238249d3bc91SRichard Lowe /* die creation & addition routines */ 238349d3bc91SRichard Lowe Dwarf_P_Die dwarf_new_die( 238449d3bc91SRichard Lowe Dwarf_P_Debug /*dbg*/, 238549d3bc91SRichard Lowe Dwarf_Tag /*tag*/, 238649d3bc91SRichard Lowe Dwarf_P_Die /*parent*/, 238749d3bc91SRichard Lowe Dwarf_P_Die /*child*/, 238849d3bc91SRichard Lowe Dwarf_P_Die /*left */, 238949d3bc91SRichard Lowe Dwarf_P_Die /*right*/, 239049d3bc91SRichard Lowe Dwarf_Error* /*error*/); 239149d3bc91SRichard Lowe 239249d3bc91SRichard Lowe Dwarf_Unsigned dwarf_add_die_to_debug( 239349d3bc91SRichard Lowe Dwarf_P_Debug /*dbg*/, 239449d3bc91SRichard Lowe Dwarf_P_Die /*die*/, 239549d3bc91SRichard Lowe Dwarf_Error* /*error*/); 239649d3bc91SRichard Lowe 2397*07dc1947SRichard Lowe /* Markers are not written to DWARF2/3/4, they are user 2398*07dc1947SRichard Lowe defined and may be used for any purpose. 2399*07dc1947SRichard Lowe */ 2400*07dc1947SRichard Lowe Dwarf_Unsigned dwarf_add_die_marker( 2401*07dc1947SRichard Lowe Dwarf_P_Debug /*dbg*/, 2402*07dc1947SRichard Lowe Dwarf_P_Die /*die*/, 2403*07dc1947SRichard Lowe Dwarf_Unsigned /*marker*/, 2404*07dc1947SRichard Lowe Dwarf_Error * /*error*/); 2405*07dc1947SRichard Lowe 2406*07dc1947SRichard Lowe Dwarf_Unsigned dwarf_get_die_marker( 2407*07dc1947SRichard Lowe Dwarf_P_Debug /*dbg*/, 2408*07dc1947SRichard Lowe Dwarf_P_Die /*die*/, 2409*07dc1947SRichard Lowe Dwarf_Unsigned * /*marker*/, 2410*07dc1947SRichard Lowe Dwarf_Error * /*error*/); 2411*07dc1947SRichard Lowe 241249d3bc91SRichard Lowe Dwarf_P_Die dwarf_die_link( 241349d3bc91SRichard Lowe Dwarf_P_Die /*die*/, 241449d3bc91SRichard Lowe Dwarf_P_Die /*parent*/, 241549d3bc91SRichard Lowe Dwarf_P_Die /*child*/, 241649d3bc91SRichard Lowe Dwarf_P_Die /*left*/, 241749d3bc91SRichard Lowe Dwarf_P_Die /*right*/, 241849d3bc91SRichard Lowe Dwarf_Error* /*error*/); 241949d3bc91SRichard Lowe 2420*07dc1947SRichard Lowe void dwarf_dealloc_compressed_block( 2421*07dc1947SRichard Lowe Dwarf_P_Debug, 2422*07dc1947SRichard Lowe void * 2423*07dc1947SRichard Lowe ); 2424*07dc1947SRichard Lowe 2425*07dc1947SRichard Lowe /* Call this passing in return value from dwarf_uncompress_integer_block() 2426*07dc1947SRichard Lowe * to free the space the decompression allocated. */ 2427*07dc1947SRichard Lowe void dwarf_dealloc_uncompressed_block( 2428*07dc1947SRichard Lowe Dwarf_Debug, 2429*07dc1947SRichard Lowe void * 2430*07dc1947SRichard Lowe ); 2431*07dc1947SRichard Lowe 2432*07dc1947SRichard Lowe void * dwarf_compress_integer_block( 2433*07dc1947SRichard Lowe Dwarf_P_Debug, /* dbg */ 2434*07dc1947SRichard Lowe Dwarf_Bool, /* signed==true (or unsigned) */ 2435*07dc1947SRichard Lowe Dwarf_Small, /* size of integer units: 8, 16, 32, 64 */ 2436*07dc1947SRichard Lowe void*, /* data */ 2437*07dc1947SRichard Lowe Dwarf_Unsigned, /* number of elements */ 2438*07dc1947SRichard Lowe Dwarf_Unsigned*, /* number of bytes in output block */ 2439*07dc1947SRichard Lowe Dwarf_Error* /* error */ 2440*07dc1947SRichard Lowe ); 2441*07dc1947SRichard Lowe 2442*07dc1947SRichard Lowe /* Decode an array of signed leb integers (so of course the 2443*07dc1947SRichard Lowe * array is not composed of fixed length values, but is instead 2444*07dc1947SRichard Lowe * a sequence of sleb values). 2445*07dc1947SRichard Lowe * Returns a DW_DLV_BADADDR on error. 2446*07dc1947SRichard Lowe * Otherwise returns a pointer to an array of 32bit integers. 2447*07dc1947SRichard Lowe * The signed argument must be non-zero (the decode 2448*07dc1947SRichard Lowe * assumes sleb integers in the input data) at this time. 2449*07dc1947SRichard Lowe * Size of integer units must be 32 (32 bits each) at this time. 2450*07dc1947SRichard Lowe * Number of bytes in block is a byte count (not array count). 2451*07dc1947SRichard Lowe * Returns number of units in output block (ie, number of elements 2452*07dc1947SRichard Lowe * of the array that the return value points to) thru the argument. 2453*07dc1947SRichard Lowe */ 2454*07dc1947SRichard Lowe void * dwarf_uncompress_integer_block( 2455*07dc1947SRichard Lowe Dwarf_Debug, /* dbg */ 2456*07dc1947SRichard Lowe Dwarf_Bool, /* signed==true (or unsigned) */ 2457*07dc1947SRichard Lowe Dwarf_Small, /* size of integer units: 8, 16, 32, 64 */ 2458*07dc1947SRichard Lowe void*, /* input data */ 2459*07dc1947SRichard Lowe Dwarf_Unsigned, /* number of bytes in input */ 2460*07dc1947SRichard Lowe Dwarf_Unsigned*, /* number of units in output block */ 2461*07dc1947SRichard Lowe Dwarf_Error* /* error */ 2462*07dc1947SRichard Lowe ); 2463*07dc1947SRichard Lowe 246449d3bc91SRichard Lowe /* Operations to create location expressions. */ 246549d3bc91SRichard Lowe Dwarf_P_Expr dwarf_new_expr(Dwarf_P_Debug /*dbg*/, Dwarf_Error* /*error*/); 246649d3bc91SRichard Lowe 2467*07dc1947SRichard Lowe void dwarf_expr_reset( 2468*07dc1947SRichard Lowe Dwarf_P_Expr /*expr*/, 2469*07dc1947SRichard Lowe Dwarf_Error* /*error*/); 2470*07dc1947SRichard Lowe 247149d3bc91SRichard Lowe Dwarf_Unsigned dwarf_add_expr_gen( 247249d3bc91SRichard Lowe Dwarf_P_Expr /*expr*/, 247349d3bc91SRichard Lowe Dwarf_Small /*opcode*/, 247449d3bc91SRichard Lowe Dwarf_Unsigned /*val1*/, 247549d3bc91SRichard Lowe Dwarf_Unsigned /*val2*/, 247649d3bc91SRichard Lowe Dwarf_Error* /*error*/); 247749d3bc91SRichard Lowe 247849d3bc91SRichard Lowe Dwarf_Unsigned dwarf_add_expr_addr( 247949d3bc91SRichard Lowe Dwarf_P_Expr /*expr*/, 248049d3bc91SRichard Lowe Dwarf_Unsigned /*addr*/, 248149d3bc91SRichard Lowe Dwarf_Signed /*sym_index*/, 248249d3bc91SRichard Lowe Dwarf_Error* /*error*/); 248349d3bc91SRichard Lowe 248449d3bc91SRichard Lowe Dwarf_Unsigned dwarf_add_expr_addr_b( 248549d3bc91SRichard Lowe Dwarf_P_Expr /*expr*/, 248649d3bc91SRichard Lowe Dwarf_Unsigned /*addr*/, 248749d3bc91SRichard Lowe Dwarf_Unsigned /*sym_index*/, 248849d3bc91SRichard Lowe Dwarf_Error* /*error*/); 248949d3bc91SRichard Lowe 249049d3bc91SRichard Lowe Dwarf_Unsigned dwarf_expr_current_offset( 249149d3bc91SRichard Lowe Dwarf_P_Expr /*expr*/, 249249d3bc91SRichard Lowe Dwarf_Error* /*error*/); 249349d3bc91SRichard Lowe 249449d3bc91SRichard Lowe Dwarf_Addr dwarf_expr_into_block( 249549d3bc91SRichard Lowe Dwarf_P_Expr /*expr*/, 249649d3bc91SRichard Lowe Dwarf_Unsigned* /*length*/, 249749d3bc91SRichard Lowe Dwarf_Error* /*error*/); 249849d3bc91SRichard Lowe 249949d3bc91SRichard Lowe Dwarf_Unsigned dwarf_add_arange(Dwarf_P_Debug /*dbg*/, 250049d3bc91SRichard Lowe Dwarf_Addr /*begin_address*/, 250149d3bc91SRichard Lowe Dwarf_Unsigned /*length*/, 250249d3bc91SRichard Lowe Dwarf_Signed /*symbol_index*/, 250349d3bc91SRichard Lowe Dwarf_Error* /*error*/); 250449d3bc91SRichard Lowe 250549d3bc91SRichard Lowe Dwarf_Unsigned dwarf_add_arange_b( 250649d3bc91SRichard Lowe Dwarf_P_Debug /*dbg*/, 250749d3bc91SRichard Lowe Dwarf_Addr /*begin_address*/, 250849d3bc91SRichard Lowe Dwarf_Unsigned /*length*/, 250949d3bc91SRichard Lowe Dwarf_Unsigned /*symbol_index*/, 251049d3bc91SRichard Lowe Dwarf_Unsigned /*end_symbol_index*/, 251149d3bc91SRichard Lowe Dwarf_Addr /*offset_from_end_symbol*/, 251249d3bc91SRichard Lowe Dwarf_Error * /*error*/); 251349d3bc91SRichard Lowe 251449d3bc91SRichard Lowe Dwarf_Unsigned dwarf_add_pubname( 251549d3bc91SRichard Lowe Dwarf_P_Debug /*dbg*/, 251649d3bc91SRichard Lowe Dwarf_P_Die /*die*/, 251749d3bc91SRichard Lowe char* /*pubname_name*/, 251849d3bc91SRichard Lowe Dwarf_Error* /*error*/); 251949d3bc91SRichard Lowe 252049d3bc91SRichard Lowe Dwarf_Unsigned dwarf_add_funcname( 252149d3bc91SRichard Lowe Dwarf_P_Debug /*dbg*/, 252249d3bc91SRichard Lowe Dwarf_P_Die /*die*/, 252349d3bc91SRichard Lowe char* /*func_name*/, 252449d3bc91SRichard Lowe Dwarf_Error* /*error*/); 252549d3bc91SRichard Lowe 252649d3bc91SRichard Lowe Dwarf_Unsigned dwarf_add_typename( 252749d3bc91SRichard Lowe Dwarf_P_Debug /*dbg*/, 252849d3bc91SRichard Lowe Dwarf_P_Die /*die*/, 252949d3bc91SRichard Lowe char* /*type_name*/, 253049d3bc91SRichard Lowe Dwarf_Error* /*error*/); 253149d3bc91SRichard Lowe 253249d3bc91SRichard Lowe Dwarf_Unsigned dwarf_add_varname( 253349d3bc91SRichard Lowe Dwarf_P_Debug /*dbg*/, 253449d3bc91SRichard Lowe Dwarf_P_Die /*die*/, 253549d3bc91SRichard Lowe char* /*var_name*/, 253649d3bc91SRichard Lowe Dwarf_Error* /*error*/); 253749d3bc91SRichard Lowe 253849d3bc91SRichard Lowe Dwarf_Unsigned dwarf_add_weakname( 253949d3bc91SRichard Lowe Dwarf_P_Debug /*dbg*/, 254049d3bc91SRichard Lowe Dwarf_P_Die /*die*/, 254149d3bc91SRichard Lowe char* /*weak_name*/, 254249d3bc91SRichard Lowe Dwarf_Error* /*error*/); 254349d3bc91SRichard Lowe 254449d3bc91SRichard Lowe /* .debug_macinfo producer functions 254549d3bc91SRichard Lowe Functions must be called in right order: the section is output 254649d3bc91SRichard Lowe In the order these are presented. 254749d3bc91SRichard Lowe */ 254849d3bc91SRichard Lowe int dwarf_def_macro(Dwarf_P_Debug /*dbg*/, 254949d3bc91SRichard Lowe Dwarf_Unsigned /*line*/, 255049d3bc91SRichard Lowe char * /*macname, with (arglist), no space before (*/, 255149d3bc91SRichard Lowe char * /*macvalue*/, 255249d3bc91SRichard Lowe Dwarf_Error* /*error*/); 255349d3bc91SRichard Lowe 255449d3bc91SRichard Lowe int dwarf_undef_macro(Dwarf_P_Debug /*dbg*/, 255549d3bc91SRichard Lowe Dwarf_Unsigned /*line*/, 255649d3bc91SRichard Lowe char * /*macname, no arglist, of course*/, 255749d3bc91SRichard Lowe Dwarf_Error* /*error*/); 255849d3bc91SRichard Lowe 255949d3bc91SRichard Lowe int dwarf_start_macro_file(Dwarf_P_Debug /*dbg*/, 256049d3bc91SRichard Lowe Dwarf_Unsigned /*fileindex*/, 256149d3bc91SRichard Lowe Dwarf_Unsigned /*linenumber*/, 256249d3bc91SRichard Lowe Dwarf_Error* /*error*/); 256349d3bc91SRichard Lowe 256449d3bc91SRichard Lowe int dwarf_end_macro_file(Dwarf_P_Debug /*dbg*/, 256549d3bc91SRichard Lowe Dwarf_Error* /*error*/); 256649d3bc91SRichard Lowe 256749d3bc91SRichard Lowe int dwarf_vendor_ext(Dwarf_P_Debug /*dbg*/, 256849d3bc91SRichard Lowe Dwarf_Unsigned /*constant*/, 256949d3bc91SRichard Lowe char * /*string*/, 257049d3bc91SRichard Lowe Dwarf_Error* /*error*/); 257149d3bc91SRichard Lowe 257249d3bc91SRichard Lowe /* end macinfo producer functions */ 257349d3bc91SRichard Lowe 257449d3bc91SRichard Lowe int dwarf_attr_offset(Dwarf_Die /*die*/, 257549d3bc91SRichard Lowe Dwarf_Attribute /*attr of above die*/, 257649d3bc91SRichard Lowe Dwarf_Off * /*returns offset thru this ptr */, 257749d3bc91SRichard Lowe Dwarf_Error * /*error*/); 257849d3bc91SRichard Lowe 2579*07dc1947SRichard Lowe /* This is a hack so clients can verify offsets. 2580*07dc1947SRichard Lowe Added April 2005 so that debugger can detect broken offsets 2581*07dc1947SRichard Lowe (which happened in an IRIX executable larger than 2GB 2582*07dc1947SRichard Lowe with MIPSpro 7.3.1.3 toolchain.). 2583*07dc1947SRichard Lowe */ 2584*07dc1947SRichard Lowe int 2585*07dc1947SRichard Lowe dwarf_get_section_max_offsets(Dwarf_Debug /*dbg*/, 2586*07dc1947SRichard Lowe Dwarf_Unsigned * /*debug_info_size*/, 2587*07dc1947SRichard Lowe Dwarf_Unsigned * /*debug_abbrev_size*/, 2588*07dc1947SRichard Lowe Dwarf_Unsigned * /*debug_line_size*/, 2589*07dc1947SRichard Lowe Dwarf_Unsigned * /*debug_loc_size*/, 2590*07dc1947SRichard Lowe Dwarf_Unsigned * /*debug_aranges_size*/, 2591*07dc1947SRichard Lowe Dwarf_Unsigned * /*debug_macinfo_size*/, 2592*07dc1947SRichard Lowe Dwarf_Unsigned * /*debug_pubnames_size*/, 2593*07dc1947SRichard Lowe Dwarf_Unsigned * /*debug_str_size*/, 2594*07dc1947SRichard Lowe Dwarf_Unsigned * /*debug_frame_size*/, 2595*07dc1947SRichard Lowe Dwarf_Unsigned * /*debug_ranges_size*/, 2596*07dc1947SRichard Lowe Dwarf_Unsigned * /*debug_pubtypes_size*/); 2597*07dc1947SRichard Lowe 2598*07dc1947SRichard Lowe /* Multiple releases spelled 'initial' as 'inital' . 2599*07dc1947SRichard Lowe The 'inital' spelling should not be used. */ 2600*07dc1947SRichard Lowe Dwarf_Half dwarf_set_frame_rule_inital_value(Dwarf_Debug /*dbg*/, 2601*07dc1947SRichard Lowe Dwarf_Half /*value*/); 2602*07dc1947SRichard Lowe /* Additional interface with correct 'initial' spelling. */ 2603*07dc1947SRichard Lowe /* It is likely you will want to call the following 5 functions 2604*07dc1947SRichard Lowe before accessing any frame information. All are useful 2605*07dc1947SRichard Lowe to tailor handling of pseudo-registers needed to turn 2606*07dc1947SRichard Lowe frame operation references into simpler forms and to 2607*07dc1947SRichard Lowe reflect ABI specific data. Of course altering libdwarf.h 2608*07dc1947SRichard Lowe and dwarf.h allow the same capabilities, but such header changes 2609*07dc1947SRichard Lowe do not let one change these values at runtime. */ 2610*07dc1947SRichard Lowe Dwarf_Half dwarf_set_frame_rule_initial_value(Dwarf_Debug /*dbg*/, 2611*07dc1947SRichard Lowe Dwarf_Half /*value*/); 2612*07dc1947SRichard Lowe Dwarf_Half dwarf_set_frame_rule_table_size(Dwarf_Debug /*dbg*/, 2613*07dc1947SRichard Lowe Dwarf_Half /*value*/); 2614*07dc1947SRichard Lowe Dwarf_Half dwarf_set_frame_cfa_value(Dwarf_Debug /*dbg*/, 2615*07dc1947SRichard Lowe Dwarf_Half /*value*/); 2616*07dc1947SRichard Lowe Dwarf_Half dwarf_set_frame_same_value(Dwarf_Debug /*dbg*/, 2617*07dc1947SRichard Lowe Dwarf_Half /*value*/); 2618*07dc1947SRichard Lowe Dwarf_Half dwarf_set_frame_undefined_value(Dwarf_Debug /*dbg*/, 2619*07dc1947SRichard Lowe Dwarf_Half /*value*/); 2620*07dc1947SRichard Lowe 2621*07dc1947SRichard Lowe /* As of April 27, 2009, this version with no diepointer is 2622*07dc1947SRichard Lowe obsolete though supported. Use dwarf_get_ranges_a() instead. */ 2623*07dc1947SRichard Lowe int dwarf_get_ranges(Dwarf_Debug /*dbg*/, 2624*07dc1947SRichard Lowe Dwarf_Off /*rangesoffset*/, 2625*07dc1947SRichard Lowe Dwarf_Ranges ** /*rangesbuf*/, 2626*07dc1947SRichard Lowe Dwarf_Signed * /*listlen*/, 2627*07dc1947SRichard Lowe Dwarf_Unsigned * /*bytecount*/, 2628*07dc1947SRichard Lowe Dwarf_Error * /*error*/); 2629*07dc1947SRichard Lowe 2630*07dc1947SRichard Lowe /* This adds the address_size argument. New April 27, 2009 */ 2631*07dc1947SRichard Lowe int dwarf_get_ranges_a(Dwarf_Debug /*dbg*/, 2632*07dc1947SRichard Lowe Dwarf_Off /*rangesoffset*/, 2633*07dc1947SRichard Lowe Dwarf_Die /* diepointer */, 2634*07dc1947SRichard Lowe Dwarf_Ranges ** /*rangesbuf*/, 2635*07dc1947SRichard Lowe Dwarf_Signed * /*listlen*/, 2636*07dc1947SRichard Lowe Dwarf_Unsigned * /*bytecount*/, 2637*07dc1947SRichard Lowe Dwarf_Error * /*error*/); 2638*07dc1947SRichard Lowe 2639*07dc1947SRichard Lowe void dwarf_ranges_dealloc(Dwarf_Debug /*dbg*/, 2640*07dc1947SRichard Lowe Dwarf_Ranges * /*rangesbuf*/, 2641*07dc1947SRichard Lowe Dwarf_Signed /*rangecount*/); 2642*07dc1947SRichard Lowe 2643*07dc1947SRichard Lowe /* The harmless error list is a circular buffer of 2644*07dc1947SRichard Lowe errors we note but which do not stop us from processing 2645*07dc1947SRichard Lowe the object. Created so dwarfdump or other tools 2646*07dc1947SRichard Lowe can report such inconsequential errors without causing 2647*07dc1947SRichard Lowe anything to stop early. */ 2648*07dc1947SRichard Lowe #define DW_HARMLESS_ERROR_CIRCULAR_LIST_DEFAULT_SIZE 4 2649*07dc1947SRichard Lowe #define DW_HARMLESS_ERROR_MSG_STRING_SIZE 200 2650*07dc1947SRichard Lowe /* User code supplies size of array of pointers errmsg_ptrs_array 2651*07dc1947SRichard Lowe in count and the array of pointers (the pointers themselves 2652*07dc1947SRichard Lowe need not be initialized). 2653*07dc1947SRichard Lowe The pointers returned in the array of pointers 2654*07dc1947SRichard Lowe are invalidated by ANY call to libdwarf. 2655*07dc1947SRichard Lowe Use them before making another libdwarf call! 2656*07dc1947SRichard Lowe The array of string pointers passed in always has 2657*07dc1947SRichard Lowe a final null pointer, so if there are N pointers the 2658*07dc1947SRichard Lowe and M actual strings, then MIN(M,N-1) pointers are 2659*07dc1947SRichard Lowe set to point to error strings. The array of pointers 2660*07dc1947SRichard Lowe to strings always terminates with a NULL pointer. 2661*07dc1947SRichard Lowe If 'count' is passed in zero then errmsg_ptrs_array 2662*07dc1947SRichard Lowe is not touched. 2663*07dc1947SRichard Lowe 2664*07dc1947SRichard Lowe The function returns DW_DLV_NO_ENTRY if no harmless errors 2665*07dc1947SRichard Lowe were noted so far. Returns DW_DLV_OK if there are errors. 2666*07dc1947SRichard Lowe Never returns DW_DLV_ERROR. 2667*07dc1947SRichard Lowe 2668*07dc1947SRichard Lowe Each call empties the error list (discarding all current entries). 2669*07dc1947SRichard Lowe If newerr_count is non-NULL the count of harmless errors 2670*07dc1947SRichard Lowe since the last call is returned through the pointer 2671*07dc1947SRichard Lowe (some may have been discarded or not returned, it is a circular 2672*07dc1947SRichard Lowe list...). 2673*07dc1947SRichard Lowe If DW_DLV_NO_ENTRY is returned none of the arguments 2674*07dc1947SRichard Lowe here are touched or used. 2675*07dc1947SRichard Lowe */ 2676*07dc1947SRichard Lowe int dwarf_get_harmless_error_list(Dwarf_Debug /*dbg*/, 2677*07dc1947SRichard Lowe unsigned /*count*/, 2678*07dc1947SRichard Lowe const char ** /*errmsg_ptrs_array*/, 2679*07dc1947SRichard Lowe unsigned * /*newerr_count*/); 2680*07dc1947SRichard Lowe 2681*07dc1947SRichard Lowe /* Insertion is only for testing the harmless error code, it is not 2682*07dc1947SRichard Lowe necessarily useful otherwise. */ 2683*07dc1947SRichard Lowe void dwarf_insert_harmless_error(Dwarf_Debug /*dbg*/, 2684*07dc1947SRichard Lowe char * /*newerror*/); 2685*07dc1947SRichard Lowe 2686*07dc1947SRichard Lowe /* The size of the circular list of strings may be set 2687*07dc1947SRichard Lowe and reset as needed. If it is shortened excess 2688*07dc1947SRichard Lowe messages are simply dropped. It returns the previous 2689*07dc1947SRichard Lowe size. If zero passed in the size is unchanged 2690*07dc1947SRichard Lowe and it simply returns the current size */ 2691*07dc1947SRichard Lowe unsigned dwarf_set_harmless_error_list_size(Dwarf_Debug /*dbg*/, 2692*07dc1947SRichard Lowe unsigned /*maxcount*/); 2693*07dc1947SRichard Lowe /* The harmless error strings (if any) are freed when the dbg 2694*07dc1947SRichard Lowe is dwarf_finish()ed. */ 2695*07dc1947SRichard Lowe 2696*07dc1947SRichard Lowe /* When the val_in is known these dwarf_get_TAG_name (etc) 2697*07dc1947SRichard Lowe functions return the string corresponding to the val_in passed in 2698*07dc1947SRichard Lowe through the pointer s_out and the value returned is DW_DLV_OK. 2699*07dc1947SRichard Lowe The strings are in static storage 2700*07dc1947SRichard Lowe and must not be freed. 2701*07dc1947SRichard Lowe If DW_DLV_NO_ENTRY is returned the val_in is not known and 2702*07dc1947SRichard Lowe *s_out is not set. DW_DLV_ERROR is never returned.*/ 2703*07dc1947SRichard Lowe 2704*07dc1947SRichard Lowe extern int dwarf_get_TAG_name(unsigned int /*val_in*/, const char ** /*s_out */); 2705*07dc1947SRichard Lowe extern int dwarf_get_children_name(unsigned int /*val_in*/, const char ** /*s_out */); 2706*07dc1947SRichard Lowe extern int dwarf_get_FORM_name(unsigned int /*val_in*/, const char ** /*s_out */); 2707*07dc1947SRichard Lowe extern int dwarf_get_AT_name(unsigned int /*val_in*/, const char ** /*s_out */); 2708*07dc1947SRichard Lowe extern int dwarf_get_OP_name(unsigned int /*val_in*/, const char ** /*s_out */); 2709*07dc1947SRichard Lowe extern int dwarf_get_ATE_name(unsigned int /*val_in*/, const char ** /*s_out */); 2710*07dc1947SRichard Lowe extern int dwarf_get_DS_name(unsigned int /*val_in*/, const char ** /*s_out */); 2711*07dc1947SRichard Lowe extern int dwarf_get_END_name(unsigned int /*val_in*/, const char ** /*s_out */); 2712*07dc1947SRichard Lowe extern int dwarf_get_ATCF_name(unsigned int /*val_in*/, const char ** /*s_out */); 2713*07dc1947SRichard Lowe extern int dwarf_get_ACCESS_name(unsigned int /*val_in*/, const char ** /*s_out */); 2714*07dc1947SRichard Lowe extern int dwarf_get_VIS_name(unsigned int /*val_in*/, const char ** /*s_out */); 2715*07dc1947SRichard Lowe extern int dwarf_get_VIRTUALITY_name(unsigned int /*val_in*/, const char ** /*s_out */); 2716*07dc1947SRichard Lowe extern int dwarf_get_LANG_name(unsigned int /*val_in*/, const char ** /*s_out */); 2717*07dc1947SRichard Lowe extern int dwarf_get_ID_name(unsigned int /*val_in*/, const char ** /*s_out */); 2718*07dc1947SRichard Lowe extern int dwarf_get_CC_name(unsigned int /*val_in*/, const char ** /*s_out */); 2719*07dc1947SRichard Lowe extern int dwarf_get_INL_name(unsigned int /*val_in*/, const char ** /*s_out */); 2720*07dc1947SRichard Lowe extern int dwarf_get_ORD_name(unsigned int /*val_in*/, const char ** /*s_out */); 2721*07dc1947SRichard Lowe extern int dwarf_get_DSC_name(unsigned int /*val_in*/, const char ** /*s_out */); 2722*07dc1947SRichard Lowe extern int dwarf_get_LNS_name(unsigned int /*val_in*/, const char ** /*s_out */); 2723*07dc1947SRichard Lowe extern int dwarf_get_LNE_name(unsigned int /*val_in*/, const char ** /*s_out */); 2724*07dc1947SRichard Lowe extern int dwarf_get_MACINFO_name(unsigned int /*val_in*/, const char ** /*s_out */); 2725*07dc1947SRichard Lowe extern int dwarf_get_CFA_name(unsigned int /*val_in*/, const char ** /*s_out */); 2726*07dc1947SRichard Lowe extern int dwarf_get_EH_name(unsigned int /*val_in*/, const char ** /*s_out */); 2727*07dc1947SRichard Lowe extern int dwarf_get_FRAME_name(unsigned int /*val_in*/, const char ** /*s_out */); 2728*07dc1947SRichard Lowe extern int dwarf_get_CHILDREN_name(unsigned int /*val_in*/, const char ** /*s_out */); 2729*07dc1947SRichard Lowe extern int dwarf_get_ADDR_name(unsigned int /*val_in*/, const char ** /*s_out */); 273049d3bc91SRichard Lowe 273149d3bc91SRichard Lowe #ifdef __cplusplus 273249d3bc91SRichard Lowe } 273349d3bc91SRichard Lowe #endif 273449d3bc91SRichard Lowe #endif /* _LIBDWARF_H */ 273549d3bc91SRichard Lowe 2736*07dc1947SRichard Lowe 2737