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