1*4d9fdb46SRobert Mustacchi/*
2*4d9fdb46SRobert Mustacchi
3*4d9fdb46SRobert Mustacchi  Copyright (C) 2000-2010 Silicon Graphics, Inc.  All Rights Reserved.
4*4d9fdb46SRobert Mustacchi  Portions Copyright 2007-2010 Sun Microsystems, Inc. All rights reserved.
5*4d9fdb46SRobert Mustacchi  Portions Copyright 2008-2018 David Anderson. All rights reserved.
6*4d9fdb46SRobert Mustacchi  Portions Copyright 2008-2010 Arxan Technologies, Inc. All rights reserved.
7*4d9fdb46SRobert Mustacchi  Portions Copyright 2010-2012 SN Systems Ltd. All rights reserved.
8*4d9fdb46SRobert Mustacchi
9*4d9fdb46SRobert Mustacchi  This program is free software; you can redistribute it
10*4d9fdb46SRobert Mustacchi  and/or modify it under the terms of version 2.1 of the
11*4d9fdb46SRobert Mustacchi  GNU Lesser General Public License as published by the Free
12*4d9fdb46SRobert Mustacchi  Software Foundation.
13*4d9fdb46SRobert Mustacchi
14*4d9fdb46SRobert Mustacchi  This program is distributed in the hope that it would be
15*4d9fdb46SRobert Mustacchi  useful, but WITHOUT ANY WARRANTY; without even the implied
16*4d9fdb46SRobert Mustacchi  warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
17*4d9fdb46SRobert Mustacchi  PURPOSE.
18*4d9fdb46SRobert Mustacchi
19*4d9fdb46SRobert Mustacchi  Further, this software is distributed without any warranty
20*4d9fdb46SRobert Mustacchi  that it is free of the rightful claim of any third person
21*4d9fdb46SRobert Mustacchi  regarding infringement or the like.  Any license provided
22*4d9fdb46SRobert Mustacchi  herein, whether implied or otherwise, applies only to this
23*4d9fdb46SRobert Mustacchi  software file.  Patent licenses, if any, provided herein
24*4d9fdb46SRobert Mustacchi  do not apply to combinations of this program with other
25*4d9fdb46SRobert Mustacchi  software, or any other product whatsoever.
26*4d9fdb46SRobert Mustacchi
27*4d9fdb46SRobert Mustacchi  You should have received a copy of the GNU Lesser General
28*4d9fdb46SRobert Mustacchi  Public License along with this program; if not, write the
29*4d9fdb46SRobert Mustacchi  Free Software Foundation, Inc., 51 Franklin Street - Fifth
30*4d9fdb46SRobert Mustacchi  Floor, Boston MA 02110-1301, USA.
31*4d9fdb46SRobert Mustacchi
32*4d9fdb46SRobert Mustacchi*/
33*4d9fdb46SRobert Mustacchi
34*4d9fdb46SRobert Mustacchi
35*4d9fdb46SRobert Mustacchi#ifndef _LIBDWARF_H
36*4d9fdb46SRobert Mustacchi#define _LIBDWARF_H
37*4d9fdb46SRobert Mustacchi#ifdef __cplusplus
38*4d9fdb46SRobert Mustacchiextern "C" {
39*4d9fdb46SRobert Mustacchi#endif
40*4d9fdb46SRobert Mustacchi/*
41*4d9fdb46SRobert Mustacchi    libdwarf.h
42*4d9fdb46SRobert Mustacchi    $Revision: #9 $ $Date: 2008/01/17 $
43*4d9fdb46SRobert Mustacchi
44*4d9fdb46SRobert Mustacchi    For libdwarf producers and consumers
45*4d9fdb46SRobert Mustacchi
46*4d9fdb46SRobert Mustacchi    The interface is defined as having 8-byte signed and unsigned
47*4d9fdb46SRobert 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
49*4d9fdb46SRobert Mustacchi    the host machine (not the target!).
50*4d9fdb46SRobert Mustacchi
51*4d9fdb46SRobert Mustacchi    This contains declarations for types and all producer
52*4d9fdb46SRobert Mustacchi    and consumer functions.
53*4d9fdb46SRobert Mustacchi
54*4d9fdb46SRobert Mustacchi    Function declarations are written on a single line each here
55*4d9fdb46SRobert Mustacchi    so one can use grep  to each declaration in its entirety.
56*4d9fdb46SRobert Mustacchi    The declarations are a little harder to read this way, but...
57*4d9fdb46SRobert 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
64*4d9fdb46SRobert Mustacchi*/
65*4d9fdb46SRobert Mustacchi
66*4d9fdb46SRobert Mustacchitypedef struct _Elf Elf;
67*4d9fdb46SRobert Mustacchitypedef struct _Elf* dwarf_elf_handle;
68*4d9fdb46SRobert Mustacchi
69*4d9fdb46SRobert 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.
73*4d9fdb46SRobert Mustacchi*/
74*4d9fdb46SRobert Mustacchi/*#define DW_PR_XZEROS "" */
75*4d9fdb46SRobert Mustacchi#define DW_PR_XZEROS "08"
76*4d9fdb46SRobert Mustacchi
77*4d9fdb46SRobert Mustacchitypedef unsigned long long Dwarf_Unsigned;
78*4d9fdb46SRobert Mustacchitypedef signed   long long Dwarf_Signed;
79*4d9fdb46SRobert Mustacchitypedef unsigned long long Dwarf_Off;
80*4d9fdb46SRobert Mustacchitypedef unsigned long long Dwarf_Addr;
81*4d9fdb46SRobert Mustacchitypedef int                Dwarf_Bool;   /* boolean type */
82*4d9fdb46SRobert Mustacchitypedef unsigned short     Dwarf_Half;   /* 2 byte unsigned value */
83*4d9fdb46SRobert Mustacchitypedef unsigned char      Dwarf_Small;  /* 1 byte unsigned value */
84*4d9fdb46SRobert Mustacchi/*  If sizeof(Dwarf_Half) is greater than 2
85*4d9fdb46SRobert Mustacchi    we believe libdwarf still works properly. */
86*4d9fdb46SRobert Mustacchi
87*4d9fdb46SRobert Mustacchi#if defined(_WIN32) && defined(HAVE_NONSTANDARD_PRINTF_64_FORMAT)
88*4d9fdb46SRobert Mustacchi#define DW_PR_DUx "I64x"
89*4d9fdb46SRobert Mustacchi#define DW_PR_DSx "I64x"
90*4d9fdb46SRobert Mustacchi#define DW_PR_DUu "I64u"
91*4d9fdb46SRobert Mustacchi#define DW_PR_DSd "I64d"
92*4d9fdb46SRobert Mustacchi#else
93*4d9fdb46SRobert Mustacchi#define DW_PR_DUx "llx"
94*4d9fdb46SRobert Mustacchi#define DW_PR_DSx "llx"
95*4d9fdb46SRobert Mustacchi#define DW_PR_DUu "llu"
96*4d9fdb46SRobert Mustacchi#define DW_PR_DSd "lld"
97*4d9fdb46SRobert Mustacchi#endif /* DW_PR defines */
98*4d9fdb46SRobert Mustacchi
99*4d9fdb46SRobert Mustacchitypedef void*        Dwarf_Ptr;          /* host machine pointer */
100*4d9fdb46SRobert 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 Mustacchitypedef 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
114*4d9fdb46SRobert Mustacchi   is 8 bytes of a signature one would use to find
115*4d9fdb46SRobert 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.
120*4d9fdb46SRobert Mustacchi*/
121*4d9fdb46SRobert Mustacchistruct Dwarf_Sig8_s  {
122*4d9fdb46SRobert Mustacchi    char signature[8];
123*4d9fdb46SRobert Mustacchi};
124*4d9fdb46SRobert Mustacchitypedef struct Dwarf_Sig8_s Dwarf_Sig8;
125*4d9fdb46SRobert Mustacchi
126*4d9fdb46SRobert 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<>.
129*4d9fdb46SRobert Mustacchi*/
130*4d9fdb46SRobert Mustacchitypedef struct {
131*4d9fdb46SRobert Mustacchi    Dwarf_Unsigned  bl_len;         /* length of block bl_data points at */
132*4d9fdb46SRobert 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;
139*4d9fdb46SRobert Mustacchi} Dwarf_Block;
140*4d9fdb46SRobert Mustacchi
141*4d9fdb46SRobert 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 Mustacchistruct  Dwarf_Locdesc_c_s;
146*4d9fdb46SRobert Mustacchitypedef 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 Mustacchistruct Dwarf_Loc_Head_c_s;
153*4d9fdb46SRobert Mustacchitypedef 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 Mustacchistruct Dwarf_Macro_Context_s;
157*4d9fdb46SRobert Mustacchitypedef 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 Mustacchitypedef 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. */
169*4d9fdb46SRobert Mustacchitypedef struct {
170*4d9fdb46SRobert Mustacchi    Dwarf_Small     lr_atom;        /* location operation */
171*4d9fdb46SRobert Mustacchi    Dwarf_Unsigned  lr_number;      /* operand */
172*4d9fdb46SRobert Mustacchi    Dwarf_Unsigned  lr_number2;     /* for OP_BREGx  and DW_OP_GNU_const_type*/
173*4d9fdb46SRobert Mustacchi    Dwarf_Unsigned  lr_offset;      /* offset in locexpr for OP_BRA etc */
174*4d9fdb46SRobert Mustacchi} Dwarf_Loc;
175*4d9fdb46SRobert Mustacchi
176*4d9fdb46SRobert 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.
194*4d9fdb46SRobert Mustacchi*/
195*4d9fdb46SRobert Mustacchitypedef 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
204*4d9fdb46SRobert Mustacchi    Dwarf_Half      ld_cents;       /* count of location records */
205*4d9fdb46SRobert 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) */
208*4d9fdb46SRobert Mustacchi    Dwarf_Small     ld_from_loclist;
209*4d9fdb46SRobert Mustacchi
210*4d9fdb46SRobert Mustacchi    Dwarf_Unsigned  ld_section_offset; /* Section (not CU) offset
211*4d9fdb46SRobert Mustacchi        where loc-expr begins*/
212*4d9fdb46SRobert Mustacchi} Dwarf_Locdesc;
213*4d9fdb46SRobert Mustacchi
214*4d9fdb46SRobert Mustacchi/*  First appears in DWARF3, and only ranges entries exist.
215*4d9fdb46SRobert Mustacchi    The dwr_addr1/addr2 data is either an offset (DW_RANGES_ENTRY)
216*4d9fdb46SRobert Mustacchi    or an address (dwr_addr2 in DW_RANGES_ADDRESS_SELECTION) or
217*4d9fdb46SRobert Mustacchi    both are zero (DW_RANGES_END).
218*4d9fdb46SRobert Mustacchi    For DWARF5 each table starts with a header
219*4d9fdb46SRobert Mustacchi    followed by range list entries defined
220*4d9fdb46SRobert Mustacchi    as here.
221*4d9fdb46SRobert Mustacchi*/
222*4d9fdb46SRobert Mustacchienum Dwarf_Ranges_Entry_Type { DW_RANGES_ENTRY,
223*4d9fdb46SRobert Mustacchi    DW_RANGES_ADDRESS_SELECTION,
224*4d9fdb46SRobert Mustacchi    DW_RANGES_END
225*4d9fdb46SRobert Mustacchi};
226*4d9fdb46SRobert Mustacchitypedef struct {
227*4d9fdb46SRobert Mustacchi    Dwarf_Addr dwr_addr1;
228*4d9fdb46SRobert Mustacchi    Dwarf_Addr dwr_addr2;
229*4d9fdb46SRobert Mustacchi    enum Dwarf_Ranges_Entry_Type  dwr_type;
230*4d9fdb46SRobert Mustacchi} Dwarf_Ranges;
231*4d9fdb46SRobert Mustacchi
232*4d9fdb46SRobert Mustacchi/* Frame description instructions expanded.
233*4d9fdb46SRobert Mustacchi*/
234*4d9fdb46SRobert Mustacchitypedef struct {
235*4d9fdb46SRobert Mustacchi    Dwarf_Small     fp_base_op;
236*4d9fdb46SRobert Mustacchi    Dwarf_Small     fp_extended_op;
237*4d9fdb46SRobert Mustacchi    Dwarf_Half      fp_register;
238*4d9fdb46SRobert Mustacchi
239*4d9fdb46SRobert Mustacchi    /*  Value may be signed, depends on op.
240*4d9fdb46SRobert Mustacchi        Any applicable data_alignment_factor has
241*4d9fdb46SRobert Mustacchi        not been applied, this is the  raw offset. */
242*4d9fdb46SRobert Mustacchi    Dwarf_Unsigned  fp_offset;
243*4d9fdb46SRobert Mustacchi    Dwarf_Off       fp_instr_offset;
244*4d9fdb46SRobert Mustacchi} Dwarf_Frame_Op; /* DWARF2 */
245*4d9fdb46SRobert Mustacchi
246*4d9fdb46SRobert Mustacchi/*  ***IMPORTANT NOTE, TARGET DEPENDENCY ****
247*4d9fdb46SRobert Mustacchi    DW_REG_TABLE_SIZE must be at least as large as
248*4d9fdb46SRobert Mustacchi    the number of registers
249*4d9fdb46SRobert Mustacchi    (DW_FRAME_LAST_REG_NUM) as defined in dwarf.h
250*4d9fdb46SRobert Mustacchi    Preferably identical to DW_FRAME_LAST_REG_NUM.
251*4d9fdb46SRobert Mustacchi    Ensure [0-DW_REG_TABLE_SIZE] does not overlap
252*4d9fdb46SRobert Mustacchi    DW_FRAME_UNDEFINED_VAL or DW_FRAME_SAME_VAL.
253*4d9fdb46SRobert Mustacchi    Also ensure DW_FRAME_REG_INITIAL_VALUE is set to what
254*4d9fdb46SRobert Mustacchi    is appropriate to your cpu.
255*4d9fdb46SRobert Mustacchi    For various CPUs  DW_FRAME_UNDEFINED_VAL is correct
256*4d9fdb46SRobert Mustacchi    as the value for DW_FRAME_REG_INITIAL_VALUE.
257*4d9fdb46SRobert Mustacchi
258*4d9fdb46SRobert Mustacchi    For consumer apps, this can be set dynamically: see
259*4d9fdb46SRobert Mustacchi    dwarf_set_frame_rule_table_size(); */
260*4d9fdb46SRobert Mustacchi#ifndef DW_REG_TABLE_SIZE
261*4d9fdb46SRobert Mustacchi#define DW_REG_TABLE_SIZE  66
262*4d9fdb46SRobert Mustacchi#endif
263*4d9fdb46SRobert Mustacchi
264*4d9fdb46SRobert Mustacchi/* For MIPS, DW_FRAME_SAME_VAL is the correct default value
265*4d9fdb46SRobert Mustacchi   for a frame register value. For other CPUS another value
266*4d9fdb46SRobert Mustacchi   may be better, such as DW_FRAME_UNDEFINED_VAL.
267*4d9fdb46SRobert Mustacchi   See dwarf_set_frame_rule_table_size
268*4d9fdb46SRobert Mustacchi*/
269*4d9fdb46SRobert Mustacchi#ifndef DW_FRAME_REG_INITIAL_VALUE
270*4d9fdb46SRobert Mustacchi#define DW_FRAME_REG_INITIAL_VALUE DW_FRAME_SAME_VAL
271*4d9fdb46SRobert Mustacchi#endif
272*4d9fdb46SRobert Mustacchi
273*4d9fdb46SRobert Mustacchi/* Taken as meaning 'undefined value', this is not
274*4d9fdb46SRobert Mustacchi   a column or register number.
275*4d9fdb46SRobert Mustacchi   Only present at libdwarf runtime in the consumer
276*4d9fdb46SRobert Mustacchi   interfaces. Never on disk.
277*4d9fdb46SRobert Mustacchi   DW_FRAME_* Values present on disk are in dwarf.h
278*4d9fdb46SRobert Mustacchi   Ensure this is > DW_REG_TABLE_SIZE (the reg table
279*4d9fdb46SRobert Mustacchi   size is changeable at runtime with the *reg3() interfaces,
280*4d9fdb46SRobert Mustacchi   and this value must be greater than the reg table size).
281*4d9fdb46SRobert Mustacchi*/
282*4d9fdb46SRobert Mustacchi#define DW_FRAME_UNDEFINED_VAL          1034
283*4d9fdb46SRobert Mustacchi
284*4d9fdb46SRobert Mustacchi/* Taken as meaning 'same value' as caller had, not a column
285*4d9fdb46SRobert Mustacchi   or register number.
286*4d9fdb46SRobert Mustacchi   Only present at libdwarf runtime in the consumer
287*4d9fdb46SRobert Mustacchi   interfaces. Never on disk.
288*4d9fdb46SRobert Mustacchi   DW_FRAME_* Values present on disk are in dwarf.h
289*4d9fdb46SRobert Mustacchi   Ensure this is > DW_REG_TABLE_SIZE (the reg table
290*4d9fdb46SRobert Mustacchi   size is changeable at runtime with the *reg3() interfaces,
291*4d9fdb46SRobert Mustacchi   and this value must be greater than the reg table size).
292*4d9fdb46SRobert Mustacchi*/
293*4d9fdb46SRobert Mustacchi#define DW_FRAME_SAME_VAL               1035
294*4d9fdb46SRobert Mustacchi
295*4d9fdb46SRobert Mustacchi/* For DWARF3 consumer interfaces, make the CFA a column with no
296*4d9fdb46SRobert Mustacchi   real table number.  This is what should have been done
297*4d9fdb46SRobert Mustacchi   for the DWARF2 interfaces.  This actually works for
298*4d9fdb46SRobert Mustacchi   both DWARF2 and DWARF3, but see the libdwarf documentation
299*4d9fdb46SRobert Mustacchi   on Dwarf_Regtable3 and  dwarf_get_fde_info_for_reg3()
300*4d9fdb46SRobert Mustacchi   and  dwarf_get_fde_info_for_all_regs3()
301*4d9fdb46SRobert Mustacchi   Do NOT use this with the older dwarf_get_fde_info_for_reg()
302*4d9fdb46SRobert Mustacchi   or dwarf_get_fde_info_for_all_regs() consumer interfaces.
303*4d9fdb46SRobert Mustacchi   Must be higher than any register count for *any* ABI
304*4d9fdb46SRobert Mustacchi   (ensures maximum applicability with minimum effort).
305*4d9fdb46SRobert Mustacchi   Ensure this is > DW_REG_TABLE_SIZE (the reg table
306*4d9fdb46SRobert Mustacchi   size is changeable at runtime with the *reg3() interfaces,
307*4d9fdb46SRobert Mustacchi   and this value must be greater than the reg table size).
308*4d9fdb46SRobert Mustacchi   Only present at libdwarf runtime in the consumer
309*4d9fdb46SRobert Mustacchi   interfaces. Never on disk.
310*4d9fdb46SRobert Mustacchi*/
311*4d9fdb46SRobert Mustacchi#define DW_FRAME_CFA_COL3               1436
312*4d9fdb46SRobert Mustacchi
313*4d9fdb46SRobert Mustacchi/* The following are all needed to evaluate DWARF3 register rules.
314*4d9fdb46SRobert Mustacchi*/
315*4d9fdb46SRobert Mustacchi#define DW_EXPR_OFFSET 0  /* DWARF2 only sees this. */
316*4d9fdb46SRobert Mustacchi#define DW_EXPR_VAL_OFFSET 1
317*4d9fdb46SRobert Mustacchi#define DW_EXPR_EXPRESSION 2
318*4d9fdb46SRobert Mustacchi#define DW_EXPR_VAL_EXPRESSION 3
319*4d9fdb46SRobert Mustacchi
320*4d9fdb46SRobert Mustacchitypedef struct Dwarf_Regtable_Entry_s {
321*4d9fdb46SRobert Mustacchi    /*  For each index i (naming a hardware register with dwarf number
322*4d9fdb46SRobert Mustacchi        i) the following is true and defines the value of that register:
323*4d9fdb46SRobert Mustacchi
324*4d9fdb46SRobert Mustacchi        If dw_regnum is Register DW_FRAME_UNDEFINED_VAL
325*4d9fdb46SRobert Mustacchi            it is not DWARF register number but
326*4d9fdb46SRobert Mustacchi            a place holder indicating the register has no defined value.
327*4d9fdb46SRobert Mustacchi        If dw_regnum is Register DW_FRAME_SAME_VAL
328*4d9fdb46SRobert Mustacchi            it  is not DWARF register number but
329*4d9fdb46SRobert Mustacchi            a place holder indicating the register has the same
330*4d9fdb46SRobert Mustacchi            value in the previous frame.
331*4d9fdb46SRobert Mustacchi
332*4d9fdb46SRobert Mustacchi            DW_FRAME_UNDEFINED_VAL, DW_FRAME_SAME_VAL are
333*4d9fdb46SRobert Mustacchi            only present at libdwarf runtime. Never on disk.
334*4d9fdb46SRobert Mustacchi            DW_FRAME_* Values present on disk are in dwarf.h
335*4d9fdb46SRobert Mustacchi
336*4d9fdb46SRobert Mustacchi        Otherwise: the register number is a DWARF register number
337*4d9fdb46SRobert Mustacchi            (see ABI documents for how this translates to hardware/
338*4d9fdb46SRobert Mustacchi            software register numbers in the machine hardware)
339*4d9fdb46SRobert Mustacchi            and the following applies:
340*4d9fdb46SRobert Mustacchi
341*4d9fdb46SRobert Mustacchi            if dw_value_type == DW_EXPR_OFFSET (the only case for dwarf2):
342*4d9fdb46SRobert Mustacchi                If dw_offset_relevant is non-zero, then
343*4d9fdb46SRobert Mustacchi                    the value is stored at at the address CFA+N where
344*4d9fdb46SRobert Mustacchi                    N is a signed offset.
345*4d9fdb46SRobert Mustacchi                    Rule: Offset(N)
346*4d9fdb46SRobert Mustacchi                If dw_offset_relevant is zero, then the value of the register
347*4d9fdb46SRobert Mustacchi                    is the value of (DWARF) register number dw_regnum.
348*4d9fdb46SRobert Mustacchi                    Rule: register(F)
349*4d9fdb46SRobert Mustacchi            Other values of dw_value_type are an error.
350*4d9fdb46SRobert Mustacchi    */
351*4d9fdb46SRobert Mustacchi    Dwarf_Small         dw_offset_relevant;
352*4d9fdb46SRobert Mustacchi
353*4d9fdb46SRobert Mustacchi    /* For DWARF2, always 0 */
354*4d9fdb46SRobert Mustacchi    Dwarf_Small         dw_value_type;
355*4d9fdb46SRobert Mustacchi
356*4d9fdb46SRobert Mustacchi    Dwarf_Half          dw_regnum;
357*4d9fdb46SRobert Mustacchi
358*4d9fdb46SRobert Mustacchi    /*  The data type here should  the larger of Dwarf_Addr
359*4d9fdb46SRobert Mustacchi        and Dwarf_Unsigned and Dwarf_Signed. */
360*4d9fdb46SRobert Mustacchi    Dwarf_Addr          dw_offset;
361*4d9fdb46SRobert Mustacchi} Dwarf_Regtable_Entry;
362*4d9fdb46SRobert Mustacchi
363*4d9fdb46SRobert Mustacchitypedef struct Dwarf_Regtable_s {
364*4d9fdb46SRobert Mustacchi    struct Dwarf_Regtable_Entry_s rules[DW_REG_TABLE_SIZE];
365*4d9fdb46SRobert Mustacchi} Dwarf_Regtable;
366*4d9fdb46SRobert Mustacchi
367*4d9fdb46SRobert Mustacchi/* opaque type. Functional interface shown later. */
368*4d9fdb46SRobert Mustacchistruct Dwarf_Reg_value3_s;
369*4d9fdb46SRobert Mustacchitypedef struct Dwarf_Reg_value3_s Dwarf_Reg_Value3;
370*4d9fdb46SRobert Mustacchi
371*4d9fdb46SRobert Mustacchitypedef struct Dwarf_Regtable_Entry3_s {
372*4d9fdb46SRobert Mustacchi/*  For each index i (naming a hardware register with dwarf number
373*4d9fdb46SRobert Mustacchi    i) the following is true and defines the value of that register:
374*4d9fdb46SRobert Mustacchi
375*4d9fdb46SRobert Mustacchi        If dw_regnum is Register DW_FRAME_UNDEFINED_VAL
376*4d9fdb46SRobert Mustacchi            it is not DWARF register number but
377*4d9fdb46SRobert Mustacchi            a place holder indicating the register has no defined value.
378*4d9fdb46SRobert Mustacchi        If dw_regnum is Register DW_FRAME_SAME_VAL
379*4d9fdb46SRobert Mustacchi            it  is not DWARF register number but
380*4d9fdb46SRobert Mustacchi            a place holder indicating the register has the same
381*4d9fdb46SRobert Mustacchi            value in the previous frame.
382*4d9fdb46SRobert Mustacchi
383*4d9fdb46SRobert Mustacchi            DW_FRAME_UNDEFINED_VAL, DW_FRAME_SAME_VAL and
384*4d9fdb46SRobert Mustacchi            DW_FRAME_CFA_COL3 are only present at libdwarf runtime.
385*4d9fdb46SRobert Mustacchi            Never on disk.
386*4d9fdb46SRobert Mustacchi            DW_FRAME_* Values present on disk are in dwarf.h
387*4d9fdb46SRobert Mustacchi            Because DW_FRAME_SAME_VAL and DW_FRAME_UNDEFINED_VAL
388*4d9fdb46SRobert Mustacchi            and DW_FRAME_CFA_COL3 are definable at runtime
389*4d9fdb46SRobert Mustacchi            consider the names symbolic in this comment, not absolute.
390*4d9fdb46SRobert Mustacchi
391*4d9fdb46SRobert Mustacchi        Otherwise: the register number is a DWARF register number
392*4d9fdb46SRobert Mustacchi            (see ABI documents for how this translates to hardware/
393*4d9fdb46SRobert Mustacchi            software register numbers in the machine hardware)
394*4d9fdb46SRobert Mustacchi            and the following applies:
395*4d9fdb46SRobert Mustacchi
396*4d9fdb46SRobert Mustacchi        In a cfa-defining entry (rt3_cfa_rule) the regnum is the
397*4d9fdb46SRobert Mustacchi        CFA 'register number'. Which is some 'normal' register,
398*4d9fdb46SRobert Mustacchi        not DW_FRAME_CFA_COL3, nor DW_FRAME_SAME_VAL, nor
399*4d9fdb46SRobert Mustacchi        DW_FRAME_UNDEFINED_VAL.
400*4d9fdb46SRobert Mustacchi
401*4d9fdb46SRobert Mustacchi        If dw_value_type == DW_EXPR_OFFSET (the only  possible case for
402*4d9fdb46SRobert Mustacchi        dwarf2):
403*4d9fdb46SRobert Mustacchi            If dw_offset_relevant is non-zero, then
404*4d9fdb46SRobert Mustacchi                the value is stored at at the address
405*4d9fdb46SRobert Mustacchi                CFA+N where N is a signed offset.
406*4d9fdb46SRobert Mustacchi                dw_regnum is the cfa register rule which means
407*4d9fdb46SRobert Mustacchi                one ignores dw_regnum and uses the CFA appropriately.
408*4d9fdb46SRobert Mustacchi                So dw_offset_or_block_len is a signed value, really,
409*4d9fdb46SRobert Mustacchi                and must be printed/evaluated as such.
410*4d9fdb46SRobert Mustacchi                Rule: Offset(N)
411*4d9fdb46SRobert Mustacchi            If dw_offset_relevant is zero, then the value of the register
412*4d9fdb46SRobert Mustacchi                is the value of (DWARF) register number dw_regnum.
413*4d9fdb46SRobert Mustacchi                Rule: register(R)
414*4d9fdb46SRobert Mustacchi        If dw_value_type  == DW_EXPR_VAL_OFFSET
415*4d9fdb46SRobert Mustacchi            the  value of this register is CFA +N where N is a signed offset.
416*4d9fdb46SRobert Mustacchi            dw_regnum is the cfa register rule which means
417*4d9fdb46SRobert Mustacchi            one ignores dw_regnum and uses the CFA appropriately.
418*4d9fdb46SRobert Mustacchi            Rule: val_offset(N)
419*4d9fdb46SRobert Mustacchi        If dw_value_type  == DW_EXPR_EXPRESSION
420*4d9fdb46SRobert Mustacchi            The value of the register is the value at the address
421*4d9fdb46SRobert Mustacchi            computed by evaluating the DWARF expression E.
422*4d9fdb46SRobert Mustacchi            Rule: expression(E)
423*4d9fdb46SRobert Mustacchi            The expression E byte stream is pointed to by dw_block_ptr.
424*4d9fdb46SRobert Mustacchi            The expression length in bytes is given by
425*4d9fdb46SRobert Mustacchi            dw_offset_or_block_len.
426*4d9fdb46SRobert Mustacchi        If dw_value_type  == DW_EXPR_VAL_EXPRESSION
427*4d9fdb46SRobert Mustacchi            The value of the register is the value
428*4d9fdb46SRobert Mustacchi            computed by evaluating the DWARF expression E.
429*4d9fdb46SRobert Mustacchi            Rule: val_expression(E)
430*4d9fdb46SRobert Mustacchi            The expression E byte stream is pointed to by dw_block_ptr.
431*4d9fdb46SRobert Mustacchi            The expression length in bytes is given by
432*4d9fdb46SRobert Mustacchi            dw_offset_or_block_len.
433*4d9fdb46SRobert Mustacchi        Other values of dw_value_type are an error.
434*4d9fdb46SRobert Mustacchi*/
435*4d9fdb46SRobert Mustacchi    Dwarf_Small         dw_offset_relevant;
436*4d9fdb46SRobert Mustacchi    Dwarf_Small         dw_value_type;
437*4d9fdb46SRobert Mustacchi    Dwarf_Half          dw_regnum;
438*4d9fdb46SRobert Mustacchi    Dwarf_Unsigned      dw_offset_or_block_len;
439*4d9fdb46SRobert Mustacchi    Dwarf_Ptr           dw_block_ptr;
440*4d9fdb46SRobert Mustacchi
441*4d9fdb46SRobert Mustacchi}Dwarf_Regtable_Entry3;
442*4d9fdb46SRobert Mustacchi
443*4d9fdb46SRobert Mustacchi/*  For the DWARF3 version, moved the DW_FRAME_CFA_COL
444*4d9fdb46SRobert Mustacchi    out of the array and into its own struct.
445*4d9fdb46SRobert Mustacchi    Having it part of the array is not very easy to work
446*4d9fdb46SRobert Mustacchi    with from a portability point of view: changing
447*4d9fdb46SRobert Mustacchi    the number for every architecture is a pain (if one fails
448*4d9fdb46SRobert Mustacchi    to set it correctly a register rule gets clobbered when
449*4d9fdb46SRobert Mustacchi    setting CFA).  With MIPS it just happened to be easy to use
450*4d9fdb46SRobert Mustacchi    DW_FRAME_CFA_COL (it was wrong conceptually but it was easy...).
451*4d9fdb46SRobert Mustacchi
452*4d9fdb46SRobert Mustacchi    rt3_rules and rt3_reg_table_size must be filled in before
453*4d9fdb46SRobert Mustacchi    calling libdwarf.  Filled in with a pointer to an array
454*4d9fdb46SRobert Mustacchi    (pointer and array  set up by the calling application)
455*4d9fdb46SRobert Mustacchi    of rt3_reg_table_size Dwarf_Regtable_Entry3_s structs.
456*4d9fdb46SRobert Mustacchi    libdwarf does not allocate or deallocate space for the
457*4d9fdb46SRobert Mustacchi    rules, you must do so.   libdwarf will initialize the
458*4d9fdb46SRobert Mustacchi    contents rules array, you do not need to do so (though
459*4d9fdb46SRobert Mustacchi    if you choose to initialize the array somehow that is ok:
460*4d9fdb46SRobert Mustacchi    libdwarf will overwrite your initializations with its own).
461*4d9fdb46SRobert Mustacchi
462*4d9fdb46SRobert Mustacchi*/
463*4d9fdb46SRobert Mustacchitypedef struct Dwarf_Regtable3_s {
464*4d9fdb46SRobert Mustacchi    struct Dwarf_Regtable_Entry3_s   rt3_cfa_rule;
465*4d9fdb46SRobert Mustacchi
466*4d9fdb46SRobert Mustacchi    Dwarf_Half                       rt3_reg_table_size;
467*4d9fdb46SRobert Mustacchi    struct Dwarf_Regtable_Entry3_s * rt3_rules;
468*4d9fdb46SRobert Mustacchi} Dwarf_Regtable3;
469*4d9fdb46SRobert Mustacchi
470*4d9fdb46SRobert Mustacchi
471*4d9fdb46SRobert Mustacchi/*  Use for DW_EPXR_STANDARD., DW_EXPR_VAL_OFFSET.
472*4d9fdb46SRobert Mustacchi    Returns DW_DLV_OK if the value is available.
473*4d9fdb46SRobert Mustacchi    If DW_DLV_OK returns the regnum and offset thru the pointers
474*4d9fdb46SRobert Mustacchi    (which the consumer must use appropriately).
475*4d9fdb46SRobert Mustacchi*/
476*4d9fdb46SRobert Mustacchiint dwarf_frame_get_reg_register(struct Dwarf_Regtable_Entry3_s *reg_in,
477*4d9fdb46SRobert Mustacchi    Dwarf_Small *offset_relevant,
478*4d9fdb46SRobert Mustacchi    Dwarf_Half *regnum_out,
479*4d9fdb46SRobert Mustacchi    Dwarf_Signed *offset_out);
480*4d9fdb46SRobert Mustacchi
481*4d9fdb46SRobert Mustacchi/*  Use for DW_EXPR_EXPRESSION, DW_EXPR_VAL_EXPRESSION.
482*4d9fdb46SRobert Mustacchi    Returns DW_DLV_OK if the value is available.
483*4d9fdb46SRobert Mustacchi    The caller must pass in the address of a valid
484*4d9fdb46SRobert Mustacchi    Dwarf_Block (the caller need not initialize it).
485*4d9fdb46SRobert Mustacchi*/
486*4d9fdb46SRobert Mustacchiint dwarf_frame_get_reg_expression(struct Dwarf_Regtable_Entry3_s *reg_in,
487*4d9fdb46SRobert Mustacchi    Dwarf_Block *block_out);
488*4d9fdb46SRobert Mustacchi
489*4d9fdb46SRobert Mustacchi
490*4d9fdb46SRobert Mustacchi/*  For DW_DLC_SYMBOLIC_RELOCATIONS output to caller
491*4d9fdb46SRobert Mustacchi    v2, adding drd_length: some relocations are 4 and
492*4d9fdb46SRobert Mustacchi    some 8 bytes (pointers are 8, section offsets 4) in
493*4d9fdb46SRobert Mustacchi    some dwarf environments. (MIPS relocations are all one
494*4d9fdb46SRobert Mustacchi    size in any given ABI.) Changing drd_type to an unsigned char
495*4d9fdb46SRobert Mustacchi    to keep struct size down.
496*4d9fdb46SRobert Mustacchi*/
497*4d9fdb46SRobert Mustacchienum Dwarf_Rel_Type {
498*4d9fdb46SRobert Mustacchi    dwarf_drt_none,        /* Should not get to caller */
499*4d9fdb46SRobert Mustacchi    dwarf_drt_data_reloc,  /* Simple normal relocation. */
500*4d9fdb46SRobert Mustacchi    dwarf_drt_segment_rel, /* Special reloc, exceptions. */
501*4d9fdb46SRobert Mustacchi    /* dwarf_drt_first_of_length_pair  and drt_second
502*4d9fdb46SRobert Mustacchi        are for for the  .word end - begin case. */
503*4d9fdb46SRobert Mustacchi    dwarf_drt_first_of_length_pair,
504*4d9fdb46SRobert Mustacchi    dwarf_drt_second_of_length_pair
505*4d9fdb46SRobert Mustacchi};
506*4d9fdb46SRobert Mustacchi
507*4d9fdb46SRobert Mustacchitypedef struct Dwarf_P_Marker_s * Dwarf_P_Marker;
508*4d9fdb46SRobert Mustacchistruct Dwarf_P_Marker_s {
509*4d9fdb46SRobert Mustacchi    Dwarf_Unsigned ma_marker;
510*4d9fdb46SRobert Mustacchi    Dwarf_Unsigned ma_offset;
511*4d9fdb46SRobert Mustacchi};
512*4d9fdb46SRobert Mustacchi
513*4d9fdb46SRobert Mustacchitypedef struct Dwarf_Relocation_Data_s  * Dwarf_Relocation_Data;
514*4d9fdb46SRobert Mustacchistruct Dwarf_Relocation_Data_s {
515*4d9fdb46SRobert Mustacchi    unsigned char drd_type;   /* Cast to/from Dwarf_Rel_Type
516*4d9fdb46SRobert Mustacchi        to keep size small in struct. */
517*4d9fdb46SRobert Mustacchi    unsigned char drd_length; /* Length in bytes of data being
518*4d9fdb46SRobert Mustacchi        relocated. 4 for 32bit data,
519*4d9fdb46SRobert Mustacchi        8 for 64bit data. */
520*4d9fdb46SRobert Mustacchi    Dwarf_Unsigned       drd_offset; /* Where the data to reloc is. */
521*4d9fdb46SRobert Mustacchi    Dwarf_Unsigned       drd_symbol_index;
522*4d9fdb46SRobert Mustacchi};
523*4d9fdb46SRobert Mustacchi
524*4d9fdb46SRobert Mustacchitypedef struct Dwarf_P_String_Attr_s  * Dwarf_P_String_Attr;
525*4d9fdb46SRobert Mustacchistruct Dwarf_P_String_Attr_s {
526*4d9fdb46SRobert Mustacchi    Dwarf_Unsigned        sa_offset;  /* Offset of string attribute data */
527*4d9fdb46SRobert Mustacchi    Dwarf_Unsigned        sa_nbytes;
528*4d9fdb46SRobert Mustacchi};
529*4d9fdb46SRobert Mustacchi
530*4d9fdb46SRobert Mustacchi
531*4d9fdb46SRobert Mustacchi/* Opaque types for Consumer Library. */
532*4d9fdb46SRobert Mustacchitypedef struct Dwarf_Debug_s*      Dwarf_Debug;
533*4d9fdb46SRobert Mustacchitypedef struct Dwarf_Die_s*        Dwarf_Die;
534*4d9fdb46SRobert Mustacchitypedef struct Dwarf_Line_s*       Dwarf_Line;
535*4d9fdb46SRobert Mustacchitypedef struct Dwarf_Global_s*     Dwarf_Global;
536*4d9fdb46SRobert Mustacchitypedef struct Dwarf_Func_s*       Dwarf_Func;
537*4d9fdb46SRobert Mustacchitypedef struct Dwarf_Type_s*       Dwarf_Type;
538*4d9fdb46SRobert Mustacchitypedef struct Dwarf_Var_s*        Dwarf_Var;
539*4d9fdb46SRobert Mustacchitypedef struct Dwarf_Weak_s*       Dwarf_Weak;
540*4d9fdb46SRobert Mustacchitypedef struct Dwarf_Error_s*      Dwarf_Error;
541*4d9fdb46SRobert Mustacchitypedef struct Dwarf_Attribute_s*  Dwarf_Attribute;
542*4d9fdb46SRobert Mustacchitypedef struct Dwarf_Abbrev_s*     Dwarf_Abbrev;
543*4d9fdb46SRobert Mustacchitypedef struct Dwarf_Fde_s*        Dwarf_Fde;
544*4d9fdb46SRobert Mustacchitypedef struct Dwarf_Cie_s*        Dwarf_Cie;
545*4d9fdb46SRobert Mustacchitypedef struct Dwarf_Arange_s*     Dwarf_Arange;
546*4d9fdb46SRobert Mustacchitypedef struct Dwarf_Gdbindex_s*   Dwarf_Gdbindex;
547*4d9fdb46SRobert Mustacchistruct Dwarf_Xu_Index_Header_s;
548*4d9fdb46SRobert Mustacchitypedef struct Dwarf_Xu_Index_Header_s  *Dwarf_Xu_Index_Header;
549*4d9fdb46SRobert Mustacchistruct Dwarf_Line_Context_s;
550*4d9fdb46SRobert Mustacchitypedef struct Dwarf_Line_Context_s     *Dwarf_Line_Context;
551*4d9fdb46SRobert Mustacchistruct Dwarf_Macro_Context_s;
552*4d9fdb46SRobert Mustacchitypedef struct Dwarf_Macro_Context_s    *Dwarf_Macro_Context;
553*4d9fdb46SRobert Mustacchistruct Dwarf_Dnames_Head_s;
554*4d9fdb46SRobert Mustacchitypedef struct Dwarf_Dnames_Head_s      *Dwarf_Dnames_Head;
555*4d9fdb46SRobert Mustacchi
556*4d9fdb46SRobert Mustacchi
557*4d9fdb46SRobert Mustacchi/* Opaque types for Producer Library. */
558*4d9fdb46SRobert Mustacchitypedef struct Dwarf_P_Debug_s*       Dwarf_P_Debug;
559*4d9fdb46SRobert Mustacchitypedef struct Dwarf_P_Die_s*         Dwarf_P_Die;
560*4d9fdb46SRobert Mustacchitypedef struct Dwarf_P_Attribute_s*   Dwarf_P_Attribute;
561*4d9fdb46SRobert Mustacchitypedef struct Dwarf_P_Fde_s*         Dwarf_P_Fde;
562*4d9fdb46SRobert Mustacchitypedef struct Dwarf_P_Expr_s*        Dwarf_P_Expr;
563*4d9fdb46SRobert Mustacchitypedef Dwarf_Unsigned                Dwarf_Tag;
564*4d9fdb46SRobert Mustacchi
565*4d9fdb46SRobert Mustacchi
566*4d9fdb46SRobert Mustacchi/* error handler function
567*4d9fdb46SRobert Mustacchi*/
568*4d9fdb46SRobert Mustacchitypedef void  (*Dwarf_Handler)(Dwarf_Error /*error*/, Dwarf_Ptr /*errarg*/);
569*4d9fdb46SRobert Mustacchi
570*4d9fdb46SRobert Mustacchi
571*4d9fdb46SRobert Mustacchi/* Begin libdwarf Object File Interface declarations.
572*4d9fdb46SRobert Mustacchi
573*4d9fdb46SRobert MustacchiAs of February 2008 there are multiple dwarf_reader object access
574*4d9fdb46SRobert Mustacchiinitialization methods available:
575*4d9fdb46SRobert MustacchiThe traditional dwarf_elf_init() and dwarf_init()  and dwarf_finish()
576*4d9fdb46SRobert Mustacchi    which assume libelf and POSIX file access.
577*4d9fdb46SRobert MustacchiAn object-file and library agnostic dwarf_object_init() and dwarf_object_finish()
578*4d9fdb46SRobert Mustacchi    which allow the coder to provide object access routines
579*4d9fdb46SRobert Mustacchi    abstracting away the elf interface.  So there is no dependence in the
580*4d9fdb46SRobert Mustacchi    reader code on the object format and no dependence on libelf.
581*4d9fdb46SRobert Mustacchi    See the code in dwarf_elf_access.c  and dwarf_original_elf_init.c
582*4d9fdb46SRobert Mustacchi    to see an example of initializing the structures mentioned below.
583*4d9fdb46SRobert Mustacchi
584*4d9fdb46SRobert MustacchiProjects using dwarf_elf_init() or dwarf_init() can ignore
585*4d9fdb46SRobert Mustacchithe Dwarf_Obj_Access* structures entirely as all these details
586*4d9fdb46SRobert Mustacchiare completed for you.
587*4d9fdb46SRobert Mustacchi
588*4d9fdb46SRobert MustacchiAs of March 2017 additional
589*4d9fdb46SRobert Mustacchifunctions dwarf_elf_init_b
590*4d9fdb46SRobert Mustacchiand dwarf_init_b
591*4d9fdb46SRobert Mustacchiand dwarf_object_init_b
592*4d9fdb46SRobert Mustacchiadd a groupnumber argument so DWARF5
593*4d9fdb46SRobert Mustacchisplit-dwarf sections can be accessed.
594*4d9fdb46SRobert Mustacchi*/
595*4d9fdb46SRobert Mustacchi
596*4d9fdb46SRobert Mustacchitypedef struct Dwarf_Obj_Access_Interface_s   Dwarf_Obj_Access_Interface;
597*4d9fdb46SRobert Mustacchitypedef struct Dwarf_Obj_Access_Methods_s     Dwarf_Obj_Access_Methods;
598*4d9fdb46SRobert Mustacchitypedef struct Dwarf_Obj_Access_Section_s     Dwarf_Obj_Access_Section;
599*4d9fdb46SRobert Mustacchi
600*4d9fdb46SRobert Mustacchi
601*4d9fdb46SRobert Mustacchi/*  Used in the get_section interface function
602*4d9fdb46SRobert Mustacchi    in Dwarf_Obj_Access_Section_s.  Since libdwarf
603*4d9fdb46SRobert Mustacchi    depends on standard DWARF section names an object
604*4d9fdb46SRobert Mustacchi    format that has no such names (but has some
605*4d9fdb46SRobert Mustacchi    method of setting up 'sections equivalents')
606*4d9fdb46SRobert Mustacchi    must arrange to return standard DWARF section
607*4d9fdb46SRobert Mustacchi    names in the 'name' field.  libdwarf does
608*4d9fdb46SRobert Mustacchi    not free the strings in 'name'. */
609*4d9fdb46SRobert Mustacchistruct 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. */
613*4d9fdb46SRobert 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. */
619*4d9fdb46SRobert 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.  */
623*4d9fdb46SRobert Mustacchi    const char*    name;
624*4d9fdb46SRobert Mustacchi    /*  Set link to zero if it is meaningless.  If non-zero
625*4d9fdb46SRobert Mustacchi        it should be a link to a rela section or from symtab
626*4d9fdb46SRobert Mustacchi        to strtab.  In Elf it is sh_link. */
627*4d9fdb46SRobert 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;
638*4d9fdb46SRobert Mustacchi};
639*4d9fdb46SRobert Mustacchi
640*4d9fdb46SRobert Mustacchi/*  Returned by the get_endianness function in
641*4d9fdb46SRobert Mustacchi    Dwarf_Obj_Access_Methods_s. */
642*4d9fdb46SRobert Mustacchitypedef enum {
643*4d9fdb46SRobert Mustacchi    DW_OBJECT_MSB,
644*4d9fdb46SRobert Mustacchi    DW_OBJECT_LSB
645*4d9fdb46SRobert Mustacchi} Dwarf_Endianness;
646*4d9fdb46SRobert Mustacchi
647*4d9fdb46SRobert Mustacchi/*  The functions we need to access object data from libdwarf are declared here.
648*4d9fdb46SRobert Mustacchi
649*4d9fdb46SRobert Mustacchi    In these function pointer declarations
650*4d9fdb46SRobert Mustacchi    'void *obj' is intended to be a pointer (the object field in
651*4d9fdb46SRobert Mustacchi    Dwarf_Obj_Access_Interface_s)
652*4d9fdb46SRobert Mustacchi    that hides the library-specific and object-specific data that makes
653*4d9fdb46SRobert Mustacchi    it possible to handle multiple object formats and multiple libraries.
654*4d9fdb46SRobert Mustacchi    It's not required that one handles multiple such in a single libdwarf
655*4d9fdb46SRobert Mustacchi    archive/shared-library (but not ruled out either).
656*4d9fdb46SRobert Mustacchi    See  dwarf_elf_object_access_internals_t and dwarf_elf_access.c
657*4d9fdb46SRobert Mustacchi    for an example.
658*4d9fdb46SRobert Mustacchi
659*4d9fdb46SRobert Mustacchi*/
660*4d9fdb46SRobert Mustacchistruct Dwarf_Obj_Access_Methods_s {
661*4d9fdb46SRobert Mustacchi    /*
662*4d9fdb46SRobert Mustacchi        get_section_info
663*4d9fdb46SRobert Mustacchi
664*4d9fdb46SRobert Mustacchi        Get address, size, and name info about a section.
665*4d9fdb46SRobert Mustacchi
666*4d9fdb46SRobert Mustacchi        Parameters
667*4d9fdb46SRobert Mustacchi        section_index - Zero-based index.
668*4d9fdb46SRobert Mustacchi        return_section - Pointer to a structure in which section info
669*4d9fdb46SRobert Mustacchi            will be placed.   Caller must provide a valid pointer to a
670*4d9fdb46SRobert Mustacchi            structure area.  The structure's contents will be overwritten
671*4d9fdb46SRobert Mustacchi            by the call to get_section_info.
672*4d9fdb46SRobert Mustacchi        error - A pointer to an integer in which an error code may be stored.
673*4d9fdb46SRobert Mustacchi
674*4d9fdb46SRobert Mustacchi        Return
675*4d9fdb46SRobert Mustacchi        DW_DLV_OK - Everything ok.
676*4d9fdb46SRobert Mustacchi        DW_DLV_ERROR - Error occurred. Use 'error' to determine the
677*4d9fdb46SRobert Mustacchi            libdwarf defined error.
678*4d9fdb46SRobert Mustacchi        DW_DLV_NO_ENTRY - No such section.  */
679*4d9fdb46SRobert Mustacchi    int    (*get_section_info)(void* obj, Dwarf_Half section_index,
680*4d9fdb46SRobert Mustacchi        Dwarf_Obj_Access_Section* return_section, int* error);
681*4d9fdb46SRobert Mustacchi    /*
682*4d9fdb46SRobert Mustacchi        get_byte_order
683*4d9fdb46SRobert Mustacchi
684*4d9fdb46SRobert Mustacchi        Get whether the object file represented by this interface is big-endian
685*4d9fdb46SRobert Mustacchi        (DW_OBJECT_MSB) or little endian (DW_OBJECT_LSB).
686*4d9fdb46SRobert Mustacchi
687*4d9fdb46SRobert Mustacchi        Parameters
688*4d9fdb46SRobert Mustacchi        obj - Equivalent to 'this' in OO languages.
689*4d9fdb46SRobert Mustacchi
690*4d9fdb46SRobert Mustacchi        Return
691*4d9fdb46SRobert Mustacchi        Endianness of object. Cannot fail.  */
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.  */
716*4d9fdb46SRobert 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 */
726*4d9fdb46SRobert 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.  */
744*4d9fdb46SRobert Mustacchi    int    (*load_section)(void* obj, Dwarf_Half section_index,
745*4d9fdb46SRobert Mustacchi        Dwarf_Small** return_data, int* error);
746*4d9fdb46SRobert Mustacchi
747*4d9fdb46SRobert Mustacchi    /**
748*4d9fdb46SRobert Mustacchi        relocate_a_section
749*4d9fdb46SRobert Mustacchi        If relocations are not supported leave this pointer NULL.
750*4d9fdb46SRobert Mustacchi
751*4d9fdb46SRobert Mustacchi        Get a pointer to an array of bytes that represent the section.
752*4d9fdb46SRobert Mustacchi
753*4d9fdb46SRobert Mustacchi        Parameters
754*4d9fdb46SRobert Mustacchi        section_index - Zero-based index of the section to be relocated.
755*4d9fdb46SRobert Mustacchi        error - Pointer to an integer for returning libdwarf-defined
756*4d9fdb46SRobert Mustacchi            error numbers.
757*4d9fdb46SRobert Mustacchi
758*4d9fdb46SRobert Mustacchi        Return
759*4d9fdb46SRobert Mustacchi        DW_DLV_OK - No error.
760*4d9fdb46SRobert Mustacchi        DW_DLV_ERROR - Error. Use 'error' to indicate a libdwarf-defined
761*4d9fdb46SRobert Mustacchi            error number.
762*4d9fdb46SRobert Mustacchi        DW_DLV_NO_ENTRY - No such section.  */
763*4d9fdb46SRobert Mustacchi    int    (*relocate_a_section)(void* obj, Dwarf_Half section_index,
764*4d9fdb46SRobert Mustacchi        Dwarf_Debug dbg,
765*4d9fdb46SRobert Mustacchi        int* error);
766*4d9fdb46SRobert Mustacchi
767*4d9fdb46SRobert Mustacchi};
768*4d9fdb46SRobert Mustacchi
769*4d9fdb46SRobert Mustacchi
770*4d9fdb46SRobert Mustacchi
771*4d9fdb46SRobert Mustacchi/*  These structures are allocated and deallocated by your code
772*4d9fdb46SRobert Mustacchi    when you are using the libdwarf Object File Interface
773*4d9fdb46SRobert Mustacchi    [dwarf_object_init and dwarf_object_finish)] directly.
774*4d9fdb46SRobert Mustacchi    dwarf_object_finish) does not free
775*4d9fdb46SRobert Mustacchi    struct Dwarf_Obj_Access_Interface_s or its content.
776*4d9fdb46SRobert Mustacchi    (libdwarf does record a pointer to this struct: you must
777*4d9fdb46SRobert Mustacchi    ensure that pointer remains valid for as long as
778*4d9fdb46SRobert Mustacchi    a libdwarf instance is open (meaning
779*4d9fdb46SRobert Mustacchi    after dwarf_init) and before dwarf_finish)).
780*4d9fdb46SRobert Mustacchi
781*4d9fdb46SRobert Mustacchi    If you are reading Elf objects and libelf use dwarf_init()
782*4d9fdb46SRobert Mustacchi    or dwarf_elf_init() which take care of these details.
783*4d9fdb46SRobert Mustacchi*/
784*4d9fdb46SRobert Mustacchistruct Dwarf_Obj_Access_Interface_s {
785*4d9fdb46SRobert Mustacchi    /*  object is a void* as it hides the data the object access routines
786*4d9fdb46SRobert Mustacchi        need (which varies by library in use and object format).
787*4d9fdb46SRobert Mustacchi    */
788*4d9fdb46SRobert Mustacchi    void* object;
789*4d9fdb46SRobert Mustacchi    const Dwarf_Obj_Access_Methods * methods;
790*4d9fdb46SRobert Mustacchi};
791*4d9fdb46SRobert Mustacchi
792*4d9fdb46SRobert Mustacchi/* End libdwarf Object File Interface */
793*4d9fdb46SRobert Mustacchi
794*4d9fdb46SRobert Mustacchi/*
795*4d9fdb46SRobert Mustacchi    Dwarf_dealloc() alloc_type arguments.
796*4d9fdb46SRobert Mustacchi    Argument points to:
797*4d9fdb46SRobert Mustacchi*/
798*4d9fdb46SRobert Mustacchi#define DW_DLA_STRING          0x01     /* char* */
799*4d9fdb46SRobert Mustacchi#define DW_DLA_LOC             0x02     /* Dwarf_Loc */
800*4d9fdb46SRobert Mustacchi#define DW_DLA_LOCDESC         0x03     /* Dwarf_Locdesc */
801*4d9fdb46SRobert Mustacchi#define DW_DLA_ELLIST          0x04     /* Dwarf_Ellist (not used)*/
802*4d9fdb46SRobert Mustacchi#define DW_DLA_BOUNDS          0x05     /* Dwarf_Bounds (not used) */
803*4d9fdb46SRobert Mustacchi#define DW_DLA_BLOCK           0x06     /* Dwarf_Block */
804*4d9fdb46SRobert Mustacchi#define DW_DLA_DEBUG           0x07     /* Dwarf_Debug */
805*4d9fdb46SRobert Mustacchi#define DW_DLA_DIE             0x08     /* Dwarf_Die */
806*4d9fdb46SRobert Mustacchi#define DW_DLA_LINE            0x09     /* Dwarf_Line */
807*4d9fdb46SRobert Mustacchi#define DW_DLA_ATTR            0x0a     /* Dwarf_Attribute */
808*4d9fdb46SRobert Mustacchi#define DW_DLA_TYPE            0x0b     /* Dwarf_Type  (not used) */
809*4d9fdb46SRobert Mustacchi#define DW_DLA_SUBSCR          0x0c     /* Dwarf_Subscr (not used) */
810*4d9fdb46SRobert Mustacchi#define DW_DLA_GLOBAL          0x0d     /* Dwarf_Global */
811*4d9fdb46SRobert Mustacchi#define DW_DLA_ERROR           0x0e     /* Dwarf_Error */
812*4d9fdb46SRobert Mustacchi#define DW_DLA_LIST            0x0f     /* a list */
813*4d9fdb46SRobert Mustacchi#define DW_DLA_LINEBUF         0x10     /* Dwarf_Line* (not used) */
814*4d9fdb46SRobert Mustacchi#define DW_DLA_ARANGE          0x11     /* Dwarf_Arange */
815*4d9fdb46SRobert Mustacchi#define DW_DLA_ABBREV          0x12     /* Dwarf_Abbrev */
816*4d9fdb46SRobert Mustacchi#define DW_DLA_FRAME_OP        0x13     /* Dwarf_Frame_Op */
817*4d9fdb46SRobert Mustacchi#define DW_DLA_CIE             0x14     /* Dwarf_Cie */
818*4d9fdb46SRobert Mustacchi#define DW_DLA_FDE             0x15     /* Dwarf_Fde */
819*4d9fdb46SRobert Mustacchi#define DW_DLA_LOC_BLOCK       0x16     /* Dwarf_Loc */
820*4d9fdb46SRobert Mustacchi#define DW_DLA_FRAME_BLOCK     0x17     /* Dwarf_Frame Block (not used) */
821*4d9fdb46SRobert Mustacchi#define DW_DLA_FUNC            0x18     /* Dwarf_Func */
822*4d9fdb46SRobert Mustacchi#define DW_DLA_TYPENAME        0x19     /* Dwarf_Type */
823*4d9fdb46SRobert Mustacchi#define DW_DLA_VAR             0x1a     /* Dwarf_Var */
824*4d9fdb46SRobert Mustacchi#define DW_DLA_WEAK            0x1b     /* Dwarf_Weak */
825*4d9fdb46SRobert Mustacchi#define DW_DLA_ADDR            0x1c     /* Dwarf_Addr sized entries */
826*4d9fdb46SRobert 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 */
840*4d9fdb46SRobert Mustacchi
841*4d9fdb46SRobert Mustacchi/* The augmenter string for CIE */
842*4d9fdb46SRobert Mustacchi#define DW_CIE_AUGMENTER_STRING_V0              "z"
843*4d9fdb46SRobert Mustacchi
844*4d9fdb46SRobert Mustacchi/* dwarf_init() access arguments
845*4d9fdb46SRobert Mustacchi*/
846*4d9fdb46SRobert Mustacchi#define DW_DLC_READ        0        /* read only access */
847*4d9fdb46SRobert Mustacchi#define DW_DLC_WRITE       1        /* write only access */
848*4d9fdb46SRobert Mustacchi#define DW_DLC_RDWR        2        /* read/write access NOT SUPPORTED*/
849*4d9fdb46SRobert 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.
861*4d9fdb46SRobert Mustacchi
862*4d9fdb46SRobert Mustacchi*/
863*4d9fdb46SRobert Mustacchi/*  The first three are traditional dwarf producer names.
864*4d9fdb46SRobert Mustacchi    These names still work.
865*4d9fdb46SRobert Mustacchi    Newer names below.
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 MustacchiOld names above with same values. */
896*4d9fdb46SRobert Mustacchi/* use 64-bit sec offsets in ELF */
897*4d9fdb46SRobert Mustacchi#define DW_DLC_OFFSET64             0x10000000
898*4d9fdb46SRobert Mustacchi
899*4d9fdb46SRobert Mustacchi/* use 4 for address_size */
900*4d9fdb46SRobert Mustacchi#define DW_DLC_POINTER32            0x20000000
901*4d9fdb46SRobert Mustacchi
902*4d9fdb46SRobert Mustacchi/* use 8 for address_size */
903*4d9fdb46SRobert Mustacchi#define DW_DLC_POINTER64            0x40000000
904*4d9fdb46SRobert Mustacchi
905*4d9fdb46SRobert Mustacchi/* Special for IRIX only */
906*4d9fdb46SRobert Mustacchi/* use Elf 64bit offset headers and non-std IRIX 64bitoffset headers */
907*4d9fdb46SRobert Mustacchi#define DW_DLC_IRIX_OFFSET64        0x00200000
908*4d9fdb46SRobert Mustacchi
909*4d9fdb46SRobert Mustacchi/*  Usable with assembly output because it is up to the producer to
910*4d9fdb46SRobert Mustacchi    deal with locations in whatever manner the calling producer
911*4d9fdb46SRobert Mustacchi    code wishes.  For example, when the libdwarf caller wishes
912*4d9fdb46SRobert Mustacchi    to produce relocations differently than the binary
913*4d9fdb46SRobert Mustacchi    relocation bits that libdwarf Stream Relocations generate.
914*4d9fdb46SRobert Mustacchi    */
915*4d9fdb46SRobert Mustacchi#define DW_DLC_SYMBOLIC_RELOCATIONS 0x04000000
916*4d9fdb46SRobert Mustacchi
917*4d9fdb46SRobert Mustacchi
918*4d9fdb46SRobert Mustacchi#define DW_DLC_TARGET_BIGENDIAN     0x08000000 /* Big    endian target */
919*4d9fdb46SRobert Mustacchi#define DW_DLC_TARGET_LITTLEENDIAN  0x00100000 /* Little endian target */
920*4d9fdb46SRobert Mustacchi
921*4d9fdb46SRobert Mustacchi
922*4d9fdb46SRobert Mustacchi/* dwarf_pcline function, slide arguments
923*4d9fdb46SRobert Mustacchi*/
924*4d9fdb46SRobert Mustacchi#define DW_DLS_BACKWARD   -1       /* slide backward to find line */
925*4d9fdb46SRobert Mustacchi#define DW_DLS_NOSLIDE     0       /* match exactly without sliding */
926*4d9fdb46SRobert Mustacchi#define DW_DLS_FORWARD     1       /* slide forward to find line */
927*4d9fdb46SRobert Mustacchi
928*4d9fdb46SRobert Mustacchi/* libdwarf error numbers
929*4d9fdb46SRobert Mustacchi*/
930*4d9fdb46SRobert Mustacchi#define DW_DLE_NE          0     /* no error */
931*4d9fdb46SRobert Mustacchi#define DW_DLE_VMM         1     /* dwarf format/library version mismatch */
932*4d9fdb46SRobert Mustacchi#define DW_DLE_MAP         2     /* memory map failure */
933*4d9fdb46SRobert Mustacchi#define DW_DLE_LEE         3     /* libelf error */
934*4d9fdb46SRobert Mustacchi#define DW_DLE_NDS         4     /* no debug section */
935*4d9fdb46SRobert Mustacchi#define DW_DLE_NLS         5     /* no line section */
936*4d9fdb46SRobert Mustacchi#define DW_DLE_ID          6     /* invalid descriptor for query */
937*4d9fdb46SRobert Mustacchi#define DW_DLE_IOF         7     /* I/O failure */
938*4d9fdb46SRobert Mustacchi#define DW_DLE_MAF         8     /* memory allocation failure */
939*4d9fdb46SRobert Mustacchi#define DW_DLE_IA          9     /* invalid argument */
940*4d9fdb46SRobert Mustacchi#define DW_DLE_MDE         10     /* mangled debugging entry */
941*4d9fdb46SRobert Mustacchi#define DW_DLE_MLE         11     /* mangled line number entry */
942*4d9fdb46SRobert Mustacchi#define DW_DLE_FNO         12     /* file not open */
943*4d9fdb46SRobert Mustacchi#define DW_DLE_FNR         13     /* file not a regular file */
944*4d9fdb46SRobert Mustacchi#define DW_DLE_FWA         14     /* file open with wrong access */
945*4d9fdb46SRobert Mustacchi#define DW_DLE_NOB         15     /* not an object file */
946*4d9fdb46SRobert Mustacchi#define DW_DLE_MOF         16     /* mangled object file header */
947*4d9fdb46SRobert Mustacchi#define DW_DLE_EOLL        17     /* end of location list entries */
948*4d9fdb46SRobert Mustacchi#define DW_DLE_NOLL        18     /* no location list section */
949*4d9fdb46SRobert Mustacchi#define DW_DLE_BADOFF      19     /* Invalid offset */
950*4d9fdb46SRobert Mustacchi#define DW_DLE_EOS         20     /* end of section  */
951*4d9fdb46SRobert Mustacchi#define DW_DLE_ATRUNC      21     /* abbreviations section appears truncated*/
952*4d9fdb46SRobert Mustacchi#define DW_DLE_BADBITC     22     /* Address size passed to dwarf bad*/
953*4d9fdb46SRobert Mustacchi                    /* It is not an allowed size (64 or 32) */
954*4d9fdb46SRobert Mustacchi    /* Error codes defined by the current Libdwarf Implementation. */
955*4d9fdb46SRobert Mustacchi#define DW_DLE_DBG_ALLOC                        23
956*4d9fdb46SRobert Mustacchi#define DW_DLE_FSTAT_ERROR                      24
957*4d9fdb46SRobert Mustacchi#define DW_DLE_FSTAT_MODE_ERROR                 25
958*4d9fdb46SRobert Mustacchi#define DW_DLE_INIT_ACCESS_WRONG                26
959*4d9fdb46SRobert Mustacchi#define DW_DLE_ELF_BEGIN_ERROR                  27
960*4d9fdb46SRobert Mustacchi#define DW_DLE_ELF_GETEHDR_ERROR                28
961*4d9fdb46SRobert Mustacchi#define DW_DLE_ELF_GETSHDR_ERROR                29
962*4d9fdb46SRobert Mustacchi#define DW_DLE_ELF_STRPTR_ERROR                 30
963*4d9fdb46SRobert Mustacchi#define DW_DLE_DEBUG_INFO_DUPLICATE             31
964*4d9fdb46SRobert Mustacchi#define DW_DLE_DEBUG_INFO_NULL                  32
965*4d9fdb46SRobert Mustacchi#define DW_DLE_DEBUG_ABBREV_DUPLICATE           33
966*4d9fdb46SRobert Mustacchi#define DW_DLE_DEBUG_ABBREV_NULL                34
967*4d9fdb46SRobert Mustacchi#define DW_DLE_DEBUG_ARANGES_DUPLICATE          35
968*4d9fdb46SRobert Mustacchi#define DW_DLE_DEBUG_ARANGES_NULL               36
969*4d9fdb46SRobert Mustacchi#define DW_DLE_DEBUG_LINE_DUPLICATE             37
970*4d9fdb46SRobert Mustacchi#define DW_DLE_DEBUG_LINE_NULL                  38
971*4d9fdb46SRobert Mustacchi#define DW_DLE_DEBUG_LOC_DUPLICATE              39
972*4d9fdb46SRobert Mustacchi#define DW_DLE_DEBUG_LOC_NULL                   40
973*4d9fdb46SRobert Mustacchi#define DW_DLE_DEBUG_MACINFO_DUPLICATE          41
974*4d9fdb46SRobert Mustacchi#define DW_DLE_DEBUG_MACINFO_NULL               42
975*4d9fdb46SRobert Mustacchi#define DW_DLE_DEBUG_PUBNAMES_DUPLICATE         43
976*4d9fdb46SRobert Mustacchi#define DW_DLE_DEBUG_PUBNAMES_NULL              44
977*4d9fdb46SRobert Mustacchi#define DW_DLE_DEBUG_STR_DUPLICATE              45
978*4d9fdb46SRobert Mustacchi#define DW_DLE_DEBUG_STR_NULL                   46
979*4d9fdb46SRobert Mustacchi#define DW_DLE_CU_LENGTH_ERROR                  47
980*4d9fdb46SRobert Mustacchi#define DW_DLE_VERSION_STAMP_ERROR              48
981*4d9fdb46SRobert Mustacchi#define DW_DLE_ABBREV_OFFSET_ERROR              49
982*4d9fdb46SRobert Mustacchi#define DW_DLE_ADDRESS_SIZE_ERROR               50
983*4d9fdb46SRobert Mustacchi#define DW_DLE_DEBUG_INFO_PTR_NULL              51
984*4d9fdb46SRobert Mustacchi#define DW_DLE_DIE_NULL                         52
985*4d9fdb46SRobert Mustacchi#define DW_DLE_STRING_OFFSET_BAD                53
986*4d9fdb46SRobert Mustacchi#define DW_DLE_DEBUG_LINE_LENGTH_BAD            54
987*4d9fdb46SRobert Mustacchi#define DW_DLE_LINE_PROLOG_LENGTH_BAD           55
988*4d9fdb46SRobert Mustacchi#define DW_DLE_LINE_NUM_OPERANDS_BAD            56
989*4d9fdb46SRobert Mustacchi#define DW_DLE_LINE_SET_ADDR_ERROR              57 /* No longer used. */
990*4d9fdb46SRobert Mustacchi#define DW_DLE_LINE_EXT_OPCODE_BAD              58
991*4d9fdb46SRobert Mustacchi#define DW_DLE_DWARF_LINE_NULL                  59
992*4d9fdb46SRobert Mustacchi#define DW_DLE_INCL_DIR_NUM_BAD                 60
993*4d9fdb46SRobert Mustacchi#define DW_DLE_LINE_FILE_NUM_BAD                61
994*4d9fdb46SRobert Mustacchi#define DW_DLE_ALLOC_FAIL                       62
995*4d9fdb46SRobert Mustacchi#define DW_DLE_NO_CALLBACK_FUNC                 63
996*4d9fdb46SRobert Mustacchi#define DW_DLE_SECT_ALLOC                       64
997*4d9fdb46SRobert Mustacchi#define DW_DLE_FILE_ENTRY_ALLOC                 65
998*4d9fdb46SRobert Mustacchi#define DW_DLE_LINE_ALLOC                       66
999*4d9fdb46SRobert Mustacchi#define DW_DLE_FPGM_ALLOC                       67
1000*4d9fdb46SRobert Mustacchi#define DW_DLE_INCDIR_ALLOC                     68
1001*4d9fdb46SRobert Mustacchi#define DW_DLE_STRING_ALLOC                     69
1002*4d9fdb46SRobert Mustacchi#define DW_DLE_CHUNK_ALLOC                      70
1003*4d9fdb46SRobert Mustacchi#define DW_DLE_BYTEOFF_ERR                      71
1004*4d9fdb46SRobert Mustacchi#define DW_DLE_CIE_ALLOC                        72
1005*4d9fdb46SRobert Mustacchi#define DW_DLE_FDE_ALLOC                        73
1006*4d9fdb46SRobert Mustacchi#define DW_DLE_REGNO_OVFL                       74
1007*4d9fdb46SRobert Mustacchi#define DW_DLE_CIE_OFFS_ALLOC                   75
1008*4d9fdb46SRobert Mustacchi#define DW_DLE_WRONG_ADDRESS                    76
1009*4d9fdb46SRobert Mustacchi#define DW_DLE_EXTRA_NEIGHBORS                  77
1010*4d9fdb46SRobert Mustacchi#define DW_DLE_WRONG_TAG                        78
1011*4d9fdb46SRobert Mustacchi#define DW_DLE_DIE_ALLOC                        79
1012*4d9fdb46SRobert Mustacchi#define DW_DLE_PARENT_EXISTS                    80
1013*4d9fdb46SRobert Mustacchi#define DW_DLE_DBG_NULL                         81
1014*4d9fdb46SRobert Mustacchi#define DW_DLE_DEBUGLINE_ERROR                  82
1015*4d9fdb46SRobert Mustacchi#define DW_DLE_DEBUGFRAME_ERROR                 83
1016*4d9fdb46SRobert Mustacchi#define DW_DLE_DEBUGINFO_ERROR                  84
1017*4d9fdb46SRobert Mustacchi#define DW_DLE_ATTR_ALLOC                       85
1018*4d9fdb46SRobert Mustacchi#define DW_DLE_ABBREV_ALLOC                     86
1019*4d9fdb46SRobert Mustacchi#define DW_DLE_OFFSET_UFLW                      87
1020*4d9fdb46SRobert Mustacchi#define DW_DLE_ELF_SECT_ERR                     88
1021*4d9fdb46SRobert Mustacchi#define DW_DLE_DEBUG_FRAME_LENGTH_BAD           89
1022*4d9fdb46SRobert Mustacchi#define DW_DLE_FRAME_VERSION_BAD                90
1023*4d9fdb46SRobert Mustacchi#define DW_DLE_CIE_RET_ADDR_REG_ERROR           91
1024*4d9fdb46SRobert Mustacchi#define DW_DLE_FDE_NULL                         92
1025*4d9fdb46SRobert Mustacchi#define DW_DLE_FDE_DBG_NULL                     93
1026*4d9fdb46SRobert Mustacchi#define DW_DLE_CIE_NULL                         94
1027*4d9fdb46SRobert Mustacchi#define DW_DLE_CIE_DBG_NULL                     95
1028*4d9fdb46SRobert Mustacchi#define DW_DLE_FRAME_TABLE_COL_BAD              96
1029*4d9fdb46SRobert Mustacchi#define DW_DLE_PC_NOT_IN_FDE_RANGE              97
1030*4d9fdb46SRobert Mustacchi#define DW_DLE_CIE_INSTR_EXEC_ERROR             98
1031*4d9fdb46SRobert Mustacchi#define DW_DLE_FRAME_INSTR_EXEC_ERROR           99
1032*4d9fdb46SRobert Mustacchi#define DW_DLE_FDE_PTR_NULL                    100
1033*4d9fdb46SRobert Mustacchi#define DW_DLE_RET_OP_LIST_NULL                101
1034*4d9fdb46SRobert Mustacchi#define DW_DLE_LINE_CONTEXT_NULL               102
1035*4d9fdb46SRobert Mustacchi#define DW_DLE_DBG_NO_CU_CONTEXT               103
1036*4d9fdb46SRobert Mustacchi#define DW_DLE_DIE_NO_CU_CONTEXT               104
1037*4d9fdb46SRobert Mustacchi#define DW_DLE_FIRST_DIE_NOT_CU                105
1038*4d9fdb46SRobert Mustacchi#define DW_DLE_NEXT_DIE_PTR_NULL               106
1039*4d9fdb46SRobert Mustacchi#define DW_DLE_DEBUG_FRAME_DUPLICATE           107
1040*4d9fdb46SRobert Mustacchi#define DW_DLE_DEBUG_FRAME_NULL                108
1041*4d9fdb46SRobert Mustacchi#define DW_DLE_ABBREV_DECODE_ERROR             109
1042*4d9fdb46SRobert Mustacchi#define DW_DLE_DWARF_ABBREV_NULL               110
1043*4d9fdb46SRobert Mustacchi#define DW_DLE_ATTR_NULL                       111
1044*4d9fdb46SRobert Mustacchi#define DW_DLE_DIE_BAD                         112
1045*4d9fdb46SRobert Mustacchi#define DW_DLE_DIE_ABBREV_BAD                  113
1046*4d9fdb46SRobert Mustacchi#define DW_DLE_ATTR_FORM_BAD                   114
1047*4d9fdb46SRobert Mustacchi#define DW_DLE_ATTR_NO_CU_CONTEXT              115
1048*4d9fdb46SRobert Mustacchi#define DW_DLE_ATTR_FORM_SIZE_BAD              116
1049*4d9fdb46SRobert Mustacchi#define DW_DLE_ATTR_DBG_NULL                   117
1050*4d9fdb46SRobert Mustacchi#define DW_DLE_BAD_REF_FORM                    118
1051*4d9fdb46SRobert Mustacchi#define DW_DLE_ATTR_FORM_OFFSET_BAD            119
1052*4d9fdb46SRobert Mustacchi#define DW_DLE_LINE_OFFSET_BAD                 120
1053*4d9fdb46SRobert Mustacchi#define DW_DLE_DEBUG_STR_OFFSET_BAD            121
1054*4d9fdb46SRobert Mustacchi#define DW_DLE_STRING_PTR_NULL                 122
1055*4d9fdb46SRobert Mustacchi#define DW_DLE_PUBNAMES_VERSION_ERROR          123
1056*4d9fdb46SRobert Mustacchi#define DW_DLE_PUBNAMES_LENGTH_BAD             124
1057*4d9fdb46SRobert Mustacchi#define DW_DLE_GLOBAL_NULL                     125
1058*4d9fdb46SRobert Mustacchi#define DW_DLE_GLOBAL_CONTEXT_NULL             126
1059*4d9fdb46SRobert Mustacchi#define DW_DLE_DIR_INDEX_BAD                   127
1060*4d9fdb46SRobert Mustacchi#define DW_DLE_LOC_EXPR_BAD                    128
1061*4d9fdb46SRobert Mustacchi#define DW_DLE_DIE_LOC_EXPR_BAD                129
1062*4d9fdb46SRobert Mustacchi#define DW_DLE_ADDR_ALLOC                      130
1063*4d9fdb46SRobert Mustacchi#define DW_DLE_OFFSET_BAD                      131
1064*4d9fdb46SRobert Mustacchi#define DW_DLE_MAKE_CU_CONTEXT_FAIL            132
1065*4d9fdb46SRobert Mustacchi#define DW_DLE_REL_ALLOC                       133
1066*4d9fdb46SRobert Mustacchi#define DW_DLE_ARANGE_OFFSET_BAD               134
1067*4d9fdb46SRobert Mustacchi#define DW_DLE_SEGMENT_SIZE_BAD                135
1068*4d9fdb46SRobert Mustacchi#define DW_DLE_ARANGE_LENGTH_BAD               136
1069*4d9fdb46SRobert Mustacchi#define DW_DLE_ARANGE_DECODE_ERROR             137
1070*4d9fdb46SRobert Mustacchi#define DW_DLE_ARANGES_NULL                    138
1071*4d9fdb46SRobert Mustacchi#define DW_DLE_ARANGE_NULL                     139
1072*4d9fdb46SRobert Mustacchi#define DW_DLE_NO_FILE_NAME                    140
1073*4d9fdb46SRobert Mustacchi#define DW_DLE_NO_COMP_DIR                     141
1074*4d9fdb46SRobert Mustacchi#define DW_DLE_CU_ADDRESS_SIZE_BAD             142
1075*4d9fdb46SRobert Mustacchi#define DW_DLE_INPUT_ATTR_BAD                  143
1076*4d9fdb46SRobert Mustacchi#define DW_DLE_EXPR_NULL                       144
1077*4d9fdb46SRobert Mustacchi#define DW_DLE_BAD_EXPR_OPCODE                 145
1078*4d9fdb46SRobert Mustacchi#define DW_DLE_EXPR_LENGTH_BAD                 146
1079*4d9fdb46SRobert Mustacchi#define DW_DLE_MULTIPLE_RELOC_IN_EXPR          147
1080*4d9fdb46SRobert Mustacchi#define DW_DLE_ELF_GETIDENT_ERROR              148
1081*4d9fdb46SRobert Mustacchi#define DW_DLE_NO_AT_MIPS_FDE                  149
1082*4d9fdb46SRobert Mustacchi#define DW_DLE_NO_CIE_FOR_FDE                  150
1083*4d9fdb46SRobert Mustacchi#define DW_DLE_DIE_ABBREV_LIST_NULL            151
1084*4d9fdb46SRobert Mustacchi#define DW_DLE_DEBUG_FUNCNAMES_DUPLICATE       152
1085*4d9fdb46SRobert Mustacchi#define DW_DLE_DEBUG_FUNCNAMES_NULL            153
1086*4d9fdb46SRobert Mustacchi#define DW_DLE_DEBUG_FUNCNAMES_VERSION_ERROR   154
1087*4d9fdb46SRobert Mustacchi#define DW_DLE_DEBUG_FUNCNAMES_LENGTH_BAD      155
1088*4d9fdb46SRobert Mustacchi#define DW_DLE_FUNC_NULL                       156
1089*4d9fdb46SRobert Mustacchi#define DW_DLE_FUNC_CONTEXT_NULL               157
1090*4d9fdb46SRobert Mustacchi#define DW_DLE_DEBUG_TYPENAMES_DUPLICATE       158
1091*4d9fdb46SRobert Mustacchi#define DW_DLE_DEBUG_TYPENAMES_NULL            159
1092*4d9fdb46SRobert Mustacchi#define DW_DLE_DEBUG_TYPENAMES_VERSION_ERROR   160
1093*4d9fdb46SRobert Mustacchi#define DW_DLE_DEBUG_TYPENAMES_LENGTH_BAD      161
1094*4d9fdb46SRobert Mustacchi#define DW_DLE_TYPE_NULL                       162
1095*4d9fdb46SRobert Mustacchi#define DW_DLE_TYPE_CONTEXT_NULL               163
1096*4d9fdb46SRobert Mustacchi#define DW_DLE_DEBUG_VARNAMES_DUPLICATE        164
1097*4d9fdb46SRobert Mustacchi#define DW_DLE_DEBUG_VARNAMES_NULL             165
1098*4d9fdb46SRobert Mustacchi#define DW_DLE_DEBUG_VARNAMES_VERSION_ERROR    166
1099*4d9fdb46SRobert Mustacchi#define DW_DLE_DEBUG_VARNAMES_LENGTH_BAD       167
1100*4d9fdb46SRobert Mustacchi#define DW_DLE_VAR_NULL                        168
1101*4d9fdb46SRobert Mustacchi#define DW_DLE_VAR_CONTEXT_NULL                169
1102*4d9fdb46SRobert Mustacchi#define DW_DLE_DEBUG_WEAKNAMES_DUPLICATE       170
1103*4d9fdb46SRobert Mustacchi#define DW_DLE_DEBUG_WEAKNAMES_NULL            171
1104*4d9fdb46SRobert Mustacchi#define DW_DLE_DEBUG_WEAKNAMES_VERSION_ERROR   172
1105*4d9fdb46SRobert Mustacchi#define DW_DLE_DEBUG_WEAKNAMES_LENGTH_BAD      173
1106*4d9fdb46SRobert Mustacchi#define DW_DLE_WEAK_NULL                       174
1107*4d9fdb46SRobert Mustacchi#define DW_DLE_WEAK_CONTEXT_NULL               175
1108*4d9fdb46SRobert Mustacchi#define DW_DLE_LOCDESC_COUNT_WRONG             176
1109*4d9fdb46SRobert Mustacchi#define DW_DLE_MACINFO_STRING_NULL             177
1110*4d9fdb46SRobert Mustacchi#define DW_DLE_MACINFO_STRING_EMPTY            178
1111*4d9fdb46SRobert Mustacchi#define DW_DLE_MACINFO_INTERNAL_ERROR_SPACE    179
1112*4d9fdb46SRobert Mustacchi#define DW_DLE_MACINFO_MALLOC_FAIL             180
1113*4d9fdb46SRobert Mustacchi#define DW_DLE_DEBUGMACINFO_ERROR              181
1114*4d9fdb46SRobert Mustacchi#define DW_DLE_DEBUG_MACRO_LENGTH_BAD          182
1115*4d9fdb46SRobert Mustacchi#define DW_DLE_DEBUG_MACRO_MAX_BAD             183
1116*4d9fdb46SRobert Mustacchi#define DW_DLE_DEBUG_MACRO_INTERNAL_ERR        184
1117*4d9fdb46SRobert Mustacchi#define DW_DLE_DEBUG_MACRO_MALLOC_SPACE        185
1118*4d9fdb46SRobert Mustacchi#define DW_DLE_DEBUG_MACRO_INCONSISTENT        186
1119*4d9fdb46SRobert Mustacchi#define DW_DLE_DF_NO_CIE_AUGMENTATION          187
1120*4d9fdb46SRobert Mustacchi#define DW_DLE_DF_REG_NUM_TOO_HIGH             188
1121*4d9fdb46SRobert Mustacchi#define DW_DLE_DF_MAKE_INSTR_NO_INIT           189
1122*4d9fdb46SRobert Mustacchi#define DW_DLE_DF_NEW_LOC_LESS_OLD_LOC         190
1123*4d9fdb46SRobert Mustacchi#define DW_DLE_DF_POP_EMPTY_STACK              191
1124*4d9fdb46SRobert Mustacchi#define DW_DLE_DF_ALLOC_FAIL                   192
1125*4d9fdb46SRobert Mustacchi#define DW_DLE_DF_FRAME_DECODING_ERROR         193
1126*4d9fdb46SRobert Mustacchi#define DW_DLE_DEBUG_LOC_SECTION_SHORT         194
1127*4d9fdb46SRobert Mustacchi#define DW_DLE_FRAME_AUGMENTATION_UNKNOWN      195
1128*4d9fdb46SRobert Mustacchi#define DW_DLE_PUBTYPE_CONTEXT                 196 /* Unused. */
1129*4d9fdb46SRobert Mustacchi#define DW_DLE_DEBUG_PUBTYPES_LENGTH_BAD       197
1130*4d9fdb46SRobert Mustacchi#define DW_DLE_DEBUG_PUBTYPES_VERSION_ERROR    198
1131*4d9fdb46SRobert Mustacchi#define DW_DLE_DEBUG_PUBTYPES_DUPLICATE        199
1132*4d9fdb46SRobert Mustacchi#define DW_DLE_FRAME_CIE_DECODE_ERROR          200
1133*4d9fdb46SRobert Mustacchi#define DW_DLE_FRAME_REGISTER_UNREPRESENTABLE  201
1134*4d9fdb46SRobert Mustacchi#define DW_DLE_FRAME_REGISTER_COUNT_MISMATCH   202
1135*4d9fdb46SRobert Mustacchi#define DW_DLE_LINK_LOOP                       203
1136*4d9fdb46SRobert Mustacchi#define DW_DLE_STRP_OFFSET_BAD                 204
1137*4d9fdb46SRobert Mustacchi#define DW_DLE_DEBUG_RANGES_DUPLICATE          205
1138*4d9fdb46SRobert Mustacchi#define DW_DLE_DEBUG_RANGES_OFFSET_BAD         206
1139*4d9fdb46SRobert Mustacchi#define DW_DLE_DEBUG_RANGES_MISSING_END        207
1140*4d9fdb46SRobert Mustacchi#define DW_DLE_DEBUG_RANGES_OUT_OF_MEM         208
1141*4d9fdb46SRobert Mustacchi#define DW_DLE_DEBUG_SYMTAB_ERR                209
1142*4d9fdb46SRobert Mustacchi#define DW_DLE_DEBUG_STRTAB_ERR                210
1143*4d9fdb46SRobert Mustacchi#define DW_DLE_RELOC_MISMATCH_INDEX            211
1144*4d9fdb46SRobert Mustacchi#define DW_DLE_RELOC_MISMATCH_RELOC_INDEX      212
1145*4d9fdb46SRobert Mustacchi#define DW_DLE_RELOC_MISMATCH_STRTAB_INDEX     213
1146*4d9fdb46SRobert Mustacchi#define DW_DLE_RELOC_SECTION_MISMATCH          214
1147*4d9fdb46SRobert Mustacchi#define DW_DLE_RELOC_SECTION_MISSING_INDEX     215
1148*4d9fdb46SRobert Mustacchi#define DW_DLE_RELOC_SECTION_LENGTH_ODD        216
1149*4d9fdb46SRobert Mustacchi#define DW_DLE_RELOC_SECTION_PTR_NULL          217
1150*4d9fdb46SRobert Mustacchi#define DW_DLE_RELOC_SECTION_MALLOC_FAIL       218
1151*4d9fdb46SRobert Mustacchi#define DW_DLE_NO_ELF64_SUPPORT                219
1152*4d9fdb46SRobert Mustacchi#define DW_DLE_MISSING_ELF64_SUPPORT           220
1153*4d9fdb46SRobert Mustacchi#define DW_DLE_ORPHAN_FDE                      221
1154*4d9fdb46SRobert Mustacchi#define DW_DLE_DUPLICATE_INST_BLOCK            222
1155*4d9fdb46SRobert Mustacchi#define DW_DLE_BAD_REF_SIG8_FORM               223
1156*4d9fdb46SRobert Mustacchi#define DW_DLE_ATTR_EXPRLOC_FORM_BAD           224
1157*4d9fdb46SRobert Mustacchi#define DW_DLE_FORM_SEC_OFFSET_LENGTH_BAD      225
1158*4d9fdb46SRobert Mustacchi#define DW_DLE_NOT_REF_FORM                    226
1159*4d9fdb46SRobert 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
1403*4d9fdb46SRobert Mustacchi
1404*4d9fdb46SRobert Mustacchi    /* LAST MUST EQUAL LAST ERROR NUMBER */
1405*4d9fdb46SRobert Mustacchi#define DW_DLE_LAST        469
1406*4d9fdb46SRobert Mustacchi
1407*4d9fdb46SRobert Mustacchi#define DW_DLE_LO_USER     0x10000
1408*4d9fdb46SRobert Mustacchi
1409*4d9fdb46SRobert Mustacchi    /*  Taken as meaning 'undefined value', this is not
1410*4d9fdb46SRobert Mustacchi        a column or register number.
1411*4d9fdb46SRobert Mustacchi        Only present at libdwarf runtime. Never on disk.
1412*4d9fdb46SRobert Mustacchi        DW_FRAME_* Values present on disk are in dwarf.h
1413*4d9fdb46SRobert Mustacchi    */
1414*4d9fdb46SRobert Mustacchi#define DW_FRAME_UNDEFINED_VAL          1034
1415*4d9fdb46SRobert Mustacchi
1416*4d9fdb46SRobert Mustacchi    /*  Taken as meaning 'same value' as caller had, not a column
1417*4d9fdb46SRobert Mustacchi        or register number
1418*4d9fdb46SRobert Mustacchi        Only present at libdwarf runtime. Never on disk.
1419*4d9fdb46SRobert Mustacchi        DW_FRAME_* Values present on disk are in dwarf.h
1420*4d9fdb46SRobert Mustacchi    */
1421*4d9fdb46SRobert Mustacchi#define DW_FRAME_SAME_VAL               1035
1422*4d9fdb46SRobert Mustacchi
1423*4d9fdb46SRobert Mustacchi
1424*4d9fdb46SRobert Mustacchi
1425*4d9fdb46SRobert Mustacchi/* error return values
1426*4d9fdb46SRobert Mustacchi*/
1427*4d9fdb46SRobert Mustacchi#define DW_DLV_BADADDR     (~(Dwarf_Addr)0)
1428*4d9fdb46SRobert Mustacchi    /* for functions returning target address */
1429*4d9fdb46SRobert Mustacchi
1430*4d9fdb46SRobert Mustacchi#define DW_DLV_NOCOUNT     ((Dwarf_Signed)-1)
1431*4d9fdb46SRobert Mustacchi    /* for functions returning count */
1432*4d9fdb46SRobert Mustacchi
1433*4d9fdb46SRobert Mustacchi#define DW_DLV_BADOFFSET   (~(Dwarf_Off)0)
1434*4d9fdb46SRobert Mustacchi    /* for functions returning offset */
1435*4d9fdb46SRobert Mustacchi
1436*4d9fdb46SRobert Mustacchi/* standard return values for functions */
1437*4d9fdb46SRobert Mustacchi#define DW_DLV_NO_ENTRY -1
1438*4d9fdb46SRobert Mustacchi#define DW_DLV_OK        0
1439*4d9fdb46SRobert Mustacchi#define DW_DLV_ERROR     1
1440*4d9fdb46SRobert Mustacchi
1441*4d9fdb46SRobert Mustacchi/* Special values for offset_into_exception_table field of dwarf fde's. */
1442*4d9fdb46SRobert Mustacchi/* The following value indicates that there is no Exception table offset
1443*4d9fdb46SRobert Mustacchi   associated with a dwarf frame. */
1444*4d9fdb46SRobert Mustacchi#define DW_DLX_NO_EH_OFFSET         (-1LL)
1445*4d9fdb46SRobert Mustacchi/* The following value indicates that the producer was unable to analyse the
1446*4d9fdb46SRobert Mustacchi   source file to generate Exception tables for this function. */
1447*4d9fdb46SRobert Mustacchi#define DW_DLX_EH_OFFSET_UNAVAILABLE  (-2LL)
1448*4d9fdb46SRobert Mustacchi
1449*4d9fdb46SRobert Mustacchi/* The dwarf specification separates FORMs into
1450*4d9fdb46SRobert Mustacchidifferent classes.  To do the seperation properly
1451*4d9fdb46SRobert Mustacchirequires 4 pieces of data as of DWARF4 (thus the
1452*4d9fdb46SRobert Mustacchifunction arguments listed here).
1453*4d9fdb46SRobert MustacchiThe DWARF4 specification class definition suffices to
1454*4d9fdb46SRobert Mustacchidescribe all DWARF versions.
1455*4d9fdb46SRobert MustacchiSee section 7.5.4, Attribute Encodings.
1456*4d9fdb46SRobert MustacchiA return of DW_FORM_CLASS_UNKNOWN means we could not properly figure
1457*4d9fdb46SRobert Mustacchiout 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 Mustacchienum 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
1501*4d9fdb46SRobert Mustacchi
1502*4d9fdb46SRobert Mustacchi/*===========================================================================*/
1503*4d9fdb46SRobert Mustacchi/*  Dwarf consumer interface initialization and termination operations */
1504*4d9fdb46SRobert 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 Mustacchiint 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 Mustacchiint dwarf_init_b(int    /*fd*/,
1527*4d9fdb46SRobert Mustacchi    Dwarf_Unsigned    /*access*/,
1528*4d9fdb46SRobert Mustacchi    unsigned int      /*groupnumber*/,
1529*4d9fdb46SRobert Mustacchi    Dwarf_Handler     /*errhand*/,
1530*4d9fdb46SRobert Mustacchi    Dwarf_Ptr         /*errarg*/,
1531*4d9fdb46SRobert Mustacchi    Dwarf_Debug*      /*dbg*/,
1532*4d9fdb46SRobert Mustacchi    Dwarf_Error*      /*error*/);
1533*4d9fdb46SRobert Mustacchi
1534*4d9fdb46SRobert Mustacchiint dwarf_init(int    /*fd*/,
1535*4d9fdb46SRobert Mustacchi    Dwarf_Unsigned    /*access*/,
1536*4d9fdb46SRobert Mustacchi    Dwarf_Handler     /*errhand*/,
1537*4d9fdb46SRobert Mustacchi    Dwarf_Ptr         /*errarg*/,
1538*4d9fdb46SRobert Mustacchi    Dwarf_Debug*      /*dbg*/,
1539*4d9fdb46SRobert Mustacchi    Dwarf_Error*      /*error*/);
1540*4d9fdb46SRobert 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. */
1544*4d9fdb46SRobert Mustacchi/*  Initialization based on libelf/sgi-fastlibelf open pointer. */
1545*4d9fdb46SRobert Mustacchi/*  New March 2017 */
1546*4d9fdb46SRobert Mustacchiint 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*/);
1553*4d9fdb46SRobert Mustacchiint dwarf_elf_init(dwarf_elf_handle /*elf*/,
1554*4d9fdb46SRobert Mustacchi    Dwarf_Unsigned    /*access*/,
1555*4d9fdb46SRobert Mustacchi    Dwarf_Handler     /*errhand*/,
1556*4d9fdb46SRobert Mustacchi    Dwarf_Ptr         /*errarg*/,
1557*4d9fdb46SRobert Mustacchi    Dwarf_Debug*      /*dbg*/,
1558*4d9fdb46SRobert Mustacchi    Dwarf_Error*      /*error*/);
1559*4d9fdb46SRobert 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 Mustacchiint  dwarf_add_file_path(Dwarf_Debug /*dbg*/,
1566*4d9fdb46SRobert Mustacchi    const char * /*file_name*/,
1567*4d9fdb46SRobert Mustacchi    Dwarf_Error*      /*error*/);
1568*4d9fdb46SRobert Mustacchi
1569*4d9fdb46SRobert Mustacchi/* Undocumented function for memory allocator. */
1570*4d9fdb46SRobert Mustacchivoid dwarf_print_memory_stats(Dwarf_Debug  /*dbg*/);
1571*4d9fdb46SRobert Mustacchi
1572*4d9fdb46SRobert Mustacchiint dwarf_get_elf(Dwarf_Debug /*dbg*/,
1573*4d9fdb46SRobert Mustacchi    dwarf_elf_handle* /*return_elfptr*/,
1574*4d9fdb46SRobert Mustacchi    Dwarf_Error*      /*error*/);
1575*4d9fdb46SRobert Mustacchi
1576*4d9fdb46SRobert Mustacchiint dwarf_finish(Dwarf_Debug /*dbg*/, Dwarf_Error* /*error*/);
1577*4d9fdb46SRobert Mustacchi
1578*4d9fdb46SRobert Mustacchi
1579*4d9fdb46SRobert Mustacchi/*  NEW March 2017. */
1580*4d9fdb46SRobert Mustacchiint dwarf_object_init_b(Dwarf_Obj_Access_Interface* /*obj*/,
1581*4d9fdb46SRobert Mustacchi    Dwarf_Handler /*errhand*/,
1582*4d9fdb46SRobert Mustacchi    Dwarf_Ptr     /*errarg*/,
1583*4d9fdb46SRobert Mustacchi    unsigned int  /*groupnumber*/,
1584*4d9fdb46SRobert Mustacchi    Dwarf_Debug*  /*dbg*/,
1585*4d9fdb46SRobert Mustacchi    Dwarf_Error*  /*error*/);
1586*4d9fdb46SRobert Mustacchi
1587*4d9fdb46SRobert Mustacchiint dwarf_object_init(Dwarf_Obj_Access_Interface* /*obj*/,
1588*4d9fdb46SRobert Mustacchi    Dwarf_Handler /*errhand*/,
1589*4d9fdb46SRobert Mustacchi    Dwarf_Ptr     /*errarg*/,
1590*4d9fdb46SRobert Mustacchi    Dwarf_Debug*  /*dbg*/,
1591*4d9fdb46SRobert Mustacchi    Dwarf_Error*  /*error*/);
1592*4d9fdb46SRobert Mustacchi
1593*4d9fdb46SRobert Mustacchiint 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 Mustacchiint dwarf_get_tied_dbg(Dwarf_Debug /*dbg*/,
1599*4d9fdb46SRobert Mustacchi    Dwarf_Debug * /*tieddbg_out*/,
1600*4d9fdb46SRobert Mustacchi    Dwarf_Error * /*error*/);
1601*4d9fdb46SRobert Mustacchi
1602*4d9fdb46SRobert Mustacchiint dwarf_object_finish(Dwarf_Debug /*dbg*/,
1603*4d9fdb46SRobert Mustacchi    Dwarf_Error* /*error*/);
1604*4d9fdb46SRobert Mustacchi
1605*4d9fdb46SRobert Mustacchi/*  Returns the version string. Example: "20190922"
1606*4d9fdb46SRobert Mustacchi    which is in ISO date format. */
1607*4d9fdb46SRobert Mustacchiconst 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 Mustacchiint 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 Mustacchiint 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 Mustacchiint 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 Mustacchiint dwarf_next_cu_header_d(Dwarf_Debug /*dbg*/,
1637*4d9fdb46SRobert Mustacchi    Dwarf_Bool      /*is_info*/,
1638*4d9fdb46SRobert Mustacchi    Dwarf_Unsigned* /*cu_header_length*/,
1639*4d9fdb46SRobert Mustacchi    Dwarf_Half*     /*version_stamp*/,
1640*4d9fdb46SRobert Mustacchi    Dwarf_Off*      /*abbrev_offset*/,
1641*4d9fdb46SRobert Mustacchi    Dwarf_Half*     /*address_size*/,
1642*4d9fdb46SRobert Mustacchi    Dwarf_Half*     /*length_size*/,
1643*4d9fdb46SRobert Mustacchi    Dwarf_Half*     /*extension_size*/,
1644*4d9fdb46SRobert Mustacchi    Dwarf_Sig8*     /*type signature*/,
1645*4d9fdb46SRobert Mustacchi    Dwarf_Unsigned* /*typeoffset*/,
1646*4d9fdb46SRobert Mustacchi    Dwarf_Unsigned* /*next_cu_header_offset*/,
1647*4d9fdb46SRobert Mustacchi    Dwarf_Half    * /*header_cu_type*/,
1648*4d9fdb46SRobert Mustacchi    Dwarf_Error*    /*error*/);
1649*4d9fdb46SRobert Mustacchi
1650*4d9fdb46SRobert Mustacchi/*  Die traversal operations.
1651*4d9fdb46SRobert Mustacchi    dwarf_next_cu_header_b traverses debug_info CU headers.
1652*4d9fdb46SRobert Mustacchi    Obsolete but supported.
1653*4d9fdb46SRobert Mustacchi    */
1654*4d9fdb46SRobert Mustacchiint dwarf_next_cu_header_b(Dwarf_Debug /*dbg*/,
1655*4d9fdb46SRobert Mustacchi    Dwarf_Unsigned* /*cu_header_length*/,
1656*4d9fdb46SRobert Mustacchi    Dwarf_Half*     /*version_stamp*/,
1657*4d9fdb46SRobert Mustacchi    Dwarf_Off*      /*abbrev_offset*/,
1658*4d9fdb46SRobert Mustacchi    Dwarf_Half*     /*address_size*/,
1659*4d9fdb46SRobert Mustacchi    Dwarf_Half*     /*length_size*/,
1660*4d9fdb46SRobert Mustacchi    Dwarf_Half*     /*extension_size*/,
1661*4d9fdb46SRobert Mustacchi    Dwarf_Unsigned* /*next_cu_header_offset*/,
1662*4d9fdb46SRobert Mustacchi    Dwarf_Error*    /*error*/);
1663*4d9fdb46SRobert Mustacchi
1664*4d9fdb46SRobert Mustacchi/*  dwarf_next_cu_header_types traverses debug_types CU headers.
1665*4d9fdb46SRobert Mustacchi    New in October, 2011. Obsolete but supported May 2015.
1666*4d9fdb46SRobert Mustacchi    */
1667*4d9fdb46SRobert Mustacchiint 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. */
1680*4d9fdb46SRobert Mustacchiint dwarf_next_cu_header(Dwarf_Debug /*dbg*/,
1681*4d9fdb46SRobert Mustacchi    Dwarf_Unsigned* /*cu_header_length*/,
1682*4d9fdb46SRobert Mustacchi    Dwarf_Half*     /*version_stamp*/,
1683*4d9fdb46SRobert Mustacchi    Dwarf_Off*      /*abbrev_offset*/,
1684*4d9fdb46SRobert Mustacchi    Dwarf_Half*     /*address_size*/,
1685*4d9fdb46SRobert Mustacchi    Dwarf_Unsigned* /*next_cu_header_offset*/,
1686*4d9fdb46SRobert Mustacchi    Dwarf_Error*    /*error*/);
1687*4d9fdb46SRobert Mustacchi
1688*4d9fdb46SRobert Mustacchiint dwarf_siblingof(Dwarf_Debug /*dbg*/,
1689*4d9fdb46SRobert Mustacchi    Dwarf_Die        /*die*/,
1690*4d9fdb46SRobert Mustacchi    Dwarf_Die*       /*return_siblingdie*/,
1691*4d9fdb46SRobert Mustacchi    Dwarf_Error*     /*error*/);
1692*4d9fdb46SRobert Mustacchi/* dwarf_siblingof_b new October 2011. */
1693*4d9fdb46SRobert Mustacchiint 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 Mustacchiint 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*/);
1705*4d9fdb46SRobert Mustacchi
1706*4d9fdb46SRobert Mustacchiint dwarf_child(Dwarf_Die /*die*/,
1707*4d9fdb46SRobert Mustacchi    Dwarf_Die*       /*return_childdie*/,
1708*4d9fdb46SRobert Mustacchi    Dwarf_Error*     /*error*/);
1709*4d9fdb46SRobert Mustacchi
1710*4d9fdb46SRobert Mustacchi/*  Finding die given global (not CU-relative) offset.
1711*4d9fdb46SRobert Mustacchi    Applies only to debug_info. */
1712*4d9fdb46SRobert Mustacchiint dwarf_offdie(Dwarf_Debug /*dbg*/,
1713*4d9fdb46SRobert Mustacchi    Dwarf_Off        /*offset*/,
1714*4d9fdb46SRobert Mustacchi    Dwarf_Die*       /*return_die*/,
1715*4d9fdb46SRobert Mustacchi    Dwarf_Error*     /*error*/);
1716*4d9fdb46SRobert 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 Mustacchiint dwarf_offdie_b(Dwarf_Debug /*dbg*/,
1721*4d9fdb46SRobert Mustacchi    Dwarf_Off        /*offset*/,
1722*4d9fdb46SRobert Mustacchi    Dwarf_Bool       /*is_info*/,
1723*4d9fdb46SRobert Mustacchi    Dwarf_Die*       /*return_die*/,
1724*4d9fdb46SRobert Mustacchi    Dwarf_Error*     /*error*/);
1725*4d9fdb46SRobert 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 MustacchiDwarf_Bool dwarf_get_die_infotypes_flag(Dwarf_Die /*die*/);
1731*4d9fdb46SRobert Mustacchi
1732*4d9fdb46SRobert Mustacchi/*  New March 2016.
1733*4d9fdb46SRobert Mustacchi    So we can associate a DIE's abbreviations with the contents
1734*4d9fdb46SRobert Mustacchi    the abbreviations section. */
1735*4d9fdb46SRobert Mustacchiint dwarf_die_abbrev_global_offset(Dwarf_Die /*die*/,
1736*4d9fdb46SRobert Mustacchi    Dwarf_Off       * /*abbrev_offset*/,
1737*4d9fdb46SRobert Mustacchi    Dwarf_Unsigned  * /*abbrev_count*/,
1738*4d9fdb46SRobert Mustacchi    Dwarf_Error*      /*error*/);
1739*4d9fdb46SRobert Mustacchi
1740*4d9fdb46SRobert Mustacchi/*  operations on DIEs */
1741*4d9fdb46SRobert Mustacchiint dwarf_tag(Dwarf_Die /*die*/,
1742*4d9fdb46SRobert Mustacchi    Dwarf_Half*      /*return_tag*/,
1743*4d9fdb46SRobert Mustacchi    Dwarf_Error*     /*error*/);
1744*4d9fdb46SRobert Mustacchi
1745*4d9fdb46SRobert Mustacchi/*  dwarf_dieoffset returns the global debug_info
1746*4d9fdb46SRobert Mustacchi    section offset, not the CU relative offset. */
1747*4d9fdb46SRobert Mustacchiint dwarf_dieoffset(Dwarf_Die /*die*/,
1748*4d9fdb46SRobert Mustacchi    Dwarf_Off*       /*return_offset*/,
1749*4d9fdb46SRobert Mustacchi    Dwarf_Error*     /*error*/);
1750*4d9fdb46SRobert 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 Mustacchiint 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 MustacchiDwarf_Bool dwarf_addr_form_is_indexed(int form);
1767*4d9fdb46SRobert Mustacchi
1768*4d9fdb46SRobert Mustacchi
1769*4d9fdb46SRobert Mustacchi/*  dwarf_CU_dieoffset_given_die returns
1770*4d9fdb46SRobert Mustacchi    the global debug_info section offset of the CU die
1771*4d9fdb46SRobert Mustacchi    that is the CU containing the given_die
1772*4d9fdb46SRobert Mustacchi    (the passed in DIE can be any DIE).
1773*4d9fdb46SRobert Mustacchi    This information makes it possible for a consumer to
1774*4d9fdb46SRobert Mustacchi    find and print CU context information for any die.
1775*4d9fdb46SRobert Mustacchi    See also dwarf_get_cu_die_offset_given_cu_header_offset. */
1776*4d9fdb46SRobert Mustacchiint dwarf_CU_dieoffset_given_die(Dwarf_Die /*given_die*/,
1777*4d9fdb46SRobert Mustacchi    Dwarf_Off*       /*return_offset*/,
1778*4d9fdb46SRobert Mustacchi    Dwarf_Error*     /*error*/);
1779*4d9fdb46SRobert Mustacchi
1780*4d9fdb46SRobert Mustacchi/*  dwarf_die_CU_offset returns the CU relative offset
1781*4d9fdb46SRobert Mustacchi    not the global debug_info section offset, given
1782*4d9fdb46SRobert Mustacchi    any DIE in the CU.  See also dwarf_CU_dieoffset_given_die.
1783*4d9fdb46SRobert Mustacchi    */
1784*4d9fdb46SRobert Mustacchiint dwarf_die_CU_offset(Dwarf_Die /*die*/,
1785*4d9fdb46SRobert Mustacchi    Dwarf_Off*       /*return_offset*/,
1786*4d9fdb46SRobert Mustacchi    Dwarf_Error*     /*error*/);
1787*4d9fdb46SRobert Mustacchi
1788*4d9fdb46SRobert Mustacchiint dwarf_die_CU_offset_range(Dwarf_Die /*die*/,
1789*4d9fdb46SRobert Mustacchi    Dwarf_Off*       /*return_CU_header_offset*/,
1790*4d9fdb46SRobert Mustacchi    Dwarf_Off*       /*return_CU_length_bytes*/,
1791*4d9fdb46SRobert Mustacchi    Dwarf_Error*     /*error*/);
1792*4d9fdb46SRobert Mustacchi
1793*4d9fdb46SRobert Mustacchiint dwarf_attr (Dwarf_Die /*die*/,
1794*4d9fdb46SRobert Mustacchi    Dwarf_Half        /*attr*/,
1795*4d9fdb46SRobert Mustacchi    Dwarf_Attribute * /*returned_attr*/,
1796*4d9fdb46SRobert Mustacchi    Dwarf_Error*      /*error*/);
1797*4d9fdb46SRobert Mustacchi
1798*4d9fdb46SRobert Mustacchiint dwarf_die_text(Dwarf_Die /*die*/,
1799*4d9fdb46SRobert Mustacchi    Dwarf_Half    /*attr*/,
1800*4d9fdb46SRobert Mustacchi    char       ** /*ret_name*/,
1801*4d9fdb46SRobert Mustacchi    Dwarf_Error * /*error*/);
1802*4d9fdb46SRobert Mustacchi
1803*4d9fdb46SRobert Mustacchiint dwarf_diename(Dwarf_Die /*die*/,
1804*4d9fdb46SRobert Mustacchi    char   **        /*diename*/,
1805*4d9fdb46SRobert Mustacchi    Dwarf_Error*     /*error*/);
1806*4d9fdb46SRobert Mustacchi
1807*4d9fdb46SRobert Mustacchi/* Returns the  abbrev code of the die. Cannot fail. */
1808*4d9fdb46SRobert Mustacchiint dwarf_die_abbrev_code(Dwarf_Die /*die */);
1809*4d9fdb46SRobert 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 Mustacchiint dwarf_die_abbrev_children_flag(Dwarf_Die /*die*/,
1813*4d9fdb46SRobert Mustacchi    Dwarf_Half * /*ab_has_child*/);
1814*4d9fdb46SRobert Mustacchi
1815*4d9fdb46SRobert Mustacchi/* Validate the sibling DIE. This only makes sense to call
1816*4d9fdb46SRobert Mustacchi   if the sibling's DIEs have been travsersed and
1817*4d9fdb46SRobert Mustacchi   dwarf_child called on each,
1818*4d9fdb46SRobert Mustacchi   so that the last DIE dwarf_child saw was the last.
1819*4d9fdb46SRobert Mustacchi   Essentially ensuring that (after such traversal) that we
1820*4d9fdb46SRobert Mustacchi   are in the same place a sibling attribute would identify.
1821*4d9fdb46SRobert Mustacchi   In case we return DW_DLV_ERROR, the global offset of the last
1822*4d9fdb46SRobert Mustacchi   DIE traversed by dwarf_child is returned through *offset */
1823*4d9fdb46SRobert Mustacchiint dwarf_validate_die_sibling(Dwarf_Die /*sibling*/,Dwarf_Off* /*offset*/);
1824*4d9fdb46SRobert Mustacchi
1825*4d9fdb46SRobert Mustacchi/* convenience functions, alternative to using dwarf_attrlist */
1826*4d9fdb46SRobert Mustacchiint dwarf_hasattr(Dwarf_Die /*die*/,
1827*4d9fdb46SRobert Mustacchi    Dwarf_Half   /*attr*/,
1828*4d9fdb46SRobert Mustacchi    Dwarf_Bool * /*returned_bool*/,
1829*4d9fdb46SRobert Mustacchi    Dwarf_Error* /*error*/);
1830*4d9fdb46SRobert Mustacchi
1831*4d9fdb46SRobert Mustacchi/* Returns the children offsets for the given offset */
1832*4d9fdb46SRobert Mustacchiint 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 Mustacchiint 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 Mustacchiint
1858*4d9fdb46SRobert Mustacchidwarf_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 Mustacchiint 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 Mustacchiint 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 Mustacchiint
1893*4d9fdb46SRobert Mustacchidwarf_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 Mustacchiint 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 Mustacchiint 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 Mustacchivoid dwarf_loc_head_c_dealloc(Dwarf_Loc_Head_c /*loclist_head*/);
1927*4d9fdb46SRobert Mustacchi
1928*4d9fdb46SRobert Mustacchi/* END: loclist_c interfaces */
1929*4d9fdb46SRobert Mustacchi
1930*4d9fdb46SRobert Mustacchi
1931*4d9fdb46SRobert Mustacchi/*  As of 2015 the preferred interface
1932*4d9fdb46SRobert Mustacchi    is dwarf_get_loclist_c
1933*4d9fdb46SRobert Mustacchi    and only dwarf_get_loclist_c will work
1934*4d9fdb46SRobert Mustacchi    for DWARF5 (and also all earlier versions).  */
1935*4d9fdb46SRobert Mustacchiint dwarf_loclist_n(Dwarf_Attribute /*attr*/,
1936*4d9fdb46SRobert Mustacchi    Dwarf_Locdesc*** /*llbuf*/,
1937*4d9fdb46SRobert Mustacchi    Dwarf_Signed *   /*locCount*/,
1938*4d9fdb46SRobert Mustacchi    Dwarf_Error*     /*error*/);
1939*4d9fdb46SRobert Mustacchi
1940*4d9fdb46SRobert Mustacchi/*  The original interfaces.  Please do not use this. */
1941*4d9fdb46SRobert Mustacchiint dwarf_loclist(Dwarf_Attribute /*attr*/,  /* inflexible! */
1942*4d9fdb46SRobert Mustacchi    Dwarf_Locdesc**  /*llbuf*/,
1943*4d9fdb46SRobert Mustacchi    Dwarf_Signed *   /*locCount*/,
1944*4d9fdb46SRobert Mustacchi    Dwarf_Error*     /*error*/);
1945*4d9fdb46SRobert Mustacchi
1946*4d9fdb46SRobert Mustacchi/* Extracts a dwarf expression from an expression byte stream.
1947*4d9fdb46SRobert Mustacchi   Useful to get expressions from DW_CFA_def_cfa_expression
1948*4d9fdb46SRobert Mustacchi   DW_CFA_expression DW_CFA_val_expression expression bytes.
1949*4d9fdb46SRobert Mustacchi   27 April 2009: dwarf_loclist_from_expr interface with
1950*4d9fdb46SRobert Mustacchi   no addr_size is obsolete but supported,
1951*4d9fdb46SRobert Mustacchi   use dwarf_loclist_from_expr_a instead.
1952*4d9fdb46SRobert Mustacchi*/
1953*4d9fdb46SRobert Mustacchiint dwarf_loclist_from_expr(Dwarf_Debug /*dbg*/,
1954*4d9fdb46SRobert Mustacchi    Dwarf_Ptr      /* expression_in*/,
1955*4d9fdb46SRobert Mustacchi    Dwarf_Unsigned /* expression_length*/,
1956*4d9fdb46SRobert Mustacchi    Dwarf_Locdesc ** /* llbuf*/,
1957*4d9fdb46SRobert Mustacchi    Dwarf_Signed * /*listlen*/,
1958*4d9fdb46SRobert Mustacchi    Dwarf_Error *  /* error*/ );
1959*4d9fdb46SRobert Mustacchi
1960*4d9fdb46SRobert Mustacchi/*  dwarf_loclist_from_expr_a new 27 Apr 2009:
1961*4d9fdb46SRobert Mustacchi    added addr_size argument. */
1962*4d9fdb46SRobert Mustacchiint dwarf_loclist_from_expr_a(Dwarf_Debug /*dbg*/,
1963*4d9fdb46SRobert Mustacchi    Dwarf_Ptr      /*expression_in*/,
1964*4d9fdb46SRobert Mustacchi    Dwarf_Unsigned /*expression_length*/,
1965*4d9fdb46SRobert Mustacchi    Dwarf_Half     /*addr_size*/,
1966*4d9fdb46SRobert Mustacchi    Dwarf_Locdesc ** /*llbuf*/,
1967*4d9fdb46SRobert Mustacchi    Dwarf_Signed * /*listlen*/,
1968*4d9fdb46SRobert Mustacchi    Dwarf_Error *  /*error*/);
1969*4d9fdb46SRobert 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 Mustacchiint dwarf_loclist_from_expr_b(Dwarf_Debug /*dbg*/,
1976*4d9fdb46SRobert Mustacchi    Dwarf_Ptr      /*expression_in*/ ,
1977*4d9fdb46SRobert Mustacchi    Dwarf_Unsigned /*expression_length*/ ,
1978*4d9fdb46SRobert Mustacchi    Dwarf_Half     /*addr_size*/ ,
1979*4d9fdb46SRobert Mustacchi    Dwarf_Half     /*offset_size*/ ,
1980*4d9fdb46SRobert Mustacchi    Dwarf_Small    /*dwarf_version*/ ,
1981*4d9fdb46SRobert Mustacchi    Dwarf_Locdesc ** /*llbuf*/ ,
1982*4d9fdb46SRobert Mustacchi    Dwarf_Signed * /*listlen*/ ,
1983*4d9fdb46SRobert Mustacchi    Dwarf_Error *  /*error*/ );
1984*4d9fdb46SRobert Mustacchi
1985*4d9fdb46SRobert Mustacchiint dwarf_lowpc(Dwarf_Die /*die*/,
1986*4d9fdb46SRobert Mustacchi    Dwarf_Addr  *    /*returned_addr*/,
1987*4d9fdb46SRobert Mustacchi    Dwarf_Error*     /*error*/);
1988*4d9fdb46SRobert 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 Mustacchiint dwarf_highpc_b(Dwarf_Die /*die*/,
1995*4d9fdb46SRobert Mustacchi    Dwarf_Addr  *           /*return_value*/,
1996*4d9fdb46SRobert Mustacchi    Dwarf_Half  *           /*return_form*/,
1997*4d9fdb46SRobert Mustacchi    enum Dwarf_Form_Class * /*return_class*/,
1998*4d9fdb46SRobert Mustacchi    Dwarf_Error *           /*error*/);
1999*4d9fdb46SRobert Mustacchi
2000*4d9fdb46SRobert Mustacchi/*  This works for DWARF2 and DWARF3 styles of DW_AT_highpc,
2001*4d9fdb46SRobert Mustacchi    but not for the DWARF4 class constant forms.
2002*4d9fdb46SRobert Mustacchi    If the FORM is of class constant this returns an error */
2003*4d9fdb46SRobert Mustacchiint dwarf_highpc(Dwarf_Die /*die*/,
2004*4d9fdb46SRobert Mustacchi    Dwarf_Addr  *    /*returned_addr*/,
2005*4d9fdb46SRobert Mustacchi    Dwarf_Error*     /*error*/);
2006*4d9fdb46SRobert Mustacchi
2007*4d9fdb46SRobert Mustacchi/*  New January 2016. */
2008*4d9fdb46SRobert Mustacchiint dwarf_dietype_offset(Dwarf_Die /*die*/,
2009*4d9fdb46SRobert Mustacchi    Dwarf_Off   * /*return_off*/,
2010*4d9fdb46SRobert Mustacchi    Dwarf_Error * /*error*/);
2011*4d9fdb46SRobert Mustacchi
2012*4d9fdb46SRobert Mustacchiint dwarf_bytesize(Dwarf_Die /*die*/,
2013*4d9fdb46SRobert Mustacchi    Dwarf_Unsigned * /*returned_size*/,
2014*4d9fdb46SRobert Mustacchi    Dwarf_Error*     /*error*/);
2015*4d9fdb46SRobert Mustacchi
2016*4d9fdb46SRobert Mustacchiint dwarf_bitsize(Dwarf_Die /*die*/,
2017*4d9fdb46SRobert Mustacchi    Dwarf_Unsigned * /*returned_size*/,
2018*4d9fdb46SRobert Mustacchi    Dwarf_Error*     /*error*/);
2019*4d9fdb46SRobert Mustacchi
2020*4d9fdb46SRobert Mustacchiint dwarf_bitoffset(Dwarf_Die /*die*/,
2021*4d9fdb46SRobert Mustacchi    Dwarf_Unsigned * /*returned_offset*/,
2022*4d9fdb46SRobert Mustacchi    Dwarf_Error*     /*error*/);
2023*4d9fdb46SRobert Mustacchi
2024*4d9fdb46SRobert Mustacchiint dwarf_srclang(Dwarf_Die /*die*/,
2025*4d9fdb46SRobert Mustacchi    Dwarf_Unsigned * /*returned_lang*/,
2026*4d9fdb46SRobert Mustacchi    Dwarf_Error*     /*error*/);
2027*4d9fdb46SRobert Mustacchi
2028*4d9fdb46SRobert Mustacchiint dwarf_arrayorder(Dwarf_Die /*die*/,
2029*4d9fdb46SRobert Mustacchi    Dwarf_Unsigned * /*returned_order*/,
2030*4d9fdb46SRobert Mustacchi    Dwarf_Error*     /*error*/);
2031*4d9fdb46SRobert Mustacchi
2032*4d9fdb46SRobert Mustacchi/* end of convenience function list */
2033*4d9fdb46SRobert Mustacchi
2034*4d9fdb46SRobert Mustacchi/* this is the main interface to attributes of a DIE */
2035*4d9fdb46SRobert Mustacchiint dwarf_attrlist(Dwarf_Die /*die*/,
2036*4d9fdb46SRobert Mustacchi    Dwarf_Attribute** /*attrbuf*/,
2037*4d9fdb46SRobert Mustacchi    Dwarf_Signed   * /*attrcount*/,
2038*4d9fdb46SRobert Mustacchi    Dwarf_Error*     /*error*/);
2039*4d9fdb46SRobert Mustacchi
2040*4d9fdb46SRobert Mustacchi/* query operations for attributes */
2041*4d9fdb46SRobert Mustacchiint dwarf_hasform(Dwarf_Attribute /*attr*/,
2042*4d9fdb46SRobert Mustacchi    Dwarf_Half       /*form*/,
2043*4d9fdb46SRobert Mustacchi    Dwarf_Bool *     /*returned_bool*/,
2044*4d9fdb46SRobert Mustacchi    Dwarf_Error*     /*error*/);
2045*4d9fdb46SRobert Mustacchi
2046*4d9fdb46SRobert Mustacchiint dwarf_whatform(Dwarf_Attribute /*attr*/,
2047*4d9fdb46SRobert Mustacchi    Dwarf_Half *     /*returned_final_form*/,
2048*4d9fdb46SRobert Mustacchi    Dwarf_Error*     /*error*/);
2049*4d9fdb46SRobert Mustacchi
2050*4d9fdb46SRobert Mustacchiint dwarf_whatform_direct(Dwarf_Attribute /*attr*/,
2051*4d9fdb46SRobert Mustacchi    Dwarf_Half *     /*returned_initial_form*/,
2052*4d9fdb46SRobert Mustacchi    Dwarf_Error*     /*error*/);
2053*4d9fdb46SRobert Mustacchiint dwarf_whatattr(Dwarf_Attribute /*attr*/,
2054*4d9fdb46SRobert Mustacchi    Dwarf_Half *     /*returned_attr_num*/,
2055*4d9fdb46SRobert Mustacchi    Dwarf_Error*     /*error*/);
2056*4d9fdb46SRobert Mustacchi
2057*4d9fdb46SRobert Mustacchi/*
2058*4d9fdb46SRobert Mustacchi    The following are concerned with the Primary Interface: getting
2059*4d9fdb46SRobert Mustacchi    the actual data values. One function per 'kind' of FORM.
2060*4d9fdb46SRobert Mustacchi*/
2061*4d9fdb46SRobert Mustacchi/*  dwarf_formref returns, thru return_offset, a CU-relative offset
2062*4d9fdb46SRobert Mustacchi    and does not allow DW_FORM_ref_addr*/
2063*4d9fdb46SRobert Mustacchiint dwarf_formref(Dwarf_Attribute /*attr*/,
2064*4d9fdb46SRobert Mustacchi    Dwarf_Off*       /*return_offset*/,
2065*4d9fdb46SRobert Mustacchi    Dwarf_Error*     /*error*/);
2066*4d9fdb46SRobert Mustacchi/*  dwarf_global_formref returns, thru return_offset,
2067*4d9fdb46SRobert Mustacchi    a debug_info-relative offset and does allow all reference forms*/
2068*4d9fdb46SRobert Mustacchiint dwarf_global_formref(Dwarf_Attribute /*attr*/,
2069*4d9fdb46SRobert Mustacchi    Dwarf_Off*       /*return_offset*/,
2070*4d9fdb46SRobert Mustacchi    Dwarf_Error*     /*error*/);
2071*4d9fdb46SRobert Mustacchi
2072*4d9fdb46SRobert Mustacchi/*  dwarf_formsig8 returns in the caller-provided 8 byte area
2073*4d9fdb46SRobert Mustacchi    the 8 bytes of a DW_FORM_ref_sig8.  Not a string.  */
2074*4d9fdb46SRobert Mustacchiint dwarf_formsig8(Dwarf_Attribute /*attr*/,
2075*4d9fdb46SRobert Mustacchi    Dwarf_Sig8 * /*returned sig bytes*/,
2076*4d9fdb46SRobert 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 Mustacchiint dwarf_formsig8_const(Dwarf_Attribute /*attr*/,
2080*4d9fdb46SRobert Mustacchi    Dwarf_Sig8 * /*returned sig bytes*/,
2081*4d9fdb46SRobert Mustacchi    Dwarf_Error*     /*error*/);
2082*4d9fdb46SRobert Mustacchi
2083*4d9fdb46SRobert Mustacchiint dwarf_formaddr(Dwarf_Attribute /*attr*/,
2084*4d9fdb46SRobert Mustacchi    Dwarf_Addr   *   /*returned_addr*/,
2085*4d9fdb46SRobert Mustacchi    Dwarf_Error*     /*error*/);
2086*4d9fdb46SRobert 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 Mustacchiint dwarf_get_debug_addr_index(Dwarf_Attribute /*attr*/,
2092*4d9fdb46SRobert Mustacchi    Dwarf_Unsigned * /*return_index*/,
2093*4d9fdb46SRobert Mustacchi    Dwarf_Error * /*error*/);
2094*4d9fdb46SRobert Mustacchi
2095*4d9fdb46SRobert Mustacchiint dwarf_formflag(Dwarf_Attribute /*attr*/,
2096*4d9fdb46SRobert Mustacchi    Dwarf_Bool *     /*returned_bool*/,
2097*4d9fdb46SRobert Mustacchi    Dwarf_Error*     /*error*/);
2098*4d9fdb46SRobert Mustacchi
2099*4d9fdb46SRobert Mustacchiint dwarf_formdata16(Dwarf_Attribute /*attr*/,
2100*4d9fdb46SRobert Mustacchi    Dwarf_Form_Data16  * /*returned_val*/,
2101*4d9fdb46SRobert Mustacchi    Dwarf_Error*     /*error*/);
2102*4d9fdb46SRobert Mustacchi
2103*4d9fdb46SRobert Mustacchiint dwarf_formudata(Dwarf_Attribute /*attr*/,
2104*4d9fdb46SRobert Mustacchi    Dwarf_Unsigned  * /*returned_val*/,
2105*4d9fdb46SRobert Mustacchi    Dwarf_Error*     /*error*/);
2106*4d9fdb46SRobert Mustacchi
2107*4d9fdb46SRobert Mustacchiint dwarf_formsdata(Dwarf_Attribute     /*attr*/,
2108*4d9fdb46SRobert Mustacchi    Dwarf_Signed  *  /*returned_val*/,
2109*4d9fdb46SRobert Mustacchi    Dwarf_Error*     /*error*/);
2110*4d9fdb46SRobert Mustacchi
2111*4d9fdb46SRobert Mustacchiint dwarf_formblock(Dwarf_Attribute /*attr*/,
2112*4d9fdb46SRobert Mustacchi    Dwarf_Block    ** /*returned_block*/,
2113*4d9fdb46SRobert Mustacchi    Dwarf_Error*     /*error*/);
2114*4d9fdb46SRobert Mustacchi
2115*4d9fdb46SRobert Mustacchiint dwarf_formstring(Dwarf_Attribute /*attr*/,
2116*4d9fdb46SRobert Mustacchi    char   **        /*returned_string*/,
2117*4d9fdb46SRobert Mustacchi    Dwarf_Error*     /*error*/);
2118*4d9fdb46SRobert 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 Mustacchiint 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
2128*4d9fdb46SRobert Mustacchiint dwarf_formexprloc(Dwarf_Attribute /*attr*/,
2129*4d9fdb46SRobert Mustacchi    Dwarf_Unsigned * /*return_exprlen*/,
2130*4d9fdb46SRobert Mustacchi    Dwarf_Ptr  * /*block_ptr*/,
2131*4d9fdb46SRobert Mustacchi    Dwarf_Error * /*error*/);
2132*4d9fdb46SRobert Mustacchi
2133*4d9fdb46SRobert Mustacchi
2134*4d9fdb46SRobert Mustacchi/* end attribute query operations. */
2135*4d9fdb46SRobert Mustacchi
2136*4d9fdb46SRobert Mustacchi/* Start line number operations */
2137*4d9fdb46SRobert Mustacchi/* dwarf_srclines  is the original interface from 1993. */
2138*4d9fdb46SRobert Mustacchiint dwarf_srclines(Dwarf_Die /*die*/,
2139*4d9fdb46SRobert Mustacchi    Dwarf_Line**     /*linebuf*/,
2140*4d9fdb46SRobert Mustacchi    Dwarf_Signed *   /*linecount*/,
2141*4d9fdb46SRobert Mustacchi    Dwarf_Error*     /*error*/);
2142*4d9fdb46SRobert Mustacchi
2143*4d9fdb46SRobert Mustacchi
2144*4d9fdb46SRobert Mustacchi/* If we have two-level line tables, this will return the
2145*4d9fdb46SRobert Mustacchi   logicals table in linebuf and the actuals table in
2146*4d9fdb46SRobert Mustacchi   linebuf_actuals. For old-style (one-level) tables, it
2147*4d9fdb46SRobert Mustacchi   will return the single table through linebuf, and the
2148*4d9fdb46SRobert Mustacchi   value returned through linecount_actuals will be 0.
2149*4d9fdb46SRobert Mustacchi   The actual version number is returned through version.
2150*4d9fdb46SRobert Mustacchi   For two-level line tables, the version returned will
2151*4d9fdb46SRobert Mustacchi   be 0xf006. This interface can return data from two-level
2152*4d9fdb46SRobert Mustacchi   line tables, which are experimental.
2153*4d9fdb46SRobert Mustacchi   Most users will not wish to use dwarf_srclines_two_level */
2154*4d9fdb46SRobert Mustacchiint 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
2172*4d9fdb46SRobert Mustacchivoid dwarf_srclines_dealloc(Dwarf_Debug /*dbg*/,
2173*4d9fdb46SRobert Mustacchi    Dwarf_Line*       /*linebuf*/,
2174*4d9fdb46SRobert Mustacchi    Dwarf_Signed      /*count */);
2175*4d9fdb46SRobert Mustacchi
2176*4d9fdb46SRobert 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 Mustacchiint 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 Mustacchiint 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 Mustacchiint 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 Mustacchivoid 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 Mustacchiint 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 Mustacchiint 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 Mustacchiint 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 Mustacchiint 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 Mustacchiint 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 Mustacchiint 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 Mustacchiint 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 Mustacchiint 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 Mustacchiint 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 Mustacchiint 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 Mustacchiint 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 Mustacchiint dwarf_get_line_section_name_from_die(Dwarf_Die /*die*/,
2333*4d9fdb46SRobert Mustacchi    const char ** /*section_name_out*/,
2334*4d9fdb46SRobert Mustacchi    Dwarf_Error * /*error*/);
2335*4d9fdb46SRobert Mustacchi
2336*4d9fdb46SRobert Mustacchi
2337*4d9fdb46SRobert Mustacchi/*  While 'filecount' is signed, the value
2338*4d9fdb46SRobert Mustacchi    returned through the pointer is never negative.
2339*4d9fdb46SRobert Mustacchi    Original libdwarf from 199x.  */
2340*4d9fdb46SRobert Mustacchiint dwarf_srcfiles(Dwarf_Die /*die*/,
2341*4d9fdb46SRobert Mustacchi    char***          /*srcfiles*/,
2342*4d9fdb46SRobert Mustacchi    Dwarf_Signed *   /*filecount*/,
2343*4d9fdb46SRobert Mustacchi    Dwarf_Error*     /*error*/);
2344*4d9fdb46SRobert Mustacchi
2345*4d9fdb46SRobert Mustacchiint dwarf_linebeginstatement(Dwarf_Line /*line*/,
2346*4d9fdb46SRobert Mustacchi    Dwarf_Bool  *    /*returned_bool*/,
2347*4d9fdb46SRobert Mustacchi    Dwarf_Error*     /*error*/);
2348*4d9fdb46SRobert Mustacchi
2349*4d9fdb46SRobert Mustacchiint dwarf_lineendsequence(Dwarf_Line /*line*/,
2350*4d9fdb46SRobert Mustacchi    Dwarf_Bool  *    /*returned_bool*/,
2351*4d9fdb46SRobert Mustacchi    Dwarf_Error*     /*error*/);
2352*4d9fdb46SRobert Mustacchi
2353*4d9fdb46SRobert Mustacchiint dwarf_lineno(Dwarf_Line /*line*/,
2354*4d9fdb46SRobert Mustacchi    Dwarf_Unsigned * /*returned_lineno*/,
2355*4d9fdb46SRobert Mustacchi    Dwarf_Error*     /*error*/);
2356*4d9fdb46SRobert Mustacchi
2357*4d9fdb46SRobert Mustacchiint dwarf_line_srcfileno(Dwarf_Line /*line*/,
2358*4d9fdb46SRobert Mustacchi    Dwarf_Unsigned * /*ret_fileno*/,
2359*4d9fdb46SRobert Mustacchi    Dwarf_Error *    /*error*/);
2360*4d9fdb46SRobert Mustacchi
2361*4d9fdb46SRobert Mustacchi/* Is the line address from DW_LNS_set_address? */
2362*4d9fdb46SRobert Mustacchiint 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
2366*4d9fdb46SRobert Mustacchiint dwarf_lineaddr(Dwarf_Line /*line*/,
2367*4d9fdb46SRobert Mustacchi    Dwarf_Addr *     /*returned_addr*/,
2368*4d9fdb46SRobert Mustacchi    Dwarf_Error*     /*error*/);
2369*4d9fdb46SRobert Mustacchi
2370*4d9fdb46SRobert Mustacchi/* dwarf_lineoff is OBSOLETE as of December 2011. Do not use. */
2371*4d9fdb46SRobert Mustacchiint dwarf_lineoff(Dwarf_Line /*line*/,
2372*4d9fdb46SRobert Mustacchi    Dwarf_Signed  *  /*returned_lineoffset*/,
2373*4d9fdb46SRobert Mustacchi    Dwarf_Error*     /*error*/);
2374*4d9fdb46SRobert 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 Mustacchiint dwarf_lineoff_b(Dwarf_Line /*line*/,
2379*4d9fdb46SRobert Mustacchi    Dwarf_Unsigned * /*returned_lineoffset*/,
2380*4d9fdb46SRobert Mustacchi    Dwarf_Error*     /*error*/);
2381*4d9fdb46SRobert Mustacchi
2382*4d9fdb46SRobert Mustacchiint dwarf_linesrc(Dwarf_Line /*line*/,
2383*4d9fdb46SRobert Mustacchi    char   **        /*returned_name*/,
2384*4d9fdb46SRobert Mustacchi    Dwarf_Error*     /*error*/);
2385*4d9fdb46SRobert Mustacchi
2386*4d9fdb46SRobert Mustacchiint dwarf_lineblock(Dwarf_Line /*line*/,
2387*4d9fdb46SRobert Mustacchi    Dwarf_Bool  *    /*returned_bool*/,
2388*4d9fdb46SRobert Mustacchi    Dwarf_Error*     /*error*/);
2389*4d9fdb46SRobert 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 Mustacchiint dwarf_prologue_end_etc(Dwarf_Line /* line */,
2393*4d9fdb46SRobert Mustacchi    Dwarf_Bool  *    /*prologue_end*/,
2394*4d9fdb46SRobert Mustacchi    Dwarf_Bool  *    /*eplogue_begin*/,
2395*4d9fdb46SRobert Mustacchi    Dwarf_Unsigned * /* isa */,
2396*4d9fdb46SRobert Mustacchi    Dwarf_Unsigned * /* discriminator */,
2397*4d9fdb46SRobert Mustacchi    Dwarf_Error *    /*error*/);
2398*4d9fdb46SRobert Mustacchi/* End line table operations */
2399*4d9fdb46SRobert Mustacchi
2400*4d9fdb46SRobert Mustacchi/* Two-level line tables:
2401*4d9fdb46SRobert Mustacchi   When reading from an actuals table, dwarf_line_logical()
2402*4d9fdb46SRobert Mustacchi   returns the logical row number for the line. */
2403*4d9fdb46SRobert Mustacchiint 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 Mustacchiint 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 Mustacchiint 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 Mustacchiint 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 Mustacchiint 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 Mustacchiint 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 Mustacchiint 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 Mustacchiint 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 Mustacchiint 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 Mustacchiint 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 Mustacchiint 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 Mustacchiint 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 Mustacchiint 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 Mustacchiint 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 Mustacchiint 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 Mustacchiint 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 Mustacchiint 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 Mustacchiint 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 Mustacchiint dwarf_return_empty_pubnames(Dwarf_Debug /*dbg*/,
2634*4d9fdb46SRobert Mustacchi    int /* flag */,
2635*4d9fdb46SRobert Mustacchi    Dwarf_Error* /*error*/);
2636*4d9fdb46SRobert Mustacchi
2637*4d9fdb46SRobert Mustacchiint dwarf_get_globals(Dwarf_Debug /*dbg*/,
2638*4d9fdb46SRobert Mustacchi    Dwarf_Global**   /*globals*/,
2639*4d9fdb46SRobert Mustacchi    Dwarf_Signed *   /*number_of_globals*/,
2640*4d9fdb46SRobert Mustacchi    Dwarf_Error*     /*error*/);
2641*4d9fdb46SRobert Mustacchivoid dwarf_globals_dealloc(Dwarf_Debug /*dbg*/,
2642*4d9fdb46SRobert Mustacchi    Dwarf_Global*    /*globals*/,
2643*4d9fdb46SRobert Mustacchi    Dwarf_Signed     /*number_of_globals*/);
2644*4d9fdb46SRobert Mustacchi
2645*4d9fdb46SRobert Mustacchiint dwarf_globname(Dwarf_Global /*glob*/,
2646*4d9fdb46SRobert Mustacchi    char   **        /*returned_name*/,
2647*4d9fdb46SRobert Mustacchi    Dwarf_Error*     /*error*/);
2648*4d9fdb46SRobert Mustacchi
2649*4d9fdb46SRobert Mustacchiint dwarf_global_die_offset(Dwarf_Global /*global*/,
2650*4d9fdb46SRobert Mustacchi    Dwarf_Off*       /*return_offset*/,
2651*4d9fdb46SRobert Mustacchi    Dwarf_Error *    /*error*/);
2652*4d9fdb46SRobert Mustacchi
2653*4d9fdb46SRobert Mustacchi/* This returns the CU die global offset if one knows the
2654*4d9fdb46SRobert Mustacchi   CU header global offset.
2655*4d9fdb46SRobert Mustacchi   See also dwarf_CU_dieoffset_given_die(). */
2656*4d9fdb46SRobert Mustacchiint dwarf_get_cu_die_offset_given_cu_header_offset(
2657*4d9fdb46SRobert Mustacchi    Dwarf_Debug      /*dbg*/,
2658*4d9fdb46SRobert Mustacchi    Dwarf_Off        /*in_cu_header_offset*/,
2659*4d9fdb46SRobert Mustacchi    Dwarf_Off *  /*out_cu_die_offset*/,
2660*4d9fdb46SRobert Mustacchi    Dwarf_Error *    /*err*/);
2661*4d9fdb46SRobert Mustacchi
2662*4d9fdb46SRobert Mustacchi/*  The _b form is new October 2011. */
2663*4d9fdb46SRobert Mustacchiint dwarf_get_cu_die_offset_given_cu_header_offset_b(
2664*4d9fdb46SRobert Mustacchi    Dwarf_Debug      /*dbg*/,
2665*4d9fdb46SRobert Mustacchi    Dwarf_Off        /*in_cu_header_offset*/,
2666*4d9fdb46SRobert Mustacchi    Dwarf_Bool       /*is_info. True means look in debug_Info,
2667*4d9fdb46SRobert Mustacchi        false use debug_types.*/,
2668*4d9fdb46SRobert Mustacchi    Dwarf_Off *  /*out_cu_die_offset*/,
2669*4d9fdb46SRobert Mustacchi    Dwarf_Error *    /*err*/);
2670*4d9fdb46SRobert Mustacchi
2671*4d9fdb46SRobert Mustacchi#ifdef __sgi /* pragma is sgi MIPS only */
2672*4d9fdb46SRobert Mustacchi#pragma optional dwarf_get_cu_die_offset_given_cu_header_offset
2673*4d9fdb46SRobert Mustacchi#endif
2674*4d9fdb46SRobert Mustacchi
2675*4d9fdb46SRobert Mustacchiint dwarf_global_cu_offset(Dwarf_Global /*global*/,
2676*4d9fdb46SRobert Mustacchi    Dwarf_Off*       /*return_offset*/,
2677*4d9fdb46SRobert Mustacchi    Dwarf_Error*     /*error*/);
2678*4d9fdb46SRobert Mustacchi
2679*4d9fdb46SRobert Mustacchiint dwarf_global_name_offsets(Dwarf_Global /*global*/,
2680*4d9fdb46SRobert Mustacchi    char   **        /*returned_name*/,
2681*4d9fdb46SRobert Mustacchi    Dwarf_Off*       /*die_offset*/,
2682*4d9fdb46SRobert Mustacchi    Dwarf_Off*       /*cu_offset*/,
2683*4d9fdb46SRobert Mustacchi    Dwarf_Error*     /*error*/);
2684*4d9fdb46SRobert 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 Mustacchiint 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
2699*4d9fdb46SRobert Mustacchi/* Static function name operations.  */
2700*4d9fdb46SRobert Mustacchiint dwarf_get_funcs(Dwarf_Debug    /*dbg*/,
2701*4d9fdb46SRobert Mustacchi    Dwarf_Func**     /*funcs*/,
2702*4d9fdb46SRobert Mustacchi    Dwarf_Signed *   /*number_of_funcs*/,
2703*4d9fdb46SRobert Mustacchi    Dwarf_Error*     /*error*/);
2704*4d9fdb46SRobert Mustacchivoid dwarf_funcs_dealloc(Dwarf_Debug /*dbg*/,
2705*4d9fdb46SRobert Mustacchi    Dwarf_Func*      /*funcs*/,
2706*4d9fdb46SRobert Mustacchi    Dwarf_Signed     /*number_of_funcs*/);
2707*4d9fdb46SRobert Mustacchi
2708*4d9fdb46SRobert Mustacchiint dwarf_funcname(Dwarf_Func /*func*/,
2709*4d9fdb46SRobert Mustacchi    char   **        /*returned_name*/,
2710*4d9fdb46SRobert Mustacchi    Dwarf_Error*     /*error*/);
2711*4d9fdb46SRobert Mustacchi
2712*4d9fdb46SRobert Mustacchiint dwarf_func_die_offset(Dwarf_Func /*func*/,
2713*4d9fdb46SRobert Mustacchi    Dwarf_Off*       /*return_offset*/,
2714*4d9fdb46SRobert Mustacchi    Dwarf_Error*     /*error*/);
2715*4d9fdb46SRobert Mustacchi
2716*4d9fdb46SRobert Mustacchiint dwarf_func_cu_offset(Dwarf_Func /*func*/,
2717*4d9fdb46SRobert Mustacchi    Dwarf_Off*       /*return_offset*/,
2718*4d9fdb46SRobert Mustacchi    Dwarf_Error*     /*error*/);
2719*4d9fdb46SRobert Mustacchi
2720*4d9fdb46SRobert Mustacchiint dwarf_func_name_offsets(Dwarf_Func /*func*/,
2721*4d9fdb46SRobert Mustacchi    char   **        /*returned_name*/,
2722*4d9fdb46SRobert Mustacchi    Dwarf_Off*       /*die_offset*/,
2723*4d9fdb46SRobert Mustacchi    Dwarf_Off*       /*cu_offset*/,
2724*4d9fdb46SRobert Mustacchi    Dwarf_Error*     /*error*/);
2725*4d9fdb46SRobert Mustacchi
2726*4d9fdb46SRobert Mustacchi/* User-defined type name operations, SGI IRIX .debug_typenames section.
2727*4d9fdb46SRobert Mustacchi   Same content as DWARF3 .debug_pubtypes, but defined years before
2728*4d9fdb46SRobert Mustacchi   .debug_pubtypes was defined.   SGI IRIX only. */
2729*4d9fdb46SRobert Mustacchiint dwarf_get_types(Dwarf_Debug    /*dbg*/,
2730*4d9fdb46SRobert Mustacchi    Dwarf_Type**     /*types*/,
2731*4d9fdb46SRobert Mustacchi    Dwarf_Signed *   /*number_of_types*/,
2732*4d9fdb46SRobert Mustacchi    Dwarf_Error*     /*error*/);
2733*4d9fdb46SRobert Mustacchivoid dwarf_types_dealloc(Dwarf_Debug /*dbg*/,
2734*4d9fdb46SRobert Mustacchi    Dwarf_Type*      /*types*/,
2735*4d9fdb46SRobert Mustacchi    Dwarf_Signed     /*number_of_types*/);
2736*4d9fdb46SRobert Mustacchi
2737*4d9fdb46SRobert Mustacchi
2738*4d9fdb46SRobert Mustacchiint dwarf_typename(Dwarf_Type /*type*/,
2739*4d9fdb46SRobert Mustacchi    char   **        /*returned_name*/,
2740*4d9fdb46SRobert Mustacchi    Dwarf_Error*     /*error*/);
2741*4d9fdb46SRobert Mustacchi
2742*4d9fdb46SRobert Mustacchiint dwarf_type_die_offset(Dwarf_Type /*type*/,
2743*4d9fdb46SRobert Mustacchi    Dwarf_Off*       /*return_offset*/,
2744*4d9fdb46SRobert Mustacchi    Dwarf_Error*     /*error*/);
2745*4d9fdb46SRobert Mustacchi
2746*4d9fdb46SRobert Mustacchiint dwarf_type_cu_offset(Dwarf_Type /*type*/,
2747*4d9fdb46SRobert Mustacchi    Dwarf_Off*       /*return_offset*/,
2748*4d9fdb46SRobert Mustacchi    Dwarf_Error*     /*error*/);
2749*4d9fdb46SRobert Mustacchi
2750*4d9fdb46SRobert Mustacchiint dwarf_type_name_offsets(Dwarf_Type    /*type*/,
2751*4d9fdb46SRobert Mustacchi    char   **        /*returned_name*/,
2752*4d9fdb46SRobert Mustacchi    Dwarf_Off*       /*die_offset*/,
2753*4d9fdb46SRobert Mustacchi    Dwarf_Off*       /*cu_offset*/,
2754*4d9fdb46SRobert Mustacchi    Dwarf_Error*     /*error*/);
2755*4d9fdb46SRobert Mustacchi
2756*4d9fdb46SRobert Mustacchi/* User-defined type name operations, DWARF3  .debug_pubtypes section.
2757*4d9fdb46SRobert Mustacchi*/
2758*4d9fdb46SRobert Mustacchiint dwarf_get_pubtypes(Dwarf_Debug    /*dbg*/,
2759*4d9fdb46SRobert Mustacchi    Dwarf_Type**     /*types*/,
2760*4d9fdb46SRobert Mustacchi    Dwarf_Signed *   /*number_of_types*/,
2761*4d9fdb46SRobert Mustacchi    Dwarf_Error*     /*error*/);
2762*4d9fdb46SRobert Mustacchivoid dwarf_pubtypes_dealloc(Dwarf_Debug /*dbg*/,
2763*4d9fdb46SRobert Mustacchi    Dwarf_Type*      /*pubtypes*/,
2764*4d9fdb46SRobert Mustacchi    Dwarf_Signed     /*number_of_pubtypes*/);
2765*4d9fdb46SRobert Mustacchi
2766*4d9fdb46SRobert Mustacchi
2767*4d9fdb46SRobert Mustacchiint dwarf_pubtypename(Dwarf_Type /*type*/,
2768*4d9fdb46SRobert Mustacchi    char   **        /*returned_name*/,
2769*4d9fdb46SRobert Mustacchi    Dwarf_Error*     /*error*/);
2770*4d9fdb46SRobert Mustacchi
2771*4d9fdb46SRobert Mustacchiint dwarf_pubtype_type_die_offset(Dwarf_Type /*type*/,
2772*4d9fdb46SRobert Mustacchi    Dwarf_Off*       /*return_offset*/,
2773*4d9fdb46SRobert Mustacchi    Dwarf_Error*     /*error*/);
2774*4d9fdb46SRobert Mustacchi
2775*4d9fdb46SRobert Mustacchiint dwarf_pubtype_cu_offset(Dwarf_Type /*type*/,
2776*4d9fdb46SRobert Mustacchi    Dwarf_Off*       /*return_offset*/,
2777*4d9fdb46SRobert Mustacchi    Dwarf_Error*     /*error*/);
2778*4d9fdb46SRobert Mustacchi
2779*4d9fdb46SRobert Mustacchiint dwarf_pubtype_name_offsets(Dwarf_Type    /*type*/,
2780*4d9fdb46SRobert Mustacchi    char   **        /*returned_name*/,
2781*4d9fdb46SRobert Mustacchi    Dwarf_Off*       /*die_offset*/,
2782*4d9fdb46SRobert Mustacchi    Dwarf_Off*       /*cu_offset*/,
2783*4d9fdb46SRobert Mustacchi    Dwarf_Error*     /*error*/);
2784*4d9fdb46SRobert Mustacchi
2785*4d9fdb46SRobert Mustacchi/* File-scope static variable name operations.  */
2786*4d9fdb46SRobert Mustacchiint dwarf_get_vars(Dwarf_Debug    /*dbg*/,
2787*4d9fdb46SRobert Mustacchi    Dwarf_Var**      /*vars*/,
2788*4d9fdb46SRobert Mustacchi    Dwarf_Signed *   /*number_of_vars*/,
2789*4d9fdb46SRobert Mustacchi    Dwarf_Error*     /*error*/);
2790*4d9fdb46SRobert Mustacchivoid dwarf_vars_dealloc(Dwarf_Debug /*dbg*/,
2791*4d9fdb46SRobert Mustacchi    Dwarf_Var*       /*vars*/,
2792*4d9fdb46SRobert Mustacchi    Dwarf_Signed     /*number_of_vars*/);
2793*4d9fdb46SRobert Mustacchi
2794*4d9fdb46SRobert Mustacchi
2795*4d9fdb46SRobert Mustacchiint dwarf_varname(Dwarf_Var /*var*/,
2796*4d9fdb46SRobert Mustacchi    char   **        /*returned_name*/,
2797*4d9fdb46SRobert Mustacchi    Dwarf_Error*     /*error*/);
2798*4d9fdb46SRobert Mustacchi
2799*4d9fdb46SRobert Mustacchiint dwarf_var_die_offset(Dwarf_Var /*var*/,
2800*4d9fdb46SRobert Mustacchi    Dwarf_Off*       /*return_offset*/,
2801*4d9fdb46SRobert Mustacchi    Dwarf_Error*     /*error*/);
2802*4d9fdb46SRobert Mustacchi
2803*4d9fdb46SRobert Mustacchiint dwarf_var_cu_offset(Dwarf_Var /*var*/,
2804*4d9fdb46SRobert Mustacchi    Dwarf_Off*       /*return_offset*/,
2805*4d9fdb46SRobert Mustacchi    Dwarf_Error*     /*error*/);
2806*4d9fdb46SRobert Mustacchi
2807*4d9fdb46SRobert Mustacchiint dwarf_var_name_offsets(Dwarf_Var /*var*/,
2808*4d9fdb46SRobert Mustacchi    char   **        /*returned_name*/,
2809*4d9fdb46SRobert Mustacchi    Dwarf_Off*       /*die_offset*/,
2810*4d9fdb46SRobert Mustacchi    Dwarf_Off*       /*cu_offset*/,
2811*4d9fdb46SRobert Mustacchi    Dwarf_Error*     /*error*/);
2812*4d9fdb46SRobert Mustacchi
2813*4d9fdb46SRobert Mustacchi/* weak name operations.  */
2814*4d9fdb46SRobert Mustacchiint dwarf_get_weaks(Dwarf_Debug    /*dbg*/,
2815*4d9fdb46SRobert Mustacchi    Dwarf_Weak**     /*weaks*/,
2816*4d9fdb46SRobert Mustacchi    Dwarf_Signed *   /*number_of_weaks*/,
2817*4d9fdb46SRobert Mustacchi    Dwarf_Error*     /*error*/);
2818*4d9fdb46SRobert Mustacchivoid dwarf_weaks_dealloc(Dwarf_Debug /*dbg*/,
2819*4d9fdb46SRobert Mustacchi    Dwarf_Weak*      /*weaks*/,
2820*4d9fdb46SRobert Mustacchi    Dwarf_Signed     /*number_of_weaks*/);
2821*4d9fdb46SRobert Mustacchi
2822*4d9fdb46SRobert Mustacchi
2823*4d9fdb46SRobert Mustacchiint dwarf_weakname(Dwarf_Weak /*weak*/,
2824*4d9fdb46SRobert Mustacchi    char   **        /*returned_name*/,
2825*4d9fdb46SRobert Mustacchi    Dwarf_Error*     /*error*/);
2826*4d9fdb46SRobert Mustacchi
2827*4d9fdb46SRobert Mustacchiint dwarf_weak_die_offset(Dwarf_Weak /*weak*/,
2828*4d9fdb46SRobert Mustacchi    Dwarf_Off*       /*return_offset*/,
2829*4d9fdb46SRobert Mustacchi    Dwarf_Error*     /*error*/);
2830*4d9fdb46SRobert Mustacchi
2831*4d9fdb46SRobert Mustacchiint dwarf_weak_cu_offset(Dwarf_Weak /*weak*/,
2832*4d9fdb46SRobert Mustacchi    Dwarf_Off*       /*return_offset*/,
2833*4d9fdb46SRobert Mustacchi    Dwarf_Error*     /*error*/);
2834*4d9fdb46SRobert Mustacchi
2835*4d9fdb46SRobert Mustacchiint dwarf_weak_name_offsets(Dwarf_Weak    /*weak*/,
2836*4d9fdb46SRobert Mustacchi    char   **        /*returned_name*/,
2837*4d9fdb46SRobert Mustacchi    Dwarf_Off*       /*die_offset*/,
2838*4d9fdb46SRobert Mustacchi    Dwarf_Off*       /*cu_offset*/,
2839*4d9fdb46SRobert Mustacchi    Dwarf_Error*     /*error*/);
2840*4d9fdb46SRobert Mustacchi
2841*4d9fdb46SRobert Mustacchi/* location list section operation.  (.debug_loc access) */
2842*4d9fdb46SRobert Mustacchiint dwarf_get_loclist_entry(Dwarf_Debug /*dbg*/,
2843*4d9fdb46SRobert Mustacchi    Dwarf_Unsigned   /*offset*/,
2844*4d9fdb46SRobert Mustacchi    Dwarf_Addr*      /*hipc*/,
2845*4d9fdb46SRobert Mustacchi    Dwarf_Addr*      /*lopc*/,
2846*4d9fdb46SRobert Mustacchi    Dwarf_Ptr*       /*data*/,
2847*4d9fdb46SRobert Mustacchi    Dwarf_Unsigned*  /*entry_len*/,
2848*4d9fdb46SRobert Mustacchi    Dwarf_Unsigned*  /*next_entry*/,
2849*4d9fdb46SRobert Mustacchi    Dwarf_Error*     /*error*/);
2850*4d9fdb46SRobert Mustacchi
2851*4d9fdb46SRobert Mustacchi/* abbreviation section operations */
2852*4d9fdb46SRobert Mustacchiint dwarf_get_abbrev(Dwarf_Debug /*dbg*/,
2853*4d9fdb46SRobert Mustacchi    Dwarf_Unsigned   /*offset*/,
2854*4d9fdb46SRobert Mustacchi    Dwarf_Abbrev  *  /*returned_abbrev*/,
2855*4d9fdb46SRobert Mustacchi    Dwarf_Unsigned*  /*length*/,
2856*4d9fdb46SRobert Mustacchi    Dwarf_Unsigned*  /*attr_count*/,
2857*4d9fdb46SRobert Mustacchi    Dwarf_Error*     /*error*/);
2858*4d9fdb46SRobert Mustacchi
2859*4d9fdb46SRobert Mustacchiint dwarf_get_abbrev_tag(Dwarf_Abbrev /*abbrev*/,
2860*4d9fdb46SRobert Mustacchi    Dwarf_Half*      /*return_tag_number*/,
2861*4d9fdb46SRobert Mustacchi    Dwarf_Error*     /*error*/);
2862*4d9fdb46SRobert Mustacchiint dwarf_get_abbrev_code(Dwarf_Abbrev /*abbrev*/,
2863*4d9fdb46SRobert Mustacchi    Dwarf_Unsigned*  /*return_code_number*/,
2864*4d9fdb46SRobert Mustacchi    Dwarf_Error*     /*error*/);
2865*4d9fdb46SRobert Mustacchi
2866*4d9fdb46SRobert Mustacchi/* See comments in dwarf_abbrev.c. Not an entirely safe function. */
2867*4d9fdb46SRobert Mustacchiint dwarf_get_abbrev_count(Dwarf_Debug /*dbg*/);
2868*4d9fdb46SRobert Mustacchi
2869*4d9fdb46SRobert Mustacchiint dwarf_get_abbrev_children_flag(Dwarf_Abbrev /*abbrev*/,
2870*4d9fdb46SRobert Mustacchi    Dwarf_Signed*    /*return_flag*/,
2871*4d9fdb46SRobert Mustacchi    Dwarf_Error*     /*error*/);
2872*4d9fdb46SRobert 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 Mustacchiint dwarf_get_abbrev_entry_b(Dwarf_Abbrev abbrev,
2880*4d9fdb46SRobert Mustacchi    Dwarf_Unsigned indx,
2881*4d9fdb46SRobert Mustacchi    Dwarf_Bool     filter_outliers,
2882*4d9fdb46SRobert Mustacchi    Dwarf_Unsigned * returned_attr_num,
2883*4d9fdb46SRobert Mustacchi    Dwarf_Unsigned * returned_form,
2884*4d9fdb46SRobert Mustacchi    Dwarf_Signed   * returned_implict_const,
2885*4d9fdb46SRobert Mustacchi    Dwarf_Off      * offset,
2886*4d9fdb46SRobert Mustacchi    Dwarf_Error    * error);
2887*4d9fdb46SRobert Mustacchi
2888*4d9fdb46SRobert Mustacchi/*  Obsolete because it cannot return the
2889*4d9fdb46SRobert Mustacchi    DW_FORM_implicit_const value. */
2890*4d9fdb46SRobert Mustacchiint dwarf_get_abbrev_entry(Dwarf_Abbrev /*abbrev*/,
2891*4d9fdb46SRobert Mustacchi    Dwarf_Signed     /*index*/,
2892*4d9fdb46SRobert Mustacchi    Dwarf_Half  *    /*returned_attr_num*/,
2893*4d9fdb46SRobert Mustacchi    Dwarf_Signed*    /*form*/,
2894*4d9fdb46SRobert Mustacchi    Dwarf_Off*       /*offset*/,
2895*4d9fdb46SRobert Mustacchi    Dwarf_Error*     /*error*/);
2896*4d9fdb46SRobert Mustacchi
2897*4d9fdb46SRobert Mustacchiint 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
2901*4d9fdb46SRobert Mustacchi/* consumer string section operation */
2902*4d9fdb46SRobert Mustacchiint dwarf_get_str(Dwarf_Debug /*dbg*/,
2903*4d9fdb46SRobert Mustacchi    Dwarf_Off        /*offset*/,
2904*4d9fdb46SRobert Mustacchi    char**           /*string*/,
2905*4d9fdb46SRobert Mustacchi    Dwarf_Signed *   /*strlen_of_string*/,
2906*4d9fdb46SRobert Mustacchi    Dwarf_Error*     /*error*/);
2907*4d9fdb46SRobert Mustacchi
2908*4d9fdb46SRobert Mustacchi/* New November 2015 */
2909*4d9fdb46SRobert Mustacchiint 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 Mustacchiint 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
2918*4d9fdb46SRobert Mustacchi/* Consumer op on  gnu .eh_frame info */
2919*4d9fdb46SRobert Mustacchiint dwarf_get_fde_list_eh(
2920*4d9fdb46SRobert Mustacchi    Dwarf_Debug      /*dbg*/,
2921*4d9fdb46SRobert Mustacchi    Dwarf_Cie**      /*cie_data*/,
2922*4d9fdb46SRobert Mustacchi    Dwarf_Signed*    /*cie_element_count*/,
2923*4d9fdb46SRobert Mustacchi    Dwarf_Fde**      /*fde_data*/,
2924*4d9fdb46SRobert Mustacchi    Dwarf_Signed*    /*fde_element_count*/,
2925*4d9fdb46SRobert Mustacchi    Dwarf_Error*     /*error*/);
2926*4d9fdb46SRobert Mustacchi
2927*4d9fdb46SRobert Mustacchi
2928*4d9fdb46SRobert Mustacchi/* consumer operations on frame info: .debug_frame */
2929*4d9fdb46SRobert Mustacchiint dwarf_get_fde_list(Dwarf_Debug /*dbg*/,
2930*4d9fdb46SRobert Mustacchi    Dwarf_Cie**      /*cie_data*/,
2931*4d9fdb46SRobert Mustacchi    Dwarf_Signed*    /*cie_element_count*/,
2932*4d9fdb46SRobert Mustacchi    Dwarf_Fde**      /*fde_data*/,
2933*4d9fdb46SRobert Mustacchi    Dwarf_Signed*    /*fde_element_count*/,
2934*4d9fdb46SRobert Mustacchi    Dwarf_Error*     /*error*/);
2935*4d9fdb46SRobert Mustacchi
2936*4d9fdb46SRobert Mustacchi/* Release storage gotten by dwarf_get_fde_list_eh() or
2937*4d9fdb46SRobert Mustacchi   dwarf_get_fde_list() */
2938*4d9fdb46SRobert Mustacchivoid dwarf_fde_cie_list_dealloc(Dwarf_Debug /*dbg*/,
2939*4d9fdb46SRobert Mustacchi    Dwarf_Cie *  /*cie_data*/,
2940*4d9fdb46SRobert Mustacchi    Dwarf_Signed /*cie_element_count*/,
2941*4d9fdb46SRobert Mustacchi    Dwarf_Fde *  /*fde_data*/,
2942*4d9fdb46SRobert Mustacchi    Dwarf_Signed /*fde_element_count*/);
2943*4d9fdb46SRobert Mustacchi
2944*4d9fdb46SRobert Mustacchi
2945*4d9fdb46SRobert Mustacchi
2946*4d9fdb46SRobert Mustacchiint dwarf_get_fde_range(Dwarf_Fde /*fde*/,
2947*4d9fdb46SRobert Mustacchi    Dwarf_Addr*      /*low_pc*/,
2948*4d9fdb46SRobert Mustacchi    Dwarf_Unsigned*  /*func_length*/,
2949*4d9fdb46SRobert Mustacchi    Dwarf_Ptr*       /*fde_bytes*/,
2950*4d9fdb46SRobert Mustacchi    Dwarf_Unsigned*  /*fde_byte_length*/,
2951*4d9fdb46SRobert Mustacchi    Dwarf_Off*       /*cie_offset*/,
2952*4d9fdb46SRobert Mustacchi    Dwarf_Signed*    /*cie_index*/,
2953*4d9fdb46SRobert Mustacchi    Dwarf_Off*       /*fde_offset*/,
2954*4d9fdb46SRobert Mustacchi    Dwarf_Error*     /*error*/);
2955*4d9fdb46SRobert Mustacchi
2956*4d9fdb46SRobert Mustacchi/*  Useful for IRIX only:  see dwarf_get_cie_augmentation_data()
2957*4d9fdb46SRobert Mustacchi    dwarf_get_fde_augmentation_data() for GNU .eh_frame. */
2958*4d9fdb46SRobert Mustacchiint dwarf_get_fde_exception_info(Dwarf_Fde /*fde*/,
2959*4d9fdb46SRobert Mustacchi    Dwarf_Signed*    /* offset_into_exception_tables */,
2960*4d9fdb46SRobert Mustacchi    Dwarf_Error*     /*error*/);
2961*4d9fdb46SRobert Mustacchi
2962*4d9fdb46SRobert Mustacchi
2963*4d9fdb46SRobert Mustacchiint dwarf_get_cie_of_fde(Dwarf_Fde /*fde*/,
2964*4d9fdb46SRobert Mustacchi    Dwarf_Cie *      /*cie_returned*/,
2965*4d9fdb46SRobert Mustacchi    Dwarf_Error*     /*error*/);
2966*4d9fdb46SRobert Mustacchi
2967*4d9fdb46SRobert Mustacchiint 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*/);
2978*4d9fdb46SRobert Mustacchiint dwarf_get_cie_info(Dwarf_Cie /*cie*/,
2979*4d9fdb46SRobert Mustacchi    Dwarf_Unsigned * /*bytes_in_cie*/,
2980*4d9fdb46SRobert Mustacchi    Dwarf_Small*     /*version*/,
2981*4d9fdb46SRobert Mustacchi    char        **   /*augmenter*/,
2982*4d9fdb46SRobert Mustacchi    Dwarf_Unsigned*  /*code_alignment_factor*/,
2983*4d9fdb46SRobert Mustacchi    Dwarf_Signed*    /*data_alignment_factor*/,
2984*4d9fdb46SRobert Mustacchi    Dwarf_Half*      /*return_address_register_rule*/,
2985*4d9fdb46SRobert Mustacchi    Dwarf_Ptr*       /*initial_instructions*/,
2986*4d9fdb46SRobert Mustacchi    Dwarf_Unsigned*  /*initial_instructions_length*/,
2987*4d9fdb46SRobert Mustacchi    Dwarf_Error*     /*error*/);
2988*4d9fdb46SRobert Mustacchi
2989*4d9fdb46SRobert Mustacchi/* dwarf_get_cie_index new September 2009. */
2990*4d9fdb46SRobert Mustacchiint dwarf_get_cie_index(
2991*4d9fdb46SRobert Mustacchi    Dwarf_Cie /*cie*/,
2992*4d9fdb46SRobert Mustacchi    Dwarf_Signed* /*index*/,
2993*4d9fdb46SRobert Mustacchi    Dwarf_Error* /*error*/ );
2994*4d9fdb46SRobert Mustacchi
2995*4d9fdb46SRobert Mustacchi
2996*4d9fdb46SRobert Mustacchiint dwarf_get_fde_instr_bytes(Dwarf_Fde /*fde*/,
2997*4d9fdb46SRobert Mustacchi    Dwarf_Ptr *      /*outinstrs*/, Dwarf_Unsigned * /*outlen*/,
2998*4d9fdb46SRobert Mustacchi    Dwarf_Error *    /*error*/);
2999*4d9fdb46SRobert Mustacchi
3000*4d9fdb46SRobert Mustacchiint dwarf_get_fde_info_for_all_regs(Dwarf_Fde /*fde*/,
3001*4d9fdb46SRobert Mustacchi    Dwarf_Addr       /*pc_requested*/,
3002*4d9fdb46SRobert Mustacchi    Dwarf_Regtable*  /*reg_table*/,
3003*4d9fdb46SRobert Mustacchi    Dwarf_Addr*      /*row_pc*/,
3004*4d9fdb46SRobert Mustacchi    Dwarf_Error*     /*error*/);
3005*4d9fdb46SRobert Mustacchi
3006*4d9fdb46SRobert Mustacchiint dwarf_get_fde_info_for_all_regs3(Dwarf_Fde /*fde*/,
3007*4d9fdb46SRobert Mustacchi    Dwarf_Addr       /*pc_requested*/,
3008*4d9fdb46SRobert Mustacchi    Dwarf_Regtable3* /*reg_table*/,
3009*4d9fdb46SRobert Mustacchi    Dwarf_Addr*      /*row_pc*/,
3010*4d9fdb46SRobert Mustacchi    Dwarf_Error*     /*error*/);
3011*4d9fdb46SRobert Mustacchi
3012*4d9fdb46SRobert Mustacchi/* In this older interface DW_FRAME_CFA_COL is a meaningful
3013*4d9fdb46SRobert Mustacchi    column (which does not work well with DWARF3 or
3014*4d9fdb46SRobert Mustacchi    non-MIPS architectures). */
3015*4d9fdb46SRobert Mustacchiint dwarf_get_fde_info_for_reg(Dwarf_Fde /*fde*/,
3016*4d9fdb46SRobert Mustacchi    Dwarf_Half       /*table_column*/,
3017*4d9fdb46SRobert Mustacchi    Dwarf_Addr       /*pc_requested*/,
3018*4d9fdb46SRobert Mustacchi    Dwarf_Signed*    /*offset_relevant*/,
3019*4d9fdb46SRobert Mustacchi    Dwarf_Signed*    /*register*/,
3020*4d9fdb46SRobert Mustacchi    Dwarf_Signed*    /*offset*/,
3021*4d9fdb46SRobert Mustacchi    Dwarf_Addr*      /*row_pc*/,
3022*4d9fdb46SRobert Mustacchi    Dwarf_Error*     /*error*/);
3023*4d9fdb46SRobert Mustacchi
3024*4d9fdb46SRobert Mustacchi/* See discussion of dw_value_type, libdwarf.h.
3025*4d9fdb46SRobert Mustacchi   Use of DW_FRAME_CFA_COL is not meaningful in this interface.
3026*4d9fdb46SRobert Mustacchi   See dwarf_get_fde_info_for_cfa_reg3().
3027*4d9fdb46SRobert Mustacchi*/
3028*4d9fdb46SRobert Mustacchi/* dwarf_get_fde_info_for_reg3 is useful on a single column, but
3029*4d9fdb46SRobert Mustacchi   it is inefficient to iterate across all table_columns using this
3030*4d9fdb46SRobert Mustacchi   function.  Instead call dwarf_get_fde_info_for_all_regs3() and index
3031*4d9fdb46SRobert Mustacchi   into the table it fills in. */
3032*4d9fdb46SRobert Mustacchiint dwarf_get_fde_info_for_reg3(Dwarf_Fde /*fde*/,
3033*4d9fdb46SRobert Mustacchi    Dwarf_Half       /*table_column*/,
3034*4d9fdb46SRobert Mustacchi    Dwarf_Addr       /*pc_requested*/,
3035*4d9fdb46SRobert Mustacchi    Dwarf_Small  *   /*value_type*/,
3036*4d9fdb46SRobert Mustacchi    Dwarf_Signed *   /*offset_relevant*/,
3037*4d9fdb46SRobert Mustacchi    Dwarf_Signed *   /*register*/,
3038*4d9fdb46SRobert Mustacchi    Dwarf_Signed *   /*offset_or_block_len*/,
3039*4d9fdb46SRobert Mustacchi    Dwarf_Ptr    *   /*block_ptr */,
3040*4d9fdb46SRobert Mustacchi    Dwarf_Addr   *   /*row_pc_out*/,
3041*4d9fdb46SRobert Mustacchi    Dwarf_Error  *    /*error*/);
3042*4d9fdb46SRobert Mustacchi
3043*4d9fdb46SRobert Mustacchiint 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 Mustacchiint 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. */
3070*4d9fdb46SRobert Mustacchiint dwarf_get_fde_info_for_cfa_reg3(Dwarf_Fde /*fde*/,
3071*4d9fdb46SRobert Mustacchi    Dwarf_Addr       /*pc_requested*/,
3072*4d9fdb46SRobert Mustacchi    Dwarf_Small  *   /*value_type*/,
3073*4d9fdb46SRobert Mustacchi    Dwarf_Signed *   /*offset_relevant*/,
3074*4d9fdb46SRobert Mustacchi    Dwarf_Signed*    /*register*/,
3075*4d9fdb46SRobert Mustacchi    Dwarf_Signed*    /*offset_or_block_len*/,
3076*4d9fdb46SRobert Mustacchi    Dwarf_Ptr   *    /*block_ptr */,
3077*4d9fdb46SRobert Mustacchi    Dwarf_Addr*      /*row_pc_out*/,
3078*4d9fdb46SRobert Mustacchi    Dwarf_Error*     /*error*/);
3079*4d9fdb46SRobert Mustacchi
3080*4d9fdb46SRobert Mustacchiint dwarf_get_fde_for_die(Dwarf_Debug /*dbg*/,
3081*4d9fdb46SRobert Mustacchi    Dwarf_Die        /*subr_die */,
3082*4d9fdb46SRobert Mustacchi    Dwarf_Fde  *     /*returned_fde*/,
3083*4d9fdb46SRobert Mustacchi    Dwarf_Error*     /*error*/);
3084*4d9fdb46SRobert Mustacchi
3085*4d9fdb46SRobert Mustacchiint dwarf_get_fde_n(Dwarf_Fde* /*fde_data*/,
3086*4d9fdb46SRobert Mustacchi    Dwarf_Unsigned   /*fde_index*/,
3087*4d9fdb46SRobert Mustacchi    Dwarf_Fde  *     /*returned_fde*/,
3088*4d9fdb46SRobert Mustacchi    Dwarf_Error*     /*error*/);
3089*4d9fdb46SRobert Mustacchi
3090*4d9fdb46SRobert Mustacchiint dwarf_get_fde_at_pc(Dwarf_Fde* /*fde_data*/,
3091*4d9fdb46SRobert Mustacchi    Dwarf_Addr       /*pc_of_interest*/,
3092*4d9fdb46SRobert Mustacchi    Dwarf_Fde  *     /*returned_fde*/,
3093*4d9fdb46SRobert Mustacchi    Dwarf_Addr*      /*lopc*/,
3094*4d9fdb46SRobert Mustacchi    Dwarf_Addr*      /*hipc*/,
3095*4d9fdb46SRobert Mustacchi    Dwarf_Error*     /*error*/);
3096*4d9fdb46SRobert Mustacchi
3097*4d9fdb46SRobert Mustacchi/* GNU .eh_frame augmentation information, raw form, see
3098*4d9fdb46SRobert Mustacchi   Linux Standard Base Core Specification version 3.0 . */
3099*4d9fdb46SRobert Mustacchiint dwarf_get_cie_augmentation_data(Dwarf_Cie /* cie*/,
3100*4d9fdb46SRobert Mustacchi    Dwarf_Small **   /* augdata */,
3101*4d9fdb46SRobert Mustacchi    Dwarf_Unsigned * /* augdata_len */,
3102*4d9fdb46SRobert Mustacchi    Dwarf_Error*     /*error*/);
3103*4d9fdb46SRobert Mustacchi/* GNU .eh_frame augmentation information, raw form, see
3104*4d9fdb46SRobert Mustacchi   Linux Standard Base Core Specification version 3.0 . */
3105*4d9fdb46SRobert Mustacchiint dwarf_get_fde_augmentation_data(Dwarf_Fde /* fde*/,
3106*4d9fdb46SRobert Mustacchi    Dwarf_Small **   /* augdata */,
3107*4d9fdb46SRobert Mustacchi    Dwarf_Unsigned * /* augdata_len */,
3108*4d9fdb46SRobert Mustacchi    Dwarf_Error*     /*error*/);
3109*4d9fdb46SRobert Mustacchi
3110*4d9fdb46SRobert Mustacchiint dwarf_expand_frame_instructions(Dwarf_Cie /*cie*/,
3111*4d9fdb46SRobert Mustacchi    Dwarf_Ptr        /*instruction*/,
3112*4d9fdb46SRobert Mustacchi    Dwarf_Unsigned   /*i_length*/,
3113*4d9fdb46SRobert Mustacchi    Dwarf_Frame_Op** /*returned_op_list*/,
3114*4d9fdb46SRobert Mustacchi    Dwarf_Signed*    /*op_count*/,
3115*4d9fdb46SRobert Mustacchi    Dwarf_Error*     /*error*/);
3116*4d9fdb46SRobert Mustacchi
3117*4d9fdb46SRobert Mustacchi/* Operations on .debug_aranges. */
3118*4d9fdb46SRobert Mustacchiint dwarf_get_aranges(Dwarf_Debug /*dbg*/,
3119*4d9fdb46SRobert Mustacchi    Dwarf_Arange**   /*aranges*/,
3120*4d9fdb46SRobert Mustacchi    Dwarf_Signed *   /*arange_count*/,
3121*4d9fdb46SRobert Mustacchi    Dwarf_Error*     /*error*/);
3122*4d9fdb46SRobert Mustacchi
3123*4d9fdb46SRobert Mustacchiint 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 Mustacchiint 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
3131*4d9fdb46SRobert Mustacchi
3132*4d9fdb46SRobert Mustacchi
3133*4d9fdb46SRobert Mustacchiint dwarf_get_arange(
3134*4d9fdb46SRobert Mustacchi    Dwarf_Arange*    /*aranges*/,
3135*4d9fdb46SRobert Mustacchi    Dwarf_Unsigned   /*arange_count*/,
3136*4d9fdb46SRobert Mustacchi    Dwarf_Addr       /*address*/,
3137*4d9fdb46SRobert Mustacchi    Dwarf_Arange *   /*returned_arange*/,
3138*4d9fdb46SRobert Mustacchi    Dwarf_Error*     /*error*/);
3139*4d9fdb46SRobert Mustacchi
3140*4d9fdb46SRobert Mustacchiint dwarf_get_cu_die_offset(
3141*4d9fdb46SRobert Mustacchi    Dwarf_Arange     /*arange*/,
3142*4d9fdb46SRobert Mustacchi    Dwarf_Off*       /*return_offset*/,
3143*4d9fdb46SRobert Mustacchi    Dwarf_Error*     /*error*/);
3144*4d9fdb46SRobert Mustacchi
3145*4d9fdb46SRobert Mustacchiint dwarf_get_arange_cu_header_offset(
3146*4d9fdb46SRobert Mustacchi    Dwarf_Arange     /*arange*/,
3147*4d9fdb46SRobert Mustacchi    Dwarf_Off*       /*return_cu_header_offset*/,
3148*4d9fdb46SRobert Mustacchi    Dwarf_Error*     /*error*/);
3149*4d9fdb46SRobert Mustacchi#ifdef __sgi /* pragma is sgi MIPS only */
3150*4d9fdb46SRobert Mustacchi#pragma optional dwarf_get_arange_cu_header_offset
3151*4d9fdb46SRobert Mustacchi#endif
3152*4d9fdb46SRobert Mustacchi
3153*4d9fdb46SRobert Mustacchi/* DWARF2,3 interface. No longer really adequate (it was never
3154*4d9fdb46SRobert Mustacchi   right for segmented address spaces, please switch
3155*4d9fdb46SRobert Mustacchi   to using dwarf_get_arange_info_b instead.
3156*4d9fdb46SRobert Mustacchi   There is no effective difference between these
3157*4d9fdb46SRobert Mustacchi   functions  if the address space
3158*4d9fdb46SRobert Mustacchi   of the target is not segmented.  */
3159*4d9fdb46SRobert Mustacchiint dwarf_get_arange_info(
3160*4d9fdb46SRobert Mustacchi    Dwarf_Arange     /*arange*/,
3161*4d9fdb46SRobert Mustacchi    Dwarf_Addr*      /*start*/,
3162*4d9fdb46SRobert Mustacchi    Dwarf_Unsigned*  /*length*/,
3163*4d9fdb46SRobert Mustacchi    Dwarf_Off*       /*cu_die_offset*/,
3164*4d9fdb46SRobert Mustacchi    Dwarf_Error*     /*error*/ );
3165*4d9fdb46SRobert Mustacchi
3166*4d9fdb46SRobert Mustacchi/* New for DWARF4, entries may have segment information.
3167*4d9fdb46SRobert Mustacchi   *segment is only meaningful if *segment_entry_size is non-zero. */
3168*4d9fdb46SRobert Mustacchiint dwarf_get_arange_info_b(
3169*4d9fdb46SRobert Mustacchi    Dwarf_Arange     /*arange*/,
3170*4d9fdb46SRobert Mustacchi    Dwarf_Unsigned*  /*segment*/,
3171*4d9fdb46SRobert Mustacchi    Dwarf_Unsigned*  /*segment_entry_size*/,
3172*4d9fdb46SRobert Mustacchi    Dwarf_Addr    *  /*start*/,
3173*4d9fdb46SRobert Mustacchi    Dwarf_Unsigned*  /*length*/,
3174*4d9fdb46SRobert Mustacchi    Dwarf_Off     *  /*cu_die_offset*/,
3175*4d9fdb46SRobert Mustacchi    Dwarf_Error   *  /*error*/ );
3176*4d9fdb46SRobert Mustacchi
3177*4d9fdb46SRobert Mustacchi/*  BEGIN: DWARF5 .debug_macro  interfaces
3178*4d9fdb46SRobert Mustacchi    NEW November 2015.  */
3179*4d9fdb46SRobert Mustacchiint 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 Mustacchiint 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 Mustacchivoid dwarf_dealloc_macro_context(Dwarf_Macro_Context /*mc*/);
3199*4d9fdb46SRobert Mustacchiint 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 Mustacchiint 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 Mustacchiint 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 Mustacchiint 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 Mustacchiint 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 Mustacchiint 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 Mustacchiint 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. */
3259*4d9fdb46SRobert Mustacchi
3260*4d9fdb46SRobert Mustacchi/* consumer .debug_macinfo information interface.
3261*4d9fdb46SRobert Mustacchi*/
3262*4d9fdb46SRobert Mustacchistruct Dwarf_Macro_Details_s {
3263*4d9fdb46SRobert Mustacchi    Dwarf_Off    dmd_offset; /* offset, in the section,
3264*4d9fdb46SRobert Mustacchi        of this macro info */
3265*4d9fdb46SRobert Mustacchi    Dwarf_Small  dmd_type;   /* the type, DW_MACINFO_define etc*/
3266*4d9fdb46SRobert 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 */
3269*4d9fdb46SRobert Mustacchi
3270*4d9fdb46SRobert Mustacchi    Dwarf_Signed dmd_fileindex;/* the source file index:
3271*4d9fdb46SRobert Mustacchi        applies to define undef start_file */
3272*4d9fdb46SRobert Mustacchi    char *       dmd_macro;  /* macro name (with value for defineop)
3273*4d9fdb46SRobert Mustacchi        string from vendor ext */
3274*4d9fdb46SRobert Mustacchi};
3275*4d9fdb46SRobert Mustacchi
3276*4d9fdb46SRobert Mustacchi/*  dwarf_print_lines is for use by dwarfdump: it prints
3277*4d9fdb46SRobert Mustacchi    line info to stdout.
3278*4d9fdb46SRobert Mustacchi    The _dwarf name is obsolete. Use dwarf_ instead.
3279*4d9fdb46SRobert Mustacchi    Added extra argnument 2/2009 for better checking.
3280*4d9fdb46SRobert Mustacchi*/
3281*4d9fdb46SRobert Mustacchiint _dwarf_print_lines(Dwarf_Die /*cu_die*/,Dwarf_Error * /*error*/);
3282*4d9fdb46SRobert Mustacchiint dwarf_print_lines(Dwarf_Die /*cu_die*/,Dwarf_Error * /*error*/,
3283*4d9fdb46SRobert Mustacchi   int * /*error_count_out */);
3284*4d9fdb46SRobert 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 Mustacchitypedef void (* dwarf_printf_callback_function_type)
3300*4d9fdb46SRobert Mustacchi    (void * /*user_pointer*/, const char * /*linecontent*/);
3301*4d9fdb46SRobert Mustacchi
3302*4d9fdb46SRobert Mustacchistruct 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 Mustacchistruct  Dwarf_Printf_Callback_Info_s
3314*4d9fdb46SRobert Mustacchidwarf_register_printf_callback(Dwarf_Debug /*dbg*/,
3315*4d9fdb46SRobert Mustacchi    struct  Dwarf_Printf_Callback_Info_s * /*newvalues*/);
3316*4d9fdb46SRobert Mustacchi
3317*4d9fdb46SRobert Mustacchi
3318*4d9fdb46SRobert Mustacchi/*  dwarf_check_lineheader lets dwarfdump get detailed messages
3319*4d9fdb46SRobert Mustacchi    about some compiler errors we detect.
3320*4d9fdb46SRobert Mustacchi    We return the count of detected errors through the
3321*4d9fdb46SRobert Mustacchi    pointer.
3322*4d9fdb46SRobert Mustacchi
3323*4d9fdb46SRobert Mustacchi    Use dwarf_check_lineheader_b() (new 14 April 2020)
3324*4d9fdb46SRobert Mustacchi    in place of dwarf_check_lineheader().
3325*4d9fdb46SRobert Mustacchi*/
3326*4d9fdb46SRobert Mustacchiint dwarf_check_lineheader_b(Dwarf_Die /*cu_die*/,
3327*4d9fdb46SRobert Mustacchi    int */*errcount_out*/,
3328*4d9fdb46SRobert Mustacchi    Dwarf_Error * /*error*/);
3329*4d9fdb46SRobert Mustacchivoid dwarf_check_lineheader(Dwarf_Die /*cu_die*/,
3330*4d9fdb46SRobert Mustacchi    int * /*errcount_out*/);
3331*4d9fdb46SRobert Mustacchi
3332*4d9fdb46SRobert Mustacchi/*  dwarf_ld_sort_lines helps SGI IRIX ld
3333*4d9fdb46SRobert Mustacchi    rearrange lines in .debug_line in a .o created with a text
3334*4d9fdb46SRobert Mustacchi    section per function.
3335*4d9fdb46SRobert Mustacchi        -OPT:procedure_reorder=ON
3336*4d9fdb46SRobert Mustacchi    where ld-cord (cord(1)ing by ld,
3337*4d9fdb46SRobert Mustacchi    not by cord(1)) may have changed the function order.
3338*4d9fdb46SRobert Mustacchi    The _dwarf name is obsolete. Use dwarf_ instead.
3339*4d9fdb46SRobert Mustacchi*/
3340*4d9fdb46SRobert Mustacchiint _dwarf_ld_sort_lines(
3341*4d9fdb46SRobert Mustacchi    void *         /*orig_buffer*/,
3342*4d9fdb46SRobert Mustacchi    unsigned long  /* buffer_len*/,
3343*4d9fdb46SRobert Mustacchi    int            /*is_64_bit*/,
3344*4d9fdb46SRobert Mustacchi    int *          /*any_change*/,
3345*4d9fdb46SRobert Mustacchi    int *          /*err_code*/);
3346*4d9fdb46SRobert Mustacchiint dwarf_ld_sort_lines(
3347*4d9fdb46SRobert Mustacchi    void *         /*orig_buffer*/,
3348*4d9fdb46SRobert Mustacchi    unsigned long  /*buffer_len*/,
3349*4d9fdb46SRobert Mustacchi    int            /*is_64_bit*/,
3350*4d9fdb46SRobert Mustacchi    int *          /*any_change*/,
3351*4d9fdb46SRobert Mustacchi    int *          /*err_code*/);
3352*4d9fdb46SRobert Mustacchi
3353*4d9fdb46SRobert Mustacchi/* Used by dwarfdump -v to print fde offsets from debugging
3354*4d9fdb46SRobert Mustacchi   info.
3355*4d9fdb46SRobert Mustacchi   The _dwarf name is obsolete. Use dwarf_ instead.
3356*4d9fdb46SRobert Mustacchi*/
3357*4d9fdb46SRobert Mustacchiint _dwarf_fde_section_offset(Dwarf_Debug /*dbg*/,
3358*4d9fdb46SRobert Mustacchi    Dwarf_Fde         /*in_fde*/,
3359*4d9fdb46SRobert Mustacchi    Dwarf_Off *       /*fde_off*/,
3360*4d9fdb46SRobert Mustacchi    Dwarf_Off *       /*cie_off*/,
3361*4d9fdb46SRobert Mustacchi    Dwarf_Error *     /*err*/);
3362*4d9fdb46SRobert Mustacchi
3363*4d9fdb46SRobert Mustacchiint dwarf_fde_section_offset(Dwarf_Debug /*dbg*/,
3364*4d9fdb46SRobert Mustacchi    Dwarf_Fde         /*in_fde*/,
3365*4d9fdb46SRobert Mustacchi    Dwarf_Off *       /*fde_off*/,
3366*4d9fdb46SRobert Mustacchi    Dwarf_Off *       /*cie_off*/,
3367*4d9fdb46SRobert Mustacchi    Dwarf_Error *     /*err*/);
3368*4d9fdb46SRobert Mustacchi
3369*4d9fdb46SRobert Mustacchi/* Used by dwarfdump -v to print cie offsets from debugging
3370*4d9fdb46SRobert Mustacchi   info.
3371*4d9fdb46SRobert Mustacchi   The _dwarf name is obsolete. Use dwarf_ instead.
3372*4d9fdb46SRobert Mustacchi*/
3373*4d9fdb46SRobert Mustacchiint dwarf_cie_section_offset(Dwarf_Debug /*dbg*/,
3374*4d9fdb46SRobert Mustacchi    Dwarf_Cie     /*in_cie*/,
3375*4d9fdb46SRobert Mustacchi    Dwarf_Off *   /*cie_off */,
3376*4d9fdb46SRobert Mustacchi    Dwarf_Error * /*err*/);
3377*4d9fdb46SRobert Mustacchiint _dwarf_cie_section_offset(Dwarf_Debug /*dbg*/,
3378*4d9fdb46SRobert Mustacchi    Dwarf_Cie     /*in_cie*/,
3379*4d9fdb46SRobert Mustacchi    Dwarf_Off *   /*cie_off*/,
3380*4d9fdb46SRobert Mustacchi    Dwarf_Error * /*err*/);
3381*4d9fdb46SRobert Mustacchi
3382*4d9fdb46SRobert Mustacchitypedef struct Dwarf_Macro_Details_s Dwarf_Macro_Details;
3383*4d9fdb46SRobert Mustacchi
3384*4d9fdb46SRobert Mustacchichar *dwarf_find_macro_value_start(char * /*macro_string*/);
3385*4d9fdb46SRobert Mustacchi
3386*4d9fdb46SRobert Mustacchiint dwarf_get_macro_details(Dwarf_Debug /*dbg*/,
3387*4d9fdb46SRobert Mustacchi    Dwarf_Off            /*macro_offset*/,
3388*4d9fdb46SRobert Mustacchi    Dwarf_Unsigned       /*maximum_count*/,
3389*4d9fdb46SRobert Mustacchi    Dwarf_Signed         * /*entry_count*/,
3390*4d9fdb46SRobert Mustacchi    Dwarf_Macro_Details ** /*details*/,
3391*4d9fdb46SRobert Mustacchi    Dwarf_Error *        /*err*/);
3392*4d9fdb46SRobert Mustacchi
3393*4d9fdb46SRobert Mustacchi
3394*4d9fdb46SRobert Mustacchi/*  dwarf_get_offset_size() New October 2015 */
3395*4d9fdb46SRobert Mustacchiint dwarf_get_offset_size(Dwarf_Debug /*dbg*/,
3396*4d9fdb46SRobert Mustacchi    Dwarf_Half  *    /*offset_size*/,
3397*4d9fdb46SRobert Mustacchi    Dwarf_Error *    /*error*/);
3398*4d9fdb46SRobert Mustacchiint dwarf_get_address_size(Dwarf_Debug /*dbg*/,
3399*4d9fdb46SRobert Mustacchi    Dwarf_Half  *    /*addr_size*/,
3400*4d9fdb46SRobert Mustacchi    Dwarf_Error *    /*error*/);
3401*4d9fdb46SRobert Mustacchiint dwarf_get_die_address_size(Dwarf_Die /*die*/,
3402*4d9fdb46SRobert Mustacchi    Dwarf_Half  *    /*addr_size*/,
3403*4d9fdb46SRobert Mustacchi    Dwarf_Error *    /*error*/);
3404*4d9fdb46SRobert Mustacchi
3405*4d9fdb46SRobert Mustacchienum Dwarf_Form_Class dwarf_get_form_class(
3406*4d9fdb46SRobert Mustacchi    Dwarf_Half /* dwversion */,
3407*4d9fdb46SRobert Mustacchi    Dwarf_Half /* attrnum */,
3408*4d9fdb46SRobert Mustacchi    Dwarf_Half /*offset_size */,
3409*4d9fdb46SRobert Mustacchi    Dwarf_Half /*form*/);
3410*4d9fdb46SRobert Mustacchi
3411*4d9fdb46SRobert 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 Mustacchiint 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 Mustacchiint 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 Mustacchiint 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 Mustacchiint 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 Mustacchiint 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 Mustacchiint 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 Mustacchiint 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 Mustacchiint 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 Mustacchiint 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 Mustacchiint 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 Mustacchiint 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 Mustacchiint 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 Mustacchiint 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 Mustacchivoid 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 Mustacchiint 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 Mustacchiint 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 Mustacchiint 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 Mustacchiint 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 Mustacchiint 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 Mustacchivoid 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 Mustacchistruct 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 Mustacchitypedef 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 Mustacchiint 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 Mustacchiint 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 MustacchiDwarf_Unsigned dwarf_errno(Dwarf_Error     /*error*/);
3635*4d9fdb46SRobert Mustacchichar* dwarf_errmsg(Dwarf_Error    /*error*/);
3636*4d9fdb46SRobert Mustacchichar* dwarf_errmsg_by_number(Dwarf_Unsigned /* errornum */);
3637*4d9fdb46SRobert Mustacchivoid  dwarf_error_creation(Dwarf_Debug /*dbg*/ ,
3638*4d9fdb46SRobert Mustacchi    Dwarf_Error * /*error*/, char * /*errmsg*/);
3639*4d9fdb46SRobert Mustacchi
3640*4d9fdb46SRobert Mustacchi
3641*4d9fdb46SRobert Mustacchi/*  stringcheck zero is default and means do all
3642*4d9fdb46SRobert Mustacchi    string length validity checks.
3643*4d9fdb46SRobert Mustacchi    Call with parameter value 1 to turn off many such checks (and
3644*4d9fdb46SRobert Mustacchi    increase performance).
3645*4d9fdb46SRobert Mustacchi    Call with zero for safest running.
3646*4d9fdb46SRobert Mustacchi    Actual value saved and returned is only 8 bits! Upper bits
3647*4d9fdb46SRobert Mustacchi    ignored by libdwarf (and zero on return).
3648*4d9fdb46SRobert Mustacchi    Returns previous value.  */
3649*4d9fdb46SRobert Mustacchiint dwarf_set_stringcheck(int /*stringcheck*/);
3650*4d9fdb46SRobert Mustacchi
3651*4d9fdb46SRobert Mustacchi/*  'apply' defaults to 1 and means do all
3652*4d9fdb46SRobert Mustacchi    'rela' relocations on reading in a dwarf object section with
3653*4d9fdb46SRobert Mustacchi    such relocations.
3654*4d9fdb46SRobert Mustacchi    Call with parameter value 0 to turn off application of
3655*4d9fdb46SRobert Mustacchi    such relocations.
3656*4d9fdb46SRobert Mustacchi    Since the static linker leaves 'bogus' data in object sections
3657*4d9fdb46SRobert Mustacchi    with a 'rela' relocation section such data cannot be read
3658*4d9fdb46SRobert Mustacchi    sensibly without processing the relocations.  Such relocations
3659*4d9fdb46SRobert Mustacchi    do not exist in executables and shared objects (.so), the
3660*4d9fdb46SRobert Mustacchi    relocations only exist in plain .o relocatable object files.
3661*4d9fdb46SRobert Mustacchi    Actual value saved and returned is only 8 bits! Upper bits
3662*4d9fdb46SRobert Mustacchi    ignored by libdwarf (and zero on return).
3663*4d9fdb46SRobert Mustacchi    Returns previous value.  */
3664*4d9fdb46SRobert Mustacchiint dwarf_set_reloc_application(int /*apply*/);
3665*4d9fdb46SRobert Mustacchi
3666*4d9fdb46SRobert Mustacchi/* Never Implemented */
3667*4d9fdb46SRobert MustacchiDwarf_Handler dwarf_seterrhand(Dwarf_Debug /*dbg*/,
3668*4d9fdb46SRobert Mustacchi    Dwarf_Handler /*errhand*/);
3669*4d9fdb46SRobert Mustacchi
3670*4d9fdb46SRobert Mustacchi/* Unimplemented */
3671*4d9fdb46SRobert MustacchiDwarf_Ptr dwarf_seterrarg(Dwarf_Debug /*dbg*/, Dwarf_Ptr /*errarg*/);
3672*4d9fdb46SRobert Mustacchi
3673*4d9fdb46SRobert Mustacchivoid dwarf_dealloc(Dwarf_Debug /*dbg*/, void* /*space*/,
3674*4d9fdb46SRobert 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 Mustacchivoid dwarf_dealloc_error(Dwarf_Debug /*dbg*/, Dwarf_Error /*err*/);
3679*4d9fdb46SRobert Mustacchivoid dwarf_dealloc_die( Dwarf_Die /*die*/);
3680*4d9fdb46SRobert Mustacchivoid dwarf_dealloc_attribute(Dwarf_Attribute /*attr*/);
3681*4d9fdb46SRobert Mustacchi
3682*4d9fdb46SRobert Mustacchi
3683*4d9fdb46SRobert Mustacchi/* DWARF Producer Interface */
3684*4d9fdb46SRobert Mustacchi
3685*4d9fdb46SRobert Mustacchi/*  New form June, 2011. Adds user_data argument. */
3686*4d9fdb46SRobert Mustacchitypedef int (*Dwarf_Callback_Func)(
3687*4d9fdb46SRobert Mustacchi    const char*     /*name*/,
3688*4d9fdb46SRobert Mustacchi    int             /*size*/,
3689*4d9fdb46SRobert Mustacchi    Dwarf_Unsigned  /*type*/,
3690*4d9fdb46SRobert Mustacchi    Dwarf_Unsigned  /*flags*/,
3691*4d9fdb46SRobert Mustacchi    Dwarf_Unsigned  /*link*/,
3692*4d9fdb46SRobert Mustacchi    Dwarf_Unsigned  /*info*/,
3693*4d9fdb46SRobert Mustacchi    Dwarf_Unsigned* /*sect_name_index*/,
3694*4d9fdb46SRobert Mustacchi    void *          /*user_data*/,
3695*4d9fdb46SRobert Mustacchi    int*            /*error*/);
3696*4d9fdb46SRobert 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 Mustacchiint dwarf_producer_init(
3701*4d9fdb46SRobert Mustacchi    Dwarf_Unsigned        /*flags*/,
3702*4d9fdb46SRobert Mustacchi    Dwarf_Callback_Func   /*func*/,
3703*4d9fdb46SRobert Mustacchi    Dwarf_Handler         /*errhand*/,
3704*4d9fdb46SRobert 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 */
3710*4d9fdb46SRobert Mustacchi    Dwarf_Error *         /*error*/);
3711*4d9fdb46SRobert 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 Mustacchiint dwarf_pro_set_default_string_form(Dwarf_P_Debug /*dbg*/,
3716*4d9fdb46SRobert Mustacchi    int /*desired_form*/,
3717*4d9fdb46SRobert Mustacchi    Dwarf_Error*     /*error*/);
3718*4d9fdb46SRobert Mustacchi
3719*4d9fdb46SRobert Mustacchi/*  the old interface. Still supported. */
3720*4d9fdb46SRobert MustacchiDwarf_Signed dwarf_transform_to_disk_form(Dwarf_P_Debug /*dbg*/,
3721*4d9fdb46SRobert Mustacchi    Dwarf_Error*     /*error*/);
3722*4d9fdb46SRobert Mustacchi/*  New September 2016. The preferred interface. */
3723*4d9fdb46SRobert Mustacchiint dwarf_transform_to_disk_form_a(Dwarf_P_Debug /*dbg*/,
3724*4d9fdb46SRobert Mustacchi    Dwarf_Signed *   /*nbufs_out*/,
3725*4d9fdb46SRobert Mustacchi    Dwarf_Error*     /*error*/);
3726*4d9fdb46SRobert Mustacchi
3727*4d9fdb46SRobert Mustacchi/* New September 2016. Preferred. */
3728*4d9fdb46SRobert Mustacchiint 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. */
3736*4d9fdb46SRobert MustacchiDwarf_Ptr dwarf_get_section_bytes(Dwarf_P_Debug /*dbg*/,
3737*4d9fdb46SRobert Mustacchi    Dwarf_Signed     /*dwarf_section*/,
3738*4d9fdb46SRobert Mustacchi    Dwarf_Signed*    /*elf_section_index*/,
3739*4d9fdb46SRobert Mustacchi    Dwarf_Unsigned*  /*length*/,
3740*4d9fdb46SRobert Mustacchi    Dwarf_Error*     /*error*/);
3741*4d9fdb46SRobert Mustacchi
3742*4d9fdb46SRobert Mustacchiint  dwarf_get_relocation_info_count(
3743*4d9fdb46SRobert Mustacchi    Dwarf_P_Debug    /*dbg*/,
3744*4d9fdb46SRobert Mustacchi    Dwarf_Unsigned * /*count_of_relocation_sections*/,
3745*4d9fdb46SRobert Mustacchi    int *                /*drd_buffer_version*/,
3746*4d9fdb46SRobert Mustacchi    Dwarf_Error*     /*error*/);
3747*4d9fdb46SRobert Mustacchi
3748*4d9fdb46SRobert Mustacchiint dwarf_get_relocation_info(
3749*4d9fdb46SRobert Mustacchi    Dwarf_P_Debug           /*dbg*/,
3750*4d9fdb46SRobert Mustacchi    Dwarf_Signed          * /*elf_section_index*/,
3751*4d9fdb46SRobert Mustacchi    Dwarf_Signed          * /*elf_section_index_link*/,
3752*4d9fdb46SRobert Mustacchi    Dwarf_Unsigned        * /*relocation_buffer_count*/,
3753*4d9fdb46SRobert Mustacchi    Dwarf_Relocation_Data * /*reldata_buffer*/,
3754*4d9fdb46SRobert Mustacchi    Dwarf_Error*            /*error*/);
3755*4d9fdb46SRobert Mustacchi
3756*4d9fdb46SRobert Mustacchi/* v1:  no drd_length field, enum explicit */
3757*4d9fdb46SRobert Mustacchi/* v2:  has the drd_length field, enum value in uchar member */
3758*4d9fdb46SRobert Mustacchi#define DWARF_DRD_BUFFER_VERSION 2
3759*4d9fdb46SRobert Mustacchi
3760*4d9fdb46SRobert Mustacchi/* Markers are not written  to DWARF2/3/4, they are user
3761*4d9fdb46SRobert Mustacchi   defined and may be used for any purpose.
3762*4d9fdb46SRobert Mustacchi*/
3763*4d9fdb46SRobert MustacchiDwarf_Signed dwarf_get_die_markers(
3764*4d9fdb46SRobert Mustacchi    Dwarf_P_Debug     /*dbg*/,
3765*4d9fdb46SRobert Mustacchi    Dwarf_P_Marker *  /*marker_list*/,
3766*4d9fdb46SRobert Mustacchi    Dwarf_Unsigned *  /*marker_count*/,
3767*4d9fdb46SRobert Mustacchi    Dwarf_Error *     /*error*/);
3768*4d9fdb46SRobert Mustacchi
3769*4d9fdb46SRobert Mustacchi/* Preferred version December 2018. */
3770*4d9fdb46SRobert Mustacchiint 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
3776*4d9fdb46SRobert Mustacchiint dwarf_get_string_attributes_count(Dwarf_P_Debug,
3777*4d9fdb46SRobert Mustacchi    Dwarf_Unsigned *,
3778*4d9fdb46SRobert Mustacchi    int *,
3779*4d9fdb46SRobert Mustacchi    Dwarf_Error *);
3780*4d9fdb46SRobert Mustacchi
3781*4d9fdb46SRobert Mustacchiint dwarf_get_string_attributes_info(Dwarf_P_Debug,
3782*4d9fdb46SRobert Mustacchi    Dwarf_Signed *,
3783*4d9fdb46SRobert Mustacchi    Dwarf_Unsigned *,
3784*4d9fdb46SRobert Mustacchi    Dwarf_P_String_Attr *,
3785*4d9fdb46SRobert Mustacchi    Dwarf_Error *);
3786*4d9fdb46SRobert Mustacchi
3787*4d9fdb46SRobert Mustacchivoid dwarf_reset_section_bytes(Dwarf_P_Debug /*dbg*/);
3788*4d9fdb46SRobert Mustacchi
3789*4d9fdb46SRobert MustacchiDwarf_Unsigned dwarf_producer_finish(Dwarf_P_Debug /*dbg*/,
3790*4d9fdb46SRobert Mustacchi    Dwarf_Error* /*error*/);
3791*4d9fdb46SRobert Mustacchi
3792*4d9fdb46SRobert Mustacchi/*  Returns DW_DLV_OK or DW_DLV_ERROR */
3793*4d9fdb46SRobert Mustacchiint dwarf_producer_finish_a(Dwarf_P_Debug /*dbg*/,
3794*4d9fdb46SRobert Mustacchi    Dwarf_Error* /*error*/);
3795*4d9fdb46SRobert Mustacchi
3796*4d9fdb46SRobert Mustacchi/* Producer attribute addition functions. */
3797*4d9fdb46SRobert MustacchiDwarf_P_Attribute dwarf_add_AT_targ_address(Dwarf_P_Debug /*dbg*/,
3798*4d9fdb46SRobert Mustacchi    Dwarf_P_Die     /*ownerdie*/,
3799*4d9fdb46SRobert Mustacchi    Dwarf_Half      /*attr*/,
3800*4d9fdb46SRobert Mustacchi    Dwarf_Unsigned  /*pc_value*/,
3801*4d9fdb46SRobert Mustacchi    Dwarf_Signed    /*sym_index*/,
3802*4d9fdb46SRobert Mustacchi    Dwarf_Error*    /*error*/);
3803*4d9fdb46SRobert MustacchiDwarf_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 Mustacchiint 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 Mustacchiint dwarf_add_AT_block_a(Dwarf_P_Debug /*dbg*/,
3821*4d9fdb46SRobert Mustacchi    Dwarf_P_Die     /*ownerdie*/,
3822*4d9fdb46SRobert Mustacchi    Dwarf_Half      /*attr*/,
3823*4d9fdb46SRobert Mustacchi    Dwarf_Small*    /*block_data*/,
3824*4d9fdb46SRobert Mustacchi    Dwarf_Unsigned  /*block_len*/,
3825*4d9fdb46SRobert Mustacchi    Dwarf_P_Attribute * /*attr_out*/,
3826*4d9fdb46SRobert Mustacchi    Dwarf_Error*    /*error*/);
3827*4d9fdb46SRobert Mustacchi
3828*4d9fdb46SRobert MustacchiDwarf_P_Attribute dwarf_add_AT_block(Dwarf_P_Debug /*dbg*/,
3829*4d9fdb46SRobert Mustacchi    Dwarf_P_Die     /*ownerdie*/,
3830*4d9fdb46SRobert Mustacchi    Dwarf_Half      /*attr*/,
3831*4d9fdb46SRobert Mustacchi    Dwarf_Small*    /*block_data*/,
3832*4d9fdb46SRobert Mustacchi    Dwarf_Unsigned  /*block_len*/,
3833*4d9fdb46SRobert Mustacchi    Dwarf_Error*    /*error*/);
3834*4d9fdb46SRobert Mustacchi
3835*4d9fdb46SRobert MustacchiDwarf_P_Attribute dwarf_add_AT_ref_address(Dwarf_P_Debug /*dbg*/,
3836*4d9fdb46SRobert Mustacchi    Dwarf_P_Die     /*ownerdie*/,
3837*4d9fdb46SRobert Mustacchi    Dwarf_Half      /*attr*/,
3838*4d9fdb46SRobert Mustacchi    Dwarf_Unsigned  /*pc_value*/,
3839*4d9fdb46SRobert Mustacchi    Dwarf_Unsigned  /*sym_index*/,
3840*4d9fdb46SRobert Mustacchi    Dwarf_Error*    /*error*/);
3841*4d9fdb46SRobert Mustacchi
3842*4d9fdb46SRobert Mustacchi/*  New December 2018. Preferred version. */
3843*4d9fdb46SRobert Mustacchiint dwarf_add_AT_ref_address_a(Dwarf_P_Debug /*dbg*/,
3844*4d9fdb46SRobert Mustacchi    Dwarf_P_Die     /*ownerdie*/,
3845*4d9fdb46SRobert Mustacchi    Dwarf_Half      /*attr*/,
3846*4d9fdb46SRobert Mustacchi    Dwarf_Unsigned  /*pc_value*/,
3847*4d9fdb46SRobert Mustacchi    Dwarf_Unsigned  /*sym_index*/,
3848*4d9fdb46SRobert Mustacchi    Dwarf_P_Attribute * /*attr_out*/,
3849*4d9fdb46SRobert Mustacchi    Dwarf_Error*    /*error*/);
3850*4d9fdb46SRobert Mustacchi
3851*4d9fdb46SRobert MustacchiDwarf_P_Attribute dwarf_add_AT_unsigned_const(Dwarf_P_Debug /*dbg*/,
3852*4d9fdb46SRobert Mustacchi    Dwarf_P_Die     /*ownerdie*/,
3853*4d9fdb46SRobert Mustacchi    Dwarf_Half      /*attr*/,
3854*4d9fdb46SRobert Mustacchi    Dwarf_Unsigned  /*value*/,
3855*4d9fdb46SRobert Mustacchi    Dwarf_Error*    /*error*/);
3856*4d9fdb46SRobert Mustacchi
3857*4d9fdb46SRobert Mustacchi/*  New December 2018. Preferred version. */
3858*4d9fdb46SRobert Mustacchiint 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
3865*4d9fdb46SRobert MustacchiDwarf_P_Attribute dwarf_add_AT_signed_const(Dwarf_P_Debug /*dbg*/,
3866*4d9fdb46SRobert Mustacchi    Dwarf_P_Die     /*ownerdie*/,
3867*4d9fdb46SRobert Mustacchi    Dwarf_Half      /*attr*/,
3868*4d9fdb46SRobert Mustacchi    Dwarf_Signed    /*value*/,
3869*4d9fdb46SRobert Mustacchi    Dwarf_Error*    /*error*/);
3870*4d9fdb46SRobert Mustacchi
3871*4d9fdb46SRobert Mustacchi/*  New December 2018. Preferred version. */
3872*4d9fdb46SRobert Mustacchiint 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
3879*4d9fdb46SRobert MustacchiDwarf_P_Attribute dwarf_add_AT_reference(Dwarf_P_Debug /*dbg*/,
3880*4d9fdb46SRobert Mustacchi    Dwarf_P_Die     /*ownerdie*/,
3881*4d9fdb46SRobert Mustacchi    Dwarf_Half      /*attr*/,
3882*4d9fdb46SRobert Mustacchi    Dwarf_P_Die     /*otherdie*/,
3883*4d9fdb46SRobert Mustacchi    Dwarf_Error*    /*error*/);
3884*4d9fdb46SRobert 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 MustacchiDwarf_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 Mustacchiint 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 Mustacchiint 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
3917*4d9fdb46SRobert MustacchiDwarf_P_Attribute dwarf_add_AT_dataref(
3918*4d9fdb46SRobert Mustacchi    Dwarf_P_Debug   /*dbg*/,
3919*4d9fdb46SRobert Mustacchi    Dwarf_P_Die     /*ownerdie*/,
3920*4d9fdb46SRobert Mustacchi    Dwarf_Half      /*attr*/,
3921*4d9fdb46SRobert Mustacchi    Dwarf_Unsigned  /*pcvalue*/,
3922*4d9fdb46SRobert Mustacchi    Dwarf_Unsigned  /*sym_index*/,
3923*4d9fdb46SRobert Mustacchi    Dwarf_Error*    /*error*/);
3924*4d9fdb46SRobert Mustacchi
3925*4d9fdb46SRobert Mustacchi/*  New December 2018. Preferred version. */
3926*4d9fdb46SRobert Mustacchiint 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 MustacchiDwarf_P_Attribute dwarf_add_AT_const_value_string(
3936*4d9fdb46SRobert Mustacchi    Dwarf_P_Die /*ownerdie*/,
3937*4d9fdb46SRobert Mustacchi    char*           /*string_value*/,
3938*4d9fdb46SRobert Mustacchi    Dwarf_Error*    /*error*/);
3939*4d9fdb46SRobert Mustacchi
3940*4d9fdb46SRobert Mustacchi/*  New December 2018. Preferred version. */
3941*4d9fdb46SRobert Mustacchiint dwarf_add_AT_const_value_string_a(
3942*4d9fdb46SRobert Mustacchi    Dwarf_P_Die /*ownerdie*/,
3943*4d9fdb46SRobert Mustacchi    char*           /*string_value*/,
3944*4d9fdb46SRobert Mustacchi    Dwarf_P_Attribute * /*attr_out*/,
3945*4d9fdb46SRobert Mustacchi    Dwarf_Error*    /*error*/);
3946*4d9fdb46SRobert Mustacchi
3947*4d9fdb46SRobert MustacchiDwarf_P_Attribute dwarf_add_AT_location_expr(Dwarf_P_Debug /*dbg*/,
3948*4d9fdb46SRobert Mustacchi    Dwarf_P_Die     /*ownerdie*/,
3949*4d9fdb46SRobert Mustacchi    Dwarf_Half      /*attr*/,
3950*4d9fdb46SRobert Mustacchi    Dwarf_P_Expr    /*loc_expr*/,
3951*4d9fdb46SRobert Mustacchi    Dwarf_Error*    /*error*/);
3952*4d9fdb46SRobert Mustacchi
3953*4d9fdb46SRobert Mustacchi/*  New December 2018. Preferred version. */
3954*4d9fdb46SRobert Mustacchiint dwarf_add_AT_location_expr_a(Dwarf_P_Debug /*dbg*/,
3955*4d9fdb46SRobert Mustacchi    Dwarf_P_Die     /*ownerdie*/,
3956*4d9fdb46SRobert Mustacchi    Dwarf_Half      /*attr*/,
3957*4d9fdb46SRobert Mustacchi    Dwarf_P_Expr    /*loc_expr*/,
3958*4d9fdb46SRobert Mustacchi    Dwarf_P_Attribute * /*attr_out*/,
3959*4d9fdb46SRobert Mustacchi    Dwarf_Error*    /*error*/);
3960*4d9fdb46SRobert Mustacchi
3961*4d9fdb46SRobert MustacchiDwarf_P_Attribute dwarf_add_AT_string(Dwarf_P_Debug /*dbg*/,
3962*4d9fdb46SRobert Mustacchi    Dwarf_P_Die     /*ownerdie*/,
3963*4d9fdb46SRobert Mustacchi    Dwarf_Half      /*attr*/,
3964*4d9fdb46SRobert Mustacchi    char*           /*string*/,
3965*4d9fdb46SRobert Mustacchi    Dwarf_Error*     /*error*/);
3966*4d9fdb46SRobert Mustacchi
3967*4d9fdb46SRobert Mustacchi/*  Preferred as of December 2018. */
3968*4d9fdb46SRobert Mustacchiint 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
3975*4d9fdb46SRobert MustacchiDwarf_P_Attribute dwarf_add_AT_flag(Dwarf_P_Debug /*dbg*/,
3976*4d9fdb46SRobert Mustacchi    Dwarf_P_Die     /*ownerdie*/,
3977*4d9fdb46SRobert Mustacchi    Dwarf_Half      /*attr*/,
3978*4d9fdb46SRobert Mustacchi    Dwarf_Small     /*flag*/,
3979*4d9fdb46SRobert Mustacchi    Dwarf_Error*    /*error*/);
3980*4d9fdb46SRobert Mustacchi
3981*4d9fdb46SRobert Mustacchi/*  New December 2018. Preferred version. */
3982*4d9fdb46SRobert Mustacchiint dwarf_add_AT_flag_a(Dwarf_P_Debug /*dbg*/,
3983*4d9fdb46SRobert Mustacchi    Dwarf_P_Die     /*ownerdie*/,
3984*4d9fdb46SRobert Mustacchi    Dwarf_Half      /*attr*/,
3985*4d9fdb46SRobert Mustacchi    Dwarf_Small     /*flag*/,
3986*4d9fdb46SRobert Mustacchi    Dwarf_P_Attribute * /*attr_out*/,
3987*4d9fdb46SRobert Mustacchi    Dwarf_Error*    /*error*/);
3988*4d9fdb46SRobert Mustacchi
3989*4d9fdb46SRobert MustacchiDwarf_P_Attribute dwarf_add_AT_producer(Dwarf_P_Die /*ownerdie*/,
3990*4d9fdb46SRobert Mustacchi    char*           /*producer_string*/,
3991*4d9fdb46SRobert Mustacchi    Dwarf_Error*    /*error*/);
3992*4d9fdb46SRobert Mustacchi
3993*4d9fdb46SRobert Mustacchi/*  New December 2018. Preferred version. */
3994*4d9fdb46SRobert Mustacchiint 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 Mustacchiint 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 Mustacchiint 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 MustacchiDwarf_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 Mustacchiint dwarf_add_AT_any_value_sleb_a(Dwarf_P_Die /*ownerdie*/,
4024*4d9fdb46SRobert Mustacchi    Dwarf_Half    /*attrnum*/,
4025*4d9fdb46SRobert Mustacchi    Dwarf_Signed  /*signed_value*/,
4026*4d9fdb46SRobert Mustacchi    Dwarf_P_Attribute * /*outattr*/,
4027*4d9fdb46SRobert Mustacchi    Dwarf_Error * /*error*/);
4028*4d9fdb46SRobert Mustacchi
4029*4d9fdb46SRobert Mustacchi/* Original sleb creator. Only for DW_AT_const_value. */
4030*4d9fdb46SRobert MustacchiDwarf_P_Attribute dwarf_add_AT_const_value_signedint(Dwarf_P_Die /*ownerdie*/,
4031*4d9fdb46SRobert Mustacchi    Dwarf_Signed    /*signed_value*/,
4032*4d9fdb46SRobert Mustacchi    Dwarf_Error*    /*error*/);
4033*4d9fdb46SRobert Mustacchi
4034*4d9fdb46SRobert Mustacchi/*  Preferred as of December 2018. */
4035*4d9fdb46SRobert Mustacchiint 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 MustacchiDwarf_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 Mustacchiint 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. */
4054*4d9fdb46SRobert MustacchiDwarf_P_Attribute dwarf_add_AT_const_value_unsignedint(
4055*4d9fdb46SRobert Mustacchi    Dwarf_P_Die     /*ownerdie*/,
4056*4d9fdb46SRobert Mustacchi    Dwarf_Unsigned  /*unsigned_value*/,
4057*4d9fdb46SRobert Mustacchi    Dwarf_Error*    /*error*/);
4058*4d9fdb46SRobert Mustacchi
4059*4d9fdb46SRobert Mustacchi/*  New December 2018. Preferred version. */
4060*4d9fdb46SRobert Mustacchiint 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
4066*4d9fdb46SRobert MustacchiDwarf_P_Attribute dwarf_add_AT_comp_dir(Dwarf_P_Die /*ownerdie*/,
4067*4d9fdb46SRobert Mustacchi    char*           /*current_working_directory*/,
4068*4d9fdb46SRobert Mustacchi    Dwarf_Error*    /*error*/);
4069*4d9fdb46SRobert Mustacchi
4070*4d9fdb46SRobert Mustacchi/*  New December 2018. Preferred version. */
4071*4d9fdb46SRobert Mustacchiint 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
4076*4d9fdb46SRobert MustacchiDwarf_P_Attribute dwarf_add_AT_name(Dwarf_P_Die    /*die*/,
4077*4d9fdb46SRobert Mustacchi    char*           /*name*/,
4078*4d9fdb46SRobert Mustacchi    Dwarf_Error*    /*error*/);
4079*4d9fdb46SRobert Mustacchi
4080*4d9fdb46SRobert Mustacchi/*  New December 2018. Preferred version. */
4081*4d9fdb46SRobert Mustacchiint 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 MustacchiDwarf_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 Mustacchiint 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
4101*4d9fdb46SRobert Mustacchi/* Producer line creation functions (.debug_line) */
4102*4d9fdb46SRobert MustacchiDwarf_Unsigned dwarf_add_directory_decl(Dwarf_P_Debug /*dbg*/,
4103*4d9fdb46SRobert Mustacchi    char*           /*name*/,
4104*4d9fdb46SRobert Mustacchi    Dwarf_Error*    /*error*/);
4105*4d9fdb46SRobert Mustacchi
4106*4d9fdb46SRobert Mustacchi/*  New December 2018. Preferred version. */
4107*4d9fdb46SRobert Mustacchiint dwarf_add_directory_decl_a(Dwarf_P_Debug /*dbg*/,
4108*4d9fdb46SRobert Mustacchi    char*           /*name*/,
4109*4d9fdb46SRobert Mustacchi    Dwarf_Unsigned * /*index_in_directories*/,
4110*4d9fdb46SRobert Mustacchi    Dwarf_Error*    /*error*/);
4111*4d9fdb46SRobert Mustacchi
4112*4d9fdb46SRobert MustacchiDwarf_Unsigned dwarf_add_file_decl(Dwarf_P_Debug /*dbg*/,
4113*4d9fdb46SRobert Mustacchi    char*           /*name*/,
4114*4d9fdb46SRobert Mustacchi    Dwarf_Unsigned  /*dir_index*/,
4115*4d9fdb46SRobert Mustacchi    Dwarf_Unsigned  /*time_last_modified*/,
4116*4d9fdb46SRobert Mustacchi    Dwarf_Unsigned  /*length*/,
4117*4d9fdb46SRobert Mustacchi    Dwarf_Error*    /*error*/);
4118*4d9fdb46SRobert Mustacchi
4119*4d9fdb46SRobert Mustacchi/*  New December 2018. Preferred version. */
4120*4d9fdb46SRobert Mustacchiint 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 Mustacchiint 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 MustacchiDwarf_Unsigned dwarf_add_line_entry_b(Dwarf_P_Debug /*dbg*/,
4143*4d9fdb46SRobert Mustacchi    Dwarf_Unsigned  /*file_index*/,
4144*4d9fdb46SRobert Mustacchi    Dwarf_Addr      /*code_address*/,
4145*4d9fdb46SRobert Mustacchi    Dwarf_Unsigned  /*lineno*/,
4146*4d9fdb46SRobert Mustacchi    Dwarf_Signed    /*column_number*/,
4147*4d9fdb46SRobert Mustacchi    Dwarf_Bool      /*is_source_stmt_begin*/,
4148*4d9fdb46SRobert Mustacchi    Dwarf_Bool      /*is_basic_block_begin*/,
4149*4d9fdb46SRobert Mustacchi    Dwarf_Bool      /*is_epilogue_begin*/,
4150*4d9fdb46SRobert Mustacchi    Dwarf_Bool      /*is_prologue_end*/,
4151*4d9fdb46SRobert Mustacchi    Dwarf_Unsigned  /*isa*/,
4152*4d9fdb46SRobert Mustacchi    Dwarf_Unsigned  /*discriminator*/,
4153*4d9fdb46SRobert Mustacchi    Dwarf_Error*    /*error*/);
4154*4d9fdb46SRobert Mustacchi
4155*4d9fdb46SRobert MustacchiDwarf_Unsigned dwarf_add_line_entry(Dwarf_P_Debug /*dbg*/,
4156*4d9fdb46SRobert Mustacchi    Dwarf_Unsigned  /*file_index*/,
4157*4d9fdb46SRobert Mustacchi    Dwarf_Addr      /*code_address*/,
4158*4d9fdb46SRobert Mustacchi    Dwarf_Unsigned  /*lineno*/,
4159*4d9fdb46SRobert Mustacchi    Dwarf_Signed    /*column_number*/,
4160*4d9fdb46SRobert Mustacchi    Dwarf_Bool      /*is_source_stmt_begin*/,
4161*4d9fdb46SRobert Mustacchi    Dwarf_Bool      /*is_basic_block_begin*/,
4162*4d9fdb46SRobert Mustacchi    Dwarf_Error*    /*error*/);
4163*4d9fdb46SRobert Mustacchi
4164*4d9fdb46SRobert MustacchiDwarf_Unsigned dwarf_lne_set_address(Dwarf_P_Debug /*dbg*/,
4165*4d9fdb46SRobert Mustacchi    Dwarf_Unsigned  /*offset*/,
4166*4d9fdb46SRobert Mustacchi    Dwarf_Unsigned  /*symbol_index*/,
4167*4d9fdb46SRobert Mustacchi    Dwarf_Error*    /*error*/);
4168*4d9fdb46SRobert Mustacchi
4169*4d9fdb46SRobert Mustacchi/*  New December 2018. Preferred version. */
4170*4d9fdb46SRobert Mustacchiint 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
4175*4d9fdb46SRobert MustacchiDwarf_Unsigned dwarf_lne_end_sequence(Dwarf_P_Debug /*dbg*/,
4176*4d9fdb46SRobert Mustacchi    Dwarf_Addr      /*end_address*/,
4177*4d9fdb46SRobert Mustacchi    Dwarf_Error*    /*error*/);
4178*4d9fdb46SRobert Mustacchi
4179*4d9fdb46SRobert Mustacchi/*  New December 2018. Preferred version. */
4180*4d9fdb46SRobert Mustacchiint 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
4184*4d9fdb46SRobert Mustacchi/* Producer .debug_frame functions */
4185*4d9fdb46SRobert MustacchiDwarf_Unsigned dwarf_add_frame_cie(Dwarf_P_Debug /*dbg*/,
4186*4d9fdb46SRobert Mustacchi    char*           /*augmenter*/,
4187*4d9fdb46SRobert Mustacchi    Dwarf_Small     /*code_alignment_factor*/,
4188*4d9fdb46SRobert Mustacchi    Dwarf_Small     /*data_alignment_factor*/,
4189*4d9fdb46SRobert Mustacchi    Dwarf_Small     /*return_address_reg*/,
4190*4d9fdb46SRobert Mustacchi    Dwarf_Ptr       /*initialization_bytes*/,
4191*4d9fdb46SRobert Mustacchi    Dwarf_Unsigned  /*init_byte_len*/,
4192*4d9fdb46SRobert Mustacchi    Dwarf_Error*    /*error*/);
4193*4d9fdb46SRobert Mustacchi
4194*4d9fdb46SRobert Mustacchi/*  New December 2018. Preferred version. */
4195*4d9fdb46SRobert Mustacchiint dwarf_add_frame_cie_a(Dwarf_P_Debug /*dbg*/,
4196*4d9fdb46SRobert Mustacchi    char*           /*augmenter*/,
4197*4d9fdb46SRobert Mustacchi    Dwarf_Small     /*code_alignment_factor*/,
4198*4d9fdb46SRobert Mustacchi    Dwarf_Small     /*data_alignment_factor*/,
4199*4d9fdb46SRobert Mustacchi    Dwarf_Small     /*return_address_reg*/,
4200*4d9fdb46SRobert Mustacchi    Dwarf_Ptr       /*initialization_bytes*/,
4201*4d9fdb46SRobert Mustacchi    Dwarf_Unsigned  /*init_byte_len*/,
4202*4d9fdb46SRobert Mustacchi    Dwarf_Unsigned * /*cie_index_out*/,
4203*4d9fdb46SRobert Mustacchi    Dwarf_Error*    /*error*/);
4204*4d9fdb46SRobert Mustacchi
4205*4d9fdb46SRobert MustacchiDwarf_Unsigned dwarf_add_frame_fde(
4206*4d9fdb46SRobert Mustacchi    Dwarf_P_Debug   /*dbg*/,
4207*4d9fdb46SRobert Mustacchi    Dwarf_P_Fde     /*fde*/,
4208*4d9fdb46SRobert Mustacchi    Dwarf_P_Die     /*corresponding subprogram die*/,
4209*4d9fdb46SRobert Mustacchi    Dwarf_Unsigned  /*cie_to_use*/,
4210*4d9fdb46SRobert Mustacchi    Dwarf_Unsigned  /*virt_addr_of_described_code*/,
4211*4d9fdb46SRobert Mustacchi    Dwarf_Unsigned  /*length_of_code*/,
4212*4d9fdb46SRobert Mustacchi    Dwarf_Unsigned  /*symbol_index*/,
4213*4d9fdb46SRobert Mustacchi    Dwarf_Error*    /*error*/);
4214*4d9fdb46SRobert Mustacchi
4215*4d9fdb46SRobert MustacchiDwarf_Unsigned dwarf_add_frame_fde_b(
4216*4d9fdb46SRobert Mustacchi    Dwarf_P_Debug  /*dbg*/,
4217*4d9fdb46SRobert Mustacchi    Dwarf_P_Fde    /*fde*/,
4218*4d9fdb46SRobert Mustacchi    Dwarf_P_Die    /*die*/,
4219*4d9fdb46SRobert Mustacchi    Dwarf_Unsigned /*cie*/,
4220*4d9fdb46SRobert Mustacchi    Dwarf_Addr     /*virt_addr*/,
4221*4d9fdb46SRobert Mustacchi    Dwarf_Unsigned /*code_len*/,
4222*4d9fdb46SRobert Mustacchi    Dwarf_Unsigned /*sym_idx*/,
4223*4d9fdb46SRobert Mustacchi    Dwarf_Unsigned /*sym_idx_of_end*/,
4224*4d9fdb46SRobert Mustacchi    Dwarf_Addr     /*offset_from_end_sym*/,
4225*4d9fdb46SRobert Mustacchi    Dwarf_Error*   /*error*/);
4226*4d9fdb46SRobert Mustacchi
4227*4d9fdb46SRobert Mustacchi/*  New December 2018. Preferred version. */
4228*4d9fdb46SRobert Mustacchiint 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 Mustacchiint dwarf_add_frame_info_c(
4243*4d9fdb46SRobert Mustacchi    Dwarf_P_Debug   /*dbg*/,
4244*4d9fdb46SRobert Mustacchi    Dwarf_P_Fde     /*fde*/,
4245*4d9fdb46SRobert Mustacchi    Dwarf_P_Die     /*die*/,
4246*4d9fdb46SRobert Mustacchi    Dwarf_Unsigned  /*cie*/,
4247*4d9fdb46SRobert Mustacchi    Dwarf_Addr      /*virt_addr*/,
4248*4d9fdb46SRobert Mustacchi    Dwarf_Unsigned  /*code_len*/,
4249*4d9fdb46SRobert Mustacchi    Dwarf_Unsigned  /*symidx*/,
4250*4d9fdb46SRobert Mustacchi    Dwarf_Unsigned  /*end_symbol */,
4251*4d9fdb46SRobert Mustacchi    Dwarf_Addr      /*offset_from_end_symbol */,
4252*4d9fdb46SRobert Mustacchi    Dwarf_Signed    /*offset_into_exception_tables*/,
4253*4d9fdb46SRobert Mustacchi    Dwarf_Unsigned  /*exception_table_symbol*/,
4254*4d9fdb46SRobert Mustacchi    Dwarf_Unsigned * /*fde_index_out*/,
4255*4d9fdb46SRobert Mustacchi    Dwarf_Error*    /*error*/);
4256*4d9fdb46SRobert Mustacchi
4257*4d9fdb46SRobert MustacchiDwarf_Unsigned dwarf_add_frame_info_b(
4258*4d9fdb46SRobert Mustacchi    Dwarf_P_Debug   /*dbg*/,
4259*4d9fdb46SRobert Mustacchi    Dwarf_P_Fde     /*fde*/,
4260*4d9fdb46SRobert Mustacchi    Dwarf_P_Die     /*die*/,
4261*4d9fdb46SRobert Mustacchi    Dwarf_Unsigned  /*cie*/,
4262*4d9fdb46SRobert Mustacchi    Dwarf_Addr      /*virt_addr*/,
4263*4d9fdb46SRobert Mustacchi    Dwarf_Unsigned  /*code_len*/,
4264*4d9fdb46SRobert Mustacchi    Dwarf_Unsigned  /*symidx*/,
4265*4d9fdb46SRobert Mustacchi    Dwarf_Unsigned  /*end_symbol */,
4266*4d9fdb46SRobert Mustacchi    Dwarf_Addr      /*offset_from_end_symbol */,
4267*4d9fdb46SRobert Mustacchi    Dwarf_Signed    /*offset_into_exception_tables*/,
4268*4d9fdb46SRobert Mustacchi    Dwarf_Unsigned  /*exception_table_symbol*/,
4269*4d9fdb46SRobert Mustacchi    Dwarf_Error*    /*error*/);
4270*4d9fdb46SRobert Mustacchi
4271*4d9fdb46SRobert MustacchiDwarf_Unsigned dwarf_add_frame_info(
4272*4d9fdb46SRobert Mustacchi    Dwarf_P_Debug   /*dbg*/,
4273*4d9fdb46SRobert Mustacchi    Dwarf_P_Fde     /*fde*/,
4274*4d9fdb46SRobert Mustacchi    Dwarf_P_Die     /*die*/,
4275*4d9fdb46SRobert Mustacchi    Dwarf_Unsigned  /*cie*/,
4276*4d9fdb46SRobert Mustacchi    Dwarf_Addr      /*virt_addr*/,
4277*4d9fdb46SRobert Mustacchi    Dwarf_Unsigned  /*code_len*/,
4278*4d9fdb46SRobert Mustacchi    Dwarf_Unsigned  /*symidx*/,
4279*4d9fdb46SRobert Mustacchi    Dwarf_Signed    /*offset_into_exception_tables*/,
4280*4d9fdb46SRobert Mustacchi    Dwarf_Unsigned  /*exception_table_symbol*/,
4281*4d9fdb46SRobert Mustacchi    Dwarf_Error*    /*error*/);
4282*4d9fdb46SRobert Mustacchi
4283*4d9fdb46SRobert Mustacchi/* The fde returned is just the one passed in. Silly. */
4284*4d9fdb46SRobert MustacchiDwarf_P_Fde dwarf_add_fde_inst(
4285*4d9fdb46SRobert Mustacchi    Dwarf_P_Fde     /*fde*/,
4286*4d9fdb46SRobert Mustacchi    Dwarf_Small     /*op*/,
4287*4d9fdb46SRobert Mustacchi    Dwarf_Unsigned  /*val1*/,
4288*4d9fdb46SRobert Mustacchi    Dwarf_Unsigned  /*val2*/,
4289*4d9fdb46SRobert Mustacchi    Dwarf_Error*    /*error*/);
4290*4d9fdb46SRobert Mustacchi
4291*4d9fdb46SRobert Mustacchi/*  New December 2018. Preferred version. */
4292*4d9fdb46SRobert Mustacchiint 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
4299*4d9fdb46SRobert Mustacchi/* New September 17, 2009 */
4300*4d9fdb46SRobert Mustacchiint dwarf_insert_fde_inst_bytes(
4301*4d9fdb46SRobert Mustacchi    Dwarf_P_Debug  /*dbg*/,
4302*4d9fdb46SRobert Mustacchi    Dwarf_P_Fde    /*fde*/,
4303*4d9fdb46SRobert Mustacchi    Dwarf_Unsigned /*len*/,
4304*4d9fdb46SRobert Mustacchi    Dwarf_Ptr      /*ibytes*/,
4305*4d9fdb46SRobert Mustacchi    Dwarf_Error*   /*error*/);
4306*4d9fdb46SRobert Mustacchi
4307*4d9fdb46SRobert MustacchiDwarf_P_Fde dwarf_new_fde(Dwarf_P_Debug    /*dbg*/,
4308*4d9fdb46SRobert Mustacchi    Dwarf_Error* /*error*/);
4309*4d9fdb46SRobert Mustacchi
4310*4d9fdb46SRobert Mustacchi/*  New December 2018. Preferred version. */
4311*4d9fdb46SRobert Mustacchiint dwarf_new_fde_a(Dwarf_P_Debug    /*dbg*/,
4312*4d9fdb46SRobert Mustacchi    Dwarf_P_Fde * /*fde_out*/,
4313*4d9fdb46SRobert Mustacchi    Dwarf_Error* /*error*/);
4314*4d9fdb46SRobert Mustacchi
4315*4d9fdb46SRobert MustacchiDwarf_P_Fde dwarf_fde_cfa_offset(
4316*4d9fdb46SRobert Mustacchi    Dwarf_P_Fde     /*fde*/,
4317*4d9fdb46SRobert Mustacchi    Dwarf_Unsigned  /*register_number*/,
4318*4d9fdb46SRobert Mustacchi    Dwarf_Signed    /*offset*/,
4319*4d9fdb46SRobert Mustacchi    Dwarf_Error*    /*error*/);
4320*4d9fdb46SRobert Mustacchi
4321*4d9fdb46SRobert Mustacchi/*  New December 2018. Preferred version. */
4322*4d9fdb46SRobert Mustacchiint 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 Mustacchiint 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
4341*4d9fdb46SRobert MustacchiDwarf_P_Die dwarf_new_die(
4342*4d9fdb46SRobert Mustacchi    Dwarf_P_Debug    /*dbg*/,
4343*4d9fdb46SRobert Mustacchi    Dwarf_Tag         /*tag*/,
4344*4d9fdb46SRobert Mustacchi    Dwarf_P_Die     /*parent*/,
4345*4d9fdb46SRobert Mustacchi    Dwarf_P_Die     /*child*/,
4346*4d9fdb46SRobert Mustacchi    Dwarf_P_Die     /*left */,
4347*4d9fdb46SRobert Mustacchi    Dwarf_P_Die     /*right*/,
4348*4d9fdb46SRobert Mustacchi    Dwarf_Error*    /*error*/);
4349*4d9fdb46SRobert Mustacchi
4350*4d9fdb46SRobert Mustacchi/* New September 2016. */
4351*4d9fdb46SRobert Mustacchiint 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.  */
4357*4d9fdb46SRobert MustacchiDwarf_Unsigned dwarf_add_die_to_debug(
4358*4d9fdb46SRobert Mustacchi    Dwarf_P_Debug   /*dbg*/,
4359*4d9fdb46SRobert Mustacchi    Dwarf_P_Die     /*die*/,
4360*4d9fdb46SRobert Mustacchi    Dwarf_Error*    /*error*/);
4361*4d9fdb46SRobert Mustacchi
4362*4d9fdb46SRobert Mustacchi/* Markers are not written  to DWARF2/3/4, they are user
4363*4d9fdb46SRobert Mustacchi   defined and may be used for any purpose.
4364*4d9fdb46SRobert Mustacchi*/
4365*4d9fdb46SRobert MustacchiDwarf_Unsigned dwarf_add_die_marker(
4366*4d9fdb46SRobert Mustacchi    Dwarf_P_Debug   /*dbg*/,
4367*4d9fdb46SRobert Mustacchi    Dwarf_P_Die     /*die*/,
4368*4d9fdb46SRobert Mustacchi    Dwarf_Unsigned  /*marker*/,
4369*4d9fdb46SRobert Mustacchi    Dwarf_Error *   /*error*/);
4370*4d9fdb46SRobert Mustacchi
4371*4d9fdb46SRobert Mustacchi/*  Preferred version, new December 2018. */
4372*4d9fdb46SRobert Mustacchiint 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
4377*4d9fdb46SRobert MustacchiDwarf_Unsigned dwarf_get_die_marker(
4378*4d9fdb46SRobert Mustacchi    Dwarf_P_Debug   /*dbg*/,
4379*4d9fdb46SRobert Mustacchi    Dwarf_P_Die     /*die*/,
4380*4d9fdb46SRobert Mustacchi    Dwarf_Unsigned *  /*marker*/,
4381*4d9fdb46SRobert Mustacchi    Dwarf_Error *   /*error*/);
4382*4d9fdb46SRobert Mustacchi
4383*4d9fdb46SRobert Mustacchi/*  Preferred version, new December 2018. */
4384*4d9fdb46SRobert Mustacchiint 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 Mustacchiint 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. */
4400*4d9fdb46SRobert MustacchiDwarf_P_Die dwarf_die_link(
4401*4d9fdb46SRobert Mustacchi    Dwarf_P_Die     /*die*/,
4402*4d9fdb46SRobert Mustacchi    Dwarf_P_Die     /*parent*/,
4403*4d9fdb46SRobert Mustacchi    Dwarf_P_Die     /*child*/,
4404*4d9fdb46SRobert Mustacchi    Dwarf_P_Die     /*left*/,
4405*4d9fdb46SRobert Mustacchi    Dwarf_P_Die     /*right*/,
4406*4d9fdb46SRobert Mustacchi    Dwarf_Error*    /*error*/);
4407*4d9fdb46SRobert Mustacchi
4408*4d9fdb46SRobert Mustacchivoid dwarf_dealloc_compressed_block(
4409*4d9fdb46SRobert Mustacchi    Dwarf_P_Debug,
4410*4d9fdb46SRobert Mustacchi    void *
4411*4d9fdb46SRobert Mustacchi);
4412*4d9fdb46SRobert 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. */
4416*4d9fdb46SRobert Mustacchivoid dwarf_dealloc_uncompressed_block(
4417*4d9fdb46SRobert Mustacchi    Dwarf_Debug,
4418*4d9fdb46SRobert Mustacchi    void *
4419*4d9fdb46SRobert Mustacchi);
4420*4d9fdb46SRobert 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 Mustacchiint
4430*4d9fdb46SRobert Mustacchidwarf_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. */
4438*4d9fdb46SRobert Mustacchivoid * dwarf_compress_integer_block(
4439*4d9fdb46SRobert Mustacchi    Dwarf_P_Debug,    /*dbg*/
4440*4d9fdb46SRobert Mustacchi    Dwarf_Bool,       /*signed==true (or unsigned)*/
4441*4d9fdb46SRobert Mustacchi    Dwarf_Small,      /*size of integer units: 8, 16, 32, 64*/
4442*4d9fdb46SRobert Mustacchi    void*,            /*data*/
4443*4d9fdb46SRobert Mustacchi    Dwarf_Unsigned,   /*number of elements*/
4444*4d9fdb46SRobert Mustacchi    Dwarf_Unsigned*,  /*number of bytes in output block*/
4445*4d9fdb46SRobert Mustacchi    Dwarf_Error*      /*error*/
4446*4d9fdb46SRobert Mustacchi);
4447*4d9fdb46SRobert 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 Mustacchiint
4456*4d9fdb46SRobert Mustacchidwarf_uncompress_integer_block_a(Dwarf_Debug /*dbg*/,
4457*4d9fdb46SRobert Mustacchi    Dwarf_Unsigned     /*input_length_in_bytes*/,
4458*4d9fdb46SRobert Mustacchi    void             * /*input_block*/,
4459*4d9fdb46SRobert Mustacchi    Dwarf_Unsigned   * /*value_count*/,
4460*4d9fdb46SRobert Mustacchi    Dwarf_Signed    ** /*value_array*/,
4461*4d9fdb46SRobert Mustacchi    Dwarf_Error      * /*error*/);
4462*4d9fdb46SRobert Mustacchi
4463*4d9fdb46SRobert Mustacchi/*  Decode an array of signed leb integers (so of course the
4464*4d9fdb46SRobert Mustacchi    array is not composed of fixed length values, but is instead
4465*4d9fdb46SRobert Mustacchi    a sequence of sleb values).
4466*4d9fdb46SRobert Mustacchi    Returns a DW_DLV_BADADDR on error.
4467*4d9fdb46SRobert Mustacchi    Otherwise returns a pointer to an array of 32bit integers.
4468*4d9fdb46SRobert Mustacchi    The signed argument must be non-zero (the decode
4469*4d9fdb46SRobert Mustacchi    assumes sleb integers in the input data) at this time.
4470*4d9fdb46SRobert Mustacchi    Size of integer units must be 32 (32 bits each) at this time.
4471*4d9fdb46SRobert Mustacchi    Number of bytes in block is a byte count (not array count).
4472*4d9fdb46SRobert Mustacchi    Returns number of units in output block (ie, number of elements
4473*4d9fdb46SRobert Mustacchi    of the array that the return value points to) thru the
4474*4d9fdb46SRobert Mustacchi    argument.  */
4475*4d9fdb46SRobert Mustacchivoid * dwarf_uncompress_integer_block(
4476*4d9fdb46SRobert Mustacchi    Dwarf_Debug,      /*dbg */
4477*4d9fdb46SRobert Mustacchi    Dwarf_Bool,       /*signed==true (or unsigned) */
4478*4d9fdb46SRobert Mustacchi    Dwarf_Small,      /*size of integer units: 8, 16, 32, 64 */
4479*4d9fdb46SRobert Mustacchi    void*,            /*input data */
4480*4d9fdb46SRobert Mustacchi    Dwarf_Unsigned,   /*number of bytes in input */
4481*4d9fdb46SRobert Mustacchi    Dwarf_Unsigned*,  /*number of units in output block */
4482*4d9fdb46SRobert Mustacchi    Dwarf_Error*      /*error */
4483*4d9fdb46SRobert Mustacchi);
4484*4d9fdb46SRobert Mustacchi
4485*4d9fdb46SRobert Mustacchi/* Operations to create location expressions. */
4486*4d9fdb46SRobert MustacchiDwarf_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 Mustacchiint dwarf_new_expr_a(Dwarf_P_Debug /*dbg*/,
4491*4d9fdb46SRobert Mustacchi    Dwarf_P_Expr * /*expr_out*/,
4492*4d9fdb46SRobert Mustacchi    Dwarf_Error* /*error*/);
4493*4d9fdb46SRobert Mustacchi
4494*4d9fdb46SRobert Mustacchivoid dwarf_expr_reset(
4495*4d9fdb46SRobert Mustacchi    Dwarf_P_Expr      /*expr*/,
4496*4d9fdb46SRobert Mustacchi    Dwarf_Error*      /*error*/);
4497*4d9fdb46SRobert Mustacchi
4498*4d9fdb46SRobert MustacchiDwarf_Unsigned dwarf_add_expr_gen(
4499*4d9fdb46SRobert Mustacchi    Dwarf_P_Expr      /*expr*/,
4500*4d9fdb46SRobert Mustacchi    Dwarf_Small       /*opcode*/,
4501*4d9fdb46SRobert Mustacchi    Dwarf_Unsigned    /*val1*/,
4502*4d9fdb46SRobert Mustacchi    Dwarf_Unsigned    /*val2*/,
4503*4d9fdb46SRobert Mustacchi    Dwarf_Error*      /*error*/);
4504*4d9fdb46SRobert Mustacchi
4505*4d9fdb46SRobert Mustacchi/*  New December 2018. Preferred version. */
4506*4d9fdb46SRobert Mustacchiint 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
4514*4d9fdb46SRobert MustacchiDwarf_Unsigned dwarf_add_expr_addr(
4515*4d9fdb46SRobert Mustacchi    Dwarf_P_Expr      /*expr*/,
4516*4d9fdb46SRobert Mustacchi    Dwarf_Unsigned    /*addr*/,
4517*4d9fdb46SRobert Mustacchi    Dwarf_Signed      /*sym_index*/,
4518*4d9fdb46SRobert Mustacchi    Dwarf_Error*      /*error*/);
4519*4d9fdb46SRobert Mustacchi
4520*4d9fdb46SRobert MustacchiDwarf_Unsigned dwarf_add_expr_addr_b(
4521*4d9fdb46SRobert Mustacchi    Dwarf_P_Expr      /*expr*/,
4522*4d9fdb46SRobert Mustacchi    Dwarf_Unsigned    /*addr*/,
4523*4d9fdb46SRobert Mustacchi    Dwarf_Unsigned    /*sym_index*/,
4524*4d9fdb46SRobert Mustacchi    Dwarf_Error*      /*error*/);
4525*4d9fdb46SRobert Mustacchi
4526*4d9fdb46SRobert Mustacchi
4527*4d9fdb46SRobert Mustacchi/*  New December 2018. Preferred version. */
4528*4d9fdb46SRobert Mustacchiint 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
4535*4d9fdb46SRobert MustacchiDwarf_Unsigned dwarf_expr_current_offset(
4536*4d9fdb46SRobert Mustacchi    Dwarf_P_Expr      /*expr*/,
4537*4d9fdb46SRobert Mustacchi    Dwarf_Error*      /*error*/);
4538*4d9fdb46SRobert Mustacchi
4539*4d9fdb46SRobert Mustacchi/*  New December 2018. Preferred version. */
4540*4d9fdb46SRobert Mustacchiint 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
4545*4d9fdb46SRobert MustacchiDwarf_Addr dwarf_expr_into_block(
4546*4d9fdb46SRobert Mustacchi    Dwarf_P_Expr      /*expr*/,
4547*4d9fdb46SRobert Mustacchi    Dwarf_Unsigned*   /*length*/,
4548*4d9fdb46SRobert Mustacchi    Dwarf_Error*      /*error*/);
4549*4d9fdb46SRobert Mustacchi
4550*4d9fdb46SRobert Mustacchi/*  New December 2018. Preferred version. */
4551*4d9fdb46SRobert Mustacchiint 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
4557*4d9fdb46SRobert MustacchiDwarf_Unsigned dwarf_add_arange(Dwarf_P_Debug /*dbg*/,
4558*4d9fdb46SRobert Mustacchi    Dwarf_Addr        /*begin_address*/,
4559*4d9fdb46SRobert Mustacchi    Dwarf_Unsigned    /*length*/,
4560*4d9fdb46SRobert Mustacchi    Dwarf_Signed      /*symbol_index*/,
4561*4d9fdb46SRobert Mustacchi    Dwarf_Error*      /*error*/);
4562*4d9fdb46SRobert Mustacchi
4563*4d9fdb46SRobert MustacchiDwarf_Unsigned dwarf_add_arange_b(
4564*4d9fdb46SRobert Mustacchi    Dwarf_P_Debug  /*dbg*/,
4565*4d9fdb46SRobert Mustacchi    Dwarf_Addr     /*begin_address*/,
4566*4d9fdb46SRobert Mustacchi    Dwarf_Unsigned /*length*/,
4567*4d9fdb46SRobert Mustacchi    Dwarf_Unsigned /*symbol_index*/,
4568*4d9fdb46SRobert Mustacchi    Dwarf_Unsigned /*end_symbol_index*/,
4569*4d9fdb46SRobert Mustacchi    Dwarf_Addr     /*offset_from_end_symbol*/,
4570*4d9fdb46SRobert Mustacchi    Dwarf_Error *  /*error*/);
4571*4d9fdb46SRobert Mustacchi
4572*4d9fdb46SRobert Mustacchi/*  New December 2018. Preferred version. */
4573*4d9fdb46SRobert Mustacchiint 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
4582*4d9fdb46SRobert MustacchiDwarf_Unsigned dwarf_add_pubname(
4583*4d9fdb46SRobert Mustacchi    Dwarf_P_Debug      /*dbg*/,
4584*4d9fdb46SRobert Mustacchi    Dwarf_P_Die        /*die*/,
4585*4d9fdb46SRobert Mustacchi    char*              /*pubname_name*/,
4586*4d9fdb46SRobert Mustacchi    Dwarf_Error*       /*error*/);
4587*4d9fdb46SRobert Mustacchi
4588*4d9fdb46SRobert Mustacchi/*  New December 2018. Preferred version. */
4589*4d9fdb46SRobert Mustacchiint 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 MustacchiDwarf_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 Mustacchiint 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
4609*4d9fdb46SRobert MustacchiDwarf_Unsigned dwarf_add_funcname(
4610*4d9fdb46SRobert Mustacchi    Dwarf_P_Debug      /*dbg*/,
4611*4d9fdb46SRobert Mustacchi    Dwarf_P_Die        /*die*/,
4612*4d9fdb46SRobert Mustacchi    char*              /*func_name*/,
4613*4d9fdb46SRobert Mustacchi    Dwarf_Error*       /*error*/);
4614*4d9fdb46SRobert Mustacchi
4615*4d9fdb46SRobert Mustacchi/*  New December 2018. Preferred version. */
4616*4d9fdb46SRobert Mustacchiint 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
4622*4d9fdb46SRobert MustacchiDwarf_Unsigned dwarf_add_typename(
4623*4d9fdb46SRobert Mustacchi    Dwarf_P_Debug     /*dbg*/,
4624*4d9fdb46SRobert Mustacchi    Dwarf_P_Die       /*die*/,
4625*4d9fdb46SRobert Mustacchi    char*             /*type_name*/,
4626*4d9fdb46SRobert Mustacchi    Dwarf_Error*      /*error*/);
4627*4d9fdb46SRobert Mustacchi
4628*4d9fdb46SRobert Mustacchi/*  New December 2018. Preferred version. */
4629*4d9fdb46SRobert Mustacchiint 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
4635*4d9fdb46SRobert MustacchiDwarf_Unsigned dwarf_add_varname(
4636*4d9fdb46SRobert Mustacchi    Dwarf_P_Debug     /*dbg*/,
4637*4d9fdb46SRobert Mustacchi    Dwarf_P_Die       /*die*/,
4638*4d9fdb46SRobert Mustacchi    char*             /*var_name*/,
4639*4d9fdb46SRobert Mustacchi    Dwarf_Error*      /*error*/);
4640*4d9fdb46SRobert Mustacchi
4641*4d9fdb46SRobert Mustacchi/*  New December 2018. Preferred version. */
4642*4d9fdb46SRobert Mustacchiint 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
4648*4d9fdb46SRobert MustacchiDwarf_Unsigned dwarf_add_weakname(
4649*4d9fdb46SRobert Mustacchi    Dwarf_P_Debug    /*dbg*/,
4650*4d9fdb46SRobert Mustacchi    Dwarf_P_Die      /*die*/,
4651*4d9fdb46SRobert Mustacchi    char*            /*weak_name*/,
4652*4d9fdb46SRobert Mustacchi    Dwarf_Error*     /*error*/);
4653*4d9fdb46SRobert Mustacchi
4654*4d9fdb46SRobert Mustacchiint 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 Mustacchiint dwarf_force_debug_names(Dwarf_P_Debug /* dbg */,
4666*4d9fdb46SRobert Mustacchi    Dwarf_Error*     /*error*/);
4667*4d9fdb46SRobert Mustacchi
4668*4d9fdb46SRobert Mustacchi/*  Other debug_names functions are needed... FIXME */
4669*4d9fdb46SRobert Mustacchi
4670*4d9fdb46SRobert Mustacchi/*  end .debug_names producer functions */
4671*4d9fdb46SRobert Mustacchi
4672*4d9fdb46SRobert Mustacchi/*  .debug_macinfo producer functions
4673*4d9fdb46SRobert Mustacchi    Functions must be called in right order: the section is output
4674*4d9fdb46SRobert Mustacchi    In the order these are presented.
4675*4d9fdb46SRobert Mustacchi*/
4676*4d9fdb46SRobert Mustacchiint dwarf_def_macro(Dwarf_P_Debug /*dbg*/,
4677*4d9fdb46SRobert Mustacchi    Dwarf_Unsigned   /*line*/,
4678*4d9fdb46SRobert Mustacchi    char *           /*macname, with (arglist), no space before (*/,
4679*4d9fdb46SRobert Mustacchi    char *           /*macvalue*/,
4680*4d9fdb46SRobert Mustacchi    Dwarf_Error*     /*error*/);
4681*4d9fdb46SRobert Mustacchi
4682*4d9fdb46SRobert Mustacchiint dwarf_undef_macro(Dwarf_P_Debug /*dbg*/,
4683*4d9fdb46SRobert Mustacchi    Dwarf_Unsigned   /*line*/,
4684*4d9fdb46SRobert Mustacchi    char *           /*macname, no arglist, of course*/,
4685*4d9fdb46SRobert Mustacchi    Dwarf_Error*     /*error*/);
4686*4d9fdb46SRobert Mustacchi
4687*4d9fdb46SRobert Mustacchiint dwarf_start_macro_file(Dwarf_P_Debug /*dbg*/,
4688*4d9fdb46SRobert Mustacchi    Dwarf_Unsigned   /*fileindex*/,
4689*4d9fdb46SRobert Mustacchi    Dwarf_Unsigned   /*linenumber*/,
4690*4d9fdb46SRobert Mustacchi    Dwarf_Error*     /*error*/);
4691*4d9fdb46SRobert Mustacchi
4692*4d9fdb46SRobert Mustacchiint dwarf_end_macro_file(Dwarf_P_Debug /*dbg*/,
4693*4d9fdb46SRobert Mustacchi    Dwarf_Error*     /*error*/);
4694*4d9fdb46SRobert Mustacchi
4695*4d9fdb46SRobert Mustacchiint dwarf_vendor_ext(Dwarf_P_Debug /*dbg*/,
4696*4d9fdb46SRobert Mustacchi    Dwarf_Unsigned   /*constant*/,
4697*4d9fdb46SRobert Mustacchi    char *           /*string*/,
4698*4d9fdb46SRobert Mustacchi    Dwarf_Error*     /*error*/);
4699*4d9fdb46SRobert Mustacchi
4700*4d9fdb46SRobert Mustacchi/* end macinfo producer functions */
4701*4d9fdb46SRobert Mustacchi
4702*4d9fdb46SRobert Mustacchiint dwarf_attr_offset(Dwarf_Die /*die*/,
4703*4d9fdb46SRobert Mustacchi    Dwarf_Attribute /*attr of above die*/,
4704*4d9fdb46SRobert Mustacchi    Dwarf_Off     * /*returns offset thru this ptr */,
4705*4d9fdb46SRobert Mustacchi    Dwarf_Error   * /*error*/);
4706*4d9fdb46SRobert Mustacchi
4707*4d9fdb46SRobert Mustacchi/*  This is a hack so clients can verify offsets.
4708*4d9fdb46SRobert Mustacchi    Added April 2005 so that debugger can detect broken offsets
4709*4d9fdb46SRobert Mustacchi    (which happened in an IRIX executable larger than 2GB
4710*4d9fdb46SRobert Mustacchi    with MIPSpro 7.3.1.3 toolchain.).
4711*4d9fdb46SRobert Mustacchi*/
4712*4d9fdb46SRobert Mustacchiint dwarf_get_section_max_offsets(Dwarf_Debug /*dbg*/,
4713*4d9fdb46SRobert Mustacchi    Dwarf_Unsigned * /*debug_info_size*/,
4714*4d9fdb46SRobert Mustacchi    Dwarf_Unsigned * /*debug_abbrev_size*/,
4715*4d9fdb46SRobert Mustacchi    Dwarf_Unsigned * /*debug_line_size*/,
4716*4d9fdb46SRobert Mustacchi    Dwarf_Unsigned * /*debug_loc_size*/,
4717*4d9fdb46SRobert Mustacchi    Dwarf_Unsigned * /*debug_aranges_size*/,
4718*4d9fdb46SRobert Mustacchi    Dwarf_Unsigned * /*debug_macinfo_size*/,
4719*4d9fdb46SRobert Mustacchi    Dwarf_Unsigned * /*debug_pubnames_size*/,
4720*4d9fdb46SRobert Mustacchi    Dwarf_Unsigned * /*debug_str_size*/,
4721*4d9fdb46SRobert Mustacchi    Dwarf_Unsigned * /*debug_frame_size*/,
4722*4d9fdb46SRobert Mustacchi    Dwarf_Unsigned * /*debug_ranges_size*/,
4723*4d9fdb46SRobert Mustacchi    Dwarf_Unsigned * /*debug_pubtypes_size*/);
4724*4d9fdb46SRobert Mustacchi
4725*4d9fdb46SRobert Mustacchi/*  New October 2011., adds .debug_types section to the sizes
4726*4d9fdb46SRobert Mustacchi    returned. */
4727*4d9fdb46SRobert Mustacchiint 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 Mustacchiint 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 Mustacchiint dwarf_get_section_max_offsets_d(Dwarf_Debug /*dbg*/,
4761*4d9fdb46SRobert Mustacchi    Dwarf_Unsigned * /*debug_info_size*/,
4762*4d9fdb46SRobert Mustacchi    Dwarf_Unsigned * /*debug_abbrev_size*/,
4763*4d9fdb46SRobert Mustacchi    Dwarf_Unsigned * /*debug_line_size*/,
4764*4d9fdb46SRobert Mustacchi    Dwarf_Unsigned * /*debug_loc_size*/,
4765*4d9fdb46SRobert Mustacchi    Dwarf_Unsigned * /*debug_aranges_size*/,
4766*4d9fdb46SRobert Mustacchi    Dwarf_Unsigned * /*debug_macinfo_size*/,
4767*4d9fdb46SRobert Mustacchi    Dwarf_Unsigned * /*debug_pubnames_size*/,
4768*4d9fdb46SRobert Mustacchi    Dwarf_Unsigned * /*debug_str_size*/,
4769*4d9fdb46SRobert Mustacchi    Dwarf_Unsigned * /*debug_frame_size*/,
4770*4d9fdb46SRobert Mustacchi    Dwarf_Unsigned * /*debug_ranges_size*/,
4771*4d9fdb46SRobert Mustacchi    Dwarf_Unsigned * /*debug_pubtypes_size*/,
4772*4d9fdb46SRobert Mustacchi    Dwarf_Unsigned * /*debug_types_size*/,
4773*4d9fdb46SRobert Mustacchi    Dwarf_Unsigned * /*debug_macro_size*/,
4774*4d9fdb46SRobert Mustacchi    Dwarf_Unsigned * /*debug_str_offsets_size*/,
4775*4d9fdb46SRobert Mustacchi    Dwarf_Unsigned * /*debug_sup_size*/,
4776*4d9fdb46SRobert Mustacchi    Dwarf_Unsigned * /*debug_cu_index_size*/,
4777*4d9fdb46SRobert Mustacchi    Dwarf_Unsigned * /*debug_tu_index_size*/,
4778*4d9fdb46SRobert Mustacchi    Dwarf_Unsigned * /*debug_names_size*/,
4779*4d9fdb46SRobert Mustacchi    Dwarf_Unsigned * /*debug_loclists_size*/,
4780*4d9fdb46SRobert Mustacchi    Dwarf_Unsigned * /*debug_rnglists_size*/);
4781*4d9fdb46SRobert Mustacchi
4782*4d9fdb46SRobert Mustacchi/*  The 'set' calls here return the original (before any change
4783*4d9fdb46SRobert Mustacchi    by these set routines) of the respective fields. */
4784*4d9fdb46SRobert Mustacchi/*  Multiple releases spelled 'initial' as 'inital' .
4785*4d9fdb46SRobert Mustacchi    The 'inital' spelling should not be used. */
4786*4d9fdb46SRobert MustacchiDwarf_Half dwarf_set_frame_rule_inital_value(Dwarf_Debug /*dbg*/,
4787*4d9fdb46SRobert Mustacchi    Dwarf_Half /*value*/);
4788*4d9fdb46SRobert Mustacchi/*  Additional interface with correct 'initial' spelling. */
4789*4d9fdb46SRobert Mustacchi/*  It is likely you will want to call the following 6 functions
4790*4d9fdb46SRobert Mustacchi    before accessing any frame information.  All are useful
4791*4d9fdb46SRobert Mustacchi    to tailor handling of pseudo-registers needed to turn
4792*4d9fdb46SRobert Mustacchi    frame operation references into simpler forms and to
4793*4d9fdb46SRobert Mustacchi    reflect ABI specific data.  Of course altering libdwarf.h
4794*4d9fdb46SRobert Mustacchi    and dwarf.h allow the same capabilities, but header changes
4795*4d9fdb46SRobert Mustacchi    in the distribution would require you re-integrate your
4796*4d9fdb46SRobert Mustacchi    libdwarf.h changes into the distributed libdwarf.h ...
4797*4d9fdb46SRobert Mustacchi    so use the following functions instead.*/
4798*4d9fdb46SRobert MustacchiDwarf_Half dwarf_set_frame_rule_initial_value(Dwarf_Debug /*dbg*/,
4799*4d9fdb46SRobert Mustacchi    Dwarf_Half /*value*/);
4800*4d9fdb46SRobert MustacchiDwarf_Half dwarf_set_frame_rule_table_size(Dwarf_Debug /*dbg*/,
4801*4d9fdb46SRobert Mustacchi    Dwarf_Half /*value*/);
4802*4d9fdb46SRobert MustacchiDwarf_Half dwarf_set_frame_cfa_value(Dwarf_Debug /*dbg*/,
4803*4d9fdb46SRobert Mustacchi    Dwarf_Half /*value*/);
4804*4d9fdb46SRobert MustacchiDwarf_Half dwarf_set_frame_same_value(Dwarf_Debug /*dbg*/,
4805*4d9fdb46SRobert Mustacchi    Dwarf_Half /*value*/);
4806*4d9fdb46SRobert MustacchiDwarf_Half dwarf_set_frame_undefined_value(Dwarf_Debug /*dbg*/,
4807*4d9fdb46SRobert 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 MustacchiDwarf_Small dwarf_set_default_address_size(Dwarf_Debug /*dbg*/,
4811*4d9fdb46SRobert Mustacchi    Dwarf_Small /* value */);
4812*4d9fdb46SRobert Mustacchi
4813*4d9fdb46SRobert Mustacchi/*  As of April 27, 2009, this version with no diepointer is
4814*4d9fdb46SRobert Mustacchi    obsolete though supported.  Use dwarf_get_ranges_a() instead. */
4815*4d9fdb46SRobert Mustacchiint dwarf_get_ranges(Dwarf_Debug /*dbg*/,
4816*4d9fdb46SRobert Mustacchi    Dwarf_Off /*rangesoffset*/,
4817*4d9fdb46SRobert Mustacchi    Dwarf_Ranges ** /*rangesbuf*/,
4818*4d9fdb46SRobert Mustacchi    Dwarf_Signed * /*listlen*/,
4819*4d9fdb46SRobert Mustacchi    Dwarf_Unsigned * /*bytecount*/,
4820*4d9fdb46SRobert Mustacchi    Dwarf_Error * /*error*/);
4821*4d9fdb46SRobert Mustacchi
4822*4d9fdb46SRobert Mustacchi/* This adds the address_size argument. New April 27, 2009 */
4823*4d9fdb46SRobert Mustacchiint dwarf_get_ranges_a(Dwarf_Debug /*dbg*/,
4824*4d9fdb46SRobert Mustacchi    Dwarf_Off /*rangesoffset*/,
4825*4d9fdb46SRobert Mustacchi    Dwarf_Die  /* diepointer */,
4826*4d9fdb46SRobert Mustacchi    Dwarf_Ranges ** /*rangesbuf*/,
4827*4d9fdb46SRobert Mustacchi    Dwarf_Signed * /*listlen*/,
4828*4d9fdb46SRobert Mustacchi    Dwarf_Unsigned * /*bytecount*/,
4829*4d9fdb46SRobert Mustacchi    Dwarf_Error * /*error*/);
4830*4d9fdb46SRobert Mustacchi
4831*4d9fdb46SRobert Mustacchivoid dwarf_ranges_dealloc(Dwarf_Debug /*dbg*/,
4832*4d9fdb46SRobert Mustacchi    Dwarf_Ranges * /*rangesbuf*/,
4833*4d9fdb46SRobert Mustacchi    Dwarf_Signed /*rangecount*/);
4834*4d9fdb46SRobert Mustacchi
4835*4d9fdb46SRobert Mustacchi/* ======= START .debug_rnglists interfaces.  New May 2020 */
4836*4d9fdb46SRobert Mustacchistruct Dwarf_Rnglists_Entry_s;
4837*4d9fdb46SRobert Mustacchitypedef struct Dwarf_Rnglists_Entry_s * Dwarf_Rnglists_Entry;
4838*4d9fdb46SRobert Mustacchistruct Dwarf_Rnglists_Head_s;
4839*4d9fdb46SRobert Mustacchitypedef 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 Mustacchiint 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 Mustacchiint 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 Mustacchiint 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 Mustacchiint 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 Mustacchiint 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 Mustacchiint 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 Mustacchiint 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 Mustacchiint 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 Mustacchiint 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 Mustacchistruct Dwarf_Loclists_Entry_s;
4988*4d9fdb46SRobert Mustacchitypedef 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 Mustacchiint 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 Mustacchiint 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 Mustacchiint 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 Mustacchiint 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 Mustacchiint 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 Mustacchiint 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 Mustacchiint 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 Mustacchistruct Dwarf_Str_Offsets_Table_s;
5143*4d9fdb46SRobert Mustacchitypedef 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 Mustacchiint 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 Mustacchiint 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 Mustacchiint 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 Mustacchiint 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 Mustacchiint 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
5188*4d9fdb46SRobert Mustacchi/* The harmless error list is a circular buffer of
5189*4d9fdb46SRobert Mustacchi   errors we note but which do not stop us from processing
5190*4d9fdb46SRobert Mustacchi   the object.  Created so dwarfdump or other tools
5191*4d9fdb46SRobert Mustacchi   can report such inconsequential errors without causing
5192*4d9fdb46SRobert Mustacchi   anything to stop early. */
5193*4d9fdb46SRobert Mustacchi#define DW_HARMLESS_ERROR_CIRCULAR_LIST_DEFAULT_SIZE 4
5194*4d9fdb46SRobert Mustacchi#define DW_HARMLESS_ERROR_MSG_STRING_SIZE   300
5195*4d9fdb46SRobert Mustacchi/* User code supplies size of array of pointers errmsg_ptrs_array
5196*4d9fdb46SRobert Mustacchi    in count and the array of pointers (the pointers themselves
5197*4d9fdb46SRobert Mustacchi    need not be initialized).
5198*4d9fdb46SRobert Mustacchi    The pointers returned in the array of pointers
5199*4d9fdb46SRobert Mustacchi    are invalidated by ANY call to libdwarf.
5200*4d9fdb46SRobert Mustacchi    Use them before making another libdwarf call!
5201*4d9fdb46SRobert Mustacchi    The array of string pointers passed in always has
5202*4d9fdb46SRobert Mustacchi    a final null pointer, so if there are N pointers the
5203*4d9fdb46SRobert Mustacchi    and M actual strings, then MIN(M,N-1) pointers are
5204*4d9fdb46SRobert Mustacchi    set to point to error strings.  The array of pointers
5205*4d9fdb46SRobert Mustacchi    to strings always terminates with a NULL pointer.
5206*4d9fdb46SRobert Mustacchi    If 'count' is passed in zero then errmsg_ptrs_array
5207*4d9fdb46SRobert Mustacchi    is not touched.
5208*4d9fdb46SRobert Mustacchi
5209*4d9fdb46SRobert Mustacchi    The function returns DW_DLV_NO_ENTRY if no harmless errors
5210*4d9fdb46SRobert Mustacchi    were noted so far.  Returns DW_DLV_OK if there are errors.
5211*4d9fdb46SRobert Mustacchi    Never returns DW_DLV_ERROR.
5212*4d9fdb46SRobert Mustacchi
5213*4d9fdb46SRobert Mustacchi    Each call empties the error list (discarding all current entries).
5214*4d9fdb46SRobert Mustacchi    If newerr_count is non-NULL the count of harmless errors
5215*4d9fdb46SRobert Mustacchi    since the last call is returned through the pointer
5216*4d9fdb46SRobert Mustacchi    (some may have been discarded or not returned, it is a circular
5217*4d9fdb46SRobert Mustacchi    list...).
5218*4d9fdb46SRobert Mustacchi    If DW_DLV_NO_ENTRY is returned none of the arguments
5219*4d9fdb46SRobert Mustacchi    here are touched or used.
5220*4d9fdb46SRobert Mustacchi    */
5221*4d9fdb46SRobert Mustacchiint dwarf_get_harmless_error_list(Dwarf_Debug /*dbg*/,
5222*4d9fdb46SRobert Mustacchi    unsigned int   /*count*/,
5223*4d9fdb46SRobert Mustacchi    const char **  /*errmsg_ptrs_array*/,
5224*4d9fdb46SRobert Mustacchi    unsigned int * /*newerr_count*/);
5225*4d9fdb46SRobert Mustacchi
5226*4d9fdb46SRobert Mustacchi/*  Insertion is only for testing the harmless error code, it is not
5227*4d9fdb46SRobert Mustacchi    necessarily useful otherwise. */
5228*4d9fdb46SRobert Mustacchivoid dwarf_insert_harmless_error(Dwarf_Debug /*dbg*/,
5229*4d9fdb46SRobert Mustacchi    char * /*newerror*/);
5230*4d9fdb46SRobert Mustacchi
5231*4d9fdb46SRobert Mustacchi/*  The size of the circular list of strings may be set
5232*4d9fdb46SRobert Mustacchi    and reset as needed.  If it is shortened excess
5233*4d9fdb46SRobert Mustacchi    messages are simply dropped.  It returns the previous
5234*4d9fdb46SRobert Mustacchi    size. If zero passed in the size is unchanged
5235*4d9fdb46SRobert Mustacchi    and it simply returns the current size  */
5236*4d9fdb46SRobert Mustacchiunsigned int dwarf_set_harmless_error_list_size(Dwarf_Debug /*dbg*/,
5237*4d9fdb46SRobert Mustacchi    unsigned int /*maxcount*/);
5238*4d9fdb46SRobert Mustacchi/*  The harmless error strings (if any) are freed when the dbg
5239*4d9fdb46SRobert Mustacchi    is dwarf_finish()ed. */
5240*4d9fdb46SRobert Mustacchi
5241*4d9fdb46SRobert Mustacchi/*  When the val_in is known these dwarf_get_TAG_name (etc)
5242*4d9fdb46SRobert Mustacchi    functions return the string corresponding to the val_in passed in
5243*4d9fdb46SRobert Mustacchi    through the pointer s_out and the value returned is DW_DLV_OK.
5244*4d9fdb46SRobert Mustacchi    The strings are in static storage
5245*4d9fdb46SRobert Mustacchi    and must not be freed.
5246*4d9fdb46SRobert Mustacchi    If DW_DLV_NO_ENTRY is returned the val_in is not known and
5247*4d9fdb46SRobert Mustacchi    *s_out is not set.  DW_DLV_ERROR is never returned.*/
5248*4d9fdb46SRobert Mustacchi
5249*4d9fdb46SRobert Mustacchi/* The following copied from a generated dwarf_names.h */
5250*4d9fdb46SRobert Mustacchi
5251*4d9fdb46SRobert Mustacchi/* BEGIN FILE */
5252*4d9fdb46SRobert Mustacchiextern int dwarf_get_ACCESS_name(unsigned int /*val_in*/, const char ** /*s_out */);
5253*4d9fdb46SRobert Mustacchiextern int dwarf_get_ADDR_name(unsigned int /*val_in*/, const char ** /*s_out */);
5254*4d9fdb46SRobert Mustacchiextern int dwarf_get_ATCF_name(unsigned int /*val_in*/, const char ** /*s_out */);
5255*4d9fdb46SRobert Mustacchiextern int dwarf_get_ATE_name(unsigned int /*val_in*/, const char ** /*s_out */);
5256*4d9fdb46SRobert Mustacchiextern int dwarf_get_AT_name(unsigned int /*val_in*/, const char ** /*s_out */);
5257*4d9fdb46SRobert Mustacchiextern int dwarf_get_CC_name(unsigned int /*val_in*/, const char ** /*s_out */);
5258*4d9fdb46SRobert Mustacchiextern int dwarf_get_CFA_name(unsigned int /*val_in*/, const char ** /*s_out */);
5259*4d9fdb46SRobert Mustacchiextern int dwarf_get_children_name(unsigned int /*val_in*/, const char ** /*s_out */);
5260*4d9fdb46SRobert Mustacchiextern int dwarf_get_CHILDREN_name(unsigned int /*val_in*/, const char ** /*s_out */);
5261*4d9fdb46SRobert Mustacchiextern int dwarf_get_DEFAULTED_name(unsigned int /*val_in*/, const char ** /*s_out */);
5262*4d9fdb46SRobert Mustacchiextern int dwarf_get_DSC_name(unsigned int /*val_in*/, const char ** /*s_out */);
5263*4d9fdb46SRobert Mustacchiextern int dwarf_get_DS_name(unsigned int /*val_in*/, const char ** /*s_out */);
5264*4d9fdb46SRobert Mustacchiextern int dwarf_get_EH_name(unsigned int /*val_in*/, const char ** /*s_out */);
5265*4d9fdb46SRobert Mustacchiextern int dwarf_get_END_name(unsigned int /*val_in*/, const char ** /*s_out */);
5266*4d9fdb46SRobert Mustacchiextern int dwarf_get_FORM_name(unsigned int /*val_in*/, const char ** /*s_out */);
5267*4d9fdb46SRobert Mustacchiextern int dwarf_get_FRAME_name(unsigned int /*val_in*/, const char ** /*s_out */);
5268*4d9fdb46SRobert Mustacchiextern int dwarf_get_ID_name(unsigned int /*val_in*/, const char ** /*s_out */);
5269*4d9fdb46SRobert Mustacchiextern int dwarf_get_IDX_name(unsigned int /*val_in*/, const char ** /*s_out */);
5270*4d9fdb46SRobert Mustacchiextern int dwarf_get_INL_name(unsigned int /*val_in*/, const char ** /*s_out */);
5271*4d9fdb46SRobert Mustacchiextern int dwarf_get_ISA_name(unsigned int /*val_in*/, const char ** /*s_out */);
5272*4d9fdb46SRobert Mustacchiextern int dwarf_get_LANG_name(unsigned int /*val_in*/, const char ** /*s_out */);
5273*4d9fdb46SRobert Mustacchiextern 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 Mustacchiextern int dwarf_get_LLEX_name(unsigned int /*val_in*/, const char ** /*s_out */);
5276*4d9fdb46SRobert Mustacchiextern int dwarf_get_LNCT_name(unsigned int /*val_in*/, const char ** /*s_out */);
5277*4d9fdb46SRobert Mustacchiextern int dwarf_get_LNE_name(unsigned int /*val_in*/, const char ** /*s_out */);
5278*4d9fdb46SRobert Mustacchiextern int dwarf_get_LNS_name(unsigned int /*val_in*/, const char ** /*s_out */);
5279*4d9fdb46SRobert Mustacchiextern int dwarf_get_MACINFO_name(unsigned int /*val_in*/, const char ** /*s_out */);
5280*4d9fdb46SRobert Mustacchiextern int dwarf_get_MACRO_name(unsigned int /*val_in*/, const char ** /*s_out */);
5281*4d9fdb46SRobert Mustacchiextern int dwarf_get_OP_name(unsigned int /*val_in*/, const char ** /*s_out */);
5282*4d9fdb46SRobert Mustacchiextern int dwarf_get_ORD_name(unsigned int /*val_in*/, const char ** /*s_out */);
5283*4d9fdb46SRobert Mustacchiextern int dwarf_get_RLE_name(unsigned int /*val_in*/, const char ** /*s_out */);
5284*4d9fdb46SRobert Mustacchiextern int dwarf_get_SECT_name(unsigned int /*val_in*/, const char ** /*s_out */);
5285*4d9fdb46SRobert Mustacchiextern int dwarf_get_TAG_name(unsigned int /*val_in*/, const char ** /*s_out */);
5286*4d9fdb46SRobert Mustacchiextern int dwarf_get_UT_name(unsigned int /*val_in*/, const char ** /*s_out */);
5287*4d9fdb46SRobert Mustacchiextern int dwarf_get_VIRTUALITY_name(unsigned int /*val_in*/, const char ** /*s_out */);
5288*4d9fdb46SRobert Mustacchiextern 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 Mustacchiint 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 Mustacchiint 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 Mustacchiint 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 Mustacchiint 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 Mustacchiint 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 Mustacchiint 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 Mustacchiint 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 Mustacchiint 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 Mustacchiint 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 Mustacchiint 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 Mustacchiint 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 Mustacchivoid (*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 Mustacchiint dwarf_encode_leb128(Dwarf_Unsigned /*val*/,
5383*4d9fdb46SRobert Mustacchi    int * /*nbytes*/,
5384*4d9fdb46SRobert Mustacchi    char * /*space*/,
5385*4d9fdb46SRobert Mustacchi    int /*splen*/);
5386*4d9fdb46SRobert Mustacchiint 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 Mustacchitypedef struct {
5400*4d9fdb46SRobert Mustacchi    Dwarf_Bool check_verbose_mode;
5401*4d9fdb46SRobert Mustacchi} Dwarf_Cmdline_Options;
5402*4d9fdb46SRobert Mustacchiextern Dwarf_Cmdline_Options dwarf_cmdline_options;
5403*4d9fdb46SRobert Mustacchi
5404*4d9fdb46SRobert Mustacchi/* Set libdwarf to reflect some application command line options. */
5405*4d9fdb46SRobert Mustacchivoid dwarf_record_cmdline_options(Dwarf_Cmdline_Options /*options*/);
5406*4d9fdb46SRobert Mustacchi
5407*4d9fdb46SRobert Mustacchiint 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 Mustacchiint dwarf_set_de_alloc_flag(int v);
5436*4d9fdb46SRobert Mustacchi
5437*4d9fdb46SRobert Mustacchiint 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 Mustacchiint 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);
5452*4d9fdb46SRobert Mustacchi
5453*4d9fdb46SRobert Mustacchi#ifdef __cplusplus
5454*4d9fdb46SRobert Mustacchi}
5455*4d9fdb46SRobert Mustacchi#endif
5456*4d9fdb46SRobert Mustacchi#endif /* _LIBDWARF_H */
5457