1bc1f688bSRobert Mustacchi /*
2bc1f688bSRobert Mustacchi 
3bc1f688bSRobert Mustacchi   Copyright (C) 2000-2010 Silicon Graphics, Inc.  All Rights Reserved.
4bc1f688bSRobert Mustacchi   Portions Copyright 2007-2010 Sun Microsystems, Inc. All rights reserved.
5*4d9fdb46SRobert Mustacchi   Portions Copyright 2008-2018 David Anderson. All rights reserved.
6bc1f688bSRobert Mustacchi   Portions Copyright 2008-2010 Arxan Technologies, Inc. All rights reserved.
7*4d9fdb46SRobert Mustacchi   Portions Copyright 2010-2012 SN Systems Ltd. All rights reserved.
8bc1f688bSRobert 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.
13bc1f688bSRobert 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.
18bc1f688bSRobert 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.
26bc1f688bSRobert 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.
31bc1f688bSRobert Mustacchi 
32bc1f688bSRobert Mustacchi */
33bc1f688bSRobert Mustacchi 
34bc1f688bSRobert Mustacchi 
35bc1f688bSRobert Mustacchi #ifndef _LIBDWARF_H
36bc1f688bSRobert Mustacchi #define _LIBDWARF_H
37bc1f688bSRobert Mustacchi #ifdef __cplusplus
38bc1f688bSRobert Mustacchi extern "C" {
39bc1f688bSRobert Mustacchi #endif
40bc1f688bSRobert Mustacchi /*
41bc1f688bSRobert Mustacchi     libdwarf.h
42bc1f688bSRobert Mustacchi     $Revision: #9 $ $Date: 2008/01/17 $
43bc1f688bSRobert Mustacchi 
44bc1f688bSRobert Mustacchi     For libdwarf producers and consumers
45bc1f688bSRobert Mustacchi 
46bc1f688bSRobert Mustacchi     The interface is defined as having 8-byte signed and unsigned
47bc1f688bSRobert Mustacchi     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
49bc1f688bSRobert Mustacchi     the host machine (not the target!).
50bc1f688bSRobert Mustacchi 
51bc1f688bSRobert Mustacchi     This contains declarations for types and all producer
52bc1f688bSRobert Mustacchi     and consumer functions.
53bc1f688bSRobert Mustacchi 
54bc1f688bSRobert Mustacchi     Function declarations are written on a single line each here
55bc1f688bSRobert Mustacchi     so one can use grep  to each declaration in its entirety.
56bc1f688bSRobert Mustacchi     The declarations are a little harder to read this way, but...
57bc1f688bSRobert Mustacchi 
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 
64bc1f688bSRobert Mustacchi */
65bc1f688bSRobert Mustacchi 
66bc1f688bSRobert Mustacchi struct Elf;
67bc1f688bSRobert Mustacchi typedef struct Elf* dwarf_elf_handle;
68bc1f688bSRobert Mustacchi 
69bc1f688bSRobert Mustacchi /* 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.
73bc1f688bSRobert Mustacchi */
74*4d9fdb46SRobert Mustacchi /*#define DW_PR_XZEROS "" */
75*4d9fdb46SRobert Mustacchi #define DW_PR_XZEROS "08"
76bc1f688bSRobert 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;
81bc1f688bSRobert Mustacchi typedef int                Dwarf_Bool;   /* boolean type */
82bc1f688bSRobert Mustacchi typedef unsigned short     Dwarf_Half;   /* 2 byte unsigned value */
83bc1f688bSRobert 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)
88bc1f688bSRobert Mustacchi #define DW_PR_DUx "I64x"
89bc1f688bSRobert Mustacchi #define DW_PR_DSx "I64x"
90bc1f688bSRobert Mustacchi #define DW_PR_DUu "I64u"
91bc1f688bSRobert 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 */
98bc1f688bSRobert Mustacchi 
99bc1f688bSRobert Mustacchi typedef void*        Dwarf_Ptr;          /* host machine pointer */
100bc1f688bSRobert Mustacchi 
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
114bc1f688bSRobert Mustacchi    is 8 bytes of a signature one would use to find
115bc1f688bSRobert Mustacchi    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.
120bc1f688bSRobert Mustacchi */
121*4d9fdb46SRobert Mustacchi struct Dwarf_Sig8_s  {
122bc1f688bSRobert Mustacchi     char signature[8];
123*4d9fdb46SRobert Mustacchi };
124*4d9fdb46SRobert Mustacchi typedef struct Dwarf_Sig8_s Dwarf_Sig8;
125bc1f688bSRobert Mustacchi 
126bc1f688bSRobert Mustacchi /* 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<>.
129bc1f688bSRobert Mustacchi */
130bc1f688bSRobert Mustacchi typedef struct {
131*4d9fdb46SRobert Mustacchi     Dwarf_Unsigned  bl_len;         /* length of block bl_data points at */
132bc1f688bSRobert Mustacchi     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;
139bc1f688bSRobert Mustacchi } Dwarf_Block;
140bc1f688bSRobert Mustacchi 
141bc1f688bSRobert Mustacchi 
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. */
169bc1f688bSRobert Mustacchi typedef struct {
170bc1f688bSRobert Mustacchi     Dwarf_Small     lr_atom;        /* location operation */
171bc1f688bSRobert Mustacchi     Dwarf_Unsigned  lr_number;      /* operand */
172*4d9fdb46SRobert Mustacchi     Dwarf_Unsigned  lr_number2;     /* for OP_BREGx  and DW_OP_GNU_const_type*/
173bc1f688bSRobert Mustacchi     Dwarf_Unsigned  lr_offset;      /* offset in locexpr for OP_BRA etc */
174bc1f688bSRobert Mustacchi } Dwarf_Loc;
175bc1f688bSRobert Mustacchi 
176bc1f688bSRobert Mustacchi 
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.
194bc1f688bSRobert Mustacchi */
195bc1f688bSRobert Mustacchi 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 
204bc1f688bSRobert Mustacchi     Dwarf_Half      ld_cents;       /* count of location records */
205bc1f688bSRobert Mustacchi     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) */
208bc1f688bSRobert Mustacchi     Dwarf_Small     ld_from_loclist;
209bc1f688bSRobert Mustacchi 
210bc1f688bSRobert Mustacchi     Dwarf_Unsigned  ld_section_offset; /* Section (not CU) offset
211bc1f688bSRobert Mustacchi         where loc-expr begins*/
212bc1f688bSRobert Mustacchi } Dwarf_Locdesc;
213bc1f688bSRobert Mustacchi 
214*4d9fdb46SRobert Mustacchi /*  First appears in DWARF3, and only ranges entries exist.
215bc1f688bSRobert Mustacchi     The dwr_addr1/addr2 data is either an offset (DW_RANGES_ENTRY)
216bc1f688bSRobert Mustacchi     or an address (dwr_addr2 in DW_RANGES_ADDRESS_SELECTION) or
217bc1f688bSRobert 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.
221bc1f688bSRobert Mustacchi */
222bc1f688bSRobert Mustacchi enum Dwarf_Ranges_Entry_Type { DW_RANGES_ENTRY,
223bc1f688bSRobert Mustacchi     DW_RANGES_ADDRESS_SELECTION,
224*4d9fdb46SRobert Mustacchi     DW_RANGES_END
225*4d9fdb46SRobert Mustacchi };
226bc1f688bSRobert Mustacchi typedef struct {
227bc1f688bSRobert Mustacchi     Dwarf_Addr dwr_addr1;
228bc1f688bSRobert Mustacchi     Dwarf_Addr dwr_addr2;
229bc1f688bSRobert Mustacchi     enum Dwarf_Ranges_Entry_Type  dwr_type;
230bc1f688bSRobert Mustacchi } Dwarf_Ranges;
231bc1f688bSRobert Mustacchi 
232bc1f688bSRobert Mustacchi /* Frame description instructions expanded.
233bc1f688bSRobert Mustacchi */
234bc1f688bSRobert Mustacchi typedef struct {
235bc1f688bSRobert Mustacchi     Dwarf_Small     fp_base_op;
236bc1f688bSRobert Mustacchi     Dwarf_Small     fp_extended_op;
237bc1f688bSRobert Mustacchi     Dwarf_Half      fp_register;
238bc1f688bSRobert Mustacchi 
239bc1f688bSRobert Mustacchi     /*  Value may be signed, depends on op.
240bc1f688bSRobert Mustacchi         Any applicable data_alignment_factor has
241bc1f688bSRobert Mustacchi         not been applied, this is the  raw offset. */
242bc1f688bSRobert Mustacchi     Dwarf_Unsigned  fp_offset;
243bc1f688bSRobert Mustacchi     Dwarf_Off       fp_instr_offset;
244bc1f688bSRobert Mustacchi } Dwarf_Frame_Op; /* DWARF2 */
245bc1f688bSRobert Mustacchi 
246bc1f688bSRobert Mustacchi /*  ***IMPORTANT NOTE, TARGET DEPENDENCY ****
247bc1f688bSRobert Mustacchi     DW_REG_TABLE_SIZE must be at least as large as
248bc1f688bSRobert Mustacchi     the number of registers
249bc1f688bSRobert Mustacchi     (DW_FRAME_LAST_REG_NUM) as defined in dwarf.h
250bc1f688bSRobert Mustacchi     Preferably identical to DW_FRAME_LAST_REG_NUM.
251bc1f688bSRobert Mustacchi     Ensure [0-DW_REG_TABLE_SIZE] does not overlap
252bc1f688bSRobert Mustacchi     DW_FRAME_UNDEFINED_VAL or DW_FRAME_SAME_VAL.
253bc1f688bSRobert Mustacchi     Also ensure DW_FRAME_REG_INITIAL_VALUE is set to what
254bc1f688bSRobert Mustacchi     is appropriate to your cpu.
255bc1f688bSRobert Mustacchi     For various CPUs  DW_FRAME_UNDEFINED_VAL is correct
256bc1f688bSRobert Mustacchi     as the value for DW_FRAME_REG_INITIAL_VALUE.
257bc1f688bSRobert Mustacchi 
258bc1f688bSRobert Mustacchi     For consumer apps, this can be set dynamically: see
259*4d9fdb46SRobert Mustacchi     dwarf_set_frame_rule_table_size(); */
260bc1f688bSRobert Mustacchi #ifndef DW_REG_TABLE_SIZE
261bc1f688bSRobert Mustacchi #define DW_REG_TABLE_SIZE  66
262bc1f688bSRobert Mustacchi #endif
263bc1f688bSRobert Mustacchi 
264bc1f688bSRobert Mustacchi /* For MIPS, DW_FRAME_SAME_VAL is the correct default value
265bc1f688bSRobert Mustacchi    for a frame register value. For other CPUS another value
266bc1f688bSRobert Mustacchi    may be better, such as DW_FRAME_UNDEFINED_VAL.
267bc1f688bSRobert Mustacchi    See dwarf_set_frame_rule_table_size
268bc1f688bSRobert Mustacchi */
269bc1f688bSRobert Mustacchi #ifndef DW_FRAME_REG_INITIAL_VALUE
270bc1f688bSRobert Mustacchi #define DW_FRAME_REG_INITIAL_VALUE DW_FRAME_SAME_VAL
271bc1f688bSRobert Mustacchi #endif
272bc1f688bSRobert Mustacchi 
273bc1f688bSRobert Mustacchi /* Taken as meaning 'undefined value', this is not
274bc1f688bSRobert Mustacchi    a column or register number.
275bc1f688bSRobert Mustacchi    Only present at libdwarf runtime in the consumer
276bc1f688bSRobert Mustacchi    interfaces. Never on disk.
277bc1f688bSRobert Mustacchi    DW_FRAME_* Values present on disk are in dwarf.h
278bc1f688bSRobert Mustacchi    Ensure this is > DW_REG_TABLE_SIZE (the reg table
279bc1f688bSRobert Mustacchi    size is changeable at runtime with the *reg3() interfaces,
280bc1f688bSRobert Mustacchi    and this value must be greater than the reg table size).
281bc1f688bSRobert Mustacchi */
282bc1f688bSRobert Mustacchi #define DW_FRAME_UNDEFINED_VAL          1034
283bc1f688bSRobert Mustacchi 
284bc1f688bSRobert Mustacchi /* Taken as meaning 'same value' as caller had, not a column
285bc1f688bSRobert Mustacchi    or register number.
286bc1f688bSRobert Mustacchi    Only present at libdwarf runtime in the consumer
287bc1f688bSRobert Mustacchi    interfaces. Never on disk.
288bc1f688bSRobert Mustacchi    DW_FRAME_* Values present on disk are in dwarf.h
289bc1f688bSRobert Mustacchi    Ensure this is > DW_REG_TABLE_SIZE (the reg table
290bc1f688bSRobert Mustacchi    size is changeable at runtime with the *reg3() interfaces,
291bc1f688bSRobert Mustacchi    and this value must be greater than the reg table size).
292bc1f688bSRobert Mustacchi */
293bc1f688bSRobert Mustacchi #define DW_FRAME_SAME_VAL               1035
294bc1f688bSRobert Mustacchi 
295bc1f688bSRobert Mustacchi /* For DWARF3 consumer interfaces, make the CFA a column with no
296bc1f688bSRobert Mustacchi    real table number.  This is what should have been done
297bc1f688bSRobert Mustacchi    for the DWARF2 interfaces.  This actually works for
298bc1f688bSRobert Mustacchi    both DWARF2 and DWARF3, but see the libdwarf documentation
299bc1f688bSRobert Mustacchi    on Dwarf_Regtable3 and  dwarf_get_fde_info_for_reg3()
300bc1f688bSRobert Mustacchi    and  dwarf_get_fde_info_for_all_regs3()
301bc1f688bSRobert Mustacchi    Do NOT use this with the older dwarf_get_fde_info_for_reg()
302bc1f688bSRobert Mustacchi    or dwarf_get_fde_info_for_all_regs() consumer interfaces.
303bc1f688bSRobert Mustacchi    Must be higher than any register count for *any* ABI
304bc1f688bSRobert Mustacchi    (ensures maximum applicability with minimum effort).
305bc1f688bSRobert Mustacchi    Ensure this is > DW_REG_TABLE_SIZE (the reg table
306bc1f688bSRobert Mustacchi    size is changeable at runtime with the *reg3() interfaces,
307bc1f688bSRobert Mustacchi    and this value must be greater than the reg table size).
308bc1f688bSRobert Mustacchi    Only present at libdwarf runtime in the consumer
309bc1f688bSRobert Mustacchi    interfaces. Never on disk.
310bc1f688bSRobert Mustacchi */
311bc1f688bSRobert Mustacchi #define DW_FRAME_CFA_COL3               1436
312bc1f688bSRobert Mustacchi 
313bc1f688bSRobert Mustacchi /* The following are all needed to evaluate DWARF3 register rules.
314bc1f688bSRobert Mustacchi */
315bc1f688bSRobert Mustacchi #define DW_EXPR_OFFSET 0  /* DWARF2 only sees this. */
316bc1f688bSRobert Mustacchi #define DW_EXPR_VAL_OFFSET 1
317bc1f688bSRobert Mustacchi #define DW_EXPR_EXPRESSION 2
318bc1f688bSRobert Mustacchi #define DW_EXPR_VAL_EXPRESSION 3
319bc1f688bSRobert Mustacchi 
320bc1f688bSRobert Mustacchi typedef struct Dwarf_Regtable_Entry_s {
321bc1f688bSRobert Mustacchi     /*  For each index i (naming a hardware register with dwarf number
322bc1f688bSRobert Mustacchi         i) the following is true and defines the value of that register:
323bc1f688bSRobert Mustacchi 
324bc1f688bSRobert Mustacchi         If dw_regnum is Register DW_FRAME_UNDEFINED_VAL
325bc1f688bSRobert Mustacchi             it is not DWARF register number but
326bc1f688bSRobert Mustacchi             a place holder indicating the register has no defined value.
327bc1f688bSRobert Mustacchi         If dw_regnum is Register DW_FRAME_SAME_VAL
328bc1f688bSRobert Mustacchi             it  is not DWARF register number but
329bc1f688bSRobert Mustacchi             a place holder indicating the register has the same
330bc1f688bSRobert Mustacchi             value in the previous frame.
331*4d9fdb46SRobert Mustacchi 
332bc1f688bSRobert Mustacchi             DW_FRAME_UNDEFINED_VAL, DW_FRAME_SAME_VAL are
333bc1f688bSRobert Mustacchi             only present at libdwarf runtime. Never on disk.
334bc1f688bSRobert Mustacchi             DW_FRAME_* Values present on disk are in dwarf.h
335bc1f688bSRobert Mustacchi 
336bc1f688bSRobert Mustacchi         Otherwise: the register number is a DWARF register number
337bc1f688bSRobert Mustacchi             (see ABI documents for how this translates to hardware/
338bc1f688bSRobert Mustacchi             software register numbers in the machine hardware)
339bc1f688bSRobert Mustacchi             and the following applies:
340bc1f688bSRobert Mustacchi 
341bc1f688bSRobert Mustacchi             if dw_value_type == DW_EXPR_OFFSET (the only case for dwarf2):
342bc1f688bSRobert Mustacchi                 If dw_offset_relevant is non-zero, then
343bc1f688bSRobert Mustacchi                     the value is stored at at the address CFA+N where
344bc1f688bSRobert Mustacchi                     N is a signed offset.
345bc1f688bSRobert Mustacchi                     Rule: Offset(N)
346bc1f688bSRobert Mustacchi                 If dw_offset_relevant is zero, then the value of the register
347bc1f688bSRobert Mustacchi                     is the value of (DWARF) register number dw_regnum.
348bc1f688bSRobert Mustacchi                     Rule: register(F)
349bc1f688bSRobert Mustacchi             Other values of dw_value_type are an error.
350bc1f688bSRobert Mustacchi     */
351bc1f688bSRobert Mustacchi     Dwarf_Small         dw_offset_relevant;
352bc1f688bSRobert Mustacchi 
353bc1f688bSRobert Mustacchi     /* For DWARF2, always 0 */
354bc1f688bSRobert Mustacchi     Dwarf_Small         dw_value_type;
355bc1f688bSRobert Mustacchi 
356bc1f688bSRobert Mustacchi     Dwarf_Half          dw_regnum;
357bc1f688bSRobert Mustacchi 
358bc1f688bSRobert Mustacchi     /*  The data type here should  the larger of Dwarf_Addr
359bc1f688bSRobert Mustacchi         and Dwarf_Unsigned and Dwarf_Signed. */
360bc1f688bSRobert Mustacchi     Dwarf_Addr          dw_offset;
361bc1f688bSRobert Mustacchi } Dwarf_Regtable_Entry;
362bc1f688bSRobert Mustacchi 
363bc1f688bSRobert Mustacchi typedef struct Dwarf_Regtable_s {
364bc1f688bSRobert Mustacchi     struct Dwarf_Regtable_Entry_s rules[DW_REG_TABLE_SIZE];
365bc1f688bSRobert Mustacchi } Dwarf_Regtable;
366bc1f688bSRobert Mustacchi 
367bc1f688bSRobert Mustacchi /* opaque type. Functional interface shown later. */
368bc1f688bSRobert Mustacchi struct Dwarf_Reg_value3_s;
369bc1f688bSRobert Mustacchi typedef struct Dwarf_Reg_value3_s Dwarf_Reg_Value3;
370bc1f688bSRobert Mustacchi 
371bc1f688bSRobert Mustacchi typedef struct Dwarf_Regtable_Entry3_s {
372bc1f688bSRobert Mustacchi /*  For each index i (naming a hardware register with dwarf number
373bc1f688bSRobert Mustacchi     i) the following is true and defines the value of that register:
374bc1f688bSRobert Mustacchi 
375bc1f688bSRobert Mustacchi         If dw_regnum is Register DW_FRAME_UNDEFINED_VAL
376bc1f688bSRobert Mustacchi             it is not DWARF register number but
377bc1f688bSRobert Mustacchi             a place holder indicating the register has no defined value.
378bc1f688bSRobert Mustacchi         If dw_regnum is Register DW_FRAME_SAME_VAL
379bc1f688bSRobert Mustacchi             it  is not DWARF register number but
380bc1f688bSRobert Mustacchi             a place holder indicating the register has the same
381bc1f688bSRobert Mustacchi             value in the previous frame.
382*4d9fdb46SRobert Mustacchi 
383bc1f688bSRobert Mustacchi             DW_FRAME_UNDEFINED_VAL, DW_FRAME_SAME_VAL and
384bc1f688bSRobert Mustacchi             DW_FRAME_CFA_COL3 are only present at libdwarf runtime.
385bc1f688bSRobert Mustacchi             Never on disk.
386bc1f688bSRobert Mustacchi             DW_FRAME_* Values present on disk are in dwarf.h
387bc1f688bSRobert Mustacchi             Because DW_FRAME_SAME_VAL and DW_FRAME_UNDEFINED_VAL
388*4d9fdb46SRobert Mustacchi             and DW_FRAME_CFA_COL3 are definable at runtime
389bc1f688bSRobert Mustacchi             consider the names symbolic in this comment, not absolute.
390bc1f688bSRobert Mustacchi 
391bc1f688bSRobert Mustacchi         Otherwise: the register number is a DWARF register number
392bc1f688bSRobert Mustacchi             (see ABI documents for how this translates to hardware/
393bc1f688bSRobert Mustacchi             software register numbers in the machine hardware)
394bc1f688bSRobert Mustacchi             and the following applies:
395bc1f688bSRobert Mustacchi 
396bc1f688bSRobert Mustacchi         In a cfa-defining entry (rt3_cfa_rule) the regnum is the
397bc1f688bSRobert Mustacchi         CFA 'register number'. Which is some 'normal' register,
398bc1f688bSRobert Mustacchi         not DW_FRAME_CFA_COL3, nor DW_FRAME_SAME_VAL, nor
399bc1f688bSRobert Mustacchi         DW_FRAME_UNDEFINED_VAL.
400bc1f688bSRobert Mustacchi 
401bc1f688bSRobert Mustacchi         If dw_value_type == DW_EXPR_OFFSET (the only  possible case for
402bc1f688bSRobert Mustacchi         dwarf2):
403bc1f688bSRobert Mustacchi             If dw_offset_relevant is non-zero, then
404bc1f688bSRobert Mustacchi                 the value is stored at at the address
405bc1f688bSRobert Mustacchi                 CFA+N where N is a signed offset.
406bc1f688bSRobert Mustacchi                 dw_regnum is the cfa register rule which means
407bc1f688bSRobert Mustacchi                 one ignores dw_regnum and uses the CFA appropriately.
408bc1f688bSRobert Mustacchi                 So dw_offset_or_block_len is a signed value, really,
409bc1f688bSRobert Mustacchi                 and must be printed/evaluated as such.
410bc1f688bSRobert Mustacchi                 Rule: Offset(N)
411bc1f688bSRobert Mustacchi             If dw_offset_relevant is zero, then the value of the register
412bc1f688bSRobert Mustacchi                 is the value of (DWARF) register number dw_regnum.
413bc1f688bSRobert Mustacchi                 Rule: register(R)
414bc1f688bSRobert Mustacchi         If dw_value_type  == DW_EXPR_VAL_OFFSET
415bc1f688bSRobert Mustacchi             the  value of this register is CFA +N where N is a signed offset.
416bc1f688bSRobert Mustacchi             dw_regnum is the cfa register rule which means
417bc1f688bSRobert Mustacchi             one ignores dw_regnum and uses the CFA appropriately.
418bc1f688bSRobert Mustacchi             Rule: val_offset(N)
419bc1f688bSRobert Mustacchi         If dw_value_type  == DW_EXPR_EXPRESSION
420bc1f688bSRobert Mustacchi             The value of the register is the value at the address
421bc1f688bSRobert Mustacchi             computed by evaluating the DWARF expression E.
422bc1f688bSRobert Mustacchi             Rule: expression(E)
423bc1f688bSRobert Mustacchi             The expression E byte stream is pointed to by dw_block_ptr.
424bc1f688bSRobert Mustacchi             The expression length in bytes is given by
425bc1f688bSRobert Mustacchi             dw_offset_or_block_len.
426bc1f688bSRobert Mustacchi         If dw_value_type  == DW_EXPR_VAL_EXPRESSION
427bc1f688bSRobert Mustacchi             The value of the register is the value
428bc1f688bSRobert Mustacchi             computed by evaluating the DWARF expression E.
429bc1f688bSRobert Mustacchi             Rule: val_expression(E)
430bc1f688bSRobert Mustacchi             The expression E byte stream is pointed to by dw_block_ptr.
431bc1f688bSRobert Mustacchi             The expression length in bytes is given by
432bc1f688bSRobert Mustacchi             dw_offset_or_block_len.
433bc1f688bSRobert Mustacchi         Other values of dw_value_type are an error.
434bc1f688bSRobert Mustacchi */
435bc1f688bSRobert Mustacchi     Dwarf_Small         dw_offset_relevant;
436bc1f688bSRobert Mustacchi     Dwarf_Small         dw_value_type;
437bc1f688bSRobert Mustacchi     Dwarf_Half          dw_regnum;
438bc1f688bSRobert Mustacchi     Dwarf_Unsigned      dw_offset_or_block_len;
439bc1f688bSRobert Mustacchi     Dwarf_Ptr           dw_block_ptr;
440bc1f688bSRobert Mustacchi 
441bc1f688bSRobert Mustacchi }Dwarf_Regtable_Entry3;
442bc1f688bSRobert Mustacchi 
443bc1f688bSRobert Mustacchi /*  For the DWARF3 version, moved the DW_FRAME_CFA_COL
444bc1f688bSRobert Mustacchi     out of the array and into its own struct.
445bc1f688bSRobert Mustacchi     Having it part of the array is not very easy to work
446bc1f688bSRobert Mustacchi     with from a portability point of view: changing
447bc1f688bSRobert Mustacchi     the number for every architecture is a pain (if one fails
448bc1f688bSRobert Mustacchi     to set it correctly a register rule gets clobbered when
449bc1f688bSRobert Mustacchi     setting CFA).  With MIPS it just happened to be easy to use
450bc1f688bSRobert Mustacchi     DW_FRAME_CFA_COL (it was wrong conceptually but it was easy...).
451bc1f688bSRobert Mustacchi 
452bc1f688bSRobert Mustacchi     rt3_rules and rt3_reg_table_size must be filled in before
453bc1f688bSRobert Mustacchi     calling libdwarf.  Filled in with a pointer to an array
454bc1f688bSRobert Mustacchi     (pointer and array  set up by the calling application)
455bc1f688bSRobert Mustacchi     of rt3_reg_table_size Dwarf_Regtable_Entry3_s structs.
456bc1f688bSRobert Mustacchi     libdwarf does not allocate or deallocate space for the
457bc1f688bSRobert Mustacchi     rules, you must do so.   libdwarf will initialize the
458bc1f688bSRobert Mustacchi     contents rules array, you do not need to do so (though
459bc1f688bSRobert Mustacchi     if you choose to initialize the array somehow that is ok:
460bc1f688bSRobert Mustacchi     libdwarf will overwrite your initializations with its own).
461bc1f688bSRobert Mustacchi 
462bc1f688bSRobert Mustacchi */
463bc1f688bSRobert Mustacchi typedef struct Dwarf_Regtable3_s {
464bc1f688bSRobert Mustacchi     struct Dwarf_Regtable_Entry3_s   rt3_cfa_rule;
465bc1f688bSRobert Mustacchi 
466bc1f688bSRobert Mustacchi     Dwarf_Half                       rt3_reg_table_size;
467bc1f688bSRobert Mustacchi     struct Dwarf_Regtable_Entry3_s * rt3_rules;
468bc1f688bSRobert Mustacchi } Dwarf_Regtable3;
469bc1f688bSRobert Mustacchi 
470bc1f688bSRobert Mustacchi 
471bc1f688bSRobert Mustacchi /*  Use for DW_EPXR_STANDARD., DW_EXPR_VAL_OFFSET.
472bc1f688bSRobert Mustacchi     Returns DW_DLV_OK if the value is available.
473bc1f688bSRobert Mustacchi     If DW_DLV_OK returns the regnum and offset thru the pointers
474bc1f688bSRobert Mustacchi     (which the consumer must use appropriately).
475bc1f688bSRobert Mustacchi */
476bc1f688bSRobert Mustacchi int dwarf_frame_get_reg_register(struct Dwarf_Regtable_Entry3_s *reg_in,
477bc1f688bSRobert Mustacchi     Dwarf_Small *offset_relevant,
478bc1f688bSRobert Mustacchi     Dwarf_Half *regnum_out,
479bc1f688bSRobert Mustacchi     Dwarf_Signed *offset_out);
480bc1f688bSRobert Mustacchi 
481bc1f688bSRobert Mustacchi /*  Use for DW_EXPR_EXPRESSION, DW_EXPR_VAL_EXPRESSION.
482bc1f688bSRobert Mustacchi     Returns DW_DLV_OK if the value is available.
483bc1f688bSRobert Mustacchi     The caller must pass in the address of a valid
484bc1f688bSRobert Mustacchi     Dwarf_Block (the caller need not initialize it).
485bc1f688bSRobert Mustacchi */
486bc1f688bSRobert Mustacchi int dwarf_frame_get_reg_expression(struct Dwarf_Regtable_Entry3_s *reg_in,
487bc1f688bSRobert Mustacchi     Dwarf_Block *block_out);
488bc1f688bSRobert Mustacchi 
489bc1f688bSRobert Mustacchi 
490bc1f688bSRobert Mustacchi /*  For DW_DLC_SYMBOLIC_RELOCATIONS output to caller
491bc1f688bSRobert Mustacchi     v2, adding drd_length: some relocations are 4 and
492bc1f688bSRobert Mustacchi     some 8 bytes (pointers are 8, section offsets 4) in
493bc1f688bSRobert Mustacchi     some dwarf environments. (MIPS relocations are all one
494bc1f688bSRobert Mustacchi     size in any given ABI.) Changing drd_type to an unsigned char
495bc1f688bSRobert Mustacchi     to keep struct size down.
496bc1f688bSRobert Mustacchi */
497bc1f688bSRobert Mustacchi enum Dwarf_Rel_Type {
498bc1f688bSRobert Mustacchi     dwarf_drt_none,        /* Should not get to caller */
499bc1f688bSRobert Mustacchi     dwarf_drt_data_reloc,  /* Simple normal relocation. */
500bc1f688bSRobert Mustacchi     dwarf_drt_segment_rel, /* Special reloc, exceptions. */
501bc1f688bSRobert Mustacchi     /* dwarf_drt_first_of_length_pair  and drt_second
502bc1f688bSRobert Mustacchi         are for for the  .word end - begin case. */
503bc1f688bSRobert Mustacchi     dwarf_drt_first_of_length_pair,
504bc1f688bSRobert Mustacchi     dwarf_drt_second_of_length_pair
505bc1f688bSRobert Mustacchi };
506bc1f688bSRobert Mustacchi 
507bc1f688bSRobert Mustacchi typedef struct Dwarf_P_Marker_s * Dwarf_P_Marker;
508bc1f688bSRobert Mustacchi struct Dwarf_P_Marker_s {
509bc1f688bSRobert Mustacchi     Dwarf_Unsigned ma_marker;
510bc1f688bSRobert Mustacchi     Dwarf_Unsigned ma_offset;
511bc1f688bSRobert Mustacchi };
512bc1f688bSRobert Mustacchi 
513bc1f688bSRobert Mustacchi typedef struct Dwarf_Relocation_Data_s  * Dwarf_Relocation_Data;
514bc1f688bSRobert Mustacchi struct Dwarf_Relocation_Data_s {
515bc1f688bSRobert Mustacchi     unsigned char drd_type;   /* Cast to/from Dwarf_Rel_Type
516bc1f688bSRobert Mustacchi         to keep size small in struct. */
517bc1f688bSRobert Mustacchi     unsigned char drd_length; /* Length in bytes of data being
518bc1f688bSRobert Mustacchi         relocated. 4 for 32bit data,
519bc1f688bSRobert Mustacchi         8 for 64bit data. */
520bc1f688bSRobert Mustacchi     Dwarf_Unsigned       drd_offset; /* Where the data to reloc is. */
521bc1f688bSRobert Mustacchi     Dwarf_Unsigned       drd_symbol_index;
522bc1f688bSRobert Mustacchi };
523bc1f688bSRobert Mustacchi 
524bc1f688bSRobert Mustacchi typedef struct Dwarf_P_String_Attr_s  * Dwarf_P_String_Attr;
525bc1f688bSRobert Mustacchi struct Dwarf_P_String_Attr_s {
526bc1f688bSRobert Mustacchi     Dwarf_Unsigned        sa_offset;  /* Offset of string attribute data */
527bc1f688bSRobert Mustacchi     Dwarf_Unsigned        sa_nbytes;
528bc1f688bSRobert Mustacchi };
529bc1f688bSRobert Mustacchi 
530bc1f688bSRobert Mustacchi 
531bc1f688bSRobert Mustacchi /* Opaque types for Consumer Library. */
532bc1f688bSRobert Mustacchi typedef struct Dwarf_Debug_s*      Dwarf_Debug;
533bc1f688bSRobert Mustacchi typedef struct Dwarf_Die_s*        Dwarf_Die;
534bc1f688bSRobert Mustacchi typedef struct Dwarf_Line_s*       Dwarf_Line;
535bc1f688bSRobert Mustacchi typedef struct Dwarf_Global_s*     Dwarf_Global;
536bc1f688bSRobert Mustacchi typedef struct Dwarf_Func_s*       Dwarf_Func;
537bc1f688bSRobert Mustacchi typedef struct Dwarf_Type_s*       Dwarf_Type;
538bc1f688bSRobert Mustacchi typedef struct Dwarf_Var_s*        Dwarf_Var;
539bc1f688bSRobert Mustacchi typedef struct Dwarf_Weak_s*       Dwarf_Weak;
540bc1f688bSRobert Mustacchi typedef struct Dwarf_Error_s*      Dwarf_Error;
541bc1f688bSRobert Mustacchi typedef struct Dwarf_Attribute_s*  Dwarf_Attribute;
542bc1f688bSRobert Mustacchi typedef struct Dwarf_Abbrev_s*     Dwarf_Abbrev;
543bc1f688bSRobert Mustacchi typedef struct Dwarf_Fde_s*        Dwarf_Fde;
544bc1f688bSRobert Mustacchi typedef struct Dwarf_Cie_s*        Dwarf_Cie;
545bc1f688bSRobert 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 
556bc1f688bSRobert Mustacchi 
557bc1f688bSRobert Mustacchi /* Opaque types for Producer Library. */
558bc1f688bSRobert Mustacchi typedef struct Dwarf_P_Debug_s*       Dwarf_P_Debug;
559bc1f688bSRobert Mustacchi typedef struct Dwarf_P_Die_s*         Dwarf_P_Die;
560bc1f688bSRobert Mustacchi typedef struct Dwarf_P_Attribute_s*   Dwarf_P_Attribute;
561bc1f688bSRobert Mustacchi typedef struct Dwarf_P_Fde_s*         Dwarf_P_Fde;
562bc1f688bSRobert Mustacchi typedef struct Dwarf_P_Expr_s*        Dwarf_P_Expr;
563bc1f688bSRobert Mustacchi typedef Dwarf_Unsigned                Dwarf_Tag;
564bc1f688bSRobert Mustacchi 
565bc1f688bSRobert Mustacchi 
566bc1f688bSRobert Mustacchi /* error handler function
567bc1f688bSRobert Mustacchi */
568bc1f688bSRobert Mustacchi typedef void  (*Dwarf_Handler)(Dwarf_Error /*error*/, Dwarf_Ptr /*errarg*/);
569bc1f688bSRobert Mustacchi 
570bc1f688bSRobert Mustacchi 
571bc1f688bSRobert Mustacchi /* Begin libdwarf Object File Interface declarations.
572bc1f688bSRobert Mustacchi 
573bc1f688bSRobert Mustacchi As of February 2008 there are multiple dwarf_reader object access
574bc1f688bSRobert Mustacchi initialization methods available:
575bc1f688bSRobert Mustacchi The traditional dwarf_elf_init() and dwarf_init()  and dwarf_finish()
576bc1f688bSRobert Mustacchi     which assume libelf and POSIX file access.
577bc1f688bSRobert Mustacchi An object-file and library agnostic dwarf_object_init() and dwarf_object_finish()
578bc1f688bSRobert Mustacchi     which allow the coder to provide object access routines
579bc1f688bSRobert Mustacchi     abstracting away the elf interface.  So there is no dependence in the
580bc1f688bSRobert Mustacchi     reader code on the object format and no dependence on libelf.
581bc1f688bSRobert Mustacchi     See the code in dwarf_elf_access.c  and dwarf_original_elf_init.c
582bc1f688bSRobert Mustacchi     to see an example of initializing the structures mentioned below.
583bc1f688bSRobert Mustacchi 
584bc1f688bSRobert Mustacchi Projects using dwarf_elf_init() or dwarf_init() can ignore
585bc1f688bSRobert Mustacchi the Dwarf_Obj_Access* structures entirely as all these details
586bc1f688bSRobert Mustacchi are completed for you.
587bc1f688bSRobert Mustacchi 
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.
594bc1f688bSRobert Mustacchi */
595bc1f688bSRobert Mustacchi 
596bc1f688bSRobert Mustacchi typedef struct Dwarf_Obj_Access_Interface_s   Dwarf_Obj_Access_Interface;
597bc1f688bSRobert Mustacchi typedef struct Dwarf_Obj_Access_Methods_s     Dwarf_Obj_Access_Methods;
598bc1f688bSRobert Mustacchi typedef struct Dwarf_Obj_Access_Section_s     Dwarf_Obj_Access_Section;
599bc1f688bSRobert Mustacchi 
600bc1f688bSRobert Mustacchi 
601bc1f688bSRobert Mustacchi /*  Used in the get_section interface function
602bc1f688bSRobert Mustacchi     in Dwarf_Obj_Access_Section_s.  Since libdwarf
603bc1f688bSRobert Mustacchi     depends on standard DWARF section names an object
604bc1f688bSRobert Mustacchi     format that has no such names (but has some
605bc1f688bSRobert Mustacchi     method of setting up 'sections equivalents')
606bc1f688bSRobert Mustacchi     must arrange to return standard DWARF section
607bc1f688bSRobert Mustacchi     names in the 'name' field.  libdwarf does
608bc1f688bSRobert Mustacchi     not free the strings in 'name'. */
609bc1f688bSRobert Mustacchi 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. */
613bc1f688bSRobert Mustacchi     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. */
619bc1f688bSRobert Mustacchi     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.  */
623bc1f688bSRobert Mustacchi     const char*    name;
624bc1f688bSRobert Mustacchi     /*  Set link to zero if it is meaningless.  If non-zero
625bc1f688bSRobert Mustacchi         it should be a link to a rela section or from symtab
626bc1f688bSRobert Mustacchi         to strtab.  In Elf it is sh_link. */
627bc1f688bSRobert Mustacchi     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;
638bc1f688bSRobert Mustacchi };
639bc1f688bSRobert Mustacchi 
640bc1f688bSRobert Mustacchi /*  Returned by the get_endianness function in
641bc1f688bSRobert Mustacchi     Dwarf_Obj_Access_Methods_s. */
642bc1f688bSRobert Mustacchi typedef enum {
643bc1f688bSRobert Mustacchi     DW_OBJECT_MSB,
644bc1f688bSRobert Mustacchi     DW_OBJECT_LSB
645bc1f688bSRobert Mustacchi } Dwarf_Endianness;
646bc1f688bSRobert Mustacchi 
647bc1f688bSRobert Mustacchi /*  The functions we need to access object data from libdwarf are declared here.
648bc1f688bSRobert Mustacchi 
649bc1f688bSRobert Mustacchi     In these function pointer declarations
650bc1f688bSRobert Mustacchi     'void *obj' is intended to be a pointer (the object field in
651bc1f688bSRobert Mustacchi     Dwarf_Obj_Access_Interface_s)
652bc1f688bSRobert Mustacchi     that hides the library-specific and object-specific data that makes
653bc1f688bSRobert Mustacchi     it possible to handle multiple object formats and multiple libraries.
654bc1f688bSRobert Mustacchi     It's not required that one handles multiple such in a single libdwarf
655bc1f688bSRobert Mustacchi     archive/shared-library (but not ruled out either).
656bc1f688bSRobert Mustacchi     See  dwarf_elf_object_access_internals_t and dwarf_elf_access.c
657bc1f688bSRobert Mustacchi     for an example.
658bc1f688bSRobert Mustacchi 
659bc1f688bSRobert Mustacchi */
660bc1f688bSRobert Mustacchi 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.  */
679bc1f688bSRobert Mustacchi     int    (*get_section_info)(void* obj, Dwarf_Half section_index,
680bc1f688bSRobert Mustacchi         Dwarf_Obj_Access_Section* return_section, int* error);
681*4d9fdb46SRobert Mustacchi     /*
682*4d9fdb46SRobert Mustacchi         get_byte_order
683bc1f688bSRobert 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.  */
692*4d9fdb46SRobert Mustacchi     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.  */
706*4d9fdb46SRobert Mustacchi     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.  */
716bc1f688bSRobert Mustacchi     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 */
726bc1f688bSRobert Mustacchi     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.  */
744bc1f688bSRobert Mustacchi     int    (*load_section)(void* obj, Dwarf_Half section_index,
745bc1f688bSRobert Mustacchi         Dwarf_Small** return_data, int* error);
746bc1f688bSRobert Mustacchi 
747bc1f688bSRobert 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.  */
763bc1f688bSRobert Mustacchi     int    (*relocate_a_section)(void* obj, Dwarf_Half section_index,
764bc1f688bSRobert Mustacchi         Dwarf_Debug dbg,
765bc1f688bSRobert Mustacchi         int* error);
766bc1f688bSRobert Mustacchi 
767bc1f688bSRobert Mustacchi };
768bc1f688bSRobert Mustacchi 
769bc1f688bSRobert Mustacchi 
770bc1f688bSRobert Mustacchi 
771bc1f688bSRobert Mustacchi /*  These structures are allocated and deallocated by your code
772bc1f688bSRobert 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
775bc1f688bSRobert Mustacchi     struct Dwarf_Obj_Access_Interface_s or its content.
776bc1f688bSRobert Mustacchi     (libdwarf does record a pointer to this struct: you must
777bc1f688bSRobert Mustacchi     ensure that pointer remains valid for as long as
778bc1f688bSRobert Mustacchi     a libdwarf instance is open (meaning
779*4d9fdb46SRobert Mustacchi     after dwarf_init) and before dwarf_finish)).
780bc1f688bSRobert Mustacchi 
781bc1f688bSRobert Mustacchi     If you are reading Elf objects and libelf use dwarf_init()
782bc1f688bSRobert Mustacchi     or dwarf_elf_init() which take care of these details.
783bc1f688bSRobert Mustacchi */
784bc1f688bSRobert Mustacchi struct Dwarf_Obj_Access_Interface_s {
785bc1f688bSRobert Mustacchi     /*  object is a void* as it hides the data the object access routines
786bc1f688bSRobert Mustacchi         need (which varies by library in use and object format).
787bc1f688bSRobert Mustacchi     */
788bc1f688bSRobert Mustacchi     void* object;
789bc1f688bSRobert Mustacchi     const Dwarf_Obj_Access_Methods * methods;
790bc1f688bSRobert Mustacchi };
791bc1f688bSRobert Mustacchi 
792bc1f688bSRobert Mustacchi /* End libdwarf Object File Interface */
793bc1f688bSRobert Mustacchi 
794bc1f688bSRobert Mustacchi /*
795bc1f688bSRobert Mustacchi     Dwarf_dealloc() alloc_type arguments.
796bc1f688bSRobert Mustacchi     Argument points to:
797bc1f688bSRobert Mustacchi */
798bc1f688bSRobert Mustacchi #define DW_DLA_STRING          0x01     /* char* */
799bc1f688bSRobert Mustacchi #define DW_DLA_LOC             0x02     /* Dwarf_Loc */
800bc1f688bSRobert Mustacchi #define DW_DLA_LOCDESC         0x03     /* Dwarf_Locdesc */
801bc1f688bSRobert Mustacchi #define DW_DLA_ELLIST          0x04     /* Dwarf_Ellist (not used)*/
802bc1f688bSRobert Mustacchi #define DW_DLA_BOUNDS          0x05     /* Dwarf_Bounds (not used) */
803bc1f688bSRobert Mustacchi #define DW_DLA_BLOCK           0x06     /* Dwarf_Block */
804bc1f688bSRobert Mustacchi #define DW_DLA_DEBUG           0x07     /* Dwarf_Debug */
805bc1f688bSRobert Mustacchi #define DW_DLA_DIE             0x08     /* Dwarf_Die */
806bc1f688bSRobert Mustacchi #define DW_DLA_LINE            0x09     /* Dwarf_Line */
807bc1f688bSRobert Mustacchi #define DW_DLA_ATTR            0x0a     /* Dwarf_Attribute */
808bc1f688bSRobert Mustacchi #define DW_DLA_TYPE            0x0b     /* Dwarf_Type  (not used) */
809bc1f688bSRobert Mustacchi #define DW_DLA_SUBSCR          0x0c     /* Dwarf_Subscr (not used) */
810bc1f688bSRobert Mustacchi #define DW_DLA_GLOBAL          0x0d     /* Dwarf_Global */
811bc1f688bSRobert Mustacchi #define DW_DLA_ERROR           0x0e     /* Dwarf_Error */
812bc1f688bSRobert Mustacchi #define DW_DLA_LIST            0x0f     /* a list */
813bc1f688bSRobert Mustacchi #define DW_DLA_LINEBUF         0x10     /* Dwarf_Line* (not used) */
814bc1f688bSRobert Mustacchi #define DW_DLA_ARANGE          0x11     /* Dwarf_Arange */
815bc1f688bSRobert Mustacchi #define DW_DLA_ABBREV          0x12     /* Dwarf_Abbrev */
816bc1f688bSRobert Mustacchi #define DW_DLA_FRAME_OP        0x13     /* Dwarf_Frame_Op */
817bc1f688bSRobert Mustacchi #define DW_DLA_CIE             0x14     /* Dwarf_Cie */
818bc1f688bSRobert Mustacchi #define DW_DLA_FDE             0x15     /* Dwarf_Fde */
819*4d9fdb46SRobert Mustacchi #define DW_DLA_LOC_BLOCK       0x16     /* Dwarf_Loc */
820bc1f688bSRobert Mustacchi #define DW_DLA_FRAME_BLOCK     0x17     /* Dwarf_Frame Block (not used) */
821bc1f688bSRobert Mustacchi #define DW_DLA_FUNC            0x18     /* Dwarf_Func */
822bc1f688bSRobert Mustacchi #define DW_DLA_TYPENAME        0x19     /* Dwarf_Type */
823bc1f688bSRobert Mustacchi #define DW_DLA_VAR             0x1a     /* Dwarf_Var */
824bc1f688bSRobert Mustacchi #define DW_DLA_WEAK            0x1b     /* Dwarf_Weak */
825bc1f688bSRobert Mustacchi #define DW_DLA_ADDR            0x1c     /* Dwarf_Addr sized entries */
826bc1f688bSRobert Mustacchi #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 */
840bc1f688bSRobert Mustacchi 
841bc1f688bSRobert Mustacchi /* The augmenter string for CIE */
842bc1f688bSRobert Mustacchi #define DW_CIE_AUGMENTER_STRING_V0              "z"
843bc1f688bSRobert Mustacchi 
844bc1f688bSRobert Mustacchi /* dwarf_init() access arguments
845bc1f688bSRobert Mustacchi */
846bc1f688bSRobert Mustacchi #define DW_DLC_READ        0        /* read only access */
847bc1f688bSRobert Mustacchi #define DW_DLC_WRITE       1        /* write only access */
848bc1f688bSRobert Mustacchi #define DW_DLC_RDWR        2        /* read/write access NOT SUPPORTED*/
849bc1f688bSRobert Mustacchi 
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.
861bc1f688bSRobert Mustacchi 
862bc1f688bSRobert 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.
866*4d9fdb46SRobert Mustacchi */
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
881*4d9fdb46SRobert Mustacchi 
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.
886*4d9fdb46SRobert Mustacchi */
887*4d9fdb46SRobert Mustacchi 
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
908bc1f688bSRobert Mustacchi 
909bc1f688bSRobert 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     */
915bc1f688bSRobert Mustacchi #define DW_DLC_SYMBOLIC_RELOCATIONS 0x04000000
916bc1f688bSRobert Mustacchi 
917*4d9fdb46SRobert Mustacchi 
918bc1f688bSRobert Mustacchi #define DW_DLC_TARGET_BIGENDIAN     0x08000000 /* Big    endian target */
919bc1f688bSRobert Mustacchi #define DW_DLC_TARGET_LITTLEENDIAN  0x00100000 /* Little endian target */
920bc1f688bSRobert Mustacchi 
921bc1f688bSRobert Mustacchi 
922*4d9fdb46SRobert Mustacchi /* dwarf_pcline function, slide arguments
923bc1f688bSRobert Mustacchi */
924bc1f688bSRobert Mustacchi #define DW_DLS_BACKWARD   -1       /* slide backward to find line */
925bc1f688bSRobert Mustacchi #define DW_DLS_NOSLIDE     0       /* match exactly without sliding */
926bc1f688bSRobert Mustacchi #define DW_DLS_FORWARD     1       /* slide forward to find line */
927bc1f688bSRobert Mustacchi 
928bc1f688bSRobert Mustacchi /* libdwarf error numbers
929bc1f688bSRobert Mustacchi */
930bc1f688bSRobert Mustacchi #define DW_DLE_NE          0     /* no error */
931bc1f688bSRobert Mustacchi #define DW_DLE_VMM         1     /* dwarf format/library version mismatch */
932bc1f688bSRobert Mustacchi #define DW_DLE_MAP         2     /* memory map failure */
933bc1f688bSRobert Mustacchi #define DW_DLE_LEE         3     /* libelf error */
934bc1f688bSRobert Mustacchi #define DW_DLE_NDS         4     /* no debug section */
935bc1f688bSRobert Mustacchi #define DW_DLE_NLS         5     /* no line section */
936bc1f688bSRobert Mustacchi #define DW_DLE_ID          6     /* invalid descriptor for query */
937bc1f688bSRobert Mustacchi #define DW_DLE_IOF         7     /* I/O failure */
938bc1f688bSRobert Mustacchi #define DW_DLE_MAF         8     /* memory allocation failure */
939bc1f688bSRobert Mustacchi #define DW_DLE_IA          9     /* invalid argument */
940bc1f688bSRobert Mustacchi #define DW_DLE_MDE         10     /* mangled debugging entry */
941bc1f688bSRobert Mustacchi #define DW_DLE_MLE         11     /* mangled line number entry */
942bc1f688bSRobert Mustacchi #define DW_DLE_FNO         12     /* file not open */
943bc1f688bSRobert Mustacchi #define DW_DLE_FNR         13     /* file not a regular file */
944bc1f688bSRobert Mustacchi #define DW_DLE_FWA         14     /* file open with wrong access */
945bc1f688bSRobert Mustacchi #define DW_DLE_NOB         15     /* not an object file */
946bc1f688bSRobert Mustacchi #define DW_DLE_MOF         16     /* mangled object file header */
947bc1f688bSRobert Mustacchi #define DW_DLE_EOLL        17     /* end of location list entries */
948bc1f688bSRobert Mustacchi #define DW_DLE_NOLL        18     /* no location list section */
949bc1f688bSRobert Mustacchi #define DW_DLE_BADOFF      19     /* Invalid offset */
950bc1f688bSRobert Mustacchi #define DW_DLE_EOS         20     /* end of section  */
951bc1f688bSRobert Mustacchi #define DW_DLE_ATRUNC      21     /* abbreviations section appears truncated*/
952bc1f688bSRobert Mustacchi #define DW_DLE_BADBITC     22     /* Address size passed to dwarf bad*/
953bc1f688bSRobert Mustacchi                     /* It is not an allowed size (64 or 32) */
954bc1f688bSRobert Mustacchi     /* Error codes defined by the current Libdwarf Implementation. */
955bc1f688bSRobert Mustacchi #define DW_DLE_DBG_ALLOC                        23
956bc1f688bSRobert Mustacchi #define DW_DLE_FSTAT_ERROR                      24
957bc1f688bSRobert Mustacchi #define DW_DLE_FSTAT_MODE_ERROR                 25
958bc1f688bSRobert Mustacchi #define DW_DLE_INIT_ACCESS_WRONG                26
959bc1f688bSRobert Mustacchi #define DW_DLE_ELF_BEGIN_ERROR                  27
960bc1f688bSRobert Mustacchi #define DW_DLE_ELF_GETEHDR_ERROR                28
961bc1f688bSRobert Mustacchi #define DW_DLE_ELF_GETSHDR_ERROR                29
962bc1f688bSRobert Mustacchi #define DW_DLE_ELF_STRPTR_ERROR                 30
963bc1f688bSRobert Mustacchi #define DW_DLE_DEBUG_INFO_DUPLICATE             31
964bc1f688bSRobert Mustacchi #define DW_DLE_DEBUG_INFO_NULL                  32
965bc1f688bSRobert Mustacchi #define DW_DLE_DEBUG_ABBREV_DUPLICATE           33
966bc1f688bSRobert Mustacchi #define DW_DLE_DEBUG_ABBREV_NULL                34
967bc1f688bSRobert Mustacchi #define DW_DLE_DEBUG_ARANGES_DUPLICATE          35
968bc1f688bSRobert Mustacchi #define DW_DLE_DEBUG_ARANGES_NULL               36
969bc1f688bSRobert Mustacchi #define DW_DLE_DEBUG_LINE_DUPLICATE             37
970bc1f688bSRobert Mustacchi #define DW_DLE_DEBUG_LINE_NULL                  38
971bc1f688bSRobert Mustacchi #define DW_DLE_DEBUG_LOC_DUPLICATE              39
972bc1f688bSRobert Mustacchi #define DW_DLE_DEBUG_LOC_NULL                   40
973bc1f688bSRobert Mustacchi #define DW_DLE_DEBUG_MACINFO_DUPLICATE          41
974bc1f688bSRobert Mustacchi #define DW_DLE_DEBUG_MACINFO_NULL               42
975bc1f688bSRobert Mustacchi #define DW_DLE_DEBUG_PUBNAMES_DUPLICATE         43
976bc1f688bSRobert Mustacchi #define DW_DLE_DEBUG_PUBNAMES_NULL              44
977bc1f688bSRobert Mustacchi #define DW_DLE_DEBUG_STR_DUPLICATE              45
978bc1f688bSRobert Mustacchi #define DW_DLE_DEBUG_STR_NULL                   46
979bc1f688bSRobert Mustacchi #define DW_DLE_CU_LENGTH_ERROR                  47
980bc1f688bSRobert Mustacchi #define DW_DLE_VERSION_STAMP_ERROR              48
981bc1f688bSRobert Mustacchi #define DW_DLE_ABBREV_OFFSET_ERROR              49
982bc1f688bSRobert Mustacchi #define DW_DLE_ADDRESS_SIZE_ERROR               50
983bc1f688bSRobert Mustacchi #define DW_DLE_DEBUG_INFO_PTR_NULL              51
984bc1f688bSRobert Mustacchi #define DW_DLE_DIE_NULL                         52
985bc1f688bSRobert Mustacchi #define DW_DLE_STRING_OFFSET_BAD                53
986bc1f688bSRobert Mustacchi #define DW_DLE_DEBUG_LINE_LENGTH_BAD            54
987bc1f688bSRobert Mustacchi #define DW_DLE_LINE_PROLOG_LENGTH_BAD           55
988bc1f688bSRobert Mustacchi #define DW_DLE_LINE_NUM_OPERANDS_BAD            56
989bc1f688bSRobert Mustacchi #define DW_DLE_LINE_SET_ADDR_ERROR              57 /* No longer used. */
990bc1f688bSRobert Mustacchi #define DW_DLE_LINE_EXT_OPCODE_BAD              58
991bc1f688bSRobert Mustacchi #define DW_DLE_DWARF_LINE_NULL                  59
992bc1f688bSRobert Mustacchi #define DW_DLE_INCL_DIR_NUM_BAD                 60
993bc1f688bSRobert Mustacchi #define DW_DLE_LINE_FILE_NUM_BAD                61
994bc1f688bSRobert Mustacchi #define DW_DLE_ALLOC_FAIL                       62
995bc1f688bSRobert Mustacchi #define DW_DLE_NO_CALLBACK_FUNC                 63
996bc1f688bSRobert Mustacchi #define DW_DLE_SECT_ALLOC                       64
997bc1f688bSRobert Mustacchi #define DW_DLE_FILE_ENTRY_ALLOC                 65
998bc1f688bSRobert Mustacchi #define DW_DLE_LINE_ALLOC                       66
999bc1f688bSRobert Mustacchi #define DW_DLE_FPGM_ALLOC                       67
1000bc1f688bSRobert Mustacchi #define DW_DLE_INCDIR_ALLOC                     68
1001bc1f688bSRobert Mustacchi #define DW_DLE_STRING_ALLOC                     69
1002bc1f688bSRobert Mustacchi #define DW_DLE_CHUNK_ALLOC                      70
1003bc1f688bSRobert Mustacchi #define DW_DLE_BYTEOFF_ERR                      71
1004bc1f688bSRobert Mustacchi #define DW_DLE_CIE_ALLOC                        72
1005bc1f688bSRobert Mustacchi #define DW_DLE_FDE_ALLOC                        73
1006bc1f688bSRobert Mustacchi #define DW_DLE_REGNO_OVFL                       74
1007bc1f688bSRobert Mustacchi #define DW_DLE_CIE_OFFS_ALLOC                   75
1008bc1f688bSRobert Mustacchi #define DW_DLE_WRONG_ADDRESS                    76
1009bc1f688bSRobert Mustacchi #define DW_DLE_EXTRA_NEIGHBORS                  77
1010bc1f688bSRobert Mustacchi #define DW_DLE_WRONG_TAG                        78
1011bc1f688bSRobert Mustacchi #define DW_DLE_DIE_ALLOC                        79
1012bc1f688bSRobert Mustacchi #define DW_DLE_PARENT_EXISTS                    80
1013bc1f688bSRobert Mustacchi #define DW_DLE_DBG_NULL                         81
1014bc1f688bSRobert Mustacchi #define DW_DLE_DEBUGLINE_ERROR                  82
1015bc1f688bSRobert Mustacchi #define DW_DLE_DEBUGFRAME_ERROR                 83
1016bc1f688bSRobert Mustacchi #define DW_DLE_DEBUGINFO_ERROR                  84
1017bc1f688bSRobert Mustacchi #define DW_DLE_ATTR_ALLOC                       85
1018bc1f688bSRobert Mustacchi #define DW_DLE_ABBREV_ALLOC                     86
1019bc1f688bSRobert Mustacchi #define DW_DLE_OFFSET_UFLW                      87
1020bc1f688bSRobert Mustacchi #define DW_DLE_ELF_SECT_ERR                     88
1021bc1f688bSRobert Mustacchi #define DW_DLE_DEBUG_FRAME_LENGTH_BAD           89
1022bc1f688bSRobert Mustacchi #define DW_DLE_FRAME_VERSION_BAD                90
1023bc1f688bSRobert Mustacchi #define DW_DLE_CIE_RET_ADDR_REG_ERROR           91
1024bc1f688bSRobert Mustacchi #define DW_DLE_FDE_NULL                         92
1025bc1f688bSRobert Mustacchi #define DW_DLE_FDE_DBG_NULL                     93
1026bc1f688bSRobert Mustacchi #define DW_DLE_CIE_NULL                         94
1027bc1f688bSRobert Mustacchi #define DW_DLE_CIE_DBG_NULL                     95
1028bc1f688bSRobert Mustacchi #define DW_DLE_FRAME_TABLE_COL_BAD              96
1029bc1f688bSRobert Mustacchi #define DW_DLE_PC_NOT_IN_FDE_RANGE              97
1030bc1f688bSRobert Mustacchi #define DW_DLE_CIE_INSTR_EXEC_ERROR             98
1031bc1f688bSRobert Mustacchi #define DW_DLE_FRAME_INSTR_EXEC_ERROR           99
1032bc1f688bSRobert Mustacchi #define DW_DLE_FDE_PTR_NULL                    100
1033bc1f688bSRobert Mustacchi #define DW_DLE_RET_OP_LIST_NULL                101
1034bc1f688bSRobert Mustacchi #define DW_DLE_LINE_CONTEXT_NULL               102
1035bc1f688bSRobert Mustacchi #define DW_DLE_DBG_NO_CU_CONTEXT               103
1036bc1f688bSRobert Mustacchi #define DW_DLE_DIE_NO_CU_CONTEXT               104
1037bc1f688bSRobert Mustacchi #define DW_DLE_FIRST_DIE_NOT_CU                105
1038bc1f688bSRobert Mustacchi #define DW_DLE_NEXT_DIE_PTR_NULL               106
1039bc1f688bSRobert Mustacchi #define DW_DLE_DEBUG_FRAME_DUPLICATE           107
1040bc1f688bSRobert Mustacchi #define DW_DLE_DEBUG_FRAME_NULL                108
1041bc1f688bSRobert Mustacchi #define DW_DLE_ABBREV_DECODE_ERROR             109
1042bc1f688bSRobert Mustacchi #define DW_DLE_DWARF_ABBREV_NULL               110
1043bc1f688bSRobert Mustacchi #define DW_DLE_ATTR_NULL                       111
1044bc1f688bSRobert Mustacchi #define DW_DLE_DIE_BAD                         112
1045bc1f688bSRobert Mustacchi #define DW_DLE_DIE_ABBREV_BAD                  113
1046bc1f688bSRobert Mustacchi #define DW_DLE_ATTR_FORM_BAD                   114
1047bc1f688bSRobert Mustacchi #define DW_DLE_ATTR_NO_CU_CONTEXT              115
1048bc1f688bSRobert Mustacchi #define DW_DLE_ATTR_FORM_SIZE_BAD              116
1049bc1f688bSRobert Mustacchi #define DW_DLE_ATTR_DBG_NULL                   117
1050bc1f688bSRobert Mustacchi #define DW_DLE_BAD_REF_FORM                    118
1051bc1f688bSRobert Mustacchi #define DW_DLE_ATTR_FORM_OFFSET_BAD            119
1052bc1f688bSRobert Mustacchi #define DW_DLE_LINE_OFFSET_BAD                 120
1053bc1f688bSRobert Mustacchi #define DW_DLE_DEBUG_STR_OFFSET_BAD            121
1054bc1f688bSRobert Mustacchi #define DW_DLE_STRING_PTR_NULL                 122
1055bc1f688bSRobert Mustacchi #define DW_DLE_PUBNAMES_VERSION_ERROR          123
1056bc1f688bSRobert Mustacchi #define DW_DLE_PUBNAMES_LENGTH_BAD             124
1057bc1f688bSRobert Mustacchi #define DW_DLE_GLOBAL_NULL                     125
1058bc1f688bSRobert Mustacchi #define DW_DLE_GLOBAL_CONTEXT_NULL             126
1059bc1f688bSRobert Mustacchi #define DW_DLE_DIR_INDEX_BAD                   127
1060bc1f688bSRobert Mustacchi #define DW_DLE_LOC_EXPR_BAD                    128
1061bc1f688bSRobert Mustacchi #define DW_DLE_DIE_LOC_EXPR_BAD                129
1062bc1f688bSRobert Mustacchi #define DW_DLE_ADDR_ALLOC                      130
1063bc1f688bSRobert Mustacchi #define DW_DLE_OFFSET_BAD                      131
1064bc1f688bSRobert Mustacchi #define DW_DLE_MAKE_CU_CONTEXT_FAIL            132
1065bc1f688bSRobert Mustacchi #define DW_DLE_REL_ALLOC                       133
1066bc1f688bSRobert Mustacchi #define DW_DLE_ARANGE_OFFSET_BAD               134
1067bc1f688bSRobert Mustacchi #define DW_DLE_SEGMENT_SIZE_BAD                135
1068bc1f688bSRobert Mustacchi #define DW_DLE_ARANGE_LENGTH_BAD               136
1069bc1f688bSRobert Mustacchi #define DW_DLE_ARANGE_DECODE_ERROR             137
1070bc1f688bSRobert Mustacchi #define DW_DLE_ARANGES_NULL                    138
1071bc1f688bSRobert Mustacchi #define DW_DLE_ARANGE_NULL                     139
1072bc1f688bSRobert Mustacchi #define DW_DLE_NO_FILE_NAME                    140
1073bc1f688bSRobert Mustacchi #define DW_DLE_NO_COMP_DIR                     141
1074bc1f688bSRobert Mustacchi #define DW_DLE_CU_ADDRESS_SIZE_BAD             142
1075bc1f688bSRobert Mustacchi #define DW_DLE_INPUT_ATTR_BAD                  143
1076bc1f688bSRobert Mustacchi #define DW_DLE_EXPR_NULL                       144
1077bc1f688bSRobert Mustacchi #define DW_DLE_BAD_EXPR_OPCODE                 145
1078bc1f688bSRobert Mustacchi #define DW_DLE_EXPR_LENGTH_BAD                 146
1079bc1f688bSRobert Mustacchi #define DW_DLE_MULTIPLE_RELOC_IN_EXPR          147
1080bc1f688bSRobert Mustacchi #define DW_DLE_ELF_GETIDENT_ERROR              148
1081bc1f688bSRobert Mustacchi #define DW_DLE_NO_AT_MIPS_FDE                  149
1082bc1f688bSRobert Mustacchi #define DW_DLE_NO_CIE_FOR_FDE                  150
1083bc1f688bSRobert Mustacchi #define DW_DLE_DIE_ABBREV_LIST_NULL            151
1084bc1f688bSRobert Mustacchi #define DW_DLE_DEBUG_FUNCNAMES_DUPLICATE       152
1085bc1f688bSRobert Mustacchi #define DW_DLE_DEBUG_FUNCNAMES_NULL            153
1086bc1f688bSRobert Mustacchi #define DW_DLE_DEBUG_FUNCNAMES_VERSION_ERROR   154
1087bc1f688bSRobert Mustacchi #define DW_DLE_DEBUG_FUNCNAMES_LENGTH_BAD      155
1088bc1f688bSRobert Mustacchi #define DW_DLE_FUNC_NULL                       156
1089bc1f688bSRobert Mustacchi #define DW_DLE_FUNC_CONTEXT_NULL               157
1090bc1f688bSRobert Mustacchi #define DW_DLE_DEBUG_TYPENAMES_DUPLICATE       158
1091bc1f688bSRobert Mustacchi #define DW_DLE_DEBUG_TYPENAMES_NULL            159
1092bc1f688bSRobert Mustacchi #define DW_DLE_DEBUG_TYPENAMES_VERSION_ERROR   160
1093bc1f688bSRobert Mustacchi #define DW_DLE_DEBUG_TYPENAMES_LENGTH_BAD      161
1094bc1f688bSRobert Mustacchi #define DW_DLE_TYPE_NULL                       162
1095bc1f688bSRobert Mustacchi #define DW_DLE_TYPE_CONTEXT_NULL               163
1096bc1f688bSRobert Mustacchi #define DW_DLE_DEBUG_VARNAMES_DUPLICATE        164
1097bc1f688bSRobert Mustacchi #define DW_DLE_DEBUG_VARNAMES_NULL             165
1098bc1f688bSRobert Mustacchi #define DW_DLE_DEBUG_VARNAMES_VERSION_ERROR    166
1099bc1f688bSRobert Mustacchi #define DW_DLE_DEBUG_VARNAMES_LENGTH_BAD       167
1100bc1f688bSRobert Mustacchi #define DW_DLE_VAR_NULL                        168
1101bc1f688bSRobert Mustacchi #define DW_DLE_VAR_CONTEXT_NULL                169
1102bc1f688bSRobert Mustacchi #define DW_DLE_DEBUG_WEAKNAMES_DUPLICATE       170
1103bc1f688bSRobert Mustacchi #define DW_DLE_DEBUG_WEAKNAMES_NULL            171
1104bc1f688bSRobert Mustacchi #define DW_DLE_DEBUG_WEAKNAMES_VERSION_ERROR   172
1105bc1f688bSRobert Mustacchi #define DW_DLE_DEBUG_WEAKNAMES_LENGTH_BAD      173
1106bc1f688bSRobert Mustacchi #define DW_DLE_WEAK_NULL                       174
1107bc1f688bSRobert Mustacchi #define DW_DLE_WEAK_CONTEXT_NULL               175
1108bc1f688bSRobert Mustacchi #define DW_DLE_LOCDESC_COUNT_WRONG             176
1109bc1f688bSRobert Mustacchi #define DW_DLE_MACINFO_STRING_NULL             177
1110bc1f688bSRobert Mustacchi #define DW_DLE_MACINFO_STRING_EMPTY            178
1111bc1f688bSRobert Mustacchi #define DW_DLE_MACINFO_INTERNAL_ERROR_SPACE    179
1112bc1f688bSRobert Mustacchi #define DW_DLE_MACINFO_MALLOC_FAIL             180
1113bc1f688bSRobert Mustacchi #define DW_DLE_DEBUGMACINFO_ERROR              181
1114bc1f688bSRobert Mustacchi #define DW_DLE_DEBUG_MACRO_LENGTH_BAD          182
1115bc1f688bSRobert Mustacchi #define DW_DLE_DEBUG_MACRO_MAX_BAD             183
1116bc1f688bSRobert Mustacchi #define DW_DLE_DEBUG_MACRO_INTERNAL_ERR        184
1117bc1f688bSRobert Mustacchi #define DW_DLE_DEBUG_MACRO_MALLOC_SPACE        185
1118bc1f688bSRobert Mustacchi #define DW_DLE_DEBUG_MACRO_INCONSISTENT        186
1119bc1f688bSRobert Mustacchi #define DW_DLE_DF_NO_CIE_AUGMENTATION          187
1120bc1f688bSRobert Mustacchi #define DW_DLE_DF_REG_NUM_TOO_HIGH             188
1121bc1f688bSRobert Mustacchi #define DW_DLE_DF_MAKE_INSTR_NO_INIT           189
1122bc1f688bSRobert Mustacchi #define DW_DLE_DF_NEW_LOC_LESS_OLD_LOC         190
1123bc1f688bSRobert Mustacchi #define DW_DLE_DF_POP_EMPTY_STACK              191
1124bc1f688bSRobert Mustacchi #define DW_DLE_DF_ALLOC_FAIL                   192
1125bc1f688bSRobert Mustacchi #define DW_DLE_DF_FRAME_DECODING_ERROR         193
1126bc1f688bSRobert Mustacchi #define DW_DLE_DEBUG_LOC_SECTION_SHORT         194
1127bc1f688bSRobert Mustacchi #define DW_DLE_FRAME_AUGMENTATION_UNKNOWN      195
1128bc1f688bSRobert Mustacchi #define DW_DLE_PUBTYPE_CONTEXT                 196 /* Unused. */
1129bc1f688bSRobert Mustacchi #define DW_DLE_DEBUG_PUBTYPES_LENGTH_BAD       197
1130bc1f688bSRobert Mustacchi #define DW_DLE_DEBUG_PUBTYPES_VERSION_ERROR    198
1131bc1f688bSRobert Mustacchi #define DW_DLE_DEBUG_PUBTYPES_DUPLICATE        199
1132bc1f688bSRobert Mustacchi #define DW_DLE_FRAME_CIE_DECODE_ERROR          200
1133bc1f688bSRobert Mustacchi #define DW_DLE_FRAME_REGISTER_UNREPRESENTABLE  201
1134bc1f688bSRobert Mustacchi #define DW_DLE_FRAME_REGISTER_COUNT_MISMATCH   202
1135bc1f688bSRobert Mustacchi #define DW_DLE_LINK_LOOP                       203
1136bc1f688bSRobert Mustacchi #define DW_DLE_STRP_OFFSET_BAD                 204
1137bc1f688bSRobert Mustacchi #define DW_DLE_DEBUG_RANGES_DUPLICATE          205
1138bc1f688bSRobert Mustacchi #define DW_DLE_DEBUG_RANGES_OFFSET_BAD         206
1139bc1f688bSRobert Mustacchi #define DW_DLE_DEBUG_RANGES_MISSING_END        207
1140bc1f688bSRobert Mustacchi #define DW_DLE_DEBUG_RANGES_OUT_OF_MEM         208
1141bc1f688bSRobert Mustacchi #define DW_DLE_DEBUG_SYMTAB_ERR                209
1142bc1f688bSRobert Mustacchi #define DW_DLE_DEBUG_STRTAB_ERR                210
1143bc1f688bSRobert Mustacchi #define DW_DLE_RELOC_MISMATCH_INDEX            211
1144bc1f688bSRobert Mustacchi #define DW_DLE_RELOC_MISMATCH_RELOC_INDEX      212
1145bc1f688bSRobert Mustacchi #define DW_DLE_RELOC_MISMATCH_STRTAB_INDEX     213
1146bc1f688bSRobert Mustacchi #define DW_DLE_RELOC_SECTION_MISMATCH          214
1147bc1f688bSRobert Mustacchi #define DW_DLE_RELOC_SECTION_MISSING_INDEX     215
1148bc1f688bSRobert Mustacchi #define DW_DLE_RELOC_SECTION_LENGTH_ODD        216
1149bc1f688bSRobert Mustacchi #define DW_DLE_RELOC_SECTION_PTR_NULL          217
1150bc1f688bSRobert Mustacchi #define DW_DLE_RELOC_SECTION_MALLOC_FAIL       218
1151bc1f688bSRobert Mustacchi #define DW_DLE_NO_ELF64_SUPPORT                219
1152bc1f688bSRobert Mustacchi #define DW_DLE_MISSING_ELF64_SUPPORT           220
1153bc1f688bSRobert Mustacchi #define DW_DLE_ORPHAN_FDE                      221
1154bc1f688bSRobert Mustacchi #define DW_DLE_DUPLICATE_INST_BLOCK            222
1155bc1f688bSRobert Mustacchi #define DW_DLE_BAD_REF_SIG8_FORM               223
1156bc1f688bSRobert Mustacchi #define DW_DLE_ATTR_EXPRLOC_FORM_BAD           224
1157bc1f688bSRobert Mustacchi #define DW_DLE_FORM_SEC_OFFSET_LENGTH_BAD      225
1158bc1f688bSRobert Mustacchi #define DW_DLE_NOT_REF_FORM                    226
1159bc1f688bSRobert Mustacchi #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
1403bc1f688bSRobert Mustacchi 
1404*4d9fdb46SRobert Mustacchi     /* LAST MUST EQUAL LAST ERROR NUMBER */
1405*4d9fdb46SRobert Mustacchi #define DW_DLE_LAST        469
1406bc1f688bSRobert Mustacchi 
1407bc1f688bSRobert Mustacchi #define DW_DLE_LO_USER     0x10000
1408bc1f688bSRobert Mustacchi 
1409bc1f688bSRobert Mustacchi     /*  Taken as meaning 'undefined value', this is not
1410bc1f688bSRobert Mustacchi         a column or register number.
1411bc1f688bSRobert Mustacchi         Only present at libdwarf runtime. Never on disk.
1412bc1f688bSRobert Mustacchi         DW_FRAME_* Values present on disk are in dwarf.h
1413bc1f688bSRobert Mustacchi     */
1414bc1f688bSRobert Mustacchi #define DW_FRAME_UNDEFINED_VAL          1034
1415bc1f688bSRobert Mustacchi 
1416bc1f688bSRobert Mustacchi     /*  Taken as meaning 'same value' as caller had, not a column
1417bc1f688bSRobert Mustacchi         or register number
1418bc1f688bSRobert Mustacchi         Only present at libdwarf runtime. Never on disk.
1419bc1f688bSRobert Mustacchi         DW_FRAME_* Values present on disk are in dwarf.h
1420bc1f688bSRobert Mustacchi     */
1421bc1f688bSRobert Mustacchi #define DW_FRAME_SAME_VAL               1035
1422bc1f688bSRobert Mustacchi 
1423bc1f688bSRobert Mustacchi 
1424bc1f688bSRobert Mustacchi 
1425bc1f688bSRobert Mustacchi /* error return values
1426bc1f688bSRobert Mustacchi */
1427bc1f688bSRobert Mustacchi #define DW_DLV_BADADDR     (~(Dwarf_Addr)0)
1428bc1f688bSRobert Mustacchi     /* for functions returning target address */
1429bc1f688bSRobert Mustacchi 
1430bc1f688bSRobert Mustacchi #define DW_DLV_NOCOUNT     ((Dwarf_Signed)-1)
1431bc1f688bSRobert Mustacchi     /* for functions returning count */
1432bc1f688bSRobert Mustacchi 
1433bc1f688bSRobert Mustacchi #define DW_DLV_BADOFFSET   (~(Dwarf_Off)0)
1434bc1f688bSRobert Mustacchi     /* for functions returning offset */
1435bc1f688bSRobert Mustacchi 
1436bc1f688bSRobert Mustacchi /* standard return values for functions */
1437bc1f688bSRobert Mustacchi #define DW_DLV_NO_ENTRY -1
1438bc1f688bSRobert Mustacchi #define DW_DLV_OK        0
1439bc1f688bSRobert Mustacchi #define DW_DLV_ERROR     1
1440bc1f688bSRobert Mustacchi 
1441bc1f688bSRobert Mustacchi /* Special values for offset_into_exception_table field of dwarf fde's. */
1442bc1f688bSRobert Mustacchi /* The following value indicates that there is no Exception table offset
1443bc1f688bSRobert Mustacchi    associated with a dwarf frame. */
1444bc1f688bSRobert Mustacchi #define DW_DLX_NO_EH_OFFSET         (-1LL)
1445bc1f688bSRobert Mustacchi /* The following value indicates that the producer was unable to analyse the
1446bc1f688bSRobert Mustacchi    source file to generate Exception tables for this function. */
1447bc1f688bSRobert Mustacchi #define DW_DLX_EH_OFFSET_UNAVAILABLE  (-2LL)
1448bc1f688bSRobert Mustacchi 
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
1501bc1f688bSRobert Mustacchi 
1502bc1f688bSRobert Mustacchi /*===========================================================================*/
1503bc1f688bSRobert Mustacchi /*  Dwarf consumer interface initialization and termination operations */
1504bc1f688bSRobert Mustacchi 
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 
1534bc1f688bSRobert Mustacchi int dwarf_init(int    /*fd*/,
1535bc1f688bSRobert Mustacchi     Dwarf_Unsigned    /*access*/,
1536bc1f688bSRobert Mustacchi     Dwarf_Handler     /*errhand*/,
1537bc1f688bSRobert Mustacchi     Dwarf_Ptr         /*errarg*/,
1538bc1f688bSRobert Mustacchi     Dwarf_Debug*      /*dbg*/,
1539bc1f688bSRobert Mustacchi     Dwarf_Error*      /*error*/);
1540bc1f688bSRobert Mustacchi 
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. */
1544bc1f688bSRobert 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*/);
1553bc1f688bSRobert Mustacchi int dwarf_elf_init(dwarf_elf_handle /*elf*/,
1554bc1f688bSRobert Mustacchi     Dwarf_Unsigned    /*access*/,
1555bc1f688bSRobert Mustacchi     Dwarf_Handler     /*errhand*/,
1556bc1f688bSRobert Mustacchi     Dwarf_Ptr         /*errarg*/,
1557bc1f688bSRobert Mustacchi     Dwarf_Debug*      /*dbg*/,
1558bc1f688bSRobert Mustacchi     Dwarf_Error*      /*error*/);
1559bc1f688bSRobert Mustacchi 
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 
1569bc1f688bSRobert Mustacchi /* Undocumented function for memory allocator. */
1570bc1f688bSRobert Mustacchi void dwarf_print_memory_stats(Dwarf_Debug  /*dbg*/);
1571bc1f688bSRobert Mustacchi 
1572bc1f688bSRobert Mustacchi int dwarf_get_elf(Dwarf_Debug /*dbg*/,
1573bc1f688bSRobert Mustacchi     dwarf_elf_handle* /*return_elfptr*/,
1574bc1f688bSRobert Mustacchi     Dwarf_Error*      /*error*/);
1575bc1f688bSRobert Mustacchi 
1576bc1f688bSRobert Mustacchi int dwarf_finish(Dwarf_Debug /*dbg*/, Dwarf_Error* /*error*/);
1577bc1f688bSRobert Mustacchi 
1578bc1f688bSRobert Mustacchi 
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 
1587bc1f688bSRobert Mustacchi int dwarf_object_init(Dwarf_Obj_Access_Interface* /*obj*/,
1588bc1f688bSRobert Mustacchi     Dwarf_Handler /*errhand*/,
1589bc1f688bSRobert Mustacchi     Dwarf_Ptr     /*errarg*/,
1590bc1f688bSRobert Mustacchi     Dwarf_Debug*  /*dbg*/,
1591bc1f688bSRobert Mustacchi     Dwarf_Error*  /*error*/);
1592bc1f688bSRobert 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 
1602bc1f688bSRobert Mustacchi int dwarf_object_finish(Dwarf_Debug /*dbg*/,
1603bc1f688bSRobert Mustacchi     Dwarf_Error* /*error*/);
1604bc1f688bSRobert 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     */
1654bc1f688bSRobert Mustacchi int dwarf_next_cu_header_b(Dwarf_Debug /*dbg*/,
1655bc1f688bSRobert Mustacchi     Dwarf_Unsigned* /*cu_header_length*/,
1656bc1f688bSRobert Mustacchi     Dwarf_Half*     /*version_stamp*/,
1657bc1f688bSRobert Mustacchi     Dwarf_Off*      /*abbrev_offset*/,
1658bc1f688bSRobert Mustacchi     Dwarf_Half*     /*address_size*/,
1659bc1f688bSRobert Mustacchi     Dwarf_Half*     /*length_size*/,
1660bc1f688bSRobert Mustacchi     Dwarf_Half*     /*extension_size*/,
1661bc1f688bSRobert Mustacchi     Dwarf_Unsigned* /*next_cu_header_offset*/,
1662bc1f688bSRobert 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*/,
1677*4d9fdb46SRobert Mustacchi     Dwarf_Unsigned* /*next_cu_header_offset*/,
1678*4d9fdb46SRobert Mustacchi     Dwarf_Error*    /*error*/);
1679*4d9fdb46SRobert Mustacchi /* The following is obsolete, though supported. November 2009. */
1680bc1f688bSRobert Mustacchi int dwarf_next_cu_header(Dwarf_Debug /*dbg*/,
1681bc1f688bSRobert Mustacchi     Dwarf_Unsigned* /*cu_header_length*/,
1682bc1f688bSRobert Mustacchi     Dwarf_Half*     /*version_stamp*/,
1683bc1f688bSRobert Mustacchi     Dwarf_Off*      /*abbrev_offset*/,
1684bc1f688bSRobert Mustacchi     Dwarf_Half*     /*address_size*/,
1685bc1f688bSRobert Mustacchi     Dwarf_Unsigned* /*next_cu_header_offset*/,
1686bc1f688bSRobert Mustacchi     Dwarf_Error*    /*error*/);
1687bc1f688bSRobert Mustacchi 
1688bc1f688bSRobert Mustacchi int dwarf_siblingof(Dwarf_Debug /*dbg*/,
1689bc1f688bSRobert Mustacchi     Dwarf_Die        /*die*/,
1690bc1f688bSRobert Mustacchi     Dwarf_Die*       /*return_siblingdie*/,
1691bc1f688bSRobert Mustacchi     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*/,
1697*4d9fdb46SRobert Mustacchi     Dwarf_Error*     /*error*/);
1698*4d9fdb46SRobert Mustacchi 
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 */,
1704*4d9fdb46SRobert Mustacchi     Dwarf_Error*     /*error*/);
1705bc1f688bSRobert Mustacchi 
1706bc1f688bSRobert Mustacchi int dwarf_child(Dwarf_Die /*die*/,
1707bc1f688bSRobert Mustacchi     Dwarf_Die*       /*return_childdie*/,
1708bc1f688bSRobert Mustacchi     Dwarf_Error*     /*error*/);
1709bc1f688bSRobert Mustacchi 
1710*4d9fdb46SRobert Mustacchi /*  Finding die given global (not CU-relative) offset.
1711*4d9fdb46SRobert Mustacchi     Applies only to debug_info. */
1712bc1f688bSRobert Mustacchi int dwarf_offdie(Dwarf_Debug /*dbg*/,
1713bc1f688bSRobert Mustacchi     Dwarf_Off        /*offset*/,
1714bc1f688bSRobert Mustacchi     Dwarf_Die*       /*return_die*/,
1715bc1f688bSRobert Mustacchi     Dwarf_Error*     /*error*/);
1716bc1f688bSRobert Mustacchi 
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*/,
1723bc1f688bSRobert Mustacchi     Dwarf_Die*       /*return_die*/,
1724bc1f688bSRobert Mustacchi     Dwarf_Error*     /*error*/);
1725bc1f688bSRobert Mustacchi 
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*/);
1731bc1f688bSRobert 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*/,
1738bc1f688bSRobert Mustacchi     Dwarf_Error*      /*error*/);
1739bc1f688bSRobert Mustacchi 
1740bc1f688bSRobert Mustacchi /*  operations on DIEs */
1741bc1f688bSRobert Mustacchi int dwarf_tag(Dwarf_Die /*die*/,
1742bc1f688bSRobert Mustacchi     Dwarf_Half*      /*return_tag*/,
1743bc1f688bSRobert Mustacchi     Dwarf_Error*     /*error*/);
1744bc1f688bSRobert Mustacchi 
1745bc1f688bSRobert Mustacchi /*  dwarf_dieoffset returns the global debug_info
1746bc1f688bSRobert Mustacchi     section offset, not the CU relative offset. */
1747bc1f688bSRobert Mustacchi int dwarf_dieoffset(Dwarf_Die /*die*/,
1748bc1f688bSRobert Mustacchi     Dwarf_Off*       /*return_offset*/,
1749bc1f688bSRobert Mustacchi     Dwarf_Error*     /*error*/);
1750bc1f688bSRobert Mustacchi 
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 
1769bc1f688bSRobert Mustacchi /*  dwarf_CU_dieoffset_given_die returns
1770bc1f688bSRobert Mustacchi     the global debug_info section offset of the CU die
1771bc1f688bSRobert Mustacchi     that is the CU containing the given_die
1772bc1f688bSRobert Mustacchi     (the passed in DIE can be any DIE).
1773bc1f688bSRobert Mustacchi     This information makes it possible for a consumer to
1774bc1f688bSRobert Mustacchi     find and print CU context information for any die.
1775*4d9fdb46SRobert Mustacchi     See also dwarf_get_cu_die_offset_given_cu_header_offset. */
1776bc1f688bSRobert Mustacchi int dwarf_CU_dieoffset_given_die(Dwarf_Die /*given_die*/,
1777bc1f688bSRobert Mustacchi     Dwarf_Off*       /*return_offset*/,
1778bc1f688bSRobert Mustacchi     Dwarf_Error*     /*error*/);
1779bc1f688bSRobert Mustacchi 
1780bc1f688bSRobert Mustacchi /*  dwarf_die_CU_offset returns the CU relative offset
1781bc1f688bSRobert Mustacchi     not the global debug_info section offset, given
1782*4d9fdb46SRobert Mustacchi     any DIE in the CU.  See also dwarf_CU_dieoffset_given_die.
1783bc1f688bSRobert Mustacchi     */
1784bc1f688bSRobert Mustacchi int dwarf_die_CU_offset(Dwarf_Die /*die*/,
1785bc1f688bSRobert Mustacchi     Dwarf_Off*       /*return_offset*/,
1786bc1f688bSRobert Mustacchi     Dwarf_Error*     /*error*/);
1787bc1f688bSRobert Mustacchi 
1788bc1f688bSRobert Mustacchi int dwarf_die_CU_offset_range(Dwarf_Die /*die*/,
1789bc1f688bSRobert Mustacchi     Dwarf_Off*       /*return_CU_header_offset*/,
1790bc1f688bSRobert Mustacchi     Dwarf_Off*       /*return_CU_length_bytes*/,
1791bc1f688bSRobert Mustacchi     Dwarf_Error*     /*error*/);
1792bc1f688bSRobert Mustacchi 
1793bc1f688bSRobert Mustacchi int dwarf_attr (Dwarf_Die /*die*/,
1794bc1f688bSRobert Mustacchi     Dwarf_Half        /*attr*/,
1795bc1f688bSRobert Mustacchi     Dwarf_Attribute * /*returned_attr*/,
1796bc1f688bSRobert Mustacchi     Dwarf_Error*      /*error*/);
1797bc1f688bSRobert Mustacchi 
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 
1803bc1f688bSRobert Mustacchi int dwarf_diename(Dwarf_Die /*die*/,
1804bc1f688bSRobert Mustacchi     char   **        /*diename*/,
1805bc1f688bSRobert Mustacchi     Dwarf_Error*     /*error*/);
1806bc1f688bSRobert Mustacchi 
1807bc1f688bSRobert Mustacchi /* Returns the  abbrev code of the die. Cannot fail. */
1808bc1f688bSRobert Mustacchi int dwarf_die_abbrev_code(Dwarf_Die /*die */);
1809bc1f688bSRobert Mustacchi 
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*/);
1814bc1f688bSRobert 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 */
1826bc1f688bSRobert Mustacchi int dwarf_hasattr(Dwarf_Die /*die*/,
1827bc1f688bSRobert Mustacchi     Dwarf_Half   /*attr*/,
1828bc1f688bSRobert Mustacchi     Dwarf_Bool * /*returned_bool*/,
1829bc1f688bSRobert Mustacchi     Dwarf_Error* /*error*/);
1830bc1f688bSRobert Mustacchi 
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*/,
1903*4d9fdb46SRobert Mustacchi     Dwarf_Error*     /*error*/);
1904*4d9fdb46SRobert Mustacchi 
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).  */
1935bc1f688bSRobert Mustacchi int dwarf_loclist_n(Dwarf_Attribute /*attr*/,
1936bc1f688bSRobert Mustacchi     Dwarf_Locdesc*** /*llbuf*/,
1937bc1f688bSRobert Mustacchi     Dwarf_Signed *   /*locCount*/,
1938bc1f688bSRobert Mustacchi     Dwarf_Error*     /*error*/);
1939bc1f688bSRobert Mustacchi 
1940*4d9fdb46SRobert Mustacchi /*  The original interfaces.  Please do not use this. */
1941bc1f688bSRobert Mustacchi int dwarf_loclist(Dwarf_Attribute /*attr*/,  /* inflexible! */
1942bc1f688bSRobert Mustacchi     Dwarf_Locdesc**  /*llbuf*/,
1943bc1f688bSRobert Mustacchi     Dwarf_Signed *   /*locCount*/,
1944bc1f688bSRobert Mustacchi     Dwarf_Error*     /*error*/);
1945bc1f688bSRobert Mustacchi 
1946bc1f688bSRobert Mustacchi /* Extracts a dwarf expression from an expression byte stream.
1947bc1f688bSRobert Mustacchi    Useful to get expressions from DW_CFA_def_cfa_expression
1948bc1f688bSRobert Mustacchi    DW_CFA_expression DW_CFA_val_expression expression bytes.
1949*4d9fdb46SRobert Mustacchi    27 April 2009: dwarf_loclist_from_expr interface with
1950bc1f688bSRobert Mustacchi    no addr_size is obsolete but supported,
1951*4d9fdb46SRobert Mustacchi    use dwarf_loclist_from_expr_a instead.
1952bc1f688bSRobert Mustacchi */
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*/,
1958bc1f688bSRobert Mustacchi     Dwarf_Error *  /* error*/ );
1959bc1f688bSRobert 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*/,
1968bc1f688bSRobert Mustacchi     Dwarf_Error *  /*error*/);
1969bc1f688bSRobert Mustacchi 
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*/ ,
1983bc1f688bSRobert Mustacchi     Dwarf_Error *  /*error*/ );
1984bc1f688bSRobert Mustacchi 
1985bc1f688bSRobert Mustacchi int dwarf_lowpc(Dwarf_Die /*die*/,
1986bc1f688bSRobert Mustacchi     Dwarf_Addr  *    /*returned_addr*/,
1987bc1f688bSRobert Mustacchi     Dwarf_Error*     /*error*/);
1988bc1f688bSRobert Mustacchi 
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 */
2003bc1f688bSRobert Mustacchi int dwarf_highpc(Dwarf_Die /*die*/,
2004bc1f688bSRobert Mustacchi     Dwarf_Addr  *    /*returned_addr*/,
2005bc1f688bSRobert Mustacchi     Dwarf_Error*     /*error*/);
2006bc1f688bSRobert Mustacchi 
2007*4d9fdb46SRobert Mustacchi /*  New January 2016. */
2008*4d9fdb46SRobert Mustacchi int dwarf_dietype_offset(Dwarf_Die /*die*/,
2009*4d9fdb46SRobert Mustacchi     Dwarf_Off   * /*return_off*/,
2010bc1f688bSRobert Mustacchi     Dwarf_Error * /*error*/);
2011bc1f688bSRobert Mustacchi 
2012*4d9fdb46SRobert Mustacchi int dwarf_bytesize(Dwarf_Die /*die*/,
2013*4d9fdb46SRobert Mustacchi     Dwarf_Unsigned * /*returned_size*/,
2014bc1f688bSRobert Mustacchi     Dwarf_Error*     /*error*/);
2015bc1f688bSRobert Mustacchi 
2016bc1f688bSRobert Mustacchi int dwarf_bitsize(Dwarf_Die /*die*/,
2017bc1f688bSRobert Mustacchi     Dwarf_Unsigned * /*returned_size*/,
2018bc1f688bSRobert Mustacchi     Dwarf_Error*     /*error*/);
2019bc1f688bSRobert Mustacchi 
2020bc1f688bSRobert Mustacchi int dwarf_bitoffset(Dwarf_Die /*die*/,
2021bc1f688bSRobert Mustacchi     Dwarf_Unsigned * /*returned_offset*/,
2022bc1f688bSRobert Mustacchi     Dwarf_Error*     /*error*/);
2023bc1f688bSRobert Mustacchi 
2024bc1f688bSRobert Mustacchi int dwarf_srclang(Dwarf_Die /*die*/,
2025bc1f688bSRobert Mustacchi     Dwarf_Unsigned * /*returned_lang*/,
2026bc1f688bSRobert Mustacchi     Dwarf_Error*     /*error*/);
2027bc1f688bSRobert Mustacchi 
2028bc1f688bSRobert Mustacchi int dwarf_arrayorder(Dwarf_Die /*die*/,
2029bc1f688bSRobert Mustacchi     Dwarf_Unsigned * /*returned_order*/,
2030bc1f688bSRobert Mustacchi     Dwarf_Error*     /*error*/);
2031bc1f688bSRobert Mustacchi 
2032bc1f688bSRobert Mustacchi /* end of convenience function list */
2033bc1f688bSRobert Mustacchi 
2034bc1f688bSRobert Mustacchi /* this is the main interface to attributes of a DIE */
2035bc1f688bSRobert Mustacchi int dwarf_attrlist(Dwarf_Die /*die*/,
2036bc1f688bSRobert Mustacchi     Dwarf_Attribute** /*attrbuf*/,
2037bc1f688bSRobert Mustacchi     Dwarf_Signed   * /*attrcount*/,
2038bc1f688bSRobert Mustacchi     Dwarf_Error*     /*error*/);
2039bc1f688bSRobert Mustacchi 
2040bc1f688bSRobert Mustacchi /* query operations for attributes */
2041bc1f688bSRobert Mustacchi int dwarf_hasform(Dwarf_Attribute /*attr*/,
2042bc1f688bSRobert Mustacchi     Dwarf_Half       /*form*/,
2043bc1f688bSRobert Mustacchi     Dwarf_Bool *     /*returned_bool*/,
2044bc1f688bSRobert Mustacchi     Dwarf_Error*     /*error*/);
2045bc1f688bSRobert Mustacchi 
2046bc1f688bSRobert Mustacchi int dwarf_whatform(Dwarf_Attribute /*attr*/,
2047*4d9fdb46SRobert Mustacchi     Dwarf_Half *     /*returned_final_form*/,
2048bc1f688bSRobert Mustacchi     Dwarf_Error*     /*error*/);
2049bc1f688bSRobert Mustacchi 
2050bc1f688bSRobert Mustacchi int dwarf_whatform_direct(Dwarf_Attribute /*attr*/,
2051*4d9fdb46SRobert Mustacchi     Dwarf_Half *     /*returned_initial_form*/,
2052bc1f688bSRobert Mustacchi     Dwarf_Error*     /*error*/);
2053bc1f688bSRobert Mustacchi int dwarf_whatattr(Dwarf_Attribute /*attr*/,
2054bc1f688bSRobert Mustacchi     Dwarf_Half *     /*returned_attr_num*/,
2055bc1f688bSRobert Mustacchi     Dwarf_Error*     /*error*/);
2056bc1f688bSRobert Mustacchi 
2057bc1f688bSRobert Mustacchi /*
2058bc1f688bSRobert Mustacchi     The following are concerned with the Primary Interface: getting
2059bc1f688bSRobert Mustacchi     the actual data values. One function per 'kind' of FORM.
2060bc1f688bSRobert Mustacchi */
2061bc1f688bSRobert Mustacchi /*  dwarf_formref returns, thru return_offset, a CU-relative offset
2062bc1f688bSRobert Mustacchi     and does not allow DW_FORM_ref_addr*/
2063bc1f688bSRobert Mustacchi int dwarf_formref(Dwarf_Attribute /*attr*/,
2064bc1f688bSRobert Mustacchi     Dwarf_Off*       /*return_offset*/,
2065bc1f688bSRobert Mustacchi     Dwarf_Error*     /*error*/);
2066bc1f688bSRobert Mustacchi /*  dwarf_global_formref returns, thru return_offset,
2067bc1f688bSRobert Mustacchi     a debug_info-relative offset and does allow all reference forms*/
2068bc1f688bSRobert Mustacchi int dwarf_global_formref(Dwarf_Attribute /*attr*/,
2069bc1f688bSRobert Mustacchi     Dwarf_Off*       /*return_offset*/,
2070bc1f688bSRobert Mustacchi     Dwarf_Error*     /*error*/);
2071bc1f688bSRobert Mustacchi 
2072bc1f688bSRobert Mustacchi /*  dwarf_formsig8 returns in the caller-provided 8 byte area
2073bc1f688bSRobert Mustacchi     the 8 bytes of a DW_FORM_ref_sig8.  Not a string.  */
2074bc1f688bSRobert Mustacchi int dwarf_formsig8(Dwarf_Attribute /*attr*/,
2075bc1f688bSRobert Mustacchi     Dwarf_Sig8 * /*returned sig bytes*/,
2076bc1f688bSRobert Mustacchi     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*/);
2082bc1f688bSRobert Mustacchi 
2083bc1f688bSRobert Mustacchi int dwarf_formaddr(Dwarf_Attribute /*attr*/,
2084bc1f688bSRobert Mustacchi     Dwarf_Addr   *   /*returned_addr*/,
2085bc1f688bSRobert Mustacchi     Dwarf_Error*     /*error*/);
2086bc1f688bSRobert Mustacchi 
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 
2095bc1f688bSRobert Mustacchi int dwarf_formflag(Dwarf_Attribute /*attr*/,
2096bc1f688bSRobert Mustacchi     Dwarf_Bool *     /*returned_bool*/,
2097bc1f688bSRobert Mustacchi     Dwarf_Error*     /*error*/);
2098bc1f688bSRobert Mustacchi 
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 
2103bc1f688bSRobert Mustacchi int dwarf_formudata(Dwarf_Attribute /*attr*/,
2104bc1f688bSRobert Mustacchi     Dwarf_Unsigned  * /*returned_val*/,
2105bc1f688bSRobert Mustacchi     Dwarf_Error*     /*error*/);
2106bc1f688bSRobert Mustacchi 
2107bc1f688bSRobert Mustacchi int dwarf_formsdata(Dwarf_Attribute     /*attr*/,
2108bc1f688bSRobert Mustacchi     Dwarf_Signed  *  /*returned_val*/,
2109bc1f688bSRobert Mustacchi     Dwarf_Error*     /*error*/);
2110bc1f688bSRobert Mustacchi 
2111bc1f688bSRobert Mustacchi int dwarf_formblock(Dwarf_Attribute /*attr*/,
2112bc1f688bSRobert Mustacchi     Dwarf_Block    ** /*returned_block*/,
2113bc1f688bSRobert Mustacchi     Dwarf_Error*     /*error*/);
2114bc1f688bSRobert Mustacchi 
2115bc1f688bSRobert Mustacchi int dwarf_formstring(Dwarf_Attribute /*attr*/,
2116bc1f688bSRobert Mustacchi     char   **        /*returned_string*/,
2117bc1f688bSRobert Mustacchi     Dwarf_Error*     /*error*/);
2118bc1f688bSRobert Mustacchi 
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 
2128bc1f688bSRobert Mustacchi int dwarf_formexprloc(Dwarf_Attribute /*attr*/,
2129bc1f688bSRobert Mustacchi     Dwarf_Unsigned * /*return_exprlen*/,
2130bc1f688bSRobert Mustacchi     Dwarf_Ptr  * /*block_ptr*/,
2131bc1f688bSRobert Mustacchi     Dwarf_Error * /*error*/);
2132bc1f688bSRobert Mustacchi 
2133bc1f688bSRobert Mustacchi 
2134bc1f688bSRobert Mustacchi /* end attribute query operations. */
2135bc1f688bSRobert Mustacchi 
2136*4d9fdb46SRobert Mustacchi /* Start line number operations */
2137*4d9fdb46SRobert Mustacchi /* dwarf_srclines  is the original interface from 1993. */
2138bc1f688bSRobert Mustacchi int dwarf_srclines(Dwarf_Die /*die*/,
2139bc1f688bSRobert Mustacchi     Dwarf_Line**     /*linebuf*/,
2140bc1f688bSRobert Mustacchi     Dwarf_Signed *   /*linecount*/,
2141bc1f688bSRobert Mustacchi     Dwarf_Error*     /*error*/);
2142bc1f688bSRobert 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*/,
2157*4d9fdb46SRobert Mustacchi     Dwarf_Signed *   /*linecount*/,
2158*4d9fdb46SRobert Mustacchi     Dwarf_Line**     /*linebuf_actuals*/,
2159*4d9fdb46SRobert Mustacchi     Dwarf_Signed *   /*linecount_actuals*/,
2160*4d9fdb46SRobert Mustacchi     Dwarf_Error*     /*error*/);
2161*4d9fdb46SRobert Mustacchi 
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 
2172bc1f688bSRobert Mustacchi void dwarf_srclines_dealloc(Dwarf_Debug /*dbg*/,
2173bc1f688bSRobert Mustacchi     Dwarf_Line*       /*linebuf*/,
2174bc1f688bSRobert Mustacchi     Dwarf_Signed      /*count */);
2175bc1f688bSRobert Mustacchi 
2176bc1f688bSRobert Mustacchi 
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.  */
2340bc1f688bSRobert Mustacchi int dwarf_srcfiles(Dwarf_Die /*die*/,
2341bc1f688bSRobert Mustacchi     char***          /*srcfiles*/,
2342bc1f688bSRobert Mustacchi     Dwarf_Signed *   /*filecount*/,
2343bc1f688bSRobert Mustacchi     Dwarf_Error*     /*error*/);
2344bc1f688bSRobert Mustacchi 
2345bc1f688bSRobert Mustacchi int dwarf_linebeginstatement(Dwarf_Line /*line*/,
2346bc1f688bSRobert Mustacchi     Dwarf_Bool  *    /*returned_bool*/,
2347bc1f688bSRobert Mustacchi     Dwarf_Error*     /*error*/);
2348bc1f688bSRobert Mustacchi 
2349bc1f688bSRobert Mustacchi int dwarf_lineendsequence(Dwarf_Line /*line*/,
2350bc1f688bSRobert Mustacchi     Dwarf_Bool  *    /*returned_bool*/,
2351bc1f688bSRobert Mustacchi     Dwarf_Error*     /*error*/);
2352bc1f688bSRobert Mustacchi 
2353bc1f688bSRobert Mustacchi int dwarf_lineno(Dwarf_Line /*line*/,
2354bc1f688bSRobert Mustacchi     Dwarf_Unsigned * /*returned_lineno*/,
2355bc1f688bSRobert Mustacchi     Dwarf_Error*     /*error*/);
2356bc1f688bSRobert Mustacchi 
2357bc1f688bSRobert Mustacchi int dwarf_line_srcfileno(Dwarf_Line /*line*/,
2358bc1f688bSRobert Mustacchi     Dwarf_Unsigned * /*ret_fileno*/,
2359bc1f688bSRobert Mustacchi     Dwarf_Error *    /*error*/);
2360bc1f688bSRobert 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*/,
2364*4d9fdb46SRobert Mustacchi     Dwarf_Error *    /*error*/);
2365*4d9fdb46SRobert Mustacchi 
2366bc1f688bSRobert Mustacchi int dwarf_lineaddr(Dwarf_Line /*line*/,
2367bc1f688bSRobert Mustacchi     Dwarf_Addr *     /*returned_addr*/,
2368bc1f688bSRobert Mustacchi     Dwarf_Error*     /*error*/);
2369bc1f688bSRobert Mustacchi 
2370*4d9fdb46SRobert Mustacchi /* dwarf_lineoff is OBSOLETE as of December 2011. Do not use. */
2371bc1f688bSRobert Mustacchi int dwarf_lineoff(Dwarf_Line /*line*/,
2372bc1f688bSRobert Mustacchi     Dwarf_Signed  *  /*returned_lineoffset*/,
2373bc1f688bSRobert Mustacchi     Dwarf_Error*     /*error*/);
2374bc1f688bSRobert Mustacchi 
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 
2382bc1f688bSRobert Mustacchi int dwarf_linesrc(Dwarf_Line /*line*/,
2383bc1f688bSRobert Mustacchi     char   **        /*returned_name*/,
2384bc1f688bSRobert Mustacchi     Dwarf_Error*     /*error*/);
2385bc1f688bSRobert Mustacchi 
2386bc1f688bSRobert Mustacchi int dwarf_lineblock(Dwarf_Line /*line*/,
2387bc1f688bSRobert Mustacchi     Dwarf_Bool  *    /*returned_bool*/,
2388bc1f688bSRobert Mustacchi     Dwarf_Error*     /*error*/);
2389bc1f688bSRobert Mustacchi 
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 */,
2397bc1f688bSRobert Mustacchi     Dwarf_Error *    /*error*/);
2398*4d9fdb46SRobert Mustacchi /* End line table operations */
2399bc1f688bSRobert 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*/,
2413*4d9fdb46SRobert Mustacchi     Dwarf_Error*     /*error*/);
2414*4d9fdb46SRobert Mustacchi 
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 
2637bc1f688bSRobert Mustacchi int dwarf_get_globals(Dwarf_Debug /*dbg*/,
2638bc1f688bSRobert Mustacchi     Dwarf_Global**   /*globals*/,
2639bc1f688bSRobert Mustacchi     Dwarf_Signed *   /*number_of_globals*/,
2640bc1f688bSRobert Mustacchi     Dwarf_Error*     /*error*/);
2641bc1f688bSRobert Mustacchi void dwarf_globals_dealloc(Dwarf_Debug /*dbg*/,
2642bc1f688bSRobert Mustacchi     Dwarf_Global*    /*globals*/,
2643bc1f688bSRobert Mustacchi     Dwarf_Signed     /*number_of_globals*/);
2644bc1f688bSRobert Mustacchi 
2645bc1f688bSRobert Mustacchi int dwarf_globname(Dwarf_Global /*glob*/,
2646bc1f688bSRobert Mustacchi     char   **        /*returned_name*/,
2647bc1f688bSRobert Mustacchi     Dwarf_Error*     /*error*/);
2648bc1f688bSRobert Mustacchi 
2649bc1f688bSRobert Mustacchi int dwarf_global_die_offset(Dwarf_Global /*global*/,
2650bc1f688bSRobert Mustacchi     Dwarf_Off*       /*return_offset*/,
2651bc1f688bSRobert Mustacchi     Dwarf_Error *    /*error*/);
2652bc1f688bSRobert Mustacchi 
2653bc1f688bSRobert Mustacchi /* This returns the CU die global offset if one knows the
2654bc1f688bSRobert Mustacchi    CU header global offset.
2655bc1f688bSRobert Mustacchi    See also dwarf_CU_dieoffset_given_die(). */
2656bc1f688bSRobert Mustacchi int dwarf_get_cu_die_offset_given_cu_header_offset(
2657bc1f688bSRobert Mustacchi     Dwarf_Debug      /*dbg*/,
2658bc1f688bSRobert Mustacchi     Dwarf_Off        /*in_cu_header_offset*/,
2659bc1f688bSRobert Mustacchi     Dwarf_Off *  /*out_cu_die_offset*/,
2660bc1f688bSRobert Mustacchi     Dwarf_Error *    /*err*/);
2661*4d9fdb46SRobert Mustacchi 
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 
2671bc1f688bSRobert Mustacchi #ifdef __sgi /* pragma is sgi MIPS only */
2672bc1f688bSRobert Mustacchi #pragma optional dwarf_get_cu_die_offset_given_cu_header_offset
2673bc1f688bSRobert Mustacchi #endif
2674bc1f688bSRobert Mustacchi 
2675bc1f688bSRobert Mustacchi int dwarf_global_cu_offset(Dwarf_Global /*global*/,
2676bc1f688bSRobert Mustacchi     Dwarf_Off*       /*return_offset*/,
2677bc1f688bSRobert Mustacchi     Dwarf_Error*     /*error*/);
2678bc1f688bSRobert Mustacchi 
2679bc1f688bSRobert Mustacchi int dwarf_global_name_offsets(Dwarf_Global /*global*/,
2680bc1f688bSRobert Mustacchi     char   **        /*returned_name*/,
2681bc1f688bSRobert Mustacchi     Dwarf_Off*       /*die_offset*/,
2682bc1f688bSRobert Mustacchi     Dwarf_Off*       /*cu_offset*/,
2683bc1f688bSRobert Mustacchi     Dwarf_Error*     /*error*/);
2684bc1f688bSRobert Mustacchi 
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 
2699bc1f688bSRobert Mustacchi /* Static function name operations.  */
2700bc1f688bSRobert Mustacchi int dwarf_get_funcs(Dwarf_Debug    /*dbg*/,
2701bc1f688bSRobert Mustacchi     Dwarf_Func**     /*funcs*/,
2702bc1f688bSRobert Mustacchi     Dwarf_Signed *   /*number_of_funcs*/,
2703bc1f688bSRobert Mustacchi     Dwarf_Error*     /*error*/);
2704bc1f688bSRobert Mustacchi void dwarf_funcs_dealloc(Dwarf_Debug /*dbg*/,
2705bc1f688bSRobert Mustacchi     Dwarf_Func*      /*funcs*/,
2706bc1f688bSRobert Mustacchi     Dwarf_Signed     /*number_of_funcs*/);
2707bc1f688bSRobert Mustacchi 
2708bc1f688bSRobert Mustacchi int dwarf_funcname(Dwarf_Func /*func*/,
2709bc1f688bSRobert Mustacchi     char   **        /*returned_name*/,
2710bc1f688bSRobert Mustacchi     Dwarf_Error*     /*error*/);
2711bc1f688bSRobert Mustacchi 
2712bc1f688bSRobert Mustacchi int dwarf_func_die_offset(Dwarf_Func /*func*/,
2713bc1f688bSRobert Mustacchi     Dwarf_Off*       /*return_offset*/,
2714bc1f688bSRobert Mustacchi     Dwarf_Error*     /*error*/);
2715bc1f688bSRobert Mustacchi 
2716bc1f688bSRobert Mustacchi int dwarf_func_cu_offset(Dwarf_Func /*func*/,
2717bc1f688bSRobert Mustacchi     Dwarf_Off*       /*return_offset*/,
2718bc1f688bSRobert Mustacchi     Dwarf_Error*     /*error*/);
2719bc1f688bSRobert Mustacchi 
2720bc1f688bSRobert Mustacchi int dwarf_func_name_offsets(Dwarf_Func /*func*/,
2721bc1f688bSRobert Mustacchi     char   **        /*returned_name*/,
2722bc1f688bSRobert Mustacchi     Dwarf_Off*       /*die_offset*/,
2723bc1f688bSRobert Mustacchi     Dwarf_Off*       /*cu_offset*/,
2724bc1f688bSRobert Mustacchi     Dwarf_Error*     /*error*/);
2725bc1f688bSRobert Mustacchi 
2726bc1f688bSRobert Mustacchi /* User-defined type name operations, SGI IRIX .debug_typenames section.
2727bc1f688bSRobert Mustacchi    Same content as DWARF3 .debug_pubtypes, but defined years before
2728bc1f688bSRobert Mustacchi    .debug_pubtypes was defined.   SGI IRIX only. */
2729bc1f688bSRobert Mustacchi int dwarf_get_types(Dwarf_Debug    /*dbg*/,
2730bc1f688bSRobert Mustacchi     Dwarf_Type**     /*types*/,
2731bc1f688bSRobert Mustacchi     Dwarf_Signed *   /*number_of_types*/,
2732bc1f688bSRobert Mustacchi     Dwarf_Error*     /*error*/);
2733bc1f688bSRobert Mustacchi void dwarf_types_dealloc(Dwarf_Debug /*dbg*/,
2734bc1f688bSRobert Mustacchi     Dwarf_Type*      /*types*/,
2735bc1f688bSRobert Mustacchi     Dwarf_Signed     /*number_of_types*/);
2736bc1f688bSRobert Mustacchi 
2737bc1f688bSRobert Mustacchi 
2738bc1f688bSRobert Mustacchi int dwarf_typename(Dwarf_Type /*type*/,
2739bc1f688bSRobert Mustacchi     char   **        /*returned_name*/,
2740bc1f688bSRobert Mustacchi     Dwarf_Error*     /*error*/);
2741bc1f688bSRobert Mustacchi 
2742bc1f688bSRobert Mustacchi int dwarf_type_die_offset(Dwarf_Type /*type*/,
2743bc1f688bSRobert Mustacchi     Dwarf_Off*       /*return_offset*/,
2744bc1f688bSRobert Mustacchi     Dwarf_Error*     /*error*/);
2745bc1f688bSRobert Mustacchi 
2746bc1f688bSRobert Mustacchi int dwarf_type_cu_offset(Dwarf_Type /*type*/,
2747bc1f688bSRobert Mustacchi     Dwarf_Off*       /*return_offset*/,
2748bc1f688bSRobert Mustacchi     Dwarf_Error*     /*error*/);
2749bc1f688bSRobert Mustacchi 
2750bc1f688bSRobert Mustacchi int dwarf_type_name_offsets(Dwarf_Type    /*type*/,
2751bc1f688bSRobert Mustacchi     char   **        /*returned_name*/,
2752bc1f688bSRobert Mustacchi     Dwarf_Off*       /*die_offset*/,
2753bc1f688bSRobert Mustacchi     Dwarf_Off*       /*cu_offset*/,
2754bc1f688bSRobert Mustacchi     Dwarf_Error*     /*error*/);
2755bc1f688bSRobert Mustacchi 
2756bc1f688bSRobert Mustacchi /* User-defined type name operations, DWARF3  .debug_pubtypes section.
2757bc1f688bSRobert Mustacchi */
2758bc1f688bSRobert Mustacchi int dwarf_get_pubtypes(Dwarf_Debug    /*dbg*/,
2759bc1f688bSRobert Mustacchi     Dwarf_Type**     /*types*/,
2760bc1f688bSRobert Mustacchi     Dwarf_Signed *   /*number_of_types*/,
2761bc1f688bSRobert Mustacchi     Dwarf_Error*     /*error*/);
2762bc1f688bSRobert Mustacchi void dwarf_pubtypes_dealloc(Dwarf_Debug /*dbg*/,
2763bc1f688bSRobert Mustacchi     Dwarf_Type*      /*pubtypes*/,
2764bc1f688bSRobert Mustacchi     Dwarf_Signed     /*number_of_pubtypes*/);
2765bc1f688bSRobert Mustacchi 
2766bc1f688bSRobert Mustacchi 
2767bc1f688bSRobert Mustacchi int dwarf_pubtypename(Dwarf_Type /*type*/,
2768bc1f688bSRobert Mustacchi     char   **        /*returned_name*/,
2769bc1f688bSRobert Mustacchi     Dwarf_Error*     /*error*/);
2770bc1f688bSRobert Mustacchi 
2771*4d9fdb46SRobert Mustacchi int dwarf_pubtype_type_die_offset(Dwarf_Type /*type*/,
2772bc1f688bSRobert Mustacchi     Dwarf_Off*       /*return_offset*/,
2773bc1f688bSRobert Mustacchi     Dwarf_Error*     /*error*/);
2774bc1f688bSRobert Mustacchi 
2775bc1f688bSRobert Mustacchi int dwarf_pubtype_cu_offset(Dwarf_Type /*type*/,
2776bc1f688bSRobert Mustacchi     Dwarf_Off*       /*return_offset*/,
2777bc1f688bSRobert Mustacchi     Dwarf_Error*     /*error*/);
2778bc1f688bSRobert Mustacchi 
2779bc1f688bSRobert Mustacchi int dwarf_pubtype_name_offsets(Dwarf_Type    /*type*/,
2780bc1f688bSRobert Mustacchi     char   **        /*returned_name*/,
2781bc1f688bSRobert Mustacchi     Dwarf_Off*       /*die_offset*/,
2782bc1f688bSRobert Mustacchi     Dwarf_Off*       /*cu_offset*/,
2783bc1f688bSRobert Mustacchi     Dwarf_Error*     /*error*/);
2784bc1f688bSRobert Mustacchi 
2785bc1f688bSRobert Mustacchi /* File-scope static variable name operations.  */
2786bc1f688bSRobert Mustacchi int dwarf_get_vars(Dwarf_Debug    /*dbg*/,
2787bc1f688bSRobert Mustacchi     Dwarf_Var**      /*vars*/,
2788bc1f688bSRobert Mustacchi     Dwarf_Signed *   /*number_of_vars*/,
2789bc1f688bSRobert Mustacchi     Dwarf_Error*     /*error*/);
2790bc1f688bSRobert Mustacchi void dwarf_vars_dealloc(Dwarf_Debug /*dbg*/,
2791bc1f688bSRobert Mustacchi     Dwarf_Var*       /*vars*/,
2792bc1f688bSRobert Mustacchi     Dwarf_Signed     /*number_of_vars*/);
2793bc1f688bSRobert Mustacchi 
2794bc1f688bSRobert Mustacchi 
2795bc1f688bSRobert Mustacchi int dwarf_varname(Dwarf_Var /*var*/,
2796bc1f688bSRobert Mustacchi     char   **        /*returned_name*/,
2797bc1f688bSRobert Mustacchi     Dwarf_Error*     /*error*/);
2798bc1f688bSRobert Mustacchi 
2799bc1f688bSRobert Mustacchi int dwarf_var_die_offset(Dwarf_Var /*var*/,
2800bc1f688bSRobert Mustacchi     Dwarf_Off*       /*return_offset*/,
2801bc1f688bSRobert Mustacchi     Dwarf_Error*     /*error*/);
2802bc1f688bSRobert Mustacchi 
2803bc1f688bSRobert Mustacchi int dwarf_var_cu_offset(Dwarf_Var /*var*/,
2804bc1f688bSRobert Mustacchi     Dwarf_Off*       /*return_offset*/,
2805bc1f688bSRobert Mustacchi     Dwarf_Error*     /*error*/);
2806bc1f688bSRobert Mustacchi 
2807bc1f688bSRobert Mustacchi int dwarf_var_name_offsets(Dwarf_Var /*var*/,
2808bc1f688bSRobert Mustacchi     char   **        /*returned_name*/,
2809bc1f688bSRobert Mustacchi     Dwarf_Off*       /*die_offset*/,
2810bc1f688bSRobert Mustacchi     Dwarf_Off*       /*cu_offset*/,
2811bc1f688bSRobert Mustacchi     Dwarf_Error*     /*error*/);
2812bc1f688bSRobert Mustacchi 
2813bc1f688bSRobert Mustacchi /* weak name operations.  */
2814bc1f688bSRobert Mustacchi int dwarf_get_weaks(Dwarf_Debug    /*dbg*/,
2815bc1f688bSRobert Mustacchi     Dwarf_Weak**     /*weaks*/,
2816bc1f688bSRobert Mustacchi     Dwarf_Signed *   /*number_of_weaks*/,
2817bc1f688bSRobert Mustacchi     Dwarf_Error*     /*error*/);
2818bc1f688bSRobert Mustacchi void dwarf_weaks_dealloc(Dwarf_Debug /*dbg*/,
2819bc1f688bSRobert Mustacchi     Dwarf_Weak*      /*weaks*/,
2820bc1f688bSRobert Mustacchi     Dwarf_Signed     /*number_of_weaks*/);
2821bc1f688bSRobert Mustacchi 
2822bc1f688bSRobert Mustacchi 
2823bc1f688bSRobert Mustacchi int dwarf_weakname(Dwarf_Weak /*weak*/,
2824bc1f688bSRobert Mustacchi     char   **        /*returned_name*/,
2825bc1f688bSRobert Mustacchi     Dwarf_Error*     /*error*/);
2826bc1f688bSRobert Mustacchi 
2827bc1f688bSRobert Mustacchi int dwarf_weak_die_offset(Dwarf_Weak /*weak*/,
2828bc1f688bSRobert Mustacchi     Dwarf_Off*       /*return_offset*/,
2829bc1f688bSRobert Mustacchi     Dwarf_Error*     /*error*/);
2830bc1f688bSRobert Mustacchi 
2831bc1f688bSRobert Mustacchi int dwarf_weak_cu_offset(Dwarf_Weak /*weak*/,
2832bc1f688bSRobert Mustacchi     Dwarf_Off*       /*return_offset*/,
2833bc1f688bSRobert Mustacchi     Dwarf_Error*     /*error*/);
2834bc1f688bSRobert Mustacchi 
2835bc1f688bSRobert Mustacchi int dwarf_weak_name_offsets(Dwarf_Weak    /*weak*/,
2836bc1f688bSRobert Mustacchi     char   **        /*returned_name*/,
2837bc1f688bSRobert Mustacchi     Dwarf_Off*       /*die_offset*/,
2838bc1f688bSRobert Mustacchi     Dwarf_Off*       /*cu_offset*/,
2839bc1f688bSRobert Mustacchi     Dwarf_Error*     /*error*/);
2840bc1f688bSRobert Mustacchi 
2841bc1f688bSRobert Mustacchi /* location list section operation.  (.debug_loc access) */
2842bc1f688bSRobert Mustacchi int dwarf_get_loclist_entry(Dwarf_Debug /*dbg*/,
2843bc1f688bSRobert Mustacchi     Dwarf_Unsigned   /*offset*/,
2844bc1f688bSRobert Mustacchi     Dwarf_Addr*      /*hipc*/,
2845bc1f688bSRobert Mustacchi     Dwarf_Addr*      /*lopc*/,
2846bc1f688bSRobert Mustacchi     Dwarf_Ptr*       /*data*/,
2847bc1f688bSRobert Mustacchi     Dwarf_Unsigned*  /*entry_len*/,
2848bc1f688bSRobert Mustacchi     Dwarf_Unsigned*  /*next_entry*/,
2849bc1f688bSRobert Mustacchi     Dwarf_Error*     /*error*/);
2850bc1f688bSRobert Mustacchi 
2851bc1f688bSRobert Mustacchi /* abbreviation section operations */
2852bc1f688bSRobert Mustacchi int dwarf_get_abbrev(Dwarf_Debug /*dbg*/,
2853bc1f688bSRobert Mustacchi     Dwarf_Unsigned   /*offset*/,
2854bc1f688bSRobert Mustacchi     Dwarf_Abbrev  *  /*returned_abbrev*/,
2855bc1f688bSRobert Mustacchi     Dwarf_Unsigned*  /*length*/,
2856bc1f688bSRobert Mustacchi     Dwarf_Unsigned*  /*attr_count*/,
2857bc1f688bSRobert Mustacchi     Dwarf_Error*     /*error*/);
2858bc1f688bSRobert Mustacchi 
2859bc1f688bSRobert Mustacchi int dwarf_get_abbrev_tag(Dwarf_Abbrev /*abbrev*/,
2860bc1f688bSRobert Mustacchi     Dwarf_Half*      /*return_tag_number*/,
2861bc1f688bSRobert Mustacchi     Dwarf_Error*     /*error*/);
2862bc1f688bSRobert Mustacchi int dwarf_get_abbrev_code(Dwarf_Abbrev /*abbrev*/,
2863bc1f688bSRobert Mustacchi     Dwarf_Unsigned*  /*return_code_number*/,
2864bc1f688bSRobert Mustacchi     Dwarf_Error*     /*error*/);
2865bc1f688bSRobert Mustacchi 
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 
2869bc1f688bSRobert Mustacchi int dwarf_get_abbrev_children_flag(Dwarf_Abbrev /*abbrev*/,
2870bc1f688bSRobert Mustacchi     Dwarf_Signed*    /*return_flag*/,
2871bc1f688bSRobert Mustacchi     Dwarf_Error*     /*error*/);
2872bc1f688bSRobert Mustacchi 
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. */
2890bc1f688bSRobert Mustacchi int dwarf_get_abbrev_entry(Dwarf_Abbrev /*abbrev*/,
2891bc1f688bSRobert Mustacchi     Dwarf_Signed     /*index*/,
2892bc1f688bSRobert Mustacchi     Dwarf_Half  *    /*returned_attr_num*/,
2893bc1f688bSRobert Mustacchi     Dwarf_Signed*    /*form*/,
2894bc1f688bSRobert Mustacchi     Dwarf_Off*       /*offset*/,
2895bc1f688bSRobert Mustacchi     Dwarf_Error*     /*error*/);
2896bc1f688bSRobert Mustacchi 
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 
2901bc1f688bSRobert Mustacchi /* consumer string section operation */
2902bc1f688bSRobert Mustacchi int dwarf_get_str(Dwarf_Debug /*dbg*/,
2903bc1f688bSRobert Mustacchi     Dwarf_Off        /*offset*/,
2904bc1f688bSRobert Mustacchi     char**           /*string*/,
2905bc1f688bSRobert Mustacchi     Dwarf_Signed *   /*strlen_of_string*/,
2906bc1f688bSRobert Mustacchi     Dwarf_Error*     /*error*/);
2907bc1f688bSRobert Mustacchi 
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 
2918bc1f688bSRobert Mustacchi /* Consumer op on  gnu .eh_frame info */
2919bc1f688bSRobert Mustacchi int dwarf_get_fde_list_eh(
2920bc1f688bSRobert Mustacchi     Dwarf_Debug      /*dbg*/,
2921bc1f688bSRobert Mustacchi     Dwarf_Cie**      /*cie_data*/,
2922bc1f688bSRobert Mustacchi     Dwarf_Signed*    /*cie_element_count*/,
2923bc1f688bSRobert Mustacchi     Dwarf_Fde**      /*fde_data*/,
2924bc1f688bSRobert Mustacchi     Dwarf_Signed*    /*fde_element_count*/,
2925bc1f688bSRobert Mustacchi     Dwarf_Error*     /*error*/);
2926bc1f688bSRobert Mustacchi 
2927bc1f688bSRobert Mustacchi 
2928bc1f688bSRobert Mustacchi /* consumer operations on frame info: .debug_frame */
2929bc1f688bSRobert Mustacchi int dwarf_get_fde_list(Dwarf_Debug /*dbg*/,
2930bc1f688bSRobert Mustacchi     Dwarf_Cie**      /*cie_data*/,
2931bc1f688bSRobert Mustacchi     Dwarf_Signed*    /*cie_element_count*/,
2932bc1f688bSRobert Mustacchi     Dwarf_Fde**      /*fde_data*/,
2933bc1f688bSRobert Mustacchi     Dwarf_Signed*    /*fde_element_count*/,
2934bc1f688bSRobert Mustacchi     Dwarf_Error*     /*error*/);
2935bc1f688bSRobert Mustacchi 
2936bc1f688bSRobert Mustacchi /* Release storage gotten by dwarf_get_fde_list_eh() or
2937bc1f688bSRobert Mustacchi    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*/);
2943bc1f688bSRobert Mustacchi 
2944bc1f688bSRobert Mustacchi 
2945bc1f688bSRobert Mustacchi 
2946bc1f688bSRobert Mustacchi int dwarf_get_fde_range(Dwarf_Fde /*fde*/,
2947bc1f688bSRobert Mustacchi     Dwarf_Addr*      /*low_pc*/,
2948bc1f688bSRobert Mustacchi     Dwarf_Unsigned*  /*func_length*/,
2949bc1f688bSRobert Mustacchi     Dwarf_Ptr*       /*fde_bytes*/,
2950bc1f688bSRobert Mustacchi     Dwarf_Unsigned*  /*fde_byte_length*/,
2951bc1f688bSRobert Mustacchi     Dwarf_Off*       /*cie_offset*/,
2952bc1f688bSRobert Mustacchi     Dwarf_Signed*    /*cie_index*/,
2953bc1f688bSRobert Mustacchi     Dwarf_Off*       /*fde_offset*/,
2954bc1f688bSRobert Mustacchi     Dwarf_Error*     /*error*/);
2955bc1f688bSRobert Mustacchi 
2956bc1f688bSRobert Mustacchi /*  Useful for IRIX only:  see dwarf_get_cie_augmentation_data()
2957bc1f688bSRobert Mustacchi     dwarf_get_fde_augmentation_data() for GNU .eh_frame. */
2958bc1f688bSRobert Mustacchi int dwarf_get_fde_exception_info(Dwarf_Fde /*fde*/,
2959bc1f688bSRobert Mustacchi     Dwarf_Signed*    /* offset_into_exception_tables */,
2960bc1f688bSRobert Mustacchi     Dwarf_Error*     /*error*/);
2961bc1f688bSRobert Mustacchi 
2962bc1f688bSRobert Mustacchi 
2963bc1f688bSRobert Mustacchi int dwarf_get_cie_of_fde(Dwarf_Fde /*fde*/,
2964bc1f688bSRobert Mustacchi     Dwarf_Cie *      /*cie_returned*/,
2965bc1f688bSRobert Mustacchi     Dwarf_Error*     /*error*/);
2966bc1f688bSRobert Mustacchi 
2967*4d9fdb46SRobert Mustacchi int dwarf_get_cie_info_b(Dwarf_Cie /*cie*/,
2968*4d9fdb46SRobert Mustacchi     Dwarf_Unsigned * /*bytes_in_cie*/,
2969*4d9fdb46SRobert Mustacchi     Dwarf_Small*     /*version*/,
2970*4d9fdb46SRobert Mustacchi     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*/);
2978bc1f688bSRobert Mustacchi int dwarf_get_cie_info(Dwarf_Cie /*cie*/,
2979bc1f688bSRobert Mustacchi     Dwarf_Unsigned * /*bytes_in_cie*/,
2980bc1f688bSRobert Mustacchi     Dwarf_Small*     /*version*/,
2981bc1f688bSRobert Mustacchi     char        **   /*augmenter*/,
2982bc1f688bSRobert Mustacchi     Dwarf_Unsigned*  /*code_alignment_factor*/,
2983bc1f688bSRobert Mustacchi     Dwarf_Signed*    /*data_alignment_factor*/,
2984bc1f688bSRobert Mustacchi     Dwarf_Half*      /*return_address_register_rule*/,
2985bc1f688bSRobert Mustacchi     Dwarf_Ptr*       /*initial_instructions*/,
2986bc1f688bSRobert Mustacchi     Dwarf_Unsigned*  /*initial_instructions_length*/,
2987bc1f688bSRobert Mustacchi     Dwarf_Error*     /*error*/);
2988bc1f688bSRobert Mustacchi 
2989bc1f688bSRobert Mustacchi /* dwarf_get_cie_index new September 2009. */
2990bc1f688bSRobert Mustacchi int dwarf_get_cie_index(
2991bc1f688bSRobert Mustacchi     Dwarf_Cie /*cie*/,
2992bc1f688bSRobert Mustacchi     Dwarf_Signed* /*index*/,
2993bc1f688bSRobert Mustacchi     Dwarf_Error* /*error*/ );
2994bc1f688bSRobert Mustacchi 
2995bc1f688bSRobert Mustacchi 
2996bc1f688bSRobert Mustacchi int dwarf_get_fde_instr_bytes(Dwarf_Fde /*fde*/,
2997bc1f688bSRobert Mustacchi     Dwarf_Ptr *      /*outinstrs*/, Dwarf_Unsigned * /*outlen*/,
2998bc1f688bSRobert Mustacchi     Dwarf_Error *    /*error*/);
2999bc1f688bSRobert Mustacchi 
3000bc1f688bSRobert Mustacchi int dwarf_get_fde_info_for_all_regs(Dwarf_Fde /*fde*/,
3001bc1f688bSRobert Mustacchi     Dwarf_Addr       /*pc_requested*/,
3002bc1f688bSRobert Mustacchi     Dwarf_Regtable*  /*reg_table*/,
3003bc1f688bSRobert Mustacchi     Dwarf_Addr*      /*row_pc*/,
3004bc1f688bSRobert Mustacchi     Dwarf_Error*     /*error*/);
3005bc1f688bSRobert Mustacchi 
3006bc1f688bSRobert Mustacchi int dwarf_get_fde_info_for_all_regs3(Dwarf_Fde /*fde*/,
3007bc1f688bSRobert Mustacchi     Dwarf_Addr       /*pc_requested*/,
3008bc1f688bSRobert Mustacchi     Dwarf_Regtable3* /*reg_table*/,
3009bc1f688bSRobert Mustacchi     Dwarf_Addr*      /*row_pc*/,
3010bc1f688bSRobert Mustacchi     Dwarf_Error*     /*error*/);
3011bc1f688bSRobert Mustacchi 
3012bc1f688bSRobert Mustacchi /* In this older interface DW_FRAME_CFA_COL is a meaningful
3013bc1f688bSRobert Mustacchi     column (which does not work well with DWARF3 or
3014bc1f688bSRobert Mustacchi     non-MIPS architectures). */
3015bc1f688bSRobert Mustacchi int dwarf_get_fde_info_for_reg(Dwarf_Fde /*fde*/,
3016bc1f688bSRobert Mustacchi     Dwarf_Half       /*table_column*/,
3017bc1f688bSRobert Mustacchi     Dwarf_Addr       /*pc_requested*/,
3018bc1f688bSRobert Mustacchi     Dwarf_Signed*    /*offset_relevant*/,
3019bc1f688bSRobert Mustacchi     Dwarf_Signed*    /*register*/,
3020bc1f688bSRobert Mustacchi     Dwarf_Signed*    /*offset*/,
3021bc1f688bSRobert Mustacchi     Dwarf_Addr*      /*row_pc*/,
3022bc1f688bSRobert Mustacchi     Dwarf_Error*     /*error*/);
3023bc1f688bSRobert Mustacchi 
3024bc1f688bSRobert Mustacchi /* See discussion of dw_value_type, libdwarf.h.
3025bc1f688bSRobert Mustacchi    Use of DW_FRAME_CFA_COL is not meaningful in this interface.
3026bc1f688bSRobert Mustacchi    See dwarf_get_fde_info_for_cfa_reg3().
3027bc1f688bSRobert Mustacchi */
3028bc1f688bSRobert Mustacchi /* dwarf_get_fde_info_for_reg3 is useful on a single column, but
3029bc1f688bSRobert Mustacchi    it is inefficient to iterate across all table_columns using this
3030bc1f688bSRobert Mustacchi    function.  Instead call dwarf_get_fde_info_for_all_regs3() and index
3031bc1f688bSRobert Mustacchi    into the table it fills in. */
3032bc1f688bSRobert Mustacchi int dwarf_get_fde_info_for_reg3(Dwarf_Fde /*fde*/,
3033bc1f688bSRobert Mustacchi     Dwarf_Half       /*table_column*/,
3034bc1f688bSRobert Mustacchi     Dwarf_Addr       /*pc_requested*/,
3035bc1f688bSRobert Mustacchi     Dwarf_Small  *   /*value_type*/,
3036bc1f688bSRobert Mustacchi     Dwarf_Signed *   /*offset_relevant*/,
3037bc1f688bSRobert Mustacchi     Dwarf_Signed *   /*register*/,
3038bc1f688bSRobert Mustacchi     Dwarf_Signed *   /*offset_or_block_len*/,
3039bc1f688bSRobert Mustacchi     Dwarf_Ptr    *   /*block_ptr */,
3040bc1f688bSRobert Mustacchi     Dwarf_Addr   *   /*row_pc_out*/,
3041bc1f688bSRobert Mustacchi     Dwarf_Error  *    /*error*/);
3042bc1f688bSRobert 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*/,
3047*4d9fdb46SRobert Mustacchi     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*/,
3064*4d9fdb46SRobert Mustacchi     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 */,
3068*4d9fdb46SRobert Mustacchi     Dwarf_Error*     /*error*/);
3069*4d9fdb46SRobert Mustacchi /* Use this to get the cfa. Or the above function. */
3070bc1f688bSRobert Mustacchi int dwarf_get_fde_info_for_cfa_reg3(Dwarf_Fde /*fde*/,
3071bc1f688bSRobert Mustacchi     Dwarf_Addr       /*pc_requested*/,
3072bc1f688bSRobert Mustacchi     Dwarf_Small  *   /*value_type*/,
3073bc1f688bSRobert Mustacchi     Dwarf_Signed *   /*offset_relevant*/,
3074bc1f688bSRobert Mustacchi     Dwarf_Signed*    /*register*/,
3075bc1f688bSRobert Mustacchi     Dwarf_Signed*    /*offset_or_block_len*/,
3076bc1f688bSRobert Mustacchi     Dwarf_Ptr   *    /*block_ptr */,
3077bc1f688bSRobert Mustacchi     Dwarf_Addr*      /*row_pc_out*/,
3078bc1f688bSRobert Mustacchi     Dwarf_Error*     /*error*/);
3079bc1f688bSRobert Mustacchi 
3080bc1f688bSRobert Mustacchi int dwarf_get_fde_for_die(Dwarf_Debug /*dbg*/,
3081bc1f688bSRobert Mustacchi     Dwarf_Die        /*subr_die */,
3082bc1f688bSRobert Mustacchi     Dwarf_Fde  *     /*returned_fde*/,
3083bc1f688bSRobert Mustacchi     Dwarf_Error*     /*error*/);
3084bc1f688bSRobert Mustacchi 
3085bc1f688bSRobert Mustacchi int dwarf_get_fde_n(Dwarf_Fde* /*fde_data*/,
3086bc1f688bSRobert Mustacchi     Dwarf_Unsigned   /*fde_index*/,
3087bc1f688bSRobert Mustacchi     Dwarf_Fde  *     /*returned_fde*/,
3088bc1f688bSRobert Mustacchi     Dwarf_Error*     /*error*/);
3089bc1f688bSRobert Mustacchi 
3090bc1f688bSRobert Mustacchi int dwarf_get_fde_at_pc(Dwarf_Fde* /*fde_data*/,
3091bc1f688bSRobert Mustacchi     Dwarf_Addr       /*pc_of_interest*/,
3092bc1f688bSRobert Mustacchi     Dwarf_Fde  *     /*returned_fde*/,
3093bc1f688bSRobert Mustacchi     Dwarf_Addr*      /*lopc*/,
3094bc1f688bSRobert Mustacchi     Dwarf_Addr*      /*hipc*/,
3095bc1f688bSRobert Mustacchi     Dwarf_Error*     /*error*/);
3096bc1f688bSRobert Mustacchi 
3097bc1f688bSRobert Mustacchi /* GNU .eh_frame augmentation information, raw form, see
3098bc1f688bSRobert Mustacchi    Linux Standard Base Core Specification version 3.0 . */
3099bc1f688bSRobert Mustacchi int dwarf_get_cie_augmentation_data(Dwarf_Cie /* cie*/,
3100bc1f688bSRobert Mustacchi     Dwarf_Small **   /* augdata */,
3101bc1f688bSRobert Mustacchi     Dwarf_Unsigned * /* augdata_len */,
3102bc1f688bSRobert Mustacchi     Dwarf_Error*     /*error*/);
3103bc1f688bSRobert Mustacchi /* GNU .eh_frame augmentation information, raw form, see
3104bc1f688bSRobert Mustacchi    Linux Standard Base Core Specification version 3.0 . */
3105bc1f688bSRobert Mustacchi int dwarf_get_fde_augmentation_data(Dwarf_Fde /* fde*/,
3106bc1f688bSRobert Mustacchi     Dwarf_Small **   /* augdata */,
3107bc1f688bSRobert Mustacchi     Dwarf_Unsigned * /* augdata_len */,
3108bc1f688bSRobert Mustacchi     Dwarf_Error*     /*error*/);
3109bc1f688bSRobert Mustacchi 
3110bc1f688bSRobert Mustacchi int dwarf_expand_frame_instructions(Dwarf_Cie /*cie*/,
3111bc1f688bSRobert Mustacchi     Dwarf_Ptr        /*instruction*/,
3112bc1f688bSRobert Mustacchi     Dwarf_Unsigned   /*i_length*/,
3113bc1f688bSRobert Mustacchi     Dwarf_Frame_Op** /*returned_op_list*/,
3114bc1f688bSRobert Mustacchi     Dwarf_Signed*    /*op_count*/,
3115bc1f688bSRobert Mustacchi     Dwarf_Error*     /*error*/);
3116bc1f688bSRobert Mustacchi 
3117bc1f688bSRobert Mustacchi /* Operations on .debug_aranges. */
3118bc1f688bSRobert Mustacchi int dwarf_get_aranges(Dwarf_Debug /*dbg*/,
3119bc1f688bSRobert Mustacchi     Dwarf_Arange**   /*aranges*/,
3120bc1f688bSRobert Mustacchi     Dwarf_Signed *   /*arange_count*/,
3121bc1f688bSRobert Mustacchi     Dwarf_Error*     /*error*/);
3122bc1f688bSRobert Mustacchi 
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 
3131bc1f688bSRobert Mustacchi 
3132bc1f688bSRobert Mustacchi 
3133bc1f688bSRobert Mustacchi int dwarf_get_arange(
3134bc1f688bSRobert Mustacchi     Dwarf_Arange*    /*aranges*/,
3135bc1f688bSRobert Mustacchi     Dwarf_Unsigned   /*arange_count*/,
3136bc1f688bSRobert Mustacchi     Dwarf_Addr       /*address*/,
3137bc1f688bSRobert Mustacchi     Dwarf_Arange *   /*returned_arange*/,
3138bc1f688bSRobert Mustacchi     Dwarf_Error*     /*error*/);
3139bc1f688bSRobert Mustacchi 
3140bc1f688bSRobert Mustacchi int dwarf_get_cu_die_offset(
3141bc1f688bSRobert Mustacchi     Dwarf_Arange     /*arange*/,
3142bc1f688bSRobert Mustacchi     Dwarf_Off*       /*return_offset*/,
3143bc1f688bSRobert Mustacchi     Dwarf_Error*     /*error*/);
3144bc1f688bSRobert Mustacchi 
3145bc1f688bSRobert Mustacchi int dwarf_get_arange_cu_header_offset(
3146bc1f688bSRobert Mustacchi     Dwarf_Arange     /*arange*/,
3147bc1f688bSRobert Mustacchi     Dwarf_Off*       /*return_cu_header_offset*/,
3148bc1f688bSRobert Mustacchi     Dwarf_Error*     /*error*/);
3149bc1f688bSRobert Mustacchi #ifdef __sgi /* pragma is sgi MIPS only */
3150bc1f688bSRobert Mustacchi #pragma optional dwarf_get_arange_cu_header_offset
3151bc1f688bSRobert Mustacchi #endif
3152bc1f688bSRobert Mustacchi 
3153bc1f688bSRobert Mustacchi /* DWARF2,3 interface. No longer really adequate (it was never
3154bc1f688bSRobert Mustacchi    right for segmented address spaces, please switch
3155bc1f688bSRobert Mustacchi    to using dwarf_get_arange_info_b instead.
3156bc1f688bSRobert Mustacchi    There is no effective difference between these
3157bc1f688bSRobert Mustacchi    functions  if the address space
3158bc1f688bSRobert Mustacchi    of the target is not segmented.  */
3159bc1f688bSRobert Mustacchi int dwarf_get_arange_info(
3160bc1f688bSRobert Mustacchi     Dwarf_Arange     /*arange*/,
3161bc1f688bSRobert Mustacchi     Dwarf_Addr*      /*start*/,
3162bc1f688bSRobert Mustacchi     Dwarf_Unsigned*  /*length*/,
3163bc1f688bSRobert Mustacchi     Dwarf_Off*       /*cu_die_offset*/,
3164bc1f688bSRobert Mustacchi     Dwarf_Error*     /*error*/ );
3165bc1f688bSRobert Mustacchi 
3166bc1f688bSRobert Mustacchi /* New for DWARF4, entries may have segment information.
3167bc1f688bSRobert Mustacchi    *segment is only meaningful if *segment_entry_size is non-zero. */
3168bc1f688bSRobert Mustacchi int dwarf_get_arange_info_b(
3169bc1f688bSRobert Mustacchi     Dwarf_Arange     /*arange*/,
3170bc1f688bSRobert Mustacchi     Dwarf_Unsigned*  /*segment*/,
3171bc1f688bSRobert Mustacchi     Dwarf_Unsigned*  /*segment_entry_size*/,
3172bc1f688bSRobert Mustacchi     Dwarf_Addr    *  /*start*/,
3173bc1f688bSRobert Mustacchi     Dwarf_Unsigned*  /*length*/,
3174bc1f688bSRobert Mustacchi     Dwarf_Off     *  /*cu_die_offset*/,
3175bc1f688bSRobert Mustacchi     Dwarf_Error   *  /*error*/ );
3176bc1f688bSRobert Mustacchi 
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. */
3259bc1f688bSRobert Mustacchi 
3260bc1f688bSRobert Mustacchi /* consumer .debug_macinfo information interface.
3261bc1f688bSRobert Mustacchi */
3262bc1f688bSRobert Mustacchi struct Dwarf_Macro_Details_s {
3263bc1f688bSRobert Mustacchi     Dwarf_Off    dmd_offset; /* offset, in the section,
3264bc1f688bSRobert Mustacchi         of this macro info */
3265bc1f688bSRobert Mustacchi     Dwarf_Small  dmd_type;   /* the type, DW_MACINFO_define etc*/
3266bc1f688bSRobert Mustacchi     Dwarf_Signed dmd_lineno; /* the source line number where
3267*4d9fdb46SRobert Mustacchi         applicable and vend_def number if
3268*4d9fdb46SRobert Mustacchi         vendor_extension op */
3269bc1f688bSRobert Mustacchi 
3270bc1f688bSRobert Mustacchi     Dwarf_Signed dmd_fileindex;/* the source file index:
3271*4d9fdb46SRobert Mustacchi         applies to define undef start_file */
3272bc1f688bSRobert Mustacchi     char *       dmd_macro;  /* macro name (with value for defineop)
3273*4d9fdb46SRobert Mustacchi         string from vendor ext */
3274bc1f688bSRobert Mustacchi };
3275bc1f688bSRobert Mustacchi 
3276bc1f688bSRobert Mustacchi /*  dwarf_print_lines is for use by dwarfdump: it prints
3277bc1f688bSRobert Mustacchi     line info to stdout.
3278bc1f688bSRobert Mustacchi     The _dwarf name is obsolete. Use dwarf_ instead.
3279bc1f688bSRobert Mustacchi     Added extra argnument 2/2009 for better checking.
3280bc1f688bSRobert Mustacchi */
3281bc1f688bSRobert Mustacchi int _dwarf_print_lines(Dwarf_Die /*cu_die*/,Dwarf_Error * /*error*/);
3282bc1f688bSRobert Mustacchi int dwarf_print_lines(Dwarf_Die /*cu_die*/,Dwarf_Error * /*error*/,
3283bc1f688bSRobert Mustacchi    int * /*error_count_out */);
3284bc1f688bSRobert Mustacchi 
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 
3318bc1f688bSRobert Mustacchi /*  dwarf_check_lineheader lets dwarfdump get detailed messages
3319bc1f688bSRobert Mustacchi     about some compiler errors we detect.
3320*4d9fdb46SRobert Mustacchi     We return the count of detected errors through the
3321bc1f688bSRobert 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().
3325bc1f688bSRobert Mustacchi */
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*/);
3331bc1f688bSRobert Mustacchi 
3332bc1f688bSRobert Mustacchi /*  dwarf_ld_sort_lines helps SGI IRIX ld
3333bc1f688bSRobert Mustacchi     rearrange lines in .debug_line in a .o created with a text
3334bc1f688bSRobert Mustacchi     section per function.
3335bc1f688bSRobert Mustacchi         -OPT:procedure_reorder=ON
3336bc1f688bSRobert Mustacchi     where ld-cord (cord(1)ing by ld,
3337bc1f688bSRobert Mustacchi     not by cord(1)) may have changed the function order.
3338bc1f688bSRobert Mustacchi     The _dwarf name is obsolete. Use dwarf_ instead.
3339bc1f688bSRobert Mustacchi */
3340bc1f688bSRobert Mustacchi int _dwarf_ld_sort_lines(
3341bc1f688bSRobert Mustacchi     void *         /*orig_buffer*/,
3342bc1f688bSRobert Mustacchi     unsigned long  /* buffer_len*/,
3343bc1f688bSRobert Mustacchi     int            /*is_64_bit*/,
3344bc1f688bSRobert Mustacchi     int *          /*any_change*/,
3345bc1f688bSRobert Mustacchi     int *          /*err_code*/);
3346bc1f688bSRobert Mustacchi int dwarf_ld_sort_lines(
3347bc1f688bSRobert Mustacchi     void *         /*orig_buffer*/,
3348bc1f688bSRobert Mustacchi     unsigned long  /*buffer_len*/,
3349bc1f688bSRobert Mustacchi     int            /*is_64_bit*/,
3350bc1f688bSRobert Mustacchi     int *          /*any_change*/,
3351bc1f688bSRobert Mustacchi     int *          /*err_code*/);
3352bc1f688bSRobert Mustacchi 
3353bc1f688bSRobert Mustacchi /* Used by dwarfdump -v to print fde offsets from debugging
3354bc1f688bSRobert Mustacchi    info.
3355bc1f688bSRobert Mustacchi    The _dwarf name is obsolete. Use dwarf_ instead.
3356bc1f688bSRobert Mustacchi */
3357*4d9fdb46SRobert Mustacchi int _dwarf_fde_section_offset(Dwarf_Debug /*dbg*/,
3358bc1f688bSRobert Mustacchi     Dwarf_Fde         /*in_fde*/,
3359bc1f688bSRobert Mustacchi     Dwarf_Off *       /*fde_off*/,
3360bc1f688bSRobert Mustacchi     Dwarf_Off *       /*cie_off*/,
3361bc1f688bSRobert Mustacchi     Dwarf_Error *     /*err*/);
3362*4d9fdb46SRobert Mustacchi 
3363*4d9fdb46SRobert Mustacchi int dwarf_fde_section_offset(Dwarf_Debug /*dbg*/,
3364bc1f688bSRobert Mustacchi     Dwarf_Fde         /*in_fde*/,
3365bc1f688bSRobert Mustacchi     Dwarf_Off *       /*fde_off*/,
3366bc1f688bSRobert Mustacchi     Dwarf_Off *       /*cie_off*/,
3367bc1f688bSRobert Mustacchi     Dwarf_Error *     /*err*/);
3368bc1f688bSRobert Mustacchi 
3369bc1f688bSRobert Mustacchi /* Used by dwarfdump -v to print cie offsets from debugging
3370bc1f688bSRobert Mustacchi    info.
3371bc1f688bSRobert Mustacchi    The _dwarf name is obsolete. Use dwarf_ instead.
3372bc1f688bSRobert Mustacchi */
3373bc1f688bSRobert Mustacchi int dwarf_cie_section_offset(Dwarf_Debug /*dbg*/,
3374bc1f688bSRobert Mustacchi     Dwarf_Cie     /*in_cie*/,
3375bc1f688bSRobert Mustacchi     Dwarf_Off *   /*cie_off */,
3376bc1f688bSRobert Mustacchi     Dwarf_Error * /*err*/);
3377bc1f688bSRobert Mustacchi int _dwarf_cie_section_offset(Dwarf_Debug /*dbg*/,
3378bc1f688bSRobert Mustacchi     Dwarf_Cie     /*in_cie*/,
3379bc1f688bSRobert Mustacchi     Dwarf_Off *   /*cie_off*/,
3380bc1f688bSRobert Mustacchi     Dwarf_Error * /*err*/);
3381bc1f688bSRobert Mustacchi 
3382bc1f688bSRobert Mustacchi typedef struct Dwarf_Macro_Details_s Dwarf_Macro_Details;
3383bc1f688bSRobert Mustacchi 
3384bc1f688bSRobert Mustacchi char *dwarf_find_macro_value_start(char * /*macro_string*/);
3385bc1f688bSRobert Mustacchi 
3386bc1f688bSRobert Mustacchi int dwarf_get_macro_details(Dwarf_Debug /*dbg*/,
3387bc1f688bSRobert Mustacchi     Dwarf_Off            /*macro_offset*/,
3388bc1f688bSRobert Mustacchi     Dwarf_Unsigned       /*maximum_count*/,
3389bc1f688bSRobert Mustacchi     Dwarf_Signed         * /*entry_count*/,
3390bc1f688bSRobert Mustacchi     Dwarf_Macro_Details ** /*details*/,
3391bc1f688bSRobert Mustacchi     Dwarf_Error *        /*err*/);
3392bc1f688bSRobert Mustacchi 
3393bc1f688bSRobert Mustacchi 
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*/);
3398bc1f688bSRobert Mustacchi int dwarf_get_address_size(Dwarf_Debug /*dbg*/,
3399bc1f688bSRobert Mustacchi     Dwarf_Half  *    /*addr_size*/,
3400bc1f688bSRobert Mustacchi     Dwarf_Error *    /*error*/);
3401bc1f688bSRobert Mustacchi int dwarf_get_die_address_size(Dwarf_Die /*die*/,
3402bc1f688bSRobert Mustacchi     Dwarf_Half  *    /*addr_size*/,
3403bc1f688bSRobert Mustacchi     Dwarf_Error *    /*error*/);
3404bc1f688bSRobert Mustacchi 
3405bc1f688bSRobert Mustacchi enum Dwarf_Form_Class dwarf_get_form_class(
3406bc1f688bSRobert Mustacchi     Dwarf_Half /* dwversion */,
3407bc1f688bSRobert Mustacchi     Dwarf_Half /* attrnum */,
3408bc1f688bSRobert Mustacchi     Dwarf_Half /*offset_size */,
3409bc1f688bSRobert Mustacchi     Dwarf_Half /*form*/);
3410bc1f688bSRobert Mustacchi 
3411bc1f688bSRobert Mustacchi 
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     */
3427*4d9fdb46SRobert Mustacchi 
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*/);
3635bc1f688bSRobert 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 
3640bc1f688bSRobert Mustacchi 
3641bc1f688bSRobert 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.  */
3649bc1f688bSRobert Mustacchi int dwarf_set_stringcheck(int /*stringcheck*/);
3650bc1f688bSRobert Mustacchi 
3651bc1f688bSRobert 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.  */
3664bc1f688bSRobert Mustacchi int dwarf_set_reloc_application(int /*apply*/);
3665bc1f688bSRobert Mustacchi 
3666*4d9fdb46SRobert Mustacchi /* Never Implemented */
3667*4d9fdb46SRobert Mustacchi Dwarf_Handler dwarf_seterrhand(Dwarf_Debug /*dbg*/,
3668*4d9fdb46SRobert Mustacchi     Dwarf_Handler /*errhand*/);
3669bc1f688bSRobert Mustacchi 
3670bc1f688bSRobert Mustacchi /* Unimplemented */
3671bc1f688bSRobert Mustacchi Dwarf_Ptr dwarf_seterrarg(Dwarf_Debug /*dbg*/, Dwarf_Ptr /*errarg*/);
3672bc1f688bSRobert Mustacchi 
3673bc1f688bSRobert Mustacchi void dwarf_dealloc(Dwarf_Debug /*dbg*/, void* /*space*/,
3674bc1f688bSRobert Mustacchi     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 
3682bc1f688bSRobert Mustacchi 
3683bc1f688bSRobert Mustacchi /* DWARF Producer Interface */
3684bc1f688bSRobert Mustacchi 
3685*4d9fdb46SRobert Mustacchi /*  New form June, 2011. Adds user_data argument. */
3686bc1f688bSRobert Mustacchi typedef int (*Dwarf_Callback_Func)(
3687*4d9fdb46SRobert Mustacchi     const char*     /*name*/,
3688bc1f688bSRobert Mustacchi     int             /*size*/,
3689bc1f688bSRobert Mustacchi     Dwarf_Unsigned  /*type*/,
3690bc1f688bSRobert Mustacchi     Dwarf_Unsigned  /*flags*/,
3691bc1f688bSRobert Mustacchi     Dwarf_Unsigned  /*link*/,
3692bc1f688bSRobert Mustacchi     Dwarf_Unsigned  /*info*/,
3693bc1f688bSRobert Mustacchi     Dwarf_Unsigned* /*sect_name_index*/,
3694*4d9fdb46SRobert Mustacchi     void *          /*user_data*/,
3695bc1f688bSRobert Mustacchi     int*            /*error*/);
3696bc1f688bSRobert Mustacchi 
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(
3701bc1f688bSRobert Mustacchi     Dwarf_Unsigned        /*flags*/,
3702*4d9fdb46SRobert Mustacchi     Dwarf_Callback_Func   /*func*/,
3703bc1f688bSRobert Mustacchi     Dwarf_Handler         /*errhand*/,
3704bc1f688bSRobert Mustacchi     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 */
3710bc1f688bSRobert Mustacchi     Dwarf_Error *         /*error*/);
3711bc1f688bSRobert Mustacchi 
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*/);
3718bc1f688bSRobert Mustacchi 
3719*4d9fdb46SRobert Mustacchi /*  the old interface. Still supported. */
3720bc1f688bSRobert Mustacchi Dwarf_Signed dwarf_transform_to_disk_form(Dwarf_P_Debug /*dbg*/,
3721bc1f688bSRobert Mustacchi     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*/);
3726bc1f688bSRobert Mustacchi 
3727*4d9fdb46SRobert Mustacchi /* New September 2016. Preferred. */
3728*4d9fdb46SRobert Mustacchi int dwarf_get_section_bytes_a(Dwarf_P_Debug /*dbg*/,
3729*4d9fdb46SRobert Mustacchi     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. */
3736bc1f688bSRobert Mustacchi Dwarf_Ptr dwarf_get_section_bytes(Dwarf_P_Debug /*dbg*/,
3737bc1f688bSRobert Mustacchi     Dwarf_Signed     /*dwarf_section*/,
3738bc1f688bSRobert Mustacchi     Dwarf_Signed*    /*elf_section_index*/,
3739bc1f688bSRobert Mustacchi     Dwarf_Unsigned*  /*length*/,
3740bc1f688bSRobert Mustacchi     Dwarf_Error*     /*error*/);
3741bc1f688bSRobert Mustacchi 
3742bc1f688bSRobert Mustacchi int  dwarf_get_relocation_info_count(
3743bc1f688bSRobert Mustacchi     Dwarf_P_Debug    /*dbg*/,
3744bc1f688bSRobert Mustacchi     Dwarf_Unsigned * /*count_of_relocation_sections*/,
3745bc1f688bSRobert Mustacchi     int *                /*drd_buffer_version*/,
3746bc1f688bSRobert Mustacchi     Dwarf_Error*     /*error*/);
3747bc1f688bSRobert Mustacchi 
3748bc1f688bSRobert Mustacchi int dwarf_get_relocation_info(
3749bc1f688bSRobert Mustacchi     Dwarf_P_Debug           /*dbg*/,
3750bc1f688bSRobert Mustacchi     Dwarf_Signed          * /*elf_section_index*/,
3751bc1f688bSRobert Mustacchi     Dwarf_Signed          * /*elf_section_index_link*/,
3752bc1f688bSRobert Mustacchi     Dwarf_Unsigned        * /*relocation_buffer_count*/,
3753bc1f688bSRobert Mustacchi     Dwarf_Relocation_Data * /*reldata_buffer*/,
3754bc1f688bSRobert Mustacchi     Dwarf_Error*            /*error*/);
3755bc1f688bSRobert Mustacchi 
3756bc1f688bSRobert Mustacchi /* v1:  no drd_length field, enum explicit */
3757bc1f688bSRobert Mustacchi /* v2:  has the drd_length field, enum value in uchar member */
3758bc1f688bSRobert Mustacchi #define DWARF_DRD_BUFFER_VERSION 2
3759bc1f688bSRobert Mustacchi 
3760bc1f688bSRobert Mustacchi /* Markers are not written  to DWARF2/3/4, they are user
3761bc1f688bSRobert Mustacchi    defined and may be used for any purpose.
3762bc1f688bSRobert Mustacchi */
3763bc1f688bSRobert Mustacchi Dwarf_Signed dwarf_get_die_markers(
3764bc1f688bSRobert Mustacchi     Dwarf_P_Debug     /*dbg*/,
3765bc1f688bSRobert Mustacchi     Dwarf_P_Marker *  /*marker_list*/,
3766bc1f688bSRobert Mustacchi     Dwarf_Unsigned *  /*marker_count*/,
3767bc1f688bSRobert Mustacchi     Dwarf_Error *     /*error*/);
3768bc1f688bSRobert Mustacchi 
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 
3776bc1f688bSRobert Mustacchi int dwarf_get_string_attributes_count(Dwarf_P_Debug,
3777bc1f688bSRobert Mustacchi     Dwarf_Unsigned *,
3778bc1f688bSRobert Mustacchi     int *,
3779bc1f688bSRobert Mustacchi     Dwarf_Error *);
3780bc1f688bSRobert Mustacchi 
3781bc1f688bSRobert Mustacchi int dwarf_get_string_attributes_info(Dwarf_P_Debug,
3782bc1f688bSRobert Mustacchi     Dwarf_Signed *,
3783bc1f688bSRobert Mustacchi     Dwarf_Unsigned *,
3784bc1f688bSRobert Mustacchi     Dwarf_P_String_Attr *,
3785bc1f688bSRobert Mustacchi     Dwarf_Error *);
3786bc1f688bSRobert Mustacchi 
3787bc1f688bSRobert Mustacchi void dwarf_reset_section_bytes(Dwarf_P_Debug /*dbg*/);
3788bc1f688bSRobert Mustacchi 
3789bc1f688bSRobert Mustacchi Dwarf_Unsigned dwarf_producer_finish(Dwarf_P_Debug /*dbg*/,
3790bc1f688bSRobert Mustacchi     Dwarf_Error* /*error*/);
3791bc1f688bSRobert Mustacchi 
3792*4d9fdb46SRobert Mustacchi /*  Returns DW_DLV_OK or DW_DLV_ERROR */
3793*4d9fdb46SRobert Mustacchi int dwarf_producer_finish_a(Dwarf_P_Debug /*dbg*/,
3794*4d9fdb46SRobert Mustacchi     Dwarf_Error* /*error*/);
3795*4d9fdb46SRobert Mustacchi 
3796bc1f688bSRobert Mustacchi /* Producer attribute addition functions. */
3797bc1f688bSRobert Mustacchi Dwarf_P_Attribute dwarf_add_AT_targ_address(Dwarf_P_Debug /*dbg*/,
3798bc1f688bSRobert Mustacchi     Dwarf_P_Die     /*ownerdie*/,
3799bc1f688bSRobert Mustacchi     Dwarf_Half      /*attr*/,
3800bc1f688bSRobert Mustacchi     Dwarf_Unsigned  /*pc_value*/,
3801bc1f688bSRobert Mustacchi     Dwarf_Signed    /*sym_index*/,
3802bc1f688bSRobert 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*/,
3808*4d9fdb46SRobert Mustacchi     Dwarf_Error*    /*error*/);
3809*4d9fdb46SRobert Mustacchi 
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*/);
3827bc1f688bSRobert Mustacchi 
3828bc1f688bSRobert Mustacchi Dwarf_P_Attribute dwarf_add_AT_block(Dwarf_P_Debug /*dbg*/,
3829bc1f688bSRobert Mustacchi     Dwarf_P_Die     /*ownerdie*/,
3830bc1f688bSRobert Mustacchi     Dwarf_Half      /*attr*/,
3831bc1f688bSRobert Mustacchi     Dwarf_Small*    /*block_data*/,
3832bc1f688bSRobert Mustacchi     Dwarf_Unsigned  /*block_len*/,
3833bc1f688bSRobert Mustacchi     Dwarf_Error*    /*error*/);
3834bc1f688bSRobert Mustacchi 
3835*4d9fdb46SRobert Mustacchi Dwarf_P_Attribute dwarf_add_AT_ref_address(Dwarf_P_Debug /*dbg*/,
3836bc1f688bSRobert Mustacchi     Dwarf_P_Die     /*ownerdie*/,
3837bc1f688bSRobert Mustacchi     Dwarf_Half      /*attr*/,
3838bc1f688bSRobert Mustacchi     Dwarf_Unsigned  /*pc_value*/,
3839bc1f688bSRobert Mustacchi     Dwarf_Unsigned  /*sym_index*/,
3840bc1f688bSRobert Mustacchi     Dwarf_Error*    /*error*/);
3841bc1f688bSRobert Mustacchi 
3842*4d9fdb46SRobert Mustacchi /*  New December 2018. Preferred version. */
3843*4d9fdb46SRobert Mustacchi int dwarf_add_AT_ref_address_a(Dwarf_P_Debug /*dbg*/,
3844bc1f688bSRobert Mustacchi     Dwarf_P_Die     /*ownerdie*/,
3845bc1f688bSRobert Mustacchi     Dwarf_Half      /*attr*/,
3846bc1f688bSRobert Mustacchi     Dwarf_Unsigned  /*pc_value*/,
3847bc1f688bSRobert Mustacchi     Dwarf_Unsigned  /*sym_index*/,
3848*4d9fdb46SRobert Mustacchi     Dwarf_P_Attribute * /*attr_out*/,
3849bc1f688bSRobert Mustacchi     Dwarf_Error*    /*error*/);
3850bc1f688bSRobert Mustacchi 
3851bc1f688bSRobert Mustacchi Dwarf_P_Attribute dwarf_add_AT_unsigned_const(Dwarf_P_Debug /*dbg*/,
3852bc1f688bSRobert Mustacchi     Dwarf_P_Die     /*ownerdie*/,
3853bc1f688bSRobert Mustacchi     Dwarf_Half      /*attr*/,
3854bc1f688bSRobert Mustacchi     Dwarf_Unsigned  /*value*/,
3855bc1f688bSRobert Mustacchi     Dwarf_Error*    /*error*/);
3856bc1f688bSRobert Mustacchi 
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*/,
3863*4d9fdb46SRobert Mustacchi     Dwarf_Error*    /*error*/);
3864*4d9fdb46SRobert Mustacchi 
3865bc1f688bSRobert Mustacchi Dwarf_P_Attribute dwarf_add_AT_signed_const(Dwarf_P_Debug /*dbg*/,
3866bc1f688bSRobert Mustacchi     Dwarf_P_Die     /*ownerdie*/,
3867bc1f688bSRobert Mustacchi     Dwarf_Half      /*attr*/,
3868bc1f688bSRobert Mustacchi     Dwarf_Signed    /*value*/,
3869bc1f688bSRobert Mustacchi     Dwarf_Error*    /*error*/);
3870bc1f688bSRobert Mustacchi 
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*/,
3877*4d9fdb46SRobert Mustacchi     Dwarf_Error*    /*error*/);
3878*4d9fdb46SRobert Mustacchi 
3879bc1f688bSRobert Mustacchi Dwarf_P_Attribute dwarf_add_AT_reference(Dwarf_P_Debug /*dbg*/,
3880bc1f688bSRobert Mustacchi     Dwarf_P_Die     /*ownerdie*/,
3881bc1f688bSRobert Mustacchi     Dwarf_Half      /*attr*/,
3882bc1f688bSRobert Mustacchi     Dwarf_P_Die     /*otherdie*/,
3883bc1f688bSRobert Mustacchi     Dwarf_Error*    /*error*/);
3884bc1f688bSRobert Mustacchi 
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 
3917bc1f688bSRobert Mustacchi Dwarf_P_Attribute dwarf_add_AT_dataref(
3918bc1f688bSRobert Mustacchi     Dwarf_P_Debug   /*dbg*/,
3919bc1f688bSRobert Mustacchi     Dwarf_P_Die     /*ownerdie*/,
3920bc1f688bSRobert Mustacchi     Dwarf_Half      /*attr*/,
3921bc1f688bSRobert Mustacchi     Dwarf_Unsigned  /*pcvalue*/,
3922bc1f688bSRobert Mustacchi     Dwarf_Unsigned  /*sym_index*/,
3923bc1f688bSRobert Mustacchi     Dwarf_Error*    /*error*/);
3924bc1f688bSRobert Mustacchi 
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*/,
3933*4d9fdb46SRobert Mustacchi     Dwarf_Error*    /*error*/);
3934*4d9fdb46SRobert Mustacchi 
3935*4d9fdb46SRobert Mustacchi Dwarf_P_Attribute dwarf_add_AT_const_value_string(
3936*4d9fdb46SRobert Mustacchi     Dwarf_P_Die /*ownerdie*/,
3937bc1f688bSRobert Mustacchi     char*           /*string_value*/,
3938bc1f688bSRobert Mustacchi     Dwarf_Error*    /*error*/);
3939bc1f688bSRobert Mustacchi 
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 
3947bc1f688bSRobert Mustacchi Dwarf_P_Attribute dwarf_add_AT_location_expr(Dwarf_P_Debug /*dbg*/,
3948bc1f688bSRobert Mustacchi     Dwarf_P_Die     /*ownerdie*/,
3949bc1f688bSRobert Mustacchi     Dwarf_Half      /*attr*/,
3950bc1f688bSRobert Mustacchi     Dwarf_P_Expr    /*loc_expr*/,
3951bc1f688bSRobert Mustacchi     Dwarf_Error*    /*error*/);
3952bc1f688bSRobert 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 
3961bc1f688bSRobert Mustacchi Dwarf_P_Attribute dwarf_add_AT_string(Dwarf_P_Debug /*dbg*/,
3962bc1f688bSRobert Mustacchi     Dwarf_P_Die     /*ownerdie*/,
3963bc1f688bSRobert Mustacchi     Dwarf_Half      /*attr*/,
3964bc1f688bSRobert Mustacchi     char*           /*string*/,
3965bc1f688bSRobert Mustacchi     Dwarf_Error*     /*error*/);
3966bc1f688bSRobert 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*/,
3973*4d9fdb46SRobert Mustacchi     Dwarf_Error*     /*error*/);
3974*4d9fdb46SRobert Mustacchi 
3975bc1f688bSRobert Mustacchi Dwarf_P_Attribute dwarf_add_AT_flag(Dwarf_P_Debug /*dbg*/,
3976bc1f688bSRobert Mustacchi     Dwarf_P_Die     /*ownerdie*/,
3977bc1f688bSRobert Mustacchi     Dwarf_Half      /*attr*/,
3978bc1f688bSRobert Mustacchi     Dwarf_Small     /*flag*/,
3979bc1f688bSRobert Mustacchi     Dwarf_Error*    /*error*/);
3980bc1f688bSRobert 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 
3989bc1f688bSRobert Mustacchi Dwarf_P_Attribute dwarf_add_AT_producer(Dwarf_P_Die /*ownerdie*/,
3990bc1f688bSRobert Mustacchi     char*           /*producer_string*/,
3991bc1f688bSRobert Mustacchi     Dwarf_Error*    /*error*/);
3992bc1f688bSRobert 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*/,
3997*4d9fdb46SRobert Mustacchi     Dwarf_Error*    /*error*/);
3998*4d9fdb46SRobert Mustacchi 
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. */
4030bc1f688bSRobert Mustacchi Dwarf_P_Attribute dwarf_add_AT_const_value_signedint(Dwarf_P_Die /*ownerdie*/,
4031bc1f688bSRobert Mustacchi     Dwarf_Signed    /*signed_value*/,
4032bc1f688bSRobert Mustacchi     Dwarf_Error*    /*error*/);
4033bc1f688bSRobert Mustacchi 
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*/,
4038*4d9fdb46SRobert Mustacchi     Dwarf_Error*    /*error*/);
4039*4d9fdb46SRobert Mustacchi 
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. */
4054bc1f688bSRobert Mustacchi Dwarf_P_Attribute dwarf_add_AT_const_value_unsignedint(
4055bc1f688bSRobert Mustacchi     Dwarf_P_Die     /*ownerdie*/,
4056bc1f688bSRobert Mustacchi     Dwarf_Unsigned  /*unsigned_value*/,
4057bc1f688bSRobert Mustacchi     Dwarf_Error*    /*error*/);
4058bc1f688bSRobert 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*/,
4064*4d9fdb46SRobert Mustacchi     Dwarf_Error*    /*error*/);
4065*4d9fdb46SRobert Mustacchi 
4066bc1f688bSRobert Mustacchi Dwarf_P_Attribute dwarf_add_AT_comp_dir(Dwarf_P_Die /*ownerdie*/,
4067bc1f688bSRobert Mustacchi     char*           /*current_working_directory*/,
4068bc1f688bSRobert Mustacchi     Dwarf_Error*    /*error*/);
4069bc1f688bSRobert 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*/,
4074*4d9fdb46SRobert Mustacchi     Dwarf_Error*    /*error*/);
4075*4d9fdb46SRobert Mustacchi 
4076bc1f688bSRobert Mustacchi Dwarf_P_Attribute dwarf_add_AT_name(Dwarf_P_Die    /*die*/,
4077bc1f688bSRobert Mustacchi     char*           /*name*/,
4078bc1f688bSRobert Mustacchi     Dwarf_Error*    /*error*/);
4079bc1f688bSRobert Mustacchi 
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 
4101bc1f688bSRobert Mustacchi /* Producer line creation functions (.debug_line) */
4102bc1f688bSRobert Mustacchi Dwarf_Unsigned dwarf_add_directory_decl(Dwarf_P_Debug /*dbg*/,
4103bc1f688bSRobert Mustacchi     char*           /*name*/,
4104bc1f688bSRobert Mustacchi     Dwarf_Error*    /*error*/);
4105bc1f688bSRobert 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 
4112bc1f688bSRobert Mustacchi Dwarf_Unsigned dwarf_add_file_decl(Dwarf_P_Debug /*dbg*/,
4113bc1f688bSRobert Mustacchi     char*           /*name*/,
4114bc1f688bSRobert Mustacchi     Dwarf_Unsigned  /*dir_index*/,
4115bc1f688bSRobert Mustacchi     Dwarf_Unsigned  /*time_last_modified*/,
4116bc1f688bSRobert Mustacchi     Dwarf_Unsigned  /*length*/,
4117bc1f688bSRobert Mustacchi     Dwarf_Error*    /*error*/);
4118bc1f688bSRobert Mustacchi 
4119*4d9fdb46SRobert Mustacchi /*  New December 2018. Preferred version. */
4120*4d9fdb46SRobert Mustacchi int dwarf_add_file_decl_a(Dwarf_P_Debug /*dbg*/,
4121*4d9fdb46SRobert Mustacchi     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 
4155bc1f688bSRobert Mustacchi Dwarf_Unsigned dwarf_add_line_entry(Dwarf_P_Debug /*dbg*/,
4156bc1f688bSRobert Mustacchi     Dwarf_Unsigned  /*file_index*/,
4157bc1f688bSRobert Mustacchi     Dwarf_Addr      /*code_address*/,
4158bc1f688bSRobert Mustacchi     Dwarf_Unsigned  /*lineno*/,
4159bc1f688bSRobert Mustacchi     Dwarf_Signed    /*column_number*/,
4160bc1f688bSRobert Mustacchi     Dwarf_Bool      /*is_source_stmt_begin*/,
4161bc1f688bSRobert Mustacchi     Dwarf_Bool      /*is_basic_block_begin*/,
4162bc1f688bSRobert Mustacchi     Dwarf_Error*    /*error*/);
4163bc1f688bSRobert Mustacchi 
4164bc1f688bSRobert Mustacchi Dwarf_Unsigned dwarf_lne_set_address(Dwarf_P_Debug /*dbg*/,
4165bc1f688bSRobert Mustacchi     Dwarf_Unsigned  /*offset*/,
4166bc1f688bSRobert Mustacchi     Dwarf_Unsigned  /*symbol_index*/,
4167bc1f688bSRobert Mustacchi     Dwarf_Error*    /*error*/);
4168bc1f688bSRobert Mustacchi 
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*/,
4173*4d9fdb46SRobert Mustacchi     Dwarf_Error*    /*error*/);
4174*4d9fdb46SRobert Mustacchi 
4175bc1f688bSRobert Mustacchi Dwarf_Unsigned dwarf_lne_end_sequence(Dwarf_P_Debug /*dbg*/,
4176bc1f688bSRobert Mustacchi     Dwarf_Addr      /*end_address*/,
4177bc1f688bSRobert Mustacchi     Dwarf_Error*    /*error*/);
4178bc1f688bSRobert Mustacchi 
4179*4d9fdb46SRobert Mustacchi /*  New December 2018. Preferred version. */
4180*4d9fdb46SRobert Mustacchi int dwarf_lne_end_sequence_a(Dwarf_P_Debug /*dbg*/,
4181*4d9fdb46SRobert Mustacchi     Dwarf_Addr      /*end_address*/,
4182*4d9fdb46SRobert Mustacchi     Dwarf_Error*    /*error*/);
4183*4d9fdb46SRobert Mustacchi 
4184bc1f688bSRobert Mustacchi /* Producer .debug_frame functions */
4185bc1f688bSRobert Mustacchi Dwarf_Unsigned dwarf_add_frame_cie(Dwarf_P_Debug /*dbg*/,
4186bc1f688bSRobert Mustacchi     char*           /*augmenter*/,
4187*4d9fdb46SRobert Mustacchi     Dwarf_Small     /*code_alignment_factor*/,
4188bc1f688bSRobert Mustacchi     Dwarf_Small     /*data_alignment_factor*/,
4189bc1f688bSRobert Mustacchi     Dwarf_Small     /*return_address_reg*/,
4190bc1f688bSRobert Mustacchi     Dwarf_Ptr       /*initialization_bytes*/,
4191bc1f688bSRobert Mustacchi     Dwarf_Unsigned  /*init_byte_len*/,
4192bc1f688bSRobert Mustacchi     Dwarf_Error*    /*error*/);
4193bc1f688bSRobert Mustacchi 
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 
4205bc1f688bSRobert Mustacchi Dwarf_Unsigned dwarf_add_frame_fde(
4206bc1f688bSRobert Mustacchi     Dwarf_P_Debug   /*dbg*/,
4207bc1f688bSRobert Mustacchi     Dwarf_P_Fde     /*fde*/,
4208bc1f688bSRobert Mustacchi     Dwarf_P_Die     /*corresponding subprogram die*/,
4209bc1f688bSRobert Mustacchi     Dwarf_Unsigned  /*cie_to_use*/,
4210bc1f688bSRobert Mustacchi     Dwarf_Unsigned  /*virt_addr_of_described_code*/,
4211bc1f688bSRobert Mustacchi     Dwarf_Unsigned  /*length_of_code*/,
4212bc1f688bSRobert Mustacchi     Dwarf_Unsigned  /*symbol_index*/,
4213bc1f688bSRobert Mustacchi     Dwarf_Error*    /*error*/);
4214bc1f688bSRobert Mustacchi 
4215bc1f688bSRobert Mustacchi Dwarf_Unsigned dwarf_add_frame_fde_b(
4216bc1f688bSRobert Mustacchi     Dwarf_P_Debug  /*dbg*/,
4217bc1f688bSRobert Mustacchi     Dwarf_P_Fde    /*fde*/,
4218bc1f688bSRobert Mustacchi     Dwarf_P_Die    /*die*/,
4219bc1f688bSRobert Mustacchi     Dwarf_Unsigned /*cie*/,
4220bc1f688bSRobert Mustacchi     Dwarf_Addr     /*virt_addr*/,
4221bc1f688bSRobert Mustacchi     Dwarf_Unsigned /*code_len*/,
4222bc1f688bSRobert Mustacchi     Dwarf_Unsigned /*sym_idx*/,
4223bc1f688bSRobert Mustacchi     Dwarf_Unsigned /*sym_idx_of_end*/,
4224bc1f688bSRobert Mustacchi     Dwarf_Addr     /*offset_from_end_sym*/,
4225bc1f688bSRobert Mustacchi     Dwarf_Error*   /*error*/);
4226bc1f688bSRobert Mustacchi 
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 
4257bc1f688bSRobert Mustacchi Dwarf_Unsigned dwarf_add_frame_info_b(
4258*4d9fdb46SRobert Mustacchi     Dwarf_P_Debug   /*dbg*/,
4259bc1f688bSRobert Mustacchi     Dwarf_P_Fde     /*fde*/,
4260bc1f688bSRobert Mustacchi     Dwarf_P_Die     /*die*/,
4261bc1f688bSRobert Mustacchi     Dwarf_Unsigned  /*cie*/,
4262bc1f688bSRobert Mustacchi     Dwarf_Addr      /*virt_addr*/,
4263bc1f688bSRobert Mustacchi     Dwarf_Unsigned  /*code_len*/,
4264bc1f688bSRobert Mustacchi     Dwarf_Unsigned  /*symidx*/,
4265bc1f688bSRobert Mustacchi     Dwarf_Unsigned  /*end_symbol */,
4266bc1f688bSRobert Mustacchi     Dwarf_Addr      /*offset_from_end_symbol */,
4267bc1f688bSRobert Mustacchi     Dwarf_Signed    /*offset_into_exception_tables*/,
4268bc1f688bSRobert Mustacchi     Dwarf_Unsigned  /*exception_table_symbol*/,
4269bc1f688bSRobert Mustacchi     Dwarf_Error*    /*error*/);
4270bc1f688bSRobert Mustacchi 
4271bc1f688bSRobert Mustacchi Dwarf_Unsigned dwarf_add_frame_info(
4272*4d9fdb46SRobert Mustacchi     Dwarf_P_Debug   /*dbg*/,
4273bc1f688bSRobert Mustacchi     Dwarf_P_Fde     /*fde*/,
4274bc1f688bSRobert Mustacchi     Dwarf_P_Die     /*die*/,
4275bc1f688bSRobert Mustacchi     Dwarf_Unsigned  /*cie*/,
4276bc1f688bSRobert Mustacchi     Dwarf_Addr      /*virt_addr*/,
4277bc1f688bSRobert Mustacchi     Dwarf_Unsigned  /*code_len*/,
4278bc1f688bSRobert Mustacchi     Dwarf_Unsigned  /*symidx*/,
4279bc1f688bSRobert Mustacchi     Dwarf_Signed    /*offset_into_exception_tables*/,
4280bc1f688bSRobert Mustacchi     Dwarf_Unsigned  /*exception_table_symbol*/,
4281bc1f688bSRobert Mustacchi     Dwarf_Error*    /*error*/);
4282bc1f688bSRobert Mustacchi 
4283*4d9fdb46SRobert Mustacchi /* The fde returned is just the one passed in. Silly. */
4284bc1f688bSRobert Mustacchi Dwarf_P_Fde dwarf_add_fde_inst(
4285bc1f688bSRobert Mustacchi     Dwarf_P_Fde     /*fde*/,
4286bc1f688bSRobert Mustacchi     Dwarf_Small     /*op*/,
4287bc1f688bSRobert Mustacchi     Dwarf_Unsigned  /*val1*/,
4288bc1f688bSRobert Mustacchi     Dwarf_Unsigned  /*val2*/,
4289bc1f688bSRobert Mustacchi     Dwarf_Error*    /*error*/);
4290bc1f688bSRobert 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*/,
4297*4d9fdb46SRobert Mustacchi     Dwarf_Error*    /*error*/);
4298*4d9fdb46SRobert Mustacchi 
4299bc1f688bSRobert Mustacchi /* New September 17, 2009 */
4300bc1f688bSRobert Mustacchi int dwarf_insert_fde_inst_bytes(
4301bc1f688bSRobert Mustacchi     Dwarf_P_Debug  /*dbg*/,
4302bc1f688bSRobert Mustacchi     Dwarf_P_Fde    /*fde*/,
4303bc1f688bSRobert Mustacchi     Dwarf_Unsigned /*len*/,
4304bc1f688bSRobert Mustacchi     Dwarf_Ptr      /*ibytes*/,
4305bc1f688bSRobert Mustacchi     Dwarf_Error*   /*error*/);
4306bc1f688bSRobert Mustacchi 
4307*4d9fdb46SRobert Mustacchi Dwarf_P_Fde dwarf_new_fde(Dwarf_P_Debug    /*dbg*/,
4308*4d9fdb46SRobert Mustacchi     Dwarf_Error* /*error*/);
4309bc1f688bSRobert Mustacchi 
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*/);
4314bc1f688bSRobert Mustacchi 
4315bc1f688bSRobert Mustacchi Dwarf_P_Fde dwarf_fde_cfa_offset(
4316bc1f688bSRobert Mustacchi     Dwarf_P_Fde     /*fde*/,
4317bc1f688bSRobert Mustacchi     Dwarf_Unsigned  /*register_number*/,
4318bc1f688bSRobert Mustacchi     Dwarf_Signed    /*offset*/,
4319bc1f688bSRobert Mustacchi     Dwarf_Error*    /*error*/);
4320bc1f688bSRobert 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*/,
4339*4d9fdb46SRobert Mustacchi     Dwarf_Error*    /*error*/);
4340*4d9fdb46SRobert Mustacchi 
4341bc1f688bSRobert Mustacchi Dwarf_P_Die dwarf_new_die(
4342bc1f688bSRobert Mustacchi     Dwarf_P_Debug    /*dbg*/,
4343bc1f688bSRobert Mustacchi     Dwarf_Tag         /*tag*/,
4344bc1f688bSRobert Mustacchi     Dwarf_P_Die     /*parent*/,
4345bc1f688bSRobert Mustacchi     Dwarf_P_Die     /*child*/,
4346bc1f688bSRobert Mustacchi     Dwarf_P_Die     /*left */,
4347bc1f688bSRobert Mustacchi     Dwarf_P_Die     /*right*/,
4348bc1f688bSRobert Mustacchi     Dwarf_Error*    /*error*/);
4349bc1f688bSRobert Mustacchi 
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.  */
4357bc1f688bSRobert Mustacchi Dwarf_Unsigned dwarf_add_die_to_debug(
4358bc1f688bSRobert Mustacchi     Dwarf_P_Debug   /*dbg*/,
4359bc1f688bSRobert Mustacchi     Dwarf_P_Die     /*die*/,
4360bc1f688bSRobert Mustacchi     Dwarf_Error*    /*error*/);
4361bc1f688bSRobert Mustacchi 
4362bc1f688bSRobert Mustacchi /* Markers are not written  to DWARF2/3/4, they are user
4363bc1f688bSRobert Mustacchi    defined and may be used for any purpose.
4364bc1f688bSRobert Mustacchi */
4365bc1f688bSRobert Mustacchi Dwarf_Unsigned dwarf_add_die_marker(
4366bc1f688bSRobert Mustacchi     Dwarf_P_Debug   /*dbg*/,
4367bc1f688bSRobert Mustacchi     Dwarf_P_Die     /*die*/,
4368bc1f688bSRobert Mustacchi     Dwarf_Unsigned  /*marker*/,
4369bc1f688bSRobert Mustacchi     Dwarf_Error *   /*error*/);
4370bc1f688bSRobert Mustacchi 
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 
4377bc1f688bSRobert Mustacchi Dwarf_Unsigned dwarf_get_die_marker(
4378bc1f688bSRobert Mustacchi     Dwarf_P_Debug   /*dbg*/,
4379bc1f688bSRobert Mustacchi     Dwarf_P_Die     /*die*/,
4380bc1f688bSRobert Mustacchi     Dwarf_Unsigned *  /*marker*/,
4381bc1f688bSRobert Mustacchi     Dwarf_Error *   /*error*/);
4382bc1f688bSRobert Mustacchi 
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. */
4400bc1f688bSRobert Mustacchi Dwarf_P_Die dwarf_die_link(
4401bc1f688bSRobert Mustacchi     Dwarf_P_Die     /*die*/,
4402bc1f688bSRobert Mustacchi     Dwarf_P_Die     /*parent*/,
4403bc1f688bSRobert Mustacchi     Dwarf_P_Die     /*child*/,
4404bc1f688bSRobert Mustacchi     Dwarf_P_Die     /*left*/,
4405bc1f688bSRobert Mustacchi     Dwarf_P_Die     /*right*/,
4406bc1f688bSRobert Mustacchi     Dwarf_Error*    /*error*/);
4407bc1f688bSRobert Mustacchi 
4408bc1f688bSRobert Mustacchi void dwarf_dealloc_compressed_block(
4409bc1f688bSRobert Mustacchi     Dwarf_P_Debug,
4410bc1f688bSRobert Mustacchi     void *
4411bc1f688bSRobert Mustacchi );
4412bc1f688bSRobert Mustacchi 
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. */
4416bc1f688bSRobert Mustacchi void dwarf_dealloc_uncompressed_block(
4417bc1f688bSRobert Mustacchi     Dwarf_Debug,
4418bc1f688bSRobert Mustacchi     void *
4419bc1f688bSRobert Mustacchi );
4420bc1f688bSRobert Mustacchi 
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. */
4438bc1f688bSRobert Mustacchi void * dwarf_compress_integer_block(
4439bc1f688bSRobert Mustacchi     Dwarf_P_Debug,    /*dbg*/
4440bc1f688bSRobert Mustacchi     Dwarf_Bool,       /*signed==true (or unsigned)*/
4441bc1f688bSRobert Mustacchi     Dwarf_Small,      /*size of integer units: 8, 16, 32, 64*/
4442bc1f688bSRobert Mustacchi     void*,            /*data*/
4443bc1f688bSRobert Mustacchi     Dwarf_Unsigned,   /*number of elements*/
4444bc1f688bSRobert Mustacchi     Dwarf_Unsigned*,  /*number of bytes in output block*/
4445bc1f688bSRobert Mustacchi     Dwarf_Error*      /*error*/
4446bc1f688bSRobert Mustacchi );
4447bc1f688bSRobert Mustacchi 
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 
4463bc1f688bSRobert 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.  */
4475bc1f688bSRobert Mustacchi void * dwarf_uncompress_integer_block(
4476bc1f688bSRobert Mustacchi     Dwarf_Debug,      /*dbg */
4477bc1f688bSRobert Mustacchi     Dwarf_Bool,       /*signed==true (or unsigned) */
4478bc1f688bSRobert Mustacchi     Dwarf_Small,      /*size of integer units: 8, 16, 32, 64 */
4479bc1f688bSRobert Mustacchi     void*,            /*input data */
4480bc1f688bSRobert Mustacchi     Dwarf_Unsigned,   /*number of bytes in input */
4481bc1f688bSRobert Mustacchi     Dwarf_Unsigned*,  /*number of units in output block */
4482bc1f688bSRobert Mustacchi     Dwarf_Error*      /*error */
4483bc1f688bSRobert Mustacchi );
4484bc1f688bSRobert Mustacchi 
4485bc1f688bSRobert Mustacchi /* 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*/);
4493bc1f688bSRobert Mustacchi 
4494bc1f688bSRobert Mustacchi void dwarf_expr_reset(
4495bc1f688bSRobert Mustacchi     Dwarf_P_Expr      /*expr*/,
4496bc1f688bSRobert Mustacchi     Dwarf_Error*      /*error*/);
4497bc1f688bSRobert Mustacchi 
4498bc1f688bSRobert Mustacchi Dwarf_Unsigned dwarf_add_expr_gen(
4499bc1f688bSRobert Mustacchi     Dwarf_P_Expr      /*expr*/,
4500bc1f688bSRobert Mustacchi     Dwarf_Small       /*opcode*/,
4501bc1f688bSRobert Mustacchi     Dwarf_Unsigned    /*val1*/,
4502bc1f688bSRobert Mustacchi     Dwarf_Unsigned    /*val2*/,
4503bc1f688bSRobert Mustacchi     Dwarf_Error*      /*error*/);
4504bc1f688bSRobert 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*/,
4512*4d9fdb46SRobert Mustacchi     Dwarf_Error*      /*error*/);
4513*4d9fdb46SRobert Mustacchi 
4514bc1f688bSRobert Mustacchi Dwarf_Unsigned dwarf_add_expr_addr(
4515bc1f688bSRobert Mustacchi     Dwarf_P_Expr      /*expr*/,
4516bc1f688bSRobert Mustacchi     Dwarf_Unsigned    /*addr*/,
4517bc1f688bSRobert Mustacchi     Dwarf_Signed      /*sym_index*/,
4518bc1f688bSRobert Mustacchi     Dwarf_Error*      /*error*/);
4519bc1f688bSRobert Mustacchi 
4520bc1f688bSRobert Mustacchi Dwarf_Unsigned dwarf_add_expr_addr_b(
4521bc1f688bSRobert Mustacchi     Dwarf_P_Expr      /*expr*/,
4522bc1f688bSRobert Mustacchi     Dwarf_Unsigned    /*addr*/,
4523bc1f688bSRobert Mustacchi     Dwarf_Unsigned    /*sym_index*/,
4524bc1f688bSRobert Mustacchi     Dwarf_Error*      /*error*/);
4525bc1f688bSRobert Mustacchi 
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 
4535bc1f688bSRobert Mustacchi Dwarf_Unsigned dwarf_expr_current_offset(
4536bc1f688bSRobert Mustacchi     Dwarf_P_Expr      /*expr*/,
4537bc1f688bSRobert Mustacchi     Dwarf_Error*      /*error*/);
4538bc1f688bSRobert 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*/,
4543*4d9fdb46SRobert Mustacchi     Dwarf_Error*      /*error*/);
4544*4d9fdb46SRobert Mustacchi 
4545bc1f688bSRobert Mustacchi Dwarf_Addr dwarf_expr_into_block(
4546bc1f688bSRobert Mustacchi     Dwarf_P_Expr      /*expr*/,
4547bc1f688bSRobert Mustacchi     Dwarf_Unsigned*   /*length*/,
4548bc1f688bSRobert Mustacchi     Dwarf_Error*      /*error*/);
4549bc1f688bSRobert 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*/,
4555*4d9fdb46SRobert Mustacchi     Dwarf_Error*      /*error*/);
4556*4d9fdb46SRobert Mustacchi 
4557bc1f688bSRobert Mustacchi Dwarf_Unsigned dwarf_add_arange(Dwarf_P_Debug /*dbg*/,
4558bc1f688bSRobert Mustacchi     Dwarf_Addr        /*begin_address*/,
4559bc1f688bSRobert Mustacchi     Dwarf_Unsigned    /*length*/,
4560bc1f688bSRobert Mustacchi     Dwarf_Signed      /*symbol_index*/,
4561bc1f688bSRobert Mustacchi     Dwarf_Error*      /*error*/);
4562bc1f688bSRobert Mustacchi 
4563bc1f688bSRobert Mustacchi Dwarf_Unsigned dwarf_add_arange_b(
4564bc1f688bSRobert Mustacchi     Dwarf_P_Debug  /*dbg*/,
4565bc1f688bSRobert Mustacchi     Dwarf_Addr     /*begin_address*/,
4566bc1f688bSRobert Mustacchi     Dwarf_Unsigned /*length*/,
4567bc1f688bSRobert Mustacchi     Dwarf_Unsigned /*symbol_index*/,
4568bc1f688bSRobert Mustacchi     Dwarf_Unsigned /*end_symbol_index*/,
4569bc1f688bSRobert Mustacchi     Dwarf_Addr     /*offset_from_end_symbol*/,
4570bc1f688bSRobert Mustacchi     Dwarf_Error *  /*error*/);
4571bc1f688bSRobert Mustacchi 
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 
4582bc1f688bSRobert Mustacchi Dwarf_Unsigned dwarf_add_pubname(
4583bc1f688bSRobert Mustacchi     Dwarf_P_Debug      /*dbg*/,
4584bc1f688bSRobert Mustacchi     Dwarf_P_Die        /*die*/,
4585bc1f688bSRobert Mustacchi     char*              /*pubname_name*/,
4586bc1f688bSRobert Mustacchi     Dwarf_Error*       /*error*/);
4587bc1f688bSRobert 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*/,
4607*4d9fdb46SRobert Mustacchi     Dwarf_Error*       /*error*/);
4608*4d9fdb46SRobert Mustacchi 
4609bc1f688bSRobert Mustacchi Dwarf_Unsigned dwarf_add_funcname(
4610bc1f688bSRobert Mustacchi     Dwarf_P_Debug      /*dbg*/,
4611bc1f688bSRobert Mustacchi     Dwarf_P_Die        /*die*/,
4612bc1f688bSRobert Mustacchi     char*              /*func_name*/,
4613bc1f688bSRobert Mustacchi     Dwarf_Error*       /*error*/);
4614bc1f688bSRobert 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*/,
4620*4d9fdb46SRobert Mustacchi     Dwarf_Error*       /*error*/);
4621*4d9fdb46SRobert Mustacchi 
4622bc1f688bSRobert Mustacchi Dwarf_Unsigned dwarf_add_typename(
4623bc1f688bSRobert Mustacchi     Dwarf_P_Debug     /*dbg*/,
4624bc1f688bSRobert Mustacchi     Dwarf_P_Die       /*die*/,
4625bc1f688bSRobert Mustacchi     char*             /*type_name*/,
4626bc1f688bSRobert Mustacchi     Dwarf_Error*      /*error*/);
4627bc1f688bSRobert 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*/,
4633*4d9fdb46SRobert Mustacchi     Dwarf_Error*      /*error*/);
4634*4d9fdb46SRobert Mustacchi 
4635bc1f688bSRobert Mustacchi Dwarf_Unsigned dwarf_add_varname(
4636bc1f688bSRobert Mustacchi     Dwarf_P_Debug     /*dbg*/,
4637bc1f688bSRobert Mustacchi     Dwarf_P_Die       /*die*/,
4638bc1f688bSRobert Mustacchi     char*             /*var_name*/,
4639bc1f688bSRobert Mustacchi     Dwarf_Error*      /*error*/);
4640bc1f688bSRobert 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*/,
4646*4d9fdb46SRobert Mustacchi     Dwarf_Error*      /*error*/);
4647*4d9fdb46SRobert Mustacchi 
4648bc1f688bSRobert Mustacchi Dwarf_Unsigned dwarf_add_weakname(
4649bc1f688bSRobert Mustacchi     Dwarf_P_Debug    /*dbg*/,
4650bc1f688bSRobert Mustacchi     Dwarf_P_Die      /*die*/,
4651bc1f688bSRobert Mustacchi     char*            /*weak_name*/,
4652bc1f688bSRobert Mustacchi     Dwarf_Error*     /*error*/);
4653bc1f688bSRobert Mustacchi 
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 
4672bc1f688bSRobert Mustacchi /*  .debug_macinfo producer functions
4673bc1f688bSRobert Mustacchi     Functions must be called in right order: the section is output
4674bc1f688bSRobert Mustacchi     In the order these are presented.
4675bc1f688bSRobert Mustacchi */
4676bc1f688bSRobert Mustacchi int dwarf_def_macro(Dwarf_P_Debug /*dbg*/,
4677bc1f688bSRobert Mustacchi     Dwarf_Unsigned   /*line*/,
4678bc1f688bSRobert Mustacchi     char *           /*macname, with (arglist), no space before (*/,
4679bc1f688bSRobert Mustacchi     char *           /*macvalue*/,
4680bc1f688bSRobert Mustacchi     Dwarf_Error*     /*error*/);
4681bc1f688bSRobert Mustacchi 
4682bc1f688bSRobert Mustacchi int dwarf_undef_macro(Dwarf_P_Debug /*dbg*/,
4683bc1f688bSRobert Mustacchi     Dwarf_Unsigned   /*line*/,
4684bc1f688bSRobert Mustacchi     char *           /*macname, no arglist, of course*/,
4685bc1f688bSRobert Mustacchi     Dwarf_Error*     /*error*/);
4686bc1f688bSRobert Mustacchi 
4687bc1f688bSRobert Mustacchi int dwarf_start_macro_file(Dwarf_P_Debug /*dbg*/,
4688bc1f688bSRobert Mustacchi     Dwarf_Unsigned   /*fileindex*/,
4689bc1f688bSRobert Mustacchi     Dwarf_Unsigned   /*linenumber*/,
4690bc1f688bSRobert Mustacchi     Dwarf_Error*     /*error*/);
4691bc1f688bSRobert Mustacchi 
4692bc1f688bSRobert Mustacchi int dwarf_end_macro_file(Dwarf_P_Debug /*dbg*/,
4693bc1f688bSRobert Mustacchi     Dwarf_Error*     /*error*/);
4694bc1f688bSRobert Mustacchi 
4695bc1f688bSRobert Mustacchi int dwarf_vendor_ext(Dwarf_P_Debug /*dbg*/,
4696bc1f688bSRobert Mustacchi     Dwarf_Unsigned   /*constant*/,
4697bc1f688bSRobert Mustacchi     char *           /*string*/,
4698bc1f688bSRobert Mustacchi     Dwarf_Error*     /*error*/);
4699bc1f688bSRobert Mustacchi 
4700bc1f688bSRobert Mustacchi /* end macinfo producer functions */
4701bc1f688bSRobert Mustacchi 
4702bc1f688bSRobert Mustacchi int dwarf_attr_offset(Dwarf_Die /*die*/,
4703bc1f688bSRobert Mustacchi     Dwarf_Attribute /*attr of above die*/,
4704bc1f688bSRobert Mustacchi     Dwarf_Off     * /*returns offset thru this ptr */,
4705bc1f688bSRobert Mustacchi     Dwarf_Error   * /*error*/);
4706bc1f688bSRobert Mustacchi 
4707bc1f688bSRobert Mustacchi /*  This is a hack so clients can verify offsets.
4708bc1f688bSRobert Mustacchi     Added April 2005 so that debugger can detect broken offsets
4709bc1f688bSRobert Mustacchi     (which happened in an IRIX executable larger than 2GB
4710bc1f688bSRobert Mustacchi     with MIPSpro 7.3.1.3 toolchain.).
4711bc1f688bSRobert Mustacchi */
4712*4d9fdb46SRobert Mustacchi int dwarf_get_section_max_offsets(Dwarf_Debug /*dbg*/,
4713bc1f688bSRobert Mustacchi     Dwarf_Unsigned * /*debug_info_size*/,
4714bc1f688bSRobert Mustacchi     Dwarf_Unsigned * /*debug_abbrev_size*/,
4715bc1f688bSRobert Mustacchi     Dwarf_Unsigned * /*debug_line_size*/,
4716bc1f688bSRobert Mustacchi     Dwarf_Unsigned * /*debug_loc_size*/,
4717bc1f688bSRobert Mustacchi     Dwarf_Unsigned * /*debug_aranges_size*/,
4718bc1f688bSRobert Mustacchi     Dwarf_Unsigned * /*debug_macinfo_size*/,
4719bc1f688bSRobert Mustacchi     Dwarf_Unsigned * /*debug_pubnames_size*/,
4720bc1f688bSRobert Mustacchi     Dwarf_Unsigned * /*debug_str_size*/,
4721bc1f688bSRobert Mustacchi     Dwarf_Unsigned * /*debug_frame_size*/,
4722bc1f688bSRobert Mustacchi     Dwarf_Unsigned * /*debug_ranges_size*/,
4723bc1f688bSRobert Mustacchi     Dwarf_Unsigned * /*debug_pubtypes_size*/);
4724bc1f688bSRobert Mustacchi 
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. */
4784bc1f688bSRobert Mustacchi /*  Multiple releases spelled 'initial' as 'inital' .
4785bc1f688bSRobert Mustacchi     The 'inital' spelling should not be used. */
4786bc1f688bSRobert Mustacchi Dwarf_Half dwarf_set_frame_rule_inital_value(Dwarf_Debug /*dbg*/,
4787bc1f688bSRobert Mustacchi     Dwarf_Half /*value*/);
4788bc1f688bSRobert Mustacchi /*  Additional interface with correct 'initial' spelling. */
4789*4d9fdb46SRobert Mustacchi /*  It is likely you will want to call the following 6 functions
4790bc1f688bSRobert Mustacchi     before accessing any frame information.  All are useful
4791bc1f688bSRobert Mustacchi     to tailor handling of pseudo-registers needed to turn
4792bc1f688bSRobert Mustacchi     frame operation references into simpler forms and to
4793bc1f688bSRobert 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.*/
4798bc1f688bSRobert Mustacchi Dwarf_Half dwarf_set_frame_rule_initial_value(Dwarf_Debug /*dbg*/,
4799bc1f688bSRobert Mustacchi     Dwarf_Half /*value*/);
4800bc1f688bSRobert Mustacchi Dwarf_Half dwarf_set_frame_rule_table_size(Dwarf_Debug /*dbg*/,
4801bc1f688bSRobert Mustacchi     Dwarf_Half /*value*/);
4802bc1f688bSRobert Mustacchi Dwarf_Half dwarf_set_frame_cfa_value(Dwarf_Debug /*dbg*/,
4803bc1f688bSRobert Mustacchi     Dwarf_Half /*value*/);
4804bc1f688bSRobert Mustacchi Dwarf_Half dwarf_set_frame_same_value(Dwarf_Debug /*dbg*/,
4805bc1f688bSRobert Mustacchi     Dwarf_Half /*value*/);
4806bc1f688bSRobert Mustacchi Dwarf_Half dwarf_set_frame_undefined_value(Dwarf_Debug /*dbg*/,
4807bc1f688bSRobert Mustacchi     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 */);
4812bc1f688bSRobert Mustacchi 
4813bc1f688bSRobert Mustacchi /*  As of April 27, 2009, this version with no diepointer is
4814bc1f688bSRobert Mustacchi     obsolete though supported.  Use dwarf_get_ranges_a() instead. */
4815bc1f688bSRobert Mustacchi int dwarf_get_ranges(Dwarf_Debug /*dbg*/,
4816bc1f688bSRobert Mustacchi     Dwarf_Off /*rangesoffset*/,
4817bc1f688bSRobert Mustacchi     Dwarf_Ranges ** /*rangesbuf*/,
4818bc1f688bSRobert Mustacchi     Dwarf_Signed * /*listlen*/,
4819bc1f688bSRobert Mustacchi     Dwarf_Unsigned * /*bytecount*/,
4820bc1f688bSRobert Mustacchi     Dwarf_Error * /*error*/);
4821bc1f688bSRobert Mustacchi 
4822bc1f688bSRobert Mustacchi /* This adds the address_size argument. New April 27, 2009 */
4823bc1f688bSRobert Mustacchi int dwarf_get_ranges_a(Dwarf_Debug /*dbg*/,
4824bc1f688bSRobert Mustacchi     Dwarf_Off /*rangesoffset*/,
4825bc1f688bSRobert Mustacchi     Dwarf_Die  /* diepointer */,
4826bc1f688bSRobert Mustacchi     Dwarf_Ranges ** /*rangesbuf*/,
4827bc1f688bSRobert Mustacchi     Dwarf_Signed * /*listlen*/,
4828bc1f688bSRobert Mustacchi     Dwarf_Unsigned * /*bytecount*/,
4829bc1f688bSRobert Mustacchi     Dwarf_Error * /*error*/);
4830bc1f688bSRobert Mustacchi 
4831bc1f688bSRobert Mustacchi void dwarf_ranges_dealloc(Dwarf_Debug /*dbg*/,
4832bc1f688bSRobert Mustacchi     Dwarf_Ranges * /*rangesbuf*/,
4833bc1f688bSRobert Mustacchi     Dwarf_Signed /*rangecount*/);
4834bc1f688bSRobert Mustacchi 
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 
5188bc1f688bSRobert Mustacchi /* The harmless error list is a circular buffer of
5189bc1f688bSRobert Mustacchi    errors we note but which do not stop us from processing
5190bc1f688bSRobert Mustacchi    the object.  Created so dwarfdump or other tools
5191bc1f688bSRobert Mustacchi    can report such inconsequential errors without causing
5192bc1f688bSRobert Mustacchi    anything to stop early. */
5193bc1f688bSRobert Mustacchi #define DW_HARMLESS_ERROR_CIRCULAR_LIST_DEFAULT_SIZE 4
5194*4d9fdb46SRobert Mustacchi #define DW_HARMLESS_ERROR_MSG_STRING_SIZE   300
5195bc1f688bSRobert Mustacchi /* User code supplies size of array of pointers errmsg_ptrs_array
5196bc1f688bSRobert Mustacchi     in count and the array of pointers (the pointers themselves
5197bc1f688bSRobert Mustacchi     need not be initialized).
5198bc1f688bSRobert Mustacchi     The pointers returned in the array of pointers
5199bc1f688bSRobert Mustacchi     are invalidated by ANY call to libdwarf.
5200bc1f688bSRobert Mustacchi     Use them before making another libdwarf call!
5201bc1f688bSRobert Mustacchi     The array of string pointers passed in always has
5202bc1f688bSRobert Mustacchi     a final null pointer, so if there are N pointers the
5203bc1f688bSRobert Mustacchi     and M actual strings, then MIN(M,N-1) pointers are
5204bc1f688bSRobert Mustacchi     set to point to error strings.  The array of pointers
5205bc1f688bSRobert Mustacchi     to strings always terminates with a NULL pointer.
5206bc1f688bSRobert Mustacchi     If 'count' is passed in zero then errmsg_ptrs_array
5207bc1f688bSRobert Mustacchi     is not touched.
5208bc1f688bSRobert Mustacchi 
5209bc1f688bSRobert Mustacchi     The function returns DW_DLV_NO_ENTRY if no harmless errors
5210bc1f688bSRobert Mustacchi     were noted so far.  Returns DW_DLV_OK if there are errors.
5211bc1f688bSRobert Mustacchi     Never returns DW_DLV_ERROR.
5212bc1f688bSRobert Mustacchi 
5213bc1f688bSRobert Mustacchi     Each call empties the error list (discarding all current entries).
5214bc1f688bSRobert Mustacchi     If newerr_count is non-NULL the count of harmless errors
5215bc1f688bSRobert Mustacchi     since the last call is returned through the pointer
5216bc1f688bSRobert Mustacchi     (some may have been discarded or not returned, it is a circular
5217bc1f688bSRobert Mustacchi     list...).
5218bc1f688bSRobert Mustacchi     If DW_DLV_NO_ENTRY is returned none of the arguments
5219bc1f688bSRobert Mustacchi     here are touched or used.
5220bc1f688bSRobert Mustacchi     */
5221bc1f688bSRobert Mustacchi int dwarf_get_harmless_error_list(Dwarf_Debug /*dbg*/,
5222*4d9fdb46SRobert Mustacchi     unsigned int   /*count*/,
5223bc1f688bSRobert Mustacchi     const char **  /*errmsg_ptrs_array*/,
5224*4d9fdb46SRobert Mustacchi     unsigned int * /*newerr_count*/);
5225bc1f688bSRobert Mustacchi 
5226bc1f688bSRobert Mustacchi /*  Insertion is only for testing the harmless error code, it is not
5227bc1f688bSRobert Mustacchi     necessarily useful otherwise. */
5228bc1f688bSRobert Mustacchi void dwarf_insert_harmless_error(Dwarf_Debug /*dbg*/,
5229bc1f688bSRobert Mustacchi     char * /*newerror*/);
5230bc1f688bSRobert Mustacchi 
5231bc1f688bSRobert Mustacchi /*  The size of the circular list of strings may be set
5232bc1f688bSRobert Mustacchi     and reset as needed.  If it is shortened excess
5233bc1f688bSRobert Mustacchi     messages are simply dropped.  It returns the previous
5234bc1f688bSRobert Mustacchi     size. If zero passed in the size is unchanged
5235bc1f688bSRobert 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*/);
5238bc1f688bSRobert Mustacchi /*  The harmless error strings (if any) are freed when the dbg
5239bc1f688bSRobert Mustacchi     is dwarf_finish()ed. */
5240bc1f688bSRobert Mustacchi 
5241bc1f688bSRobert Mustacchi /*  When the val_in is known these dwarf_get_TAG_name (etc)
5242bc1f688bSRobert Mustacchi     functions return the string corresponding to the val_in passed in
5243bc1f688bSRobert Mustacchi     through the pointer s_out and the value returned is DW_DLV_OK.
5244bc1f688bSRobert Mustacchi     The strings are in static storage
5245bc1f688bSRobert Mustacchi     and must not be freed.
5246bc1f688bSRobert Mustacchi     If DW_DLV_NO_ENTRY is returned the val_in is not known and
5247bc1f688bSRobert Mustacchi     *s_out is not set.  DW_DLV_ERROR is never returned.*/
5248bc1f688bSRobert Mustacchi 
5249*4d9fdb46SRobert Mustacchi /* The following copied from a generated dwarf_names.h */
5250*4d9fdb46SRobert Mustacchi 
5251*4d9fdb46SRobert Mustacchi /* BEGIN FILE */
5252bc1f688bSRobert Mustacchi extern int dwarf_get_ACCESS_name(unsigned int /*val_in*/, const char ** /*s_out */);
5253bc1f688bSRobert 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 */);
5255*4d9fdb46SRobert Mustacchi 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 */);
5263*4d9fdb46SRobert Mustacchi 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 */);
5265*4d9fdb46SRobert Mustacchi 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 */);
5268*4d9fdb46SRobert Mustacchi 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 */);
5270*4d9fdb46SRobert Mustacchi 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 */);
5277*4d9fdb46SRobert Mustacchi 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 */);
5279*4d9fdb46SRobert Mustacchi 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);
5452bc1f688bSRobert Mustacchi 
5453bc1f688bSRobert Mustacchi #ifdef __cplusplus
5454bc1f688bSRobert Mustacchi }
5455bc1f688bSRobert Mustacchi #endif
5456bc1f688bSRobert Mustacchi #endif /* _LIBDWARF_H */
5457