17c478bd9Sstevel@tonic-gate /* 27c478bd9Sstevel@tonic-gate 307dc1947SRichard Lowe Copyright (C) 2000-2010 Silicon Graphics, Inc. All Rights Reserved. 407dc1947SRichard Lowe Portions Copyright 2007-2010 Sun Microsystems, Inc. All rights reserved. 5*4d9fdb46SRobert Mustacchi Portions Copyright 2008-2018 David Anderson. All rights reserved. 607dc1947SRichard Lowe Portions Copyright 2008-2010 Arxan Technologies, Inc. All rights reserved. 7*4d9fdb46SRobert Mustacchi Portions Copyright 2010-2012 SN Systems Ltd. All rights reserved. 8*4d9fdb46SRobert Mustacchi 9*4d9fdb46SRobert Mustacchi This program is free software; you can redistribute it 10*4d9fdb46SRobert Mustacchi and/or modify it under the terms of version 2.1 of the 11*4d9fdb46SRobert Mustacchi GNU Lesser General Public License as published by the Free 12*4d9fdb46SRobert Mustacchi Software Foundation. 13*4d9fdb46SRobert Mustacchi 14*4d9fdb46SRobert Mustacchi This program is distributed in the hope that it would be 15*4d9fdb46SRobert Mustacchi useful, but WITHOUT ANY WARRANTY; without even the implied 16*4d9fdb46SRobert Mustacchi warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR 17*4d9fdb46SRobert Mustacchi PURPOSE. 18*4d9fdb46SRobert Mustacchi 19*4d9fdb46SRobert Mustacchi Further, this software is distributed without any warranty 20*4d9fdb46SRobert Mustacchi that it is free of the rightful claim of any third person 21*4d9fdb46SRobert Mustacchi regarding infringement or the like. Any license provided 22*4d9fdb46SRobert Mustacchi herein, whether implied or otherwise, applies only to this 23*4d9fdb46SRobert Mustacchi software file. Patent licenses, if any, provided herein 24*4d9fdb46SRobert Mustacchi do not apply to combinations of this program with other 25*4d9fdb46SRobert Mustacchi software, or any other product whatsoever. 26*4d9fdb46SRobert Mustacchi 27*4d9fdb46SRobert Mustacchi You should have received a copy of the GNU Lesser General 28*4d9fdb46SRobert Mustacchi Public License along with this program; if not, write the 29*4d9fdb46SRobert Mustacchi Free Software Foundation, Inc., 51 Franklin Street - Fifth 30*4d9fdb46SRobert Mustacchi Floor, Boston MA 02110-1301, USA. 317c478bd9Sstevel@tonic-gate 327c478bd9Sstevel@tonic-gate */ 337c478bd9Sstevel@tonic-gate 347c478bd9Sstevel@tonic-gate 357c478bd9Sstevel@tonic-gate #ifndef _LIBDWARF_H 367c478bd9Sstevel@tonic-gate #define _LIBDWARF_H 377c478bd9Sstevel@tonic-gate #ifdef __cplusplus 387c478bd9Sstevel@tonic-gate extern "C" { 397c478bd9Sstevel@tonic-gate #endif 407c478bd9Sstevel@tonic-gate /* 41*4d9fdb46SRobert Mustacchi libdwarf.h 4207dc1947SRichard Lowe $Revision: #9 $ $Date: 2008/01/17 $ 437c478bd9Sstevel@tonic-gate 4407dc1947SRichard Lowe For libdwarf producers and consumers 457c478bd9Sstevel@tonic-gate 4607dc1947SRichard Lowe The interface is defined as having 8-byte signed and unsigned 4707dc1947SRichard Lowe values so it can handle 64-or-32bit target on 64-or-32bit host. 48*4d9fdb46SRobert Mustacchi Dwarf_Ptr is the native size: it represents pointers on 4907dc1947SRichard Lowe the host machine (not the target!). 507c478bd9Sstevel@tonic-gate 5107dc1947SRichard Lowe This contains declarations for types and all producer 5207dc1947SRichard Lowe and consumer functions. 537c478bd9Sstevel@tonic-gate 5407dc1947SRichard Lowe Function declarations are written on a single line each here 5507dc1947SRichard Lowe so one can use grep to each declaration in its entirety. 5607dc1947SRichard Lowe The declarations are a little harder to read this way, but... 577c478bd9Sstevel@tonic-gate 58*4d9fdb46SRobert Mustacchi The seeming duplication of the Elf typedef allows 59*4d9fdb46SRobert Mustacchi both verification we have the right struct name (when 60*4d9fdb46SRobert Mustacchi libelf.h included before this) and 61*4d9fdb46SRobert Mustacchi creation of a local handle so we have the struct pointer 62*4d9fdb46SRobert Mustacchi here (if libelf.h is not included before this file). 63*4d9fdb46SRobert Mustacchi 647c478bd9Sstevel@tonic-gate */ 657c478bd9Sstevel@tonic-gate 6649d3bc91SRichard Lowe struct Elf; 6749d3bc91SRichard Lowe typedef struct Elf* dwarf_elf_handle; 6849d3bc91SRichard Lowe 6907dc1947SRichard Lowe /* To enable printing with printf regardless of the 70*4d9fdb46SRobert Mustacchi actual underlying data type, we define the DW_PR_xxx macros. 71*4d9fdb46SRobert Mustacchi To ensure uses of DW_PR_DUx or DW_PR_DSx look the way you want 72*4d9fdb46SRobert Mustacchi ensure the right DW_PR_XZEROS define is uncommented. 737c478bd9Sstevel@tonic-gate */ 74*4d9fdb46SRobert Mustacchi /*#define DW_PR_XZEROS "" */ 75*4d9fdb46SRobert Mustacchi #define DW_PR_XZEROS "08" 76*4d9fdb46SRobert Mustacchi 77*4d9fdb46SRobert Mustacchi typedef unsigned long long Dwarf_Unsigned; 78*4d9fdb46SRobert Mustacchi typedef signed long long Dwarf_Signed; 79*4d9fdb46SRobert Mustacchi typedef unsigned long long Dwarf_Off; 80*4d9fdb46SRobert Mustacchi typedef unsigned long long Dwarf_Addr; 81*4d9fdb46SRobert Mustacchi typedef int Dwarf_Bool; /* boolean type */ 82*4d9fdb46SRobert Mustacchi typedef unsigned short Dwarf_Half; /* 2 byte unsigned value */ 83*4d9fdb46SRobert Mustacchi typedef unsigned char Dwarf_Small; /* 1 byte unsigned value */ 84*4d9fdb46SRobert Mustacchi /* If sizeof(Dwarf_Half) is greater than 2 85*4d9fdb46SRobert Mustacchi we believe libdwarf still works properly. */ 86*4d9fdb46SRobert Mustacchi 87*4d9fdb46SRobert Mustacchi #if defined(_WIN32) && defined(HAVE_NONSTANDARD_PRINTF_64_FORMAT) 88*4d9fdb46SRobert Mustacchi #define DW_PR_DUx "I64x" 89*4d9fdb46SRobert Mustacchi #define DW_PR_DSx "I64x" 90*4d9fdb46SRobert Mustacchi #define DW_PR_DUu "I64u" 91*4d9fdb46SRobert Mustacchi #define DW_PR_DSd "I64d" 92*4d9fdb46SRobert Mustacchi #else 93*4d9fdb46SRobert Mustacchi #define DW_PR_DUx "llx" 94*4d9fdb46SRobert Mustacchi #define DW_PR_DSx "llx" 95*4d9fdb46SRobert Mustacchi #define DW_PR_DUu "llu" 96*4d9fdb46SRobert Mustacchi #define DW_PR_DSd "lld" 97*4d9fdb46SRobert Mustacchi #endif /* DW_PR defines */ 9807dc1947SRichard Lowe 9907dc1947SRichard Lowe typedef void* Dwarf_Ptr; /* host machine pointer */ 10007dc1947SRichard Lowe 101*4d9fdb46SRobert Mustacchi /* DWARF5: a container for a DW_FORM_data16 data item. 102*4d9fdb46SRobert Mustacchi We have no integer types suitable so this special 103*4d9fdb46SRobert Mustacchi struct is used instead. It is up to consumers/producers 104*4d9fdb46SRobert Mustacchi to deal with the contents. 105*4d9fdb46SRobert Mustacchi New October 18, 2017 . */ 106*4d9fdb46SRobert Mustacchi typedef struct Dwarf_Form_Data16_s { 107*4d9fdb46SRobert Mustacchi unsigned char fd_data[16]; 108*4d9fdb46SRobert Mustacchi } Dwarf_Form_Data16; 109*4d9fdb46SRobert Mustacchi 110*4d9fdb46SRobert Mustacchi 111*4d9fdb46SRobert Mustacchi 112*4d9fdb46SRobert Mustacchi /* Used for signatures where ever they appear. 113*4d9fdb46SRobert Mustacchi It is not a string, it 11407dc1947SRichard Lowe is 8 bytes of a signature one would use to find 11507dc1947SRichard Lowe a type unit. See dwarf_formsig8() 116*4d9fdb46SRobert Mustacchi 117*4d9fdb46SRobert Mustacchi Sometimes it is used in calculations as 118*4d9fdb46SRobert Mustacchi Dwarf_Unsigned, but that is done inside libdwarf 119*4d9fdb46SRobert Mustacchi and the endianness question makes it a bit sketchy. 12007dc1947SRichard Lowe */ 121*4d9fdb46SRobert Mustacchi struct Dwarf_Sig8_s { 12207dc1947SRichard Lowe char signature[8]; 123*4d9fdb46SRobert Mustacchi }; 124*4d9fdb46SRobert Mustacchi typedef struct Dwarf_Sig8_s Dwarf_Sig8; 1257c478bd9Sstevel@tonic-gate 12649d3bc91SRichard Lowe /* Contains info on an uninterpreted block of data 127*4d9fdb46SRobert Mustacchi Used with certain frame information functions and 128*4d9fdb46SRobert Mustacchi also used with DW_FORM_block<>. 1297c478bd9Sstevel@tonic-gate */ 1307c478bd9Sstevel@tonic-gate typedef struct { 131*4d9fdb46SRobert Mustacchi Dwarf_Unsigned bl_len; /* length of block bl_data points at */ 13207dc1947SRichard Lowe Dwarf_Ptr bl_data; /* uninterpreted data */ 133*4d9fdb46SRobert Mustacchi 134*4d9fdb46SRobert Mustacchi /* See libdwarf.h DW_LKIND* */ 135*4d9fdb46SRobert Mustacchi Dwarf_Small bl_from_loclist; 136*4d9fdb46SRobert Mustacchi 137*4d9fdb46SRobert Mustacchi /* Section (not CU) offset which 'data' comes from. */ 138*4d9fdb46SRobert Mustacchi Dwarf_Unsigned bl_section_offset; 1397c478bd9Sstevel@tonic-gate } Dwarf_Block; 1407c478bd9Sstevel@tonic-gate 1417c478bd9Sstevel@tonic-gate 142*4d9fdb46SRobert Mustacchi /* NEW October 2015. */ 143*4d9fdb46SRobert Mustacchi /* This provides access to Dwarf_Locdesc_c, a single 144*4d9fdb46SRobert Mustacchi location description */ 145*4d9fdb46SRobert Mustacchi struct Dwarf_Locdesc_c_s; 146*4d9fdb46SRobert Mustacchi typedef struct Dwarf_Locdesc_c_s * Dwarf_Locdesc_c; 147*4d9fdb46SRobert Mustacchi 148*4d9fdb46SRobert Mustacchi /* NEW October 2015. */ 149*4d9fdb46SRobert Mustacchi /* This provides access to Dwarf_Locdesc_c, a single 150*4d9fdb46SRobert Mustacchi location list entry (or for a locexpr, the fake 151*4d9fdb46SRobert Mustacchi Loc_Head for the locexpr) */ 152*4d9fdb46SRobert Mustacchi struct Dwarf_Loc_Head_c_s; 153*4d9fdb46SRobert Mustacchi typedef struct Dwarf_Loc_Head_c_s * Dwarf_Loc_Head_c; 154*4d9fdb46SRobert Mustacchi 155*4d9fdb46SRobert Mustacchi /* NEW November 2015. For DWARF5 .debug_macro section */ 156*4d9fdb46SRobert Mustacchi struct Dwarf_Macro_Context_s; 157*4d9fdb46SRobert Mustacchi typedef struct Dwarf_Macro_Context_s * Dwarf_Loc_Macro_Context; 158*4d9fdb46SRobert Mustacchi 159*4d9fdb46SRobert Mustacchi /* NEW September 2016. Allows easy access to DW_AT_discr_list 160*4d9fdb46SRobert Mustacchi array of discriminant values. Input in blockpointer 161*4d9fdb46SRobert Mustacchi is a block with a list of uleb or sleb numbers 162*4d9fdb46SRobert Mustacchi (all one or the other, lebunsignedflag instructs 163*4d9fdb46SRobert Mustacchi how to read the leb values properly) */ 164*4d9fdb46SRobert Mustacchi typedef struct Dwarf_Dsc_Head_s * Dwarf_Dsc_Head; 165*4d9fdb46SRobert Mustacchi 166*4d9fdb46SRobert Mustacchi /* Location record. Records up to 2 operand values. 167*4d9fdb46SRobert Mustacchi Not usable with DWARF5 or DWARF4 with location 168*4d9fdb46SRobert Mustacchi operator extensions. */ 1697c478bd9Sstevel@tonic-gate typedef struct { 17007dc1947SRichard Lowe Dwarf_Small lr_atom; /* location operation */ 17107dc1947SRichard Lowe Dwarf_Unsigned lr_number; /* operand */ 172*4d9fdb46SRobert Mustacchi Dwarf_Unsigned lr_number2; /* for OP_BREGx and DW_OP_GNU_const_type*/ 17307dc1947SRichard Lowe Dwarf_Unsigned lr_offset; /* offset in locexpr for OP_BRA etc */ 1747c478bd9Sstevel@tonic-gate } Dwarf_Loc; 1757c478bd9Sstevel@tonic-gate 1767c478bd9Sstevel@tonic-gate 177*4d9fdb46SRobert Mustacchi /* Location description. DWARF 2,3,4. 178*4d9fdb46SRobert Mustacchi When this is from a split-dwarf loclist (.debug_loc.dwo) 179*4d9fdb46SRobert Mustacchi and no tied object is present 180*4d9fdb46SRobert Mustacchi then ld_lowpc and ld_highpc are actually indices in 181*4d9fdb46SRobert Mustacchi the .debug_addr section of the tied object). 182*4d9fdb46SRobert Mustacchi If there is a tied object then these fields are actuall 183*4d9fdb46SRobert Mustacchi addresses and DW_AT_addr_base in the skeleton CU DIE applies to 184*4d9fdb46SRobert Mustacchi that .debug_addr. 185*4d9fdb46SRobert Mustacchi 186*4d9fdb46SRobert Mustacchi Location record. Records up to 2 operand values. 187*4d9fdb46SRobert Mustacchi Not usable with DWARF5 or DWARF4 with extensions. 188*4d9fdb46SRobert Mustacchi 189*4d9fdb46SRobert Mustacchi If from DWARF2,3,4 non-split dwarf then things operate as 190*4d9fdb46SRobert Mustacchi in DWARF2. 191*4d9fdb46SRobert Mustacchi See dwarf_get_loclist_b() and the other related 192*4d9fdb46SRobert Mustacchi new functions that 193*4d9fdb46SRobert Mustacchi avoid using public structures Dwarf_Loc and Dwarf_Locdesc. 1947c478bd9Sstevel@tonic-gate */ 1957c478bd9Sstevel@tonic-gate typedef struct { 196*4d9fdb46SRobert Mustacchi /* Beginning of active range. This is actually an offset 197*4d9fdb46SRobert Mustacchi of an applicable base address, not a pc value. */ 198*4d9fdb46SRobert Mustacchi Dwarf_Addr ld_lopc; 199*4d9fdb46SRobert Mustacchi 200*4d9fdb46SRobert Mustacchi /* End of active range. This is actually an offset 201*4d9fdb46SRobert Mustacchi of an applicable base address, not a pc value. */ 202*4d9fdb46SRobert Mustacchi Dwarf_Addr ld_hipc; 203*4d9fdb46SRobert Mustacchi 20407dc1947SRichard Lowe Dwarf_Half ld_cents; /* count of location records */ 20507dc1947SRichard Lowe Dwarf_Loc* ld_s; /* pointer to list of same */ 206*4d9fdb46SRobert Mustacchi 207*4d9fdb46SRobert Mustacchi /* non-0 if loclist, 1 if non-split (dwarf 2,3,4) */ 208*4d9fdb46SRobert Mustacchi Dwarf_Small ld_from_loclist; 20907dc1947SRichard Lowe 21007dc1947SRichard Lowe Dwarf_Unsigned ld_section_offset; /* Section (not CU) offset 211*4d9fdb46SRobert Mustacchi where loc-expr begins*/ 2127c478bd9Sstevel@tonic-gate } Dwarf_Locdesc; 2137c478bd9Sstevel@tonic-gate 214*4d9fdb46SRobert Mustacchi /* First appears in DWARF3, and only ranges entries exist. 215*4d9fdb46SRobert Mustacchi The dwr_addr1/addr2 data is either an offset (DW_RANGES_ENTRY) 216*4d9fdb46SRobert Mustacchi or an address (dwr_addr2 in DW_RANGES_ADDRESS_SELECTION) or 217*4d9fdb46SRobert Mustacchi both are zero (DW_RANGES_END). 218*4d9fdb46SRobert Mustacchi For DWARF5 each table starts with a header 219*4d9fdb46SRobert Mustacchi followed by range list entries defined 220*4d9fdb46SRobert Mustacchi as here. 22107dc1947SRichard Lowe */ 222*4d9fdb46SRobert Mustacchi enum Dwarf_Ranges_Entry_Type { DW_RANGES_ENTRY, 22307dc1947SRichard Lowe DW_RANGES_ADDRESS_SELECTION, 224*4d9fdb46SRobert Mustacchi DW_RANGES_END 225*4d9fdb46SRobert Mustacchi }; 22607dc1947SRichard Lowe typedef struct { 22707dc1947SRichard Lowe Dwarf_Addr dwr_addr1; 228*4d9fdb46SRobert Mustacchi Dwarf_Addr dwr_addr2; 22907dc1947SRichard Lowe enum Dwarf_Ranges_Entry_Type dwr_type; 23007dc1947SRichard Lowe } Dwarf_Ranges; 23107dc1947SRichard Lowe 2327c478bd9Sstevel@tonic-gate /* Frame description instructions expanded. 2337c478bd9Sstevel@tonic-gate */ 2347c478bd9Sstevel@tonic-gate typedef struct { 23507dc1947SRichard Lowe Dwarf_Small fp_base_op; 23607dc1947SRichard Lowe Dwarf_Small fp_extended_op; 23707dc1947SRichard Lowe Dwarf_Half fp_register; 23807dc1947SRichard Lowe 239*4d9fdb46SRobert Mustacchi /* Value may be signed, depends on op. 240*4d9fdb46SRobert Mustacchi Any applicable data_alignment_factor has 241*4d9fdb46SRobert Mustacchi not been applied, this is the raw offset. */ 24207dc1947SRichard Lowe Dwarf_Unsigned fp_offset; 24307dc1947SRichard Lowe Dwarf_Off fp_instr_offset; 24407dc1947SRichard Lowe } Dwarf_Frame_Op; /* DWARF2 */ 24507dc1947SRichard Lowe 24607dc1947SRichard Lowe /* ***IMPORTANT NOTE, TARGET DEPENDENCY **** 247*4d9fdb46SRobert Mustacchi DW_REG_TABLE_SIZE must be at least as large as 248*4d9fdb46SRobert Mustacchi the number of registers 249*4d9fdb46SRobert Mustacchi (DW_FRAME_LAST_REG_NUM) as defined in dwarf.h 250*4d9fdb46SRobert Mustacchi Preferably identical to DW_FRAME_LAST_REG_NUM. 251*4d9fdb46SRobert Mustacchi Ensure [0-DW_REG_TABLE_SIZE] does not overlap 252*4d9fdb46SRobert Mustacchi DW_FRAME_UNDEFINED_VAL or DW_FRAME_SAME_VAL. 253*4d9fdb46SRobert Mustacchi Also ensure DW_FRAME_REG_INITIAL_VALUE is set to what 254*4d9fdb46SRobert Mustacchi is appropriate to your cpu. 255*4d9fdb46SRobert Mustacchi For various CPUs DW_FRAME_UNDEFINED_VAL is correct 256*4d9fdb46SRobert Mustacchi as the value for DW_FRAME_REG_INITIAL_VALUE. 257*4d9fdb46SRobert Mustacchi 258*4d9fdb46SRobert Mustacchi For consumer apps, this can be set dynamically: see 259*4d9fdb46SRobert Mustacchi dwarf_set_frame_rule_table_size(); */ 26007dc1947SRichard Lowe #ifndef DW_REG_TABLE_SIZE 2617c478bd9Sstevel@tonic-gate #define DW_REG_TABLE_SIZE 66 26207dc1947SRichard Lowe #endif 26307dc1947SRichard Lowe 264*4d9fdb46SRobert Mustacchi /* For MIPS, DW_FRAME_SAME_VAL is the correct default value 26507dc1947SRichard Lowe for a frame register value. For other CPUS another value 26607dc1947SRichard Lowe may be better, such as DW_FRAME_UNDEFINED_VAL. 26707dc1947SRichard Lowe See dwarf_set_frame_rule_table_size 26807dc1947SRichard Lowe */ 26907dc1947SRichard Lowe #ifndef DW_FRAME_REG_INITIAL_VALUE 27007dc1947SRichard Lowe #define DW_FRAME_REG_INITIAL_VALUE DW_FRAME_SAME_VAL 27107dc1947SRichard Lowe #endif 27207dc1947SRichard Lowe 27307dc1947SRichard Lowe /* Taken as meaning 'undefined value', this is not 27407dc1947SRichard Lowe a column or register number. 27507dc1947SRichard Lowe Only present at libdwarf runtime in the consumer 27607dc1947SRichard Lowe interfaces. Never on disk. 27707dc1947SRichard Lowe DW_FRAME_* Values present on disk are in dwarf.h 27807dc1947SRichard Lowe Ensure this is > DW_REG_TABLE_SIZE (the reg table 27907dc1947SRichard Lowe size is changeable at runtime with the *reg3() interfaces, 28007dc1947SRichard Lowe and this value must be greater than the reg table size). 28107dc1947SRichard Lowe */ 28207dc1947SRichard Lowe #define DW_FRAME_UNDEFINED_VAL 1034 28307dc1947SRichard Lowe 28407dc1947SRichard Lowe /* Taken as meaning 'same value' as caller had, not a column 28507dc1947SRichard Lowe or register number. 28607dc1947SRichard Lowe Only present at libdwarf runtime in the consumer 28707dc1947SRichard Lowe interfaces. Never on disk. 28807dc1947SRichard Lowe DW_FRAME_* Values present on disk are in dwarf.h 28907dc1947SRichard Lowe Ensure this is > DW_REG_TABLE_SIZE (the reg table 29007dc1947SRichard Lowe size is changeable at runtime with the *reg3() interfaces, 29107dc1947SRichard Lowe and this value must be greater than the reg table size). 29207dc1947SRichard Lowe */ 29307dc1947SRichard Lowe #define DW_FRAME_SAME_VAL 1035 29407dc1947SRichard Lowe 29507dc1947SRichard Lowe /* For DWARF3 consumer interfaces, make the CFA a column with no 29607dc1947SRichard Lowe real table number. This is what should have been done 29707dc1947SRichard Lowe for the DWARF2 interfaces. This actually works for 29807dc1947SRichard Lowe both DWARF2 and DWARF3, but see the libdwarf documentation 29907dc1947SRichard Lowe on Dwarf_Regtable3 and dwarf_get_fde_info_for_reg3() 300*4d9fdb46SRobert Mustacchi and dwarf_get_fde_info_for_all_regs3() 30107dc1947SRichard Lowe Do NOT use this with the older dwarf_get_fde_info_for_reg() 30207dc1947SRichard Lowe or dwarf_get_fde_info_for_all_regs() consumer interfaces. 30307dc1947SRichard Lowe Must be higher than any register count for *any* ABI 30407dc1947SRichard Lowe (ensures maximum applicability with minimum effort). 30507dc1947SRichard Lowe Ensure this is > DW_REG_TABLE_SIZE (the reg table 30607dc1947SRichard Lowe size is changeable at runtime with the *reg3() interfaces, 30707dc1947SRichard Lowe and this value must be greater than the reg table size). 30807dc1947SRichard Lowe Only present at libdwarf runtime in the consumer 30907dc1947SRichard Lowe interfaces. Never on disk. 31007dc1947SRichard Lowe */ 31107dc1947SRichard Lowe #define DW_FRAME_CFA_COL3 1436 31207dc1947SRichard Lowe 31307dc1947SRichard Lowe /* The following are all needed to evaluate DWARF3 register rules. 31407dc1947SRichard Lowe */ 31507dc1947SRichard Lowe #define DW_EXPR_OFFSET 0 /* DWARF2 only sees this. */ 31607dc1947SRichard Lowe #define DW_EXPR_VAL_OFFSET 1 31707dc1947SRichard Lowe #define DW_EXPR_EXPRESSION 2 31807dc1947SRichard Lowe #define DW_EXPR_VAL_EXPRESSION 3 31907dc1947SRichard Lowe 32007dc1947SRichard Lowe typedef struct Dwarf_Regtable_Entry_s { 32107dc1947SRichard Lowe /* For each index i (naming a hardware register with dwarf number 322*4d9fdb46SRobert Mustacchi i) the following is true and defines the value of that register: 323*4d9fdb46SRobert Mustacchi 324*4d9fdb46SRobert Mustacchi If dw_regnum is Register DW_FRAME_UNDEFINED_VAL 325*4d9fdb46SRobert Mustacchi it is not DWARF register number but 326*4d9fdb46SRobert Mustacchi a place holder indicating the register has no defined value. 327*4d9fdb46SRobert Mustacchi If dw_regnum is Register DW_FRAME_SAME_VAL 328*4d9fdb46SRobert Mustacchi it is not DWARF register number but 329*4d9fdb46SRobert Mustacchi a place holder indicating the register has the same 330*4d9fdb46SRobert Mustacchi value in the previous frame. 331*4d9fdb46SRobert Mustacchi 332*4d9fdb46SRobert Mustacchi DW_FRAME_UNDEFINED_VAL, DW_FRAME_SAME_VAL are 333*4d9fdb46SRobert Mustacchi only present at libdwarf runtime. Never on disk. 334*4d9fdb46SRobert Mustacchi DW_FRAME_* Values present on disk are in dwarf.h 335*4d9fdb46SRobert Mustacchi 336*4d9fdb46SRobert Mustacchi Otherwise: the register number is a DWARF register number 337*4d9fdb46SRobert Mustacchi (see ABI documents for how this translates to hardware/ 338*4d9fdb46SRobert Mustacchi software register numbers in the machine hardware) 339*4d9fdb46SRobert Mustacchi and the following applies: 340*4d9fdb46SRobert Mustacchi 341*4d9fdb46SRobert Mustacchi if dw_value_type == DW_EXPR_OFFSET (the only case for dwarf2): 342*4d9fdb46SRobert Mustacchi If dw_offset_relevant is non-zero, then 343*4d9fdb46SRobert Mustacchi the value is stored at at the address CFA+N where 344*4d9fdb46SRobert Mustacchi N is a signed offset. 345*4d9fdb46SRobert Mustacchi Rule: Offset(N) 346*4d9fdb46SRobert Mustacchi If dw_offset_relevant is zero, then the value of the register 347*4d9fdb46SRobert Mustacchi is the value of (DWARF) register number dw_regnum. 348*4d9fdb46SRobert Mustacchi Rule: register(F) 349*4d9fdb46SRobert Mustacchi Other values of dw_value_type are an error. 350*4d9fdb46SRobert Mustacchi */ 35107dc1947SRichard Lowe Dwarf_Small dw_offset_relevant; 35207dc1947SRichard Lowe 35307dc1947SRichard Lowe /* For DWARF2, always 0 */ 354*4d9fdb46SRobert Mustacchi Dwarf_Small dw_value_type; 35507dc1947SRichard Lowe 35607dc1947SRichard Lowe Dwarf_Half dw_regnum; 35707dc1947SRichard Lowe 358*4d9fdb46SRobert Mustacchi /* The data type here should the larger of Dwarf_Addr 359*4d9fdb46SRobert Mustacchi and Dwarf_Unsigned and Dwarf_Signed. */ 36007dc1947SRichard Lowe Dwarf_Addr dw_offset; 36107dc1947SRichard Lowe } Dwarf_Regtable_Entry; 36207dc1947SRichard Lowe 36307dc1947SRichard Lowe typedef struct Dwarf_Regtable_s { 36407dc1947SRichard Lowe struct Dwarf_Regtable_Entry_s rules[DW_REG_TABLE_SIZE]; 3657c478bd9Sstevel@tonic-gate } Dwarf_Regtable; 3667c478bd9Sstevel@tonic-gate 36707dc1947SRichard Lowe /* opaque type. Functional interface shown later. */ 36807dc1947SRichard Lowe struct Dwarf_Reg_value3_s; 369*4d9fdb46SRobert Mustacchi typedef struct Dwarf_Reg_value3_s Dwarf_Reg_Value3; 37007dc1947SRichard Lowe 37107dc1947SRichard Lowe typedef struct Dwarf_Regtable_Entry3_s { 372*4d9fdb46SRobert Mustacchi /* For each index i (naming a hardware register with dwarf number 373*4d9fdb46SRobert Mustacchi i) the following is true and defines the value of that register: 374*4d9fdb46SRobert Mustacchi 375*4d9fdb46SRobert Mustacchi If dw_regnum is Register DW_FRAME_UNDEFINED_VAL 376*4d9fdb46SRobert Mustacchi it is not DWARF register number but 377*4d9fdb46SRobert Mustacchi a place holder indicating the register has no defined value. 378*4d9fdb46SRobert Mustacchi If dw_regnum is Register DW_FRAME_SAME_VAL 379*4d9fdb46SRobert Mustacchi it is not DWARF register number but 380*4d9fdb46SRobert Mustacchi a place holder indicating the register has the same 381*4d9fdb46SRobert Mustacchi value in the previous frame. 382*4d9fdb46SRobert Mustacchi 383*4d9fdb46SRobert Mustacchi DW_FRAME_UNDEFINED_VAL, DW_FRAME_SAME_VAL and 384*4d9fdb46SRobert Mustacchi DW_FRAME_CFA_COL3 are only present at libdwarf runtime. 385*4d9fdb46SRobert Mustacchi Never on disk. 386*4d9fdb46SRobert Mustacchi DW_FRAME_* Values present on disk are in dwarf.h 387*4d9fdb46SRobert Mustacchi Because DW_FRAME_SAME_VAL and DW_FRAME_UNDEFINED_VAL 388*4d9fdb46SRobert Mustacchi and DW_FRAME_CFA_COL3 are definable at runtime 389*4d9fdb46SRobert Mustacchi consider the names symbolic in this comment, not absolute. 390*4d9fdb46SRobert Mustacchi 391*4d9fdb46SRobert Mustacchi Otherwise: the register number is a DWARF register number 39207dc1947SRichard Lowe (see ABI documents for how this translates to hardware/ 393*4d9fdb46SRobert Mustacchi software register numbers in the machine hardware) 394*4d9fdb46SRobert Mustacchi and the following applies: 39507dc1947SRichard Lowe 396*4d9fdb46SRobert Mustacchi In a cfa-defining entry (rt3_cfa_rule) the regnum is the 397*4d9fdb46SRobert Mustacchi CFA 'register number'. Which is some 'normal' register, 398*4d9fdb46SRobert Mustacchi not DW_FRAME_CFA_COL3, nor DW_FRAME_SAME_VAL, nor 399*4d9fdb46SRobert Mustacchi DW_FRAME_UNDEFINED_VAL. 40007dc1947SRichard Lowe 401*4d9fdb46SRobert Mustacchi If dw_value_type == DW_EXPR_OFFSET (the only possible case for 402*4d9fdb46SRobert Mustacchi dwarf2): 40307dc1947SRichard Lowe If dw_offset_relevant is non-zero, then 404*4d9fdb46SRobert Mustacchi the value is stored at at the address 405*4d9fdb46SRobert Mustacchi CFA+N where N is a signed offset. 406*4d9fdb46SRobert Mustacchi dw_regnum is the cfa register rule which means 407*4d9fdb46SRobert Mustacchi one ignores dw_regnum and uses the CFA appropriately. 408*4d9fdb46SRobert Mustacchi So dw_offset_or_block_len is a signed value, really, 409*4d9fdb46SRobert Mustacchi and must be printed/evaluated as such. 410*4d9fdb46SRobert Mustacchi Rule: Offset(N) 41107dc1947SRichard Lowe If dw_offset_relevant is zero, then the value of the register 412*4d9fdb46SRobert Mustacchi is the value of (DWARF) register number dw_regnum. 413*4d9fdb46SRobert Mustacchi Rule: register(R) 414*4d9fdb46SRobert Mustacchi If dw_value_type == DW_EXPR_VAL_OFFSET 41507dc1947SRichard Lowe the value of this register is CFA +N where N is a signed offset. 41607dc1947SRichard Lowe dw_regnum is the cfa register rule which means 41707dc1947SRichard Lowe one ignores dw_regnum and uses the CFA appropriately. 41807dc1947SRichard Lowe Rule: val_offset(N) 419*4d9fdb46SRobert Mustacchi If dw_value_type == DW_EXPR_EXPRESSION 42007dc1947SRichard Lowe The value of the register is the value at the address 42107dc1947SRichard Lowe computed by evaluating the DWARF expression E. 42207dc1947SRichard Lowe Rule: expression(E) 42307dc1947SRichard Lowe The expression E byte stream is pointed to by dw_block_ptr. 42407dc1947SRichard Lowe The expression length in bytes is given by 42507dc1947SRichard Lowe dw_offset_or_block_len. 426*4d9fdb46SRobert Mustacchi If dw_value_type == DW_EXPR_VAL_EXPRESSION 42707dc1947SRichard Lowe The value of the register is the value 42807dc1947SRichard Lowe computed by evaluating the DWARF expression E. 42907dc1947SRichard Lowe Rule: val_expression(E) 43007dc1947SRichard Lowe The expression E byte stream is pointed to by dw_block_ptr. 43107dc1947SRichard Lowe The expression length in bytes is given by 43207dc1947SRichard Lowe dw_offset_or_block_len. 433*4d9fdb46SRobert Mustacchi Other values of dw_value_type are an error. 434*4d9fdb46SRobert Mustacchi */ 43507dc1947SRichard Lowe Dwarf_Small dw_offset_relevant; 436*4d9fdb46SRobert Mustacchi Dwarf_Small dw_value_type; 43707dc1947SRichard Lowe Dwarf_Half dw_regnum; 43807dc1947SRichard Lowe Dwarf_Unsigned dw_offset_or_block_len; 43907dc1947SRichard Lowe Dwarf_Ptr dw_block_ptr; 44007dc1947SRichard Lowe 44107dc1947SRichard Lowe }Dwarf_Regtable_Entry3; 44207dc1947SRichard Lowe 443*4d9fdb46SRobert Mustacchi /* For the DWARF3 version, moved the DW_FRAME_CFA_COL 444*4d9fdb46SRobert Mustacchi out of the array and into its own struct. 445*4d9fdb46SRobert Mustacchi Having it part of the array is not very easy to work 446*4d9fdb46SRobert Mustacchi with from a portability point of view: changing 447*4d9fdb46SRobert Mustacchi the number for every architecture is a pain (if one fails 448*4d9fdb46SRobert Mustacchi to set it correctly a register rule gets clobbered when 449*4d9fdb46SRobert Mustacchi setting CFA). With MIPS it just happened to be easy to use 450*4d9fdb46SRobert Mustacchi DW_FRAME_CFA_COL (it was wrong conceptually but it was easy...). 451*4d9fdb46SRobert Mustacchi 452*4d9fdb46SRobert Mustacchi rt3_rules and rt3_reg_table_size must be filled in before 453*4d9fdb46SRobert Mustacchi calling libdwarf. Filled in with a pointer to an array 454*4d9fdb46SRobert Mustacchi (pointer and array set up by the calling application) 455*4d9fdb46SRobert Mustacchi of rt3_reg_table_size Dwarf_Regtable_Entry3_s structs. 456*4d9fdb46SRobert Mustacchi libdwarf does not allocate or deallocate space for the 457*4d9fdb46SRobert Mustacchi rules, you must do so. libdwarf will initialize the 458*4d9fdb46SRobert Mustacchi contents rules array, you do not need to do so (though 459*4d9fdb46SRobert Mustacchi if you choose to initialize the array somehow that is ok: 460*4d9fdb46SRobert Mustacchi libdwarf will overwrite your initializations with its own). 46107dc1947SRichard Lowe 46207dc1947SRichard Lowe */ 46307dc1947SRichard Lowe typedef struct Dwarf_Regtable3_s { 46407dc1947SRichard Lowe struct Dwarf_Regtable_Entry3_s rt3_cfa_rule; 46507dc1947SRichard Lowe 46607dc1947SRichard Lowe Dwarf_Half rt3_reg_table_size; 46707dc1947SRichard Lowe struct Dwarf_Regtable_Entry3_s * rt3_rules; 46807dc1947SRichard Lowe } Dwarf_Regtable3; 46907dc1947SRichard Lowe 47007dc1947SRichard Lowe 471*4d9fdb46SRobert Mustacchi /* Use for DW_EPXR_STANDARD., DW_EXPR_VAL_OFFSET. 472*4d9fdb46SRobert Mustacchi Returns DW_DLV_OK if the value is available. 473*4d9fdb46SRobert Mustacchi If DW_DLV_OK returns the regnum and offset thru the pointers 474*4d9fdb46SRobert Mustacchi (which the consumer must use appropriately). 47507dc1947SRichard Lowe */ 47607dc1947SRichard Lowe int dwarf_frame_get_reg_register(struct Dwarf_Regtable_Entry3_s *reg_in, 47707dc1947SRichard Lowe Dwarf_Small *offset_relevant, 47807dc1947SRichard Lowe Dwarf_Half *regnum_out, 47907dc1947SRichard Lowe Dwarf_Signed *offset_out); 48007dc1947SRichard Lowe 481*4d9fdb46SRobert Mustacchi /* Use for DW_EXPR_EXPRESSION, DW_EXPR_VAL_EXPRESSION. 482*4d9fdb46SRobert Mustacchi Returns DW_DLV_OK if the value is available. 483*4d9fdb46SRobert Mustacchi The caller must pass in the address of a valid 484*4d9fdb46SRobert Mustacchi Dwarf_Block (the caller need not initialize it). 48507dc1947SRichard Lowe */ 48607dc1947SRichard Lowe int dwarf_frame_get_reg_expression(struct Dwarf_Regtable_Entry3_s *reg_in, 48707dc1947SRichard Lowe Dwarf_Block *block_out); 48807dc1947SRichard Lowe 48907dc1947SRichard Lowe 490*4d9fdb46SRobert Mustacchi /* For DW_DLC_SYMBOLIC_RELOCATIONS output to caller 491*4d9fdb46SRobert Mustacchi v2, adding drd_length: some relocations are 4 and 492*4d9fdb46SRobert Mustacchi some 8 bytes (pointers are 8, section offsets 4) in 493*4d9fdb46SRobert Mustacchi some dwarf environments. (MIPS relocations are all one 494*4d9fdb46SRobert Mustacchi size in any given ABI.) Changing drd_type to an unsigned char 495*4d9fdb46SRobert Mustacchi to keep struct size down. 4967c478bd9Sstevel@tonic-gate */ 4977c478bd9Sstevel@tonic-gate enum Dwarf_Rel_Type { 498*4d9fdb46SRobert Mustacchi dwarf_drt_none, /* Should not get to caller */ 499*4d9fdb46SRobert Mustacchi dwarf_drt_data_reloc, /* Simple normal relocation. */ 500*4d9fdb46SRobert Mustacchi dwarf_drt_segment_rel, /* Special reloc, exceptions. */ 501*4d9fdb46SRobert Mustacchi /* dwarf_drt_first_of_length_pair and drt_second 502*4d9fdb46SRobert Mustacchi are for for the .word end - begin case. */ 503*4d9fdb46SRobert Mustacchi dwarf_drt_first_of_length_pair, 504*4d9fdb46SRobert Mustacchi dwarf_drt_second_of_length_pair 50507dc1947SRichard Lowe }; 50607dc1947SRichard Lowe 50707dc1947SRichard Lowe typedef struct Dwarf_P_Marker_s * Dwarf_P_Marker; 50807dc1947SRichard Lowe struct Dwarf_P_Marker_s { 50907dc1947SRichard Lowe Dwarf_Unsigned ma_marker; 51007dc1947SRichard Lowe Dwarf_Unsigned ma_offset; 5117c478bd9Sstevel@tonic-gate }; 51207dc1947SRichard Lowe 5137c478bd9Sstevel@tonic-gate typedef struct Dwarf_Relocation_Data_s * Dwarf_Relocation_Data; 5147c478bd9Sstevel@tonic-gate struct Dwarf_Relocation_Data_s { 51507dc1947SRichard Lowe unsigned char drd_type; /* Cast to/from Dwarf_Rel_Type 516*4d9fdb46SRobert Mustacchi to keep size small in struct. */ 517*4d9fdb46SRobert Mustacchi unsigned char drd_length; /* Length in bytes of data being 518*4d9fdb46SRobert Mustacchi relocated. 4 for 32bit data, 519*4d9fdb46SRobert Mustacchi 8 for 64bit data. */ 52007dc1947SRichard Lowe Dwarf_Unsigned drd_offset; /* Where the data to reloc is. */ 52107dc1947SRichard Lowe Dwarf_Unsigned drd_symbol_index; 5227c478bd9Sstevel@tonic-gate }; 5237c478bd9Sstevel@tonic-gate 52407dc1947SRichard Lowe typedef struct Dwarf_P_String_Attr_s * Dwarf_P_String_Attr; 52507dc1947SRichard Lowe struct Dwarf_P_String_Attr_s { 52607dc1947SRichard Lowe Dwarf_Unsigned sa_offset; /* Offset of string attribute data */ 527*4d9fdb46SRobert Mustacchi Dwarf_Unsigned sa_nbytes; 52807dc1947SRichard Lowe }; 529*4d9fdb46SRobert Mustacchi 53007dc1947SRichard Lowe 5317c478bd9Sstevel@tonic-gate /* Opaque types for Consumer Library. */ 5327c478bd9Sstevel@tonic-gate typedef struct Dwarf_Debug_s* Dwarf_Debug; 5337c478bd9Sstevel@tonic-gate typedef struct Dwarf_Die_s* Dwarf_Die; 5347c478bd9Sstevel@tonic-gate typedef struct Dwarf_Line_s* Dwarf_Line; 5357c478bd9Sstevel@tonic-gate typedef struct Dwarf_Global_s* Dwarf_Global; 5367c478bd9Sstevel@tonic-gate typedef struct Dwarf_Func_s* Dwarf_Func; 5377c478bd9Sstevel@tonic-gate typedef struct Dwarf_Type_s* Dwarf_Type; 5387c478bd9Sstevel@tonic-gate typedef struct Dwarf_Var_s* Dwarf_Var; 5397c478bd9Sstevel@tonic-gate typedef struct Dwarf_Weak_s* Dwarf_Weak; 5407c478bd9Sstevel@tonic-gate typedef struct Dwarf_Error_s* Dwarf_Error; 5417c478bd9Sstevel@tonic-gate typedef struct Dwarf_Attribute_s* Dwarf_Attribute; 542*4d9fdb46SRobert Mustacchi typedef struct Dwarf_Abbrev_s* Dwarf_Abbrev; 543*4d9fdb46SRobert Mustacchi typedef struct Dwarf_Fde_s* Dwarf_Fde; 544*4d9fdb46SRobert Mustacchi typedef struct Dwarf_Cie_s* Dwarf_Cie; 545*4d9fdb46SRobert Mustacchi typedef struct Dwarf_Arange_s* Dwarf_Arange; 546*4d9fdb46SRobert Mustacchi typedef struct Dwarf_Gdbindex_s* Dwarf_Gdbindex; 547*4d9fdb46SRobert Mustacchi struct Dwarf_Xu_Index_Header_s; 548*4d9fdb46SRobert Mustacchi typedef struct Dwarf_Xu_Index_Header_s *Dwarf_Xu_Index_Header; 549*4d9fdb46SRobert Mustacchi struct Dwarf_Line_Context_s; 550*4d9fdb46SRobert Mustacchi typedef struct Dwarf_Line_Context_s *Dwarf_Line_Context; 551*4d9fdb46SRobert Mustacchi struct Dwarf_Macro_Context_s; 552*4d9fdb46SRobert Mustacchi typedef struct Dwarf_Macro_Context_s *Dwarf_Macro_Context; 553*4d9fdb46SRobert Mustacchi struct Dwarf_Dnames_Head_s; 554*4d9fdb46SRobert Mustacchi typedef struct Dwarf_Dnames_Head_s *Dwarf_Dnames_Head; 555*4d9fdb46SRobert Mustacchi 5567c478bd9Sstevel@tonic-gate 5577c478bd9Sstevel@tonic-gate /* Opaque types for Producer Library. */ 558*4d9fdb46SRobert Mustacchi typedef struct Dwarf_P_Debug_s* Dwarf_P_Debug; 559*4d9fdb46SRobert Mustacchi typedef struct Dwarf_P_Die_s* Dwarf_P_Die; 560*4d9fdb46SRobert Mustacchi typedef struct Dwarf_P_Attribute_s* Dwarf_P_Attribute; 561*4d9fdb46SRobert Mustacchi typedef struct Dwarf_P_Fde_s* Dwarf_P_Fde; 56207dc1947SRichard Lowe typedef struct Dwarf_P_Expr_s* Dwarf_P_Expr; 56307dc1947SRichard Lowe typedef Dwarf_Unsigned Dwarf_Tag; 5647c478bd9Sstevel@tonic-gate 5657c478bd9Sstevel@tonic-gate 5667c478bd9Sstevel@tonic-gate /* error handler function 5677c478bd9Sstevel@tonic-gate */ 568*4d9fdb46SRobert Mustacchi typedef void (*Dwarf_Handler)(Dwarf_Error /*error*/, Dwarf_Ptr /*errarg*/); 5697c478bd9Sstevel@tonic-gate 5707c478bd9Sstevel@tonic-gate 57107dc1947SRichard Lowe /* Begin libdwarf Object File Interface declarations. 57207dc1947SRichard Lowe 57307dc1947SRichard Lowe As of February 2008 there are multiple dwarf_reader object access 57407dc1947SRichard Lowe initialization methods available: 575*4d9fdb46SRobert Mustacchi The traditional dwarf_elf_init() and dwarf_init() and dwarf_finish() 576*4d9fdb46SRobert Mustacchi which assume libelf and POSIX file access. 57707dc1947SRichard Lowe An object-file and library agnostic dwarf_object_init() and dwarf_object_finish() 57807dc1947SRichard Lowe which allow the coder to provide object access routines 57907dc1947SRichard Lowe abstracting away the elf interface. So there is no dependence in the 58007dc1947SRichard Lowe reader code on the object format and no dependence on libelf. 581*4d9fdb46SRobert Mustacchi See the code in dwarf_elf_access.c and dwarf_original_elf_init.c 58207dc1947SRichard Lowe to see an example of initializing the structures mentioned below. 58307dc1947SRichard Lowe 58407dc1947SRichard Lowe Projects using dwarf_elf_init() or dwarf_init() can ignore 58507dc1947SRichard Lowe the Dwarf_Obj_Access* structures entirely as all these details 58607dc1947SRichard Lowe are completed for you. 58707dc1947SRichard Lowe 588*4d9fdb46SRobert Mustacchi As of March 2017 additional 589*4d9fdb46SRobert Mustacchi functions dwarf_elf_init_b 590*4d9fdb46SRobert Mustacchi and dwarf_init_b 591*4d9fdb46SRobert Mustacchi and dwarf_object_init_b 592*4d9fdb46SRobert Mustacchi add a groupnumber argument so DWARF5 593*4d9fdb46SRobert Mustacchi split-dwarf sections can be accessed. 59407dc1947SRichard Lowe */ 59507dc1947SRichard Lowe 59607dc1947SRichard Lowe typedef struct Dwarf_Obj_Access_Interface_s Dwarf_Obj_Access_Interface; 59707dc1947SRichard Lowe typedef struct Dwarf_Obj_Access_Methods_s Dwarf_Obj_Access_Methods; 59807dc1947SRichard Lowe typedef struct Dwarf_Obj_Access_Section_s Dwarf_Obj_Access_Section; 59907dc1947SRichard Lowe 60007dc1947SRichard Lowe 601*4d9fdb46SRobert Mustacchi /* Used in the get_section interface function 602*4d9fdb46SRobert Mustacchi in Dwarf_Obj_Access_Section_s. Since libdwarf 603*4d9fdb46SRobert Mustacchi depends on standard DWARF section names an object 604*4d9fdb46SRobert Mustacchi format that has no such names (but has some 605*4d9fdb46SRobert Mustacchi method of setting up 'sections equivalents') 606*4d9fdb46SRobert Mustacchi must arrange to return standard DWARF section 607*4d9fdb46SRobert Mustacchi names in the 'name' field. libdwarf does 608*4d9fdb46SRobert Mustacchi not free the strings in 'name'. */ 60907dc1947SRichard Lowe struct Dwarf_Obj_Access_Section_s { 610*4d9fdb46SRobert Mustacchi /* addr is the virtual address of the first byte of 611*4d9fdb46SRobert Mustacchi the section data. Usually zero when the address 612*4d9fdb46SRobert Mustacchi makes no sense for a given section. */ 61307dc1947SRichard Lowe Dwarf_Addr addr; 614*4d9fdb46SRobert Mustacchi 615*4d9fdb46SRobert Mustacchi /* Section type. */ 616*4d9fdb46SRobert Mustacchi Dwarf_Unsigned type; 617*4d9fdb46SRobert Mustacchi 618*4d9fdb46SRobert Mustacchi /* Size in bytes of the section. */ 61907dc1947SRichard Lowe Dwarf_Unsigned size; 620*4d9fdb46SRobert Mustacchi 621*4d9fdb46SRobert Mustacchi /* Having an accurate section name makes debugging of libdwarf easier. 622*4d9fdb46SRobert Mustacchi and is essential to find the .debug_ sections. */ 62307dc1947SRichard Lowe const char* name; 624*4d9fdb46SRobert Mustacchi /* Set link to zero if it is meaningless. If non-zero 625*4d9fdb46SRobert Mustacchi it should be a link to a rela section or from symtab 626*4d9fdb46SRobert Mustacchi to strtab. In Elf it is sh_link. */ 62707dc1947SRichard Lowe Dwarf_Unsigned link; 628*4d9fdb46SRobert Mustacchi 629*4d9fdb46SRobert Mustacchi /* The section header index of the section to which the 630*4d9fdb46SRobert Mustacchi relocation applies. In Elf it is sh_info. */ 631*4d9fdb46SRobert Mustacchi Dwarf_Unsigned info; 632*4d9fdb46SRobert Mustacchi 633*4d9fdb46SRobert Mustacchi /* Elf sections that are tables have a non-zero entrysize so 634*4d9fdb46SRobert Mustacchi the count of entries can be calculated even without 635*4d9fdb46SRobert Mustacchi the right structure definition. If your object format 636*4d9fdb46SRobert Mustacchi does not have this data leave this zero. */ 637*4d9fdb46SRobert Mustacchi Dwarf_Unsigned entrysize; 63807dc1947SRichard Lowe }; 63907dc1947SRichard Lowe 640*4d9fdb46SRobert Mustacchi /* Returned by the get_endianness function in 641*4d9fdb46SRobert Mustacchi Dwarf_Obj_Access_Methods_s. */ 64207dc1947SRichard Lowe typedef enum { 64307dc1947SRichard Lowe DW_OBJECT_MSB, 64407dc1947SRichard Lowe DW_OBJECT_LSB 64507dc1947SRichard Lowe } Dwarf_Endianness; 64607dc1947SRichard Lowe 647*4d9fdb46SRobert Mustacchi /* The functions we need to access object data from libdwarf are declared here. 64807dc1947SRichard Lowe 649*4d9fdb46SRobert Mustacchi In these function pointer declarations 650*4d9fdb46SRobert Mustacchi 'void *obj' is intended to be a pointer (the object field in 651*4d9fdb46SRobert Mustacchi Dwarf_Obj_Access_Interface_s) 652*4d9fdb46SRobert Mustacchi that hides the library-specific and object-specific data that makes 653*4d9fdb46SRobert Mustacchi it possible to handle multiple object formats and multiple libraries. 654*4d9fdb46SRobert Mustacchi It's not required that one handles multiple such in a single libdwarf 655*4d9fdb46SRobert Mustacchi archive/shared-library (but not ruled out either). 656*4d9fdb46SRobert Mustacchi See dwarf_elf_object_access_internals_t and dwarf_elf_access.c 657*4d9fdb46SRobert Mustacchi for an example. 65807dc1947SRichard Lowe 65907dc1947SRichard Lowe */ 66007dc1947SRichard Lowe struct Dwarf_Obj_Access_Methods_s { 661*4d9fdb46SRobert Mustacchi /* 662*4d9fdb46SRobert Mustacchi get_section_info 663*4d9fdb46SRobert Mustacchi 664*4d9fdb46SRobert Mustacchi Get address, size, and name info about a section. 665*4d9fdb46SRobert Mustacchi 666*4d9fdb46SRobert Mustacchi Parameters 667*4d9fdb46SRobert Mustacchi section_index - Zero-based index. 668*4d9fdb46SRobert Mustacchi return_section - Pointer to a structure in which section info 669*4d9fdb46SRobert Mustacchi will be placed. Caller must provide a valid pointer to a 670*4d9fdb46SRobert Mustacchi structure area. The structure's contents will be overwritten 671*4d9fdb46SRobert Mustacchi by the call to get_section_info. 672*4d9fdb46SRobert Mustacchi error - A pointer to an integer in which an error code may be stored. 673*4d9fdb46SRobert Mustacchi 674*4d9fdb46SRobert Mustacchi Return 675*4d9fdb46SRobert Mustacchi DW_DLV_OK - Everything ok. 676*4d9fdb46SRobert Mustacchi DW_DLV_ERROR - Error occurred. Use 'error' to determine the 677*4d9fdb46SRobert Mustacchi libdwarf defined error. 678*4d9fdb46SRobert Mustacchi DW_DLV_NO_ENTRY - No such section. */ 679*4d9fdb46SRobert Mustacchi int (*get_section_info)(void* obj, Dwarf_Half section_index, 68007dc1947SRichard Lowe Dwarf_Obj_Access_Section* return_section, int* error); 681*4d9fdb46SRobert Mustacchi /* 682*4d9fdb46SRobert Mustacchi get_byte_order 683*4d9fdb46SRobert Mustacchi 684*4d9fdb46SRobert Mustacchi Get whether the object file represented by this interface is big-endian 685*4d9fdb46SRobert Mustacchi (DW_OBJECT_MSB) or little endian (DW_OBJECT_LSB). 686*4d9fdb46SRobert Mustacchi 687*4d9fdb46SRobert Mustacchi Parameters 688*4d9fdb46SRobert Mustacchi obj - Equivalent to 'this' in OO languages. 689*4d9fdb46SRobert Mustacchi 690*4d9fdb46SRobert Mustacchi Return 691*4d9fdb46SRobert Mustacchi Endianness of object. Cannot fail. */ 69207dc1947SRichard Lowe Dwarf_Endianness (*get_byte_order)(void* obj); 693*4d9fdb46SRobert Mustacchi /* 694*4d9fdb46SRobert Mustacchi get_length_size 695*4d9fdb46SRobert Mustacchi 696*4d9fdb46SRobert Mustacchi Get the size of a length field in the underlying object file. 697*4d9fdb46SRobert Mustacchi libdwarf currently supports * 4 and 8 byte sizes, but may 698*4d9fdb46SRobert Mustacchi support larger in the future. 699*4d9fdb46SRobert Mustacchi Perhaps the return type should be an enumeration? 700*4d9fdb46SRobert Mustacchi 701*4d9fdb46SRobert Mustacchi Parameters 702*4d9fdb46SRobert Mustacchi obj - Equivalent to 'this' in OO languages. 703*4d9fdb46SRobert Mustacchi 704*4d9fdb46SRobert Mustacchi Return 705*4d9fdb46SRobert Mustacchi Size of length. Cannot fail. */ 70607dc1947SRichard Lowe Dwarf_Small (*get_length_size)(void* obj); 707*4d9fdb46SRobert Mustacchi /* 708*4d9fdb46SRobert Mustacchi get_pointer_size 709*4d9fdb46SRobert Mustacchi 710*4d9fdb46SRobert Mustacchi Get the size of a pointer field in the underlying object file. 711*4d9fdb46SRobert Mustacchi libdwarf currently supports 4 and 8 byte sizes. 712*4d9fdb46SRobert Mustacchi Perhaps the return type should be an enumeration? 713*4d9fdb46SRobert Mustacchi 714*4d9fdb46SRobert Mustacchi Return 715*4d9fdb46SRobert Mustacchi Size of pointer. Cannot fail. */ 71607dc1947SRichard Lowe Dwarf_Small (*get_pointer_size)(void* obj); 717*4d9fdb46SRobert Mustacchi /* 718*4d9fdb46SRobert Mustacchi get_section_count 719*4d9fdb46SRobert Mustacchi 720*4d9fdb46SRobert Mustacchi Get the number of sections in the object file. 721*4d9fdb46SRobert Mustacchi 722*4d9fdb46SRobert Mustacchi Parameters 723*4d9fdb46SRobert Mustacchi 724*4d9fdb46SRobert Mustacchi Return 725*4d9fdb46SRobert Mustacchi Number of sections */ 72607dc1947SRichard Lowe Dwarf_Unsigned (*get_section_count)(void* obj); 727*4d9fdb46SRobert Mustacchi /* 728*4d9fdb46SRobert Mustacchi load_section 729*4d9fdb46SRobert Mustacchi 730*4d9fdb46SRobert Mustacchi Get a pointer to an array of bytes that represent the section. 731*4d9fdb46SRobert Mustacchi 732*4d9fdb46SRobert Mustacchi Parameters 733*4d9fdb46SRobert Mustacchi section_index - Zero-based index. 734*4d9fdb46SRobert Mustacchi return_data - The address of a pointer to which the section data block 735*4d9fdb46SRobert Mustacchi will be assigned. 736*4d9fdb46SRobert Mustacchi error - Pointer to an integer for returning libdwarf-defined 737*4d9fdb46SRobert Mustacchi error numbers. 738*4d9fdb46SRobert Mustacchi 739*4d9fdb46SRobert Mustacchi Return 740*4d9fdb46SRobert Mustacchi DW_DLV_OK - No error. 741*4d9fdb46SRobert Mustacchi DW_DLV_ERROR - Error. Use 'error' to indicate a libdwarf-defined 742*4d9fdb46SRobert Mustacchi error number. 743*4d9fdb46SRobert Mustacchi DW_DLV_NO_ENTRY - No such section. */ 744*4d9fdb46SRobert Mustacchi int (*load_section)(void* obj, Dwarf_Half section_index, 74507dc1947SRichard Lowe Dwarf_Small** return_data, int* error); 74607dc1947SRichard Lowe 747*4d9fdb46SRobert Mustacchi /** 748*4d9fdb46SRobert Mustacchi relocate_a_section 749*4d9fdb46SRobert Mustacchi If relocations are not supported leave this pointer NULL. 750*4d9fdb46SRobert Mustacchi 751*4d9fdb46SRobert Mustacchi Get a pointer to an array of bytes that represent the section. 752*4d9fdb46SRobert Mustacchi 753*4d9fdb46SRobert Mustacchi Parameters 754*4d9fdb46SRobert Mustacchi section_index - Zero-based index of the section to be relocated. 755*4d9fdb46SRobert Mustacchi error - Pointer to an integer for returning libdwarf-defined 756*4d9fdb46SRobert Mustacchi error numbers. 757*4d9fdb46SRobert Mustacchi 758*4d9fdb46SRobert Mustacchi Return 759*4d9fdb46SRobert Mustacchi DW_DLV_OK - No error. 760*4d9fdb46SRobert Mustacchi DW_DLV_ERROR - Error. Use 'error' to indicate a libdwarf-defined 761*4d9fdb46SRobert Mustacchi error number. 762*4d9fdb46SRobert Mustacchi DW_DLV_NO_ENTRY - No such section. */ 76307dc1947SRichard Lowe int (*relocate_a_section)(void* obj, Dwarf_Half section_index, 764*4d9fdb46SRobert Mustacchi Dwarf_Debug dbg, 765*4d9fdb46SRobert Mustacchi int* error); 76607dc1947SRichard Lowe 76707dc1947SRichard Lowe }; 76807dc1947SRichard Lowe 76907dc1947SRichard Lowe 77007dc1947SRichard Lowe 771*4d9fdb46SRobert Mustacchi /* These structures are allocated and deallocated by your code 772*4d9fdb46SRobert Mustacchi when you are using the libdwarf Object File Interface 773*4d9fdb46SRobert Mustacchi [dwarf_object_init and dwarf_object_finish)] directly. 774*4d9fdb46SRobert Mustacchi dwarf_object_finish) does not free 775*4d9fdb46SRobert Mustacchi struct Dwarf_Obj_Access_Interface_s or its content. 776*4d9fdb46SRobert Mustacchi (libdwarf does record a pointer to this struct: you must 777*4d9fdb46SRobert Mustacchi ensure that pointer remains valid for as long as 778*4d9fdb46SRobert Mustacchi a libdwarf instance is open (meaning 779*4d9fdb46SRobert Mustacchi after dwarf_init) and before dwarf_finish)). 78007dc1947SRichard Lowe 781*4d9fdb46SRobert Mustacchi If you are reading Elf objects and libelf use dwarf_init() 782*4d9fdb46SRobert Mustacchi or dwarf_elf_init() which take care of these details. 78307dc1947SRichard Lowe */ 78407dc1947SRichard Lowe struct Dwarf_Obj_Access_Interface_s { 785*4d9fdb46SRobert Mustacchi /* object is a void* as it hides the data the object access routines 786*4d9fdb46SRobert Mustacchi need (which varies by library in use and object format). 78707dc1947SRichard Lowe */ 78807dc1947SRichard Lowe void* object; 78907dc1947SRichard Lowe const Dwarf_Obj_Access_Methods * methods; 79007dc1947SRichard Lowe }; 791*4d9fdb46SRobert Mustacchi 79207dc1947SRichard Lowe /* End libdwarf Object File Interface */ 79307dc1947SRichard Lowe 794*4d9fdb46SRobert Mustacchi /* 7957c478bd9Sstevel@tonic-gate Dwarf_dealloc() alloc_type arguments. 7967c478bd9Sstevel@tonic-gate Argument points to: 7977c478bd9Sstevel@tonic-gate */ 79807dc1947SRichard Lowe #define DW_DLA_STRING 0x01 /* char* */ 79907dc1947SRichard Lowe #define DW_DLA_LOC 0x02 /* Dwarf_Loc */ 80007dc1947SRichard Lowe #define DW_DLA_LOCDESC 0x03 /* Dwarf_Locdesc */ 80107dc1947SRichard Lowe #define DW_DLA_ELLIST 0x04 /* Dwarf_Ellist (not used)*/ 80207dc1947SRichard Lowe #define DW_DLA_BOUNDS 0x05 /* Dwarf_Bounds (not used) */ 80307dc1947SRichard Lowe #define DW_DLA_BLOCK 0x06 /* Dwarf_Block */ 80407dc1947SRichard Lowe #define DW_DLA_DEBUG 0x07 /* Dwarf_Debug */ 80507dc1947SRichard Lowe #define DW_DLA_DIE 0x08 /* Dwarf_Die */ 80607dc1947SRichard Lowe #define DW_DLA_LINE 0x09 /* Dwarf_Line */ 80707dc1947SRichard Lowe #define DW_DLA_ATTR 0x0a /* Dwarf_Attribute */ 80807dc1947SRichard Lowe #define DW_DLA_TYPE 0x0b /* Dwarf_Type (not used) */ 80907dc1947SRichard Lowe #define DW_DLA_SUBSCR 0x0c /* Dwarf_Subscr (not used) */ 81007dc1947SRichard Lowe #define DW_DLA_GLOBAL 0x0d /* Dwarf_Global */ 81107dc1947SRichard Lowe #define DW_DLA_ERROR 0x0e /* Dwarf_Error */ 81207dc1947SRichard Lowe #define DW_DLA_LIST 0x0f /* a list */ 81307dc1947SRichard Lowe #define DW_DLA_LINEBUF 0x10 /* Dwarf_Line* (not used) */ 81407dc1947SRichard Lowe #define DW_DLA_ARANGE 0x11 /* Dwarf_Arange */ 815*4d9fdb46SRobert Mustacchi #define DW_DLA_ABBREV 0x12 /* Dwarf_Abbrev */ 816*4d9fdb46SRobert Mustacchi #define DW_DLA_FRAME_OP 0x13 /* Dwarf_Frame_Op */ 81707dc1947SRichard Lowe #define DW_DLA_CIE 0x14 /* Dwarf_Cie */ 81807dc1947SRichard Lowe #define DW_DLA_FDE 0x15 /* Dwarf_Fde */ 819*4d9fdb46SRobert Mustacchi #define DW_DLA_LOC_BLOCK 0x16 /* Dwarf_Loc */ 82007dc1947SRichard Lowe #define DW_DLA_FRAME_BLOCK 0x17 /* Dwarf_Frame Block (not used) */ 82107dc1947SRichard Lowe #define DW_DLA_FUNC 0x18 /* Dwarf_Func */ 82207dc1947SRichard Lowe #define DW_DLA_TYPENAME 0x19 /* Dwarf_Type */ 82307dc1947SRichard Lowe #define DW_DLA_VAR 0x1a /* Dwarf_Var */ 82407dc1947SRichard Lowe #define DW_DLA_WEAK 0x1b /* Dwarf_Weak */ 82507dc1947SRichard Lowe #define DW_DLA_ADDR 0x1c /* Dwarf_Addr sized entries */ 82607dc1947SRichard Lowe #define DW_DLA_RANGES 0x1d /* Dwarf_Ranges */ 827*4d9fdb46SRobert Mustacchi /* 0x1e (30) to 0x34 (52) reserved for internal to libdwarf types. */ 828*4d9fdb46SRobert Mustacchi #define DW_DLA_LOCLISTS_HEAD 0x35 /* .debug_loclists DW5 */ 829*4d9fdb46SRobert Mustacchi #define DW_DLA_RNGLISTS_HEAD 0x36 /* .debug_rnglists DW5 */ 830*4d9fdb46SRobert Mustacchi #define DW_DLA_GDBINDEX 0x37 /* Dwarf_Gdbindex */ 831*4d9fdb46SRobert Mustacchi #define DW_DLA_XU_INDEX 0x38 /* Dwarf_Xu_Index_Header */ 832*4d9fdb46SRobert Mustacchi #define DW_DLA_LOC_BLOCK_C 0x39 /* Dwarf_Loc_c*/ 833*4d9fdb46SRobert Mustacchi #define DW_DLA_LOCDESC_C 0x3a /* Dwarf_Locdesc_c */ 834*4d9fdb46SRobert Mustacchi #define DW_DLA_LOC_HEAD_C 0x3b /* Dwarf_Loc_Head_c */ 835*4d9fdb46SRobert Mustacchi #define DW_DLA_MACRO_CONTEXT 0x3c /* Dwarf_Macro_Context */ 836*4d9fdb46SRobert Mustacchi /* 0x3d (61) is for libdwarf internal use. */ 837*4d9fdb46SRobert Mustacchi #define DW_DLA_DSC_HEAD 0x3e /* Dwarf_Dsc_Head */ 838*4d9fdb46SRobert Mustacchi #define DW_DLA_DNAMES_HEAD 0x3f /* Dwarf_Dnames_Head */ 839*4d9fdb46SRobert Mustacchi #define DW_DLA_STR_OFFSETS 0x40 /* struct Dwarf_Str_Offsets_Table_s */ 8407c478bd9Sstevel@tonic-gate 8417c478bd9Sstevel@tonic-gate /* The augmenter string for CIE */ 8427c478bd9Sstevel@tonic-gate #define DW_CIE_AUGMENTER_STRING_V0 "z" 8437c478bd9Sstevel@tonic-gate 8447c478bd9Sstevel@tonic-gate /* dwarf_init() access arguments 8457c478bd9Sstevel@tonic-gate */ 8467c478bd9Sstevel@tonic-gate #define DW_DLC_READ 0 /* read only access */ 8477c478bd9Sstevel@tonic-gate #define DW_DLC_WRITE 1 /* write only access */ 8487c478bd9Sstevel@tonic-gate #define DW_DLC_RDWR 2 /* read/write access NOT SUPPORTED*/ 8497c478bd9Sstevel@tonic-gate 850*4d9fdb46SRobert Mustacchi /* dwarf_producer_init* access flag modifiers 851*4d9fdb46SRobert Mustacchi No longer depends on compile-time settings for 852*4d9fdb46SRobert Mustacchi how to produce 64bit offset. See DW_DLC_IRIX_OFFSET64. 853*4d9fdb46SRobert Mustacchi Historic versions. One of 854*4d9fdb46SRobert Mustacchi If DW_DLC_POINTER64 is not set DW_DLC_POINTER32 is assumed. 855*4d9fdb46SRobert Mustacchi If DW_DLC_OFFSET64 or DW_DLC_IRIX_OFFSET64 is not 856*4d9fdb46SRobert Mustacchi set 32bit offset DWARF is assumed. 857*4d9fdb46SRobert Mustacchi Non-MIPS Non IA64 should use DW_DLC_SYMBOLIC_RELOCATIONS 858*4d9fdb46SRobert Mustacchi and handle the relocation creation for the target 859*4d9fdb46SRobert Mustacchi itself using the symbolic relocations to do so, those 860*4d9fdb46SRobert Mustacchi use the Dwarf_Rel_Type enum relocation indicators. 861*4d9fdb46SRobert Mustacchi 862*4d9fdb46SRobert Mustacchi */ 863*4d9fdb46SRobert Mustacchi /* The first three are traditional dwarf producer names. 864*4d9fdb46SRobert Mustacchi These names still work. 865*4d9fdb46SRobert Mustacchi Newer names below. 8667c478bd9Sstevel@tonic-gate */ 867*4d9fdb46SRobert Mustacchi /* 64-bit address-size target */ 868*4d9fdb46SRobert Mustacchi #define DW_DLC_SIZE_64 0x40000000 869*4d9fdb46SRobert Mustacchi 870*4d9fdb46SRobert Mustacchi /* 32-bit address-size target */ 871*4d9fdb46SRobert Mustacchi #define DW_DLC_SIZE_32 0x20000000 872*4d9fdb46SRobert Mustacchi 873*4d9fdb46SRobert Mustacchi /* 64-bit offset-size DWARF offsets (else 32bit) */ 874*4d9fdb46SRobert Mustacchi #define DW_DLC_OFFSET_SIZE_64 0x10000000 875*4d9fdb46SRobert Mustacchi 876*4d9fdb46SRobert Mustacchi /* 32-bit offset-size ELF object (ELFCLASS32) */ 877*4d9fdb46SRobert Mustacchi #define DW_DLC_ELF_OFFSET_SIZE_32 0x00400000 878*4d9fdb46SRobert Mustacchi 879*4d9fdb46SRobert Mustacchi /* 64-bit offset-size ELF object (ELFCLASS64) */ 880*4d9fdb46SRobert Mustacchi #define DW_DLC_ELF_OFFSET_SIZE_64 0x00020000 8817c478bd9Sstevel@tonic-gate 882*4d9fdb46SRobert Mustacchi /* dwarf_producer_init* access flag modifiers 883*4d9fdb46SRobert Mustacchi Some new April 2014. 884*4d9fdb46SRobert Mustacchi If DW_DLC_STREAM_RELOCATIONS is set the 885*4d9fdb46SRobert Mustacchi DW_DLC_ISA_* flags are ignored. See the Dwarf_Rel_Type enum. 8867c478bd9Sstevel@tonic-gate */ 88707dc1947SRichard Lowe 888*4d9fdb46SRobert Mustacchi /* Old style Elf binary relocation (.rel) records. The default. */ 889*4d9fdb46SRobert Mustacchi #define DW_DLC_STREAM_RELOCATIONS 0x02000000 890*4d9fdb46SRobert Mustacchi 891*4d9fdb46SRobert Mustacchi /* use 32-bit sec offsets */ 892*4d9fdb46SRobert Mustacchi #define DW_DLC_OFFSET32 0x00010000 893*4d9fdb46SRobert Mustacchi 894*4d9fdb46SRobert Mustacchi /* The following 3 are new sensible names. 895*4d9fdb46SRobert Mustacchi Old names above with same values. */ 896*4d9fdb46SRobert Mustacchi /* use 64-bit sec offsets in ELF */ 897*4d9fdb46SRobert Mustacchi #define DW_DLC_OFFSET64 0x10000000 898*4d9fdb46SRobert Mustacchi 899*4d9fdb46SRobert Mustacchi /* use 4 for address_size */ 900*4d9fdb46SRobert Mustacchi #define DW_DLC_POINTER32 0x20000000 901*4d9fdb46SRobert Mustacchi 902*4d9fdb46SRobert Mustacchi /* use 8 for address_size */ 903*4d9fdb46SRobert Mustacchi #define DW_DLC_POINTER64 0x40000000 904*4d9fdb46SRobert Mustacchi 905*4d9fdb46SRobert Mustacchi /* Special for IRIX only */ 906*4d9fdb46SRobert Mustacchi /* use Elf 64bit offset headers and non-std IRIX 64bitoffset headers */ 907*4d9fdb46SRobert Mustacchi #define DW_DLC_IRIX_OFFSET64 0x00200000 908*4d9fdb46SRobert Mustacchi 909*4d9fdb46SRobert Mustacchi /* Usable with assembly output because it is up to the producer to 910*4d9fdb46SRobert Mustacchi deal with locations in whatever manner the calling producer 911*4d9fdb46SRobert Mustacchi code wishes. For example, when the libdwarf caller wishes 912*4d9fdb46SRobert Mustacchi to produce relocations differently than the binary 913*4d9fdb46SRobert Mustacchi relocation bits that libdwarf Stream Relocations generate. 914*4d9fdb46SRobert Mustacchi */ 915*4d9fdb46SRobert Mustacchi #define DW_DLC_SYMBOLIC_RELOCATIONS 0x04000000 916*4d9fdb46SRobert Mustacchi 91707dc1947SRichard Lowe 91807dc1947SRichard Lowe #define DW_DLC_TARGET_BIGENDIAN 0x08000000 /* Big endian target */ 91907dc1947SRichard Lowe #define DW_DLC_TARGET_LITTLEENDIAN 0x00100000 /* Little endian target */ 92007dc1947SRichard Lowe 9217c478bd9Sstevel@tonic-gate 922*4d9fdb46SRobert Mustacchi /* dwarf_pcline function, slide arguments 9237c478bd9Sstevel@tonic-gate */ 9247c478bd9Sstevel@tonic-gate #define DW_DLS_BACKWARD -1 /* slide backward to find line */ 925*4d9fdb46SRobert Mustacchi #define DW_DLS_NOSLIDE 0 /* match exactly without sliding */ 9267c478bd9Sstevel@tonic-gate #define DW_DLS_FORWARD 1 /* slide forward to find line */ 9277c478bd9Sstevel@tonic-gate 9287c478bd9Sstevel@tonic-gate /* libdwarf error numbers 9297c478bd9Sstevel@tonic-gate */ 930*4d9fdb46SRobert Mustacchi #define DW_DLE_NE 0 /* no error */ 9317c478bd9Sstevel@tonic-gate #define DW_DLE_VMM 1 /* dwarf format/library version mismatch */ 9327c478bd9Sstevel@tonic-gate #define DW_DLE_MAP 2 /* memory map failure */ 9337c478bd9Sstevel@tonic-gate #define DW_DLE_LEE 3 /* libelf error */ 9347c478bd9Sstevel@tonic-gate #define DW_DLE_NDS 4 /* no debug section */ 9357c478bd9Sstevel@tonic-gate #define DW_DLE_NLS 5 /* no line section */ 9367c478bd9Sstevel@tonic-gate #define DW_DLE_ID 6 /* invalid descriptor for query */ 9377c478bd9Sstevel@tonic-gate #define DW_DLE_IOF 7 /* I/O failure */ 9387c478bd9Sstevel@tonic-gate #define DW_DLE_MAF 8 /* memory allocation failure */ 939*4d9fdb46SRobert Mustacchi #define DW_DLE_IA 9 /* invalid argument */ 9407c478bd9Sstevel@tonic-gate #define DW_DLE_MDE 10 /* mangled debugging entry */ 9417c478bd9Sstevel@tonic-gate #define DW_DLE_MLE 11 /* mangled line number entry */ 9427c478bd9Sstevel@tonic-gate #define DW_DLE_FNO 12 /* file not open */ 9437c478bd9Sstevel@tonic-gate #define DW_DLE_FNR 13 /* file not a regular file */ 9447c478bd9Sstevel@tonic-gate #define DW_DLE_FWA 14 /* file open with wrong access */ 9457c478bd9Sstevel@tonic-gate #define DW_DLE_NOB 15 /* not an object file */ 9467c478bd9Sstevel@tonic-gate #define DW_DLE_MOF 16 /* mangled object file header */ 9477c478bd9Sstevel@tonic-gate #define DW_DLE_EOLL 17 /* end of location list entries */ 9487c478bd9Sstevel@tonic-gate #define DW_DLE_NOLL 18 /* no location list section */ 9497c478bd9Sstevel@tonic-gate #define DW_DLE_BADOFF 19 /* Invalid offset */ 9507c478bd9Sstevel@tonic-gate #define DW_DLE_EOS 20 /* end of section */ 9517c478bd9Sstevel@tonic-gate #define DW_DLE_ATRUNC 21 /* abbreviations section appears truncated*/ 9527c478bd9Sstevel@tonic-gate #define DW_DLE_BADBITC 22 /* Address size passed to dwarf bad*/ 95307dc1947SRichard Lowe /* It is not an allowed size (64 or 32) */ 9547c478bd9Sstevel@tonic-gate /* Error codes defined by the current Libdwarf Implementation. */ 9557c478bd9Sstevel@tonic-gate #define DW_DLE_DBG_ALLOC 23 9567c478bd9Sstevel@tonic-gate #define DW_DLE_FSTAT_ERROR 24 9577c478bd9Sstevel@tonic-gate #define DW_DLE_FSTAT_MODE_ERROR 25 9587c478bd9Sstevel@tonic-gate #define DW_DLE_INIT_ACCESS_WRONG 26 9597c478bd9Sstevel@tonic-gate #define DW_DLE_ELF_BEGIN_ERROR 27 9607c478bd9Sstevel@tonic-gate #define DW_DLE_ELF_GETEHDR_ERROR 28 9617c478bd9Sstevel@tonic-gate #define DW_DLE_ELF_GETSHDR_ERROR 29 9627c478bd9Sstevel@tonic-gate #define DW_DLE_ELF_STRPTR_ERROR 30 9637c478bd9Sstevel@tonic-gate #define DW_DLE_DEBUG_INFO_DUPLICATE 31 9647c478bd9Sstevel@tonic-gate #define DW_DLE_DEBUG_INFO_NULL 32 9657c478bd9Sstevel@tonic-gate #define DW_DLE_DEBUG_ABBREV_DUPLICATE 33 9667c478bd9Sstevel@tonic-gate #define DW_DLE_DEBUG_ABBREV_NULL 34 9677c478bd9Sstevel@tonic-gate #define DW_DLE_DEBUG_ARANGES_DUPLICATE 35 9687c478bd9Sstevel@tonic-gate #define DW_DLE_DEBUG_ARANGES_NULL 36 9697c478bd9Sstevel@tonic-gate #define DW_DLE_DEBUG_LINE_DUPLICATE 37 9707c478bd9Sstevel@tonic-gate #define DW_DLE_DEBUG_LINE_NULL 38 9717c478bd9Sstevel@tonic-gate #define DW_DLE_DEBUG_LOC_DUPLICATE 39 9727c478bd9Sstevel@tonic-gate #define DW_DLE_DEBUG_LOC_NULL 40 9737c478bd9Sstevel@tonic-gate #define DW_DLE_DEBUG_MACINFO_DUPLICATE 41 9747c478bd9Sstevel@tonic-gate #define DW_DLE_DEBUG_MACINFO_NULL 42 9757c478bd9Sstevel@tonic-gate #define DW_DLE_DEBUG_PUBNAMES_DUPLICATE 43 9767c478bd9Sstevel@tonic-gate #define DW_DLE_DEBUG_PUBNAMES_NULL 44 9777c478bd9Sstevel@tonic-gate #define DW_DLE_DEBUG_STR_DUPLICATE 45 9787c478bd9Sstevel@tonic-gate #define DW_DLE_DEBUG_STR_NULL 46 9797c478bd9Sstevel@tonic-gate #define DW_DLE_CU_LENGTH_ERROR 47 9807c478bd9Sstevel@tonic-gate #define DW_DLE_VERSION_STAMP_ERROR 48 9817c478bd9Sstevel@tonic-gate #define DW_DLE_ABBREV_OFFSET_ERROR 49 9827c478bd9Sstevel@tonic-gate #define DW_DLE_ADDRESS_SIZE_ERROR 50 9837c478bd9Sstevel@tonic-gate #define DW_DLE_DEBUG_INFO_PTR_NULL 51 9847c478bd9Sstevel@tonic-gate #define DW_DLE_DIE_NULL 52 9857c478bd9Sstevel@tonic-gate #define DW_DLE_STRING_OFFSET_BAD 53 9867c478bd9Sstevel@tonic-gate #define DW_DLE_DEBUG_LINE_LENGTH_BAD 54 9877c478bd9Sstevel@tonic-gate #define DW_DLE_LINE_PROLOG_LENGTH_BAD 55 9887c478bd9Sstevel@tonic-gate #define DW_DLE_LINE_NUM_OPERANDS_BAD 56 98907dc1947SRichard Lowe #define DW_DLE_LINE_SET_ADDR_ERROR 57 /* No longer used. */ 9907c478bd9Sstevel@tonic-gate #define DW_DLE_LINE_EXT_OPCODE_BAD 58 9917c478bd9Sstevel@tonic-gate #define DW_DLE_DWARF_LINE_NULL 59 9927c478bd9Sstevel@tonic-gate #define DW_DLE_INCL_DIR_NUM_BAD 60 9937c478bd9Sstevel@tonic-gate #define DW_DLE_LINE_FILE_NUM_BAD 61 9947c478bd9Sstevel@tonic-gate #define DW_DLE_ALLOC_FAIL 62 99507dc1947SRichard Lowe #define DW_DLE_NO_CALLBACK_FUNC 63 99607dc1947SRichard Lowe #define DW_DLE_SECT_ALLOC 64 99707dc1947SRichard Lowe #define DW_DLE_FILE_ENTRY_ALLOC 65 99807dc1947SRichard Lowe #define DW_DLE_LINE_ALLOC 66 99907dc1947SRichard Lowe #define DW_DLE_FPGM_ALLOC 67 100007dc1947SRichard Lowe #define DW_DLE_INCDIR_ALLOC 68 100107dc1947SRichard Lowe #define DW_DLE_STRING_ALLOC 69 100207dc1947SRichard Lowe #define DW_DLE_CHUNK_ALLOC 70 100307dc1947SRichard Lowe #define DW_DLE_BYTEOFF_ERR 71 100407dc1947SRichard Lowe #define DW_DLE_CIE_ALLOC 72 100507dc1947SRichard Lowe #define DW_DLE_FDE_ALLOC 73 100607dc1947SRichard Lowe #define DW_DLE_REGNO_OVFL 74 100707dc1947SRichard Lowe #define DW_DLE_CIE_OFFS_ALLOC 75 100807dc1947SRichard Lowe #define DW_DLE_WRONG_ADDRESS 76 100907dc1947SRichard Lowe #define DW_DLE_EXTRA_NEIGHBORS 77 1010*4d9fdb46SRobert Mustacchi #define DW_DLE_WRONG_TAG 78 101107dc1947SRichard Lowe #define DW_DLE_DIE_ALLOC 79 101207dc1947SRichard Lowe #define DW_DLE_PARENT_EXISTS 80 10137c478bd9Sstevel@tonic-gate #define DW_DLE_DBG_NULL 81 101407dc1947SRichard Lowe #define DW_DLE_DEBUGLINE_ERROR 82 101507dc1947SRichard Lowe #define DW_DLE_DEBUGFRAME_ERROR 83 101607dc1947SRichard Lowe #define DW_DLE_DEBUGINFO_ERROR 84 101707dc1947SRichard Lowe #define DW_DLE_ATTR_ALLOC 85 101807dc1947SRichard Lowe #define DW_DLE_ABBREV_ALLOC 86 101907dc1947SRichard Lowe #define DW_DLE_OFFSET_UFLW 87 102007dc1947SRichard Lowe #define DW_DLE_ELF_SECT_ERR 88 102107dc1947SRichard Lowe #define DW_DLE_DEBUG_FRAME_LENGTH_BAD 89 102207dc1947SRichard Lowe #define DW_DLE_FRAME_VERSION_BAD 90 102307dc1947SRichard Lowe #define DW_DLE_CIE_RET_ADDR_REG_ERROR 91 102407dc1947SRichard Lowe #define DW_DLE_FDE_NULL 92 102507dc1947SRichard Lowe #define DW_DLE_FDE_DBG_NULL 93 102607dc1947SRichard Lowe #define DW_DLE_CIE_NULL 94 102707dc1947SRichard Lowe #define DW_DLE_CIE_DBG_NULL 95 102807dc1947SRichard Lowe #define DW_DLE_FRAME_TABLE_COL_BAD 96 102907dc1947SRichard Lowe #define DW_DLE_PC_NOT_IN_FDE_RANGE 97 103007dc1947SRichard Lowe #define DW_DLE_CIE_INSTR_EXEC_ERROR 98 103107dc1947SRichard Lowe #define DW_DLE_FRAME_INSTR_EXEC_ERROR 99 103207dc1947SRichard Lowe #define DW_DLE_FDE_PTR_NULL 100 103307dc1947SRichard Lowe #define DW_DLE_RET_OP_LIST_NULL 101 103407dc1947SRichard Lowe #define DW_DLE_LINE_CONTEXT_NULL 102 103507dc1947SRichard Lowe #define DW_DLE_DBG_NO_CU_CONTEXT 103 103607dc1947SRichard Lowe #define DW_DLE_DIE_NO_CU_CONTEXT 104 103707dc1947SRichard Lowe #define DW_DLE_FIRST_DIE_NOT_CU 105 103807dc1947SRichard Lowe #define DW_DLE_NEXT_DIE_PTR_NULL 106 103907dc1947SRichard Lowe #define DW_DLE_DEBUG_FRAME_DUPLICATE 107 104007dc1947SRichard Lowe #define DW_DLE_DEBUG_FRAME_NULL 108 104107dc1947SRichard Lowe #define DW_DLE_ABBREV_DECODE_ERROR 109 104207dc1947SRichard Lowe #define DW_DLE_DWARF_ABBREV_NULL 110 104307dc1947SRichard Lowe #define DW_DLE_ATTR_NULL 111 104407dc1947SRichard Lowe #define DW_DLE_DIE_BAD 112 104507dc1947SRichard Lowe #define DW_DLE_DIE_ABBREV_BAD 113 104607dc1947SRichard Lowe #define DW_DLE_ATTR_FORM_BAD 114 104707dc1947SRichard Lowe #define DW_DLE_ATTR_NO_CU_CONTEXT 115 104807dc1947SRichard Lowe #define DW_DLE_ATTR_FORM_SIZE_BAD 116 104907dc1947SRichard Lowe #define DW_DLE_ATTR_DBG_NULL 117 105007dc1947SRichard Lowe #define DW_DLE_BAD_REF_FORM 118 105107dc1947SRichard Lowe #define DW_DLE_ATTR_FORM_OFFSET_BAD 119 105207dc1947SRichard Lowe #define DW_DLE_LINE_OFFSET_BAD 120 105307dc1947SRichard Lowe #define DW_DLE_DEBUG_STR_OFFSET_BAD 121 105407dc1947SRichard Lowe #define DW_DLE_STRING_PTR_NULL 122 105507dc1947SRichard Lowe #define DW_DLE_PUBNAMES_VERSION_ERROR 123 105607dc1947SRichard Lowe #define DW_DLE_PUBNAMES_LENGTH_BAD 124 105707dc1947SRichard Lowe #define DW_DLE_GLOBAL_NULL 125 105807dc1947SRichard Lowe #define DW_DLE_GLOBAL_CONTEXT_NULL 126 105907dc1947SRichard Lowe #define DW_DLE_DIR_INDEX_BAD 127 106007dc1947SRichard Lowe #define DW_DLE_LOC_EXPR_BAD 128 106107dc1947SRichard Lowe #define DW_DLE_DIE_LOC_EXPR_BAD 129 106207dc1947SRichard Lowe #define DW_DLE_ADDR_ALLOC 130 106307dc1947SRichard Lowe #define DW_DLE_OFFSET_BAD 131 106407dc1947SRichard Lowe #define DW_DLE_MAKE_CU_CONTEXT_FAIL 132 106507dc1947SRichard Lowe #define DW_DLE_REL_ALLOC 133 106607dc1947SRichard Lowe #define DW_DLE_ARANGE_OFFSET_BAD 134 106707dc1947SRichard Lowe #define DW_DLE_SEGMENT_SIZE_BAD 135 106807dc1947SRichard Lowe #define DW_DLE_ARANGE_LENGTH_BAD 136 106907dc1947SRichard Lowe #define DW_DLE_ARANGE_DECODE_ERROR 137 107007dc1947SRichard Lowe #define DW_DLE_ARANGES_NULL 138 107107dc1947SRichard Lowe #define DW_DLE_ARANGE_NULL 139 107207dc1947SRichard Lowe #define DW_DLE_NO_FILE_NAME 140 107307dc1947SRichard Lowe #define DW_DLE_NO_COMP_DIR 141 107407dc1947SRichard Lowe #define DW_DLE_CU_ADDRESS_SIZE_BAD 142 107507dc1947SRichard Lowe #define DW_DLE_INPUT_ATTR_BAD 143 107607dc1947SRichard Lowe #define DW_DLE_EXPR_NULL 144 107707dc1947SRichard Lowe #define DW_DLE_BAD_EXPR_OPCODE 145 107807dc1947SRichard Lowe #define DW_DLE_EXPR_LENGTH_BAD 146 107907dc1947SRichard Lowe #define DW_DLE_MULTIPLE_RELOC_IN_EXPR 147 108007dc1947SRichard Lowe #define DW_DLE_ELF_GETIDENT_ERROR 148 108107dc1947SRichard Lowe #define DW_DLE_NO_AT_MIPS_FDE 149 108207dc1947SRichard Lowe #define DW_DLE_NO_CIE_FOR_FDE 150 108307dc1947SRichard Lowe #define DW_DLE_DIE_ABBREV_LIST_NULL 151 108407dc1947SRichard Lowe #define DW_DLE_DEBUG_FUNCNAMES_DUPLICATE 152 108507dc1947SRichard Lowe #define DW_DLE_DEBUG_FUNCNAMES_NULL 153 108607dc1947SRichard Lowe #define DW_DLE_DEBUG_FUNCNAMES_VERSION_ERROR 154 108707dc1947SRichard Lowe #define DW_DLE_DEBUG_FUNCNAMES_LENGTH_BAD 155 108807dc1947SRichard Lowe #define DW_DLE_FUNC_NULL 156 108907dc1947SRichard Lowe #define DW_DLE_FUNC_CONTEXT_NULL 157 109007dc1947SRichard Lowe #define DW_DLE_DEBUG_TYPENAMES_DUPLICATE 158 109107dc1947SRichard Lowe #define DW_DLE_DEBUG_TYPENAMES_NULL 159 109207dc1947SRichard Lowe #define DW_DLE_DEBUG_TYPENAMES_VERSION_ERROR 160 109307dc1947SRichard Lowe #define DW_DLE_DEBUG_TYPENAMES_LENGTH_BAD 161 109407dc1947SRichard Lowe #define DW_DLE_TYPE_NULL 162 109507dc1947SRichard Lowe #define DW_DLE_TYPE_CONTEXT_NULL 163 109607dc1947SRichard Lowe #define DW_DLE_DEBUG_VARNAMES_DUPLICATE 164 109707dc1947SRichard Lowe #define DW_DLE_DEBUG_VARNAMES_NULL 165 109807dc1947SRichard Lowe #define DW_DLE_DEBUG_VARNAMES_VERSION_ERROR 166 109907dc1947SRichard Lowe #define DW_DLE_DEBUG_VARNAMES_LENGTH_BAD 167 110007dc1947SRichard Lowe #define DW_DLE_VAR_NULL 168 110107dc1947SRichard Lowe #define DW_DLE_VAR_CONTEXT_NULL 169 110207dc1947SRichard Lowe #define DW_DLE_DEBUG_WEAKNAMES_DUPLICATE 170 110307dc1947SRichard Lowe #define DW_DLE_DEBUG_WEAKNAMES_NULL 171 110407dc1947SRichard Lowe #define DW_DLE_DEBUG_WEAKNAMES_VERSION_ERROR 172 110507dc1947SRichard Lowe #define DW_DLE_DEBUG_WEAKNAMES_LENGTH_BAD 173 110607dc1947SRichard Lowe #define DW_DLE_WEAK_NULL 174 110707dc1947SRichard Lowe #define DW_DLE_WEAK_CONTEXT_NULL 175 110807dc1947SRichard Lowe #define DW_DLE_LOCDESC_COUNT_WRONG 176 110907dc1947SRichard Lowe #define DW_DLE_MACINFO_STRING_NULL 177 111007dc1947SRichard Lowe #define DW_DLE_MACINFO_STRING_EMPTY 178 111107dc1947SRichard Lowe #define DW_DLE_MACINFO_INTERNAL_ERROR_SPACE 179 111207dc1947SRichard Lowe #define DW_DLE_MACINFO_MALLOC_FAIL 180 111307dc1947SRichard Lowe #define DW_DLE_DEBUGMACINFO_ERROR 181 111407dc1947SRichard Lowe #define DW_DLE_DEBUG_MACRO_LENGTH_BAD 182 111507dc1947SRichard Lowe #define DW_DLE_DEBUG_MACRO_MAX_BAD 183 111607dc1947SRichard Lowe #define DW_DLE_DEBUG_MACRO_INTERNAL_ERR 184 111707dc1947SRichard Lowe #define DW_DLE_DEBUG_MACRO_MALLOC_SPACE 185 111807dc1947SRichard Lowe #define DW_DLE_DEBUG_MACRO_INCONSISTENT 186 111907dc1947SRichard Lowe #define DW_DLE_DF_NO_CIE_AUGMENTATION 187 1120*4d9fdb46SRobert Mustacchi #define DW_DLE_DF_REG_NUM_TOO_HIGH 188 1121*4d9fdb46SRobert Mustacchi #define DW_DLE_DF_MAKE_INSTR_NO_INIT 189 112207dc1947SRichard Lowe #define DW_DLE_DF_NEW_LOC_LESS_OLD_LOC 190 112307dc1947SRichard Lowe #define DW_DLE_DF_POP_EMPTY_STACK 191 112407dc1947SRichard Lowe #define DW_DLE_DF_ALLOC_FAIL 192 112507dc1947SRichard Lowe #define DW_DLE_DF_FRAME_DECODING_ERROR 193 112607dc1947SRichard Lowe #define DW_DLE_DEBUG_LOC_SECTION_SHORT 194 112707dc1947SRichard Lowe #define DW_DLE_FRAME_AUGMENTATION_UNKNOWN 195 112807dc1947SRichard Lowe #define DW_DLE_PUBTYPE_CONTEXT 196 /* Unused. */ 112907dc1947SRichard Lowe #define DW_DLE_DEBUG_PUBTYPES_LENGTH_BAD 197 113007dc1947SRichard Lowe #define DW_DLE_DEBUG_PUBTYPES_VERSION_ERROR 198 113107dc1947SRichard Lowe #define DW_DLE_DEBUG_PUBTYPES_DUPLICATE 199 113207dc1947SRichard Lowe #define DW_DLE_FRAME_CIE_DECODE_ERROR 200 113307dc1947SRichard Lowe #define DW_DLE_FRAME_REGISTER_UNREPRESENTABLE 201 113407dc1947SRichard Lowe #define DW_DLE_FRAME_REGISTER_COUNT_MISMATCH 202 113507dc1947SRichard Lowe #define DW_DLE_LINK_LOOP 203 113607dc1947SRichard Lowe #define DW_DLE_STRP_OFFSET_BAD 204 113707dc1947SRichard Lowe #define DW_DLE_DEBUG_RANGES_DUPLICATE 205 113807dc1947SRichard Lowe #define DW_DLE_DEBUG_RANGES_OFFSET_BAD 206 113907dc1947SRichard Lowe #define DW_DLE_DEBUG_RANGES_MISSING_END 207 114007dc1947SRichard Lowe #define DW_DLE_DEBUG_RANGES_OUT_OF_MEM 208 114107dc1947SRichard Lowe #define DW_DLE_DEBUG_SYMTAB_ERR 209 114207dc1947SRichard Lowe #define DW_DLE_DEBUG_STRTAB_ERR 210 114307dc1947SRichard Lowe #define DW_DLE_RELOC_MISMATCH_INDEX 211 114407dc1947SRichard Lowe #define DW_DLE_RELOC_MISMATCH_RELOC_INDEX 212 114507dc1947SRichard Lowe #define DW_DLE_RELOC_MISMATCH_STRTAB_INDEX 213 114607dc1947SRichard Lowe #define DW_DLE_RELOC_SECTION_MISMATCH 214 114707dc1947SRichard Lowe #define DW_DLE_RELOC_SECTION_MISSING_INDEX 215 114807dc1947SRichard Lowe #define DW_DLE_RELOC_SECTION_LENGTH_ODD 216 114907dc1947SRichard Lowe #define DW_DLE_RELOC_SECTION_PTR_NULL 217 115007dc1947SRichard Lowe #define DW_DLE_RELOC_SECTION_MALLOC_FAIL 218 115107dc1947SRichard Lowe #define DW_DLE_NO_ELF64_SUPPORT 219 115207dc1947SRichard Lowe #define DW_DLE_MISSING_ELF64_SUPPORT 220 115307dc1947SRichard Lowe #define DW_DLE_ORPHAN_FDE 221 115407dc1947SRichard Lowe #define DW_DLE_DUPLICATE_INST_BLOCK 222 115507dc1947SRichard Lowe #define DW_DLE_BAD_REF_SIG8_FORM 223 115607dc1947SRichard Lowe #define DW_DLE_ATTR_EXPRLOC_FORM_BAD 224 115707dc1947SRichard Lowe #define DW_DLE_FORM_SEC_OFFSET_LENGTH_BAD 225 115807dc1947SRichard Lowe #define DW_DLE_NOT_REF_FORM 226 115907dc1947SRichard Lowe #define DW_DLE_DEBUG_FRAME_LENGTH_NOT_MULTIPLE 227 1160*4d9fdb46SRobert Mustacchi #define DW_DLE_REF_SIG8_NOT_HANDLED 228 1161*4d9fdb46SRobert Mustacchi #define DW_DLE_DEBUG_FRAME_POSSIBLE_ADDRESS_BOTCH 229 1162*4d9fdb46SRobert Mustacchi #define DW_DLE_LOC_BAD_TERMINATION 230 1163*4d9fdb46SRobert Mustacchi #define DW_DLE_SYMTAB_SECTION_LENGTH_ODD 231 1164*4d9fdb46SRobert Mustacchi #define DW_DLE_RELOC_SECTION_SYMBOL_INDEX_BAD 232 1165*4d9fdb46SRobert Mustacchi #define DW_DLE_RELOC_SECTION_RELOC_TARGET_SIZE_UNKNOWN 233 1166*4d9fdb46SRobert Mustacchi #define DW_DLE_SYMTAB_SECTION_ENTRYSIZE_ZERO 234 1167*4d9fdb46SRobert Mustacchi #define DW_DLE_LINE_NUMBER_HEADER_ERROR 235 1168*4d9fdb46SRobert Mustacchi #define DW_DLE_DEBUG_TYPES_NULL 236 1169*4d9fdb46SRobert Mustacchi #define DW_DLE_DEBUG_TYPES_DUPLICATE 237 1170*4d9fdb46SRobert Mustacchi #define DW_DLE_DEBUG_TYPES_ONLY_DWARF4 238 1171*4d9fdb46SRobert Mustacchi #define DW_DLE_DEBUG_TYPEOFFSET_BAD 239 1172*4d9fdb46SRobert Mustacchi #define DW_DLE_GNU_OPCODE_ERROR 240 1173*4d9fdb46SRobert Mustacchi #define DW_DLE_DEBUGPUBTYPES_ERROR 241 1174*4d9fdb46SRobert Mustacchi #define DW_DLE_AT_FIXUP_NULL 242 1175*4d9fdb46SRobert Mustacchi #define DW_DLE_AT_FIXUP_DUP 243 1176*4d9fdb46SRobert Mustacchi #define DW_DLE_BAD_ABINAME 244 1177*4d9fdb46SRobert Mustacchi #define DW_DLE_TOO_MANY_DEBUG 245 1178*4d9fdb46SRobert Mustacchi #define DW_DLE_DEBUG_STR_OFFSETS_DUPLICATE 246 1179*4d9fdb46SRobert Mustacchi #define DW_DLE_SECTION_DUPLICATION 247 1180*4d9fdb46SRobert Mustacchi #define DW_DLE_SECTION_ERROR 248 1181*4d9fdb46SRobert Mustacchi #define DW_DLE_DEBUG_ADDR_DUPLICATE 249 1182*4d9fdb46SRobert Mustacchi #define DW_DLE_DEBUG_CU_UNAVAILABLE_FOR_FORM 250 1183*4d9fdb46SRobert Mustacchi #define DW_DLE_DEBUG_FORM_HANDLING_INCOMPLETE 251 1184*4d9fdb46SRobert Mustacchi #define DW_DLE_NEXT_DIE_PAST_END 252 1185*4d9fdb46SRobert Mustacchi #define DW_DLE_NEXT_DIE_WRONG_FORM 253 1186*4d9fdb46SRobert Mustacchi #define DW_DLE_NEXT_DIE_NO_ABBREV_LIST 254 1187*4d9fdb46SRobert Mustacchi #define DW_DLE_NESTED_FORM_INDIRECT_ERROR 255 1188*4d9fdb46SRobert Mustacchi #define DW_DLE_CU_DIE_NO_ABBREV_LIST 256 1189*4d9fdb46SRobert Mustacchi #define DW_DLE_MISSING_NEEDED_DEBUG_ADDR_SECTION 257 1190*4d9fdb46SRobert Mustacchi #define DW_DLE_ATTR_FORM_NOT_ADDR_INDEX 258 1191*4d9fdb46SRobert Mustacchi #define DW_DLE_ATTR_FORM_NOT_STR_INDEX 259 1192*4d9fdb46SRobert Mustacchi #define DW_DLE_DUPLICATE_GDB_INDEX 260 1193*4d9fdb46SRobert Mustacchi #define DW_DLE_ERRONEOUS_GDB_INDEX_SECTION 261 1194*4d9fdb46SRobert Mustacchi #define DW_DLE_GDB_INDEX_COUNT_ERROR 262 1195*4d9fdb46SRobert Mustacchi #define DW_DLE_GDB_INDEX_COUNT_ADDR_ERROR 263 1196*4d9fdb46SRobert Mustacchi #define DW_DLE_GDB_INDEX_INDEX_ERROR 264 1197*4d9fdb46SRobert Mustacchi #define DW_DLE_GDB_INDEX_CUVEC_ERROR 265 1198*4d9fdb46SRobert Mustacchi #define DW_DLE_DUPLICATE_CU_INDEX 266 1199*4d9fdb46SRobert Mustacchi #define DW_DLE_DUPLICATE_TU_INDEX 267 1200*4d9fdb46SRobert Mustacchi #define DW_DLE_XU_TYPE_ARG_ERROR 268 1201*4d9fdb46SRobert Mustacchi #define DW_DLE_XU_IMPOSSIBLE_ERROR 269 1202*4d9fdb46SRobert Mustacchi #define DW_DLE_XU_NAME_COL_ERROR 270 1203*4d9fdb46SRobert Mustacchi #define DW_DLE_XU_HASH_ROW_ERROR 271 1204*4d9fdb46SRobert Mustacchi #define DW_DLE_XU_HASH_INDEX_ERROR 272 1205*4d9fdb46SRobert Mustacchi /* ..._FAILSAFE_ERRVAL is an aid when out of memory. */ 1206*4d9fdb46SRobert Mustacchi #define DW_DLE_FAILSAFE_ERRVAL 273 1207*4d9fdb46SRobert Mustacchi #define DW_DLE_ARANGE_ERROR 274 1208*4d9fdb46SRobert Mustacchi #define DW_DLE_PUBNAMES_ERROR 275 1209*4d9fdb46SRobert Mustacchi #define DW_DLE_FUNCNAMES_ERROR 276 1210*4d9fdb46SRobert Mustacchi #define DW_DLE_TYPENAMES_ERROR 277 1211*4d9fdb46SRobert Mustacchi #define DW_DLE_VARNAMES_ERROR 278 1212*4d9fdb46SRobert Mustacchi #define DW_DLE_WEAKNAMES_ERROR 279 1213*4d9fdb46SRobert Mustacchi #define DW_DLE_RELOCS_ERROR 280 1214*4d9fdb46SRobert Mustacchi #define DW_DLE_ATTR_OUTSIDE_SECTION 281 1215*4d9fdb46SRobert Mustacchi #define DW_DLE_FISSION_INDEX_WRONG 282 1216*4d9fdb46SRobert Mustacchi #define DW_DLE_FISSION_VERSION_ERROR 283 1217*4d9fdb46SRobert Mustacchi #define DW_DLE_NEXT_DIE_LOW_ERROR 284 1218*4d9fdb46SRobert Mustacchi #define DW_DLE_CU_UT_TYPE_ERROR 285 1219*4d9fdb46SRobert Mustacchi #define DW_DLE_NO_SUCH_SIGNATURE_FOUND 286 1220*4d9fdb46SRobert Mustacchi #define DW_DLE_SIGNATURE_SECTION_NUMBER_WRONG 287 1221*4d9fdb46SRobert Mustacchi #define DW_DLE_ATTR_FORM_NOT_DATA8 288 1222*4d9fdb46SRobert Mustacchi #define DW_DLE_SIG_TYPE_WRONG_STRING 289 1223*4d9fdb46SRobert Mustacchi #define DW_DLE_MISSING_REQUIRED_TU_OFFSET_HASH 290 1224*4d9fdb46SRobert Mustacchi #define DW_DLE_MISSING_REQUIRED_CU_OFFSET_HASH 291 1225*4d9fdb46SRobert Mustacchi #define DW_DLE_DWP_MISSING_DWO_ID 292 1226*4d9fdb46SRobert Mustacchi #define DW_DLE_DWP_SIBLING_ERROR 293 1227*4d9fdb46SRobert Mustacchi #define DW_DLE_DEBUG_FISSION_INCOMPLETE 294 1228*4d9fdb46SRobert Mustacchi #define DW_DLE_FISSION_SECNUM_ERR 295 1229*4d9fdb46SRobert Mustacchi #define DW_DLE_DEBUG_MACRO_DUPLICATE 296 1230*4d9fdb46SRobert Mustacchi #define DW_DLE_DEBUG_NAMES_DUPLICATE 297 1231*4d9fdb46SRobert Mustacchi #define DW_DLE_DEBUG_LINE_STR_DUPLICATE 298 1232*4d9fdb46SRobert Mustacchi #define DW_DLE_DEBUG_SUP_DUPLICATE 299 1233*4d9fdb46SRobert Mustacchi #define DW_DLE_NO_SIGNATURE_TO_LOOKUP 300 1234*4d9fdb46SRobert Mustacchi #define DW_DLE_NO_TIED_ADDR_AVAILABLE 301 1235*4d9fdb46SRobert Mustacchi #define DW_DLE_NO_TIED_SIG_AVAILABLE 302 1236*4d9fdb46SRobert Mustacchi #define DW_DLE_STRING_NOT_TERMINATED 303 1237*4d9fdb46SRobert Mustacchi #define DW_DLE_BAD_LINE_TABLE_OPERATION 304 1238*4d9fdb46SRobert Mustacchi #define DW_DLE_LINE_CONTEXT_BOTCH 305 1239*4d9fdb46SRobert Mustacchi #define DW_DLE_LINE_CONTEXT_INDEX_WRONG 306 1240*4d9fdb46SRobert Mustacchi #define DW_DLE_NO_TIED_STRING_AVAILABLE 307 1241*4d9fdb46SRobert Mustacchi #define DW_DLE_NO_TIED_FILE_AVAILABLE 308 1242*4d9fdb46SRobert Mustacchi #define DW_DLE_CU_TYPE_MISSING 309 1243*4d9fdb46SRobert Mustacchi #define DW_DLE_LLE_CODE_UNKNOWN 310 1244*4d9fdb46SRobert Mustacchi #define DW_DLE_LOCLIST_INTERFACE_ERROR 311 1245*4d9fdb46SRobert Mustacchi #define DW_DLE_LOCLIST_INDEX_ERROR 312 1246*4d9fdb46SRobert Mustacchi #define DW_DLE_INTERFACE_NOT_SUPPORTED 313 1247*4d9fdb46SRobert Mustacchi #define DW_DLE_ZDEBUG_REQUIRES_ZLIB 314 1248*4d9fdb46SRobert Mustacchi #define DW_DLE_ZDEBUG_INPUT_FORMAT_ODD 315 1249*4d9fdb46SRobert Mustacchi #define DW_DLE_ZLIB_BUF_ERROR 316 1250*4d9fdb46SRobert Mustacchi #define DW_DLE_ZLIB_DATA_ERROR 317 1251*4d9fdb46SRobert Mustacchi #define DW_DLE_MACRO_OFFSET_BAD 318 1252*4d9fdb46SRobert Mustacchi #define DW_DLE_MACRO_OPCODE_BAD 319 1253*4d9fdb46SRobert Mustacchi #define DW_DLE_MACRO_OPCODE_FORM_BAD 320 1254*4d9fdb46SRobert Mustacchi #define DW_DLE_UNKNOWN_FORM 321 1255*4d9fdb46SRobert Mustacchi #define DW_DLE_BAD_MACRO_HEADER_POINTER 322 1256*4d9fdb46SRobert Mustacchi #define DW_DLE_BAD_MACRO_INDEX 323 1257*4d9fdb46SRobert Mustacchi #define DW_DLE_MACRO_OP_UNHANDLED 324 1258*4d9fdb46SRobert Mustacchi #define DW_DLE_MACRO_PAST_END 325 1259*4d9fdb46SRobert Mustacchi #define DW_DLE_LINE_STRP_OFFSET_BAD 326 1260*4d9fdb46SRobert Mustacchi #define DW_DLE_STRING_FORM_IMPROPER 327 1261*4d9fdb46SRobert Mustacchi #define DW_DLE_ELF_FLAGS_NOT_AVAILABLE 328 1262*4d9fdb46SRobert Mustacchi #define DW_DLE_LEB_IMPROPER 329 1263*4d9fdb46SRobert Mustacchi #define DW_DLE_DEBUG_LINE_RANGE_ZERO 330 1264*4d9fdb46SRobert Mustacchi #define DW_DLE_READ_LITTLEENDIAN_ERROR 331 1265*4d9fdb46SRobert Mustacchi #define DW_DLE_READ_BIGENDIAN_ERROR 332 1266*4d9fdb46SRobert Mustacchi #define DW_DLE_RELOC_INVALID 333 1267*4d9fdb46SRobert Mustacchi #define DW_DLE_INFO_HEADER_ERROR 334 1268*4d9fdb46SRobert Mustacchi #define DW_DLE_ARANGES_HEADER_ERROR 335 1269*4d9fdb46SRobert Mustacchi #define DW_DLE_LINE_OFFSET_WRONG_FORM 336 1270*4d9fdb46SRobert Mustacchi #define DW_DLE_FORM_BLOCK_LENGTH_ERROR 337 1271*4d9fdb46SRobert Mustacchi #define DW_DLE_ZLIB_SECTION_SHORT 338 1272*4d9fdb46SRobert Mustacchi #define DW_DLE_CIE_INSTR_PTR_ERROR 339 1273*4d9fdb46SRobert Mustacchi #define DW_DLE_FDE_INSTR_PTR_ERROR 340 1274*4d9fdb46SRobert Mustacchi #define DW_DLE_FISSION_ADDITION_ERROR 341 1275*4d9fdb46SRobert Mustacchi #define DW_DLE_HEADER_LEN_BIGGER_THAN_SECSIZE 342 1276*4d9fdb46SRobert Mustacchi #define DW_DLE_LOCEXPR_OFF_SECTION_END 343 1277*4d9fdb46SRobert Mustacchi #define DW_DLE_POINTER_SECTION_UNKNOWN 344 1278*4d9fdb46SRobert Mustacchi #define DW_DLE_ERRONEOUS_XU_INDEX_SECTION 345 1279*4d9fdb46SRobert Mustacchi #define DW_DLE_DIRECTORY_FORMAT_COUNT_VS_DIRECTORIES_MISMATCH 346 1280*4d9fdb46SRobert Mustacchi #define DW_DLE_COMPRESSED_EMPTY_SECTION 347 1281*4d9fdb46SRobert Mustacchi #define DW_DLE_SIZE_WRAPAROUND 348 1282*4d9fdb46SRobert Mustacchi #define DW_DLE_ILLOGICAL_TSEARCH 349 1283*4d9fdb46SRobert Mustacchi #define DW_DLE_BAD_STRING_FORM 350 1284*4d9fdb46SRobert Mustacchi #define DW_DLE_DEBUGSTR_ERROR 351 1285*4d9fdb46SRobert Mustacchi #define DW_DLE_DEBUGSTR_UNEXPECTED_REL 352 1286*4d9fdb46SRobert Mustacchi #define DW_DLE_DISCR_ARRAY_ERROR 353 1287*4d9fdb46SRobert Mustacchi #define DW_DLE_LEB_OUT_ERROR 354 1288*4d9fdb46SRobert Mustacchi #define DW_DLE_SIBLING_LIST_IMPROPER 355 1289*4d9fdb46SRobert Mustacchi #define DW_DLE_LOCLIST_OFFSET_BAD 356 1290*4d9fdb46SRobert Mustacchi #define DW_DLE_LINE_TABLE_BAD 357 1291*4d9fdb46SRobert Mustacchi #define DW_DLE_DEBUG_LOClISTS_DUPLICATE 358 1292*4d9fdb46SRobert Mustacchi #define DW_DLE_DEBUG_RNGLISTS_DUPLICATE 359 1293*4d9fdb46SRobert Mustacchi #define DW_DLE_ABBREV_OFF_END 360 1294*4d9fdb46SRobert Mustacchi #define DW_DLE_FORM_STRING_BAD_STRING 361 1295*4d9fdb46SRobert Mustacchi #define DW_DLE_AUGMENTATION_STRING_OFF_END 362 1296*4d9fdb46SRobert Mustacchi #define DW_DLE_STRING_OFF_END_PUBNAMES_LIKE 363 1297*4d9fdb46SRobert Mustacchi #define DW_DLE_LINE_STRING_BAD 364 1298*4d9fdb46SRobert Mustacchi #define DW_DLE_DEFINE_FILE_STRING_BAD 365 1299*4d9fdb46SRobert Mustacchi #define DW_DLE_MACRO_STRING_BAD 366 1300*4d9fdb46SRobert Mustacchi #define DW_DLE_MACINFO_STRING_BAD 367 1301*4d9fdb46SRobert Mustacchi #define DW_DLE_ZLIB_UNCOMPRESS_ERROR 368 1302*4d9fdb46SRobert Mustacchi #define DW_DLE_IMPROPER_DWO_ID 369 1303*4d9fdb46SRobert Mustacchi #define DW_DLE_GROUPNUMBER_ERROR 370 1304*4d9fdb46SRobert Mustacchi #define DW_DLE_ADDRESS_SIZE_ZERO 371 1305*4d9fdb46SRobert Mustacchi #define DW_DLE_DEBUG_NAMES_HEADER_ERROR 372 1306*4d9fdb46SRobert Mustacchi #define DW_DLE_DEBUG_NAMES_AUG_STRING_ERROR 373 1307*4d9fdb46SRobert Mustacchi #define DW_DLE_DEBUG_NAMES_PAD_NON_ZERO 374 1308*4d9fdb46SRobert Mustacchi #define DW_DLE_DEBUG_NAMES_OFF_END 375 1309*4d9fdb46SRobert Mustacchi #define DW_DLE_DEBUG_NAMES_ABBREV_OVERFLOW 376 1310*4d9fdb46SRobert Mustacchi #define DW_DLE_DEBUG_NAMES_ABBREV_CORRUPTION 377 1311*4d9fdb46SRobert Mustacchi #define DW_DLE_DEBUG_NAMES_NULL_POINTER 378 1312*4d9fdb46SRobert Mustacchi #define DW_DLE_DEBUG_NAMES_BAD_INDEX_ARG 379 1313*4d9fdb46SRobert Mustacchi #define DW_DLE_DEBUG_NAMES_ENTRYPOOL_OFFSET 380 1314*4d9fdb46SRobert Mustacchi #define DW_DLE_DEBUG_NAMES_UNHANDLED_FORM 381 1315*4d9fdb46SRobert Mustacchi #define DW_DLE_LNCT_CODE_UNKNOWN 382 1316*4d9fdb46SRobert Mustacchi #define DW_DLE_LNCT_FORM_CODE_NOT_HANDLED 383 1317*4d9fdb46SRobert Mustacchi #define DW_DLE_LINE_HEADER_LENGTH_BOTCH 384 1318*4d9fdb46SRobert Mustacchi #define DW_DLE_STRING_HASHTAB_IDENTITY_ERROR 385 1319*4d9fdb46SRobert Mustacchi #define DW_DLE_UNIT_TYPE_NOT_HANDLED 386 1320*4d9fdb46SRobert Mustacchi #define DW_DLE_GROUP_MAP_ALLOC 387 1321*4d9fdb46SRobert Mustacchi #define DW_DLE_GROUP_MAP_DUPLICATE 388 1322*4d9fdb46SRobert Mustacchi #define DW_DLE_GROUP_COUNT_ERROR 389 1323*4d9fdb46SRobert Mustacchi #define DW_DLE_GROUP_INTERNAL_ERROR 390 1324*4d9fdb46SRobert Mustacchi #define DW_DLE_GROUP_LOAD_ERROR 391 1325*4d9fdb46SRobert Mustacchi #define DW_DLE_GROUP_LOAD_READ_ERROR 392 1326*4d9fdb46SRobert Mustacchi #define DW_DLE_AUG_DATA_LENGTH_BAD 393 1327*4d9fdb46SRobert Mustacchi #define DW_DLE_ABBREV_MISSING 394 1328*4d9fdb46SRobert Mustacchi #define DW_DLE_NO_TAG_FOR_DIE 395 1329*4d9fdb46SRobert Mustacchi #define DW_DLE_LOWPC_WRONG_CLASS 396 1330*4d9fdb46SRobert Mustacchi #define DW_DLE_HIGHPC_WRONG_FORM 397 1331*4d9fdb46SRobert Mustacchi #define DW_DLE_STR_OFFSETS_BASE_WRONG_FORM 398 1332*4d9fdb46SRobert Mustacchi #define DW_DLE_DATA16_OUTSIDE_SECTION 399 1333*4d9fdb46SRobert Mustacchi #define DW_DLE_LNCT_MD5_WRONG_FORM 400 1334*4d9fdb46SRobert Mustacchi #define DW_DLE_LINE_HEADER_CORRUPT 401 1335*4d9fdb46SRobert Mustacchi #define DW_DLE_STR_OFFSETS_NULLARGUMENT 402 1336*4d9fdb46SRobert Mustacchi #define DW_DLE_STR_OFFSETS_NULL_DBG 403 1337*4d9fdb46SRobert Mustacchi #define DW_DLE_STR_OFFSETS_NO_MAGIC 404 1338*4d9fdb46SRobert Mustacchi #define DW_DLE_STR_OFFSETS_ARRAY_SIZE 405 1339*4d9fdb46SRobert Mustacchi #define DW_DLE_STR_OFFSETS_VERSION_WRONG 406 1340*4d9fdb46SRobert Mustacchi #define DW_DLE_STR_OFFSETS_ARRAY_INDEX_WRONG 407 1341*4d9fdb46SRobert Mustacchi #define DW_DLE_STR_OFFSETS_EXTRA_BYTES 408 1342*4d9fdb46SRobert Mustacchi #define DW_DLE_DUP_ATTR_ON_DIE 409 1343*4d9fdb46SRobert Mustacchi #define DW_DLE_SECTION_NAME_BIG 410 1344*4d9fdb46SRobert Mustacchi #define DW_DLE_FILE_UNAVAILABLE 411 1345*4d9fdb46SRobert Mustacchi #define DW_DLE_FILE_WRONG_TYPE 412 1346*4d9fdb46SRobert Mustacchi #define DW_DLE_SIBLING_OFFSET_WRONG 413 1347*4d9fdb46SRobert Mustacchi #define DW_DLE_OPEN_FAIL 414 1348*4d9fdb46SRobert Mustacchi #define DW_DLE_OFFSET_SIZE 415 1349*4d9fdb46SRobert Mustacchi #define DW_DLE_MACH_O_SEGOFFSET_BAD 416 1350*4d9fdb46SRobert Mustacchi #define DW_DLE_FILE_OFFSET_BAD 417 1351*4d9fdb46SRobert Mustacchi #define DW_DLE_SEEK_ERROR 418 1352*4d9fdb46SRobert Mustacchi #define DW_DLE_READ_ERROR 419 1353*4d9fdb46SRobert Mustacchi #define DW_DLE_ELF_CLASS_BAD 420 1354*4d9fdb46SRobert Mustacchi #define DW_DLE_ELF_ENDIAN_BAD 421 1355*4d9fdb46SRobert Mustacchi #define DW_DLE_ELF_VERSION_BAD 422 1356*4d9fdb46SRobert Mustacchi #define DW_DLE_FILE_TOO_SMALL 423 1357*4d9fdb46SRobert Mustacchi #define DW_DLE_PATH_SIZE_TOO_SMALL 424 1358*4d9fdb46SRobert Mustacchi #define DW_DLE_BAD_TYPE_SIZE 425 1359*4d9fdb46SRobert Mustacchi #define DW_DLE_PE_SIZE_SMALL 426 1360*4d9fdb46SRobert Mustacchi #define DW_DLE_PE_OFFSET_BAD 427 1361*4d9fdb46SRobert Mustacchi #define DW_DLE_PE_STRING_TOO_LONG 428 1362*4d9fdb46SRobert Mustacchi #define DW_DLE_IMAGE_FILE_UNKNOWN_TYPE 429 1363*4d9fdb46SRobert Mustacchi #define DW_DLE_LINE_TABLE_LINENO_ERROR 430 1364*4d9fdb46SRobert Mustacchi #define DW_DLE_PRODUCER_CODE_NOT_AVAILABLE 431 1365*4d9fdb46SRobert Mustacchi #define DW_DLE_NO_ELF_SUPPORT 432 1366*4d9fdb46SRobert Mustacchi #define DW_DLE_NO_STREAM_RELOC_SUPPORT 433 1367*4d9fdb46SRobert Mustacchi #define DW_DLE_RETURN_EMPTY_PUBNAMES_ERROR 434 1368*4d9fdb46SRobert Mustacchi #define DW_DLE_SECTION_SIZE_ERROR 435 1369*4d9fdb46SRobert Mustacchi #define DW_DLE_INTERNAL_NULL_POINTER 436 1370*4d9fdb46SRobert Mustacchi #define DW_DLE_SECTION_STRING_OFFSET_BAD 437 1371*4d9fdb46SRobert Mustacchi #define DW_DLE_SECTION_INDEX_BAD 438 1372*4d9fdb46SRobert Mustacchi #define DW_DLE_INTEGER_TOO_SMALL 439 1373*4d9fdb46SRobert Mustacchi #define DW_DLE_ELF_SECTION_LINK_ERROR 440 1374*4d9fdb46SRobert Mustacchi #define DW_DLE_ELF_SECTION_GROUP_ERROR 441 1375*4d9fdb46SRobert Mustacchi #define DW_DLE_ELF_SECTION_COUNT_MISMATCH 442 1376*4d9fdb46SRobert Mustacchi #define DW_DLE_ELF_STRING_SECTION_MISSING 443 1377*4d9fdb46SRobert Mustacchi #define DW_DLE_SEEK_OFF_END 444 1378*4d9fdb46SRobert Mustacchi #define DW_DLE_READ_OFF_END 445 1379*4d9fdb46SRobert Mustacchi #define DW_DLE_ELF_SECTION_ERROR 446 1380*4d9fdb46SRobert Mustacchi #define DW_DLE_ELF_STRING_SECTION_ERROR 447 1381*4d9fdb46SRobert Mustacchi #define DW_DLE_MIXING_SPLIT_DWARF_VERSIONS 448 1382*4d9fdb46SRobert Mustacchi #define DW_DLE_TAG_CORRUPT 449 1383*4d9fdb46SRobert Mustacchi #define DW_DLE_FORM_CORRUPT 450 1384*4d9fdb46SRobert Mustacchi #define DW_DLE_ATTR_CORRUPT 451 1385*4d9fdb46SRobert Mustacchi #define DW_DLE_ABBREV_ATTR_DUPLICATION 452 1386*4d9fdb46SRobert Mustacchi #define DW_DLE_DWP_SIGNATURE_MISMATCH 453 1387*4d9fdb46SRobert Mustacchi #define DW_DLE_CU_UT_TYPE_VALUE 454 1388*4d9fdb46SRobert Mustacchi #define DW_DLE_DUPLICATE_GNU_DEBUGLINK 455 1389*4d9fdb46SRobert Mustacchi #define DW_DLE_CORRUPT_GNU_DEBUGLINK 456 1390*4d9fdb46SRobert Mustacchi #define DW_DLE_CORRUPT_NOTE_GNU_DEBUGID 457 1391*4d9fdb46SRobert Mustacchi #define DW_DLE_CORRUPT_GNU_DEBUGID_SIZE 458 1392*4d9fdb46SRobert Mustacchi #define DW_DLE_CORRUPT_GNU_DEBUGID_STRING 459 1393*4d9fdb46SRobert Mustacchi #define DW_DLE_HEX_STRING_ERROR 460 1394*4d9fdb46SRobert Mustacchi #define DW_DLE_DECIMAL_STRING_ERROR 461 1395*4d9fdb46SRobert Mustacchi #define DW_DLE_PRO_INIT_EXTRAS_UNKNOWN 462 1396*4d9fdb46SRobert Mustacchi #define DW_DLE_PRO_INIT_EXTRAS_ERR 463 1397*4d9fdb46SRobert Mustacchi #define DW_DLE_NULL_ARGS_DWARF_ADD_PATH 464 1398*4d9fdb46SRobert Mustacchi #define DW_DLE_DWARF_INIT_DBG_NULL 465 1399*4d9fdb46SRobert Mustacchi #define DW_DLE_ELF_RELOC_SECTION_ERROR 466 1400*4d9fdb46SRobert Mustacchi #define DW_DLE_USER_DECLARED_ERROR 467 1401*4d9fdb46SRobert Mustacchi #define DW_DLE_RNGLISTS_ERROR 468 1402*4d9fdb46SRobert Mustacchi #define DW_DLE_LOCLISTS_ERROR 469 1403*4d9fdb46SRobert Mustacchi 1404*4d9fdb46SRobert Mustacchi /* LAST MUST EQUAL LAST ERROR NUMBER */ 1405*4d9fdb46SRobert Mustacchi #define DW_DLE_LAST 469 140607dc1947SRichard Lowe 14077c478bd9Sstevel@tonic-gate #define DW_DLE_LO_USER 0x10000 14087c478bd9Sstevel@tonic-gate 1409*4d9fdb46SRobert Mustacchi /* Taken as meaning 'undefined value', this is not 1410*4d9fdb46SRobert Mustacchi a column or register number. 1411*4d9fdb46SRobert Mustacchi Only present at libdwarf runtime. Never on disk. 1412*4d9fdb46SRobert Mustacchi DW_FRAME_* Values present on disk are in dwarf.h 1413*4d9fdb46SRobert Mustacchi */ 14147c478bd9Sstevel@tonic-gate #define DW_FRAME_UNDEFINED_VAL 1034 14157c478bd9Sstevel@tonic-gate 1416*4d9fdb46SRobert Mustacchi /* Taken as meaning 'same value' as caller had, not a column 1417*4d9fdb46SRobert Mustacchi or register number 1418*4d9fdb46SRobert Mustacchi Only present at libdwarf runtime. Never on disk. 1419*4d9fdb46SRobert Mustacchi DW_FRAME_* Values present on disk are in dwarf.h 1420*4d9fdb46SRobert Mustacchi */ 14217c478bd9Sstevel@tonic-gate #define DW_FRAME_SAME_VAL 1035 14227c478bd9Sstevel@tonic-gate 14237c478bd9Sstevel@tonic-gate 14247c478bd9Sstevel@tonic-gate 1425*4d9fdb46SRobert Mustacchi /* error return values 14267c478bd9Sstevel@tonic-gate */ 1427*4d9fdb46SRobert Mustacchi #define DW_DLV_BADADDR (~(Dwarf_Addr)0) 142807dc1947SRichard Lowe /* for functions returning target address */ 14297c478bd9Sstevel@tonic-gate 1430*4d9fdb46SRobert Mustacchi #define DW_DLV_NOCOUNT ((Dwarf_Signed)-1) 143107dc1947SRichard Lowe /* for functions returning count */ 14327c478bd9Sstevel@tonic-gate 1433*4d9fdb46SRobert Mustacchi #define DW_DLV_BADOFFSET (~(Dwarf_Off)0) 143407dc1947SRichard Lowe /* for functions returning offset */ 14357c478bd9Sstevel@tonic-gate 14367c478bd9Sstevel@tonic-gate /* standard return values for functions */ 14377c478bd9Sstevel@tonic-gate #define DW_DLV_NO_ENTRY -1 14387c478bd9Sstevel@tonic-gate #define DW_DLV_OK 0 14397c478bd9Sstevel@tonic-gate #define DW_DLV_ERROR 1 14407c478bd9Sstevel@tonic-gate 14417c478bd9Sstevel@tonic-gate /* Special values for offset_into_exception_table field of dwarf fde's. */ 14427c478bd9Sstevel@tonic-gate /* The following value indicates that there is no Exception table offset 14437c478bd9Sstevel@tonic-gate associated with a dwarf frame. */ 144407dc1947SRichard Lowe #define DW_DLX_NO_EH_OFFSET (-1LL) 14457c478bd9Sstevel@tonic-gate /* The following value indicates that the producer was unable to analyse the 14467c478bd9Sstevel@tonic-gate source file to generate Exception tables for this function. */ 14477c478bd9Sstevel@tonic-gate #define DW_DLX_EH_OFFSET_UNAVAILABLE (-2LL) 14487c478bd9Sstevel@tonic-gate 1449*4d9fdb46SRobert Mustacchi /* The dwarf specification separates FORMs into 1450*4d9fdb46SRobert Mustacchi different classes. To do the seperation properly 1451*4d9fdb46SRobert Mustacchi requires 4 pieces of data as of DWARF4 (thus the 1452*4d9fdb46SRobert Mustacchi function arguments listed here). 1453*4d9fdb46SRobert Mustacchi The DWARF4 specification class definition suffices to 1454*4d9fdb46SRobert Mustacchi describe all DWARF versions. 1455*4d9fdb46SRobert Mustacchi See section 7.5.4, Attribute Encodings. 1456*4d9fdb46SRobert Mustacchi A return of DW_FORM_CLASS_UNKNOWN means we could not properly figure 1457*4d9fdb46SRobert Mustacchi out what form-class it is. 1458*4d9fdb46SRobert Mustacchi 1459*4d9fdb46SRobert Mustacchi DW_FORM_CLASS_FRAMEPTR is MIPS/IRIX only, and refers 1460*4d9fdb46SRobert Mustacchi to the DW_AT_MIPS_fde attribute (a reference to the 1461*4d9fdb46SRobert Mustacchi .debug_frame section). 1462*4d9fdb46SRobert Mustacchi 1463*4d9fdb46SRobert Mustacchi DWARF5: 1464*4d9fdb46SRobert Mustacchi DW_FORM_CLASS_LOCLISTSPTR is like DW_FORM_CLASS_LOCLIST 1465*4d9fdb46SRobert Mustacchi except that LOCLISTSPTR is aways a section offset, 1466*4d9fdb46SRobert Mustacchi never an index, and LOCLISTSPTR is only referenced 1467*4d9fdb46SRobert Mustacchi by DW_AT_loclists_base. 1468*4d9fdb46SRobert Mustacchi Note DW_FORM_CLASS_LOCLISTSPTR spelling to distinguish 1469*4d9fdb46SRobert Mustacchi from DW_FORM_CLASS_LOCLISTPTR. 1470*4d9fdb46SRobert Mustacchi 1471*4d9fdb46SRobert Mustacchi DWARF5: 1472*4d9fdb46SRobert Mustacchi DW_FORM_CLASS_RNGLISTSPTR is like DW_FORM_CLASS_RNGLIST 1473*4d9fdb46SRobert Mustacchi except that RNGLISTSPTR is aways a section offset, 1474*4d9fdb46SRobert Mustacchi never an index. DW_FORM_CLASS_RNGLISTSPTR is only 1475*4d9fdb46SRobert Mustacchi referenced by DW_AT_rnglists_base. 1476*4d9fdb46SRobert Mustacchi */ 1477*4d9fdb46SRobert Mustacchi enum Dwarf_Form_Class { 1478*4d9fdb46SRobert Mustacchi DW_FORM_CLASS_UNKNOWN, DW_FORM_CLASS_ADDRESS, 1479*4d9fdb46SRobert Mustacchi DW_FORM_CLASS_BLOCK, DW_FORM_CLASS_CONSTANT, 1480*4d9fdb46SRobert Mustacchi DW_FORM_CLASS_EXPRLOC, DW_FORM_CLASS_FLAG, 1481*4d9fdb46SRobert Mustacchi DW_FORM_CLASS_LINEPTR, 1482*4d9fdb46SRobert Mustacchi DW_FORM_CLASS_LOCLISTPTR, /* DWARF2,3,4 only */ 1483*4d9fdb46SRobert Mustacchi DW_FORM_CLASS_MACPTR, /* DWARF2,3,4 only */ 1484*4d9fdb46SRobert Mustacchi DW_FORM_CLASS_RANGELISTPTR, /* DWARF2,3,4 only */ 1485*4d9fdb46SRobert Mustacchi DW_FORM_CLASS_REFERENCE, 1486*4d9fdb46SRobert Mustacchi DW_FORM_CLASS_STRING, 1487*4d9fdb46SRobert Mustacchi DW_FORM_CLASS_FRAMEPTR, /* MIPS/IRIX DWARF2 only */ 1488*4d9fdb46SRobert Mustacchi DW_FORM_CLASS_MACROPTR, /* DWARF5 */ 1489*4d9fdb46SRobert Mustacchi DW_FORM_CLASS_ADDRPTR, /* DWARF5 */ 1490*4d9fdb46SRobert Mustacchi DW_FORM_CLASS_LOCLIST, /* DWARF5 */ 1491*4d9fdb46SRobert Mustacchi DW_FORM_CLASS_LOCLISTSPTR, /* DWARF5 */ 1492*4d9fdb46SRobert Mustacchi DW_FORM_CLASS_RNGLIST, /* DWARF5 */ 1493*4d9fdb46SRobert Mustacchi DW_FORM_CLASS_RNGLISTSPTR, /* DWARF5 */ 1494*4d9fdb46SRobert Mustacchi DW_FORM_CLASS_STROFFSETSPTR /* DWARF5 */ 1495*4d9fdb46SRobert Mustacchi }; 1496*4d9fdb46SRobert Mustacchi 1497*4d9fdb46SRobert Mustacchi /* These support opening DWARF5 split dwarf objects. */ 1498*4d9fdb46SRobert Mustacchi #define DW_GROUPNUMBER_ANY 0 1499*4d9fdb46SRobert Mustacchi #define DW_GROUPNUMBER_BASE 1 1500*4d9fdb46SRobert Mustacchi #define DW_GROUPNUMBER_DWO 2 15017c478bd9Sstevel@tonic-gate 15027c478bd9Sstevel@tonic-gate /*===========================================================================*/ 15037c478bd9Sstevel@tonic-gate /* Dwarf consumer interface initialization and termination operations */ 15047c478bd9Sstevel@tonic-gate 1505*4d9fdb46SRobert Mustacchi /* Initialization based on path. This is new October 2018. 1506*4d9fdb46SRobert Mustacchi The path actually used is copied to true_path_out 1507*4d9fdb46SRobert Mustacchi and in the case of MacOS dSYM may not match path. 1508*4d9fdb46SRobert Mustacchi So consider the value put in true_path_out the 1509*4d9fdb46SRobert Mustacchi actual file name. reserved1,2,3 should all be passed 1510*4d9fdb46SRobert Mustacchi as zero. */ 1511*4d9fdb46SRobert Mustacchi int dwarf_init_path(const char * /*path*/, 1512*4d9fdb46SRobert Mustacchi char * /*true_path_out_buffer*/, 1513*4d9fdb46SRobert Mustacchi unsigned int /*true_path_bufferlen*/, 1514*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*access*/, 1515*4d9fdb46SRobert Mustacchi unsigned int /*groupnumber*/, 1516*4d9fdb46SRobert Mustacchi Dwarf_Handler /*errhand*/, 1517*4d9fdb46SRobert Mustacchi Dwarf_Ptr /*errarg*/, 1518*4d9fdb46SRobert Mustacchi Dwarf_Debug* /*dbg*/, 1519*4d9fdb46SRobert Mustacchi const char * /* reserved1 */, 1520*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /* reserved2 */, 1521*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /* reserved3 */, 1522*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 1523*4d9fdb46SRobert Mustacchi 1524*4d9fdb46SRobert Mustacchi /* Initialization based on Unix(etc) open fd */ 1525*4d9fdb46SRobert Mustacchi /* New March 2017 */ 1526*4d9fdb46SRobert Mustacchi int dwarf_init_b(int /*fd*/, 1527*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*access*/, 1528*4d9fdb46SRobert Mustacchi unsigned int /*groupnumber*/, 1529*4d9fdb46SRobert Mustacchi Dwarf_Handler /*errhand*/, 1530*4d9fdb46SRobert Mustacchi Dwarf_Ptr /*errarg*/, 1531*4d9fdb46SRobert Mustacchi Dwarf_Debug* /*dbg*/, 1532*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 1533*4d9fdb46SRobert Mustacchi 1534*4d9fdb46SRobert Mustacchi int dwarf_init(int /*fd*/, 1535*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*access*/, 1536*4d9fdb46SRobert Mustacchi Dwarf_Handler /*errhand*/, 1537*4d9fdb46SRobert Mustacchi Dwarf_Ptr /*errarg*/, 153807dc1947SRichard Lowe Dwarf_Debug* /*dbg*/, 153907dc1947SRichard Lowe Dwarf_Error* /*error*/); 15407c478bd9Sstevel@tonic-gate 1541*4d9fdb46SRobert Mustacchi /* The dwarf_elf_init* functions continue to be supported, 1542*4d9fdb46SRobert Mustacchi but should be considered deprecated as they can ONLY 1543*4d9fdb46SRobert Mustacchi be used on Elf files. */ 1544*4d9fdb46SRobert Mustacchi /* Initialization based on libelf/sgi-fastlibelf open pointer. */ 1545*4d9fdb46SRobert Mustacchi /* New March 2017 */ 1546*4d9fdb46SRobert Mustacchi int dwarf_elf_init_b(dwarf_elf_handle /*elf*/, 1547*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*access*/, 1548*4d9fdb46SRobert Mustacchi unsigned int /*group_number*/, 1549*4d9fdb46SRobert Mustacchi Dwarf_Handler /*errhand*/, 1550*4d9fdb46SRobert Mustacchi Dwarf_Ptr /*errarg*/, 1551*4d9fdb46SRobert Mustacchi Dwarf_Debug* /*dbg*/, 1552*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 155349d3bc91SRichard Lowe int dwarf_elf_init(dwarf_elf_handle /*elf*/, 1554*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*access*/, 1555*4d9fdb46SRobert Mustacchi Dwarf_Handler /*errhand*/, 1556*4d9fdb46SRobert Mustacchi Dwarf_Ptr /*errarg*/, 155707dc1947SRichard Lowe Dwarf_Debug* /*dbg*/, 155807dc1947SRichard Lowe Dwarf_Error* /*error*/); 15597c478bd9Sstevel@tonic-gate 1560*4d9fdb46SRobert Mustacchi /* New September 2019. 1561*4d9fdb46SRobert Mustacchi When using dwarf_elf_init[_b]() we still want the file path 1562*4d9fdb46SRobert Mustacchi in the record. So we add it after the init phase. 1563*4d9fdb46SRobert Mustacchi Path is needed for buildid and debuglink to fully work. 1564*4d9fdb46SRobert Mustacchi */ 1565*4d9fdb46SRobert Mustacchi int dwarf_add_file_path(Dwarf_Debug /*dbg*/, 1566*4d9fdb46SRobert Mustacchi const char * /*file_name*/, 1567*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 1568*4d9fdb46SRobert Mustacchi 15697c478bd9Sstevel@tonic-gate /* Undocumented function for memory allocator. */ 15707c478bd9Sstevel@tonic-gate void dwarf_print_memory_stats(Dwarf_Debug /*dbg*/); 15717c478bd9Sstevel@tonic-gate 15727c478bd9Sstevel@tonic-gate int dwarf_get_elf(Dwarf_Debug /*dbg*/, 157307dc1947SRichard Lowe dwarf_elf_handle* /*return_elfptr*/, 157407dc1947SRichard Lowe Dwarf_Error* /*error*/); 15757c478bd9Sstevel@tonic-gate 15767c478bd9Sstevel@tonic-gate int dwarf_finish(Dwarf_Debug /*dbg*/, Dwarf_Error* /*error*/); 15777c478bd9Sstevel@tonic-gate 157807dc1947SRichard Lowe 1579*4d9fdb46SRobert Mustacchi /* NEW March 2017. */ 1580*4d9fdb46SRobert Mustacchi int dwarf_object_init_b(Dwarf_Obj_Access_Interface* /*obj*/, 1581*4d9fdb46SRobert Mustacchi Dwarf_Handler /*errhand*/, 1582*4d9fdb46SRobert Mustacchi Dwarf_Ptr /*errarg*/, 1583*4d9fdb46SRobert Mustacchi unsigned int /*groupnumber*/, 1584*4d9fdb46SRobert Mustacchi Dwarf_Debug* /*dbg*/, 1585*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 1586*4d9fdb46SRobert Mustacchi 1587*4d9fdb46SRobert Mustacchi int dwarf_object_init(Dwarf_Obj_Access_Interface* /*obj*/, 1588*4d9fdb46SRobert Mustacchi Dwarf_Handler /*errhand*/, 1589*4d9fdb46SRobert Mustacchi Dwarf_Ptr /*errarg*/, 1590*4d9fdb46SRobert Mustacchi Dwarf_Debug* /*dbg*/, 1591*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 1592*4d9fdb46SRobert Mustacchi 1593*4d9fdb46SRobert Mustacchi int dwarf_set_tied_dbg(Dwarf_Debug /*basedbg*/, 1594*4d9fdb46SRobert Mustacchi Dwarf_Debug /*tied_dbg*/, 1595*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 1596*4d9fdb46SRobert Mustacchi 1597*4d9fdb46SRobert Mustacchi /* Likely not very useful.? */ 1598*4d9fdb46SRobert Mustacchi int dwarf_get_tied_dbg(Dwarf_Debug /*dbg*/, 1599*4d9fdb46SRobert Mustacchi Dwarf_Debug * /*tieddbg_out*/, 1600*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 1601*4d9fdb46SRobert Mustacchi 1602*4d9fdb46SRobert Mustacchi int dwarf_object_finish(Dwarf_Debug /*dbg*/, 1603*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 1604*4d9fdb46SRobert Mustacchi 1605*4d9fdb46SRobert Mustacchi /* Returns the version string. Example: "20190922" 1606*4d9fdb46SRobert Mustacchi which is in ISO date format. */ 1607*4d9fdb46SRobert Mustacchi const char * dwarf_package_version(void); 1608*4d9fdb46SRobert Mustacchi 1609*4d9fdb46SRobert Mustacchi /* Section name access. Because sections might 1610*4d9fdb46SRobert Mustacchi now end with .dwo or be .zdebug or might not. 1611*4d9fdb46SRobert Mustacchi */ 1612*4d9fdb46SRobert Mustacchi int dwarf_get_die_section_name(Dwarf_Debug /*dbg*/, 1613*4d9fdb46SRobert Mustacchi Dwarf_Bool /*is_info*/, 1614*4d9fdb46SRobert Mustacchi const char ** /*sec_name*/, 1615*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 1616*4d9fdb46SRobert Mustacchi 1617*4d9fdb46SRobert Mustacchi int dwarf_get_die_section_name_b(Dwarf_Die /*die*/, 1618*4d9fdb46SRobert Mustacchi const char ** /*sec_name*/, 1619*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 1620*4d9fdb46SRobert Mustacchi 1621*4d9fdb46SRobert Mustacchi int dwarf_get_real_section_name(Dwarf_Debug /*dbg*/, 1622*4d9fdb46SRobert Mustacchi const char * /*std_section_name*/, 1623*4d9fdb46SRobert Mustacchi const char ** /*actual_sec_name_out*/, 1624*4d9fdb46SRobert Mustacchi Dwarf_Small * /*marked_compressed*/, /* .zdebug... */ 1625*4d9fdb46SRobert Mustacchi Dwarf_Small * /*marked_zlib_compressed */, /* ZLIB string */ 1626*4d9fdb46SRobert Mustacchi Dwarf_Small * /*marked_shf_compressed*/, /* SHF_COMPRESSED */ 1627*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*compressed_length*/, 1628*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*uncompressed_length*/, 1629*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 1630*4d9fdb46SRobert Mustacchi 1631*4d9fdb46SRobert Mustacchi 1632*4d9fdb46SRobert Mustacchi 1633*4d9fdb46SRobert Mustacchi /* dwarf_next_cu_header_d traverses debug_types CU headers. 1634*4d9fdb46SRobert Mustacchi New in May, 2015. 1635*4d9fdb46SRobert Mustacchi */ 1636*4d9fdb46SRobert Mustacchi int dwarf_next_cu_header_d(Dwarf_Debug /*dbg*/, 1637*4d9fdb46SRobert Mustacchi Dwarf_Bool /*is_info*/, 1638*4d9fdb46SRobert Mustacchi Dwarf_Unsigned* /*cu_header_length*/, 1639*4d9fdb46SRobert Mustacchi Dwarf_Half* /*version_stamp*/, 1640*4d9fdb46SRobert Mustacchi Dwarf_Off* /*abbrev_offset*/, 1641*4d9fdb46SRobert Mustacchi Dwarf_Half* /*address_size*/, 1642*4d9fdb46SRobert Mustacchi Dwarf_Half* /*length_size*/, 1643*4d9fdb46SRobert Mustacchi Dwarf_Half* /*extension_size*/, 1644*4d9fdb46SRobert Mustacchi Dwarf_Sig8* /*type signature*/, 1645*4d9fdb46SRobert Mustacchi Dwarf_Unsigned* /*typeoffset*/, 1646*4d9fdb46SRobert Mustacchi Dwarf_Unsigned* /*next_cu_header_offset*/, 1647*4d9fdb46SRobert Mustacchi Dwarf_Half * /*header_cu_type*/, 1648*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 1649*4d9fdb46SRobert Mustacchi 1650*4d9fdb46SRobert Mustacchi /* Die traversal operations. 1651*4d9fdb46SRobert Mustacchi dwarf_next_cu_header_b traverses debug_info CU headers. 1652*4d9fdb46SRobert Mustacchi Obsolete but supported. 1653*4d9fdb46SRobert Mustacchi */ 1654*4d9fdb46SRobert Mustacchi int dwarf_next_cu_header_b(Dwarf_Debug /*dbg*/, 1655*4d9fdb46SRobert Mustacchi Dwarf_Unsigned* /*cu_header_length*/, 1656*4d9fdb46SRobert Mustacchi Dwarf_Half* /*version_stamp*/, 1657*4d9fdb46SRobert Mustacchi Dwarf_Off* /*abbrev_offset*/, 1658*4d9fdb46SRobert Mustacchi Dwarf_Half* /*address_size*/, 1659*4d9fdb46SRobert Mustacchi Dwarf_Half* /*length_size*/, 1660*4d9fdb46SRobert Mustacchi Dwarf_Half* /*extension_size*/, 1661*4d9fdb46SRobert Mustacchi Dwarf_Unsigned* /*next_cu_header_offset*/, 1662*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 1663*4d9fdb46SRobert Mustacchi 1664*4d9fdb46SRobert Mustacchi /* dwarf_next_cu_header_types traverses debug_types CU headers. 1665*4d9fdb46SRobert Mustacchi New in October, 2011. Obsolete but supported May 2015. 1666*4d9fdb46SRobert Mustacchi */ 1667*4d9fdb46SRobert Mustacchi int dwarf_next_cu_header_c(Dwarf_Debug /*dbg*/, 1668*4d9fdb46SRobert Mustacchi Dwarf_Bool /*is_info*/, 1669*4d9fdb46SRobert Mustacchi Dwarf_Unsigned* /*cu_header_length*/, 1670*4d9fdb46SRobert Mustacchi Dwarf_Half* /*version_stamp*/, 1671*4d9fdb46SRobert Mustacchi Dwarf_Off* /*abbrev_offset*/, 1672*4d9fdb46SRobert Mustacchi Dwarf_Half* /*address_size*/, 1673*4d9fdb46SRobert Mustacchi Dwarf_Half* /*length_size*/, 1674*4d9fdb46SRobert Mustacchi Dwarf_Half* /*extension_size*/, 1675*4d9fdb46SRobert Mustacchi Dwarf_Sig8* /*type signature*/, 1676*4d9fdb46SRobert Mustacchi Dwarf_Unsigned* /*typeoffset*/, 167707dc1947SRichard Lowe Dwarf_Unsigned* /*next_cu_header_offset*/, 167807dc1947SRichard Lowe Dwarf_Error* /*error*/); 1679*4d9fdb46SRobert Mustacchi /* The following is obsolete, though supported. November 2009. */ 1680*4d9fdb46SRobert Mustacchi int dwarf_next_cu_header(Dwarf_Debug /*dbg*/, 1681*4d9fdb46SRobert Mustacchi Dwarf_Unsigned* /*cu_header_length*/, 1682*4d9fdb46SRobert Mustacchi Dwarf_Half* /*version_stamp*/, 1683*4d9fdb46SRobert Mustacchi Dwarf_Off* /*abbrev_offset*/, 1684*4d9fdb46SRobert Mustacchi Dwarf_Half* /*address_size*/, 168507dc1947SRichard Lowe Dwarf_Unsigned* /*next_cu_header_offset*/, 168607dc1947SRichard Lowe Dwarf_Error* /*error*/); 16877c478bd9Sstevel@tonic-gate 1688*4d9fdb46SRobert Mustacchi int dwarf_siblingof(Dwarf_Debug /*dbg*/, 1689*4d9fdb46SRobert Mustacchi Dwarf_Die /*die*/, 169007dc1947SRichard Lowe Dwarf_Die* /*return_siblingdie*/, 169107dc1947SRichard Lowe Dwarf_Error* /*error*/); 1692*4d9fdb46SRobert Mustacchi /* dwarf_siblingof_b new October 2011. */ 1693*4d9fdb46SRobert Mustacchi int dwarf_siblingof_b(Dwarf_Debug /*dbg*/, 1694*4d9fdb46SRobert Mustacchi Dwarf_Die /*die*/, 1695*4d9fdb46SRobert Mustacchi Dwarf_Bool /*is_info*/, 1696*4d9fdb46SRobert Mustacchi Dwarf_Die* /*return_siblingdie*/, 169707dc1947SRichard Lowe Dwarf_Error* /*error*/); 16987c478bd9Sstevel@tonic-gate 1699*4d9fdb46SRobert Mustacchi /* New 27 April 2015. */ 1700*4d9fdb46SRobert Mustacchi int dwarf_die_from_hash_signature(Dwarf_Debug /*dbg*/, 1701*4d9fdb46SRobert Mustacchi Dwarf_Sig8 * /*hash_sig*/, 1702*4d9fdb46SRobert Mustacchi const char * /*sig_type: "tu" or "cu"*/, 1703*4d9fdb46SRobert Mustacchi Dwarf_Die* /*returned_CU_die */, 170407dc1947SRichard Lowe Dwarf_Error* /*error*/); 17057c478bd9Sstevel@tonic-gate 1706*4d9fdb46SRobert Mustacchi int dwarf_child(Dwarf_Die /*die*/, 1707*4d9fdb46SRobert Mustacchi Dwarf_Die* /*return_childdie*/, 170807dc1947SRichard Lowe Dwarf_Error* /*error*/); 17097c478bd9Sstevel@tonic-gate 1710*4d9fdb46SRobert Mustacchi /* Finding die given global (not CU-relative) offset. 1711*4d9fdb46SRobert Mustacchi Applies only to debug_info. */ 1712*4d9fdb46SRobert Mustacchi int dwarf_offdie(Dwarf_Debug /*dbg*/, 1713*4d9fdb46SRobert Mustacchi Dwarf_Off /*offset*/, 171407dc1947SRichard Lowe Dwarf_Die* /*return_die*/, 171507dc1947SRichard Lowe Dwarf_Error* /*error*/); 17167c478bd9Sstevel@tonic-gate 1717*4d9fdb46SRobert Mustacchi /* dwarf_offdie_b new October 2011 */ 1718*4d9fdb46SRobert Mustacchi /* Finding die given global (not CU-relative) offset. 1719*4d9fdb46SRobert Mustacchi Applies to debug_info (is_info true) or debug_types (is_info false). */ 1720*4d9fdb46SRobert Mustacchi int dwarf_offdie_b(Dwarf_Debug /*dbg*/, 1721*4d9fdb46SRobert Mustacchi Dwarf_Off /*offset*/, 1722*4d9fdb46SRobert Mustacchi Dwarf_Bool /*is_info*/, 172307dc1947SRichard Lowe Dwarf_Die* /*return_die*/, 172407dc1947SRichard Lowe Dwarf_Error* /*error*/); 17257c478bd9Sstevel@tonic-gate 1726*4d9fdb46SRobert Mustacchi /* Returns the is_info flag through the pointer if the function returns 1727*4d9fdb46SRobert Mustacchi DW_DLV_OK. Needed so client software knows if a DIE is in debug_info 1728*4d9fdb46SRobert Mustacchi or debug_types. 1729*4d9fdb46SRobert Mustacchi New October 2011. */ 1730*4d9fdb46SRobert Mustacchi Dwarf_Bool dwarf_get_die_infotypes_flag(Dwarf_Die /*die*/); 1731*4d9fdb46SRobert Mustacchi 1732*4d9fdb46SRobert Mustacchi /* New March 2016. 1733*4d9fdb46SRobert Mustacchi So we can associate a DIE's abbreviations with the contents 1734*4d9fdb46SRobert Mustacchi the abbreviations section. */ 1735*4d9fdb46SRobert Mustacchi int dwarf_die_abbrev_global_offset(Dwarf_Die /*die*/, 1736*4d9fdb46SRobert Mustacchi Dwarf_Off * /*abbrev_offset*/, 1737*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*abbrev_count*/, 1738*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 1739*4d9fdb46SRobert Mustacchi 1740*4d9fdb46SRobert Mustacchi /* operations on DIEs */ 1741*4d9fdb46SRobert Mustacchi int dwarf_tag(Dwarf_Die /*die*/, 174207dc1947SRichard Lowe Dwarf_Half* /*return_tag*/, 174307dc1947SRichard Lowe Dwarf_Error* /*error*/); 17447c478bd9Sstevel@tonic-gate 1745*4d9fdb46SRobert Mustacchi /* dwarf_dieoffset returns the global debug_info 1746*4d9fdb46SRobert Mustacchi section offset, not the CU relative offset. */ 1747*4d9fdb46SRobert Mustacchi int dwarf_dieoffset(Dwarf_Die /*die*/, 174807dc1947SRichard Lowe Dwarf_Off* /*return_offset*/, 174907dc1947SRichard Lowe Dwarf_Error* /*error*/); 175007dc1947SRichard Lowe 1751*4d9fdb46SRobert Mustacchi /* NEW October 2015. DWARF5. 1752*4d9fdb46SRobert Mustacchi The DIE here can be any DIE in the relevant CU. 1753*4d9fdb46SRobert Mustacchi index is an index into .debug_addr. 1754*4d9fdb46SRobert Mustacchi This will look first for .debug_addr 1755*4d9fdb46SRobert Mustacchi in the dbg object DIE 1756*4d9fdb46SRobert Mustacchi and if not there (because the dbg object is 1757*4d9fdb46SRobert Mustacchi a dwo or dwp split dwarf object) 1758*4d9fdb46SRobert Mustacchi will look in the tied object if tied is available. */ 1759*4d9fdb46SRobert Mustacchi int dwarf_debug_addr_index_to_addr(Dwarf_Die /*die*/, 1760*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*index*/, 1761*4d9fdb46SRobert Mustacchi Dwarf_Addr * /*return_addr*/, 1762*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 1763*4d9fdb46SRobert Mustacchi /* Reading a CU DIE with DW_AT_low_pc an indexed value 1764*4d9fdb46SRobert Mustacchi can be problematic as that interacts with DW_AT_addr_base 1765*4d9fdb46SRobert Mustacchi in that DIE. Here is a test readers may find useful */ 1766*4d9fdb46SRobert Mustacchi Dwarf_Bool dwarf_addr_form_is_indexed(int form); 1767*4d9fdb46SRobert Mustacchi 1768*4d9fdb46SRobert Mustacchi 1769*4d9fdb46SRobert Mustacchi /* dwarf_CU_dieoffset_given_die returns 1770*4d9fdb46SRobert Mustacchi the global debug_info section offset of the CU die 1771*4d9fdb46SRobert Mustacchi that is the CU containing the given_die 1772*4d9fdb46SRobert Mustacchi (the passed in DIE can be any DIE). 1773*4d9fdb46SRobert Mustacchi This information makes it possible for a consumer to 1774*4d9fdb46SRobert Mustacchi find and print CU context information for any die. 1775*4d9fdb46SRobert Mustacchi See also dwarf_get_cu_die_offset_given_cu_header_offset. */ 1776*4d9fdb46SRobert Mustacchi int dwarf_CU_dieoffset_given_die(Dwarf_Die /*given_die*/, 177707dc1947SRichard Lowe Dwarf_Off* /*return_offset*/, 177807dc1947SRichard Lowe Dwarf_Error* /*error*/); 177907dc1947SRichard Lowe 1780*4d9fdb46SRobert Mustacchi /* dwarf_die_CU_offset returns the CU relative offset 1781*4d9fdb46SRobert Mustacchi not the global debug_info section offset, given 1782*4d9fdb46SRobert Mustacchi any DIE in the CU. See also dwarf_CU_dieoffset_given_die. 1783*4d9fdb46SRobert Mustacchi */ 17847c478bd9Sstevel@tonic-gate int dwarf_die_CU_offset(Dwarf_Die /*die*/, 178507dc1947SRichard Lowe Dwarf_Off* /*return_offset*/, 178607dc1947SRichard Lowe Dwarf_Error* /*error*/); 178707dc1947SRichard Lowe 178807dc1947SRichard Lowe int dwarf_die_CU_offset_range(Dwarf_Die /*die*/, 178907dc1947SRichard Lowe Dwarf_Off* /*return_CU_header_offset*/, 179007dc1947SRichard Lowe Dwarf_Off* /*return_CU_length_bytes*/, 179107dc1947SRichard Lowe Dwarf_Error* /*error*/); 17927c478bd9Sstevel@tonic-gate 1793*4d9fdb46SRobert Mustacchi int dwarf_attr (Dwarf_Die /*die*/, 1794*4d9fdb46SRobert Mustacchi Dwarf_Half /*attr*/, 179507dc1947SRichard Lowe Dwarf_Attribute * /*returned_attr*/, 179607dc1947SRichard Lowe Dwarf_Error* /*error*/); 17977c478bd9Sstevel@tonic-gate 1798*4d9fdb46SRobert Mustacchi int dwarf_die_text(Dwarf_Die /*die*/, 1799*4d9fdb46SRobert Mustacchi Dwarf_Half /*attr*/, 1800*4d9fdb46SRobert Mustacchi char ** /*ret_name*/, 1801*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 1802*4d9fdb46SRobert Mustacchi 1803*4d9fdb46SRobert Mustacchi int dwarf_diename(Dwarf_Die /*die*/, 180407dc1947SRichard Lowe char ** /*diename*/, 180507dc1947SRichard Lowe Dwarf_Error* /*error*/); 180607dc1947SRichard Lowe 180707dc1947SRichard Lowe /* Returns the abbrev code of the die. Cannot fail. */ 180807dc1947SRichard Lowe int dwarf_die_abbrev_code(Dwarf_Die /*die */); 180907dc1947SRichard Lowe 1810*4d9fdb46SRobert Mustacchi /* Returns a flag through ab_has_child. Non-zero if 1811*4d9fdb46SRobert Mustacchi the DIE has children, zero if it does not. */ 1812*4d9fdb46SRobert Mustacchi int dwarf_die_abbrev_children_flag(Dwarf_Die /*die*/, 1813*4d9fdb46SRobert Mustacchi Dwarf_Half * /*ab_has_child*/); 1814*4d9fdb46SRobert Mustacchi 1815*4d9fdb46SRobert Mustacchi /* Validate the sibling DIE. This only makes sense to call 1816*4d9fdb46SRobert Mustacchi if the sibling's DIEs have been travsersed and 1817*4d9fdb46SRobert Mustacchi dwarf_child called on each, 1818*4d9fdb46SRobert Mustacchi so that the last DIE dwarf_child saw was the last. 1819*4d9fdb46SRobert Mustacchi Essentially ensuring that (after such traversal) that we 1820*4d9fdb46SRobert Mustacchi are in the same place a sibling attribute would identify. 1821*4d9fdb46SRobert Mustacchi In case we return DW_DLV_ERROR, the global offset of the last 1822*4d9fdb46SRobert Mustacchi DIE traversed by dwarf_child is returned through *offset */ 1823*4d9fdb46SRobert Mustacchi int dwarf_validate_die_sibling(Dwarf_Die /*sibling*/,Dwarf_Off* /*offset*/); 1824*4d9fdb46SRobert Mustacchi 1825*4d9fdb46SRobert Mustacchi /* convenience functions, alternative to using dwarf_attrlist */ 1826*4d9fdb46SRobert Mustacchi int dwarf_hasattr(Dwarf_Die /*die*/, 1827*4d9fdb46SRobert Mustacchi Dwarf_Half /*attr*/, 1828*4d9fdb46SRobert Mustacchi Dwarf_Bool * /*returned_bool*/, 1829*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 18307c478bd9Sstevel@tonic-gate 1831*4d9fdb46SRobert Mustacchi /* Returns the children offsets for the given offset */ 1832*4d9fdb46SRobert Mustacchi int dwarf_offset_list(Dwarf_Debug /*dbg*/, 1833*4d9fdb46SRobert Mustacchi Dwarf_Off /*offset*/, 1834*4d9fdb46SRobert Mustacchi Dwarf_Bool /*is_info*/, 1835*4d9fdb46SRobert Mustacchi Dwarf_Off ** /*offbuf*/, 1836*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*offcnt*/, 1837*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 1838*4d9fdb46SRobert Mustacchi 1839*4d9fdb46SRobert Mustacchi /* BEGIN: loclist_c interfaces 1840*4d9fdb46SRobert Mustacchi NEW October 2015. 1841*4d9fdb46SRobert Mustacchi This works for any attribute that identifies 1842*4d9fdb46SRobert Mustacchi a loclist or a locexpr. When the attribute is a locexpr 1843*4d9fdb46SRobert Mustacchi a single loclist (created by libdwarf) 1844*4d9fdb46SRobert Mustacchi is attached to loclist_head. */ 1845*4d9fdb46SRobert Mustacchi int dwarf_get_loclist_c (Dwarf_Attribute /*attr*/, 1846*4d9fdb46SRobert Mustacchi Dwarf_Loc_Head_c * /*loclist_head*/, 1847*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*locCount*/, 1848*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 1849*4d9fdb46SRobert Mustacchi 1850*4d9fdb46SRobert Mustacchi #define DW_LKIND_expression 0 /* DWARF2,3,4*/ 1851*4d9fdb46SRobert Mustacchi #define DW_LKIND_loclist 1 /* DWARF 2,3,4 */ 1852*4d9fdb46SRobert Mustacchi #define DW_LKIND_GNU_exp_list 2 /* GNU DWARF4 .dwo extension */ 1853*4d9fdb46SRobert Mustacchi #define DW_LKIND_loclists 5 /* DWARF5 loclists */ 1854*4d9fdb46SRobert Mustacchi #define DW_LKIND_unknown 99 1855*4d9fdb46SRobert Mustacchi 1856*4d9fdb46SRobert Mustacchi /* DWARF2 kind is 2. DWARF3/4 kind is 3, DWARF5 kind is 5 */ 1857*4d9fdb46SRobert Mustacchi int 1858*4d9fdb46SRobert Mustacchi dwarf_get_loclist_head_kind(Dwarf_Loc_Head_c /*ll_header*/, 1859*4d9fdb46SRobert Mustacchi unsigned int * /*lkind*/, 1860*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 1861*4d9fdb46SRobert Mustacchi 1862*4d9fdb46SRobert Mustacchi int dwarf_get_locdesc_entry_d(Dwarf_Loc_Head_c /*loclist_head*/, 1863*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*index*/, 1864*4d9fdb46SRobert Mustacchi /* identifies type of locdesc entry*/ 1865*4d9fdb46SRobert Mustacchi Dwarf_Small * /*lle_value_out*/, 1866*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*rawlowpc*/, 1867*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*rawhipc*/, 1868*4d9fdb46SRobert Mustacchi Dwarf_Bool * /*debug_addr_unavailable*/, 1869*4d9fdb46SRobert Mustacchi Dwarf_Addr * /*lowpc_out*/, 1870*4d9fdb46SRobert Mustacchi Dwarf_Addr * /*hipc_out*/, 1871*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*loclist_count_out*/, 1872*4d9fdb46SRobert Mustacchi Dwarf_Locdesc_c * /*locentry_out*/, 1873*4d9fdb46SRobert Mustacchi Dwarf_Small * /*loclist_source_out*/, /* 0,1, or 2 */ 1874*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*expression_offset_out*/, 1875*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*locdesc_offset_out*/, 1876*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 1877*4d9fdb46SRobert Mustacchi 1878*4d9fdb46SRobert Mustacchi int dwarf_get_locdesc_entry_c(Dwarf_Loc_Head_c /*loclist_head*/, 1879*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*index*/, 1880*4d9fdb46SRobert Mustacchi /* identifies type of locdesc entry*/ 1881*4d9fdb46SRobert Mustacchi Dwarf_Small * /*lle_value_out*/, 1882*4d9fdb46SRobert Mustacchi Dwarf_Addr * /*lowpc_out*/, 1883*4d9fdb46SRobert Mustacchi Dwarf_Addr * /*hipc_out*/, 1884*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*loclist_count_out*/, 1885*4d9fdb46SRobert Mustacchi Dwarf_Locdesc_c * /*locentry_out*/, 1886*4d9fdb46SRobert Mustacchi Dwarf_Small * /*loclist_source_out*/, /* 0,1, or 2 */ 1887*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*expression_offset_out*/, 1888*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*locdesc_offset_out*/, 1889*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 1890*4d9fdb46SRobert Mustacchi 1891*4d9fdb46SRobert Mustacchi /* New June 2020 for DWARF5 (and all earlier). */ 1892*4d9fdb46SRobert Mustacchi int 1893*4d9fdb46SRobert Mustacchi dwarf_get_location_op_value_d(Dwarf_Locdesc_c /*locdesc*/, 1894*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*index*/, 1895*4d9fdb46SRobert Mustacchi Dwarf_Small * /*atom_out*/, 1896*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*operand1*/, 1897*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*operand2*/, 1898*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*operand3*/, 1899*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*rawop1*/, 1900*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*rawop2*/, 1901*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*rawop3*/, 1902*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*offset_for_branch*/, 190307dc1947SRichard Lowe Dwarf_Error* /*error*/); 19047c478bd9Sstevel@tonic-gate 1905*4d9fdb46SRobert Mustacchi int dwarf_get_location_op_value_c(Dwarf_Locdesc_c /*locdesc*/, 1906*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*index*/, 1907*4d9fdb46SRobert Mustacchi Dwarf_Small * /*atom_out*/, 1908*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*operand1*/, 1909*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*operand2*/, 1910*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*operand3*/, 1911*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*offset_for_branch*/, 1912*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 1913*4d9fdb46SRobert Mustacchi 1914*4d9fdb46SRobert Mustacchi int dwarf_loclist_from_expr_c(Dwarf_Debug /*dbg*/, 1915*4d9fdb46SRobert Mustacchi Dwarf_Ptr /*expression_in*/, 1916*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*expression_length*/, 1917*4d9fdb46SRobert Mustacchi Dwarf_Half /*address_size*/, 1918*4d9fdb46SRobert Mustacchi Dwarf_Half /*offset_size*/, 1919*4d9fdb46SRobert Mustacchi Dwarf_Small /*dwarf_version*/, 1920*4d9fdb46SRobert Mustacchi Dwarf_Loc_Head_c* /*loc_head*/, 1921*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*listlen*/, 1922*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 1923*4d9fdb46SRobert Mustacchi 1924*4d9fdb46SRobert Mustacchi /* This frees all memory allocated by the applicable 1925*4d9fdb46SRobert Mustacchi dwarf_get_loclist_c */ 1926*4d9fdb46SRobert Mustacchi void dwarf_loc_head_c_dealloc(Dwarf_Loc_Head_c /*loclist_head*/); 1927*4d9fdb46SRobert Mustacchi 1928*4d9fdb46SRobert Mustacchi /* END: loclist_c interfaces */ 1929*4d9fdb46SRobert Mustacchi 1930*4d9fdb46SRobert Mustacchi 1931*4d9fdb46SRobert Mustacchi /* As of 2015 the preferred interface 1932*4d9fdb46SRobert Mustacchi is dwarf_get_loclist_c 1933*4d9fdb46SRobert Mustacchi and only dwarf_get_loclist_c will work 1934*4d9fdb46SRobert Mustacchi for DWARF5 (and also all earlier versions). */ 1935*4d9fdb46SRobert Mustacchi int dwarf_loclist_n(Dwarf_Attribute /*attr*/, 1936*4d9fdb46SRobert Mustacchi Dwarf_Locdesc*** /*llbuf*/, 193707dc1947SRichard Lowe Dwarf_Signed * /*locCount*/, 193807dc1947SRichard Lowe Dwarf_Error* /*error*/); 193949d3bc91SRichard Lowe 1940*4d9fdb46SRobert Mustacchi /* The original interfaces. Please do not use this. */ 194149d3bc91SRichard Lowe int dwarf_loclist(Dwarf_Attribute /*attr*/, /* inflexible! */ 1942*4d9fdb46SRobert Mustacchi Dwarf_Locdesc** /*llbuf*/, 194307dc1947SRichard Lowe Dwarf_Signed * /*locCount*/, 194407dc1947SRichard Lowe Dwarf_Error* /*error*/); 194507dc1947SRichard Lowe 194607dc1947SRichard Lowe /* Extracts a dwarf expression from an expression byte stream. 194707dc1947SRichard Lowe Useful to get expressions from DW_CFA_def_cfa_expression 194807dc1947SRichard Lowe DW_CFA_expression DW_CFA_val_expression expression bytes. 1949*4d9fdb46SRobert Mustacchi 27 April 2009: dwarf_loclist_from_expr interface with 1950*4d9fdb46SRobert Mustacchi no addr_size is obsolete but supported, 1951*4d9fdb46SRobert Mustacchi use dwarf_loclist_from_expr_a instead. 195207dc1947SRichard Lowe */ 1953*4d9fdb46SRobert Mustacchi int dwarf_loclist_from_expr(Dwarf_Debug /*dbg*/, 1954*4d9fdb46SRobert Mustacchi Dwarf_Ptr /* expression_in*/, 1955*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /* expression_length*/, 1956*4d9fdb46SRobert Mustacchi Dwarf_Locdesc ** /* llbuf*/, 1957*4d9fdb46SRobert Mustacchi Dwarf_Signed * /*listlen*/, 1958*4d9fdb46SRobert Mustacchi Dwarf_Error * /* error*/ ); 1959*4d9fdb46SRobert Mustacchi 1960*4d9fdb46SRobert Mustacchi /* dwarf_loclist_from_expr_a new 27 Apr 2009: 1961*4d9fdb46SRobert Mustacchi added addr_size argument. */ 1962*4d9fdb46SRobert Mustacchi int dwarf_loclist_from_expr_a(Dwarf_Debug /*dbg*/, 1963*4d9fdb46SRobert Mustacchi Dwarf_Ptr /*expression_in*/, 1964*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*expression_length*/, 1965*4d9fdb46SRobert Mustacchi Dwarf_Half /*addr_size*/, 1966*4d9fdb46SRobert Mustacchi Dwarf_Locdesc ** /*llbuf*/, 1967*4d9fdb46SRobert Mustacchi Dwarf_Signed * /*listlen*/, 1968*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 19697c478bd9Sstevel@tonic-gate 1970*4d9fdb46SRobert Mustacchi /* dwarf_loclist_from_expr_b new 13 Nov 2012: 1971*4d9fdb46SRobert Mustacchi added dwarf_version (DWARF version number 1972*4d9fdb46SRobert Mustacchi of the applicable compilation unit) 1973*4d9fdb46SRobert Mustacchi and offset_size arguments. Added for 1974*4d9fdb46SRobert Mustacchi DW_OP_GNU_implicit_pointer. */ 1975*4d9fdb46SRobert Mustacchi int dwarf_loclist_from_expr_b(Dwarf_Debug /*dbg*/, 1976*4d9fdb46SRobert Mustacchi Dwarf_Ptr /*expression_in*/ , 1977*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*expression_length*/ , 1978*4d9fdb46SRobert Mustacchi Dwarf_Half /*addr_size*/ , 1979*4d9fdb46SRobert Mustacchi Dwarf_Half /*offset_size*/ , 1980*4d9fdb46SRobert Mustacchi Dwarf_Small /*dwarf_version*/ , 1981*4d9fdb46SRobert Mustacchi Dwarf_Locdesc ** /*llbuf*/ , 1982*4d9fdb46SRobert Mustacchi Dwarf_Signed * /*listlen*/ , 1983*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/ ); 1984*4d9fdb46SRobert Mustacchi 1985*4d9fdb46SRobert Mustacchi int dwarf_lowpc(Dwarf_Die /*die*/, 198607dc1947SRichard Lowe Dwarf_Addr * /*returned_addr*/, 198707dc1947SRichard Lowe Dwarf_Error* /*error*/); 19887c478bd9Sstevel@tonic-gate 1989*4d9fdb46SRobert Mustacchi /* When the highpc attribute is of class 'constant' 1990*4d9fdb46SRobert Mustacchi it is not an address, it is an offset from the 1991*4d9fdb46SRobert Mustacchi base address (such as lowpc) of the function. 1992*4d9fdb46SRobert Mustacchi This is therefore a required interface for DWARF4 1993*4d9fdb46SRobert Mustacchi style DW_AT_highpc. */ 1994*4d9fdb46SRobert Mustacchi int dwarf_highpc_b(Dwarf_Die /*die*/, 1995*4d9fdb46SRobert Mustacchi Dwarf_Addr * /*return_value*/, 1996*4d9fdb46SRobert Mustacchi Dwarf_Half * /*return_form*/, 1997*4d9fdb46SRobert Mustacchi enum Dwarf_Form_Class * /*return_class*/, 1998*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 1999*4d9fdb46SRobert Mustacchi 2000*4d9fdb46SRobert Mustacchi /* This works for DWARF2 and DWARF3 styles of DW_AT_highpc, 2001*4d9fdb46SRobert Mustacchi but not for the DWARF4 class constant forms. 2002*4d9fdb46SRobert Mustacchi If the FORM is of class constant this returns an error */ 2003*4d9fdb46SRobert Mustacchi int dwarf_highpc(Dwarf_Die /*die*/, 200407dc1947SRichard Lowe Dwarf_Addr * /*returned_addr*/, 200507dc1947SRichard Lowe Dwarf_Error* /*error*/); 20067c478bd9Sstevel@tonic-gate 2007*4d9fdb46SRobert Mustacchi /* New January 2016. */ 2008*4d9fdb46SRobert Mustacchi int dwarf_dietype_offset(Dwarf_Die /*die*/, 2009*4d9fdb46SRobert Mustacchi Dwarf_Off * /*return_off*/, 2010*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 20117c478bd9Sstevel@tonic-gate 2012*4d9fdb46SRobert Mustacchi int dwarf_bytesize(Dwarf_Die /*die*/, 2013*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*returned_size*/, 201407dc1947SRichard Lowe Dwarf_Error* /*error*/); 20157c478bd9Sstevel@tonic-gate 2016*4d9fdb46SRobert Mustacchi int dwarf_bitsize(Dwarf_Die /*die*/, 201707dc1947SRichard Lowe Dwarf_Unsigned * /*returned_size*/, 201807dc1947SRichard Lowe Dwarf_Error* /*error*/); 20197c478bd9Sstevel@tonic-gate 2020*4d9fdb46SRobert Mustacchi int dwarf_bitoffset(Dwarf_Die /*die*/, 202107dc1947SRichard Lowe Dwarf_Unsigned * /*returned_offset*/, 202207dc1947SRichard Lowe Dwarf_Error* /*error*/); 20237c478bd9Sstevel@tonic-gate 2024*4d9fdb46SRobert Mustacchi int dwarf_srclang(Dwarf_Die /*die*/, 202507dc1947SRichard Lowe Dwarf_Unsigned * /*returned_lang*/, 202607dc1947SRichard Lowe Dwarf_Error* /*error*/); 20277c478bd9Sstevel@tonic-gate 2028*4d9fdb46SRobert Mustacchi int dwarf_arrayorder(Dwarf_Die /*die*/, 202907dc1947SRichard Lowe Dwarf_Unsigned * /*returned_order*/, 203007dc1947SRichard Lowe Dwarf_Error* /*error*/); 20317c478bd9Sstevel@tonic-gate 20327c478bd9Sstevel@tonic-gate /* end of convenience function list */ 20337c478bd9Sstevel@tonic-gate 20347c478bd9Sstevel@tonic-gate /* this is the main interface to attributes of a DIE */ 2035*4d9fdb46SRobert Mustacchi int dwarf_attrlist(Dwarf_Die /*die*/, 2036*4d9fdb46SRobert Mustacchi Dwarf_Attribute** /*attrbuf*/, 203707dc1947SRichard Lowe Dwarf_Signed * /*attrcount*/, 203807dc1947SRichard Lowe Dwarf_Error* /*error*/); 20397c478bd9Sstevel@tonic-gate 20407c478bd9Sstevel@tonic-gate /* query operations for attributes */ 2041*4d9fdb46SRobert Mustacchi int dwarf_hasform(Dwarf_Attribute /*attr*/, 2042*4d9fdb46SRobert Mustacchi Dwarf_Half /*form*/, 204307dc1947SRichard Lowe Dwarf_Bool * /*returned_bool*/, 204407dc1947SRichard Lowe Dwarf_Error* /*error*/); 20457c478bd9Sstevel@tonic-gate 2046*4d9fdb46SRobert Mustacchi int dwarf_whatform(Dwarf_Attribute /*attr*/, 2047*4d9fdb46SRobert Mustacchi Dwarf_Half * /*returned_final_form*/, 204807dc1947SRichard Lowe Dwarf_Error* /*error*/); 20497c478bd9Sstevel@tonic-gate 2050*4d9fdb46SRobert Mustacchi int dwarf_whatform_direct(Dwarf_Attribute /*attr*/, 2051*4d9fdb46SRobert Mustacchi Dwarf_Half * /*returned_initial_form*/, 205207dc1947SRichard Lowe Dwarf_Error* /*error*/); 2053*4d9fdb46SRobert Mustacchi int dwarf_whatattr(Dwarf_Attribute /*attr*/, 205407dc1947SRichard Lowe Dwarf_Half * /*returned_attr_num*/, 205507dc1947SRichard Lowe Dwarf_Error* /*error*/); 20567c478bd9Sstevel@tonic-gate 2057*4d9fdb46SRobert Mustacchi /* 20587c478bd9Sstevel@tonic-gate The following are concerned with the Primary Interface: getting 20597c478bd9Sstevel@tonic-gate the actual data values. One function per 'kind' of FORM. 20607c478bd9Sstevel@tonic-gate */ 206107dc1947SRichard Lowe /* dwarf_formref returns, thru return_offset, a CU-relative offset 206207dc1947SRichard Lowe and does not allow DW_FORM_ref_addr*/ 2063*4d9fdb46SRobert Mustacchi int dwarf_formref(Dwarf_Attribute /*attr*/, 206407dc1947SRichard Lowe Dwarf_Off* /*return_offset*/, 206507dc1947SRichard Lowe Dwarf_Error* /*error*/); 2066*4d9fdb46SRobert Mustacchi /* dwarf_global_formref returns, thru return_offset, 206707dc1947SRichard Lowe a debug_info-relative offset and does allow all reference forms*/ 2068*4d9fdb46SRobert Mustacchi int dwarf_global_formref(Dwarf_Attribute /*attr*/, 206907dc1947SRichard Lowe Dwarf_Off* /*return_offset*/, 207007dc1947SRichard Lowe Dwarf_Error* /*error*/); 207107dc1947SRichard Lowe 207207dc1947SRichard Lowe /* dwarf_formsig8 returns in the caller-provided 8 byte area 207307dc1947SRichard Lowe the 8 bytes of a DW_FORM_ref_sig8. Not a string. */ 207407dc1947SRichard Lowe int dwarf_formsig8(Dwarf_Attribute /*attr*/, 207507dc1947SRichard Lowe Dwarf_Sig8 * /*returned sig bytes*/, 207607dc1947SRichard Lowe Dwarf_Error* /*error*/); 2077*4d9fdb46SRobert Mustacchi /* dwarf_formsig8_const returns in the caller-provided 8 byte area 2078*4d9fdb46SRobert Mustacchi the 8 bytes of a form const (DW_FORM_data8). Not a string. */ 2079*4d9fdb46SRobert Mustacchi int dwarf_formsig8_const(Dwarf_Attribute /*attr*/, 2080*4d9fdb46SRobert Mustacchi Dwarf_Sig8 * /*returned sig bytes*/, 2081*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 20827c478bd9Sstevel@tonic-gate 2083*4d9fdb46SRobert Mustacchi int dwarf_formaddr(Dwarf_Attribute /*attr*/, 208407dc1947SRichard Lowe Dwarf_Addr * /*returned_addr*/, 208507dc1947SRichard Lowe Dwarf_Error* /*error*/); 20867c478bd9Sstevel@tonic-gate 2087*4d9fdb46SRobert Mustacchi /* Part of DebugFission. So a consumer can get the index when 2088*4d9fdb46SRobert Mustacchi the object with the actual .debug_addr section is 2089*4d9fdb46SRobert Mustacchi elsewhere. And so a print application can 2090*4d9fdb46SRobert Mustacchi print the index. New May 2014*/ 2091*4d9fdb46SRobert Mustacchi int dwarf_get_debug_addr_index(Dwarf_Attribute /*attr*/, 2092*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*return_index*/, 2093*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 2094*4d9fdb46SRobert Mustacchi 20957c478bd9Sstevel@tonic-gate int dwarf_formflag(Dwarf_Attribute /*attr*/, 209607dc1947SRichard Lowe Dwarf_Bool * /*returned_bool*/, 209707dc1947SRichard Lowe Dwarf_Error* /*error*/); 20987c478bd9Sstevel@tonic-gate 2099*4d9fdb46SRobert Mustacchi int dwarf_formdata16(Dwarf_Attribute /*attr*/, 2100*4d9fdb46SRobert Mustacchi Dwarf_Form_Data16 * /*returned_val*/, 2101*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 2102*4d9fdb46SRobert Mustacchi 2103*4d9fdb46SRobert Mustacchi int dwarf_formudata(Dwarf_Attribute /*attr*/, 210407dc1947SRichard Lowe Dwarf_Unsigned * /*returned_val*/, 210507dc1947SRichard Lowe Dwarf_Error* /*error*/); 21067c478bd9Sstevel@tonic-gate 2107*4d9fdb46SRobert Mustacchi int dwarf_formsdata(Dwarf_Attribute /*attr*/, 210807dc1947SRichard Lowe Dwarf_Signed * /*returned_val*/, 210907dc1947SRichard Lowe Dwarf_Error* /*error*/); 21107c478bd9Sstevel@tonic-gate 2111*4d9fdb46SRobert Mustacchi int dwarf_formblock(Dwarf_Attribute /*attr*/, 211207dc1947SRichard Lowe Dwarf_Block ** /*returned_block*/, 211307dc1947SRichard Lowe Dwarf_Error* /*error*/); 21147c478bd9Sstevel@tonic-gate 2115*4d9fdb46SRobert Mustacchi int dwarf_formstring(Dwarf_Attribute /*attr*/, 211607dc1947SRichard Lowe char ** /*returned_string*/, 211707dc1947SRichard Lowe Dwarf_Error* /*error*/); 211807dc1947SRichard Lowe 2119*4d9fdb46SRobert Mustacchi /* DebugFission. So a DWARF print application can 2120*4d9fdb46SRobert Mustacchi get the string index (DW_FORM_strx) and print it. 2121*4d9fdb46SRobert Mustacchi A convenience function. 2122*4d9fdb46SRobert Mustacchi New May 2014. */ 2123*4d9fdb46SRobert Mustacchi int dwarf_get_debug_str_index(Dwarf_Attribute /*attr*/, 2124*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*return_index*/, 2125*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 2126*4d9fdb46SRobert Mustacchi 2127*4d9fdb46SRobert Mustacchi 212807dc1947SRichard Lowe int dwarf_formexprloc(Dwarf_Attribute /*attr*/, 212907dc1947SRichard Lowe Dwarf_Unsigned * /*return_exprlen*/, 213007dc1947SRichard Lowe Dwarf_Ptr * /*block_ptr*/, 213107dc1947SRichard Lowe Dwarf_Error * /*error*/); 213207dc1947SRichard Lowe 21337c478bd9Sstevel@tonic-gate 21347c478bd9Sstevel@tonic-gate /* end attribute query operations. */ 21357c478bd9Sstevel@tonic-gate 2136*4d9fdb46SRobert Mustacchi /* Start line number operations */ 2137*4d9fdb46SRobert Mustacchi /* dwarf_srclines is the original interface from 1993. */ 2138*4d9fdb46SRobert Mustacchi int dwarf_srclines(Dwarf_Die /*die*/, 2139*4d9fdb46SRobert Mustacchi Dwarf_Line** /*linebuf*/, 2140*4d9fdb46SRobert Mustacchi Dwarf_Signed * /*linecount*/, 2141*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 2142*4d9fdb46SRobert Mustacchi 2143*4d9fdb46SRobert Mustacchi 2144*4d9fdb46SRobert Mustacchi /* If we have two-level line tables, this will return the 2145*4d9fdb46SRobert Mustacchi logicals table in linebuf and the actuals table in 2146*4d9fdb46SRobert Mustacchi linebuf_actuals. For old-style (one-level) tables, it 2147*4d9fdb46SRobert Mustacchi will return the single table through linebuf, and the 2148*4d9fdb46SRobert Mustacchi value returned through linecount_actuals will be 0. 2149*4d9fdb46SRobert Mustacchi The actual version number is returned through version. 2150*4d9fdb46SRobert Mustacchi For two-level line tables, the version returned will 2151*4d9fdb46SRobert Mustacchi be 0xf006. This interface can return data from two-level 2152*4d9fdb46SRobert Mustacchi line tables, which are experimental. 2153*4d9fdb46SRobert Mustacchi Most users will not wish to use dwarf_srclines_two_level */ 2154*4d9fdb46SRobert Mustacchi int dwarf_srclines_two_level(Dwarf_Die /*die*/, 2155*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*version*/, 2156*4d9fdb46SRobert Mustacchi Dwarf_Line** /*linebuf*/, 215707dc1947SRichard Lowe Dwarf_Signed * /*linecount*/, 2158*4d9fdb46SRobert Mustacchi Dwarf_Line** /*linebuf_actuals*/, 2159*4d9fdb46SRobert Mustacchi Dwarf_Signed * /*linecount_actuals*/, 216007dc1947SRichard Lowe Dwarf_Error* /*error*/); 216107dc1947SRichard Lowe 2162*4d9fdb46SRobert Mustacchi /* dwarf_srclines_dealloc, created July 2005, is the 2163*4d9fdb46SRobert Mustacchi appropriate method for deallocating what dwarf_srclines 2164*4d9fdb46SRobert Mustacchi and dwarf_srclines_two_level return. 2165*4d9fdb46SRobert Mustacchi More complete free than using dwarf_dealloc directly. 2166*4d9fdb46SRobert Mustacchi 2167*4d9fdb46SRobert Mustacchi When dwarf_srclines_two_level returns two line tables 2168*4d9fdb46SRobert Mustacchi user code should call dwarf_srclines_dealloc 2169*4d9fdb46SRobert Mustacchi once on each linebuf returned by dwarf_srclines_two_level 2170*4d9fdb46SRobert Mustacchi first on linebuf_actuals and then on linebuf{_logicals}. */ 2171*4d9fdb46SRobert Mustacchi 2172*4d9fdb46SRobert Mustacchi void dwarf_srclines_dealloc(Dwarf_Debug /*dbg*/, 217307dc1947SRichard Lowe Dwarf_Line* /*linebuf*/, 217407dc1947SRichard Lowe Dwarf_Signed /*count */); 217507dc1947SRichard Lowe 21767c478bd9Sstevel@tonic-gate 2177*4d9fdb46SRobert Mustacchi /* New October 2015, must be used to deallocating 2178*4d9fdb46SRobert Mustacchi what is allocated by dwarf_srclines_b and 2179*4d9fdb46SRobert Mustacchi dwarf_srclines_from_linecontext use. 2180*4d9fdb46SRobert Mustacchi Works for DWARF2,3,4,5 and for experimental line tables. 2181*4d9fdb46SRobert Mustacchi New work should use the new Dwarf_Line_Context 2182*4d9fdb46SRobert Mustacchi interface. 2183*4d9fdb46SRobert Mustacchi This interface only reads the line table header, so 2184*4d9fdb46SRobert Mustacchi it takes relatively little time. 2185*4d9fdb46SRobert Mustacchi *is_single_table will be set non-zero for all standard dwarf line sections. 2186*4d9fdb46SRobert Mustacchi *is_single_table will be set zero for line sections with the 2187*4d9fdb46SRobert Mustacchi two_level line table extension (which will have *version_out 0xf006). */ 2188*4d9fdb46SRobert Mustacchi int dwarf_srclines_b(Dwarf_Die /*die*/, 2189*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /* version_out*/, 2190*4d9fdb46SRobert Mustacchi Dwarf_Small * /* table_count */, 2191*4d9fdb46SRobert Mustacchi Dwarf_Line_Context * /* linecontext*/, 2192*4d9fdb46SRobert Mustacchi Dwarf_Error * /* error*/); 2193*4d9fdb46SRobert Mustacchi 2194*4d9fdb46SRobert Mustacchi /* Functions passing in a Dwarf_Line_Context are only 2195*4d9fdb46SRobert Mustacchi available if dwarf_srclines_b() was used to access 2196*4d9fdb46SRobert Mustacchi line table information. */ 2197*4d9fdb46SRobert Mustacchi /* New October 2015. Returns line details. 2198*4d9fdb46SRobert Mustacchi Works for DWARF2,3,4,5. If linecount 2199*4d9fdb46SRobert Mustacchi returned is zero this is a line table with no lines.*/ 2200*4d9fdb46SRobert Mustacchi int dwarf_srclines_from_linecontext( 2201*4d9fdb46SRobert Mustacchi Dwarf_Line_Context /*line_context*/, 2202*4d9fdb46SRobert Mustacchi Dwarf_Line ** /*linebuf*/, 2203*4d9fdb46SRobert Mustacchi Dwarf_Signed * /*linecount*/, 2204*4d9fdb46SRobert Mustacchi Dwarf_Error * /* error*/); 2205*4d9fdb46SRobert Mustacchi 2206*4d9fdb46SRobert Mustacchi /* New October 2015. Returns line details. 2207*4d9fdb46SRobert Mustacchi Works for DWARF2,3,4,5 and for experimental 2208*4d9fdb46SRobert Mustacchi two-level line tables. A single level table will 2209*4d9fdb46SRobert Mustacchi have *linebuf_actuals and *linecount_actuals set 2210*4d9fdb46SRobert Mustacchi to 0. */ 2211*4d9fdb46SRobert Mustacchi int dwarf_srclines_two_level_from_linecontext( 2212*4d9fdb46SRobert Mustacchi Dwarf_Line_Context /*line_context*/, 2213*4d9fdb46SRobert Mustacchi Dwarf_Line ** /*linebuf */, 2214*4d9fdb46SRobert Mustacchi Dwarf_Signed * /*linecount*/, 2215*4d9fdb46SRobert Mustacchi Dwarf_Line ** /*linebuf_actuals*/, 2216*4d9fdb46SRobert Mustacchi Dwarf_Signed * /*linecount_actuals*/, 2217*4d9fdb46SRobert Mustacchi Dwarf_Error * /* error*/); 2218*4d9fdb46SRobert Mustacchi 2219*4d9fdb46SRobert Mustacchi /* dwarf_srclines_dealloc_b(), created October 2015, is the 2220*4d9fdb46SRobert Mustacchi appropriate method for deallocating everything 2221*4d9fdb46SRobert Mustacchi and dwarf_srclines_from_linecontext(), 2222*4d9fdb46SRobert Mustacchi dwarf_srclines_twolevel_from_linecontext(), 2223*4d9fdb46SRobert Mustacchi and dwarf_srclines_b() allocate. */ 2224*4d9fdb46SRobert Mustacchi void dwarf_srclines_dealloc_b(Dwarf_Line_Context /*line_context*/); 2225*4d9fdb46SRobert Mustacchi 2226*4d9fdb46SRobert Mustacchi /* New October 2015. */ 2227*4d9fdb46SRobert Mustacchi /* The offset is in the relevent .debug_line or .debug_line.dwo 2228*4d9fdb46SRobert Mustacchi section (and in a split dwarf package file includes) 2229*4d9fdb46SRobert Mustacchi the base line table offset). */ 2230*4d9fdb46SRobert Mustacchi int dwarf_srclines_table_offset(Dwarf_Line_Context /*line_context*/, 2231*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*offset*/, 2232*4d9fdb46SRobert Mustacchi Dwarf_Error * /* error*/); 2233*4d9fdb46SRobert Mustacchi 2234*4d9fdb46SRobert Mustacchi /* New October 2015. */ 2235*4d9fdb46SRobert Mustacchi /* Compilation Directory name for the current CU. 2236*4d9fdb46SRobert Mustacchi section (and in a split dwarf package file includes) 2237*4d9fdb46SRobert Mustacchi the base line table offset). Do not free() the string, 2238*4d9fdb46SRobert Mustacchi it is in a dwarf section. */ 2239*4d9fdb46SRobert Mustacchi int dwarf_srclines_comp_dir(Dwarf_Line_Context /*line_context*/, 2240*4d9fdb46SRobert Mustacchi const char ** /*compilation_directory*/, 2241*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 2242*4d9fdb46SRobert Mustacchi 2243*4d9fdb46SRobert Mustacchi /* New October 2015. Part of the two-level line table extension. */ 2244*4d9fdb46SRobert Mustacchi /* Count is the real count of suprogram array entries. */ 2245*4d9fdb46SRobert Mustacchi int dwarf_srclines_subprog_count(Dwarf_Line_Context /*line_context*/, 2246*4d9fdb46SRobert Mustacchi Dwarf_Signed * /*count*/, 2247*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 2248*4d9fdb46SRobert Mustacchi 2249*4d9fdb46SRobert Mustacchi /* New October 2015. */ 2250*4d9fdb46SRobert Mustacchi /* Index starts with 1, last is 'count' */ 2251*4d9fdb46SRobert Mustacchi int dwarf_srclines_subprog_data(Dwarf_Line_Context /*line_context*/, 2252*4d9fdb46SRobert Mustacchi Dwarf_Signed /*index*/, 2253*4d9fdb46SRobert Mustacchi const char ** /*name*/, 2254*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*decl_file*/, 2255*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*decl_line*/, 2256*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 2257*4d9fdb46SRobert Mustacchi 2258*4d9fdb46SRobert Mustacchi /* New October 2015. */ 2259*4d9fdb46SRobert Mustacchi /* Count is the real count of files array entries. 2260*4d9fdb46SRobert Mustacchi This remains supported though it is pretty useless for 2261*4d9fdb46SRobert Mustacchi DWARF5. To process DWARF5 as well 2262*4d9fdb46SRobert Mustacchi as DWARF 2,3,4 (in a uniform fashion) 2263*4d9fdb46SRobert Mustacchi use dwarf_srclines_files_indexes() instead. 2264*4d9fdb46SRobert Mustacchi */ 2265*4d9fdb46SRobert Mustacchi int dwarf_srclines_files_count(Dwarf_Line_Context /*line_context*/, 2266*4d9fdb46SRobert Mustacchi Dwarf_Signed * /*count*/, 2267*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 2268*4d9fdb46SRobert Mustacchi 2269*4d9fdb46SRobert Mustacchi /* New March 2018. */ 2270*4d9fdb46SRobert Mustacchi /* Count is the real count of files array entries. 2271*4d9fdb46SRobert Mustacchi Since DWARF 2,3,4 are zero origin indexes and 2272*4d9fdb46SRobert Mustacchi DWARF5 and later are one origin, this function 2273*4d9fdb46SRobert Mustacchi replaces dwarf_srclines_files_count(). */ 2274*4d9fdb46SRobert Mustacchi int dwarf_srclines_files_indexes(Dwarf_Line_Context /*line_context*/, 2275*4d9fdb46SRobert Mustacchi Dwarf_Signed * /*baseindex*/, 2276*4d9fdb46SRobert Mustacchi Dwarf_Signed * /*count*/, 2277*4d9fdb46SRobert Mustacchi Dwarf_Signed * /*endindex*/, 2278*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 2279*4d9fdb46SRobert Mustacchi 2280*4d9fdb46SRobert Mustacchi 2281*4d9fdb46SRobert Mustacchi /* New March 2018. Same as dwarf_srclines_files_data, 2282*4d9fdb46SRobert Mustacchi but adds the md5ptr field so cases where DW_LNCT_MD5 2283*4d9fdb46SRobert Mustacchi is present can return pointer to the MD5 value. 2284*4d9fdb46SRobert Mustacchi With DWARF 5 index starts with 0. 2285*4d9fdb46SRobert Mustacchi See dwarf_srclines_files_indexes() which makes 2286*4d9fdb46SRobert Mustacchi indexing through the files easy. */ 2287*4d9fdb46SRobert Mustacchi int dwarf_srclines_files_data_b(Dwarf_Line_Context line_context, 2288*4d9fdb46SRobert Mustacchi Dwarf_Signed index_in, 2289*4d9fdb46SRobert Mustacchi const char ** name, 2290*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * directory_index, 2291*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * last_mod_time, 2292*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * file_length, 2293*4d9fdb46SRobert Mustacchi Dwarf_Form_Data16 ** md5ptr, 2294*4d9fdb46SRobert Mustacchi Dwarf_Error * error); 2295*4d9fdb46SRobert Mustacchi 2296*4d9fdb46SRobert Mustacchi /* New October 2015. */ 2297*4d9fdb46SRobert Mustacchi /* Unlike dwarf_srcfiles() this returns the raw file table 2298*4d9fdb46SRobert Mustacchi strings without the directory being prefixed. 2299*4d9fdb46SRobert Mustacchi Index starts with 1, last is 'count' */ 2300*4d9fdb46SRobert Mustacchi int dwarf_srclines_files_data(Dwarf_Line_Context /*line_context*/, 2301*4d9fdb46SRobert Mustacchi Dwarf_Signed /*index*/, 2302*4d9fdb46SRobert Mustacchi const char ** /*name*/, 2303*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*directory_index*/, 2304*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*last_mod_time*/, 2305*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*file_length*/, 2306*4d9fdb46SRobert Mustacchi Dwarf_Error * /* error*/); 2307*4d9fdb46SRobert Mustacchi 2308*4d9fdb46SRobert Mustacchi /* New October 2015. */ 2309*4d9fdb46SRobert Mustacchi /* Count is the real count of include array entries. */ 2310*4d9fdb46SRobert Mustacchi int dwarf_srclines_include_dir_count(Dwarf_Line_Context /*line_context*/, 2311*4d9fdb46SRobert Mustacchi Dwarf_Signed * /*count*/, 2312*4d9fdb46SRobert Mustacchi Dwarf_Error * /* error*/); 2313*4d9fdb46SRobert Mustacchi 2314*4d9fdb46SRobert Mustacchi /* New October 2015. */ 2315*4d9fdb46SRobert Mustacchi /* Index starts with 1, last is 'count' */ 2316*4d9fdb46SRobert Mustacchi int dwarf_srclines_include_dir_data(Dwarf_Line_Context /*line_context*/, 2317*4d9fdb46SRobert Mustacchi Dwarf_Signed /*index*/, 2318*4d9fdb46SRobert Mustacchi const char ** /*name*/, 2319*4d9fdb46SRobert Mustacchi Dwarf_Error * /* error*/); 2320*4d9fdb46SRobert Mustacchi 2321*4d9fdb46SRobert Mustacchi /* New October 2015. */ 2322*4d9fdb46SRobert Mustacchi /* The DWARF version number of this compile-unit 2323*4d9fdb46SRobert Mustacchi in the .debug_lines section and the number of 2324*4d9fdb46SRobert Mustacchi actual tables:0 (header with no lines), 2325*4d9fdb46SRobert Mustacchi 1 (standard table), or 2 (experimental). */ 2326*4d9fdb46SRobert Mustacchi int dwarf_srclines_version(Dwarf_Line_Context /*line_context*/, 2327*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*version*/, 2328*4d9fdb46SRobert Mustacchi Dwarf_Small * /*table_count*/, 2329*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 2330*4d9fdb46SRobert Mustacchi 2331*4d9fdb46SRobert Mustacchi 2332*4d9fdb46SRobert Mustacchi int dwarf_get_line_section_name_from_die(Dwarf_Die /*die*/, 2333*4d9fdb46SRobert Mustacchi const char ** /*section_name_out*/, 2334*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 2335*4d9fdb46SRobert Mustacchi 2336*4d9fdb46SRobert Mustacchi 2337*4d9fdb46SRobert Mustacchi /* While 'filecount' is signed, the value 2338*4d9fdb46SRobert Mustacchi returned through the pointer is never negative. 2339*4d9fdb46SRobert Mustacchi Original libdwarf from 199x. */ 2340*4d9fdb46SRobert Mustacchi int dwarf_srcfiles(Dwarf_Die /*die*/, 2341*4d9fdb46SRobert Mustacchi char*** /*srcfiles*/, 234207dc1947SRichard Lowe Dwarf_Signed * /*filecount*/, 234307dc1947SRichard Lowe Dwarf_Error* /*error*/); 23447c478bd9Sstevel@tonic-gate 2345*4d9fdb46SRobert Mustacchi int dwarf_linebeginstatement(Dwarf_Line /*line*/, 234607dc1947SRichard Lowe Dwarf_Bool * /*returned_bool*/, 234707dc1947SRichard Lowe Dwarf_Error* /*error*/); 23487c478bd9Sstevel@tonic-gate 23497c478bd9Sstevel@tonic-gate int dwarf_lineendsequence(Dwarf_Line /*line*/, 235007dc1947SRichard Lowe Dwarf_Bool * /*returned_bool*/, 235107dc1947SRichard Lowe Dwarf_Error* /*error*/); 23527c478bd9Sstevel@tonic-gate 2353*4d9fdb46SRobert Mustacchi int dwarf_lineno(Dwarf_Line /*line*/, 235407dc1947SRichard Lowe Dwarf_Unsigned * /*returned_lineno*/, 235507dc1947SRichard Lowe Dwarf_Error* /*error*/); 235607dc1947SRichard Lowe 235707dc1947SRichard Lowe int dwarf_line_srcfileno(Dwarf_Line /*line*/, 2358*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*ret_fileno*/, 2359*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 2360*4d9fdb46SRobert Mustacchi 2361*4d9fdb46SRobert Mustacchi /* Is the line address from DW_LNS_set_address? */ 2362*4d9fdb46SRobert Mustacchi int dwarf_line_is_addr_set(Dwarf_Line /*line*/, 2363*4d9fdb46SRobert Mustacchi Dwarf_Bool * /*is_addr_set*/, 236407dc1947SRichard Lowe Dwarf_Error * /*error*/); 23657c478bd9Sstevel@tonic-gate 2366*4d9fdb46SRobert Mustacchi int dwarf_lineaddr(Dwarf_Line /*line*/, 236707dc1947SRichard Lowe Dwarf_Addr * /*returned_addr*/, 236807dc1947SRichard Lowe Dwarf_Error* /*error*/); 23697c478bd9Sstevel@tonic-gate 2370*4d9fdb46SRobert Mustacchi /* dwarf_lineoff is OBSOLETE as of December 2011. Do not use. */ 2371*4d9fdb46SRobert Mustacchi int dwarf_lineoff(Dwarf_Line /*line*/, 237207dc1947SRichard Lowe Dwarf_Signed * /*returned_lineoffset*/, 237307dc1947SRichard Lowe Dwarf_Error* /*error*/); 23747c478bd9Sstevel@tonic-gate 2375*4d9fdb46SRobert Mustacchi /* dwarf_lineoff_b correctly returns an unsigned column number 2376*4d9fdb46SRobert Mustacchi through the pointer returned_lineoffset. 2377*4d9fdb46SRobert Mustacchi dwarf_lineoff_b() is new in December 2011. */ 2378*4d9fdb46SRobert Mustacchi int dwarf_lineoff_b(Dwarf_Line /*line*/, 2379*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*returned_lineoffset*/, 2380*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 2381*4d9fdb46SRobert Mustacchi 2382*4d9fdb46SRobert Mustacchi int dwarf_linesrc(Dwarf_Line /*line*/, 238307dc1947SRichard Lowe char ** /*returned_name*/, 238407dc1947SRichard Lowe Dwarf_Error* /*error*/); 23857c478bd9Sstevel@tonic-gate 2386*4d9fdb46SRobert Mustacchi int dwarf_lineblock(Dwarf_Line /*line*/, 238707dc1947SRichard Lowe Dwarf_Bool * /*returned_bool*/, 238807dc1947SRichard Lowe Dwarf_Error* /*error*/); 23897c478bd9Sstevel@tonic-gate 2390*4d9fdb46SRobert Mustacchi /* We gather these into one call as it's likely one 2391*4d9fdb46SRobert Mustacchi will want all or none of them. */ 2392*4d9fdb46SRobert Mustacchi int dwarf_prologue_end_etc(Dwarf_Line /* line */, 2393*4d9fdb46SRobert Mustacchi Dwarf_Bool * /*prologue_end*/, 2394*4d9fdb46SRobert Mustacchi Dwarf_Bool * /*eplogue_begin*/, 2395*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /* isa */, 2396*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /* discriminator */, 2397*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 2398*4d9fdb46SRobert Mustacchi /* End line table operations */ 2399*4d9fdb46SRobert Mustacchi 2400*4d9fdb46SRobert Mustacchi /* Two-level line tables: 2401*4d9fdb46SRobert Mustacchi When reading from an actuals table, dwarf_line_logical() 2402*4d9fdb46SRobert Mustacchi returns the logical row number for the line. */ 2403*4d9fdb46SRobert Mustacchi int dwarf_linelogical(Dwarf_Line /*line*/, 2404*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*returned_logical*/, 2405*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 2406*4d9fdb46SRobert Mustacchi 2407*4d9fdb46SRobert Mustacchi /* Two-level line tables: 2408*4d9fdb46SRobert Mustacchi When reading from a logicals table, dwarf_linecontext() 2409*4d9fdb46SRobert Mustacchi returns the logical row number corresponding the the 2410*4d9fdb46SRobert Mustacchi calling context for an inlined call. */ 2411*4d9fdb46SRobert Mustacchi int dwarf_linecontext(Dwarf_Line /*line*/, 2412*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*returned_context*/, 241307dc1947SRichard Lowe Dwarf_Error* /*error*/); 24147c478bd9Sstevel@tonic-gate 2415*4d9fdb46SRobert Mustacchi /* Two-level line tables: 2416*4d9fdb46SRobert Mustacchi When reading from a logicals table, dwarf_linesubprogno() 2417*4d9fdb46SRobert Mustacchi returns the index in the subprograms table of the inlined 2418*4d9fdb46SRobert Mustacchi subprogram. */ 2419*4d9fdb46SRobert Mustacchi int dwarf_line_subprogno(Dwarf_Line /*line*/, 2420*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*ret_subprogno*/, 2421*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 2422*4d9fdb46SRobert Mustacchi 2423*4d9fdb46SRobert Mustacchi /* Two-level line tables: 2424*4d9fdb46SRobert Mustacchi When reading from a logicals table, dwarf_linesubprog() 2425*4d9fdb46SRobert Mustacchi returns the name of the inlined subprogram, its declaration 2426*4d9fdb46SRobert Mustacchi filename, and its declaration line number, if available. */ 2427*4d9fdb46SRobert Mustacchi int dwarf_line_subprog(Dwarf_Line /*line*/, 2428*4d9fdb46SRobert Mustacchi char ** /*returned_subprog_name*/, 2429*4d9fdb46SRobert Mustacchi char ** /*returned_filename*/, 2430*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*returned_lineno*/, 2431*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 2432*4d9fdb46SRobert Mustacchi /* End of line table interfaces. */ 2433*4d9fdb46SRobert Mustacchi 2434*4d9fdb46SRobert Mustacchi /* .debug_names names table interfaces. DWARF5 */ 2435*4d9fdb46SRobert Mustacchi /* New April 2017 */ 2436*4d9fdb46SRobert Mustacchi int dwarf_debugnames_header(Dwarf_Debug /*dbg*/, 2437*4d9fdb46SRobert Mustacchi Dwarf_Dnames_Head * /*dn_out*/, 2438*4d9fdb46SRobert Mustacchi 2439*4d9fdb46SRobert Mustacchi /* *dn_count_out returns the number of name indexes 2440*4d9fdb46SRobert Mustacchi in the .debug_names section */ 2441*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*dn_index_count_out*/, 2442*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 2443*4d9fdb46SRobert Mustacchi 2444*4d9fdb46SRobert Mustacchi /* Since there may be multiple name indexes in a .debug_names 2445*4d9fdb46SRobert Mustacchi section we use index_number starting at 0 through 2446*4d9fdb46SRobert Mustacchi dn_index_count_out-1. */ 2447*4d9fdb46SRobert Mustacchi int dwarf_debugnames_sizes(Dwarf_Dnames_Head /*dn*/, 2448*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*index_number*/, 2449*4d9fdb46SRobert Mustacchi 2450*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*section_offset*/, 2451*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*version*/, 2452*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*offset_size*/, /* 4 or 8 */ 2453*4d9fdb46SRobert Mustacchi 2454*4d9fdb46SRobert Mustacchi /* The counts are entry counts, not byte sizes. */ 2455*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*comp_unit_count*/, 2456*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*local_type_unit_count*/, 2457*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*foreign_type_unit_count*/, 2458*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*bucket_count*/, 2459*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*name_count*/, 2460*4d9fdb46SRobert Mustacchi 2461*4d9fdb46SRobert Mustacchi /* The following are counted in bytes */ 2462*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*indextable_overall_length*/, 2463*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*abbrev_table_size*/, 2464*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*entry_pool_size*/, 2465*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*augmentation_string_size*/, 2466*4d9fdb46SRobert Mustacchi 2467*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 2468*4d9fdb46SRobert Mustacchi 2469*4d9fdb46SRobert Mustacchi int dwarf_debugnames_cu_entry(Dwarf_Dnames_Head /*dn*/, 2470*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*index_number*/, 2471*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*offset_number*/, 2472*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*offset_count*/, 2473*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*offset*/, 2474*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 2475*4d9fdb46SRobert Mustacchi int dwarf_debugnames_local_tu_entry(Dwarf_Dnames_Head /*dn*/, 2476*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*index_number*/, 2477*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*offset_number*/, 2478*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*offset_count*/, 2479*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*offset*/, 2480*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 2481*4d9fdb46SRobert Mustacchi int dwarf_debugnames_foreign_tu_entry(Dwarf_Dnames_Head /*dn*/, 2482*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*index_number*/, 2483*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*sig_number*/, 2484*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*sig_mininum*/, 2485*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*sig_count*/, 2486*4d9fdb46SRobert Mustacchi Dwarf_Sig8 * /*signature*/, 2487*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 2488*4d9fdb46SRobert Mustacchi int dwarf_debugnames_bucket(Dwarf_Dnames_Head /*dn*/, 2489*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*index_number*/, 2490*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*bucket_number*/, 2491*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*bucket_count*/, 2492*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*index_of_name_entry*/, 2493*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 2494*4d9fdb46SRobert Mustacchi 2495*4d9fdb46SRobert Mustacchi int dwarf_debugnames_name(Dwarf_Dnames_Head /*dn*/, 2496*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*index_number*/, 2497*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*name_entry*/, 2498*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*names_count*/, 2499*4d9fdb46SRobert Mustacchi Dwarf_Sig8 * /*signature*/, 2500*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*offset_to_debug_str*/, 2501*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*offset_in_entrypool*/, 2502*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 2503*4d9fdb46SRobert Mustacchi 2504*4d9fdb46SRobert Mustacchi int dwarf_debugnames_abbrev_by_index(Dwarf_Dnames_Head /*dn*/, 2505*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*index_number*/, 2506*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*abbrev_entry*/, 2507*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*abbrev_code*/, 2508*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*tag*/, 2509*4d9fdb46SRobert Mustacchi 2510*4d9fdb46SRobert Mustacchi /* The number of valid abbrev_entry values: 0 to number_of_abbrev-1 2511*4d9fdb46SRobert Mustacchi */ 2512*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*number_of_abbrev*/, 2513*4d9fdb46SRobert Mustacchi 2514*4d9fdb46SRobert Mustacchi /* The number of attr/form pairs, not counting the trailing 2515*4d9fdb46SRobert Mustacchi 0,0 pair. */ 2516*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*number_of_attr_form_entries*/, 2517*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 2518*4d9fdb46SRobert Mustacchi 2519*4d9fdb46SRobert Mustacchi int dwarf_debugnames_abbrev_by_code(Dwarf_Dnames_Head /*dn*/, 2520*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*index_number*/, 2521*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*abbrev_code*/, 2522*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*tag*/, 2523*4d9fdb46SRobert Mustacchi 2524*4d9fdb46SRobert Mustacchi /* The number of this code/tag as an array index. */ 2525*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*index_of_abbrev*/, 2526*4d9fdb46SRobert Mustacchi 2527*4d9fdb46SRobert Mustacchi /* The number of attr/form pairs, not counting the trailing 2528*4d9fdb46SRobert Mustacchi 0,0 pair. */ 2529*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*number_of_attr_form_entries*/, 2530*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 2531*4d9fdb46SRobert Mustacchi 2532*4d9fdb46SRobert Mustacchi int dwarf_debugnames_abbrev_form_by_index(Dwarf_Dnames_Head /*dn*/, 2533*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*index_number*/, 2534*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*abbrev_entry_index*/, 2535*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*abbrev_form_index*/, 2536*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*name_index_attr*/, 2537*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*form*/, 2538*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*number_of_attr_form_entries*/, 2539*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 2540*4d9fdb46SRobert Mustacchi 2541*4d9fdb46SRobert Mustacchi 2542*4d9fdb46SRobert Mustacchi /* This, combined with dwarf_debugnames_entrypool_values(), 2543*4d9fdb46SRobert Mustacchi lets one examine as much or as little of an entrypool 2544*4d9fdb46SRobert Mustacchi as one wants to by alternately calling these two 2545*4d9fdb46SRobert Mustacchi functions. */ 2546*4d9fdb46SRobert Mustacchi int dwarf_debugnames_entrypool(Dwarf_Dnames_Head /*dn*/, 2547*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*index_number*/, 2548*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*offset_in_entrypool*/, 2549*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*abbrev_code*/, 2550*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*tag*/, 2551*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*value_count*/, 2552*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*index_of_abbrev*/, 2553*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*offset_of_initial_value*/, 2554*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 2555*4d9fdb46SRobert Mustacchi 2556*4d9fdb46SRobert Mustacchi /* Caller, knowing array size needed, passes in arrays 2557*4d9fdb46SRobert Mustacchi it allocates of for idx, form, offset-size-values, 2558*4d9fdb46SRobert Mustacchi and signature values. Caller must examine idx-number 2559*4d9fdb46SRobert Mustacchi and form to decide, for each array element, whether 2560*4d9fdb46SRobert Mustacchi the offset or the signature contains the value. 2561*4d9fdb46SRobert Mustacchi So this returns all the values for the abbrev code. 2562*4d9fdb46SRobert Mustacchi And points via offset_of_next to the next abbrev code. 2563*4d9fdb46SRobert Mustacchi */ 2564*4d9fdb46SRobert Mustacchi int dwarf_debugnames_entrypool_values(Dwarf_Dnames_Head /*dn*/, 2565*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*index_number*/, 2566*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*index_of_abbrev*/, 2567*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*offset_in_entrypool_of_values*/, 2568*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*array_dw_idx_number*/, 2569*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*array_form*/, 2570*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*array_of_offsets*/, 2571*4d9fdb46SRobert Mustacchi Dwarf_Sig8 * /*array_of_signatures*/, 2572*4d9fdb46SRobert Mustacchi 2573*4d9fdb46SRobert Mustacchi /* offset of the next entrypool entry. */ 2574*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*offset_of_next_entrypool*/, 2575*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 2576*4d9fdb46SRobert Mustacchi 2577*4d9fdb46SRobert Mustacchi /* FIXME: add interfaces for string search given hash and 2578*4d9fdb46SRobert Mustacchi string */ 2579*4d9fdb46SRobert Mustacchi 2580*4d9fdb46SRobert Mustacchi 2581*4d9fdb46SRobert Mustacchi 2582*4d9fdb46SRobert Mustacchi /* end of .debug_names interfaces. */ 2583*4d9fdb46SRobert Mustacchi 2584*4d9fdb46SRobert Mustacchi /* New October 2019. Access to the GNU section named 2585*4d9fdb46SRobert Mustacchi .gnu_debuglink and/or the section .note.gnu.build-id. 2586*4d9fdb46SRobert Mustacchi See 2587*4d9fdb46SRobert Mustacchi https://sourceware.org/gdb/onlinedocs/gdb/Separate-Debug-Files.html 2588*4d9fdb46SRobert Mustacchi The dbg argument provides data access and relies on 2589*4d9fdb46SRobert Mustacchi fields de_path,de_debuglink_globals, de_debuglink_globals_length 2590*4d9fdb46SRobert Mustacchi If no debuglink then name_returned,crc_returned and 2591*4d9fdb46SRobert Mustacchi debuglink_path_returned will get set 0 through the pointers. 2592*4d9fdb46SRobert Mustacchi If no .note.gnu.build-id then buildid_length_returned, 2593*4d9fdb46SRobert Mustacchi and buildid_returned will be set 0 through the pointers. 2594*4d9fdb46SRobert Mustacchi See libdwarf2.1.mm for additional important details. 2595*4d9fdb46SRobert Mustacchi see dwarf_add_file_path() 2596*4d9fdb46SRobert Mustacchi and dwarf_add_debuglink_global_path(). 2597*4d9fdb46SRobert Mustacchi */ 2598*4d9fdb46SRobert Mustacchi 2599*4d9fdb46SRobert Mustacchi int dwarf_gnu_debuglink(Dwarf_Debug /*dbg*/, 2600*4d9fdb46SRobert Mustacchi char ** /*name_returned*/, 2601*4d9fdb46SRobert Mustacchi unsigned char ** /*crc_returned from the debuglink section*/, 2602*4d9fdb46SRobert Mustacchi char ** /*debuglink_path_returned*/, 2603*4d9fdb46SRobert Mustacchi unsigned int * /*debuglink_path_count_returned*/, 2604*4d9fdb46SRobert Mustacchi unsigned int * /*buildid_type_returned */, 2605*4d9fdb46SRobert Mustacchi char ** /*buildid_owner_name_returned*/, 2606*4d9fdb46SRobert Mustacchi unsigned char ** /*buildid_returned*/, 2607*4d9fdb46SRobert Mustacchi unsigned int * /*buildid_length_returned*/, 2608*4d9fdb46SRobert Mustacchi char *** /*paths_returned*/, 2609*4d9fdb46SRobert Mustacchi unsigned int * /*paths_length_returned*/, 2610*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 2611*4d9fdb46SRobert Mustacchi 2612*4d9fdb46SRobert Mustacchi /* See 2613*4d9fdb46SRobert Mustacchi https://sourceware.org/gdb/onlinedocs/gdb/Separate-Debug-Files.html 2614*4d9fdb46SRobert Mustacchi and dwarf_gnu_debuglink() 2615*4d9fdb46SRobert Mustacchi pathname is a path-prefix to be added to a list of path-prefixes, 2616*4d9fdb46SRobert Mustacchi The default "/usr/lib/debug" is built-in and is the first 2617*4d9fdb46SRobert Mustacchi such in the list held in dbg. 2618*4d9fdb46SRobert Mustacchi The path prefix should start with / . 2619*4d9fdb46SRobert Mustacchi It can just end or end with / , either choice will work. 2620*4d9fdb46SRobert Mustacchi */ 2621*4d9fdb46SRobert Mustacchi int dwarf_add_debuglink_global_path(Dwarf_Debug /*dbg*/, 2622*4d9fdb46SRobert Mustacchi const char *pathname, 2623*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 2624*4d9fdb46SRobert Mustacchi 2625*4d9fdb46SRobert Mustacchi 2626*4d9fdb46SRobert Mustacchi /* global name space operations (.debug_pubnames access) 2627*4d9fdb46SRobert Mustacchi The pubnames and similar sections are rarely used. Few compilers 2628*4d9fdb46SRobert Mustacchi emit them. They are DWARF 2,3,4 only., not DWARF 5. */ 2629*4d9fdb46SRobert Mustacchi 2630*4d9fdb46SRobert Mustacchi /* New March 2019. Special for dwarfdump. 2631*4d9fdb46SRobert Mustacchi Sets a flag in the dbg. Always returns DW_DLV_OK 2632*4d9fdb46SRobert Mustacchi and (as of March 2020) never touches error */ 2633*4d9fdb46SRobert Mustacchi int dwarf_return_empty_pubnames(Dwarf_Debug /*dbg*/, 2634*4d9fdb46SRobert Mustacchi int /* flag */, 2635*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 2636*4d9fdb46SRobert Mustacchi 2637*4d9fdb46SRobert Mustacchi int dwarf_get_globals(Dwarf_Debug /*dbg*/, 2638*4d9fdb46SRobert Mustacchi Dwarf_Global** /*globals*/, 263907dc1947SRichard Lowe Dwarf_Signed * /*number_of_globals*/, 264007dc1947SRichard Lowe Dwarf_Error* /*error*/); 264107dc1947SRichard Lowe void dwarf_globals_dealloc(Dwarf_Debug /*dbg*/, 264207dc1947SRichard Lowe Dwarf_Global* /*globals*/, 264307dc1947SRichard Lowe Dwarf_Signed /*number_of_globals*/); 26447c478bd9Sstevel@tonic-gate 2645*4d9fdb46SRobert Mustacchi int dwarf_globname(Dwarf_Global /*glob*/, 264607dc1947SRichard Lowe char ** /*returned_name*/, 264707dc1947SRichard Lowe Dwarf_Error* /*error*/); 26487c478bd9Sstevel@tonic-gate 2649*4d9fdb46SRobert Mustacchi int dwarf_global_die_offset(Dwarf_Global /*global*/, 265007dc1947SRichard Lowe Dwarf_Off* /*return_offset*/, 265107dc1947SRichard Lowe Dwarf_Error * /*error*/); 26527c478bd9Sstevel@tonic-gate 265307dc1947SRichard Lowe /* This returns the CU die global offset if one knows the 265407dc1947SRichard Lowe CU header global offset. 2655*4d9fdb46SRobert Mustacchi See also dwarf_CU_dieoffset_given_die(). */ 26567c478bd9Sstevel@tonic-gate int dwarf_get_cu_die_offset_given_cu_header_offset( 265707dc1947SRichard Lowe Dwarf_Debug /*dbg*/, 265807dc1947SRichard Lowe Dwarf_Off /*in_cu_header_offset*/, 2659*4d9fdb46SRobert Mustacchi Dwarf_Off * /*out_cu_die_offset*/, 266007dc1947SRichard Lowe Dwarf_Error * /*err*/); 26617c478bd9Sstevel@tonic-gate 2662*4d9fdb46SRobert Mustacchi /* The _b form is new October 2011. */ 2663*4d9fdb46SRobert Mustacchi int dwarf_get_cu_die_offset_given_cu_header_offset_b( 2664*4d9fdb46SRobert Mustacchi Dwarf_Debug /*dbg*/, 2665*4d9fdb46SRobert Mustacchi Dwarf_Off /*in_cu_header_offset*/, 2666*4d9fdb46SRobert Mustacchi Dwarf_Bool /*is_info. True means look in debug_Info, 2667*4d9fdb46SRobert Mustacchi false use debug_types.*/, 2668*4d9fdb46SRobert Mustacchi Dwarf_Off * /*out_cu_die_offset*/, 2669*4d9fdb46SRobert Mustacchi Dwarf_Error * /*err*/); 2670*4d9fdb46SRobert Mustacchi 2671*4d9fdb46SRobert Mustacchi #ifdef __sgi /* pragma is sgi MIPS only */ 2672*4d9fdb46SRobert Mustacchi #pragma optional dwarf_get_cu_die_offset_given_cu_header_offset 2673*4d9fdb46SRobert Mustacchi #endif 2674*4d9fdb46SRobert Mustacchi 2675*4d9fdb46SRobert Mustacchi int dwarf_global_cu_offset(Dwarf_Global /*global*/, 267607dc1947SRichard Lowe Dwarf_Off* /*return_offset*/, 267707dc1947SRichard Lowe Dwarf_Error* /*error*/); 26787c478bd9Sstevel@tonic-gate 2679*4d9fdb46SRobert Mustacchi int dwarf_global_name_offsets(Dwarf_Global /*global*/, 268007dc1947SRichard Lowe char ** /*returned_name*/, 2681*4d9fdb46SRobert Mustacchi Dwarf_Off* /*die_offset*/, 2682*4d9fdb46SRobert Mustacchi Dwarf_Off* /*cu_offset*/, 268307dc1947SRichard Lowe Dwarf_Error* /*error*/); 26847c478bd9Sstevel@tonic-gate 2685*4d9fdb46SRobert Mustacchi /* New February 2019. For more complete dwarfdump printing. 2686*4d9fdb46SRobert Mustacchi For each CU represented in .debug_pubnames, etc, 2687*4d9fdb46SRobert Mustacchi there is a .debug_pubnames header. For any given 2688*4d9fdb46SRobert Mustacchi Dwarf_Global this returns the content of the applicable 2689*4d9fdb46SRobert Mustacchi header. */ 2690*4d9fdb46SRobert Mustacchi int dwarf_get_globals_header(Dwarf_Global /*global*/, 2691*4d9fdb46SRobert Mustacchi Dwarf_Off * /*offset_pub_header*/, 2692*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*length_size*/, 2693*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*length_pub*/, 2694*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*version*/, 2695*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*header_info_offset*/, 2696*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*info_length*/, 2697*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 2698*4d9fdb46SRobert Mustacchi 26997c478bd9Sstevel@tonic-gate /* Static function name operations. */ 270007dc1947SRichard Lowe int dwarf_get_funcs(Dwarf_Debug /*dbg*/, 270107dc1947SRichard Lowe Dwarf_Func** /*funcs*/, 270207dc1947SRichard Lowe Dwarf_Signed * /*number_of_funcs*/, 270307dc1947SRichard Lowe Dwarf_Error* /*error*/); 270407dc1947SRichard Lowe void dwarf_funcs_dealloc(Dwarf_Debug /*dbg*/, 270507dc1947SRichard Lowe Dwarf_Func* /*funcs*/, 270607dc1947SRichard Lowe Dwarf_Signed /*number_of_funcs*/); 27077c478bd9Sstevel@tonic-gate 27087c478bd9Sstevel@tonic-gate int dwarf_funcname(Dwarf_Func /*func*/, 270907dc1947SRichard Lowe char ** /*returned_name*/, 271007dc1947SRichard Lowe Dwarf_Error* /*error*/); 27117c478bd9Sstevel@tonic-gate 27127c478bd9Sstevel@tonic-gate int dwarf_func_die_offset(Dwarf_Func /*func*/, 271307dc1947SRichard Lowe Dwarf_Off* /*return_offset*/, 271407dc1947SRichard Lowe Dwarf_Error* /*error*/); 27157c478bd9Sstevel@tonic-gate 27167c478bd9Sstevel@tonic-gate int dwarf_func_cu_offset(Dwarf_Func /*func*/, 271707dc1947SRichard Lowe Dwarf_Off* /*return_offset*/, 271807dc1947SRichard Lowe Dwarf_Error* /*error*/); 27197c478bd9Sstevel@tonic-gate 27207c478bd9Sstevel@tonic-gate int dwarf_func_name_offsets(Dwarf_Func /*func*/, 272107dc1947SRichard Lowe char ** /*returned_name*/, 272207dc1947SRichard Lowe Dwarf_Off* /*die_offset*/, 272307dc1947SRichard Lowe Dwarf_Off* /*cu_offset*/, 272407dc1947SRichard Lowe Dwarf_Error* /*error*/); 272507dc1947SRichard Lowe 272607dc1947SRichard Lowe /* User-defined type name operations, SGI IRIX .debug_typenames section. 272707dc1947SRichard Lowe Same content as DWARF3 .debug_pubtypes, but defined years before 272807dc1947SRichard Lowe .debug_pubtypes was defined. SGI IRIX only. */ 272907dc1947SRichard Lowe int dwarf_get_types(Dwarf_Debug /*dbg*/, 273007dc1947SRichard Lowe Dwarf_Type** /*types*/, 273107dc1947SRichard Lowe Dwarf_Signed * /*number_of_types*/, 273207dc1947SRichard Lowe Dwarf_Error* /*error*/); 273307dc1947SRichard Lowe void dwarf_types_dealloc(Dwarf_Debug /*dbg*/, 273407dc1947SRichard Lowe Dwarf_Type* /*types*/, 273507dc1947SRichard Lowe Dwarf_Signed /*number_of_types*/); 27367c478bd9Sstevel@tonic-gate 27377c478bd9Sstevel@tonic-gate 27387c478bd9Sstevel@tonic-gate int dwarf_typename(Dwarf_Type /*type*/, 273907dc1947SRichard Lowe char ** /*returned_name*/, 274007dc1947SRichard Lowe Dwarf_Error* /*error*/); 27417c478bd9Sstevel@tonic-gate 27427c478bd9Sstevel@tonic-gate int dwarf_type_die_offset(Dwarf_Type /*type*/, 274307dc1947SRichard Lowe Dwarf_Off* /*return_offset*/, 274407dc1947SRichard Lowe Dwarf_Error* /*error*/); 27457c478bd9Sstevel@tonic-gate 27467c478bd9Sstevel@tonic-gate int dwarf_type_cu_offset(Dwarf_Type /*type*/, 274707dc1947SRichard Lowe Dwarf_Off* /*return_offset*/, 274807dc1947SRichard Lowe Dwarf_Error* /*error*/); 274907dc1947SRichard Lowe 275007dc1947SRichard Lowe int dwarf_type_name_offsets(Dwarf_Type /*type*/, 275107dc1947SRichard Lowe char ** /*returned_name*/, 275207dc1947SRichard Lowe Dwarf_Off* /*die_offset*/, 275307dc1947SRichard Lowe Dwarf_Off* /*cu_offset*/, 275407dc1947SRichard Lowe Dwarf_Error* /*error*/); 275507dc1947SRichard Lowe 2756*4d9fdb46SRobert Mustacchi /* User-defined type name operations, DWARF3 .debug_pubtypes section. 275707dc1947SRichard Lowe */ 275807dc1947SRichard Lowe int dwarf_get_pubtypes(Dwarf_Debug /*dbg*/, 275907dc1947SRichard Lowe Dwarf_Type** /*types*/, 276007dc1947SRichard Lowe Dwarf_Signed * /*number_of_types*/, 276107dc1947SRichard Lowe Dwarf_Error* /*error*/); 276207dc1947SRichard Lowe void dwarf_pubtypes_dealloc(Dwarf_Debug /*dbg*/, 276307dc1947SRichard Lowe Dwarf_Type* /*pubtypes*/, 276407dc1947SRichard Lowe Dwarf_Signed /*number_of_pubtypes*/); 27657c478bd9Sstevel@tonic-gate 276607dc1947SRichard Lowe 276707dc1947SRichard Lowe int dwarf_pubtypename(Dwarf_Type /*type*/, 276807dc1947SRichard Lowe char ** /*returned_name*/, 276907dc1947SRichard Lowe Dwarf_Error* /*error*/); 277007dc1947SRichard Lowe 2771*4d9fdb46SRobert Mustacchi int dwarf_pubtype_type_die_offset(Dwarf_Type /*type*/, 277207dc1947SRichard Lowe Dwarf_Off* /*return_offset*/, 277307dc1947SRichard Lowe Dwarf_Error* /*error*/); 277407dc1947SRichard Lowe 277507dc1947SRichard Lowe int dwarf_pubtype_cu_offset(Dwarf_Type /*type*/, 277607dc1947SRichard Lowe Dwarf_Off* /*return_offset*/, 277707dc1947SRichard Lowe Dwarf_Error* /*error*/); 277807dc1947SRichard Lowe 277907dc1947SRichard Lowe int dwarf_pubtype_name_offsets(Dwarf_Type /*type*/, 278007dc1947SRichard Lowe char ** /*returned_name*/, 278107dc1947SRichard Lowe Dwarf_Off* /*die_offset*/, 278207dc1947SRichard Lowe Dwarf_Off* /*cu_offset*/, 278307dc1947SRichard Lowe Dwarf_Error* /*error*/); 27847c478bd9Sstevel@tonic-gate 27857c478bd9Sstevel@tonic-gate /* File-scope static variable name operations. */ 278607dc1947SRichard Lowe int dwarf_get_vars(Dwarf_Debug /*dbg*/, 278707dc1947SRichard Lowe Dwarf_Var** /*vars*/, 278807dc1947SRichard Lowe Dwarf_Signed * /*number_of_vars*/, 278907dc1947SRichard Lowe Dwarf_Error* /*error*/); 279007dc1947SRichard Lowe void dwarf_vars_dealloc(Dwarf_Debug /*dbg*/, 279107dc1947SRichard Lowe Dwarf_Var* /*vars*/, 279207dc1947SRichard Lowe Dwarf_Signed /*number_of_vars*/); 279307dc1947SRichard Lowe 27947c478bd9Sstevel@tonic-gate 27957c478bd9Sstevel@tonic-gate int dwarf_varname(Dwarf_Var /*var*/, 279607dc1947SRichard Lowe char ** /*returned_name*/, 279707dc1947SRichard Lowe Dwarf_Error* /*error*/); 27987c478bd9Sstevel@tonic-gate 27997c478bd9Sstevel@tonic-gate int dwarf_var_die_offset(Dwarf_Var /*var*/, 280007dc1947SRichard Lowe Dwarf_Off* /*return_offset*/, 280107dc1947SRichard Lowe Dwarf_Error* /*error*/); 28027c478bd9Sstevel@tonic-gate 28037c478bd9Sstevel@tonic-gate int dwarf_var_cu_offset(Dwarf_Var /*var*/, 280407dc1947SRichard Lowe Dwarf_Off* /*return_offset*/, 280507dc1947SRichard Lowe Dwarf_Error* /*error*/); 28067c478bd9Sstevel@tonic-gate 28077c478bd9Sstevel@tonic-gate int dwarf_var_name_offsets(Dwarf_Var /*var*/, 280807dc1947SRichard Lowe char ** /*returned_name*/, 280907dc1947SRichard Lowe Dwarf_Off* /*die_offset*/, 281007dc1947SRichard Lowe Dwarf_Off* /*cu_offset*/, 281107dc1947SRichard Lowe Dwarf_Error* /*error*/); 28127c478bd9Sstevel@tonic-gate 28137c478bd9Sstevel@tonic-gate /* weak name operations. */ 281407dc1947SRichard Lowe int dwarf_get_weaks(Dwarf_Debug /*dbg*/, 281507dc1947SRichard Lowe Dwarf_Weak** /*weaks*/, 281607dc1947SRichard Lowe Dwarf_Signed * /*number_of_weaks*/, 281707dc1947SRichard Lowe Dwarf_Error* /*error*/); 281807dc1947SRichard Lowe void dwarf_weaks_dealloc(Dwarf_Debug /*dbg*/, 281907dc1947SRichard Lowe Dwarf_Weak* /*weaks*/, 282007dc1947SRichard Lowe Dwarf_Signed /*number_of_weaks*/); 282107dc1947SRichard Lowe 28227c478bd9Sstevel@tonic-gate 28237c478bd9Sstevel@tonic-gate int dwarf_weakname(Dwarf_Weak /*weak*/, 282407dc1947SRichard Lowe char ** /*returned_name*/, 282507dc1947SRichard Lowe Dwarf_Error* /*error*/); 28267c478bd9Sstevel@tonic-gate 28277c478bd9Sstevel@tonic-gate int dwarf_weak_die_offset(Dwarf_Weak /*weak*/, 282807dc1947SRichard Lowe Dwarf_Off* /*return_offset*/, 282907dc1947SRichard Lowe Dwarf_Error* /*error*/); 28307c478bd9Sstevel@tonic-gate 28317c478bd9Sstevel@tonic-gate int dwarf_weak_cu_offset(Dwarf_Weak /*weak*/, 283207dc1947SRichard Lowe Dwarf_Off* /*return_offset*/, 283307dc1947SRichard Lowe Dwarf_Error* /*error*/); 28347c478bd9Sstevel@tonic-gate 283507dc1947SRichard Lowe int dwarf_weak_name_offsets(Dwarf_Weak /*weak*/, 283607dc1947SRichard Lowe char ** /*returned_name*/, 283707dc1947SRichard Lowe Dwarf_Off* /*die_offset*/, 283807dc1947SRichard Lowe Dwarf_Off* /*cu_offset*/, 283907dc1947SRichard Lowe Dwarf_Error* /*error*/); 28407c478bd9Sstevel@tonic-gate 28417c478bd9Sstevel@tonic-gate /* location list section operation. (.debug_loc access) */ 2842*4d9fdb46SRobert Mustacchi int dwarf_get_loclist_entry(Dwarf_Debug /*dbg*/, 2843*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*offset*/, 2844*4d9fdb46SRobert Mustacchi Dwarf_Addr* /*hipc*/, 2845*4d9fdb46SRobert Mustacchi Dwarf_Addr* /*lopc*/, 2846*4d9fdb46SRobert Mustacchi Dwarf_Ptr* /*data*/, 2847*4d9fdb46SRobert Mustacchi Dwarf_Unsigned* /*entry_len*/, 2848*4d9fdb46SRobert Mustacchi Dwarf_Unsigned* /*next_entry*/, 284907dc1947SRichard Lowe Dwarf_Error* /*error*/); 28507c478bd9Sstevel@tonic-gate 28517c478bd9Sstevel@tonic-gate /* abbreviation section operations */ 2852*4d9fdb46SRobert Mustacchi int dwarf_get_abbrev(Dwarf_Debug /*dbg*/, 2853*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*offset*/, 285407dc1947SRichard Lowe Dwarf_Abbrev * /*returned_abbrev*/, 2855*4d9fdb46SRobert Mustacchi Dwarf_Unsigned* /*length*/, 2856*4d9fdb46SRobert Mustacchi Dwarf_Unsigned* /*attr_count*/, 285707dc1947SRichard Lowe Dwarf_Error* /*error*/); 28587c478bd9Sstevel@tonic-gate 2859*4d9fdb46SRobert Mustacchi int dwarf_get_abbrev_tag(Dwarf_Abbrev /*abbrev*/, 286007dc1947SRichard Lowe Dwarf_Half* /*return_tag_number*/, 286107dc1947SRichard Lowe Dwarf_Error* /*error*/); 2862*4d9fdb46SRobert Mustacchi int dwarf_get_abbrev_code(Dwarf_Abbrev /*abbrev*/, 286307dc1947SRichard Lowe Dwarf_Unsigned* /*return_code_number*/, 286407dc1947SRichard Lowe Dwarf_Error* /*error*/); 28657c478bd9Sstevel@tonic-gate 2866*4d9fdb46SRobert Mustacchi /* See comments in dwarf_abbrev.c. Not an entirely safe function. */ 2867*4d9fdb46SRobert Mustacchi int dwarf_get_abbrev_count(Dwarf_Debug /*dbg*/); 2868*4d9fdb46SRobert Mustacchi 2869*4d9fdb46SRobert Mustacchi int dwarf_get_abbrev_children_flag(Dwarf_Abbrev /*abbrev*/, 287007dc1947SRichard Lowe Dwarf_Signed* /*return_flag*/, 287107dc1947SRichard Lowe Dwarf_Error* /*error*/); 28727c478bd9Sstevel@tonic-gate 2873*4d9fdb46SRobert Mustacchi /* New August 2019. 2874*4d9fdb46SRobert Mustacchi Most uses will call with filter_outliers non-zero. 2875*4d9fdb46SRobert Mustacchi In that case impossible values return DW_DLV_ERROR. 2876*4d9fdb46SRobert Mustacchi Those doing extra things (like dwarfdump) will 2877*4d9fdb46SRobert Mustacchi call with filter_outliers zero to get the raw data 2878*4d9fdb46SRobert Mustacchi (effectively); */ 2879*4d9fdb46SRobert Mustacchi int dwarf_get_abbrev_entry_b(Dwarf_Abbrev abbrev, 2880*4d9fdb46SRobert Mustacchi Dwarf_Unsigned indx, 2881*4d9fdb46SRobert Mustacchi Dwarf_Bool filter_outliers, 2882*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * returned_attr_num, 2883*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * returned_form, 2884*4d9fdb46SRobert Mustacchi Dwarf_Signed * returned_implict_const, 2885*4d9fdb46SRobert Mustacchi Dwarf_Off * offset, 2886*4d9fdb46SRobert Mustacchi Dwarf_Error * error); 2887*4d9fdb46SRobert Mustacchi 2888*4d9fdb46SRobert Mustacchi /* Obsolete because it cannot return the 2889*4d9fdb46SRobert Mustacchi DW_FORM_implicit_const value. */ 2890*4d9fdb46SRobert Mustacchi int dwarf_get_abbrev_entry(Dwarf_Abbrev /*abbrev*/, 2891*4d9fdb46SRobert Mustacchi Dwarf_Signed /*index*/, 289207dc1947SRichard Lowe Dwarf_Half * /*returned_attr_num*/, 2893*4d9fdb46SRobert Mustacchi Dwarf_Signed* /*form*/, 2894*4d9fdb46SRobert Mustacchi Dwarf_Off* /*offset*/, 289507dc1947SRichard Lowe Dwarf_Error* /*error*/); 28967c478bd9Sstevel@tonic-gate 2897*4d9fdb46SRobert Mustacchi int dwarf_get_string_section_name(Dwarf_Debug /*dbg*/, 2898*4d9fdb46SRobert Mustacchi const char ** /*section_name_out*/, 2899*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 2900*4d9fdb46SRobert Mustacchi 29017c478bd9Sstevel@tonic-gate /* consumer string section operation */ 2902*4d9fdb46SRobert Mustacchi int dwarf_get_str(Dwarf_Debug /*dbg*/, 2903*4d9fdb46SRobert Mustacchi Dwarf_Off /*offset*/, 2904*4d9fdb46SRobert Mustacchi char** /*string*/, 290507dc1947SRichard Lowe Dwarf_Signed * /*strlen_of_string*/, 290607dc1947SRichard Lowe Dwarf_Error* /*error*/); 29077c478bd9Sstevel@tonic-gate 2908*4d9fdb46SRobert Mustacchi /* New November 2015 */ 2909*4d9fdb46SRobert Mustacchi int dwarf_get_frame_section_name(Dwarf_Debug /*dbg*/, 2910*4d9fdb46SRobert Mustacchi const char ** /*section_name_out*/, 2911*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 2912*4d9fdb46SRobert Mustacchi 2913*4d9fdb46SRobert Mustacchi /* New November 2015 */ 2914*4d9fdb46SRobert Mustacchi int dwarf_get_frame_section_name_eh_gnu(Dwarf_Debug /*dbg*/, 2915*4d9fdb46SRobert Mustacchi const char ** /*section_name_out*/, 2916*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 2917*4d9fdb46SRobert Mustacchi 29187c478bd9Sstevel@tonic-gate /* Consumer op on gnu .eh_frame info */ 29197c478bd9Sstevel@tonic-gate int dwarf_get_fde_list_eh( 292007dc1947SRichard Lowe Dwarf_Debug /*dbg*/, 292107dc1947SRichard Lowe Dwarf_Cie** /*cie_data*/, 292207dc1947SRichard Lowe Dwarf_Signed* /*cie_element_count*/, 292307dc1947SRichard Lowe Dwarf_Fde** /*fde_data*/, 292407dc1947SRichard Lowe Dwarf_Signed* /*fde_element_count*/, 292507dc1947SRichard Lowe Dwarf_Error* /*error*/); 29267c478bd9Sstevel@tonic-gate 29277c478bd9Sstevel@tonic-gate 29287c478bd9Sstevel@tonic-gate /* consumer operations on frame info: .debug_frame */ 2929*4d9fdb46SRobert Mustacchi int dwarf_get_fde_list(Dwarf_Debug /*dbg*/, 2930*4d9fdb46SRobert Mustacchi Dwarf_Cie** /*cie_data*/, 2931*4d9fdb46SRobert Mustacchi Dwarf_Signed* /*cie_element_count*/, 2932*4d9fdb46SRobert Mustacchi Dwarf_Fde** /*fde_data*/, 2933*4d9fdb46SRobert Mustacchi Dwarf_Signed* /*fde_element_count*/, 293407dc1947SRichard Lowe Dwarf_Error* /*error*/); 293507dc1947SRichard Lowe 293607dc1947SRichard Lowe /* Release storage gotten by dwarf_get_fde_list_eh() or 293707dc1947SRichard Lowe dwarf_get_fde_list() */ 2938*4d9fdb46SRobert Mustacchi void dwarf_fde_cie_list_dealloc(Dwarf_Debug /*dbg*/, 2939*4d9fdb46SRobert Mustacchi Dwarf_Cie * /*cie_data*/, 2940*4d9fdb46SRobert Mustacchi Dwarf_Signed /*cie_element_count*/, 2941*4d9fdb46SRobert Mustacchi Dwarf_Fde * /*fde_data*/, 2942*4d9fdb46SRobert Mustacchi Dwarf_Signed /*fde_element_count*/); 2943*4d9fdb46SRobert Mustacchi 2944*4d9fdb46SRobert Mustacchi 2945*4d9fdb46SRobert Mustacchi 2946*4d9fdb46SRobert Mustacchi int dwarf_get_fde_range(Dwarf_Fde /*fde*/, 2947*4d9fdb46SRobert Mustacchi Dwarf_Addr* /*low_pc*/, 2948*4d9fdb46SRobert Mustacchi Dwarf_Unsigned* /*func_length*/, 2949*4d9fdb46SRobert Mustacchi Dwarf_Ptr* /*fde_bytes*/, 2950*4d9fdb46SRobert Mustacchi Dwarf_Unsigned* /*fde_byte_length*/, 2951*4d9fdb46SRobert Mustacchi Dwarf_Off* /*cie_offset*/, 2952*4d9fdb46SRobert Mustacchi Dwarf_Signed* /*cie_index*/, 2953*4d9fdb46SRobert Mustacchi Dwarf_Off* /*fde_offset*/, 295407dc1947SRichard Lowe Dwarf_Error* /*error*/); 295507dc1947SRichard Lowe 295607dc1947SRichard Lowe /* Useful for IRIX only: see dwarf_get_cie_augmentation_data() 2957*4d9fdb46SRobert Mustacchi dwarf_get_fde_augmentation_data() for GNU .eh_frame. */ 29587c478bd9Sstevel@tonic-gate int dwarf_get_fde_exception_info(Dwarf_Fde /*fde*/, 295907dc1947SRichard Lowe Dwarf_Signed* /* offset_into_exception_tables */, 296007dc1947SRichard Lowe Dwarf_Error* /*error*/); 296107dc1947SRichard Lowe 29627c478bd9Sstevel@tonic-gate 29637c478bd9Sstevel@tonic-gate int dwarf_get_cie_of_fde(Dwarf_Fde /*fde*/, 296407dc1947SRichard Lowe Dwarf_Cie * /*cie_returned*/, 296507dc1947SRichard Lowe Dwarf_Error* /*error*/); 29667c478bd9Sstevel@tonic-gate 2967*4d9fdb46SRobert Mustacchi int dwarf_get_cie_info_b(Dwarf_Cie /*cie*/, 296807dc1947SRichard Lowe Dwarf_Unsigned * /*bytes_in_cie*/, 2969*4d9fdb46SRobert Mustacchi Dwarf_Small* /*version*/, 297007dc1947SRichard Lowe char ** /*augmenter*/, 2971*4d9fdb46SRobert Mustacchi Dwarf_Unsigned* /*code_alignment_factor*/, 2972*4d9fdb46SRobert Mustacchi Dwarf_Signed* /*data_alignment_factor*/, 2973*4d9fdb46SRobert Mustacchi Dwarf_Half* /*return_address_register_rule*/, 2974*4d9fdb46SRobert Mustacchi Dwarf_Ptr* /*initial_instructions*/, 2975*4d9fdb46SRobert Mustacchi Dwarf_Unsigned* /*initial_instructions_length*/, 2976*4d9fdb46SRobert Mustacchi Dwarf_Half* /*offset_size*/, 2977*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 2978*4d9fdb46SRobert Mustacchi int dwarf_get_cie_info(Dwarf_Cie /*cie*/, 2979*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*bytes_in_cie*/, 2980*4d9fdb46SRobert Mustacchi Dwarf_Small* /*version*/, 2981*4d9fdb46SRobert Mustacchi char ** /*augmenter*/, 2982*4d9fdb46SRobert Mustacchi Dwarf_Unsigned* /*code_alignment_factor*/, 2983*4d9fdb46SRobert Mustacchi Dwarf_Signed* /*data_alignment_factor*/, 2984*4d9fdb46SRobert Mustacchi Dwarf_Half* /*return_address_register_rule*/, 2985*4d9fdb46SRobert Mustacchi Dwarf_Ptr* /*initial_instructions*/, 2986*4d9fdb46SRobert Mustacchi Dwarf_Unsigned* /*initial_instructions_length*/, 298707dc1947SRichard Lowe Dwarf_Error* /*error*/); 298807dc1947SRichard Lowe 298907dc1947SRichard Lowe /* dwarf_get_cie_index new September 2009. */ 299007dc1947SRichard Lowe int dwarf_get_cie_index( 299107dc1947SRichard Lowe Dwarf_Cie /*cie*/, 2992*4d9fdb46SRobert Mustacchi Dwarf_Signed* /*index*/, 299307dc1947SRichard Lowe Dwarf_Error* /*error*/ ); 299407dc1947SRichard Lowe 29957c478bd9Sstevel@tonic-gate 2996*4d9fdb46SRobert Mustacchi int dwarf_get_fde_instr_bytes(Dwarf_Fde /*fde*/, 2997*4d9fdb46SRobert Mustacchi Dwarf_Ptr * /*outinstrs*/, Dwarf_Unsigned * /*outlen*/, 299807dc1947SRichard Lowe Dwarf_Error * /*error*/); 29997c478bd9Sstevel@tonic-gate 3000*4d9fdb46SRobert Mustacchi int dwarf_get_fde_info_for_all_regs(Dwarf_Fde /*fde*/, 300107dc1947SRichard Lowe Dwarf_Addr /*pc_requested*/, 300207dc1947SRichard Lowe Dwarf_Regtable* /*reg_table*/, 300307dc1947SRichard Lowe Dwarf_Addr* /*row_pc*/, 300407dc1947SRichard Lowe Dwarf_Error* /*error*/); 300507dc1947SRichard Lowe 3006*4d9fdb46SRobert Mustacchi int dwarf_get_fde_info_for_all_regs3(Dwarf_Fde /*fde*/, 300707dc1947SRichard Lowe Dwarf_Addr /*pc_requested*/, 300807dc1947SRichard Lowe Dwarf_Regtable3* /*reg_table*/, 300907dc1947SRichard Lowe Dwarf_Addr* /*row_pc*/, 301007dc1947SRichard Lowe Dwarf_Error* /*error*/); 301107dc1947SRichard Lowe 301207dc1947SRichard Lowe /* In this older interface DW_FRAME_CFA_COL is a meaningful 301307dc1947SRichard Lowe column (which does not work well with DWARF3 or 301407dc1947SRichard Lowe non-MIPS architectures). */ 3015*4d9fdb46SRobert Mustacchi int dwarf_get_fde_info_for_reg(Dwarf_Fde /*fde*/, 3016*4d9fdb46SRobert Mustacchi Dwarf_Half /*table_column*/, 3017*4d9fdb46SRobert Mustacchi Dwarf_Addr /*pc_requested*/, 301807dc1947SRichard Lowe Dwarf_Signed* /*offset_relevant*/, 3019*4d9fdb46SRobert Mustacchi Dwarf_Signed* /*register*/, 3020*4d9fdb46SRobert Mustacchi Dwarf_Signed* /*offset*/, 3021*4d9fdb46SRobert Mustacchi Dwarf_Addr* /*row_pc*/, 302207dc1947SRichard Lowe Dwarf_Error* /*error*/); 302307dc1947SRichard Lowe 3024*4d9fdb46SRobert Mustacchi /* See discussion of dw_value_type, libdwarf.h. 302507dc1947SRichard Lowe Use of DW_FRAME_CFA_COL is not meaningful in this interface. 302607dc1947SRichard Lowe See dwarf_get_fde_info_for_cfa_reg3(). 302707dc1947SRichard Lowe */ 302807dc1947SRichard Lowe /* dwarf_get_fde_info_for_reg3 is useful on a single column, but 302907dc1947SRichard Lowe it is inefficient to iterate across all table_columns using this 303007dc1947SRichard Lowe function. Instead call dwarf_get_fde_info_for_all_regs3() and index 303107dc1947SRichard Lowe into the table it fills in. */ 3032*4d9fdb46SRobert Mustacchi int dwarf_get_fde_info_for_reg3(Dwarf_Fde /*fde*/, 3033*4d9fdb46SRobert Mustacchi Dwarf_Half /*table_column*/, 3034*4d9fdb46SRobert Mustacchi Dwarf_Addr /*pc_requested*/, 3035*4d9fdb46SRobert Mustacchi Dwarf_Small * /*value_type*/, 3036*4d9fdb46SRobert Mustacchi Dwarf_Signed * /*offset_relevant*/, 3037*4d9fdb46SRobert Mustacchi Dwarf_Signed * /*register*/, 3038*4d9fdb46SRobert Mustacchi Dwarf_Signed * /*offset_or_block_len*/, 3039*4d9fdb46SRobert Mustacchi Dwarf_Ptr * /*block_ptr */, 3040*4d9fdb46SRobert Mustacchi Dwarf_Addr * /*row_pc_out*/, 3041*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 3042*4d9fdb46SRobert Mustacchi 3043*4d9fdb46SRobert Mustacchi int dwarf_get_fde_info_for_reg3_b(Dwarf_Fde /*fde*/, 3044*4d9fdb46SRobert Mustacchi Dwarf_Half /*table_column*/, 3045*4d9fdb46SRobert Mustacchi Dwarf_Addr /*pc_requested*/, 3046*4d9fdb46SRobert Mustacchi Dwarf_Small * /*value_type*/, 304707dc1947SRichard Lowe Dwarf_Signed * /*offset_relevant*/, 3048*4d9fdb46SRobert Mustacchi Dwarf_Signed * /*register*/, 3049*4d9fdb46SRobert Mustacchi Dwarf_Signed * /*offset_or_block_len*/, 3050*4d9fdb46SRobert Mustacchi Dwarf_Ptr * /*block_ptr */, 3051*4d9fdb46SRobert Mustacchi Dwarf_Addr * /*row_pc_out*/, 3052*4d9fdb46SRobert Mustacchi Dwarf_Bool * /* has_more_rows */, 3053*4d9fdb46SRobert Mustacchi Dwarf_Addr * /* subsequent_pc */, 3054*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 3055*4d9fdb46SRobert Mustacchi 3056*4d9fdb46SRobert Mustacchi /* Use this or the next function to get the cfa. 3057*4d9fdb46SRobert Mustacchi New function, June 11, 2016*/ 3058*4d9fdb46SRobert Mustacchi int dwarf_get_fde_info_for_cfa_reg3_b(Dwarf_Fde /*fde*/, 3059*4d9fdb46SRobert Mustacchi Dwarf_Addr /*pc_requested*/, 3060*4d9fdb46SRobert Mustacchi Dwarf_Small * /*value_type*/, 3061*4d9fdb46SRobert Mustacchi Dwarf_Signed * /*offset_relevant*/, 3062*4d9fdb46SRobert Mustacchi Dwarf_Signed* /*register*/, 3063*4d9fdb46SRobert Mustacchi Dwarf_Signed* /*offset_or_block_len*/, 306407dc1947SRichard Lowe Dwarf_Ptr * /*block_ptr */, 3065*4d9fdb46SRobert Mustacchi Dwarf_Addr* /*row_pc_out*/, 3066*4d9fdb46SRobert Mustacchi Dwarf_Bool * /* has_more_rows */, 3067*4d9fdb46SRobert Mustacchi Dwarf_Addr * /* subsequent_pc */, 306807dc1947SRichard Lowe Dwarf_Error* /*error*/); 3069*4d9fdb46SRobert Mustacchi /* Use this to get the cfa. Or the above function. */ 3070*4d9fdb46SRobert Mustacchi int dwarf_get_fde_info_for_cfa_reg3(Dwarf_Fde /*fde*/, 3071*4d9fdb46SRobert Mustacchi Dwarf_Addr /*pc_requested*/, 3072*4d9fdb46SRobert Mustacchi Dwarf_Small * /*value_type*/, 307307dc1947SRichard Lowe Dwarf_Signed * /*offset_relevant*/, 3074*4d9fdb46SRobert Mustacchi Dwarf_Signed* /*register*/, 3075*4d9fdb46SRobert Mustacchi Dwarf_Signed* /*offset_or_block_len*/, 307607dc1947SRichard Lowe Dwarf_Ptr * /*block_ptr */, 3077*4d9fdb46SRobert Mustacchi Dwarf_Addr* /*row_pc_out*/, 307807dc1947SRichard Lowe Dwarf_Error* /*error*/); 30797c478bd9Sstevel@tonic-gate 3080*4d9fdb46SRobert Mustacchi int dwarf_get_fde_for_die(Dwarf_Debug /*dbg*/, 3081*4d9fdb46SRobert Mustacchi Dwarf_Die /*subr_die */, 308207dc1947SRichard Lowe Dwarf_Fde * /*returned_fde*/, 308307dc1947SRichard Lowe Dwarf_Error* /*error*/); 30847c478bd9Sstevel@tonic-gate 3085*4d9fdb46SRobert Mustacchi int dwarf_get_fde_n(Dwarf_Fde* /*fde_data*/, 3086*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*fde_index*/, 308707dc1947SRichard Lowe Dwarf_Fde * /*returned_fde*/, 308807dc1947SRichard Lowe Dwarf_Error* /*error*/); 30897c478bd9Sstevel@tonic-gate 3090*4d9fdb46SRobert Mustacchi int dwarf_get_fde_at_pc(Dwarf_Fde* /*fde_data*/, 3091*4d9fdb46SRobert Mustacchi Dwarf_Addr /*pc_of_interest*/, 309207dc1947SRichard Lowe Dwarf_Fde * /*returned_fde*/, 3093*4d9fdb46SRobert Mustacchi Dwarf_Addr* /*lopc*/, 3094*4d9fdb46SRobert Mustacchi Dwarf_Addr* /*hipc*/, 309507dc1947SRichard Lowe Dwarf_Error* /*error*/); 309607dc1947SRichard Lowe 309707dc1947SRichard Lowe /* GNU .eh_frame augmentation information, raw form, see 309807dc1947SRichard Lowe Linux Standard Base Core Specification version 3.0 . */ 309907dc1947SRichard Lowe int dwarf_get_cie_augmentation_data(Dwarf_Cie /* cie*/, 310007dc1947SRichard Lowe Dwarf_Small ** /* augdata */, 310107dc1947SRichard Lowe Dwarf_Unsigned * /* augdata_len */, 310207dc1947SRichard Lowe Dwarf_Error* /*error*/); 310307dc1947SRichard Lowe /* GNU .eh_frame augmentation information, raw form, see 310407dc1947SRichard Lowe Linux Standard Base Core Specification version 3.0 . */ 310507dc1947SRichard Lowe int dwarf_get_fde_augmentation_data(Dwarf_Fde /* fde*/, 310607dc1947SRichard Lowe Dwarf_Small ** /* augdata */, 310707dc1947SRichard Lowe Dwarf_Unsigned * /* augdata_len */, 310807dc1947SRichard Lowe Dwarf_Error* /*error*/); 310907dc1947SRichard Lowe 3110*4d9fdb46SRobert Mustacchi int dwarf_expand_frame_instructions(Dwarf_Cie /*cie*/, 3111*4d9fdb46SRobert Mustacchi Dwarf_Ptr /*instruction*/, 3112*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*i_length*/, 3113*4d9fdb46SRobert Mustacchi Dwarf_Frame_Op** /*returned_op_list*/, 311407dc1947SRichard Lowe Dwarf_Signed* /*op_count*/, 311507dc1947SRichard Lowe Dwarf_Error* /*error*/); 31167c478bd9Sstevel@tonic-gate 31177c478bd9Sstevel@tonic-gate /* Operations on .debug_aranges. */ 3118*4d9fdb46SRobert Mustacchi int dwarf_get_aranges(Dwarf_Debug /*dbg*/, 3119*4d9fdb46SRobert Mustacchi Dwarf_Arange** /*aranges*/, 312007dc1947SRichard Lowe Dwarf_Signed * /*arange_count*/, 312107dc1947SRichard Lowe Dwarf_Error* /*error*/); 31227c478bd9Sstevel@tonic-gate 3123*4d9fdb46SRobert Mustacchi int dwarf_get_ranges_section_name(Dwarf_Debug /*dbg*/, 3124*4d9fdb46SRobert Mustacchi const char ** /*section_name_out*/, 3125*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 3126*4d9fdb46SRobert Mustacchi 3127*4d9fdb46SRobert Mustacchi int dwarf_get_aranges_section_name(Dwarf_Debug /*dbg*/, 3128*4d9fdb46SRobert Mustacchi const char ** /*section_name_out*/, 3129*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 3130*4d9fdb46SRobert Mustacchi 31317c478bd9Sstevel@tonic-gate 31327c478bd9Sstevel@tonic-gate 31337c478bd9Sstevel@tonic-gate int dwarf_get_arange( 3134*4d9fdb46SRobert Mustacchi Dwarf_Arange* /*aranges*/, 3135*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*arange_count*/, 3136*4d9fdb46SRobert Mustacchi Dwarf_Addr /*address*/, 313707dc1947SRichard Lowe Dwarf_Arange * /*returned_arange*/, 313807dc1947SRichard Lowe Dwarf_Error* /*error*/); 31397c478bd9Sstevel@tonic-gate 31407c478bd9Sstevel@tonic-gate int dwarf_get_cu_die_offset( 3141*4d9fdb46SRobert Mustacchi Dwarf_Arange /*arange*/, 314207dc1947SRichard Lowe Dwarf_Off* /*return_offset*/, 314307dc1947SRichard Lowe Dwarf_Error* /*error*/); 31447c478bd9Sstevel@tonic-gate 31457c478bd9Sstevel@tonic-gate int dwarf_get_arange_cu_header_offset( 3146*4d9fdb46SRobert Mustacchi Dwarf_Arange /*arange*/, 314707dc1947SRichard Lowe Dwarf_Off* /*return_cu_header_offset*/, 314807dc1947SRichard Lowe Dwarf_Error* /*error*/); 31497c478bd9Sstevel@tonic-gate #ifdef __sgi /* pragma is sgi MIPS only */ 31507c478bd9Sstevel@tonic-gate #pragma optional dwarf_get_arange_cu_header_offset 31517c478bd9Sstevel@tonic-gate #endif 31527c478bd9Sstevel@tonic-gate 315307dc1947SRichard Lowe /* DWARF2,3 interface. No longer really adequate (it was never 315407dc1947SRichard Lowe right for segmented address spaces, please switch 3155*4d9fdb46SRobert Mustacchi to using dwarf_get_arange_info_b instead. 315607dc1947SRichard Lowe There is no effective difference between these 315707dc1947SRichard Lowe functions if the address space 315807dc1947SRichard Lowe of the target is not segmented. */ 31597c478bd9Sstevel@tonic-gate int dwarf_get_arange_info( 3160*4d9fdb46SRobert Mustacchi Dwarf_Arange /*arange*/, 3161*4d9fdb46SRobert Mustacchi Dwarf_Addr* /*start*/, 3162*4d9fdb46SRobert Mustacchi Dwarf_Unsigned* /*length*/, 3163*4d9fdb46SRobert Mustacchi Dwarf_Off* /*cu_die_offset*/, 316407dc1947SRichard Lowe Dwarf_Error* /*error*/ ); 316507dc1947SRichard Lowe 3166*4d9fdb46SRobert Mustacchi /* New for DWARF4, entries may have segment information. 316707dc1947SRichard Lowe *segment is only meaningful if *segment_entry_size is non-zero. */ 316807dc1947SRichard Lowe int dwarf_get_arange_info_b( 3169*4d9fdb46SRobert Mustacchi Dwarf_Arange /*arange*/, 3170*4d9fdb46SRobert Mustacchi Dwarf_Unsigned* /*segment*/, 3171*4d9fdb46SRobert Mustacchi Dwarf_Unsigned* /*segment_entry_size*/, 3172*4d9fdb46SRobert Mustacchi Dwarf_Addr * /*start*/, 3173*4d9fdb46SRobert Mustacchi Dwarf_Unsigned* /*length*/, 3174*4d9fdb46SRobert Mustacchi Dwarf_Off * /*cu_die_offset*/, 317507dc1947SRichard Lowe Dwarf_Error * /*error*/ ); 31767c478bd9Sstevel@tonic-gate 3177*4d9fdb46SRobert Mustacchi /* BEGIN: DWARF5 .debug_macro interfaces 3178*4d9fdb46SRobert Mustacchi NEW November 2015. */ 3179*4d9fdb46SRobert Mustacchi int dwarf_get_macro_context(Dwarf_Die /*die*/, 3180*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*version_out*/, 3181*4d9fdb46SRobert Mustacchi Dwarf_Macro_Context * /*macro_context*/, 3182*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*macro_unit_offset_out*/, 3183*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*macro_ops_count_out*/, 3184*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*macro_ops_data_length_out*/, 3185*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 3186*4d9fdb46SRobert Mustacchi 3187*4d9fdb46SRobert Mustacchi /* Just like dwarf_get_macro_context, but instead of using 3188*4d9fdb46SRobert Mustacchi DW_AT_macros or DW_AT_GNU_macros to get the offset we just 3189*4d9fdb46SRobert Mustacchi take the offset given. */ 3190*4d9fdb46SRobert Mustacchi int dwarf_get_macro_context_by_offset(Dwarf_Die /*die*/, 3191*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*offset*/, 3192*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*version_out*/, 3193*4d9fdb46SRobert Mustacchi Dwarf_Macro_Context * /*macro_context*/, 3194*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*macro_ops_count_out*/, 3195*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*macro_ops_data_length*/, 3196*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 3197*4d9fdb46SRobert Mustacchi 3198*4d9fdb46SRobert Mustacchi void dwarf_dealloc_macro_context(Dwarf_Macro_Context /*mc*/); 3199*4d9fdb46SRobert Mustacchi int dwarf_get_macro_section_name(Dwarf_Debug /*dbg*/, 3200*4d9fdb46SRobert Mustacchi const char ** /*sec_name_out*/, 3201*4d9fdb46SRobert Mustacchi Dwarf_Error * /*err*/); 3202*4d9fdb46SRobert Mustacchi 3203*4d9fdb46SRobert Mustacchi int dwarf_macro_context_head(Dwarf_Macro_Context /*head*/, 3204*4d9fdb46SRobert Mustacchi Dwarf_Half * /*version*/, 3205*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*mac_offset*/, 3206*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*mac_len*/, 3207*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*mac_header_len*/, 3208*4d9fdb46SRobert Mustacchi unsigned int * /*flags*/, 3209*4d9fdb46SRobert Mustacchi Dwarf_Bool * /*has_line_offset*/, 3210*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*line_offset*/, 3211*4d9fdb46SRobert Mustacchi Dwarf_Bool * /*has_offset_size_64*/, 3212*4d9fdb46SRobert Mustacchi Dwarf_Bool * /*has_operands_table*/, 3213*4d9fdb46SRobert Mustacchi Dwarf_Half * /*opcode_count*/, 3214*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 3215*4d9fdb46SRobert Mustacchi 3216*4d9fdb46SRobert Mustacchi /* Returns data from the operands table 3217*4d9fdb46SRobert Mustacchi in the macro unit header. */ 3218*4d9fdb46SRobert Mustacchi int dwarf_macro_operands_table(Dwarf_Macro_Context /*head*/, 3219*4d9fdb46SRobert Mustacchi Dwarf_Half /*index*/, /* 0 to opcode_count -1 */ 3220*4d9fdb46SRobert Mustacchi Dwarf_Half * /*opcode_number*/, 3221*4d9fdb46SRobert Mustacchi Dwarf_Half * /*operand_count*/, 3222*4d9fdb46SRobert Mustacchi const Dwarf_Small ** /*operand_array*/, 3223*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 3224*4d9fdb46SRobert Mustacchi 3225*4d9fdb46SRobert Mustacchi /* Access to the macro operations, 0 to macro_ops_count_out-1 3226*4d9fdb46SRobert Mustacchi Where the last of these will have macro_operator 0 (which appears 3227*4d9fdb46SRobert Mustacchi in the ops data and means end-of-ops). 3228*4d9fdb46SRobert Mustacchi op_start_section_offset is the section offset of 3229*4d9fdb46SRobert Mustacchi the macro operator (which is a single unsigned byte, 3230*4d9fdb46SRobert Mustacchi and is followed by the macro operand data). */ 3231*4d9fdb46SRobert Mustacchi int dwarf_get_macro_op(Dwarf_Macro_Context /*macro_context*/, 3232*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*op_number*/, 3233*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*op_start_section_offset*/, 3234*4d9fdb46SRobert Mustacchi Dwarf_Half * /*macro_operator*/, 3235*4d9fdb46SRobert Mustacchi Dwarf_Half * /*forms_count*/, 3236*4d9fdb46SRobert Mustacchi const Dwarf_Small ** /*formcode_array*/, 3237*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 3238*4d9fdb46SRobert Mustacchi 3239*4d9fdb46SRobert Mustacchi int dwarf_get_macro_defundef(Dwarf_Macro_Context /*macro_context*/, 3240*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*op_number*/, 3241*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*line_number*/, 3242*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*index*/, 3243*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*offset*/, 3244*4d9fdb46SRobert Mustacchi Dwarf_Half * /*forms_count*/, 3245*4d9fdb46SRobert Mustacchi const char ** /*macro_string*/, 3246*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 3247*4d9fdb46SRobert Mustacchi int dwarf_get_macro_startend_file(Dwarf_Macro_Context /*macro_context*/, 3248*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*op_number*/, 3249*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*line_number*/, 3250*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*name_index_to_line_tab*/, 3251*4d9fdb46SRobert Mustacchi const char ** /*src_file_name*/, 3252*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 3253*4d9fdb46SRobert Mustacchi int dwarf_get_macro_import(Dwarf_Macro_Context /*macro_context*/, 3254*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*op_number*/, 3255*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*target_offset*/, 3256*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 3257*4d9fdb46SRobert Mustacchi 3258*4d9fdb46SRobert Mustacchi /* END: DWARF5 .debug_macro interfaces. */ 32597c478bd9Sstevel@tonic-gate 32607c478bd9Sstevel@tonic-gate /* consumer .debug_macinfo information interface. 32617c478bd9Sstevel@tonic-gate */ 32627c478bd9Sstevel@tonic-gate struct Dwarf_Macro_Details_s { 326307dc1947SRichard Lowe Dwarf_Off dmd_offset; /* offset, in the section, 3264*4d9fdb46SRobert Mustacchi of this macro info */ 326507dc1947SRichard Lowe Dwarf_Small dmd_type; /* the type, DW_MACINFO_define etc*/ 326607dc1947SRichard Lowe Dwarf_Signed dmd_lineno; /* the source line number where 3267*4d9fdb46SRobert Mustacchi applicable and vend_def number if 3268*4d9fdb46SRobert Mustacchi vendor_extension op */ 32697c478bd9Sstevel@tonic-gate 327007dc1947SRichard Lowe Dwarf_Signed dmd_fileindex;/* the source file index: 3271*4d9fdb46SRobert Mustacchi applies to define undef start_file */ 327207dc1947SRichard Lowe char * dmd_macro; /* macro name (with value for defineop) 3273*4d9fdb46SRobert Mustacchi string from vendor ext */ 32747c478bd9Sstevel@tonic-gate }; 32757c478bd9Sstevel@tonic-gate 3276*4d9fdb46SRobert Mustacchi /* dwarf_print_lines is for use by dwarfdump: it prints 3277*4d9fdb46SRobert Mustacchi line info to stdout. 3278*4d9fdb46SRobert Mustacchi The _dwarf name is obsolete. Use dwarf_ instead. 3279*4d9fdb46SRobert Mustacchi Added extra argnument 2/2009 for better checking. 328007dc1947SRichard Lowe */ 328107dc1947SRichard Lowe int _dwarf_print_lines(Dwarf_Die /*cu_die*/,Dwarf_Error * /*error*/); 328207dc1947SRichard Lowe int dwarf_print_lines(Dwarf_Die /*cu_die*/,Dwarf_Error * /*error*/, 328307dc1947SRichard Lowe int * /*error_count_out */); 328407dc1947SRichard Lowe 3285*4d9fdb46SRobert Mustacchi /* As of August 2013, dwarf_print_lines() no longer uses printf. 3286*4d9fdb46SRobert Mustacchi Instead it calls back to the application using a function pointer 3287*4d9fdb46SRobert Mustacchi once per line-to-print. The lines passed back already have any needed 3288*4d9fdb46SRobert Mustacchi newlines. The following struct is used to initialize 3289*4d9fdb46SRobert Mustacchi the callback mechanism. 3290*4d9fdb46SRobert Mustacchi 3291*4d9fdb46SRobert Mustacchi Failing to call the dwarf_register_printf_callback() function will 3292*4d9fdb46SRobert Mustacchi prevent the lines from being passed back but such omission 3293*4d9fdb46SRobert Mustacchi is not an error. 3294*4d9fdb46SRobert Mustacchi See libdwarf2.1.mm for further documentation. 3295*4d9fdb46SRobert Mustacchi 3296*4d9fdb46SRobert Mustacchi The return value is the previous set of callback values. 3297*4d9fdb46SRobert Mustacchi */ 3298*4d9fdb46SRobert Mustacchi 3299*4d9fdb46SRobert Mustacchi typedef void (* dwarf_printf_callback_function_type) 3300*4d9fdb46SRobert Mustacchi (void * /*user_pointer*/, const char * /*linecontent*/); 3301*4d9fdb46SRobert Mustacchi 3302*4d9fdb46SRobert Mustacchi struct Dwarf_Printf_Callback_Info_s { 3303*4d9fdb46SRobert Mustacchi void * dp_user_pointer; 3304*4d9fdb46SRobert Mustacchi dwarf_printf_callback_function_type dp_fptr; 3305*4d9fdb46SRobert Mustacchi char * dp_buffer; 3306*4d9fdb46SRobert Mustacchi unsigned int dp_buffer_len; 3307*4d9fdb46SRobert Mustacchi int dp_buffer_user_provided; 3308*4d9fdb46SRobert Mustacchi void * dp_reserved; 3309*4d9fdb46SRobert Mustacchi }; 3310*4d9fdb46SRobert Mustacchi 3311*4d9fdb46SRobert Mustacchi /* If called with a NULL newvalues pointer, it simply returns 3312*4d9fdb46SRobert Mustacchi the current set of values for this Dwarf_Debug. */ 3313*4d9fdb46SRobert Mustacchi struct Dwarf_Printf_Callback_Info_s 3314*4d9fdb46SRobert Mustacchi dwarf_register_printf_callback(Dwarf_Debug /*dbg*/, 3315*4d9fdb46SRobert Mustacchi struct Dwarf_Printf_Callback_Info_s * /*newvalues*/); 3316*4d9fdb46SRobert Mustacchi 3317*4d9fdb46SRobert Mustacchi 3318*4d9fdb46SRobert Mustacchi /* dwarf_check_lineheader lets dwarfdump get detailed messages 3319*4d9fdb46SRobert Mustacchi about some compiler errors we detect. 3320*4d9fdb46SRobert Mustacchi We return the count of detected errors through the 3321*4d9fdb46SRobert Mustacchi pointer. 3322*4d9fdb46SRobert Mustacchi 3323*4d9fdb46SRobert Mustacchi Use dwarf_check_lineheader_b() (new 14 April 2020) 3324*4d9fdb46SRobert Mustacchi in place of dwarf_check_lineheader(). 33257c478bd9Sstevel@tonic-gate */ 3326*4d9fdb46SRobert Mustacchi int dwarf_check_lineheader_b(Dwarf_Die /*cu_die*/, 3327*4d9fdb46SRobert Mustacchi int */*errcount_out*/, 3328*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 3329*4d9fdb46SRobert Mustacchi void dwarf_check_lineheader(Dwarf_Die /*cu_die*/, 3330*4d9fdb46SRobert Mustacchi int * /*errcount_out*/); 33317c478bd9Sstevel@tonic-gate 3332*4d9fdb46SRobert Mustacchi /* dwarf_ld_sort_lines helps SGI IRIX ld 3333*4d9fdb46SRobert Mustacchi rearrange lines in .debug_line in a .o created with a text 3334*4d9fdb46SRobert Mustacchi section per function. 333507dc1947SRichard Lowe -OPT:procedure_reorder=ON 3336*4d9fdb46SRobert Mustacchi where ld-cord (cord(1)ing by ld, 3337*4d9fdb46SRobert Mustacchi not by cord(1)) may have changed the function order. 3338*4d9fdb46SRobert Mustacchi The _dwarf name is obsolete. Use dwarf_ instead. 33397c478bd9Sstevel@tonic-gate */ 33407c478bd9Sstevel@tonic-gate int _dwarf_ld_sort_lines( 334107dc1947SRichard Lowe void * /*orig_buffer*/, 334207dc1947SRichard Lowe unsigned long /* buffer_len*/, 334307dc1947SRichard Lowe int /*is_64_bit*/, 334407dc1947SRichard Lowe int * /*any_change*/, 334507dc1947SRichard Lowe int * /*err_code*/); 334607dc1947SRichard Lowe int dwarf_ld_sort_lines( 334707dc1947SRichard Lowe void * /*orig_buffer*/, 334807dc1947SRichard Lowe unsigned long /*buffer_len*/, 334907dc1947SRichard Lowe int /*is_64_bit*/, 335007dc1947SRichard Lowe int * /*any_change*/, 335107dc1947SRichard Lowe int * /*err_code*/); 335207dc1947SRichard Lowe 335307dc1947SRichard Lowe /* Used by dwarfdump -v to print fde offsets from debugging 335407dc1947SRichard Lowe info. 335507dc1947SRichard Lowe The _dwarf name is obsolete. Use dwarf_ instead. 33567c478bd9Sstevel@tonic-gate */ 3357*4d9fdb46SRobert Mustacchi int _dwarf_fde_section_offset(Dwarf_Debug /*dbg*/, 335807dc1947SRichard Lowe Dwarf_Fde /*in_fde*/, 3359*4d9fdb46SRobert Mustacchi Dwarf_Off * /*fde_off*/, 336007dc1947SRichard Lowe Dwarf_Off * /*cie_off*/, 336107dc1947SRichard Lowe Dwarf_Error * /*err*/); 3362*4d9fdb46SRobert Mustacchi 3363*4d9fdb46SRobert Mustacchi int dwarf_fde_section_offset(Dwarf_Debug /*dbg*/, 336407dc1947SRichard Lowe Dwarf_Fde /*in_fde*/, 3365*4d9fdb46SRobert Mustacchi Dwarf_Off * /*fde_off*/, 336607dc1947SRichard Lowe Dwarf_Off * /*cie_off*/, 336707dc1947SRichard Lowe Dwarf_Error * /*err*/); 336807dc1947SRichard Lowe 336907dc1947SRichard Lowe /* Used by dwarfdump -v to print cie offsets from debugging 337007dc1947SRichard Lowe info. 337107dc1947SRichard Lowe The _dwarf name is obsolete. Use dwarf_ instead. 33727c478bd9Sstevel@tonic-gate */ 337307dc1947SRichard Lowe int dwarf_cie_section_offset(Dwarf_Debug /*dbg*/, 337407dc1947SRichard Lowe Dwarf_Cie /*in_cie*/, 337507dc1947SRichard Lowe Dwarf_Off * /*cie_off */, 337607dc1947SRichard Lowe Dwarf_Error * /*err*/); 337707dc1947SRichard Lowe int _dwarf_cie_section_offset(Dwarf_Debug /*dbg*/, 337807dc1947SRichard Lowe Dwarf_Cie /*in_cie*/, 337907dc1947SRichard Lowe Dwarf_Off * /*cie_off*/, 338007dc1947SRichard Lowe Dwarf_Error * /*err*/); 33817c478bd9Sstevel@tonic-gate 33827c478bd9Sstevel@tonic-gate typedef struct Dwarf_Macro_Details_s Dwarf_Macro_Details; 33837c478bd9Sstevel@tonic-gate 33847c478bd9Sstevel@tonic-gate char *dwarf_find_macro_value_start(char * /*macro_string*/); 33857c478bd9Sstevel@tonic-gate 33867c478bd9Sstevel@tonic-gate int dwarf_get_macro_details(Dwarf_Debug /*dbg*/, 338707dc1947SRichard Lowe Dwarf_Off /*macro_offset*/, 338807dc1947SRichard Lowe Dwarf_Unsigned /*maximum_count*/, 33897c478bd9Sstevel@tonic-gate Dwarf_Signed * /*entry_count*/, 33907c478bd9Sstevel@tonic-gate Dwarf_Macro_Details ** /*details*/, 339107dc1947SRichard Lowe Dwarf_Error * /*err*/); 33927c478bd9Sstevel@tonic-gate 33937c478bd9Sstevel@tonic-gate 3394*4d9fdb46SRobert Mustacchi /* dwarf_get_offset_size() New October 2015 */ 3395*4d9fdb46SRobert Mustacchi int dwarf_get_offset_size(Dwarf_Debug /*dbg*/, 3396*4d9fdb46SRobert Mustacchi Dwarf_Half * /*offset_size*/, 3397*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 33987c478bd9Sstevel@tonic-gate int dwarf_get_address_size(Dwarf_Debug /*dbg*/, 339907dc1947SRichard Lowe Dwarf_Half * /*addr_size*/, 340007dc1947SRichard Lowe Dwarf_Error * /*error*/); 340107dc1947SRichard Lowe int dwarf_get_die_address_size(Dwarf_Die /*die*/, 340207dc1947SRichard Lowe Dwarf_Half * /*addr_size*/, 340307dc1947SRichard Lowe Dwarf_Error * /*error*/); 340407dc1947SRichard Lowe 340507dc1947SRichard Lowe enum Dwarf_Form_Class dwarf_get_form_class( 340607dc1947SRichard Lowe Dwarf_Half /* dwversion */, 3407*4d9fdb46SRobert Mustacchi Dwarf_Half /* attrnum */, 3408*4d9fdb46SRobert Mustacchi Dwarf_Half /*offset_size */, 340907dc1947SRichard Lowe Dwarf_Half /*form*/); 34107c478bd9Sstevel@tonic-gate 34117c478bd9Sstevel@tonic-gate 3412*4d9fdb46SRobert Mustacchi /* BEGIN gdbindex operations interfaces. */ 3413*4d9fdb46SRobert Mustacchi /* .gdb_index section operations. 3414*4d9fdb46SRobert Mustacchi A GDB extension. 3415*4d9fdb46SRobert Mustacchi The section is in some executables and if present 3416*4d9fdb46SRobert Mustacchi is used to quickly map an address or name to 3417*4d9fdb46SRobert Mustacchi a skeleton CU or TU. If present then there are 3418*4d9fdb46SRobert Mustacchi .dwo or .dwp files somewhere to make detailed 3419*4d9fdb46SRobert Mustacchi debugging possible (up to user code to 3420*4d9fdb46SRobert Mustacchi find it/them and deal with them). 3421*4d9fdb46SRobert Mustacchi 3422*4d9fdb46SRobert Mustacchi Version 8 built by gdb, so type entries are ok as is. 3423*4d9fdb46SRobert Mustacchi Version 7 built by the 'gold' linker and type index 3424*4d9fdb46SRobert Mustacchi entries for a CU must be derived othewise, the 3425*4d9fdb46SRobert Mustacchi type index is not correct... ? FIXME 3426*4d9fdb46SRobert Mustacchi */ 34277c478bd9Sstevel@tonic-gate 3428*4d9fdb46SRobert Mustacchi /* Creates a Dwarf_Gdbindex, returning it and 3429*4d9fdb46SRobert Mustacchi its values through the pointers. */ 3430*4d9fdb46SRobert Mustacchi int dwarf_gdbindex_header(Dwarf_Debug /*dbg*/, 3431*4d9fdb46SRobert Mustacchi Dwarf_Gdbindex * /*gdbindexptr*/, 3432*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*version*/, 3433*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*cu_list_offset*/, 3434*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*types_cu_list_offset*/, 3435*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*address_area_offset*/, 3436*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*symbol_table_offset*/, 3437*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*constant_pool_offset*/, 3438*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*section_size*/, 3439*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*unused_reserved*/, 3440*4d9fdb46SRobert Mustacchi const char ** /*section_name*/, 3441*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 3442*4d9fdb46SRobert Mustacchi 3443*4d9fdb46SRobert Mustacchi int dwarf_gdbindex_culist_array(Dwarf_Gdbindex /*gdbindexptr*/, 3444*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*list_length*/, 3445*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 3446*4d9fdb46SRobert Mustacchi 3447*4d9fdb46SRobert Mustacchi /* entryindex: 0 to list_length-1 */ 3448*4d9fdb46SRobert Mustacchi int dwarf_gdbindex_culist_entry(Dwarf_Gdbindex /*gdbindexptr*/, 3449*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*entryindex*/, 3450*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*cu_offset*/, 3451*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*cu_length*/, 3452*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 3453*4d9fdb46SRobert Mustacchi 3454*4d9fdb46SRobert Mustacchi int dwarf_gdbindex_types_culist_array(Dwarf_Gdbindex /*gdbindexptr*/, 3455*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*types_list_length*/, 3456*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 3457*4d9fdb46SRobert Mustacchi 3458*4d9fdb46SRobert Mustacchi /* entryindex: 0 to types_list_length -1 */ 3459*4d9fdb46SRobert Mustacchi int dwarf_gdbindex_types_culist_entry( 3460*4d9fdb46SRobert Mustacchi Dwarf_Gdbindex /*gdbindexptr*/, 3461*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*entryindex*/, 3462*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*cu_offset*/, 3463*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*tu_offset*/, 3464*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*type_signature*/, 3465*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 3466*4d9fdb46SRobert Mustacchi 3467*4d9fdb46SRobert Mustacchi int dwarf_gdbindex_addressarea(Dwarf_Gdbindex /*gdbindexptr*/, 3468*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*addressarea_list_length*/, 3469*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 3470*4d9fdb46SRobert Mustacchi 3471*4d9fdb46SRobert Mustacchi /* entryindex: 0 to addressarea_list_length-1 */ 3472*4d9fdb46SRobert Mustacchi int dwarf_gdbindex_addressarea_entry( 3473*4d9fdb46SRobert Mustacchi Dwarf_Gdbindex /*gdbindexptr*/, 3474*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*entryindex*/, 3475*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*low_adddress*/, 3476*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*high_address*/, 3477*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*cu_index*/, 3478*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 3479*4d9fdb46SRobert Mustacchi 3480*4d9fdb46SRobert Mustacchi int dwarf_gdbindex_symboltable_array(Dwarf_Gdbindex /*gdbindexptr*/, 3481*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*symtab_list_length*/, 3482*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 3483*4d9fdb46SRobert Mustacchi 3484*4d9fdb46SRobert Mustacchi /* entryindex: 0 to symtab_list_length-1 */ 3485*4d9fdb46SRobert Mustacchi int dwarf_gdbindex_symboltable_entry( 3486*4d9fdb46SRobert Mustacchi Dwarf_Gdbindex /*gdbindexptr*/, 3487*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*entryindex*/, 3488*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*string_offset*/, 3489*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*cu_vector_offset*/, 3490*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 3491*4d9fdb46SRobert Mustacchi 3492*4d9fdb46SRobert Mustacchi int dwarf_gdbindex_cuvector_length(Dwarf_Gdbindex /*gdbindex*/, 3493*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*cuvector_offset*/, 3494*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*innercount*/, 3495*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 3496*4d9fdb46SRobert Mustacchi 3497*4d9fdb46SRobert Mustacchi 3498*4d9fdb46SRobert Mustacchi int dwarf_gdbindex_cuvector_inner_attributes(Dwarf_Gdbindex /*gdbindex*/, 3499*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*cuvector_offset*/, 3500*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*innerindex*/, 3501*4d9fdb46SRobert Mustacchi /* The attr_value is a field of bits. For expanded version 3502*4d9fdb46SRobert Mustacchi use dwarf_gdbindex_cuvector_expand_value() */ 3503*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*attr_value*/, 3504*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 3505*4d9fdb46SRobert Mustacchi 3506*4d9fdb46SRobert Mustacchi int dwarf_gdbindex_cuvector_instance_expand_value( 3507*4d9fdb46SRobert Mustacchi Dwarf_Gdbindex /*gdbindex*/, 3508*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*value*/, 3509*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*cu_index*/, 3510*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*reserved1*/, 3511*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*symbol_kind*/, 3512*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*is_static*/, 3513*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 3514*4d9fdb46SRobert Mustacchi 3515*4d9fdb46SRobert Mustacchi 3516*4d9fdb46SRobert Mustacchi /* The strings in the pool follow (in memory) the cu index 3517*4d9fdb46SRobert Mustacchi set and are NUL terminated. */ 3518*4d9fdb46SRobert Mustacchi 3519*4d9fdb46SRobert Mustacchi int dwarf_gdbindex_string_by_offset(Dwarf_Gdbindex /*gdbindexptr*/, 3520*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*stringoffset*/, 3521*4d9fdb46SRobert Mustacchi const char ** /*string_ptr*/, 3522*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 3523*4d9fdb46SRobert Mustacchi 3524*4d9fdb46SRobert Mustacchi void dwarf_gdbindex_free(Dwarf_Gdbindex /*gdbindexptr*/); 3525*4d9fdb46SRobert Mustacchi 3526*4d9fdb46SRobert Mustacchi /* END gdbindex/debugfission operations. */ 3527*4d9fdb46SRobert Mustacchi 3528*4d9fdb46SRobert Mustacchi /* START debugfission dwp .debug_cu_index and .debug_tu_index operations. */ 3529*4d9fdb46SRobert Mustacchi 3530*4d9fdb46SRobert Mustacchi int dwarf_get_xu_index_header(Dwarf_Debug /*dbg*/, 3531*4d9fdb46SRobert Mustacchi const char * section_type, /* "tu" or "cu" */ 3532*4d9fdb46SRobert Mustacchi Dwarf_Xu_Index_Header * /*xuhdr*/, 3533*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*version_number*/, 3534*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*offsets_count L*/, 3535*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*units_count N*/, 3536*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*hash_slots_count M*/, 3537*4d9fdb46SRobert Mustacchi const char ** /*sect_name*/, 3538*4d9fdb46SRobert Mustacchi Dwarf_Error * /*err*/); 3539*4d9fdb46SRobert Mustacchi 3540*4d9fdb46SRobert Mustacchi int dwarf_get_xu_index_section_type(Dwarf_Xu_Index_Header /*xuhdr*/, 3541*4d9fdb46SRobert Mustacchi /* the function returns a pointer to 3542*4d9fdb46SRobert Mustacchi the immutable string "tu" or "cu" via this arg. Do not free. */ 3543*4d9fdb46SRobert Mustacchi const char ** /*typename*/, 3544*4d9fdb46SRobert Mustacchi /* the function returns a pointer to 3545*4d9fdb46SRobert Mustacchi the immutable section name. Do not free. 3546*4d9fdb46SRobert Mustacchi .debug_cu_index or .debug_tu_index */ 3547*4d9fdb46SRobert Mustacchi const char ** /*sectionname*/, 3548*4d9fdb46SRobert Mustacchi Dwarf_Error * /*err*/); 3549*4d9fdb46SRobert Mustacchi 3550*4d9fdb46SRobert Mustacchi /* Index values 0 to M-1 are valid. */ 3551*4d9fdb46SRobert Mustacchi int dwarf_get_xu_hash_entry(Dwarf_Xu_Index_Header /*xuhdr*/, 3552*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*index*/, 3553*4d9fdb46SRobert Mustacchi 3554*4d9fdb46SRobert Mustacchi /* Returns the hash value. 64 bits. */ 3555*4d9fdb46SRobert Mustacchi Dwarf_Sig8 * /*hash_value*/, 3556*4d9fdb46SRobert Mustacchi 3557*4d9fdb46SRobert Mustacchi /* returns the index into rows of offset/size tables. */ 3558*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*index_to_sections*/, 3559*4d9fdb46SRobert Mustacchi Dwarf_Error * /*err*/); 3560*4d9fdb46SRobert Mustacchi 3561*4d9fdb46SRobert Mustacchi /* Columns 0 to L-1, valid. */ 3562*4d9fdb46SRobert Mustacchi int dwarf_get_xu_section_names(Dwarf_Xu_Index_Header /*xuhdr*/, 3563*4d9fdb46SRobert Mustacchi /* Row index defined to be row zero. */ 3564*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*column_index*/, 3565*4d9fdb46SRobert Mustacchi Dwarf_Unsigned* /*DW_SECT_ number*/, 3566*4d9fdb46SRobert Mustacchi const char ** /*DW_SECT_ name*/, 3567*4d9fdb46SRobert Mustacchi Dwarf_Error * /*err*/); 3568*4d9fdb46SRobert Mustacchi 3569*4d9fdb46SRobert Mustacchi /* Rows 1 to N col 0 to L-1 are valid */ 3570*4d9fdb46SRobert Mustacchi int dwarf_get_xu_section_offset(Dwarf_Xu_Index_Header /*xuhdr*/, 3571*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*row_index*/, 3572*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*column_index*/, 3573*4d9fdb46SRobert Mustacchi Dwarf_Unsigned* /*sec_offset*/, 3574*4d9fdb46SRobert Mustacchi Dwarf_Unsigned* /*sec_size*/, 3575*4d9fdb46SRobert Mustacchi Dwarf_Error * /*err*/); 3576*4d9fdb46SRobert Mustacchi 3577*4d9fdb46SRobert Mustacchi void dwarf_xu_header_free(Dwarf_Xu_Index_Header /*xuhdr*/); 3578*4d9fdb46SRobert Mustacchi 3579*4d9fdb46SRobert Mustacchi /* Defined larger than necessary. This struct, being visible, 3580*4d9fdb46SRobert Mustacchi will be difficult to change: binary compatibility. */ 3581*4d9fdb46SRobert Mustacchi #define DW_FISSION_SECT_COUNT 12 3582*4d9fdb46SRobert Mustacchi 3583*4d9fdb46SRobert Mustacchi /* User must allocate this struct, zero it, 3584*4d9fdb46SRobert Mustacchi and pass a pointer to it 3585*4d9fdb46SRobert Mustacchi into dwarf_get_debugfission_for_cu . */ 3586*4d9fdb46SRobert Mustacchi struct Dwarf_Debug_Fission_Per_CU_s { 3587*4d9fdb46SRobert Mustacchi /* Do not free the string. It contains "cu" or "tu". */ 3588*4d9fdb46SRobert Mustacchi /* If this is not set (ie, not a CU/TU in DWP Package File) 3589*4d9fdb46SRobert Mustacchi then pcu_type will be NULL. */ 3590*4d9fdb46SRobert Mustacchi const char * pcu_type; 3591*4d9fdb46SRobert Mustacchi /* pcu_index is the index (range 1 to N ) 3592*4d9fdb46SRobert Mustacchi into the tu/cu table of offsets and the table 3593*4d9fdb46SRobert Mustacchi of sizes. 1 to N as the zero index is reserved 3594*4d9fdb46SRobert Mustacchi for special purposes. Not a value one 3595*4d9fdb46SRobert Mustacchi actually needs. */ 3596*4d9fdb46SRobert Mustacchi Dwarf_Unsigned pcu_index; 3597*4d9fdb46SRobert Mustacchi Dwarf_Sig8 pcu_hash; /* 8 byte */ 3598*4d9fdb46SRobert Mustacchi /* [0] has offset and size 0. 3599*4d9fdb46SRobert Mustacchi [1]-[8] are DW_SECT_* indexes and the 3600*4d9fdb46SRobert Mustacchi values are the offset and size 3601*4d9fdb46SRobert Mustacchi of the respective section contribution 3602*4d9fdb46SRobert Mustacchi of a single .dwo object. When pcu_size[n] is 3603*4d9fdb46SRobert Mustacchi zero the corresponding section is not present. */ 3604*4d9fdb46SRobert Mustacchi Dwarf_Unsigned pcu_offset[DW_FISSION_SECT_COUNT]; 3605*4d9fdb46SRobert Mustacchi Dwarf_Unsigned pcu_size[DW_FISSION_SECT_COUNT]; 3606*4d9fdb46SRobert Mustacchi Dwarf_Unsigned unused1; 3607*4d9fdb46SRobert Mustacchi Dwarf_Unsigned unused2; 3608*4d9fdb46SRobert Mustacchi }; 3609*4d9fdb46SRobert Mustacchi typedef struct Dwarf_Debug_Fission_Per_CU_s Dwarf_Debug_Fission_Per_CU ; 3610*4d9fdb46SRobert Mustacchi /* For any Dwarf_Die in a compilation unit, return 3611*4d9fdb46SRobert Mustacchi the debug fission table data through 3612*4d9fdb46SRobert Mustacchi percu_out. Usually applications 3613*4d9fdb46SRobert Mustacchi will pass in the CU die. 3614*4d9fdb46SRobert Mustacchi Calling code should zero all of the 3615*4d9fdb46SRobert Mustacchi struct Dwarf_Debug_Fission_Per_CU_s before calling this. 3616*4d9fdb46SRobert Mustacchi If there is no debugfission data this returns 3617*4d9fdb46SRobert Mustacchi DW_DLV_NO_ENTRY (only .dwp objects have debugfission data). */ 3618*4d9fdb46SRobert Mustacchi int dwarf_get_debugfission_for_die(Dwarf_Die /* die */, 3619*4d9fdb46SRobert Mustacchi Dwarf_Debug_Fission_Per_CU * /* percu_out */, 3620*4d9fdb46SRobert Mustacchi Dwarf_Error * /* err */); 3621*4d9fdb46SRobert Mustacchi 3622*4d9fdb46SRobert Mustacchi /* Given a key (hash signature) from a .o, find the per-cu information 3623*4d9fdb46SRobert Mustacchi for the CU with that key. */ 3624*4d9fdb46SRobert Mustacchi int dwarf_get_debugfission_for_key(Dwarf_Debug /*dbg*/, 3625*4d9fdb46SRobert Mustacchi Dwarf_Sig8 * /*key, hash signature */, 3626*4d9fdb46SRobert Mustacchi const char * key_type /*"cu" or "tu" */, 3627*4d9fdb46SRobert Mustacchi Dwarf_Debug_Fission_Per_CU * /*percu_out */, 3628*4d9fdb46SRobert Mustacchi Dwarf_Error * /*err */); 3629*4d9fdb46SRobert Mustacchi 3630*4d9fdb46SRobert Mustacchi /* END debugfission dwp .debug_cu_index and .debug_tu_index operations. */ 3631*4d9fdb46SRobert Mustacchi 3632*4d9fdb46SRobert Mustacchi 3633*4d9fdb46SRobert Mustacchi /* Utility operations */ 3634*4d9fdb46SRobert Mustacchi Dwarf_Unsigned dwarf_errno(Dwarf_Error /*error*/); 3635*4d9fdb46SRobert Mustacchi char* dwarf_errmsg(Dwarf_Error /*error*/); 3636*4d9fdb46SRobert Mustacchi char* dwarf_errmsg_by_number(Dwarf_Unsigned /* errornum */); 3637*4d9fdb46SRobert Mustacchi void dwarf_error_creation(Dwarf_Debug /*dbg*/ , 3638*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/, char * /*errmsg*/); 3639*4d9fdb46SRobert Mustacchi 3640*4d9fdb46SRobert Mustacchi 3641*4d9fdb46SRobert Mustacchi /* stringcheck zero is default and means do all 3642*4d9fdb46SRobert Mustacchi string length validity checks. 3643*4d9fdb46SRobert Mustacchi Call with parameter value 1 to turn off many such checks (and 3644*4d9fdb46SRobert Mustacchi increase performance). 3645*4d9fdb46SRobert Mustacchi Call with zero for safest running. 3646*4d9fdb46SRobert Mustacchi Actual value saved and returned is only 8 bits! Upper bits 3647*4d9fdb46SRobert Mustacchi ignored by libdwarf (and zero on return). 3648*4d9fdb46SRobert Mustacchi Returns previous value. */ 36497c478bd9Sstevel@tonic-gate int dwarf_set_stringcheck(int /*stringcheck*/); 36507c478bd9Sstevel@tonic-gate 3651*4d9fdb46SRobert Mustacchi /* 'apply' defaults to 1 and means do all 3652*4d9fdb46SRobert Mustacchi 'rela' relocations on reading in a dwarf object section with 3653*4d9fdb46SRobert Mustacchi such relocations. 3654*4d9fdb46SRobert Mustacchi Call with parameter value 0 to turn off application of 3655*4d9fdb46SRobert Mustacchi such relocations. 3656*4d9fdb46SRobert Mustacchi Since the static linker leaves 'bogus' data in object sections 3657*4d9fdb46SRobert Mustacchi with a 'rela' relocation section such data cannot be read 3658*4d9fdb46SRobert Mustacchi sensibly without processing the relocations. Such relocations 3659*4d9fdb46SRobert Mustacchi do not exist in executables and shared objects (.so), the 3660*4d9fdb46SRobert Mustacchi relocations only exist in plain .o relocatable object files. 3661*4d9fdb46SRobert Mustacchi Actual value saved and returned is only 8 bits! Upper bits 3662*4d9fdb46SRobert Mustacchi ignored by libdwarf (and zero on return). 3663*4d9fdb46SRobert Mustacchi Returns previous value. */ 366407dc1947SRichard Lowe int dwarf_set_reloc_application(int /*apply*/); 366507dc1947SRichard Lowe 3666*4d9fdb46SRobert Mustacchi /* Never Implemented */ 3667*4d9fdb46SRobert Mustacchi Dwarf_Handler dwarf_seterrhand(Dwarf_Debug /*dbg*/, 3668*4d9fdb46SRobert Mustacchi Dwarf_Handler /*errhand*/); 36697c478bd9Sstevel@tonic-gate 36707c478bd9Sstevel@tonic-gate /* Unimplemented */ 36717c478bd9Sstevel@tonic-gate Dwarf_Ptr dwarf_seterrarg(Dwarf_Debug /*dbg*/, Dwarf_Ptr /*errarg*/); 36727c478bd9Sstevel@tonic-gate 3673*4d9fdb46SRobert Mustacchi void dwarf_dealloc(Dwarf_Debug /*dbg*/, void* /*space*/, 36747c478bd9Sstevel@tonic-gate Dwarf_Unsigned /*type*/); 3675*4d9fdb46SRobert Mustacchi /* These convenience functions allow type checking at the call, 3676*4d9fdb46SRobert Mustacchi whereas dwarf_dealloc itself uses void * so ... 3677*4d9fdb46SRobert Mustacchi easy to misuse. */ 3678*4d9fdb46SRobert Mustacchi void dwarf_dealloc_error(Dwarf_Debug /*dbg*/, Dwarf_Error /*err*/); 3679*4d9fdb46SRobert Mustacchi void dwarf_dealloc_die( Dwarf_Die /*die*/); 3680*4d9fdb46SRobert Mustacchi void dwarf_dealloc_attribute(Dwarf_Attribute /*attr*/); 3681*4d9fdb46SRobert Mustacchi 36827c478bd9Sstevel@tonic-gate 36837c478bd9Sstevel@tonic-gate /* DWARF Producer Interface */ 36847c478bd9Sstevel@tonic-gate 3685*4d9fdb46SRobert Mustacchi /* New form June, 2011. Adds user_data argument. */ 36867c478bd9Sstevel@tonic-gate typedef int (*Dwarf_Callback_Func)( 3687*4d9fdb46SRobert Mustacchi const char* /*name*/, 368807dc1947SRichard Lowe int /*size*/, 368907dc1947SRichard Lowe Dwarf_Unsigned /*type*/, 369007dc1947SRichard Lowe Dwarf_Unsigned /*flags*/, 369107dc1947SRichard Lowe Dwarf_Unsigned /*link*/, 369207dc1947SRichard Lowe Dwarf_Unsigned /*info*/, 369307dc1947SRichard Lowe Dwarf_Unsigned* /*sect_name_index*/, 3694*4d9fdb46SRobert Mustacchi void * /*user_data*/, 369507dc1947SRichard Lowe int* /*error*/); 36967c478bd9Sstevel@tonic-gate 3697*4d9fdb46SRobert Mustacchi /* Returns DW_DLV_OK or DW_DLV_ERROR and 3698*4d9fdb46SRobert Mustacchi if DW_DLV_OK returns the Dwarf_P_Debug 3699*4d9fdb46SRobert Mustacchi pointer through the dbg_returned argument. */ 3700*4d9fdb46SRobert Mustacchi int dwarf_producer_init( 37017c478bd9Sstevel@tonic-gate Dwarf_Unsigned /*flags*/, 3702*4d9fdb46SRobert Mustacchi Dwarf_Callback_Func /*func*/, 37037c478bd9Sstevel@tonic-gate Dwarf_Handler /*errhand*/, 37047c478bd9Sstevel@tonic-gate Dwarf_Ptr /*errarg*/, 3705*4d9fdb46SRobert Mustacchi void * /*user_data*/, 3706*4d9fdb46SRobert Mustacchi const char *isa_name, /* See isa/abi names in pro_init.c */ 3707*4d9fdb46SRobert Mustacchi const char *dwarf_version, /* V2 V3 V4 or V5. */ 3708*4d9fdb46SRobert Mustacchi const char *extra, /* Extra input strings, comma separated. */ 3709*4d9fdb46SRobert Mustacchi Dwarf_P_Debug *, /* dbg_returned */ 37107c478bd9Sstevel@tonic-gate Dwarf_Error * /*error*/); 37117c478bd9Sstevel@tonic-gate 3712*4d9fdb46SRobert Mustacchi /* Returns DW_DLV_OK or DW_DLV_ERROR. 3713*4d9fdb46SRobert Mustacchi The desired form must be DW_FORM_string (the default) 3714*4d9fdb46SRobert Mustacchi or DW_FORM_strp. */ 3715*4d9fdb46SRobert Mustacchi int dwarf_pro_set_default_string_form(Dwarf_P_Debug /*dbg*/, 3716*4d9fdb46SRobert Mustacchi int /*desired_form*/, 3717*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 37187c478bd9Sstevel@tonic-gate 3719*4d9fdb46SRobert Mustacchi /* the old interface. Still supported. */ 37207c478bd9Sstevel@tonic-gate Dwarf_Signed dwarf_transform_to_disk_form(Dwarf_P_Debug /*dbg*/, 372107dc1947SRichard Lowe Dwarf_Error* /*error*/); 3722*4d9fdb46SRobert Mustacchi /* New September 2016. The preferred interface. */ 3723*4d9fdb46SRobert Mustacchi int dwarf_transform_to_disk_form_a(Dwarf_P_Debug /*dbg*/, 3724*4d9fdb46SRobert Mustacchi Dwarf_Signed * /*nbufs_out*/, 3725*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 37267c478bd9Sstevel@tonic-gate 3727*4d9fdb46SRobert Mustacchi /* New September 2016. Preferred. */ 3728*4d9fdb46SRobert Mustacchi int dwarf_get_section_bytes_a(Dwarf_P_Debug /*dbg*/, 372907dc1947SRichard Lowe Dwarf_Signed /*dwarf_section*/, 3730*4d9fdb46SRobert Mustacchi Dwarf_Signed* /*elf_section_index*/, 3731*4d9fdb46SRobert Mustacchi Dwarf_Unsigned* /*length*/, 3732*4d9fdb46SRobert Mustacchi Dwarf_Ptr * /*section_bytes*/, 3733*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 3734*4d9fdb46SRobert Mustacchi 3735*4d9fdb46SRobert Mustacchi /* Original function. Checking for error is difficult. */ 3736*4d9fdb46SRobert Mustacchi Dwarf_Ptr dwarf_get_section_bytes(Dwarf_P_Debug /*dbg*/, 3737*4d9fdb46SRobert Mustacchi Dwarf_Signed /*dwarf_section*/, 3738*4d9fdb46SRobert Mustacchi Dwarf_Signed* /*elf_section_index*/, 3739*4d9fdb46SRobert Mustacchi Dwarf_Unsigned* /*length*/, 374007dc1947SRichard Lowe Dwarf_Error* /*error*/); 37417c478bd9Sstevel@tonic-gate 37427c478bd9Sstevel@tonic-gate int dwarf_get_relocation_info_count( 374307dc1947SRichard Lowe Dwarf_P_Debug /*dbg*/, 374407dc1947SRichard Lowe Dwarf_Unsigned * /*count_of_relocation_sections*/, 374507dc1947SRichard Lowe int * /*drd_buffer_version*/, 374607dc1947SRichard Lowe Dwarf_Error* /*error*/); 37477c478bd9Sstevel@tonic-gate 37487c478bd9Sstevel@tonic-gate int dwarf_get_relocation_info( 374907dc1947SRichard Lowe Dwarf_P_Debug /*dbg*/, 375007dc1947SRichard Lowe Dwarf_Signed * /*elf_section_index*/, 375107dc1947SRichard Lowe Dwarf_Signed * /*elf_section_index_link*/, 375207dc1947SRichard Lowe Dwarf_Unsigned * /*relocation_buffer_count*/, 375307dc1947SRichard Lowe Dwarf_Relocation_Data * /*reldata_buffer*/, 375407dc1947SRichard Lowe Dwarf_Error* /*error*/); 37557c478bd9Sstevel@tonic-gate 37567c478bd9Sstevel@tonic-gate /* v1: no drd_length field, enum explicit */ 37577c478bd9Sstevel@tonic-gate /* v2: has the drd_length field, enum value in uchar member */ 37587c478bd9Sstevel@tonic-gate #define DWARF_DRD_BUFFER_VERSION 2 37597c478bd9Sstevel@tonic-gate 376007dc1947SRichard Lowe /* Markers are not written to DWARF2/3/4, they are user 376107dc1947SRichard Lowe defined and may be used for any purpose. 376207dc1947SRichard Lowe */ 376307dc1947SRichard Lowe Dwarf_Signed dwarf_get_die_markers( 376407dc1947SRichard Lowe Dwarf_P_Debug /*dbg*/, 376507dc1947SRichard Lowe Dwarf_P_Marker * /*marker_list*/, 376607dc1947SRichard Lowe Dwarf_Unsigned * /*marker_count*/, 376707dc1947SRichard Lowe Dwarf_Error * /*error*/); 376807dc1947SRichard Lowe 3769*4d9fdb46SRobert Mustacchi /* Preferred version December 2018. */ 3770*4d9fdb46SRobert Mustacchi int dwarf_get_die_markers_a( 3771*4d9fdb46SRobert Mustacchi Dwarf_P_Debug /*dbg*/, 3772*4d9fdb46SRobert Mustacchi Dwarf_P_Marker * /*marker_list*/, 3773*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*marker_count*/, 3774*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 3775*4d9fdb46SRobert Mustacchi 377607dc1947SRichard Lowe int dwarf_get_string_attributes_count(Dwarf_P_Debug, 377707dc1947SRichard Lowe Dwarf_Unsigned *, 377807dc1947SRichard Lowe int *, 377907dc1947SRichard Lowe Dwarf_Error *); 378007dc1947SRichard Lowe 3781*4d9fdb46SRobert Mustacchi int dwarf_get_string_attributes_info(Dwarf_P_Debug, 378207dc1947SRichard Lowe Dwarf_Signed *, 378307dc1947SRichard Lowe Dwarf_Unsigned *, 378407dc1947SRichard Lowe Dwarf_P_String_Attr *, 378507dc1947SRichard Lowe Dwarf_Error *); 378607dc1947SRichard Lowe 37877c478bd9Sstevel@tonic-gate void dwarf_reset_section_bytes(Dwarf_P_Debug /*dbg*/); 37887c478bd9Sstevel@tonic-gate 3789*4d9fdb46SRobert Mustacchi Dwarf_Unsigned dwarf_producer_finish(Dwarf_P_Debug /*dbg*/, 3790*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 3791*4d9fdb46SRobert Mustacchi 3792*4d9fdb46SRobert Mustacchi /* Returns DW_DLV_OK or DW_DLV_ERROR */ 3793*4d9fdb46SRobert Mustacchi int dwarf_producer_finish_a(Dwarf_P_Debug /*dbg*/, 37947c478bd9Sstevel@tonic-gate Dwarf_Error* /*error*/); 37957c478bd9Sstevel@tonic-gate 37967c478bd9Sstevel@tonic-gate /* Producer attribute addition functions. */ 3797*4d9fdb46SRobert Mustacchi Dwarf_P_Attribute dwarf_add_AT_targ_address(Dwarf_P_Debug /*dbg*/, 3798*4d9fdb46SRobert Mustacchi Dwarf_P_Die /*ownerdie*/, 3799*4d9fdb46SRobert Mustacchi Dwarf_Half /*attr*/, 3800*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*pc_value*/, 3801*4d9fdb46SRobert Mustacchi Dwarf_Signed /*sym_index*/, 3802*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 3803*4d9fdb46SRobert Mustacchi Dwarf_P_Attribute dwarf_add_AT_targ_address_b(Dwarf_P_Debug /*dbg*/, 3804*4d9fdb46SRobert Mustacchi Dwarf_P_Die /*ownerdie*/, 3805*4d9fdb46SRobert Mustacchi Dwarf_Half /*attr*/, 3806*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*pc_value*/, 3807*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*sym_index*/, 380807dc1947SRichard Lowe Dwarf_Error* /*error*/); 380907dc1947SRichard Lowe 3810*4d9fdb46SRobert Mustacchi /* New December 2018. Preferred version. */ 3811*4d9fdb46SRobert Mustacchi int dwarf_add_AT_targ_address_c(Dwarf_P_Debug /*dbg*/, 3812*4d9fdb46SRobert Mustacchi Dwarf_P_Die /*ownerdie*/, 3813*4d9fdb46SRobert Mustacchi Dwarf_Half /*attr*/, 3814*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*pc_value*/, 3815*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*sym_index*/, 3816*4d9fdb46SRobert Mustacchi Dwarf_P_Attribute * /*attr_out*/, 3817*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 3818*4d9fdb46SRobert Mustacchi 3819*4d9fdb46SRobert Mustacchi /* New December 2018. Preferred version. */ 3820*4d9fdb46SRobert Mustacchi int dwarf_add_AT_block_a(Dwarf_P_Debug /*dbg*/, 3821*4d9fdb46SRobert Mustacchi Dwarf_P_Die /*ownerdie*/, 3822*4d9fdb46SRobert Mustacchi Dwarf_Half /*attr*/, 3823*4d9fdb46SRobert Mustacchi Dwarf_Small* /*block_data*/, 3824*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*block_len*/, 3825*4d9fdb46SRobert Mustacchi Dwarf_P_Attribute * /*attr_out*/, 3826*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 3827*4d9fdb46SRobert Mustacchi 3828*4d9fdb46SRobert Mustacchi Dwarf_P_Attribute dwarf_add_AT_block(Dwarf_P_Debug /*dbg*/, 3829*4d9fdb46SRobert Mustacchi Dwarf_P_Die /*ownerdie*/, 3830*4d9fdb46SRobert Mustacchi Dwarf_Half /*attr*/, 383107dc1947SRichard Lowe Dwarf_Small* /*block_data*/, 383207dc1947SRichard Lowe Dwarf_Unsigned /*block_len*/, 383307dc1947SRichard Lowe Dwarf_Error* /*error*/); 38347c478bd9Sstevel@tonic-gate 3835*4d9fdb46SRobert Mustacchi Dwarf_P_Attribute dwarf_add_AT_ref_address(Dwarf_P_Debug /*dbg*/, 3836*4d9fdb46SRobert Mustacchi Dwarf_P_Die /*ownerdie*/, 3837*4d9fdb46SRobert Mustacchi Dwarf_Half /*attr*/, 3838*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*pc_value*/, 3839*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*sym_index*/, 3840*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 3841*4d9fdb46SRobert Mustacchi 3842*4d9fdb46SRobert Mustacchi /* New December 2018. Preferred version. */ 3843*4d9fdb46SRobert Mustacchi int dwarf_add_AT_ref_address_a(Dwarf_P_Debug /*dbg*/, 3844*4d9fdb46SRobert Mustacchi Dwarf_P_Die /*ownerdie*/, 3845*4d9fdb46SRobert Mustacchi Dwarf_Half /*attr*/, 3846*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*pc_value*/, 3847*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*sym_index*/, 3848*4d9fdb46SRobert Mustacchi Dwarf_P_Attribute * /*attr_out*/, 3849*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 3850*4d9fdb46SRobert Mustacchi 3851*4d9fdb46SRobert Mustacchi Dwarf_P_Attribute dwarf_add_AT_unsigned_const(Dwarf_P_Debug /*dbg*/, 3852*4d9fdb46SRobert Mustacchi Dwarf_P_Die /*ownerdie*/, 3853*4d9fdb46SRobert Mustacchi Dwarf_Half /*attr*/, 3854*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*value*/, 385507dc1947SRichard Lowe Dwarf_Error* /*error*/); 385607dc1947SRichard Lowe 3857*4d9fdb46SRobert Mustacchi /* New December 2018. Preferred version. */ 3858*4d9fdb46SRobert Mustacchi int dwarf_add_AT_unsigned_const_a(Dwarf_P_Debug /*dbg*/, 3859*4d9fdb46SRobert Mustacchi Dwarf_P_Die /*ownerdie*/, 3860*4d9fdb46SRobert Mustacchi Dwarf_Half /*attr*/, 3861*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*value*/, 3862*4d9fdb46SRobert Mustacchi Dwarf_P_Attribute * /*attr_out*/, 386307dc1947SRichard Lowe Dwarf_Error* /*error*/); 38647c478bd9Sstevel@tonic-gate 3865*4d9fdb46SRobert Mustacchi Dwarf_P_Attribute dwarf_add_AT_signed_const(Dwarf_P_Debug /*dbg*/, 3866*4d9fdb46SRobert Mustacchi Dwarf_P_Die /*ownerdie*/, 3867*4d9fdb46SRobert Mustacchi Dwarf_Half /*attr*/, 3868*4d9fdb46SRobert Mustacchi Dwarf_Signed /*value*/, 386907dc1947SRichard Lowe Dwarf_Error* /*error*/); 38707c478bd9Sstevel@tonic-gate 3871*4d9fdb46SRobert Mustacchi /* New December 2018. Preferred version. */ 3872*4d9fdb46SRobert Mustacchi int dwarf_add_AT_signed_const_a(Dwarf_P_Debug /*dbg*/, 3873*4d9fdb46SRobert Mustacchi Dwarf_P_Die /*ownerdie*/, 3874*4d9fdb46SRobert Mustacchi Dwarf_Half /*attr*/, 3875*4d9fdb46SRobert Mustacchi Dwarf_Signed /*value*/, 3876*4d9fdb46SRobert Mustacchi Dwarf_P_Attribute * /*attr_out*/, 387707dc1947SRichard Lowe Dwarf_Error* /*error*/); 38787c478bd9Sstevel@tonic-gate 3879*4d9fdb46SRobert Mustacchi Dwarf_P_Attribute dwarf_add_AT_reference(Dwarf_P_Debug /*dbg*/, 3880*4d9fdb46SRobert Mustacchi Dwarf_P_Die /*ownerdie*/, 3881*4d9fdb46SRobert Mustacchi Dwarf_Half /*attr*/, 3882*4d9fdb46SRobert Mustacchi Dwarf_P_Die /*otherdie*/, 388307dc1947SRichard Lowe Dwarf_Error* /*error*/); 388407dc1947SRichard Lowe 3885*4d9fdb46SRobert Mustacchi /* dwarf_add_AT_reference_b allows otherdie to be NULL with 3886*4d9fdb46SRobert Mustacchi the assumption the caller will then later call 3887*4d9fdb46SRobert Mustacchi dwarf_fixup_AT_reference_die() with a non-null target die. 3888*4d9fdb46SRobert Mustacchi New 22 October, 2013 3889*4d9fdb46SRobert Mustacchi */ 3890*4d9fdb46SRobert Mustacchi Dwarf_P_Attribute dwarf_add_AT_reference_b(Dwarf_P_Debug /*dbg*/, 3891*4d9fdb46SRobert Mustacchi Dwarf_P_Die /*ownerdie*/, 3892*4d9fdb46SRobert Mustacchi Dwarf_Half /*attr*/, 3893*4d9fdb46SRobert Mustacchi Dwarf_P_Die /*otherdie*/, 3894*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 3895*4d9fdb46SRobert Mustacchi 3896*4d9fdb46SRobert Mustacchi /* New December 2018. Preferred version. */ 3897*4d9fdb46SRobert Mustacchi int dwarf_add_AT_reference_c(Dwarf_P_Debug /*dbg*/, 3898*4d9fdb46SRobert Mustacchi Dwarf_P_Die /*ownerdie*/, 3899*4d9fdb46SRobert Mustacchi Dwarf_Half /*attr*/, 3900*4d9fdb46SRobert Mustacchi Dwarf_P_Die /*otherdie*/, 3901*4d9fdb46SRobert Mustacchi Dwarf_P_Attribute * /*attr_out*/, 3902*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 3903*4d9fdb46SRobert Mustacchi 3904*4d9fdb46SRobert Mustacchi /* The following is for out-of-order cu-local 3905*4d9fdb46SRobert Mustacchi references. Allowing nominating the target Dwarf_P_Die 3906*4d9fdb46SRobert Mustacchi after calling dwarf_add_AT_reference with a NULL otherdie 3907*4d9fdb46SRobert Mustacchi after a single pass thru the DIE generation. Needed 3908*4d9fdb46SRobert Mustacchi for forward-references. 3909*4d9fdb46SRobert Mustacchi New 22 October, 2013. 3910*4d9fdb46SRobert Mustacchi */ 3911*4d9fdb46SRobert Mustacchi int dwarf_fixup_AT_reference_die(Dwarf_P_Debug /*dbg*/, 3912*4d9fdb46SRobert Mustacchi Dwarf_Half /* attrnum */, 3913*4d9fdb46SRobert Mustacchi Dwarf_P_Die /* sourcedie*/, 3914*4d9fdb46SRobert Mustacchi Dwarf_P_Die /* targetdie*/, 3915*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 3916*4d9fdb46SRobert Mustacchi 391707dc1947SRichard Lowe Dwarf_P_Attribute dwarf_add_AT_dataref( 3918*4d9fdb46SRobert Mustacchi Dwarf_P_Debug /*dbg*/, 3919*4d9fdb46SRobert Mustacchi Dwarf_P_Die /*ownerdie*/, 392007dc1947SRichard Lowe Dwarf_Half /*attr*/, 392107dc1947SRichard Lowe Dwarf_Unsigned /*pcvalue*/, 392207dc1947SRichard Lowe Dwarf_Unsigned /*sym_index*/, 392307dc1947SRichard Lowe Dwarf_Error* /*error*/); 39247c478bd9Sstevel@tonic-gate 3925*4d9fdb46SRobert Mustacchi /* New December 2018. Preferred version. */ 3926*4d9fdb46SRobert Mustacchi int dwarf_add_AT_dataref_a( 3927*4d9fdb46SRobert Mustacchi Dwarf_P_Debug /*dbg*/, 3928*4d9fdb46SRobert Mustacchi Dwarf_P_Die /*ownerdie*/, 3929*4d9fdb46SRobert Mustacchi Dwarf_Half /*attr*/, 3930*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*pcvalue*/, 3931*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*sym_index*/, 3932*4d9fdb46SRobert Mustacchi Dwarf_P_Attribute * /*attr_out*/, 393307dc1947SRichard Lowe Dwarf_Error* /*error*/); 39347c478bd9Sstevel@tonic-gate 3935*4d9fdb46SRobert Mustacchi Dwarf_P_Attribute dwarf_add_AT_const_value_string( 3936*4d9fdb46SRobert Mustacchi Dwarf_P_Die /*ownerdie*/, 3937*4d9fdb46SRobert Mustacchi char* /*string_value*/, 393807dc1947SRichard Lowe Dwarf_Error* /*error*/); 39397c478bd9Sstevel@tonic-gate 3940*4d9fdb46SRobert Mustacchi /* New December 2018. Preferred version. */ 3941*4d9fdb46SRobert Mustacchi int dwarf_add_AT_const_value_string_a( 3942*4d9fdb46SRobert Mustacchi Dwarf_P_Die /*ownerdie*/, 3943*4d9fdb46SRobert Mustacchi char* /*string_value*/, 3944*4d9fdb46SRobert Mustacchi Dwarf_P_Attribute * /*attr_out*/, 3945*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 3946*4d9fdb46SRobert Mustacchi 3947*4d9fdb46SRobert Mustacchi Dwarf_P_Attribute dwarf_add_AT_location_expr(Dwarf_P_Debug /*dbg*/, 3948*4d9fdb46SRobert Mustacchi Dwarf_P_Die /*ownerdie*/, 3949*4d9fdb46SRobert Mustacchi Dwarf_Half /*attr*/, 3950*4d9fdb46SRobert Mustacchi Dwarf_P_Expr /*loc_expr*/, 3951*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 3952*4d9fdb46SRobert Mustacchi 3953*4d9fdb46SRobert Mustacchi /* New December 2018. Preferred version. */ 3954*4d9fdb46SRobert Mustacchi int dwarf_add_AT_location_expr_a(Dwarf_P_Debug /*dbg*/, 3955*4d9fdb46SRobert Mustacchi Dwarf_P_Die /*ownerdie*/, 3956*4d9fdb46SRobert Mustacchi Dwarf_Half /*attr*/, 3957*4d9fdb46SRobert Mustacchi Dwarf_P_Expr /*loc_expr*/, 3958*4d9fdb46SRobert Mustacchi Dwarf_P_Attribute * /*attr_out*/, 3959*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 3960*4d9fdb46SRobert Mustacchi 3961*4d9fdb46SRobert Mustacchi Dwarf_P_Attribute dwarf_add_AT_string(Dwarf_P_Debug /*dbg*/, 3962*4d9fdb46SRobert Mustacchi Dwarf_P_Die /*ownerdie*/, 3963*4d9fdb46SRobert Mustacchi Dwarf_Half /*attr*/, 3964*4d9fdb46SRobert Mustacchi char* /*string*/, 3965*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 3966*4d9fdb46SRobert Mustacchi 3967*4d9fdb46SRobert Mustacchi /* Preferred as of December 2018. */ 3968*4d9fdb46SRobert Mustacchi int dwarf_add_AT_string_a(Dwarf_P_Debug /*dbg*/, 3969*4d9fdb46SRobert Mustacchi Dwarf_P_Die /*ownerdie*/, 3970*4d9fdb46SRobert Mustacchi Dwarf_Half /*attr*/, 3971*4d9fdb46SRobert Mustacchi char* /*string*/, 3972*4d9fdb46SRobert Mustacchi Dwarf_P_Attribute * /*attr_out*/, 397307dc1947SRichard Lowe Dwarf_Error* /*error*/); 39747c478bd9Sstevel@tonic-gate 3975*4d9fdb46SRobert Mustacchi Dwarf_P_Attribute dwarf_add_AT_flag(Dwarf_P_Debug /*dbg*/, 3976*4d9fdb46SRobert Mustacchi Dwarf_P_Die /*ownerdie*/, 3977*4d9fdb46SRobert Mustacchi Dwarf_Half /*attr*/, 3978*4d9fdb46SRobert Mustacchi Dwarf_Small /*flag*/, 3979*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 3980*4d9fdb46SRobert Mustacchi 3981*4d9fdb46SRobert Mustacchi /* New December 2018. Preferred version. */ 3982*4d9fdb46SRobert Mustacchi int dwarf_add_AT_flag_a(Dwarf_P_Debug /*dbg*/, 3983*4d9fdb46SRobert Mustacchi Dwarf_P_Die /*ownerdie*/, 3984*4d9fdb46SRobert Mustacchi Dwarf_Half /*attr*/, 3985*4d9fdb46SRobert Mustacchi Dwarf_Small /*flag*/, 3986*4d9fdb46SRobert Mustacchi Dwarf_P_Attribute * /*attr_out*/, 3987*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 3988*4d9fdb46SRobert Mustacchi 3989*4d9fdb46SRobert Mustacchi Dwarf_P_Attribute dwarf_add_AT_producer(Dwarf_P_Die /*ownerdie*/, 3990*4d9fdb46SRobert Mustacchi char* /*producer_string*/, 3991*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 3992*4d9fdb46SRobert Mustacchi 3993*4d9fdb46SRobert Mustacchi /* New December 2018. Preferred version. */ 3994*4d9fdb46SRobert Mustacchi int dwarf_add_AT_producer_a(Dwarf_P_Die /*ownerdie*/, 3995*4d9fdb46SRobert Mustacchi char* /*producer_string*/, 3996*4d9fdb46SRobert Mustacchi Dwarf_P_Attribute * /*attr_out*/, 399707dc1947SRichard Lowe Dwarf_Error* /*error*/); 39987c478bd9Sstevel@tonic-gate 3999*4d9fdb46SRobert Mustacchi /* October 2017 for DW_FORM_data16. Usable with any attribute, 4000*4d9fdb46SRobert Mustacchi though it should only be in limited use. DWARF5 only. 4001*4d9fdb46SRobert Mustacchi Returns DW_DLV_OK on success, DW_DLV_ERROR on failure. 4002*4d9fdb46SRobert Mustacchi Returns the new attribute pointer through *return_attr. */ 4003*4d9fdb46SRobert Mustacchi int dwarf_add_AT_data16(Dwarf_P_Die /*ownerdie*/, 4004*4d9fdb46SRobert Mustacchi Dwarf_Half /*attrnum*/, 4005*4d9fdb46SRobert Mustacchi Dwarf_Form_Data16 * /* pointstovalue */, 4006*4d9fdb46SRobert Mustacchi Dwarf_P_Attribute * /* return_attr */, 4007*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 4008*4d9fdb46SRobert Mustacchi 4009*4d9fdb46SRobert Mustacchi /* November 2018. DW_AT_implicit const generation. */ 4010*4d9fdb46SRobert Mustacchi int dwarf_add_AT_implicit_const(Dwarf_P_Die /*ownerdie*/, 4011*4d9fdb46SRobert Mustacchi Dwarf_Half /*attrnum*/, 4012*4d9fdb46SRobert Mustacchi Dwarf_Signed /*signed_value*/, 4013*4d9fdb46SRobert Mustacchi Dwarf_P_Attribute * /*outattr*/, 4014*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 4015*4d9fdb46SRobert Mustacchi 4016*4d9fdb46SRobert Mustacchi /* August 2013 sleb creator. For any attribute. */ 4017*4d9fdb46SRobert Mustacchi Dwarf_P_Attribute dwarf_add_AT_any_value_sleb(Dwarf_P_Die /*ownerdie*/, 4018*4d9fdb46SRobert Mustacchi Dwarf_Half /*attrnum*/, 4019*4d9fdb46SRobert Mustacchi Dwarf_Signed /*signed_value*/, 4020*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 4021*4d9fdb46SRobert Mustacchi 4022*4d9fdb46SRobert Mustacchi /* New December 2018. Preferred version. */ 4023*4d9fdb46SRobert Mustacchi int dwarf_add_AT_any_value_sleb_a(Dwarf_P_Die /*ownerdie*/, 4024*4d9fdb46SRobert Mustacchi Dwarf_Half /*attrnum*/, 4025*4d9fdb46SRobert Mustacchi Dwarf_Signed /*signed_value*/, 4026*4d9fdb46SRobert Mustacchi Dwarf_P_Attribute * /*outattr*/, 4027*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 4028*4d9fdb46SRobert Mustacchi 4029*4d9fdb46SRobert Mustacchi /* Original sleb creator. Only for DW_AT_const_value. */ 4030*4d9fdb46SRobert Mustacchi Dwarf_P_Attribute dwarf_add_AT_const_value_signedint(Dwarf_P_Die /*ownerdie*/, 4031*4d9fdb46SRobert Mustacchi Dwarf_Signed /*signed_value*/, 403207dc1947SRichard Lowe Dwarf_Error* /*error*/); 40337c478bd9Sstevel@tonic-gate 4034*4d9fdb46SRobert Mustacchi /* Preferred as of December 2018. */ 4035*4d9fdb46SRobert Mustacchi int dwarf_add_AT_const_value_signedint_a(Dwarf_P_Die /*ownerdie*/, 4036*4d9fdb46SRobert Mustacchi Dwarf_Signed /*signed_value*/, 4037*4d9fdb46SRobert Mustacchi Dwarf_P_Attribute * /*outattr*/, 403807dc1947SRichard Lowe Dwarf_Error* /*error*/); 40397c478bd9Sstevel@tonic-gate 4040*4d9fdb46SRobert Mustacchi /* August 2013 uleb creator. For any attribute. */ 4041*4d9fdb46SRobert Mustacchi Dwarf_P_Attribute dwarf_add_AT_any_value_uleb(Dwarf_P_Die /*ownerdie*/, 4042*4d9fdb46SRobert Mustacchi Dwarf_Half /*attrnum*/, 4043*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*signed_value*/, 4044*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 4045*4d9fdb46SRobert Mustacchi 4046*4d9fdb46SRobert Mustacchi /* New December 2018. Preferred version. */ 4047*4d9fdb46SRobert Mustacchi int dwarf_add_AT_any_value_uleb_a(Dwarf_P_Die /*ownerdie*/, 4048*4d9fdb46SRobert Mustacchi Dwarf_Half /*attrnum*/, 4049*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*signed_value*/, 4050*4d9fdb46SRobert Mustacchi Dwarf_P_Attribute * /*outattr*/, 4051*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 4052*4d9fdb46SRobert Mustacchi 4053*4d9fdb46SRobert Mustacchi /* Original uleb creator. Only for DW_AT_const_value. */ 40547c478bd9Sstevel@tonic-gate Dwarf_P_Attribute dwarf_add_AT_const_value_unsignedint( 4055*4d9fdb46SRobert Mustacchi Dwarf_P_Die /*ownerdie*/, 4056*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*unsigned_value*/, 4057*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 4058*4d9fdb46SRobert Mustacchi 4059*4d9fdb46SRobert Mustacchi /* New December 2018. Preferred version. */ 4060*4d9fdb46SRobert Mustacchi int dwarf_add_AT_const_value_unsignedint_a( 4061*4d9fdb46SRobert Mustacchi Dwarf_P_Die /*ownerdie*/, 4062*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*unsigned_value*/, 4063*4d9fdb46SRobert Mustacchi Dwarf_P_Attribute * /*outattr*/, 406407dc1947SRichard Lowe Dwarf_Error* /*error*/); 40657c478bd9Sstevel@tonic-gate 4066*4d9fdb46SRobert Mustacchi Dwarf_P_Attribute dwarf_add_AT_comp_dir(Dwarf_P_Die /*ownerdie*/, 4067*4d9fdb46SRobert Mustacchi char* /*current_working_directory*/, 4068*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 4069*4d9fdb46SRobert Mustacchi 4070*4d9fdb46SRobert Mustacchi /* New December 2018. Preferred version. */ 4071*4d9fdb46SRobert Mustacchi int dwarf_add_AT_comp_dir_a(Dwarf_P_Die /*ownerdie*/, 4072*4d9fdb46SRobert Mustacchi char* /*current_working_directory*/, 4073*4d9fdb46SRobert Mustacchi Dwarf_P_Attribute * /*outattr*/, 407407dc1947SRichard Lowe Dwarf_Error* /*error*/); 40757c478bd9Sstevel@tonic-gate 407607dc1947SRichard Lowe Dwarf_P_Attribute dwarf_add_AT_name(Dwarf_P_Die /*die*/, 407707dc1947SRichard Lowe char* /*name*/, 407807dc1947SRichard Lowe Dwarf_Error* /*error*/); 40797c478bd9Sstevel@tonic-gate 4080*4d9fdb46SRobert Mustacchi /* New December 2018. Preferred version. */ 4081*4d9fdb46SRobert Mustacchi int dwarf_add_AT_name_a(Dwarf_P_Die /*die*/, 4082*4d9fdb46SRobert Mustacchi char* /*name*/, 4083*4d9fdb46SRobert Mustacchi Dwarf_P_Attribute * /*outattr*/, 4084*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 4085*4d9fdb46SRobert Mustacchi 4086*4d9fdb46SRobert Mustacchi Dwarf_P_Attribute dwarf_add_AT_with_ref_sig8( 4087*4d9fdb46SRobert Mustacchi Dwarf_P_Die /*ownerdie */, 4088*4d9fdb46SRobert Mustacchi Dwarf_Half /*attrnum */, 4089*4d9fdb46SRobert Mustacchi const Dwarf_Sig8 * /*sig8_in*/, 4090*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 4091*4d9fdb46SRobert Mustacchi 4092*4d9fdb46SRobert Mustacchi /* New December 2018. Preferred version. */ 4093*4d9fdb46SRobert Mustacchi int dwarf_add_AT_with_ref_sig8_a( 4094*4d9fdb46SRobert Mustacchi Dwarf_P_Die /*ownerdie */, 4095*4d9fdb46SRobert Mustacchi Dwarf_Half /*attrnum */, 4096*4d9fdb46SRobert Mustacchi const Dwarf_Sig8 * /*sig8_in*/, 4097*4d9fdb46SRobert Mustacchi Dwarf_P_Attribute * /*outattr*/, 4098*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 4099*4d9fdb46SRobert Mustacchi 4100*4d9fdb46SRobert Mustacchi 41017c478bd9Sstevel@tonic-gate /* Producer line creation functions (.debug_line) */ 4102*4d9fdb46SRobert Mustacchi Dwarf_Unsigned dwarf_add_directory_decl(Dwarf_P_Debug /*dbg*/, 4103*4d9fdb46SRobert Mustacchi char* /*name*/, 4104*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 4105*4d9fdb46SRobert Mustacchi 4106*4d9fdb46SRobert Mustacchi /* New December 2018. Preferred version. */ 4107*4d9fdb46SRobert Mustacchi int dwarf_add_directory_decl_a(Dwarf_P_Debug /*dbg*/, 4108*4d9fdb46SRobert Mustacchi char* /*name*/, 4109*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*index_in_directories*/, 4110*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 4111*4d9fdb46SRobert Mustacchi 4112*4d9fdb46SRobert Mustacchi Dwarf_Unsigned dwarf_add_file_decl(Dwarf_P_Debug /*dbg*/, 4113*4d9fdb46SRobert Mustacchi char* /*name*/, 4114*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*dir_index*/, 4115*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*time_last_modified*/, 4116*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*length*/, 411707dc1947SRichard Lowe Dwarf_Error* /*error*/); 41187c478bd9Sstevel@tonic-gate 4119*4d9fdb46SRobert Mustacchi /* New December 2018. Preferred version. */ 4120*4d9fdb46SRobert Mustacchi int dwarf_add_file_decl_a(Dwarf_P_Debug /*dbg*/, 412107dc1947SRichard Lowe char* /*name*/, 4122*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*dir_index*/, 4123*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*time_last_modified*/, 4124*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*length*/, 4125*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*file_entry_count_out*/, 4126*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 4127*4d9fdb46SRobert Mustacchi 4128*4d9fdb46SRobert Mustacchi /* New December 2018. Preferred version. */ 4129*4d9fdb46SRobert Mustacchi int dwarf_add_line_entry_c(Dwarf_P_Debug /*dbg*/, 4130*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*file_index*/, 4131*4d9fdb46SRobert Mustacchi Dwarf_Addr /*code_address*/, 4132*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*lineno*/, 4133*4d9fdb46SRobert Mustacchi Dwarf_Signed /*column_number*/, 4134*4d9fdb46SRobert Mustacchi Dwarf_Bool /*is_source_stmt_begin*/, 4135*4d9fdb46SRobert Mustacchi Dwarf_Bool /*is_basic_block_begin*/, 4136*4d9fdb46SRobert Mustacchi Dwarf_Bool /*is_epilogue_begin*/, 4137*4d9fdb46SRobert Mustacchi Dwarf_Bool /*is_prologue_end*/, 4138*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*isa*/, 4139*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*discriminator*/, 4140*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 4141*4d9fdb46SRobert Mustacchi 4142*4d9fdb46SRobert Mustacchi Dwarf_Unsigned dwarf_add_line_entry_b(Dwarf_P_Debug /*dbg*/, 4143*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*file_index*/, 4144*4d9fdb46SRobert Mustacchi Dwarf_Addr /*code_address*/, 4145*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*lineno*/, 4146*4d9fdb46SRobert Mustacchi Dwarf_Signed /*column_number*/, 4147*4d9fdb46SRobert Mustacchi Dwarf_Bool /*is_source_stmt_begin*/, 4148*4d9fdb46SRobert Mustacchi Dwarf_Bool /*is_basic_block_begin*/, 4149*4d9fdb46SRobert Mustacchi Dwarf_Bool /*is_epilogue_begin*/, 4150*4d9fdb46SRobert Mustacchi Dwarf_Bool /*is_prologue_end*/, 4151*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*isa*/, 4152*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*discriminator*/, 4153*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 4154*4d9fdb46SRobert Mustacchi 4155*4d9fdb46SRobert Mustacchi Dwarf_Unsigned dwarf_add_line_entry(Dwarf_P_Debug /*dbg*/, 4156*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*file_index*/, 4157*4d9fdb46SRobert Mustacchi Dwarf_Addr /*code_address*/, 4158*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*lineno*/, 4159*4d9fdb46SRobert Mustacchi Dwarf_Signed /*column_number*/, 4160*4d9fdb46SRobert Mustacchi Dwarf_Bool /*is_source_stmt_begin*/, 4161*4d9fdb46SRobert Mustacchi Dwarf_Bool /*is_basic_block_begin*/, 416207dc1947SRichard Lowe Dwarf_Error* /*error*/); 41637c478bd9Sstevel@tonic-gate 4164*4d9fdb46SRobert Mustacchi Dwarf_Unsigned dwarf_lne_set_address(Dwarf_P_Debug /*dbg*/, 4165*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*offset*/, 4166*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*symbol_index*/, 416707dc1947SRichard Lowe Dwarf_Error* /*error*/); 41687c478bd9Sstevel@tonic-gate 4169*4d9fdb46SRobert Mustacchi /* New December 2018. Preferred version. */ 4170*4d9fdb46SRobert Mustacchi int dwarf_lne_set_address_a(Dwarf_P_Debug /*dbg*/, 4171*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*offset*/, 4172*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*symbol_index*/, 417307dc1947SRichard Lowe Dwarf_Error* /*error*/); 41747c478bd9Sstevel@tonic-gate 4175*4d9fdb46SRobert Mustacchi Dwarf_Unsigned dwarf_lne_end_sequence(Dwarf_P_Debug /*dbg*/, 4176*4d9fdb46SRobert Mustacchi Dwarf_Addr /*end_address*/, 4177*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 4178*4d9fdb46SRobert Mustacchi 4179*4d9fdb46SRobert Mustacchi /* New December 2018. Preferred version. */ 4180*4d9fdb46SRobert Mustacchi int dwarf_lne_end_sequence_a(Dwarf_P_Debug /*dbg*/, 418107dc1947SRichard Lowe Dwarf_Addr /*end_address*/, 418207dc1947SRichard Lowe Dwarf_Error* /*error*/); 41837c478bd9Sstevel@tonic-gate 41847c478bd9Sstevel@tonic-gate /* Producer .debug_frame functions */ 4185*4d9fdb46SRobert Mustacchi Dwarf_Unsigned dwarf_add_frame_cie(Dwarf_P_Debug /*dbg*/, 4186*4d9fdb46SRobert Mustacchi char* /*augmenter*/, 4187*4d9fdb46SRobert Mustacchi Dwarf_Small /*code_alignment_factor*/, 4188*4d9fdb46SRobert Mustacchi Dwarf_Small /*data_alignment_factor*/, 4189*4d9fdb46SRobert Mustacchi Dwarf_Small /*return_address_reg*/, 4190*4d9fdb46SRobert Mustacchi Dwarf_Ptr /*initialization_bytes*/, 4191*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*init_byte_len*/, 419207dc1947SRichard Lowe Dwarf_Error* /*error*/); 41937c478bd9Sstevel@tonic-gate 4194*4d9fdb46SRobert Mustacchi /* New December 2018. Preferred version. */ 4195*4d9fdb46SRobert Mustacchi int dwarf_add_frame_cie_a(Dwarf_P_Debug /*dbg*/, 4196*4d9fdb46SRobert Mustacchi char* /*augmenter*/, 4197*4d9fdb46SRobert Mustacchi Dwarf_Small /*code_alignment_factor*/, 4198*4d9fdb46SRobert Mustacchi Dwarf_Small /*data_alignment_factor*/, 4199*4d9fdb46SRobert Mustacchi Dwarf_Small /*return_address_reg*/, 4200*4d9fdb46SRobert Mustacchi Dwarf_Ptr /*initialization_bytes*/, 4201*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*init_byte_len*/, 4202*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*cie_index_out*/, 4203*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 4204*4d9fdb46SRobert Mustacchi 4205*4d9fdb46SRobert Mustacchi Dwarf_Unsigned dwarf_add_frame_fde( 420607dc1947SRichard Lowe Dwarf_P_Debug /*dbg*/, 4207*4d9fdb46SRobert Mustacchi Dwarf_P_Fde /*fde*/, 420807dc1947SRichard Lowe Dwarf_P_Die /*corresponding subprogram die*/, 4209*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*cie_to_use*/, 4210*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*virt_addr_of_described_code*/, 4211*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*length_of_code*/, 4212*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*symbol_index*/, 421307dc1947SRichard Lowe Dwarf_Error* /*error*/); 42147c478bd9Sstevel@tonic-gate 42157c478bd9Sstevel@tonic-gate Dwarf_Unsigned dwarf_add_frame_fde_b( 421607dc1947SRichard Lowe Dwarf_P_Debug /*dbg*/, 421707dc1947SRichard Lowe Dwarf_P_Fde /*fde*/, 421807dc1947SRichard Lowe Dwarf_P_Die /*die*/, 421907dc1947SRichard Lowe Dwarf_Unsigned /*cie*/, 422007dc1947SRichard Lowe Dwarf_Addr /*virt_addr*/, 422107dc1947SRichard Lowe Dwarf_Unsigned /*code_len*/, 422207dc1947SRichard Lowe Dwarf_Unsigned /*sym_idx*/, 422307dc1947SRichard Lowe Dwarf_Unsigned /*sym_idx_of_end*/, 422407dc1947SRichard Lowe Dwarf_Addr /*offset_from_end_sym*/, 422507dc1947SRichard Lowe Dwarf_Error* /*error*/); 42267c478bd9Sstevel@tonic-gate 4227*4d9fdb46SRobert Mustacchi /* New December 2018. Preferred version. */ 4228*4d9fdb46SRobert Mustacchi int dwarf_add_frame_fde_c( 4229*4d9fdb46SRobert Mustacchi Dwarf_P_Debug /*dbg*/, 4230*4d9fdb46SRobert Mustacchi Dwarf_P_Fde /*fde*/, 4231*4d9fdb46SRobert Mustacchi Dwarf_P_Die /*die*/, 4232*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*cie*/, 4233*4d9fdb46SRobert Mustacchi Dwarf_Addr /*virt_addr*/, 4234*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*code_len*/, 4235*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*sym_idx*/, 4236*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*sym_idx_of_end*/, 4237*4d9fdb46SRobert Mustacchi Dwarf_Addr /*offset_from_end_sym*/, 4238*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*index_to_fde*/, 4239*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 4240*4d9fdb46SRobert Mustacchi 4241*4d9fdb46SRobert Mustacchi /* New December 2018. Preferred version. */ 4242*4d9fdb46SRobert Mustacchi int dwarf_add_frame_info_c( 4243*4d9fdb46SRobert Mustacchi Dwarf_P_Debug /*dbg*/, 4244*4d9fdb46SRobert Mustacchi Dwarf_P_Fde /*fde*/, 4245*4d9fdb46SRobert Mustacchi Dwarf_P_Die /*die*/, 4246*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*cie*/, 4247*4d9fdb46SRobert Mustacchi Dwarf_Addr /*virt_addr*/, 4248*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*code_len*/, 4249*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*symidx*/, 4250*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*end_symbol */, 4251*4d9fdb46SRobert Mustacchi Dwarf_Addr /*offset_from_end_symbol */, 4252*4d9fdb46SRobert Mustacchi Dwarf_Signed /*offset_into_exception_tables*/, 4253*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*exception_table_symbol*/, 4254*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*fde_index_out*/, 4255*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 4256*4d9fdb46SRobert Mustacchi 4257*4d9fdb46SRobert Mustacchi Dwarf_Unsigned dwarf_add_frame_info_b( 4258*4d9fdb46SRobert Mustacchi Dwarf_P_Debug /*dbg*/, 425907dc1947SRichard Lowe Dwarf_P_Fde /*fde*/, 426007dc1947SRichard Lowe Dwarf_P_Die /*die*/, 426107dc1947SRichard Lowe Dwarf_Unsigned /*cie*/, 426207dc1947SRichard Lowe Dwarf_Addr /*virt_addr*/, 426307dc1947SRichard Lowe Dwarf_Unsigned /*code_len*/, 426407dc1947SRichard Lowe Dwarf_Unsigned /*symidx*/, 426507dc1947SRichard Lowe Dwarf_Unsigned /*end_symbol */, 426607dc1947SRichard Lowe Dwarf_Addr /*offset_from_end_symbol */, 426707dc1947SRichard Lowe Dwarf_Signed /*offset_into_exception_tables*/, 426807dc1947SRichard Lowe Dwarf_Unsigned /*exception_table_symbol*/, 426907dc1947SRichard Lowe Dwarf_Error* /*error*/); 42707c478bd9Sstevel@tonic-gate 4271*4d9fdb46SRobert Mustacchi Dwarf_Unsigned dwarf_add_frame_info( 4272*4d9fdb46SRobert Mustacchi Dwarf_P_Debug /*dbg*/, 427307dc1947SRichard Lowe Dwarf_P_Fde /*fde*/, 427407dc1947SRichard Lowe Dwarf_P_Die /*die*/, 427507dc1947SRichard Lowe Dwarf_Unsigned /*cie*/, 427607dc1947SRichard Lowe Dwarf_Addr /*virt_addr*/, 427707dc1947SRichard Lowe Dwarf_Unsigned /*code_len*/, 427807dc1947SRichard Lowe Dwarf_Unsigned /*symidx*/, 427907dc1947SRichard Lowe Dwarf_Signed /*offset_into_exception_tables*/, 428007dc1947SRichard Lowe Dwarf_Unsigned /*exception_table_symbol*/, 428107dc1947SRichard Lowe Dwarf_Error* /*error*/); 42827c478bd9Sstevel@tonic-gate 4283*4d9fdb46SRobert Mustacchi /* The fde returned is just the one passed in. Silly. */ 42847c478bd9Sstevel@tonic-gate Dwarf_P_Fde dwarf_add_fde_inst( 428507dc1947SRichard Lowe Dwarf_P_Fde /*fde*/, 4286*4d9fdb46SRobert Mustacchi Dwarf_Small /*op*/, 4287*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*val1*/, 4288*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*val2*/, 4289*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 4290*4d9fdb46SRobert Mustacchi 4291*4d9fdb46SRobert Mustacchi /* New December 2018. Preferred version. */ 4292*4d9fdb46SRobert Mustacchi int dwarf_add_fde_inst_a( 4293*4d9fdb46SRobert Mustacchi Dwarf_P_Fde /*fde*/, 4294*4d9fdb46SRobert Mustacchi Dwarf_Small /*op*/, 4295*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*val1*/, 4296*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*val2*/, 429707dc1947SRichard Lowe Dwarf_Error* /*error*/); 42987c478bd9Sstevel@tonic-gate 429907dc1947SRichard Lowe /* New September 17, 2009 */ 430007dc1947SRichard Lowe int dwarf_insert_fde_inst_bytes( 430107dc1947SRichard Lowe Dwarf_P_Debug /*dbg*/, 430207dc1947SRichard Lowe Dwarf_P_Fde /*fde*/, 4303*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*len*/, 430407dc1947SRichard Lowe Dwarf_Ptr /*ibytes*/, 430507dc1947SRichard Lowe Dwarf_Error* /*error*/); 430607dc1947SRichard Lowe 4307*4d9fdb46SRobert Mustacchi Dwarf_P_Fde dwarf_new_fde(Dwarf_P_Debug /*dbg*/, 4308*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 430907dc1947SRichard Lowe 4310*4d9fdb46SRobert Mustacchi /* New December 2018. Preferred version. */ 4311*4d9fdb46SRobert Mustacchi int dwarf_new_fde_a(Dwarf_P_Debug /*dbg*/, 4312*4d9fdb46SRobert Mustacchi Dwarf_P_Fde * /*fde_out*/, 4313*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 43147c478bd9Sstevel@tonic-gate 43157c478bd9Sstevel@tonic-gate Dwarf_P_Fde dwarf_fde_cfa_offset( 4316*4d9fdb46SRobert Mustacchi Dwarf_P_Fde /*fde*/, 4317*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*register_number*/, 4318*4d9fdb46SRobert Mustacchi Dwarf_Signed /*offset*/, 4319*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 4320*4d9fdb46SRobert Mustacchi 4321*4d9fdb46SRobert Mustacchi /* New December 2018. Preferred version. */ 4322*4d9fdb46SRobert Mustacchi int dwarf_fde_cfa_offset_a( 4323*4d9fdb46SRobert Mustacchi Dwarf_P_Fde /*fde*/, 4324*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*register_number*/, 4325*4d9fdb46SRobert Mustacchi Dwarf_Signed /*offset*/, 4326*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 4327*4d9fdb46SRobert Mustacchi 4328*4d9fdb46SRobert Mustacchi /* die creation & addition routines 4329*4d9fdb46SRobert Mustacchi dwarf_new_die_a() new September 2016. 4330*4d9fdb46SRobert Mustacchi Preferred over dwarf_new_die(). */ 4331*4d9fdb46SRobert Mustacchi int dwarf_new_die_a( 4332*4d9fdb46SRobert Mustacchi Dwarf_P_Debug /*dbg*/, 4333*4d9fdb46SRobert Mustacchi Dwarf_Tag /*tag*/, 4334*4d9fdb46SRobert Mustacchi Dwarf_P_Die /*parent*/, 4335*4d9fdb46SRobert Mustacchi Dwarf_P_Die /*child*/, 4336*4d9fdb46SRobert Mustacchi Dwarf_P_Die /*left */, 4337*4d9fdb46SRobert Mustacchi Dwarf_P_Die /*right*/, 4338*4d9fdb46SRobert Mustacchi Dwarf_P_Die * /*die_out*/, 433907dc1947SRichard Lowe Dwarf_Error* /*error*/); 43407c478bd9Sstevel@tonic-gate 43417c478bd9Sstevel@tonic-gate Dwarf_P_Die dwarf_new_die( 434207dc1947SRichard Lowe Dwarf_P_Debug /*dbg*/, 434307dc1947SRichard Lowe Dwarf_Tag /*tag*/, 4344*4d9fdb46SRobert Mustacchi Dwarf_P_Die /*parent*/, 4345*4d9fdb46SRobert Mustacchi Dwarf_P_Die /*child*/, 434607dc1947SRichard Lowe Dwarf_P_Die /*left */, 434707dc1947SRichard Lowe Dwarf_P_Die /*right*/, 434807dc1947SRichard Lowe Dwarf_Error* /*error*/); 43497c478bd9Sstevel@tonic-gate 4350*4d9fdb46SRobert Mustacchi /* New September 2016. */ 4351*4d9fdb46SRobert Mustacchi int dwarf_add_die_to_debug_a( 4352*4d9fdb46SRobert Mustacchi Dwarf_P_Debug /*dbg*/, 4353*4d9fdb46SRobert Mustacchi Dwarf_P_Die /*die*/, 4354*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 4355*4d9fdb46SRobert Mustacchi 4356*4d9fdb46SRobert Mustacchi /* Original form. */ 43577c478bd9Sstevel@tonic-gate Dwarf_Unsigned dwarf_add_die_to_debug( 435807dc1947SRichard Lowe Dwarf_P_Debug /*dbg*/, 435907dc1947SRichard Lowe Dwarf_P_Die /*die*/, 436007dc1947SRichard Lowe Dwarf_Error* /*error*/); 436107dc1947SRichard Lowe 436207dc1947SRichard Lowe /* Markers are not written to DWARF2/3/4, they are user 436307dc1947SRichard Lowe defined and may be used for any purpose. 436407dc1947SRichard Lowe */ 436507dc1947SRichard Lowe Dwarf_Unsigned dwarf_add_die_marker( 436607dc1947SRichard Lowe Dwarf_P_Debug /*dbg*/, 436707dc1947SRichard Lowe Dwarf_P_Die /*die*/, 436807dc1947SRichard Lowe Dwarf_Unsigned /*marker*/, 436907dc1947SRichard Lowe Dwarf_Error * /*error*/); 437007dc1947SRichard Lowe 4371*4d9fdb46SRobert Mustacchi /* Preferred version, new December 2018. */ 4372*4d9fdb46SRobert Mustacchi int dwarf_add_die_marker_a(Dwarf_P_Debug dbg, 4373*4d9fdb46SRobert Mustacchi Dwarf_P_Die die, 4374*4d9fdb46SRobert Mustacchi Dwarf_Unsigned marker, 4375*4d9fdb46SRobert Mustacchi Dwarf_Error * error); 4376*4d9fdb46SRobert Mustacchi 437707dc1947SRichard Lowe Dwarf_Unsigned dwarf_get_die_marker( 437807dc1947SRichard Lowe Dwarf_P_Debug /*dbg*/, 437907dc1947SRichard Lowe Dwarf_P_Die /*die*/, 438007dc1947SRichard Lowe Dwarf_Unsigned * /*marker*/, 438107dc1947SRichard Lowe Dwarf_Error * /*error*/); 43827c478bd9Sstevel@tonic-gate 4383*4d9fdb46SRobert Mustacchi /* Preferred version, new December 2018. */ 4384*4d9fdb46SRobert Mustacchi int dwarf_get_die_marker_a( 4385*4d9fdb46SRobert Mustacchi Dwarf_P_Debug /*dbg*/, 4386*4d9fdb46SRobert Mustacchi Dwarf_P_Die /*die*/, 4387*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*marker*/, 4388*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 4389*4d9fdb46SRobert Mustacchi 4390*4d9fdb46SRobert Mustacchi /* New September 2016. Preferred version */ 4391*4d9fdb46SRobert Mustacchi int dwarf_die_link_a( 4392*4d9fdb46SRobert Mustacchi Dwarf_P_Die /*die*/, 4393*4d9fdb46SRobert Mustacchi Dwarf_P_Die /*parent*/, 4394*4d9fdb46SRobert Mustacchi Dwarf_P_Die /*child*/, 4395*4d9fdb46SRobert Mustacchi Dwarf_P_Die /*left*/, 4396*4d9fdb46SRobert Mustacchi Dwarf_P_Die /*right*/, 4397*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 4398*4d9fdb46SRobert Mustacchi 4399*4d9fdb46SRobert Mustacchi /* Original version. Use dwarf_die_link_a() instead. */ 44007c478bd9Sstevel@tonic-gate Dwarf_P_Die dwarf_die_link( 440107dc1947SRichard Lowe Dwarf_P_Die /*die*/, 440207dc1947SRichard Lowe Dwarf_P_Die /*parent*/, 4403*4d9fdb46SRobert Mustacchi Dwarf_P_Die /*child*/, 440407dc1947SRichard Lowe Dwarf_P_Die /*left*/, 4405*4d9fdb46SRobert Mustacchi Dwarf_P_Die /*right*/, 440607dc1947SRichard Lowe Dwarf_Error* /*error*/); 440707dc1947SRichard Lowe 440807dc1947SRichard Lowe void dwarf_dealloc_compressed_block( 440907dc1947SRichard Lowe Dwarf_P_Debug, 441007dc1947SRichard Lowe void * 441107dc1947SRichard Lowe ); 441207dc1947SRichard Lowe 4413*4d9fdb46SRobert Mustacchi /* Call this passing in return value from 4414*4d9fdb46SRobert Mustacchi dwarf_uncompress_integer_block() 4415*4d9fdb46SRobert Mustacchi to free the space the decompression allocated. */ 441607dc1947SRichard Lowe void dwarf_dealloc_uncompressed_block( 441707dc1947SRichard Lowe Dwarf_Debug, 441807dc1947SRichard Lowe void * 441907dc1947SRichard Lowe ); 442007dc1947SRichard Lowe 4421*4d9fdb46SRobert Mustacchi /* dwarf_compress_integer_block_a( new 11 February 2019. 4422*4d9fdb46SRobert Mustacchi Like the earlier version this turns an array of signed 4423*4d9fdb46SRobert Mustacchi integers into a block of sleb values (and if the 4424*4d9fdb46SRobert Mustacchi values are small enough it might be a compression! 4425*4d9fdb46SRobert Mustacchi Or it could be an expansion...). Return DW_DLV_OK 4426*4d9fdb46SRobert Mustacchi on success. Supercedes dwarf_compress_integer_block(): 4427*4d9fdb46SRobert Mustacchi as no ugly cast needed to know if 4428*4d9fdb46SRobert Mustacchi dwarf_compress_integer_block_a() succeeds or not. */ 4429*4d9fdb46SRobert Mustacchi int 4430*4d9fdb46SRobert Mustacchi dwarf_compress_integer_block_a( 4431*4d9fdb46SRobert Mustacchi Dwarf_P_Debug /*dbg*/, 4432*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*input_array_length*/, 4433*4d9fdb46SRobert Mustacchi Dwarf_Signed * /*input_array*/, 4434*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*output_block_len*/, 4435*4d9fdb46SRobert Mustacchi void ** /*output_block_returned*/, 4436*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error */); 4437*4d9fdb46SRobert Mustacchi /* The following should be avoided as of February 2019. */ 443807dc1947SRichard Lowe void * dwarf_compress_integer_block( 4439*4d9fdb46SRobert Mustacchi Dwarf_P_Debug, /*dbg*/ 4440*4d9fdb46SRobert Mustacchi Dwarf_Bool, /*signed==true (or unsigned)*/ 4441*4d9fdb46SRobert Mustacchi Dwarf_Small, /*size of integer units: 8, 16, 32, 64*/ 4442*4d9fdb46SRobert Mustacchi void*, /*data*/ 4443*4d9fdb46SRobert Mustacchi Dwarf_Unsigned, /*number of elements*/ 4444*4d9fdb46SRobert Mustacchi Dwarf_Unsigned*, /*number of bytes in output block*/ 4445*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/ 444607dc1947SRichard Lowe ); 444707dc1947SRichard Lowe 4448*4d9fdb46SRobert Mustacchi /* New February 2019. On success returns DW_DLV_OK 4449*4d9fdb46SRobert Mustacchi and creates an array of Dwarf_Signed values 4450*4d9fdb46SRobert Mustacchi from the block of sleb numbers. 4451*4d9fdb46SRobert Mustacchi This interface supercedes 4452*4d9fdb46SRobert Mustacchi dwarf_uncompress_integer_block(). No ugly 4453*4d9fdb46SRobert Mustacchi cast needed to know if 4454*4d9fdb46SRobert Mustacchi dwarf_uncompress_integer_block_a() succeeds or not. */ 4455*4d9fdb46SRobert Mustacchi int 4456*4d9fdb46SRobert Mustacchi dwarf_uncompress_integer_block_a(Dwarf_Debug /*dbg*/, 4457*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*input_length_in_bytes*/, 4458*4d9fdb46SRobert Mustacchi void * /*input_block*/, 4459*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*value_count*/, 4460*4d9fdb46SRobert Mustacchi Dwarf_Signed ** /*value_array*/, 4461*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 4462*4d9fdb46SRobert Mustacchi 4463*4d9fdb46SRobert Mustacchi /* Decode an array of signed leb integers (so of course the 4464*4d9fdb46SRobert Mustacchi array is not composed of fixed length values, but is instead 4465*4d9fdb46SRobert Mustacchi a sequence of sleb values). 4466*4d9fdb46SRobert Mustacchi Returns a DW_DLV_BADADDR on error. 4467*4d9fdb46SRobert Mustacchi Otherwise returns a pointer to an array of 32bit integers. 4468*4d9fdb46SRobert Mustacchi The signed argument must be non-zero (the decode 4469*4d9fdb46SRobert Mustacchi assumes sleb integers in the input data) at this time. 4470*4d9fdb46SRobert Mustacchi Size of integer units must be 32 (32 bits each) at this time. 4471*4d9fdb46SRobert Mustacchi Number of bytes in block is a byte count (not array count). 4472*4d9fdb46SRobert Mustacchi Returns number of units in output block (ie, number of elements 4473*4d9fdb46SRobert Mustacchi of the array that the return value points to) thru the 4474*4d9fdb46SRobert Mustacchi argument. */ 447507dc1947SRichard Lowe void * dwarf_uncompress_integer_block( 4476*4d9fdb46SRobert Mustacchi Dwarf_Debug, /*dbg */ 4477*4d9fdb46SRobert Mustacchi Dwarf_Bool, /*signed==true (or unsigned) */ 4478*4d9fdb46SRobert Mustacchi Dwarf_Small, /*size of integer units: 8, 16, 32, 64 */ 4479*4d9fdb46SRobert Mustacchi void*, /*input data */ 4480*4d9fdb46SRobert Mustacchi Dwarf_Unsigned, /*number of bytes in input */ 4481*4d9fdb46SRobert Mustacchi Dwarf_Unsigned*, /*number of units in output block */ 4482*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error */ 448307dc1947SRichard Lowe ); 44847c478bd9Sstevel@tonic-gate 44857c478bd9Sstevel@tonic-gate /* Operations to create location expressions. */ 4486*4d9fdb46SRobert Mustacchi Dwarf_P_Expr dwarf_new_expr(Dwarf_P_Debug /*dbg*/, 4487*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 4488*4d9fdb46SRobert Mustacchi 4489*4d9fdb46SRobert Mustacchi /* New December 2018. Preferred version. */ 4490*4d9fdb46SRobert Mustacchi int dwarf_new_expr_a(Dwarf_P_Debug /*dbg*/, 4491*4d9fdb46SRobert Mustacchi Dwarf_P_Expr * /*expr_out*/, 4492*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 44937c478bd9Sstevel@tonic-gate 449407dc1947SRichard Lowe void dwarf_expr_reset( 449507dc1947SRichard Lowe Dwarf_P_Expr /*expr*/, 449607dc1947SRichard Lowe Dwarf_Error* /*error*/); 449707dc1947SRichard Lowe 44987c478bd9Sstevel@tonic-gate Dwarf_Unsigned dwarf_add_expr_gen( 4499*4d9fdb46SRobert Mustacchi Dwarf_P_Expr /*expr*/, 4500*4d9fdb46SRobert Mustacchi Dwarf_Small /*opcode*/, 4501*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*val1*/, 4502*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*val2*/, 4503*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 4504*4d9fdb46SRobert Mustacchi 4505*4d9fdb46SRobert Mustacchi /* New December 2018. Preferred version. */ 4506*4d9fdb46SRobert Mustacchi int dwarf_add_expr_gen_a( 4507*4d9fdb46SRobert Mustacchi Dwarf_P_Expr /*expr*/, 4508*4d9fdb46SRobert Mustacchi Dwarf_Small /*opcode*/, 4509*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*val1*/, 4510*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*val2*/, 4511*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*next_byte_offset*/, 451207dc1947SRichard Lowe Dwarf_Error* /*error*/); 45137c478bd9Sstevel@tonic-gate 45147c478bd9Sstevel@tonic-gate Dwarf_Unsigned dwarf_add_expr_addr( 4515*4d9fdb46SRobert Mustacchi Dwarf_P_Expr /*expr*/, 4516*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*addr*/, 4517*4d9fdb46SRobert Mustacchi Dwarf_Signed /*sym_index*/, 451807dc1947SRichard Lowe Dwarf_Error* /*error*/); 45197c478bd9Sstevel@tonic-gate 45207c478bd9Sstevel@tonic-gate Dwarf_Unsigned dwarf_add_expr_addr_b( 452107dc1947SRichard Lowe Dwarf_P_Expr /*expr*/, 452207dc1947SRichard Lowe Dwarf_Unsigned /*addr*/, 452307dc1947SRichard Lowe Dwarf_Unsigned /*sym_index*/, 452407dc1947SRichard Lowe Dwarf_Error* /*error*/); 45257c478bd9Sstevel@tonic-gate 4526*4d9fdb46SRobert Mustacchi 4527*4d9fdb46SRobert Mustacchi /* New December 2018. Preferred version. */ 4528*4d9fdb46SRobert Mustacchi int dwarf_add_expr_addr_c( 4529*4d9fdb46SRobert Mustacchi Dwarf_P_Expr /*expr*/, 4530*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*addr*/, 4531*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*sym_index*/, 4532*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*next_byte_offset_out*/, 4533*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 4534*4d9fdb46SRobert Mustacchi 45357c478bd9Sstevel@tonic-gate Dwarf_Unsigned dwarf_expr_current_offset( 4536*4d9fdb46SRobert Mustacchi Dwarf_P_Expr /*expr*/, 4537*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 4538*4d9fdb46SRobert Mustacchi 4539*4d9fdb46SRobert Mustacchi /* New December 2018. Preferred version. */ 4540*4d9fdb46SRobert Mustacchi int dwarf_expr_current_offset_a( 4541*4d9fdb46SRobert Mustacchi Dwarf_P_Expr /*expr*/, 4542*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*next_byte_offset_out*/, 454307dc1947SRichard Lowe Dwarf_Error* /*error*/); 45447c478bd9Sstevel@tonic-gate 45457c478bd9Sstevel@tonic-gate Dwarf_Addr dwarf_expr_into_block( 4546*4d9fdb46SRobert Mustacchi Dwarf_P_Expr /*expr*/, 4547*4d9fdb46SRobert Mustacchi Dwarf_Unsigned* /*length*/, 4548*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 4549*4d9fdb46SRobert Mustacchi 4550*4d9fdb46SRobert Mustacchi /* New December 2018. Preferred version. */ 4551*4d9fdb46SRobert Mustacchi int dwarf_expr_into_block_a( 4552*4d9fdb46SRobert Mustacchi Dwarf_P_Expr /*expr*/, 4553*4d9fdb46SRobert Mustacchi Dwarf_Unsigned* /*length*/, 4554*4d9fdb46SRobert Mustacchi Dwarf_Small ** /*start_address*/, 455507dc1947SRichard Lowe Dwarf_Error* /*error*/); 45567c478bd9Sstevel@tonic-gate 4557*4d9fdb46SRobert Mustacchi Dwarf_Unsigned dwarf_add_arange(Dwarf_P_Debug /*dbg*/, 4558*4d9fdb46SRobert Mustacchi Dwarf_Addr /*begin_address*/, 4559*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*length*/, 4560*4d9fdb46SRobert Mustacchi Dwarf_Signed /*symbol_index*/, 456107dc1947SRichard Lowe Dwarf_Error* /*error*/); 45627c478bd9Sstevel@tonic-gate 45637c478bd9Sstevel@tonic-gate Dwarf_Unsigned dwarf_add_arange_b( 456407dc1947SRichard Lowe Dwarf_P_Debug /*dbg*/, 456507dc1947SRichard Lowe Dwarf_Addr /*begin_address*/, 456607dc1947SRichard Lowe Dwarf_Unsigned /*length*/, 456707dc1947SRichard Lowe Dwarf_Unsigned /*symbol_index*/, 456807dc1947SRichard Lowe Dwarf_Unsigned /*end_symbol_index*/, 456907dc1947SRichard Lowe Dwarf_Addr /*offset_from_end_symbol*/, 457007dc1947SRichard Lowe Dwarf_Error * /*error*/); 45717c478bd9Sstevel@tonic-gate 4572*4d9fdb46SRobert Mustacchi /* New December 2018. Preferred version. */ 4573*4d9fdb46SRobert Mustacchi int dwarf_add_arange_c( 4574*4d9fdb46SRobert Mustacchi Dwarf_P_Debug /*dbg*/, 4575*4d9fdb46SRobert Mustacchi Dwarf_Addr /*begin_address*/, 4576*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*length*/, 4577*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*symbol_index*/, 4578*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*end_symbol_index*/, 4579*4d9fdb46SRobert Mustacchi Dwarf_Addr /*offset_from_end_symbol*/, 4580*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 4581*4d9fdb46SRobert Mustacchi 45827c478bd9Sstevel@tonic-gate Dwarf_Unsigned dwarf_add_pubname( 4583*4d9fdb46SRobert Mustacchi Dwarf_P_Debug /*dbg*/, 4584*4d9fdb46SRobert Mustacchi Dwarf_P_Die /*die*/, 4585*4d9fdb46SRobert Mustacchi char* /*pubname_name*/, 4586*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 4587*4d9fdb46SRobert Mustacchi 4588*4d9fdb46SRobert Mustacchi /* New December 2018. Preferred version. */ 4589*4d9fdb46SRobert Mustacchi int dwarf_add_pubname_a( 4590*4d9fdb46SRobert Mustacchi Dwarf_P_Debug /*dbg*/, 4591*4d9fdb46SRobert Mustacchi Dwarf_P_Die /*die*/, 4592*4d9fdb46SRobert Mustacchi char* /*pubname_name*/, 4593*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 4594*4d9fdb46SRobert Mustacchi 4595*4d9fdb46SRobert Mustacchi /* Added 17 October 2013. Introduced in DWARF3. */ 4596*4d9fdb46SRobert Mustacchi Dwarf_Unsigned dwarf_add_pubtype( 4597*4d9fdb46SRobert Mustacchi Dwarf_P_Debug /*dbg*/, 4598*4d9fdb46SRobert Mustacchi Dwarf_P_Die /*die*/, 4599*4d9fdb46SRobert Mustacchi char* /*pubtype_name*/, 4600*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 4601*4d9fdb46SRobert Mustacchi 4602*4d9fdb46SRobert Mustacchi /* New December 2018. Preferred version. */ 4603*4d9fdb46SRobert Mustacchi int dwarf_add_pubtype_a( 4604*4d9fdb46SRobert Mustacchi Dwarf_P_Debug /*dbg*/, 4605*4d9fdb46SRobert Mustacchi Dwarf_P_Die /*die*/, 4606*4d9fdb46SRobert Mustacchi char* /*pubtype_name*/, 460707dc1947SRichard Lowe Dwarf_Error* /*error*/); 46087c478bd9Sstevel@tonic-gate 46097c478bd9Sstevel@tonic-gate Dwarf_Unsigned dwarf_add_funcname( 4610*4d9fdb46SRobert Mustacchi Dwarf_P_Debug /*dbg*/, 4611*4d9fdb46SRobert Mustacchi Dwarf_P_Die /*die*/, 4612*4d9fdb46SRobert Mustacchi char* /*func_name*/, 4613*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 4614*4d9fdb46SRobert Mustacchi 4615*4d9fdb46SRobert Mustacchi /* New December 2018. Preferred version. */ 4616*4d9fdb46SRobert Mustacchi int dwarf_add_funcname_a( 4617*4d9fdb46SRobert Mustacchi Dwarf_P_Debug /*dbg*/, 4618*4d9fdb46SRobert Mustacchi Dwarf_P_Die /*die*/, 4619*4d9fdb46SRobert Mustacchi char* /*func_name*/, 462007dc1947SRichard Lowe Dwarf_Error* /*error*/); 46217c478bd9Sstevel@tonic-gate 46227c478bd9Sstevel@tonic-gate Dwarf_Unsigned dwarf_add_typename( 4623*4d9fdb46SRobert Mustacchi Dwarf_P_Debug /*dbg*/, 4624*4d9fdb46SRobert Mustacchi Dwarf_P_Die /*die*/, 4625*4d9fdb46SRobert Mustacchi char* /*type_name*/, 4626*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 4627*4d9fdb46SRobert Mustacchi 4628*4d9fdb46SRobert Mustacchi /* New December 2018. Preferred version. */ 4629*4d9fdb46SRobert Mustacchi int dwarf_add_typename_a( 4630*4d9fdb46SRobert Mustacchi Dwarf_P_Debug /*dbg*/, 4631*4d9fdb46SRobert Mustacchi Dwarf_P_Die /*die*/, 4632*4d9fdb46SRobert Mustacchi char* /*type_name*/, 463307dc1947SRichard Lowe Dwarf_Error* /*error*/); 46347c478bd9Sstevel@tonic-gate 46357c478bd9Sstevel@tonic-gate Dwarf_Unsigned dwarf_add_varname( 4636*4d9fdb46SRobert Mustacchi Dwarf_P_Debug /*dbg*/, 4637*4d9fdb46SRobert Mustacchi Dwarf_P_Die /*die*/, 4638*4d9fdb46SRobert Mustacchi char* /*var_name*/, 4639*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 4640*4d9fdb46SRobert Mustacchi 4641*4d9fdb46SRobert Mustacchi /* New December 2018. Preferred version. */ 4642*4d9fdb46SRobert Mustacchi int dwarf_add_varname_a( 4643*4d9fdb46SRobert Mustacchi Dwarf_P_Debug /*dbg*/, 4644*4d9fdb46SRobert Mustacchi Dwarf_P_Die /*die*/, 4645*4d9fdb46SRobert Mustacchi char* /*var_name*/, 464607dc1947SRichard Lowe Dwarf_Error* /*error*/); 46477c478bd9Sstevel@tonic-gate 46487c478bd9Sstevel@tonic-gate Dwarf_Unsigned dwarf_add_weakname( 4649*4d9fdb46SRobert Mustacchi Dwarf_P_Debug /*dbg*/, 4650*4d9fdb46SRobert Mustacchi Dwarf_P_Die /*die*/, 4651*4d9fdb46SRobert Mustacchi char* /*weak_name*/, 465207dc1947SRichard Lowe Dwarf_Error* /*error*/); 46537c478bd9Sstevel@tonic-gate 4654*4d9fdb46SRobert Mustacchi int dwarf_add_weakname_a( 4655*4d9fdb46SRobert Mustacchi Dwarf_P_Debug /*dbg*/, 4656*4d9fdb46SRobert Mustacchi Dwarf_P_Die /*die*/, 4657*4d9fdb46SRobert Mustacchi char* /*weak_name*/, 4658*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 4659*4d9fdb46SRobert Mustacchi 4660*4d9fdb46SRobert Mustacchi /* .debug_names producer functions */ 4661*4d9fdb46SRobert Mustacchi 4662*4d9fdb46SRobert Mustacchi /* dwarf_force_debug_names forces creation 4663*4d9fdb46SRobert Mustacchi of .debug_names (if DWARF5 being produced) 4664*4d9fdb46SRobert Mustacchi even if empty. Only for testing libdwarf. */ 4665*4d9fdb46SRobert Mustacchi int dwarf_force_debug_names(Dwarf_P_Debug /* dbg */, 4666*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 4667*4d9fdb46SRobert Mustacchi 4668*4d9fdb46SRobert Mustacchi /* Other debug_names functions are needed... FIXME */ 4669*4d9fdb46SRobert Mustacchi 4670*4d9fdb46SRobert Mustacchi /* end .debug_names producer functions */ 4671*4d9fdb46SRobert Mustacchi 4672*4d9fdb46SRobert Mustacchi /* .debug_macinfo producer functions 4673*4d9fdb46SRobert Mustacchi Functions must be called in right order: the section is output 4674*4d9fdb46SRobert Mustacchi In the order these are presented. 46757c478bd9Sstevel@tonic-gate */ 46767c478bd9Sstevel@tonic-gate int dwarf_def_macro(Dwarf_P_Debug /*dbg*/, 467707dc1947SRichard Lowe Dwarf_Unsigned /*line*/, 4678*4d9fdb46SRobert Mustacchi char * /*macname, with (arglist), no space before (*/, 467907dc1947SRichard Lowe char * /*macvalue*/, 468007dc1947SRichard Lowe Dwarf_Error* /*error*/); 46817c478bd9Sstevel@tonic-gate 46827c478bd9Sstevel@tonic-gate int dwarf_undef_macro(Dwarf_P_Debug /*dbg*/, 468307dc1947SRichard Lowe Dwarf_Unsigned /*line*/, 468407dc1947SRichard Lowe char * /*macname, no arglist, of course*/, 468507dc1947SRichard Lowe Dwarf_Error* /*error*/); 46867c478bd9Sstevel@tonic-gate 46877c478bd9Sstevel@tonic-gate int dwarf_start_macro_file(Dwarf_P_Debug /*dbg*/, 468807dc1947SRichard Lowe Dwarf_Unsigned /*fileindex*/, 468907dc1947SRichard Lowe Dwarf_Unsigned /*linenumber*/, 469007dc1947SRichard Lowe Dwarf_Error* /*error*/); 46917c478bd9Sstevel@tonic-gate 46927c478bd9Sstevel@tonic-gate int dwarf_end_macro_file(Dwarf_P_Debug /*dbg*/, 469307dc1947SRichard Lowe Dwarf_Error* /*error*/); 46947c478bd9Sstevel@tonic-gate 46957c478bd9Sstevel@tonic-gate int dwarf_vendor_ext(Dwarf_P_Debug /*dbg*/, 469607dc1947SRichard Lowe Dwarf_Unsigned /*constant*/, 469707dc1947SRichard Lowe char * /*string*/, 469807dc1947SRichard Lowe Dwarf_Error* /*error*/); 46997c478bd9Sstevel@tonic-gate 47007c478bd9Sstevel@tonic-gate /* end macinfo producer functions */ 47017c478bd9Sstevel@tonic-gate 47027c478bd9Sstevel@tonic-gate int dwarf_attr_offset(Dwarf_Die /*die*/, 47037c478bd9Sstevel@tonic-gate Dwarf_Attribute /*attr of above die*/, 47047c478bd9Sstevel@tonic-gate Dwarf_Off * /*returns offset thru this ptr */, 47057c478bd9Sstevel@tonic-gate Dwarf_Error * /*error*/); 47067c478bd9Sstevel@tonic-gate 4707*4d9fdb46SRobert Mustacchi /* This is a hack so clients can verify offsets. 4708*4d9fdb46SRobert Mustacchi Added April 2005 so that debugger can detect broken offsets 4709*4d9fdb46SRobert Mustacchi (which happened in an IRIX executable larger than 2GB 471007dc1947SRichard Lowe with MIPSpro 7.3.1.3 toolchain.). 471107dc1947SRichard Lowe */ 4712*4d9fdb46SRobert Mustacchi int dwarf_get_section_max_offsets(Dwarf_Debug /*dbg*/, 471307dc1947SRichard Lowe Dwarf_Unsigned * /*debug_info_size*/, 471407dc1947SRichard Lowe Dwarf_Unsigned * /*debug_abbrev_size*/, 471507dc1947SRichard Lowe Dwarf_Unsigned * /*debug_line_size*/, 471607dc1947SRichard Lowe Dwarf_Unsigned * /*debug_loc_size*/, 471707dc1947SRichard Lowe Dwarf_Unsigned * /*debug_aranges_size*/, 471807dc1947SRichard Lowe Dwarf_Unsigned * /*debug_macinfo_size*/, 471907dc1947SRichard Lowe Dwarf_Unsigned * /*debug_pubnames_size*/, 472007dc1947SRichard Lowe Dwarf_Unsigned * /*debug_str_size*/, 472107dc1947SRichard Lowe Dwarf_Unsigned * /*debug_frame_size*/, 472207dc1947SRichard Lowe Dwarf_Unsigned * /*debug_ranges_size*/, 472307dc1947SRichard Lowe Dwarf_Unsigned * /*debug_pubtypes_size*/); 472407dc1947SRichard Lowe 4725*4d9fdb46SRobert Mustacchi /* New October 2011., adds .debug_types section to the sizes 4726*4d9fdb46SRobert Mustacchi returned. */ 4727*4d9fdb46SRobert Mustacchi int dwarf_get_section_max_offsets_b(Dwarf_Debug /*dbg*/, 4728*4d9fdb46SRobert Mustacchi 4729*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*debug_info_size*/, 4730*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*debug_abbrev_size*/, 4731*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*debug_line_size*/, 4732*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*debug_loc_size*/, 4733*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*debug_aranges_size*/, 4734*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*debug_macinfo_size*/, 4735*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*debug_pubnames_size*/, 4736*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*debug_str_size*/, 4737*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*debug_frame_size*/, 4738*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*debug_ranges_size*/, 4739*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*debug_pubtypes_size*/, 4740*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*debug_types_size*/); 4741*4d9fdb46SRobert Mustacchi 4742*4d9fdb46SRobert Mustacchi int dwarf_get_section_max_offsets_c(Dwarf_Debug /*dbg*/, 4743*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*debug_info_size*/, 4744*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*debug_abbrev_size*/, 4745*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*debug_line_size*/, 4746*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*debug_loc_size*/, 4747*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*debug_aranges_size*/, 4748*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*debug_macinfo_size*/, 4749*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*debug_pubnames_size*/, 4750*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*debug_str_size*/, 4751*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*debug_frame_size*/, 4752*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*debug_ranges_size*/, 4753*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*debug_pubtypes_size*/, 4754*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*debug_types_size*/, 4755*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*debug_macro_size*/, 4756*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*debug_str_offsets_size*/, 4757*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*debug_sup_size*/, 4758*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*debug_cu_index_size*/, 4759*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*debug_tu_index_size*/); 4760*4d9fdb46SRobert Mustacchi int dwarf_get_section_max_offsets_d(Dwarf_Debug /*dbg*/, 4761*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*debug_info_size*/, 4762*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*debug_abbrev_size*/, 4763*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*debug_line_size*/, 4764*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*debug_loc_size*/, 4765*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*debug_aranges_size*/, 4766*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*debug_macinfo_size*/, 4767*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*debug_pubnames_size*/, 4768*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*debug_str_size*/, 4769*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*debug_frame_size*/, 4770*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*debug_ranges_size*/, 4771*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*debug_pubtypes_size*/, 4772*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*debug_types_size*/, 4773*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*debug_macro_size*/, 4774*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*debug_str_offsets_size*/, 4775*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*debug_sup_size*/, 4776*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*debug_cu_index_size*/, 4777*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*debug_tu_index_size*/, 4778*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*debug_names_size*/, 4779*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*debug_loclists_size*/, 4780*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*debug_rnglists_size*/); 4781*4d9fdb46SRobert Mustacchi 4782*4d9fdb46SRobert Mustacchi /* The 'set' calls here return the original (before any change 4783*4d9fdb46SRobert Mustacchi by these set routines) of the respective fields. */ 4784*4d9fdb46SRobert Mustacchi /* Multiple releases spelled 'initial' as 'inital' . 4785*4d9fdb46SRobert Mustacchi The 'inital' spelling should not be used. */ 478607dc1947SRichard Lowe Dwarf_Half dwarf_set_frame_rule_inital_value(Dwarf_Debug /*dbg*/, 478707dc1947SRichard Lowe Dwarf_Half /*value*/); 4788*4d9fdb46SRobert Mustacchi /* Additional interface with correct 'initial' spelling. */ 4789*4d9fdb46SRobert Mustacchi /* It is likely you will want to call the following 6 functions 4790*4d9fdb46SRobert Mustacchi before accessing any frame information. All are useful 4791*4d9fdb46SRobert Mustacchi to tailor handling of pseudo-registers needed to turn 4792*4d9fdb46SRobert Mustacchi frame operation references into simpler forms and to 4793*4d9fdb46SRobert Mustacchi reflect ABI specific data. Of course altering libdwarf.h 4794*4d9fdb46SRobert Mustacchi and dwarf.h allow the same capabilities, but header changes 4795*4d9fdb46SRobert Mustacchi in the distribution would require you re-integrate your 4796*4d9fdb46SRobert Mustacchi libdwarf.h changes into the distributed libdwarf.h ... 4797*4d9fdb46SRobert Mustacchi so use the following functions instead.*/ 479807dc1947SRichard Lowe Dwarf_Half dwarf_set_frame_rule_initial_value(Dwarf_Debug /*dbg*/, 479907dc1947SRichard Lowe Dwarf_Half /*value*/); 4800*4d9fdb46SRobert Mustacchi Dwarf_Half dwarf_set_frame_rule_table_size(Dwarf_Debug /*dbg*/, 480107dc1947SRichard Lowe Dwarf_Half /*value*/); 4802*4d9fdb46SRobert Mustacchi Dwarf_Half dwarf_set_frame_cfa_value(Dwarf_Debug /*dbg*/, 480307dc1947SRichard Lowe Dwarf_Half /*value*/); 4804*4d9fdb46SRobert Mustacchi Dwarf_Half dwarf_set_frame_same_value(Dwarf_Debug /*dbg*/, 480507dc1947SRichard Lowe Dwarf_Half /*value*/); 4806*4d9fdb46SRobert Mustacchi Dwarf_Half dwarf_set_frame_undefined_value(Dwarf_Debug /*dbg*/, 480707dc1947SRichard Lowe Dwarf_Half /*value*/); 4808*4d9fdb46SRobert Mustacchi /* dwarf_set_default_address_size only sets 'value' if value is 4809*4d9fdb46SRobert Mustacchi greater than zero. */ 4810*4d9fdb46SRobert Mustacchi Dwarf_Small dwarf_set_default_address_size(Dwarf_Debug /*dbg*/, 4811*4d9fdb46SRobert Mustacchi Dwarf_Small /* value */); 4812*4d9fdb46SRobert Mustacchi 4813*4d9fdb46SRobert Mustacchi /* As of April 27, 2009, this version with no diepointer is 4814*4d9fdb46SRobert Mustacchi obsolete though supported. Use dwarf_get_ranges_a() instead. */ 4815*4d9fdb46SRobert Mustacchi int dwarf_get_ranges(Dwarf_Debug /*dbg*/, 481607dc1947SRichard Lowe Dwarf_Off /*rangesoffset*/, 481707dc1947SRichard Lowe Dwarf_Ranges ** /*rangesbuf*/, 481807dc1947SRichard Lowe Dwarf_Signed * /*listlen*/, 481907dc1947SRichard Lowe Dwarf_Unsigned * /*bytecount*/, 482007dc1947SRichard Lowe Dwarf_Error * /*error*/); 482107dc1947SRichard Lowe 482207dc1947SRichard Lowe /* This adds the address_size argument. New April 27, 2009 */ 4823*4d9fdb46SRobert Mustacchi int dwarf_get_ranges_a(Dwarf_Debug /*dbg*/, 482407dc1947SRichard Lowe Dwarf_Off /*rangesoffset*/, 482507dc1947SRichard Lowe Dwarf_Die /* diepointer */, 482607dc1947SRichard Lowe Dwarf_Ranges ** /*rangesbuf*/, 482707dc1947SRichard Lowe Dwarf_Signed * /*listlen*/, 482807dc1947SRichard Lowe Dwarf_Unsigned * /*bytecount*/, 482907dc1947SRichard Lowe Dwarf_Error * /*error*/); 483007dc1947SRichard Lowe 4831*4d9fdb46SRobert Mustacchi void dwarf_ranges_dealloc(Dwarf_Debug /*dbg*/, 483207dc1947SRichard Lowe Dwarf_Ranges * /*rangesbuf*/, 483307dc1947SRichard Lowe Dwarf_Signed /*rangecount*/); 483407dc1947SRichard Lowe 4835*4d9fdb46SRobert Mustacchi /* ======= START .debug_rnglists interfaces. New May 2020 */ 4836*4d9fdb46SRobert Mustacchi struct Dwarf_Rnglists_Entry_s; 4837*4d9fdb46SRobert Mustacchi typedef struct Dwarf_Rnglists_Entry_s * Dwarf_Rnglists_Entry; 4838*4d9fdb46SRobert Mustacchi struct Dwarf_Rnglists_Head_s; 4839*4d9fdb46SRobert Mustacchi typedef struct Dwarf_Rnglists_Head_s * Dwarf_Rnglists_Head; 4840*4d9fdb46SRobert Mustacchi 4841*4d9fdb46SRobert Mustacchi /* For DWARF5 DW_AT_ranges: DW_FORM_sec_offset DW_FORM_rnglistx */ 4842*4d9fdb46SRobert Mustacchi int dwarf_rnglists_get_rle_head(Dwarf_Attribute /*attr*/, 4843*4d9fdb46SRobert Mustacchi Dwarf_Half /*theform*/, 4844*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*index_or_offset_value*/, 4845*4d9fdb46SRobert Mustacchi Dwarf_Rnglists_Head * /*head_out*/, 4846*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*count_of_entries_in_head*/, 4847*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*global_offset_of_rle_set*/, 4848*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 4849*4d9fdb46SRobert Mustacchi 4850*4d9fdb46SRobert Mustacchi /* Get the rnglist entries details */ 4851*4d9fdb46SRobert Mustacchi int dwarf_get_rnglists_entry_fields(Dwarf_Rnglists_Head /*head*/, 4852*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*entrynum*/, 4853*4d9fdb46SRobert Mustacchi unsigned int * /*entrylen*/, 4854*4d9fdb46SRobert Mustacchi unsigned int * /*code*/, 4855*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*raw1*/, 4856*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*raw2*/, 4857*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*cooked1*/, 4858*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*cooked2*/, 4859*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 4860*4d9fdb46SRobert Mustacchi 4861*4d9fdb46SRobert Mustacchi int dwarf_dealloc_rnglists_head(Dwarf_Rnglists_Head ); 4862*4d9fdb46SRobert Mustacchi 4863*4d9fdb46SRobert Mustacchi /* Loads all the rnglists headers and 4864*4d9fdb46SRobert Mustacchi returns DW_DLV_NO_ENTRY if the section 4865*4d9fdb46SRobert Mustacchi is missing or empty. 4866*4d9fdb46SRobert Mustacchi Intended to be done quite early and 4867*4d9fdb46SRobert Mustacchi it is automatically 4868*4d9fdb46SRobert Mustacchi done if .debug_info is loaded. 4869*4d9fdb46SRobert Mustacchi Doing it more than once is never necessary 4870*4d9fdb46SRobert Mustacchi or harmful. There is no deallocation call 4871*4d9fdb46SRobert Mustacchi made visible, deallocation happens 4872*4d9fdb46SRobert Mustacchi when dwarf_finish() is called. 4873*4d9fdb46SRobert Mustacchi With DW_DLV_OK it returns the number of 4874*4d9fdb46SRobert Mustacchi rnglists headers in the section through 4875*4d9fdb46SRobert Mustacchi rnglists_count. */ 4876*4d9fdb46SRobert Mustacchi int dwarf_load_rnglists(Dwarf_Debug /*dbg*/, 4877*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*rnglists_count*/, 4878*4d9fdb46SRobert Mustacchi Dwarf_Error * /*err*/); 4879*4d9fdb46SRobert Mustacchi 4880*4d9fdb46SRobert Mustacchi /* Retrieve the offset from the context-index'th 4881*4d9fdb46SRobert Mustacchi rangelists context and the offsetentry_index 4882*4d9fdb46SRobert Mustacchi element of the array of offsets. 4883*4d9fdb46SRobert Mustacchi If an index is too large to be correct 4884*4d9fdb46SRobert Mustacchi this returns DW_DLV_NO_ENTRY. 4885*4d9fdb46SRobert Mustacchi If all is correct it returns DW_DLV_OK and 4886*4d9fdb46SRobert Mustacchi sets *offset_value_out to the offset of 4887*4d9fdb46SRobert Mustacchi the range list from the base of the offset 4888*4d9fdb46SRobert Mustacchi array, and *global_offset_value_out is set 4889*4d9fdb46SRobert Mustacchi to the .debug_rnglists section offset of 4890*4d9fdb46SRobert Mustacchi the range list. */ 4891*4d9fdb46SRobert Mustacchi int dwarf_get_rnglist_offset_index_value(Dwarf_Debug /*dbg*/, 4892*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*context_index*/, 4893*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*offsetentry_index*/, 4894*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*offset_value_out*/, 4895*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*global_offset_value_out*/, 4896*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 4897*4d9fdb46SRobert Mustacchi 4898*4d9fdb46SRobert Mustacchi 4899*4d9fdb46SRobert Mustacchi /* Used by dwarfdump to print basic data from the 4900*4d9fdb46SRobert Mustacchi data generated to look at a specific rangelist 4901*4d9fdb46SRobert Mustacchi as returned by dwarf_rnglists_index_get_rle_head() 4902*4d9fdb46SRobert Mustacchi or dwarf_rnglists_offset_get_rle_head. */ 4903*4d9fdb46SRobert Mustacchi int dwarf_get_rnglist_head_basics(Dwarf_Rnglists_Head /*head*/, 4904*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*rle_count*/, 4905*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*rnglists_version*/, 4906*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*rnglists_index_returned*/, 4907*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*bytes_total_in_rle*/, 4908*4d9fdb46SRobert Mustacchi Dwarf_Half * /*offset_size*/, 4909*4d9fdb46SRobert Mustacchi Dwarf_Half * /*address_size*/, 4910*4d9fdb46SRobert Mustacchi Dwarf_Half * /*segment_selector_size*/, 4911*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*overall offset_of_this_context*/, 4912*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*total_length of this context*/, 4913*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*offset_table_offset*/, 4914*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*offset_table_entrycount*/, 4915*4d9fdb46SRobert Mustacchi Dwarf_Bool * /*rnglists_base_present*/, 4916*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*rnglists_base*/, 4917*4d9fdb46SRobert Mustacchi Dwarf_Bool * /*rnglists_base_address_present*/, 4918*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*rnglists_base_address*/, 4919*4d9fdb46SRobert Mustacchi Dwarf_Bool * /*rnglists_debug_addr_base_present*/, 4920*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*rnglists_debug_addr_base*/, 4921*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 4922*4d9fdb46SRobert Mustacchi 4923*4d9fdb46SRobert Mustacchi /* Enables printing of details about the Range List Table 4924*4d9fdb46SRobert Mustacchi Headers, one header per call. Index starting at 0. 4925*4d9fdb46SRobert Mustacchi Returns DW_DLV_NO_ENTRY if index is too high for the table. 4926*4d9fdb46SRobert Mustacchi A .debug_rnglists section may contain any number 4927*4d9fdb46SRobert Mustacchi of Range List Table Headers with their details. */ 4928*4d9fdb46SRobert Mustacchi int dwarf_get_rnglist_context_basics(Dwarf_Debug /*dbg*/, 4929*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*index*/, 4930*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*header_offset*/, 4931*4d9fdb46SRobert Mustacchi Dwarf_Small * /*offset_size*/, 4932*4d9fdb46SRobert Mustacchi Dwarf_Small * /*extension_size*/, 4933*4d9fdb46SRobert Mustacchi unsigned int * /*version*/, /* 5 */ 4934*4d9fdb46SRobert Mustacchi Dwarf_Small * /*address_size*/, 4935*4d9fdb46SRobert Mustacchi Dwarf_Small * /*segment_selector_size*/, 4936*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*offset_entry_count*/, 4937*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*offset_of_offset_array*/, 4938*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*offset_of_first_rangeentry*/, 4939*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*offset_past_last_rangeentry*/, 4940*4d9fdb46SRobert Mustacchi Dwarf_Error * /*err*/); 4941*4d9fdb46SRobert Mustacchi 4942*4d9fdb46SRobert Mustacchi /* entry offset is offset_of_first_rangeentry. 4943*4d9fdb46SRobert Mustacchi Stop when the returned *next_entry_offset 4944*4d9fdb46SRobert Mustacchi is == offset_past_last_rangentry (from 4945*4d9fdb46SRobert Mustacchi dwarf_get_rnglist_context_plus). 4946*4d9fdb46SRobert Mustacchi This only makes sense within those ranges. 4947*4d9fdb46SRobert Mustacchi This retrieves raw detail from the section, 4948*4d9fdb46SRobert Mustacchi no base values or anything are added. 4949*4d9fdb46SRobert Mustacchi So this returns raw individual entries 4950*4d9fdb46SRobert Mustacchi for a single rnglist header, meaning a 4951*4d9fdb46SRobert Mustacchi a single Dwarf_Rnglists_Context. 4952*4d9fdb46SRobert Mustacchi 4953*4d9fdb46SRobert Mustacchi This interface assumes there is no 4954*4d9fdb46SRobert Mustacchi segment selector. */ 4955*4d9fdb46SRobert Mustacchi int dwarf_get_rnglist_raw_entry_detail(Dwarf_Debug /*dbg*/, 4956*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*entry_offset*/, 4957*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*entry_kind*/, 4958*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*entry_operand1*/, 4959*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*entry_operand2*/, 4960*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*next_entry_offset*/, 4961*4d9fdb46SRobert Mustacchi Dwarf_Error * /*err*/); 4962*4d9fdb46SRobert Mustacchi 4963*4d9fdb46SRobert Mustacchi /* If no error, returns DW_DLV_OK and sets 4964*4d9fdb46SRobert Mustacchi the entry length,kind, and operands through 4965*4d9fdb46SRobert Mustacchi the pointers. If any missing operands assign 4966*4d9fdb46SRobert Mustacchi zero back through tye operand pointers. */ 4967*4d9fdb46SRobert Mustacchi 4968*4d9fdb46SRobert Mustacchi int dwarf_get_rnglist_rle( Dwarf_Debug /*dbg*/, 4969*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*contextnumber*/, 4970*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*entry_offset*/, 4971*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*endoffset*/, 4972*4d9fdb46SRobert Mustacchi unsigned int * /*entrylen*/, 4973*4d9fdb46SRobert Mustacchi unsigned int * /*entry_kind*/, 4974*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*entry_operand1*/, 4975*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*entry_operand2*/, 4976*4d9fdb46SRobert Mustacchi Dwarf_Error * /*err*/); 4977*4d9fdb46SRobert Mustacchi 4978*4d9fdb46SRobert Mustacchi /* ======= END .debug_rnglists interfaces. */ 4979*4d9fdb46SRobert Mustacchi /* ======= START .debug_loclists interfaces. New May 2020 */ 4980*4d9fdb46SRobert Mustacchi /* These interfaces allow reading the .debug_loclists 4981*4d9fdb46SRobert Mustacchi section. Normal use of .debug_loclists uses 4982*4d9fdb46SRobert Mustacchi dwarf_get_loclist_c() to open access to any kind of location 4983*4d9fdb46SRobert Mustacchi or loclist and uses dwarf_loc_head_c_dealloc() to 4984*4d9fdb46SRobert Mustacchi deallocate that memory once one is finished with 4985*4d9fdb46SRobert Mustacchi that data. So for most purposes you do not need 4986*4d9fdb46SRobert Mustacchi to use these functions */ 4987*4d9fdb46SRobert Mustacchi struct Dwarf_Loclists_Entry_s; 4988*4d9fdb46SRobert Mustacchi typedef struct Dwarf_Loclists_Entry_s * Dwarf_Loclists_Entry; 4989*4d9fdb46SRobert Mustacchi 4990*4d9fdb46SRobert Mustacchi /* See dwarf_get_loclist_c() to open a Dwarf_Loc_Head_c 4991*4d9fdb46SRobert Mustacchi on any type of location list or expression. */ 4992*4d9fdb46SRobert Mustacchi 4993*4d9fdb46SRobert Mustacchi /* Get the loclists entries details */ 4994*4d9fdb46SRobert Mustacchi int dwarf_get_loclists_entry_fields(Dwarf_Loc_Head_c /*head*/, 4995*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*entrynum*/, 4996*4d9fdb46SRobert Mustacchi unsigned int * /*entrylen*/, 4997*4d9fdb46SRobert Mustacchi unsigned int * /*code*/, 4998*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*raw1*/, 4999*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*raw2*/, 5000*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*cooked1*/, 5001*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*cooked2*/, 5002*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 5003*4d9fdb46SRobert Mustacchi 5004*4d9fdb46SRobert Mustacchi /* Loads all the loclists headers and 5005*4d9fdb46SRobert Mustacchi returns DW_DLV_NO_ENTRY if the section 5006*4d9fdb46SRobert Mustacchi is missing or empty. 5007*4d9fdb46SRobert Mustacchi Intended to be done quite early and 5008*4d9fdb46SRobert Mustacchi it is automatically 5009*4d9fdb46SRobert Mustacchi done if .debug_info is loaded. 5010*4d9fdb46SRobert Mustacchi Doing it more than once is never necessary 5011*4d9fdb46SRobert Mustacchi or harmful. There is no deallocation call 5012*4d9fdb46SRobert Mustacchi made visible, deallocation happens 5013*4d9fdb46SRobert Mustacchi when dwarf_finish() is called. 5014*4d9fdb46SRobert Mustacchi With DW_DLV_OK it returns the number of 5015*4d9fdb46SRobert Mustacchi loclists headers in the section through 5016*4d9fdb46SRobert Mustacchi loclists_count. */ 5017*4d9fdb46SRobert Mustacchi int dwarf_load_loclists(Dwarf_Debug /*dbg*/, 5018*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*loclists_count*/, 5019*4d9fdb46SRobert Mustacchi Dwarf_Error * /*err*/); 5020*4d9fdb46SRobert Mustacchi 5021*4d9fdb46SRobert Mustacchi /* Retrieve the offset from the context-index'th 5022*4d9fdb46SRobert Mustacchi loclists context and the offsetentry_index 5023*4d9fdb46SRobert Mustacchi element of the array of offsets. 5024*4d9fdb46SRobert Mustacchi If an index is too large to be correct 5025*4d9fdb46SRobert Mustacchi this returns DW_DLV_NO_ENTRY. 5026*4d9fdb46SRobert Mustacchi If all is correct it returns DW_DLV_OK and 5027*4d9fdb46SRobert Mustacchi sets *offset_value_out to the offset of 5028*4d9fdb46SRobert Mustacchi the range list from the base of the offset 5029*4d9fdb46SRobert Mustacchi array, and *global_offset_value_out is set 5030*4d9fdb46SRobert Mustacchi to the .debug_loclists section offset of 5031*4d9fdb46SRobert Mustacchi the range list. */ 5032*4d9fdb46SRobert Mustacchi int dwarf_get_loclist_offset_index_value(Dwarf_Debug /*dbg*/, 5033*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*context_index*/, 5034*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*offsetentry_index*/, 5035*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*offset_value_out*/, 5036*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*global_offset_value_out*/, 5037*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 5038*4d9fdb46SRobert Mustacchi 5039*4d9fdb46SRobert Mustacchi /* Used by dwarfdump to print basic data from the 5040*4d9fdb46SRobert Mustacchi data generated to look at a specific rangelist 5041*4d9fdb46SRobert Mustacchi as returned by dwarf_loclists_index_get_lle_head() 5042*4d9fdb46SRobert Mustacchi or dwarf_loclists_offset_get_lle_head. */ 5043*4d9fdb46SRobert Mustacchi int dwarf_get_loclist_head_basics(Dwarf_Loc_Head_c /*head*/, 5044*4d9fdb46SRobert Mustacchi Dwarf_Small * /*lkind*/, 5045*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*lle_count*/, 5046*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*loclists_version*/, 5047*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*loclists_index_returned*/, 5048*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*bytes_total_in_rle*/, 5049*4d9fdb46SRobert Mustacchi Dwarf_Half * /*offset_size*/, 5050*4d9fdb46SRobert Mustacchi Dwarf_Half * /*address_size*/, 5051*4d9fdb46SRobert Mustacchi Dwarf_Half * /*segment_selector_size*/, 5052*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*overall offset_of_this_context*/, 5053*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*total_length of this context*/, 5054*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*offset_table_offset*/, 5055*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*offset_table_entrycount*/, 5056*4d9fdb46SRobert Mustacchi Dwarf_Bool * /*loclists_base_present*/, 5057*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*loclists_base*/, 5058*4d9fdb46SRobert Mustacchi Dwarf_Bool * /*loclists_base_address_present*/, 5059*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*loclists_base_address*/, 5060*4d9fdb46SRobert Mustacchi Dwarf_Bool * /*loclists_debug_addr_base_present*/, 5061*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*loclists_debug_addr_base*/, 5062*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*offset_this_lle_area*/, 5063*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 5064*4d9fdb46SRobert Mustacchi 5065*4d9fdb46SRobert Mustacchi /* Enables printing of details about the Range List Table 5066*4d9fdb46SRobert Mustacchi Headers, one header per call. Index starting at 0. 5067*4d9fdb46SRobert Mustacchi Returns DW_DLV_NO_ENTRY if index is too high for the table. 5068*4d9fdb46SRobert Mustacchi A .debug_loclists section may contain any number 5069*4d9fdb46SRobert Mustacchi of Location List Table Headers with their details. */ 5070*4d9fdb46SRobert Mustacchi int dwarf_get_loclist_context_basics(Dwarf_Debug /*dbg*/, 5071*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*index*/, 5072*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*header_offset*/, 5073*4d9fdb46SRobert Mustacchi Dwarf_Small * /*offset_size*/, 5074*4d9fdb46SRobert Mustacchi Dwarf_Small * /*extension_size*/, 5075*4d9fdb46SRobert Mustacchi unsigned int * /*version*/, /* 5 */ 5076*4d9fdb46SRobert Mustacchi Dwarf_Small * /*address_size*/, 5077*4d9fdb46SRobert Mustacchi Dwarf_Small * /*segment_selector_size*/, 5078*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*offset_entry_count*/, 5079*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*offset_of_offset_array*/, 5080*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*offset_of_first_locentry*/, 5081*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*offset_past_last_locentry*/, 5082*4d9fdb46SRobert Mustacchi Dwarf_Error * /*err*/); 5083*4d9fdb46SRobert Mustacchi 5084*4d9fdb46SRobert Mustacchi /* entry offset is offset_of_first_locentry. 5085*4d9fdb46SRobert Mustacchi Stop when the returned *next_entry_offset 5086*4d9fdb46SRobert Mustacchi is == offset_past_last_locentry (from 5087*4d9fdb46SRobert Mustacchi dwarf_get_loclist_context_plus). 5088*4d9fdb46SRobert Mustacchi This only makes sense within those ranges. 5089*4d9fdb46SRobert Mustacchi This retrieves raw detail from the section, 5090*4d9fdb46SRobert Mustacchi no base values or anything are added. 5091*4d9fdb46SRobert Mustacchi So this returns raw individual entries 5092*4d9fdb46SRobert Mustacchi for a single loclist header, meaning a 5093*4d9fdb46SRobert Mustacchi a single Dwarf_Loclists_Context. 5094*4d9fdb46SRobert Mustacchi 5095*4d9fdb46SRobert Mustacchi This interface assumes there is no 5096*4d9fdb46SRobert Mustacchi segment selector. */ 5097*4d9fdb46SRobert Mustacchi int dwarf_get_loclist_raw_entry_detail(Dwarf_Debug /*dbg*/, 5098*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*entry_offset*/, 5099*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*entry_kind*/, 5100*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*entry_operand1*/, 5101*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*entry_operand2*/, 5102*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*next_entry_offset*/, 5103*4d9fdb46SRobert Mustacchi Dwarf_Error * /*err*/); 5104*4d9fdb46SRobert Mustacchi 5105*4d9fdb46SRobert Mustacchi /* If no error, returns DW_DLV_OK and sets 5106*4d9fdb46SRobert Mustacchi the entry length,kind, and operands through 5107*4d9fdb46SRobert Mustacchi the pointers. If any missing operands assign 5108*4d9fdb46SRobert Mustacchi zero back through tye operand pointers. */ 5109*4d9fdb46SRobert Mustacchi 5110*4d9fdb46SRobert Mustacchi int dwarf_get_loclist_lle( Dwarf_Debug /*dbg*/, 5111*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*contextnumber*/, 5112*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*entry_offset*/, 5113*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*endoffset*/, 5114*4d9fdb46SRobert Mustacchi unsigned int * /*entrylen*/, 5115*4d9fdb46SRobert Mustacchi unsigned int * /*entry_kind*/, 5116*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*entry_operand1*/, 5117*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*entry_operand2*/, 5118*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*expr_ops_blocksize*/, 5119*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*expr_ops_offset*/, 5120*4d9fdb46SRobert Mustacchi Dwarf_Small ** /*expr_opsdata*/, 5121*4d9fdb46SRobert Mustacchi Dwarf_Error * /*err*/); 5122*4d9fdb46SRobert Mustacchi 5123*4d9fdb46SRobert Mustacchi /* ======= END .debug_loclists interfaces. */ 5124*4d9fdb46SRobert Mustacchi 5125*4d9fdb46SRobert Mustacchi /* New April 2018. 5126*4d9fdb46SRobert Mustacchi Allows applications to print the .debug_str_offsets 5127*4d9fdb46SRobert Mustacchi section. 5128*4d9fdb46SRobert Mustacchi Beginning at starting_offset zero, 5129*4d9fdb46SRobert Mustacchi returns data about the first table found. 5130*4d9fdb46SRobert Mustacchi The value *next_table_offset is the value 5131*4d9fdb46SRobert Mustacchi of the next table (if any), one byte past 5132*4d9fdb46SRobert Mustacchi the end of the table whose data is returned.. 5133*4d9fdb46SRobert Mustacchi Returns DW_DLV_NO_ENTRY if the starting offset 5134*4d9fdb46SRobert Mustacchi is past the end of valid data. 5135*4d9fdb46SRobert Mustacchi 5136*4d9fdb46SRobert Mustacchi There is no guarantee that there are no non-0 nonsense 5137*4d9fdb46SRobert Mustacchi bytes in the section outside of useful tables, 5138*4d9fdb46SRobert Mustacchi so this can fail and return nonsense or 5139*4d9fdb46SRobert Mustacchi DW_DLV_ERROR if such garbage exists. 5140*4d9fdb46SRobert Mustacchi */ 5141*4d9fdb46SRobert Mustacchi 5142*4d9fdb46SRobert Mustacchi struct Dwarf_Str_Offsets_Table_s; 5143*4d9fdb46SRobert Mustacchi typedef struct Dwarf_Str_Offsets_Table_s * Dwarf_Str_Offsets_Table; 5144*4d9fdb46SRobert Mustacchi 5145*4d9fdb46SRobert Mustacchi /* Allocates a struct Dwarf_Str_Offsets_Table_s for the section 5146*4d9fdb46SRobert Mustacchi and returns DW_DLV_OK and sets a pointer to the struct through 5147*4d9fdb46SRobert Mustacchi the table_data pointer if successful. 5148*4d9fdb46SRobert Mustacchi 5149*4d9fdb46SRobert Mustacchi If there is no such section it returns DW_DLV_NO_ENTRY. */ 5150*4d9fdb46SRobert Mustacchi int dwarf_open_str_offsets_table_access(Dwarf_Debug /*dbg*/, 5151*4d9fdb46SRobert Mustacchi Dwarf_Str_Offsets_Table * /*table_data*/, 5152*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 5153*4d9fdb46SRobert Mustacchi 5154*4d9fdb46SRobert Mustacchi /* Close access, free table_data. */ 5155*4d9fdb46SRobert Mustacchi int dwarf_close_str_offsets_table_access( 5156*4d9fdb46SRobert Mustacchi Dwarf_Str_Offsets_Table /*table_data*/, 5157*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 5158*4d9fdb46SRobert Mustacchi 5159*4d9fdb46SRobert Mustacchi /* Call till it returns DW_DLV_NO_ENTRY (normal end) 5160*4d9fdb46SRobert Mustacchi or DW_DLV_ERROR (error) and stop. 5161*4d9fdb46SRobert Mustacchi 5162*4d9fdb46SRobert Mustacchi On successful call, call dwarf_str_offsets_table_entry() 5163*4d9fdb46SRobert Mustacchi to get the individual table values on the now-active table. */ 5164*4d9fdb46SRobert Mustacchi int dwarf_next_str_offsets_table( Dwarf_Str_Offsets_Table /*table_data*/, 5165*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*unit_length*/, 5166*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*unit_length_offset*/, 5167*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*table_start_offset*/, 5168*4d9fdb46SRobert Mustacchi Dwarf_Half * /*entry_size*/, 5169*4d9fdb46SRobert Mustacchi Dwarf_Half * /*version*/, 5170*4d9fdb46SRobert Mustacchi Dwarf_Half * /*padding*/, 5171*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*table_value_count*/, 5172*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 5173*4d9fdb46SRobert Mustacchi 5174*4d9fdb46SRobert Mustacchi /* Valid index values n: 0 <= n < table_entry_count 5175*4d9fdb46SRobert Mustacchi for the active table */ 5176*4d9fdb46SRobert Mustacchi int dwarf_str_offsets_value_by_index(Dwarf_Str_Offsets_Table /*table_data*/, 5177*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*index_to_entry*/, 5178*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*entry_value*/, 5179*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 5180*4d9fdb46SRobert Mustacchi 5181*4d9fdb46SRobert Mustacchi /* After all str_offsets read this reports final 5182*4d9fdb46SRobert Mustacchi wasted-bytes count. */ 5183*4d9fdb46SRobert Mustacchi int dwarf_str_offsets_statistics(Dwarf_Str_Offsets_Table /*table_data*/, 5184*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*wasted_byte_count*/, 5185*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*table_count*/, 5186*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 5187*4d9fdb46SRobert Mustacchi 518807dc1947SRichard Lowe /* The harmless error list is a circular buffer of 518907dc1947SRichard Lowe errors we note but which do not stop us from processing 519007dc1947SRichard Lowe the object. Created so dwarfdump or other tools 519107dc1947SRichard Lowe can report such inconsequential errors without causing 519207dc1947SRichard Lowe anything to stop early. */ 519307dc1947SRichard Lowe #define DW_HARMLESS_ERROR_CIRCULAR_LIST_DEFAULT_SIZE 4 5194*4d9fdb46SRobert Mustacchi #define DW_HARMLESS_ERROR_MSG_STRING_SIZE 300 519507dc1947SRichard Lowe /* User code supplies size of array of pointers errmsg_ptrs_array 519607dc1947SRichard Lowe in count and the array of pointers (the pointers themselves 519707dc1947SRichard Lowe need not be initialized). 519807dc1947SRichard Lowe The pointers returned in the array of pointers 519907dc1947SRichard Lowe are invalidated by ANY call to libdwarf. 520007dc1947SRichard Lowe Use them before making another libdwarf call! 520107dc1947SRichard Lowe The array of string pointers passed in always has 520207dc1947SRichard Lowe a final null pointer, so if there are N pointers the 520307dc1947SRichard Lowe and M actual strings, then MIN(M,N-1) pointers are 520407dc1947SRichard Lowe set to point to error strings. The array of pointers 520507dc1947SRichard Lowe to strings always terminates with a NULL pointer. 520607dc1947SRichard Lowe If 'count' is passed in zero then errmsg_ptrs_array 520707dc1947SRichard Lowe is not touched. 520807dc1947SRichard Lowe 5209*4d9fdb46SRobert Mustacchi The function returns DW_DLV_NO_ENTRY if no harmless errors 521007dc1947SRichard Lowe were noted so far. Returns DW_DLV_OK if there are errors. 5211*4d9fdb46SRobert Mustacchi Never returns DW_DLV_ERROR. 521207dc1947SRichard Lowe 521307dc1947SRichard Lowe Each call empties the error list (discarding all current entries). 521407dc1947SRichard Lowe If newerr_count is non-NULL the count of harmless errors 521507dc1947SRichard Lowe since the last call is returned through the pointer 521607dc1947SRichard Lowe (some may have been discarded or not returned, it is a circular 521707dc1947SRichard Lowe list...). 521807dc1947SRichard Lowe If DW_DLV_NO_ENTRY is returned none of the arguments 521907dc1947SRichard Lowe here are touched or used. 522007dc1947SRichard Lowe */ 522107dc1947SRichard Lowe int dwarf_get_harmless_error_list(Dwarf_Debug /*dbg*/, 5222*4d9fdb46SRobert Mustacchi unsigned int /*count*/, 5223*4d9fdb46SRobert Mustacchi const char ** /*errmsg_ptrs_array*/, 5224*4d9fdb46SRobert Mustacchi unsigned int * /*newerr_count*/); 522507dc1947SRichard Lowe 5226*4d9fdb46SRobert Mustacchi /* Insertion is only for testing the harmless error code, it is not 522707dc1947SRichard Lowe necessarily useful otherwise. */ 522807dc1947SRichard Lowe void dwarf_insert_harmless_error(Dwarf_Debug /*dbg*/, 522907dc1947SRichard Lowe char * /*newerror*/); 523007dc1947SRichard Lowe 5231*4d9fdb46SRobert Mustacchi /* The size of the circular list of strings may be set 5232*4d9fdb46SRobert Mustacchi and reset as needed. If it is shortened excess 5233*4d9fdb46SRobert Mustacchi messages are simply dropped. It returns the previous 5234*4d9fdb46SRobert Mustacchi size. If zero passed in the size is unchanged 5235*4d9fdb46SRobert Mustacchi and it simply returns the current size */ 5236*4d9fdb46SRobert Mustacchi unsigned int dwarf_set_harmless_error_list_size(Dwarf_Debug /*dbg*/, 5237*4d9fdb46SRobert Mustacchi unsigned int /*maxcount*/); 5238*4d9fdb46SRobert Mustacchi /* The harmless error strings (if any) are freed when the dbg 5239*4d9fdb46SRobert Mustacchi is dwarf_finish()ed. */ 524007dc1947SRichard Lowe 524107dc1947SRichard Lowe /* When the val_in is known these dwarf_get_TAG_name (etc) 524207dc1947SRichard Lowe functions return the string corresponding to the val_in passed in 5243*4d9fdb46SRobert Mustacchi through the pointer s_out and the value returned is DW_DLV_OK. 5244*4d9fdb46SRobert Mustacchi The strings are in static storage 524507dc1947SRichard Lowe and must not be freed. 524607dc1947SRichard Lowe If DW_DLV_NO_ENTRY is returned the val_in is not known and 524707dc1947SRichard Lowe *s_out is not set. DW_DLV_ERROR is never returned.*/ 524807dc1947SRichard Lowe 5249*4d9fdb46SRobert Mustacchi /* The following copied from a generated dwarf_names.h */ 5250*4d9fdb46SRobert Mustacchi 5251*4d9fdb46SRobert Mustacchi /* BEGIN FILE */ 5252*4d9fdb46SRobert Mustacchi extern int dwarf_get_ACCESS_name(unsigned int /*val_in*/, const char ** /*s_out */); 5253*4d9fdb46SRobert Mustacchi extern int dwarf_get_ADDR_name(unsigned int /*val_in*/, const char ** /*s_out */); 5254*4d9fdb46SRobert Mustacchi extern int dwarf_get_ATCF_name(unsigned int /*val_in*/, const char ** /*s_out */); 525507dc1947SRichard Lowe extern int dwarf_get_ATE_name(unsigned int /*val_in*/, const char ** /*s_out */); 5256*4d9fdb46SRobert Mustacchi extern int dwarf_get_AT_name(unsigned int /*val_in*/, const char ** /*s_out */); 5257*4d9fdb46SRobert Mustacchi extern int dwarf_get_CC_name(unsigned int /*val_in*/, const char ** /*s_out */); 5258*4d9fdb46SRobert Mustacchi extern int dwarf_get_CFA_name(unsigned int /*val_in*/, const char ** /*s_out */); 5259*4d9fdb46SRobert Mustacchi extern int dwarf_get_children_name(unsigned int /*val_in*/, const char ** /*s_out */); 5260*4d9fdb46SRobert Mustacchi extern int dwarf_get_CHILDREN_name(unsigned int /*val_in*/, const char ** /*s_out */); 5261*4d9fdb46SRobert Mustacchi extern int dwarf_get_DEFAULTED_name(unsigned int /*val_in*/, const char ** /*s_out */); 5262*4d9fdb46SRobert Mustacchi extern int dwarf_get_DSC_name(unsigned int /*val_in*/, const char ** /*s_out */); 526307dc1947SRichard Lowe extern int dwarf_get_DS_name(unsigned int /*val_in*/, const char ** /*s_out */); 5264*4d9fdb46SRobert Mustacchi extern int dwarf_get_EH_name(unsigned int /*val_in*/, const char ** /*s_out */); 526507dc1947SRichard Lowe extern int dwarf_get_END_name(unsigned int /*val_in*/, const char ** /*s_out */); 5266*4d9fdb46SRobert Mustacchi extern int dwarf_get_FORM_name(unsigned int /*val_in*/, const char ** /*s_out */); 5267*4d9fdb46SRobert Mustacchi extern int dwarf_get_FRAME_name(unsigned int /*val_in*/, const char ** /*s_out */); 526807dc1947SRichard Lowe extern int dwarf_get_ID_name(unsigned int /*val_in*/, const char ** /*s_out */); 5269*4d9fdb46SRobert Mustacchi extern int dwarf_get_IDX_name(unsigned int /*val_in*/, const char ** /*s_out */); 527007dc1947SRichard Lowe extern int dwarf_get_INL_name(unsigned int /*val_in*/, const char ** /*s_out */); 5271*4d9fdb46SRobert Mustacchi extern int dwarf_get_ISA_name(unsigned int /*val_in*/, const char ** /*s_out */); 5272*4d9fdb46SRobert Mustacchi extern int dwarf_get_LANG_name(unsigned int /*val_in*/, const char ** /*s_out */); 5273*4d9fdb46SRobert Mustacchi extern int dwarf_get_LLE_name(unsigned int /*val_in*/, const char ** /*s_out */); 5274*4d9fdb46SRobert Mustacchi /* dwarf_get_LLEX_name is likely just temporary. Not standard. */ 5275*4d9fdb46SRobert Mustacchi extern int dwarf_get_LLEX_name(unsigned int /*val_in*/, const char ** /*s_out */); 5276*4d9fdb46SRobert Mustacchi extern int dwarf_get_LNCT_name(unsigned int /*val_in*/, const char ** /*s_out */); 527707dc1947SRichard Lowe extern int dwarf_get_LNE_name(unsigned int /*val_in*/, const char ** /*s_out */); 5278*4d9fdb46SRobert Mustacchi extern int dwarf_get_LNS_name(unsigned int /*val_in*/, const char ** /*s_out */); 527907dc1947SRichard Lowe extern int dwarf_get_MACINFO_name(unsigned int /*val_in*/, const char ** /*s_out */); 5280*4d9fdb46SRobert Mustacchi extern int dwarf_get_MACRO_name(unsigned int /*val_in*/, const char ** /*s_out */); 5281*4d9fdb46SRobert Mustacchi extern int dwarf_get_OP_name(unsigned int /*val_in*/, const char ** /*s_out */); 5282*4d9fdb46SRobert Mustacchi extern int dwarf_get_ORD_name(unsigned int /*val_in*/, const char ** /*s_out */); 5283*4d9fdb46SRobert Mustacchi extern int dwarf_get_RLE_name(unsigned int /*val_in*/, const char ** /*s_out */); 5284*4d9fdb46SRobert Mustacchi extern int dwarf_get_SECT_name(unsigned int /*val_in*/, const char ** /*s_out */); 5285*4d9fdb46SRobert Mustacchi extern int dwarf_get_TAG_name(unsigned int /*val_in*/, const char ** /*s_out */); 5286*4d9fdb46SRobert Mustacchi extern int dwarf_get_UT_name(unsigned int /*val_in*/, const char ** /*s_out */); 5287*4d9fdb46SRobert Mustacchi extern int dwarf_get_VIRTUALITY_name(unsigned int /*val_in*/, const char ** /*s_out */); 5288*4d9fdb46SRobert Mustacchi extern int dwarf_get_VIS_name(unsigned int /*val_in*/, const char ** /*s_out */); 5289*4d9fdb46SRobert Mustacchi /* END FILE */ 5290*4d9fdb46SRobert Mustacchi 5291*4d9fdb46SRobert Mustacchi /* Convert local offset into global offset */ 5292*4d9fdb46SRobert Mustacchi int dwarf_convert_to_global_offset(Dwarf_Attribute /*attr*/, 5293*4d9fdb46SRobert Mustacchi Dwarf_Off /*offset*/, 5294*4d9fdb46SRobert Mustacchi Dwarf_Off* /*ret_offset*/, 5295*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 5296*4d9fdb46SRobert Mustacchi 5297*4d9fdb46SRobert Mustacchi /* Get both offsets (local and global) */ 5298*4d9fdb46SRobert Mustacchi int dwarf_die_offsets(Dwarf_Die /*die*/, 5299*4d9fdb46SRobert Mustacchi Dwarf_Off* /*global_offset*/, 5300*4d9fdb46SRobert Mustacchi Dwarf_Off* /*local_offset*/, 5301*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 5302*4d9fdb46SRobert Mustacchi 5303*4d9fdb46SRobert Mustacchi /* Giving a section name, get its size and address */ 5304*4d9fdb46SRobert Mustacchi int dwarf_get_section_info_by_name(Dwarf_Debug /*dbg*/, 5305*4d9fdb46SRobert Mustacchi const char * /*section_name*/, 5306*4d9fdb46SRobert Mustacchi Dwarf_Addr* /*section_addr*/, 5307*4d9fdb46SRobert Mustacchi Dwarf_Unsigned* /*section_size*/, 5308*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 5309*4d9fdb46SRobert Mustacchi 5310*4d9fdb46SRobert Mustacchi /* Giving a section index, get its size and address */ 5311*4d9fdb46SRobert Mustacchi int dwarf_get_section_info_by_index(Dwarf_Debug /*dbg*/, 5312*4d9fdb46SRobert Mustacchi int /*section_index*/, 5313*4d9fdb46SRobert Mustacchi const char ** /*section_name*/, 5314*4d9fdb46SRobert Mustacchi Dwarf_Addr* /*section_addr*/, 5315*4d9fdb46SRobert Mustacchi Dwarf_Unsigned* /*section_size*/, 5316*4d9fdb46SRobert Mustacchi Dwarf_Error* /*error*/); 5317*4d9fdb46SRobert Mustacchi 5318*4d9fdb46SRobert Mustacchi /* Get section count, of object file sections. */ 5319*4d9fdb46SRobert Mustacchi int dwarf_get_section_count(Dwarf_Debug /*dbg*/); 5320*4d9fdb46SRobert Mustacchi 5321*4d9fdb46SRobert Mustacchi /* Get the version and offset size of a CU context. 5322*4d9fdb46SRobert Mustacchi This is useful as a precursor to 5323*4d9fdb46SRobert Mustacchi calling dwarf_get_form_class() at times. */ 5324*4d9fdb46SRobert Mustacchi int dwarf_get_version_of_die(Dwarf_Die /*die*/, 5325*4d9fdb46SRobert Mustacchi Dwarf_Half * /*version*/, 5326*4d9fdb46SRobert Mustacchi Dwarf_Half * /*offset_size*/); 5327*4d9fdb46SRobert Mustacchi 5328*4d9fdb46SRobert Mustacchi int dwarf_discr_list(Dwarf_Debug /*dbg*/, 5329*4d9fdb46SRobert Mustacchi Dwarf_Small * /*blockpointer*/, 5330*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*blocklen*/, 5331*4d9fdb46SRobert Mustacchi Dwarf_Dsc_Head * /*dsc_head_out*/, 5332*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*dsc_array_length_out*/, 5333*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 5334*4d9fdb46SRobert Mustacchi 5335*4d9fdb46SRobert Mustacchi /* NEW September 2016. Allows easy access to DW_AT_discr_list 5336*4d9fdb46SRobert Mustacchi entry. Callers must know which is the appropriate 5337*4d9fdb46SRobert Mustacchi one of the following two interfaces, though both 5338*4d9fdb46SRobert Mustacchi will work. */ 5339*4d9fdb46SRobert Mustacchi int dwarf_discr_entry_u(Dwarf_Dsc_Head /* dsc */, 5340*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*entrynum*/, 5341*4d9fdb46SRobert Mustacchi Dwarf_Half * /*out_type*/, 5342*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*out_discr_low*/, 5343*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*out_discr_high*/, 5344*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 5345*4d9fdb46SRobert Mustacchi 5346*4d9fdb46SRobert Mustacchi /* NEW September 2016. Allows easy access to DW_AT_discr_list 5347*4d9fdb46SRobert Mustacchi entry. */ 5348*4d9fdb46SRobert Mustacchi int dwarf_discr_entry_s(Dwarf_Dsc_Head /* dsc */, 5349*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*entrynum*/, 5350*4d9fdb46SRobert Mustacchi Dwarf_Half * /*out_type*/, 5351*4d9fdb46SRobert Mustacchi Dwarf_Signed * /*out_discr_low*/, 5352*4d9fdb46SRobert Mustacchi Dwarf_Signed * /*out_discr_high*/, 5353*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 5354*4d9fdb46SRobert Mustacchi 5355*4d9fdb46SRobert Mustacchi /* New May 2017. So users can find out what groups (dwo or COMDAT) 5356*4d9fdb46SRobert Mustacchi are in the object and how much to allocate so one can get the 5357*4d9fdb46SRobert Mustacchi group-section map data. */ 5358*4d9fdb46SRobert Mustacchi int dwarf_sec_group_sizes(Dwarf_Debug /*dbg*/, 5359*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*section_count_out*/, 5360*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*group_count_out*/, 5361*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*selected_group_out*/, 5362*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*map_entry_count_out*/, 5363*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 5364*4d9fdb46SRobert Mustacchi 5365*4d9fdb46SRobert Mustacchi /* New May 2017. Reveals the map between group numbers and section numbers. 5366*4d9fdb46SRobert Mustacchi Caller must allocate the arrays with space for 'map_entry_count' 5367*4d9fdb46SRobert Mustacchi values and this function fills in the array entries. 5368*4d9fdb46SRobert Mustacchi Output ordered by group number and section number. 5369*4d9fdb46SRobert Mustacchi */ 5370*4d9fdb46SRobert Mustacchi int dwarf_sec_group_map(Dwarf_Debug /*dbg*/, 5371*4d9fdb46SRobert Mustacchi Dwarf_Unsigned /*map_entry_count*/, 5372*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*group_numbers_array*/, 5373*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*sec_numbers_array*/, 5374*4d9fdb46SRobert Mustacchi const char ** /*sec_names_array*/, 5375*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 5376*4d9fdb46SRobert Mustacchi 5377*4d9fdb46SRobert Mustacchi /* dwarf_get_endian_copy_function new. December 2019. */ 5378*4d9fdb46SRobert Mustacchi void (*dwarf_get_endian_copy_function(Dwarf_Debug /*dbg*/))(void *, const void * /*src*/, unsigned long /*srclen*/); 5379*4d9fdb46SRobert Mustacchi 5380*4d9fdb46SRobert Mustacchi /* These make the LEB encoding routines visible to libdwarf 5381*4d9fdb46SRobert Mustacchi callers. Added November, 2012. */ 5382*4d9fdb46SRobert Mustacchi int dwarf_encode_leb128(Dwarf_Unsigned /*val*/, 5383*4d9fdb46SRobert Mustacchi int * /*nbytes*/, 5384*4d9fdb46SRobert Mustacchi char * /*space*/, 5385*4d9fdb46SRobert Mustacchi int /*splen*/); 5386*4d9fdb46SRobert Mustacchi int dwarf_encode_signed_leb128(Dwarf_Signed /*val*/, 5387*4d9fdb46SRobert Mustacchi int * /*nbytes*/, 5388*4d9fdb46SRobert Mustacchi char * /*space*/, 5389*4d9fdb46SRobert Mustacchi int /*splen*/); 5390*4d9fdb46SRobert Mustacchi 5391*4d9fdb46SRobert Mustacchi /* Record some application command line options in libdwarf. 5392*4d9fdb46SRobert Mustacchi This is not arc/argv processing, just precooked setting 5393*4d9fdb46SRobert Mustacchi of a flag in libdwarf based on something the application 5394*4d9fdb46SRobert Mustacchi wants. check_verbose_mode of TRUE means do more checking 5395*4d9fdb46SRobert Mustacchi and sometimes print errors (from libdwarf). 5396*4d9fdb46SRobert Mustacchi Not restricted to a single Dwarf_Debug, it applies 5397*4d9fdb46SRobert Mustacchi to the libdwarf the executable is using. 5398*4d9fdb46SRobert Mustacchi */ 5399*4d9fdb46SRobert Mustacchi typedef struct { 5400*4d9fdb46SRobert Mustacchi Dwarf_Bool check_verbose_mode; 5401*4d9fdb46SRobert Mustacchi } Dwarf_Cmdline_Options; 5402*4d9fdb46SRobert Mustacchi extern Dwarf_Cmdline_Options dwarf_cmdline_options; 5403*4d9fdb46SRobert Mustacchi 5404*4d9fdb46SRobert Mustacchi /* Set libdwarf to reflect some application command line options. */ 5405*4d9fdb46SRobert Mustacchi void dwarf_record_cmdline_options(Dwarf_Cmdline_Options /*options*/); 5406*4d9fdb46SRobert Mustacchi 5407*4d9fdb46SRobert Mustacchi int dwarf_pro_get_string_stats(Dwarf_P_Debug /*dbg*/, 5408*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*str_count*/, 5409*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*str_total_length*/, 5410*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*count_debug_str*/, 5411*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*len_debug_str*/, 5412*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*reused_count*/, 5413*4d9fdb46SRobert Mustacchi Dwarf_Unsigned * /*reused_len*/, 5414*4d9fdb46SRobert Mustacchi Dwarf_Error * /*error*/); 5415*4d9fdb46SRobert Mustacchi 5416*4d9fdb46SRobert Mustacchi #ifndef DW_FTYPE_UNKNOWN 5417*4d9fdb46SRobert Mustacchi #define DW_FTYPE_UNKNOWN 0 5418*4d9fdb46SRobert Mustacchi #define DW_FTYPE_ELF 1 /* Unix/Linux/etc */ 5419*4d9fdb46SRobert Mustacchi #define DW_FTYPE_MACH_O 2 /* MacOS. */ 5420*4d9fdb46SRobert Mustacchi #define DW_FTYPE_PE 3 /* Windows */ 5421*4d9fdb46SRobert Mustacchi #define DW_FTYPE_ARCHIVE 4 /* unix archive */ 5422*4d9fdb46SRobert Mustacchi #define DW_FTYPE_CUSTOM_ELF 5 /* Custom ELF format. Ignore this. */ 5423*4d9fdb46SRobert Mustacchi #endif /* DW_FTYPE_UNKNOWN */ 5424*4d9fdb46SRobert Mustacchi 5425*4d9fdb46SRobert Mustacchi #ifndef DW_ENDIAN_UNKNOWN 5426*4d9fdb46SRobert Mustacchi #define DW_ENDIAN_UNKNOWN 0 5427*4d9fdb46SRobert Mustacchi #define DW_ENDIAN_BIG 1 5428*4d9fdb46SRobert Mustacchi #define DW_ENDIAN_LITTLE 2 5429*4d9fdb46SRobert Mustacchi #endif /* DW_ENDIAN_UNKNOWN */ 5430*4d9fdb46SRobert Mustacchi 5431*4d9fdb46SRobert Mustacchi /* Defined March 7 2020. Allows a caller to 5432*4d9fdb46SRobert Mustacchi avoid most tracking by the de_alloc_tree hash 5433*4d9fdb46SRobert Mustacchi table if called with v of zero. 5434*4d9fdb46SRobert Mustacchi Returns the value the flag was before this call. */ 5435*4d9fdb46SRobert Mustacchi int dwarf_set_de_alloc_flag(int v); 5436*4d9fdb46SRobert Mustacchi 5437*4d9fdb46SRobert Mustacchi int dwarf_object_detector_path(const char *path, 5438*4d9fdb46SRobert Mustacchi char *outpath, 5439*4d9fdb46SRobert Mustacchi unsigned long, 5440*4d9fdb46SRobert Mustacchi unsigned int * ftype, 5441*4d9fdb46SRobert Mustacchi unsigned int * endian, 5442*4d9fdb46SRobert Mustacchi unsigned int * offsetsize, 5443*4d9fdb46SRobert Mustacchi Dwarf_Unsigned *filesize, 5444*4d9fdb46SRobert Mustacchi int * errcode); 5445*4d9fdb46SRobert Mustacchi 5446*4d9fdb46SRobert Mustacchi int dwarf_object_detector_fd(int fd, 5447*4d9fdb46SRobert Mustacchi unsigned int *ftype, 5448*4d9fdb46SRobert Mustacchi unsigned int *endian, 5449*4d9fdb46SRobert Mustacchi unsigned int *offsetsize, 5450*4d9fdb46SRobert Mustacchi Dwarf_Unsigned *filesize, 5451*4d9fdb46SRobert Mustacchi int * errcode); 54527c478bd9Sstevel@tonic-gate 54537c478bd9Sstevel@tonic-gate #ifdef __cplusplus 54547c478bd9Sstevel@tonic-gate } 54557c478bd9Sstevel@tonic-gate #endif 54567c478bd9Sstevel@tonic-gate #endif /* _LIBDWARF_H */ 5457