xref: /titanic_52/usr/src/lib/libdwarf/common/libdwarf.h (revision 7fd791373689a6af05e27efec3b1ab556e02aa23)
1*7fd79137SRobert Mustacchi /*
2*7fd79137SRobert Mustacchi 
3*7fd79137SRobert Mustacchi   Copyright (C) 2000-2010 Silicon Graphics, Inc.  All Rights Reserved.
4*7fd79137SRobert Mustacchi   Portions Copyright 2007-2010 Sun Microsystems, Inc. All rights reserved.
5*7fd79137SRobert Mustacchi   Portions Copyright 2008-2010 David Anderson. All rights reserved.
6*7fd79137SRobert Mustacchi   Portions Copyright 2008-2010 Arxan Technologies, Inc. All rights reserved.
7*7fd79137SRobert Mustacchi 
8*7fd79137SRobert Mustacchi   This program is free software; you can redistribute it and/or modify it
9*7fd79137SRobert Mustacchi   under the terms of version 2.1 of the GNU Lesser General Public License
10*7fd79137SRobert Mustacchi   as published by the Free Software Foundation.
11*7fd79137SRobert Mustacchi 
12*7fd79137SRobert Mustacchi   This program is distributed in the hope that it would be useful, but
13*7fd79137SRobert Mustacchi   WITHOUT ANY WARRANTY; without even the implied warranty of
14*7fd79137SRobert Mustacchi   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
15*7fd79137SRobert Mustacchi 
16*7fd79137SRobert Mustacchi   Further, this software is distributed without any warranty that it is
17*7fd79137SRobert Mustacchi   free of the rightful claim of any third person regarding infringement
18*7fd79137SRobert Mustacchi   or the like.  Any license provided herein, whether implied or
19*7fd79137SRobert Mustacchi   otherwise, applies only to this software file.  Patent licenses, if
20*7fd79137SRobert Mustacchi   any, provided herein do not apply to combinations of this program with
21*7fd79137SRobert Mustacchi   other software, or any other product whatsoever.
22*7fd79137SRobert Mustacchi 
23*7fd79137SRobert Mustacchi   You should have received a copy of the GNU Lesser General Public
24*7fd79137SRobert Mustacchi   License along with this program; if not, write the Free Software
25*7fd79137SRobert Mustacchi   Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston MA 02110-1301,
26*7fd79137SRobert Mustacchi   USA.
27*7fd79137SRobert Mustacchi 
28*7fd79137SRobert Mustacchi   Contact information:  Silicon Graphics, Inc., 1500 Crittenden Lane,
29*7fd79137SRobert Mustacchi   Mountain View, CA 94043, or:
30*7fd79137SRobert Mustacchi 
31*7fd79137SRobert Mustacchi   http://www.sgi.com
32*7fd79137SRobert Mustacchi 
33*7fd79137SRobert Mustacchi   For further information regarding this notice, see:
34*7fd79137SRobert Mustacchi 
35*7fd79137SRobert Mustacchi   http://oss.sgi.com/projects/GenInfo/NoticeExplan
36*7fd79137SRobert Mustacchi 
37*7fd79137SRobert Mustacchi */
38*7fd79137SRobert Mustacchi 
39*7fd79137SRobert Mustacchi 
40*7fd79137SRobert Mustacchi #ifndef _LIBDWARF_H
41*7fd79137SRobert Mustacchi #define _LIBDWARF_H
42*7fd79137SRobert Mustacchi #ifdef __cplusplus
43*7fd79137SRobert Mustacchi extern "C" {
44*7fd79137SRobert Mustacchi #endif
45*7fd79137SRobert Mustacchi /*
46*7fd79137SRobert Mustacchi     libdwarf.h
47*7fd79137SRobert Mustacchi     $Revision: #9 $ $Date: 2008/01/17 $
48*7fd79137SRobert Mustacchi 
49*7fd79137SRobert Mustacchi     For libdwarf producers and consumers
50*7fd79137SRobert Mustacchi 
51*7fd79137SRobert Mustacchi     The interface is defined as having 8-byte signed and unsigned
52*7fd79137SRobert Mustacchi     values so it can handle 64-or-32bit target on 64-or-32bit host.
53*7fd79137SRobert Mustacchi     Addr is the native size: it represents pointers on
54*7fd79137SRobert Mustacchi     the host machine (not the target!).
55*7fd79137SRobert Mustacchi 
56*7fd79137SRobert Mustacchi     This contains declarations for types and all producer
57*7fd79137SRobert Mustacchi     and consumer functions.
58*7fd79137SRobert Mustacchi 
59*7fd79137SRobert Mustacchi     Function declarations are written on a single line each here
60*7fd79137SRobert Mustacchi     so one can use grep  to each declaration in its entirety.
61*7fd79137SRobert Mustacchi     The declarations are a little harder to read this way, but...
62*7fd79137SRobert Mustacchi 
63*7fd79137SRobert Mustacchi */
64*7fd79137SRobert Mustacchi 
65*7fd79137SRobert Mustacchi struct Elf;
66*7fd79137SRobert Mustacchi typedef struct Elf* dwarf_elf_handle;
67*7fd79137SRobert Mustacchi 
68*7fd79137SRobert Mustacchi /* To enable printing with printf regardless of the
69*7fd79137SRobert Mustacchi    actual underlying data type, we define the DW_PR_xxx macros. */
70*7fd79137SRobert Mustacchi #if (_MIPS_SZLONG == 64)
71*7fd79137SRobert Mustacchi /* Special case for MIPS, so -64 (LP64) build gets simple -long-.
72*7fd79137SRobert Mustacchi    Non-MIPS LP64 or ILP64 environments should probably ensure
73*7fd79137SRobert Mustacchi    _MIPS_SZLONG set to 64 everywhere this header is #included.
74*7fd79137SRobert Mustacchi */
75*7fd79137SRobert Mustacchi typedef int             Dwarf_Bool;         /* boolean type */
76*7fd79137SRobert Mustacchi typedef unsigned long   Dwarf_Off;          /* 4 or 8 byte file offset */
77*7fd79137SRobert Mustacchi typedef unsigned long   Dwarf_Unsigned;     /* 4 or 8 byte unsigned value */
78*7fd79137SRobert Mustacchi typedef unsigned short  Dwarf_Half;         /* 2 byte unsigned value */
79*7fd79137SRobert Mustacchi typedef unsigned char   Dwarf_Small;        /* 1 byte unsigned value */
80*7fd79137SRobert Mustacchi typedef signed   long   Dwarf_Signed;       /* 4 or 8 byte signed value */
81*7fd79137SRobert Mustacchi typedef unsigned long   Dwarf_Addr;         /* target memory address */
82*7fd79137SRobert Mustacchi #define  DW_PR_DUx  "lx"
83*7fd79137SRobert Mustacchi #define  DW_PR_DSx  "lx"
84*7fd79137SRobert Mustacchi #define  DW_PR_DUu  "lu"
85*7fd79137SRobert Mustacchi #define  DW_PR_DSd  "ld"
86*7fd79137SRobert Mustacchi 
87*7fd79137SRobert Mustacchi #else /* 32-bit */
88*7fd79137SRobert Mustacchi /* This is for ILP32, allowing i/o of 64bit dwarf info.
89*7fd79137SRobert Mustacchi    Also should be fine for LP64 and ILP64 cases.
90*7fd79137SRobert Mustacchi */
91*7fd79137SRobert Mustacchi typedef int                 Dwarf_Bool;     /* boolean type */
92*7fd79137SRobert Mustacchi typedef unsigned long long  Dwarf_Off;      /* 8 byte file offset */
93*7fd79137SRobert Mustacchi typedef unsigned long long  Dwarf_Unsigned; /* 8 byte unsigned value*/
94*7fd79137SRobert Mustacchi typedef unsigned short      Dwarf_Half;     /* 2 byte unsigned value */
95*7fd79137SRobert Mustacchi typedef unsigned char       Dwarf_Small;    /* 1 byte unsigned value */
96*7fd79137SRobert Mustacchi typedef signed   long long  Dwarf_Signed;   /* 8 byte signed value */
97*7fd79137SRobert Mustacchi typedef unsigned long long  Dwarf_Addr;     /* target memory address */
98*7fd79137SRobert Mustacchi #define  DW_PR_DUx  "llx"
99*7fd79137SRobert Mustacchi #define  DW_PR_DSx  "llx"
100*7fd79137SRobert Mustacchi #define  DW_PR_DUu  "llu"
101*7fd79137SRobert Mustacchi #define  DW_PR_DSd  "lld"
102*7fd79137SRobert Mustacchi #endif
103*7fd79137SRobert Mustacchi #ifdef HAVE_NONSTANDARD_PRINTF_64_FORMAT
104*7fd79137SRobert Mustacchi /* Windows does not use std C formatting, so allow it. */
105*7fd79137SRobert Mustacchi #undef DW_PR_DUx
106*7fd79137SRobert Mustacchi #undef DW_PR_DSx
107*7fd79137SRobert Mustacchi #undef DW_PR_DUu
108*7fd79137SRobert Mustacchi #undef DW_PR_DSd
109*7fd79137SRobert Mustacchi #define  DW_PR_DUx  "I64x"
110*7fd79137SRobert Mustacchi #define  DW_PR_DSx  "I64x"
111*7fd79137SRobert Mustacchi #define  DW_PR_DUu  "I64u"
112*7fd79137SRobert Mustacchi #define  DW_PR_DSd  "I64d"
113*7fd79137SRobert Mustacchi #endif /* HAVE_NONSTANDARD_FORMAT */
114*7fd79137SRobert Mustacchi 
115*7fd79137SRobert Mustacchi typedef void*        Dwarf_Ptr;          /* host machine pointer */
116*7fd79137SRobert Mustacchi 
117*7fd79137SRobert Mustacchi /* Used for DW_FORM_ref_sig8. It is not a string, it
118*7fd79137SRobert Mustacchi    is 8 bytes of a signature one would use to find
119*7fd79137SRobert Mustacchi    a type unit. See dwarf_formsig8()
120*7fd79137SRobert Mustacchi */
121*7fd79137SRobert Mustacchi typedef struct  {
122*7fd79137SRobert Mustacchi     char signature[8];
123*7fd79137SRobert Mustacchi } Dwarf_Sig8;
124*7fd79137SRobert Mustacchi 
125*7fd79137SRobert Mustacchi /* Contains info on an uninterpreted block of data
126*7fd79137SRobert Mustacchi */
127*7fd79137SRobert Mustacchi typedef struct {
128*7fd79137SRobert Mustacchi     Dwarf_Unsigned  bl_len;         /* length of block */
129*7fd79137SRobert Mustacchi     Dwarf_Ptr       bl_data;        /* uninterpreted data */
130*7fd79137SRobert Mustacchi     Dwarf_Small     bl_from_loclist; /*non-0 if loclist, else debug_info*/
131*7fd79137SRobert Mustacchi     Dwarf_Unsigned  bl_section_offset; /* Section (not CU) offset
132*7fd79137SRobert Mustacchi                                         which 'data' comes from. */
133*7fd79137SRobert Mustacchi } Dwarf_Block;
134*7fd79137SRobert Mustacchi 
135*7fd79137SRobert Mustacchi 
136*7fd79137SRobert Mustacchi /* location record
137*7fd79137SRobert Mustacchi */
138*7fd79137SRobert Mustacchi typedef struct {
139*7fd79137SRobert Mustacchi     Dwarf_Small     lr_atom;        /* location operation */
140*7fd79137SRobert Mustacchi     Dwarf_Unsigned  lr_number;      /* operand */
141*7fd79137SRobert Mustacchi     Dwarf_Unsigned  lr_number2;     /* for OP_BREGx */
142*7fd79137SRobert Mustacchi     Dwarf_Unsigned  lr_offset;      /* offset in locexpr for OP_BRA etc */
143*7fd79137SRobert Mustacchi } Dwarf_Loc;
144*7fd79137SRobert Mustacchi 
145*7fd79137SRobert Mustacchi 
146*7fd79137SRobert Mustacchi /* location description
147*7fd79137SRobert Mustacchi */
148*7fd79137SRobert Mustacchi typedef struct {
149*7fd79137SRobert Mustacchi     Dwarf_Addr      ld_lopc;        /* beginning of active range */
150*7fd79137SRobert Mustacchi     Dwarf_Addr      ld_hipc;        /* end of active range */
151*7fd79137SRobert Mustacchi     Dwarf_Half      ld_cents;       /* count of location records */
152*7fd79137SRobert Mustacchi     Dwarf_Loc*      ld_s;           /* pointer to list of same */
153*7fd79137SRobert Mustacchi     Dwarf_Small     ld_from_loclist;
154*7fd79137SRobert Mustacchi                       /* non-0 if loclist, else debug_info*/
155*7fd79137SRobert Mustacchi 
156*7fd79137SRobert Mustacchi     Dwarf_Unsigned  ld_section_offset; /* Section (not CU) offset
157*7fd79137SRobert Mustacchi                     where loc-expr begins*/
158*7fd79137SRobert Mustacchi } Dwarf_Locdesc;
159*7fd79137SRobert Mustacchi 
160*7fd79137SRobert Mustacchi /* First appears in DWARF3.
161*7fd79137SRobert Mustacchi    The dwr_addr1/addr2 data is either an offset (DW_RANGES_ENTRY)
162*7fd79137SRobert Mustacchi    or an address (dwr_addr2 in DW_RANGES_ADDRESS_SELECTION) or
163*7fd79137SRobert Mustacchi    both are zero (DW_RANGES_END).
164*7fd79137SRobert Mustacchi */
165*7fd79137SRobert Mustacchi enum Dwarf_Ranges_Entry_Type { DW_RANGES_ENTRY,
166*7fd79137SRobert Mustacchi     DW_RANGES_ADDRESS_SELECTION,
167*7fd79137SRobert Mustacchi     DW_RANGES_END };
168*7fd79137SRobert Mustacchi typedef struct {
169*7fd79137SRobert Mustacchi     Dwarf_Addr dwr_addr1;
170*7fd79137SRobert Mustacchi     Dwarf_Addr dwr_addr2;
171*7fd79137SRobert Mustacchi     enum Dwarf_Ranges_Entry_Type  dwr_type;
172*7fd79137SRobert Mustacchi } Dwarf_Ranges;
173*7fd79137SRobert Mustacchi 
174*7fd79137SRobert Mustacchi /* Frame description instructions expanded.
175*7fd79137SRobert Mustacchi */
176*7fd79137SRobert Mustacchi typedef struct {
177*7fd79137SRobert Mustacchi     Dwarf_Small     fp_base_op;
178*7fd79137SRobert Mustacchi     Dwarf_Small     fp_extended_op;
179*7fd79137SRobert Mustacchi     Dwarf_Half      fp_register;
180*7fd79137SRobert Mustacchi 
181*7fd79137SRobert Mustacchi     /* Value may be signed, depends on op.
182*7fd79137SRobert Mustacchi            Any applicable data_alignment_factor has
183*7fd79137SRobert Mustacchi            not been applied, this is the  raw offset. */
184*7fd79137SRobert Mustacchi     Dwarf_Unsigned  fp_offset;
185*7fd79137SRobert Mustacchi     Dwarf_Off       fp_instr_offset;
186*7fd79137SRobert Mustacchi } Dwarf_Frame_Op; /* DWARF2 */
187*7fd79137SRobert Mustacchi 
188*7fd79137SRobert Mustacchi typedef struct {
189*7fd79137SRobert Mustacchi     Dwarf_Small     fp_base_op;
190*7fd79137SRobert Mustacchi     Dwarf_Small     fp_extended_op;
191*7fd79137SRobert Mustacchi     Dwarf_Half      fp_register;
192*7fd79137SRobert Mustacchi 
193*7fd79137SRobert Mustacchi     /* Value may be signed, depends on op.
194*7fd79137SRobert Mustacchi            Any applicable data_alignment_factor has
195*7fd79137SRobert Mustacchi            not been applied, this is the  raw offset. */
196*7fd79137SRobert Mustacchi     Dwarf_Unsigned  fp_offset_or_block_len;
197*7fd79137SRobert Mustacchi     Dwarf_Small     *fp_expr_block;
198*7fd79137SRobert Mustacchi 
199*7fd79137SRobert Mustacchi     Dwarf_Off       fp_instr_offset;
200*7fd79137SRobert Mustacchi } Dwarf_Frame_Op3;  /* DWARF3 and DWARF2 compatible */
201*7fd79137SRobert Mustacchi 
202*7fd79137SRobert Mustacchi /*  ***IMPORTANT NOTE, TARGET DEPENDENCY ****
203*7fd79137SRobert Mustacchi    DW_REG_TABLE_SIZE must be at least as large as
204*7fd79137SRobert Mustacchi    the number of registers
205*7fd79137SRobert Mustacchi    (DW_FRAME_LAST_REG_NUM) as defined in dwarf.h
206*7fd79137SRobert Mustacchi    Preferably identical to DW_FRAME_LAST_REG_NUM.
207*7fd79137SRobert Mustacchi    Ensure [0-DW_REG_TABLE_SIZE] does not overlap
208*7fd79137SRobert Mustacchi    DW_FRAME_UNDEFINED_VAL or DW_FRAME_SAME_VAL.
209*7fd79137SRobert Mustacchi    Also ensure DW_FRAME_REG_INITIAL_VALUE is set to what
210*7fd79137SRobert Mustacchi    is appropriate to your cpu.
211*7fd79137SRobert Mustacchi    For various CPUs  DW_FRAME_UNDEFINED_VAL is correct
212*7fd79137SRobert Mustacchi    as the value for DW_FRAME_REG_INITIAL_VALUE.
213*7fd79137SRobert Mustacchi 
214*7fd79137SRobert Mustacchi    For consumer apps, this can be set dynamically: see
215*7fd79137SRobert Mustacchi    dwarf_set_frame_rule_table_size();
216*7fd79137SRobert Mustacchi  */
217*7fd79137SRobert Mustacchi #ifndef DW_REG_TABLE_SIZE
218*7fd79137SRobert Mustacchi #define DW_REG_TABLE_SIZE  66
219*7fd79137SRobert Mustacchi #endif
220*7fd79137SRobert Mustacchi 
221*7fd79137SRobert Mustacchi /* For MIPS, DW_FRAME_SAME_VAL is the correct default value
222*7fd79137SRobert Mustacchi    for a frame register value. For other CPUS another value
223*7fd79137SRobert Mustacchi    may be better, such as DW_FRAME_UNDEFINED_VAL.
224*7fd79137SRobert Mustacchi    See dwarf_set_frame_rule_table_size
225*7fd79137SRobert Mustacchi */
226*7fd79137SRobert Mustacchi #ifndef DW_FRAME_REG_INITIAL_VALUE
227*7fd79137SRobert Mustacchi #define DW_FRAME_REG_INITIAL_VALUE DW_FRAME_SAME_VAL
228*7fd79137SRobert Mustacchi #endif
229*7fd79137SRobert Mustacchi 
230*7fd79137SRobert Mustacchi /* Taken as meaning 'undefined value', this is not
231*7fd79137SRobert Mustacchi    a column or register number.
232*7fd79137SRobert Mustacchi    Only present at libdwarf runtime in the consumer
233*7fd79137SRobert Mustacchi    interfaces. Never on disk.
234*7fd79137SRobert Mustacchi    DW_FRAME_* Values present on disk are in dwarf.h
235*7fd79137SRobert Mustacchi    Ensure this is > DW_REG_TABLE_SIZE (the reg table
236*7fd79137SRobert Mustacchi    size is changeable at runtime with the *reg3() interfaces,
237*7fd79137SRobert Mustacchi    and this value must be greater than the reg table size).
238*7fd79137SRobert Mustacchi */
239*7fd79137SRobert Mustacchi #define DW_FRAME_UNDEFINED_VAL          1034
240*7fd79137SRobert Mustacchi 
241*7fd79137SRobert Mustacchi /* Taken as meaning 'same value' as caller had, not a column
242*7fd79137SRobert Mustacchi    or register number.
243*7fd79137SRobert Mustacchi    Only present at libdwarf runtime in the consumer
244*7fd79137SRobert Mustacchi    interfaces. Never on disk.
245*7fd79137SRobert Mustacchi    DW_FRAME_* Values present on disk are in dwarf.h
246*7fd79137SRobert Mustacchi    Ensure this is > DW_REG_TABLE_SIZE (the reg table
247*7fd79137SRobert Mustacchi    size is changeable at runtime with the *reg3() interfaces,
248*7fd79137SRobert Mustacchi    and this value must be greater than the reg table size).
249*7fd79137SRobert Mustacchi */
250*7fd79137SRobert Mustacchi #define DW_FRAME_SAME_VAL               1035
251*7fd79137SRobert Mustacchi 
252*7fd79137SRobert Mustacchi /* For DWARF3 consumer interfaces, make the CFA a column with no
253*7fd79137SRobert Mustacchi    real table number.  This is what should have been done
254*7fd79137SRobert Mustacchi    for the DWARF2 interfaces.  This actually works for
255*7fd79137SRobert Mustacchi    both DWARF2 and DWARF3, but see the libdwarf documentation
256*7fd79137SRobert Mustacchi    on Dwarf_Regtable3 and  dwarf_get_fde_info_for_reg3()
257*7fd79137SRobert Mustacchi    and  dwarf_get_fde_info_for_all_regs3()
258*7fd79137SRobert Mustacchi    Do NOT use this with the older dwarf_get_fde_info_for_reg()
259*7fd79137SRobert Mustacchi    or dwarf_get_fde_info_for_all_regs() consumer interfaces.
260*7fd79137SRobert Mustacchi    Must be higher than any register count for *any* ABI
261*7fd79137SRobert Mustacchi    (ensures maximum applicability with minimum effort).
262*7fd79137SRobert Mustacchi    Ensure this is > DW_REG_TABLE_SIZE (the reg table
263*7fd79137SRobert Mustacchi    size is changeable at runtime with the *reg3() interfaces,
264*7fd79137SRobert Mustacchi    and this value must be greater than the reg table size).
265*7fd79137SRobert Mustacchi    Only present at libdwarf runtime in the consumer
266*7fd79137SRobert Mustacchi    interfaces. Never on disk.
267*7fd79137SRobert Mustacchi */
268*7fd79137SRobert Mustacchi #define DW_FRAME_CFA_COL3               1436
269*7fd79137SRobert Mustacchi 
270*7fd79137SRobert Mustacchi /* The following are all needed to evaluate DWARF3 register rules.
271*7fd79137SRobert Mustacchi */
272*7fd79137SRobert Mustacchi #define DW_EXPR_OFFSET 0  /* DWARF2 only sees this. */
273*7fd79137SRobert Mustacchi #define DW_EXPR_VAL_OFFSET 1
274*7fd79137SRobert Mustacchi #define DW_EXPR_EXPRESSION 2
275*7fd79137SRobert Mustacchi #define DW_EXPR_VAL_EXPRESSION 3
276*7fd79137SRobert Mustacchi 
277*7fd79137SRobert Mustacchi typedef struct Dwarf_Regtable_Entry_s {
278*7fd79137SRobert Mustacchi     /*  For each index i (naming a hardware register with dwarf number
279*7fd79137SRobert Mustacchi             i) the following is true and defines the value of that register:
280*7fd79137SRobert Mustacchi 
281*7fd79137SRobert Mustacchi            If dw_regnum is Register DW_FRAME_UNDEFINED_VAL
282*7fd79137SRobert Mustacchi          it is not DWARF register number but
283*7fd79137SRobert Mustacchi         a place holder indicating the register has no defined value.
284*7fd79137SRobert Mustacchi            If dw_regnum is Register DW_FRAME_SAME_VAL
285*7fd79137SRobert Mustacchi            it  is not DWARF register number but
286*7fd79137SRobert Mustacchi         a place holder indicating the register has the same
287*7fd79137SRobert Mustacchi                 value in the previous frame.
288*7fd79137SRobert Mustacchi        DW_FRAME_UNDEFINED_VAL, DW_FRAME_SAME_VAL are
289*7fd79137SRobert Mustacchi            only present at libdwarf runtime. Never on disk.
290*7fd79137SRobert Mustacchi            DW_FRAME_* Values present on disk are in dwarf.h
291*7fd79137SRobert Mustacchi 
292*7fd79137SRobert Mustacchi           Otherwise: the register number is a DWARF register number
293*7fd79137SRobert Mustacchi           (see ABI documents for how this translates to hardware/
294*7fd79137SRobert Mustacchi            software register numbers in the machine hardware)
295*7fd79137SRobert Mustacchi       and the following applies:
296*7fd79137SRobert Mustacchi 
297*7fd79137SRobert Mustacchi           if dw_value_type == DW_EXPR_OFFSET (the only case for dwarf2):
298*7fd79137SRobert Mustacchi             If dw_offset_relevant is non-zero, then
299*7fd79137SRobert Mustacchi                 the value is stored at at the address CFA+N where
300*7fd79137SRobert Mustacchi                 N is a signed offset.
301*7fd79137SRobert Mustacchi                 Rule: Offset(N)
302*7fd79137SRobert Mustacchi             If dw_offset_relevant is zero, then the value of the register
303*7fd79137SRobert Mustacchi                 is the value of (DWARF) register number dw_regnum.
304*7fd79137SRobert Mustacchi                 Rule: register(F)
305*7fd79137SRobert Mustacchi           Other values of dw_value_type are an error.
306*7fd79137SRobert Mustacchi         */
307*7fd79137SRobert Mustacchi     Dwarf_Small         dw_offset_relevant;
308*7fd79137SRobert Mustacchi 
309*7fd79137SRobert Mustacchi     /* For DWARF2, always 0 */
310*7fd79137SRobert Mustacchi         Dwarf_Small         dw_value_type;
311*7fd79137SRobert Mustacchi 
312*7fd79137SRobert Mustacchi     Dwarf_Half          dw_regnum;
313*7fd79137SRobert Mustacchi 
314*7fd79137SRobert Mustacchi     /* The data type here should  the larger of Dwarf_Addr
315*7fd79137SRobert Mustacchi            and Dwarf_Unsigned and Dwarf_Signed. */
316*7fd79137SRobert Mustacchi     Dwarf_Addr          dw_offset;
317*7fd79137SRobert Mustacchi } Dwarf_Regtable_Entry;
318*7fd79137SRobert Mustacchi 
319*7fd79137SRobert Mustacchi typedef struct Dwarf_Regtable_s {
320*7fd79137SRobert Mustacchi     struct Dwarf_Regtable_Entry_s rules[DW_REG_TABLE_SIZE];
321*7fd79137SRobert Mustacchi } Dwarf_Regtable;
322*7fd79137SRobert Mustacchi 
323*7fd79137SRobert Mustacchi /* opaque type. Functional interface shown later. */
324*7fd79137SRobert Mustacchi struct Dwarf_Reg_value3_s;
325*7fd79137SRobert Mustacchi typedef struct Dwarf_Reg_value3_s Dwarf_Reg_Value3;
326*7fd79137SRobert Mustacchi 
327*7fd79137SRobert Mustacchi typedef struct Dwarf_Regtable_Entry3_s {
328*7fd79137SRobert Mustacchi     /*  For each index i (naming a hardware register with dwarf number
329*7fd79137SRobert Mustacchi         i) the following is true and defines the value of that register:
330*7fd79137SRobert Mustacchi 
331*7fd79137SRobert Mustacchi           If dw_regnum is Register DW_FRAME_UNDEFINED_VAL
332*7fd79137SRobert Mustacchi              it is not DWARF register number but
333*7fd79137SRobert Mustacchi              a place holder indicating the register has no defined value.
334*7fd79137SRobert Mustacchi           If dw_regnum is Register DW_FRAME_SAME_VAL
335*7fd79137SRobert Mustacchi              it  is not DWARF register number but
336*7fd79137SRobert Mustacchi              a place holder indicating the register has the same
337*7fd79137SRobert Mustacchi              value in the previous frame.
338*7fd79137SRobert Mustacchi            DW_FRAME_UNDEFINED_VAL, DW_FRAME_SAME_VAL and
339*7fd79137SRobert Mustacchi              DW_FRAME_CFA_COL3 are only present at libdwarf runtime.
340*7fd79137SRobert Mustacchi              Never on disk.
341*7fd79137SRobert Mustacchi              DW_FRAME_* Values present on disk are in dwarf.h
342*7fd79137SRobert Mustacchi            Because DW_FRAME_SAME_VAL and DW_FRAME_UNDEFINED_VAL
343*7fd79137SRobert Mustacchi            and DW_FRAME_CFA_COL3 are defineable at runtime
344*7fd79137SRobert Mustacchi            consider the names symbolic in this comment, not absolute.
345*7fd79137SRobert Mustacchi 
346*7fd79137SRobert Mustacchi           Otherwise: the register number is a DWARF register number
347*7fd79137SRobert Mustacchi             (see ABI documents for how this translates to hardware/
348*7fd79137SRobert Mustacchi              software register numbers in the machine hardware)
349*7fd79137SRobert Mustacchi              and the following applies:
350*7fd79137SRobert Mustacchi 
351*7fd79137SRobert Mustacchi            In a cfa-defining entry (rt3_cfa_rule) the regnum is the
352*7fd79137SRobert Mustacchi            CFA 'register number'. Which is some 'normal' register,
353*7fd79137SRobert Mustacchi            not DW_FRAME_CFA_COL3, nor DW_FRAME_SAME_VAL, nor
354*7fd79137SRobert Mustacchi            DW_FRAME_UNDEFINED_VAL.
355*7fd79137SRobert Mustacchi 
356*7fd79137SRobert Mustacchi           If dw_value_type == DW_EXPR_OFFSET (the only  possible case for
357*7fd79137SRobert Mustacchi              dwarf2):
358*7fd79137SRobert Mustacchi             If dw_offset_relevant is non-zero, then
359*7fd79137SRobert Mustacchi                the value is stored at at the address
360*7fd79137SRobert Mustacchi                CFA+N where N is a signed offset.
361*7fd79137SRobert Mustacchi                dw_regnum is the cfa register rule which means
362*7fd79137SRobert Mustacchi                one ignores dw_regnum and uses the CFA appropriately.
363*7fd79137SRobert Mustacchi                So dw_offset_or_block_len is a signed value, really,
364*7fd79137SRobert Mustacchi                and must be printed/evaluated as such.
365*7fd79137SRobert Mustacchi                Rule: Offset(N)
366*7fd79137SRobert Mustacchi             If dw_offset_relevant is zero, then the value of the register
367*7fd79137SRobert Mustacchi                is the value of (DWARF) register number dw_regnum.
368*7fd79137SRobert Mustacchi                Rule: register(R)
369*7fd79137SRobert Mustacchi           If dw_value_type  == DW_EXPR_VAL_OFFSET
370*7fd79137SRobert Mustacchi             the  value of this register is CFA +N where N is a signed offset.
371*7fd79137SRobert Mustacchi             dw_regnum is the cfa register rule which means
372*7fd79137SRobert Mustacchi             one ignores dw_regnum and uses the CFA appropriately.
373*7fd79137SRobert Mustacchi             Rule: val_offset(N)
374*7fd79137SRobert Mustacchi           If dw_value_type  == DW_EXPR_EXPRESSION
375*7fd79137SRobert Mustacchi             The value of the register is the value at the address
376*7fd79137SRobert Mustacchi             computed by evaluating the DWARF expression E.
377*7fd79137SRobert Mustacchi             Rule: expression(E)
378*7fd79137SRobert Mustacchi             The expression E byte stream is pointed to by dw_block_ptr.
379*7fd79137SRobert Mustacchi             The expression length in bytes is given by
380*7fd79137SRobert Mustacchi             dw_offset_or_block_len.
381*7fd79137SRobert Mustacchi           If dw_value_type  == DW_EXPR_VAL_EXPRESSION
382*7fd79137SRobert Mustacchi             The value of the register is the value
383*7fd79137SRobert Mustacchi             computed by evaluating the DWARF expression E.
384*7fd79137SRobert Mustacchi             Rule: val_expression(E)
385*7fd79137SRobert Mustacchi             The expression E byte stream is pointed to by dw_block_ptr.
386*7fd79137SRobert Mustacchi             The expression length in bytes is given by
387*7fd79137SRobert Mustacchi             dw_offset_or_block_len.
388*7fd79137SRobert Mustacchi           Other values of dw_value_type are an error.
389*7fd79137SRobert Mustacchi         */
390*7fd79137SRobert Mustacchi     Dwarf_Small         dw_offset_relevant;
391*7fd79137SRobert Mustacchi     Dwarf_Small         dw_value_type;
392*7fd79137SRobert Mustacchi     Dwarf_Half          dw_regnum;
393*7fd79137SRobert Mustacchi     Dwarf_Unsigned      dw_offset_or_block_len;
394*7fd79137SRobert Mustacchi     Dwarf_Ptr           dw_block_ptr;
395*7fd79137SRobert Mustacchi 
396*7fd79137SRobert Mustacchi }Dwarf_Regtable_Entry3;
397*7fd79137SRobert Mustacchi 
398*7fd79137SRobert Mustacchi /* For the DWARF3 version, moved the DW_FRAME_CFA_COL
399*7fd79137SRobert Mustacchi    out of the array and into its own struct.
400*7fd79137SRobert Mustacchi    Having it part of the array is not very easy to work
401*7fd79137SRobert Mustacchi    with from a portability point of view: changing
402*7fd79137SRobert Mustacchi    the number for every architecture is a pain (if one fails
403*7fd79137SRobert Mustacchi    to set it correctly a register rule gets clobbered when
404*7fd79137SRobert Mustacchi    setting CFA).  With MIPS it just happened to be easy to use
405*7fd79137SRobert Mustacchi    DW_FRAME_CFA_COL (it was wrong conceptually but it was easy...).
406*7fd79137SRobert Mustacchi 
407*7fd79137SRobert Mustacchi    rt3_rules and rt3_reg_table_size must be filled in before
408*7fd79137SRobert Mustacchi    calling libdwarf.  Filled in with a pointer to an array
409*7fd79137SRobert Mustacchi    (pointer and array  set up by the calling application)
410*7fd79137SRobert Mustacchi    of rt3_reg_table_size Dwarf_Regtable_Entry3_s structs.
411*7fd79137SRobert Mustacchi    libdwarf does not allocate or deallocate space for the
412*7fd79137SRobert Mustacchi    rules, you must do so.   libdwarf will initialize the
413*7fd79137SRobert Mustacchi    contents rules array, you do not need to do so (though
414*7fd79137SRobert Mustacchi    if you choose to initialize the array somehow that is ok:
415*7fd79137SRobert Mustacchi    libdwarf will overwrite your initializations with its own).
416*7fd79137SRobert Mustacchi 
417*7fd79137SRobert Mustacchi */
418*7fd79137SRobert Mustacchi typedef struct Dwarf_Regtable3_s {
419*7fd79137SRobert Mustacchi     struct Dwarf_Regtable_Entry3_s   rt3_cfa_rule;
420*7fd79137SRobert Mustacchi 
421*7fd79137SRobert Mustacchi     Dwarf_Half                       rt3_reg_table_size;
422*7fd79137SRobert Mustacchi     struct Dwarf_Regtable_Entry3_s * rt3_rules;
423*7fd79137SRobert Mustacchi } Dwarf_Regtable3;
424*7fd79137SRobert Mustacchi 
425*7fd79137SRobert Mustacchi 
426*7fd79137SRobert Mustacchi /* Use for DW_EPXR_STANDARD., DW_EXPR_VAL_OFFSET.
427*7fd79137SRobert Mustacchi    Returns DW_DLV_OK if the value is available.
428*7fd79137SRobert Mustacchi    If DW_DLV_OK returns the regnum and offset thru the pointers
429*7fd79137SRobert Mustacchi    (which the consumer must use appropriately).
430*7fd79137SRobert Mustacchi */
431*7fd79137SRobert Mustacchi int dwarf_frame_get_reg_register(struct Dwarf_Regtable_Entry3_s *reg_in,
432*7fd79137SRobert Mustacchi     Dwarf_Small *offset_relevant,
433*7fd79137SRobert Mustacchi     Dwarf_Half *regnum_out,
434*7fd79137SRobert Mustacchi     Dwarf_Signed *offset_out);
435*7fd79137SRobert Mustacchi 
436*7fd79137SRobert Mustacchi /* Use for DW_EXPR_EXPRESSION, DW_EXPR_VAL_EXPRESSION.
437*7fd79137SRobert Mustacchi    Returns DW_DLV_OK if the value is available.
438*7fd79137SRobert Mustacchi    The caller must pass in the address of a valid
439*7fd79137SRobert Mustacchi    Dwarf_Block (the caller need not initialize it).
440*7fd79137SRobert Mustacchi */
441*7fd79137SRobert Mustacchi int dwarf_frame_get_reg_expression(struct Dwarf_Regtable_Entry3_s *reg_in,
442*7fd79137SRobert Mustacchi     Dwarf_Block *block_out);
443*7fd79137SRobert Mustacchi 
444*7fd79137SRobert Mustacchi 
445*7fd79137SRobert Mustacchi /* For DW_DLC_SYMBOLIC_RELOCATIONS output to caller
446*7fd79137SRobert Mustacchi    v2, adding drd_length: some relocations are 4 and
447*7fd79137SRobert Mustacchi    some 8 bytes (pointers are 8, section offsets 4) in
448*7fd79137SRobert Mustacchi    some dwarf environments. (MIPS relocations are all one
449*7fd79137SRobert Mustacchi    size in any given ABI.) Changing drd_type to an unsigned char
450*7fd79137SRobert Mustacchi    to keep struct size down.
451*7fd79137SRobert Mustacchi */
452*7fd79137SRobert Mustacchi enum Dwarf_Rel_Type {
453*7fd79137SRobert Mustacchi         dwarf_drt_none,        /* Should not get to caller */
454*7fd79137SRobert Mustacchi         dwarf_drt_data_reloc,  /* Simple normal relocation. */
455*7fd79137SRobert Mustacchi         dwarf_drt_segment_rel, /* Special reloc, exceptions. */
456*7fd79137SRobert Mustacchi         /* dwarf_drt_first_of_length_pair  and drt_second
457*7fd79137SRobert Mustacchi            are for for the  .word end - begin case. */
458*7fd79137SRobert Mustacchi         dwarf_drt_first_of_length_pair,
459*7fd79137SRobert Mustacchi         dwarf_drt_second_of_length_pair
460*7fd79137SRobert Mustacchi };
461*7fd79137SRobert Mustacchi 
462*7fd79137SRobert Mustacchi typedef struct Dwarf_P_Marker_s * Dwarf_P_Marker;
463*7fd79137SRobert Mustacchi struct Dwarf_P_Marker_s {
464*7fd79137SRobert Mustacchi     Dwarf_Unsigned ma_marker;
465*7fd79137SRobert Mustacchi     Dwarf_Unsigned ma_offset;
466*7fd79137SRobert Mustacchi };
467*7fd79137SRobert Mustacchi 
468*7fd79137SRobert Mustacchi typedef struct Dwarf_Relocation_Data_s  * Dwarf_Relocation_Data;
469*7fd79137SRobert Mustacchi struct Dwarf_Relocation_Data_s {
470*7fd79137SRobert Mustacchi     unsigned char drd_type;   /* Cast to/from Dwarf_Rel_Type
471*7fd79137SRobert Mustacchi                                to keep size small in struct. */
472*7fd79137SRobert Mustacchi     unsigned char drd_length; /* Length in bytes of data being
473*7fd79137SRobert Mustacchi                                relocated. 4 for 32bit data,
474*7fd79137SRobert Mustacchi                                8 for 64bit data. */
475*7fd79137SRobert Mustacchi     Dwarf_Unsigned       drd_offset; /* Where the data to reloc is. */
476*7fd79137SRobert Mustacchi     Dwarf_Unsigned       drd_symbol_index;
477*7fd79137SRobert Mustacchi };
478*7fd79137SRobert Mustacchi 
479*7fd79137SRobert Mustacchi typedef struct Dwarf_P_String_Attr_s  * Dwarf_P_String_Attr;
480*7fd79137SRobert Mustacchi struct Dwarf_P_String_Attr_s {
481*7fd79137SRobert Mustacchi     Dwarf_Unsigned        sa_offset;  /* Offset of string attribute data */
482*7fd79137SRobert Mustacchi     Dwarf_Unsigned        sa_nbytes;
483*7fd79137SRobert Mustacchi };
484*7fd79137SRobert Mustacchi 
485*7fd79137SRobert Mustacchi 
486*7fd79137SRobert Mustacchi /* Opaque types for Consumer Library. */
487*7fd79137SRobert Mustacchi typedef struct Dwarf_Debug_s*      Dwarf_Debug;
488*7fd79137SRobert Mustacchi typedef struct Dwarf_Die_s*        Dwarf_Die;
489*7fd79137SRobert Mustacchi typedef struct Dwarf_Line_s*       Dwarf_Line;
490*7fd79137SRobert Mustacchi typedef struct Dwarf_Global_s*     Dwarf_Global;
491*7fd79137SRobert Mustacchi typedef struct Dwarf_Func_s*       Dwarf_Func;
492*7fd79137SRobert Mustacchi typedef struct Dwarf_Type_s*       Dwarf_Type;
493*7fd79137SRobert Mustacchi typedef struct Dwarf_Var_s*        Dwarf_Var;
494*7fd79137SRobert Mustacchi typedef struct Dwarf_Weak_s*       Dwarf_Weak;
495*7fd79137SRobert Mustacchi typedef struct Dwarf_Error_s*      Dwarf_Error;
496*7fd79137SRobert Mustacchi typedef struct Dwarf_Attribute_s*  Dwarf_Attribute;
497*7fd79137SRobert Mustacchi typedef struct Dwarf_Abbrev_s*       Dwarf_Abbrev;
498*7fd79137SRobert Mustacchi typedef struct Dwarf_Fde_s*         Dwarf_Fde;
499*7fd79137SRobert Mustacchi typedef struct Dwarf_Cie_s*         Dwarf_Cie;
500*7fd79137SRobert Mustacchi typedef struct Dwarf_Arange_s*       Dwarf_Arange;
501*7fd79137SRobert Mustacchi 
502*7fd79137SRobert Mustacchi /* Opaque types for Producer Library. */
503*7fd79137SRobert Mustacchi typedef struct Dwarf_P_Debug_s*           Dwarf_P_Debug;
504*7fd79137SRobert Mustacchi typedef struct Dwarf_P_Die_s*           Dwarf_P_Die;
505*7fd79137SRobert Mustacchi typedef struct Dwarf_P_Attribute_s*    Dwarf_P_Attribute;
506*7fd79137SRobert Mustacchi typedef struct Dwarf_P_Fde_s*        Dwarf_P_Fde;
507*7fd79137SRobert Mustacchi typedef struct Dwarf_P_Expr_s*        Dwarf_P_Expr;
508*7fd79137SRobert Mustacchi typedef Dwarf_Unsigned                Dwarf_Tag;
509*7fd79137SRobert Mustacchi 
510*7fd79137SRobert Mustacchi 
511*7fd79137SRobert Mustacchi /* error handler function
512*7fd79137SRobert Mustacchi */
513*7fd79137SRobert Mustacchi typedef void  (*Dwarf_Handler)(Dwarf_Error /*error*/, Dwarf_Ptr /*errarg*/);
514*7fd79137SRobert Mustacchi 
515*7fd79137SRobert Mustacchi 
516*7fd79137SRobert Mustacchi /* Begin libdwarf Object File Interface declarations.
517*7fd79137SRobert Mustacchi 
518*7fd79137SRobert Mustacchi As of February 2008 there are multiple dwarf_reader object access
519*7fd79137SRobert Mustacchi initialization methods available:
520*7fd79137SRobert Mustacchi The traditional dwarf_elf_init() and dwarf_init()  and dwarf_finish()
521*7fd79137SRobert Mustacchi     which assume libelf and POSIX file access.
522*7fd79137SRobert Mustacchi An object-file and library agnostic dwarf_object_init() and dwarf_object_finish()
523*7fd79137SRobert Mustacchi     which allow the coder to provide object access routines
524*7fd79137SRobert Mustacchi     abstracting away the elf interface.  So there is no dependence in the
525*7fd79137SRobert Mustacchi     reader code on the object format and no dependence on libelf.
526*7fd79137SRobert Mustacchi     See the code in dwarf_elf_access.c  and dwarf_original_elf_init.c
527*7fd79137SRobert Mustacchi     to see an example of initializing the structures mentioned below.
528*7fd79137SRobert Mustacchi 
529*7fd79137SRobert Mustacchi Projects using dwarf_elf_init() or dwarf_init() can ignore
530*7fd79137SRobert Mustacchi the Dwarf_Obj_Access* structures entirely as all these details
531*7fd79137SRobert Mustacchi are completed for you.
532*7fd79137SRobert Mustacchi 
533*7fd79137SRobert Mustacchi */
534*7fd79137SRobert Mustacchi 
535*7fd79137SRobert Mustacchi typedef struct Dwarf_Obj_Access_Interface_s   Dwarf_Obj_Access_Interface;
536*7fd79137SRobert Mustacchi typedef struct Dwarf_Obj_Access_Methods_s     Dwarf_Obj_Access_Methods;
537*7fd79137SRobert Mustacchi typedef struct Dwarf_Obj_Access_Section_s     Dwarf_Obj_Access_Section;
538*7fd79137SRobert Mustacchi 
539*7fd79137SRobert Mustacchi 
540*7fd79137SRobert Mustacchi /* Used in the get_section interface function
541*7fd79137SRobert Mustacchi    in Dwarf_Obj_Access_Section_s.  Since libdwarf
542*7fd79137SRobert Mustacchi    depends on standard DWARF section names an object
543*7fd79137SRobert Mustacchi    format that has no such names (but has some
544*7fd79137SRobert Mustacchi    method of setting up 'sections equivalents')
545*7fd79137SRobert Mustacchi    must arrange to return standard DWARF section
546*7fd79137SRobert Mustacchi    names in the 'name' field.  libdwarf does
547*7fd79137SRobert Mustacchi    not free the strings in 'name'. */
548*7fd79137SRobert Mustacchi struct Dwarf_Obj_Access_Section_s {
549*7fd79137SRobert Mustacchi     Dwarf_Addr     addr;
550*7fd79137SRobert Mustacchi     Dwarf_Unsigned size;
551*7fd79137SRobert Mustacchi     const char*    name;
552*7fd79137SRobert Mustacchi     /* Set link to zero if it is meaningless.  If non-zero
553*7fd79137SRobert Mustacchi        it should be a link to a rela section or from symtab
554*7fd79137SRobert Mustacchi        to strtab.  In Elf it is sh_link. */
555*7fd79137SRobert Mustacchi     Dwarf_Unsigned link;
556*7fd79137SRobert Mustacchi };
557*7fd79137SRobert Mustacchi 
558*7fd79137SRobert Mustacchi /* Returned by the get_endianness function in
559*7fd79137SRobert Mustacchi    Dwarf_Obj_Access_Methods_s. */
560*7fd79137SRobert Mustacchi typedef enum {
561*7fd79137SRobert Mustacchi     DW_OBJECT_MSB,
562*7fd79137SRobert Mustacchi     DW_OBJECT_LSB
563*7fd79137SRobert Mustacchi } Dwarf_Endianness;
564*7fd79137SRobert Mustacchi 
565*7fd79137SRobert Mustacchi /* The functions we need to access object data from libdwarf are declared here.
566*7fd79137SRobert Mustacchi 
567*7fd79137SRobert Mustacchi    In these function pointer declarations
568*7fd79137SRobert Mustacchi    'void *obj' is intended to be a pointer (the object field in
569*7fd79137SRobert Mustacchi    Dwarf_Obj_Access_Interface_s)
570*7fd79137SRobert Mustacchi    that hides the library-specific and object-specific data that makes
571*7fd79137SRobert Mustacchi    it possible to handle multiple object formats and multiple libraries.
572*7fd79137SRobert Mustacchi    It's not required that one handles multiple such in a single libdwarf
573*7fd79137SRobert Mustacchi    archive/shared-library (but not ruled out either).
574*7fd79137SRobert Mustacchi    See  dwarf_elf_object_access_internals_t and dwarf_elf_access.c
575*7fd79137SRobert Mustacchi    for an example.
576*7fd79137SRobert Mustacchi 
577*7fd79137SRobert Mustacchi */
578*7fd79137SRobert Mustacchi struct Dwarf_Obj_Access_Methods_s {
579*7fd79137SRobert Mustacchi     /**
580*7fd79137SRobert Mustacchi      * get_section_info
581*7fd79137SRobert Mustacchi      *
582*7fd79137SRobert Mustacchi      * Get address, size, and name info about a section.
583*7fd79137SRobert Mustacchi      *
584*7fd79137SRobert Mustacchi      * Parameters
585*7fd79137SRobert Mustacchi      * section_index - Zero-based index.
586*7fd79137SRobert Mustacchi      * return_section - Pointer to a structure in which section info
587*7fd79137SRobert Mustacchi      *   will be placed.   Caller must provide a valid pointer to a
588*7fd79137SRobert Mustacchi      *   structure area.  The structure's contents will be overwritten
589*7fd79137SRobert Mustacchi      *   by the call to get_section_info.
590*7fd79137SRobert Mustacchi      * error - A pointer to an integer in which an error code may be stored.
591*7fd79137SRobert Mustacchi      *
592*7fd79137SRobert Mustacchi      * Return
593*7fd79137SRobert Mustacchi      * DW_DLV_OK - Everything ok.
594*7fd79137SRobert Mustacchi      * DW_DLV_ERROR - Error occurred. Use 'error' to determine the
595*7fd79137SRobert Mustacchi      *    libdwarf defined error.
596*7fd79137SRobert Mustacchi      * DW_DLV_NO_ENTRY - No such section.
597*7fd79137SRobert Mustacchi      */
598*7fd79137SRobert Mustacchi     int    (*get_section_info)(void* obj, Dwarf_Half section_index,
599*7fd79137SRobert Mustacchi         Dwarf_Obj_Access_Section* return_section, int* error);
600*7fd79137SRobert Mustacchi     /**
601*7fd79137SRobert Mustacchi      * get_byte_order
602*7fd79137SRobert Mustacchi      *
603*7fd79137SRobert Mustacchi      * Get whether the object file represented by this interface is big-endian
604*7fd79137SRobert Mustacchi      * (DW_OBJECT_MSB) or little endian (DW_OBJECT_LSB).
605*7fd79137SRobert Mustacchi      *
606*7fd79137SRobert Mustacchi      * Parameters
607*7fd79137SRobert Mustacchi      * obj - Equivalent to 'this' in OO languages.
608*7fd79137SRobert Mustacchi      *
609*7fd79137SRobert Mustacchi      * Return
610*7fd79137SRobert Mustacchi      * Endianness of object. Cannot fail.
611*7fd79137SRobert Mustacchi      */
612*7fd79137SRobert Mustacchi     Dwarf_Endianness  (*get_byte_order)(void* obj);
613*7fd79137SRobert Mustacchi     /**
614*7fd79137SRobert Mustacchi      * get_length_size
615*7fd79137SRobert Mustacchi      *
616*7fd79137SRobert Mustacchi      * Get the size of a length field in the underlying object file.
617*7fd79137SRobert Mustacchi      * libdwarf currently supports * 4 and 8 byte sizes, but may
618*7fd79137SRobert Mustacchi      * support larger in the future.
619*7fd79137SRobert Mustacchi      * Perhaps the return type should be an enumeration?
620*7fd79137SRobert Mustacchi      *
621*7fd79137SRobert Mustacchi      * Parameters
622*7fd79137SRobert Mustacchi      * obj - Equivalent to 'this' in OO languages.
623*7fd79137SRobert Mustacchi      *
624*7fd79137SRobert Mustacchi      * Return
625*7fd79137SRobert Mustacchi      * Size of length. Cannot fail.
626*7fd79137SRobert Mustacchi      */
627*7fd79137SRobert Mustacchi     Dwarf_Small   (*get_length_size)(void* obj);
628*7fd79137SRobert Mustacchi     /**
629*7fd79137SRobert Mustacchi      * get_pointer_size
630*7fd79137SRobert Mustacchi      *
631*7fd79137SRobert Mustacchi      * Get the size of a pointer field in the underlying object file.
632*7fd79137SRobert Mustacchi      * libdwarf currently supports  4 and 8 byte sizes.
633*7fd79137SRobert Mustacchi      * Perhaps the return type should be an enumeration?
634*7fd79137SRobert Mustacchi 
635*7fd79137SRobert Mustacchi      * Return
636*7fd79137SRobert Mustacchi      * Size of pointer. Cannot fail.
637*7fd79137SRobert Mustacchi      */
638*7fd79137SRobert Mustacchi     Dwarf_Small   (*get_pointer_size)(void* obj);
639*7fd79137SRobert Mustacchi     /**
640*7fd79137SRobert Mustacchi      * get_section_count
641*7fd79137SRobert Mustacchi      *
642*7fd79137SRobert Mustacchi      * Get the number of sections in the object file.
643*7fd79137SRobert Mustacchi      *
644*7fd79137SRobert Mustacchi      * Parameters
645*7fd79137SRobert Mustacchi      *
646*7fd79137SRobert Mustacchi      * Return
647*7fd79137SRobert Mustacchi      * Number of sections
648*7fd79137SRobert Mustacchi      */
649*7fd79137SRobert Mustacchi     Dwarf_Unsigned  (*get_section_count)(void* obj);
650*7fd79137SRobert Mustacchi     /**
651*7fd79137SRobert Mustacchi      * load_section
652*7fd79137SRobert Mustacchi      *
653*7fd79137SRobert Mustacchi      * Get a pointer to an array of bytes that represent the section.
654*7fd79137SRobert Mustacchi      *
655*7fd79137SRobert Mustacchi      * Parameters
656*7fd79137SRobert Mustacchi      * section_index - Zero-based index.
657*7fd79137SRobert Mustacchi      * return_data - The address of a pointer to which the section data block
658*7fd79137SRobert Mustacchi      *   will be assigned.
659*7fd79137SRobert Mustacchi      * error - Pointer to an integer for returning libdwarf-defined
660*7fd79137SRobert Mustacchi      *   error numbers.
661*7fd79137SRobert Mustacchi      *
662*7fd79137SRobert Mustacchi      * Return
663*7fd79137SRobert Mustacchi      * DW_DLV_OK - No error.
664*7fd79137SRobert Mustacchi      * DW_DLV_ERROR - Error. Use 'error' to indicate a libdwarf-defined
665*7fd79137SRobert Mustacchi      *    error number.
666*7fd79137SRobert Mustacchi      * DW_DLV_NO_ENTRY - No such section.
667*7fd79137SRobert Mustacchi      */
668*7fd79137SRobert Mustacchi     int    (*load_section)(void* obj, Dwarf_Half section_index,
669*7fd79137SRobert Mustacchi         Dwarf_Small** return_data, int* error);
670*7fd79137SRobert Mustacchi 
671*7fd79137SRobert Mustacchi    /**
672*7fd79137SRobert Mustacchi     * relocate_a_section
673*7fd79137SRobert Mustacchi     * If relocations are not supported leave this pointer NULL.
674*7fd79137SRobert Mustacchi     *
675*7fd79137SRobert Mustacchi     * Get a pointer to an array of bytes that represent the section.
676*7fd79137SRobert Mustacchi     *
677*7fd79137SRobert Mustacchi     * Parameters
678*7fd79137SRobert Mustacchi     * section_index - Zero-based index of the section to be relocated.
679*7fd79137SRobert Mustacchi     * error - Pointer to an integer for returning libdwarf-defined
680*7fd79137SRobert Mustacchi     *   error numbers.
681*7fd79137SRobert Mustacchi     *
682*7fd79137SRobert Mustacchi     * Return
683*7fd79137SRobert Mustacchi     * DW_DLV_OK - No error.
684*7fd79137SRobert Mustacchi     * DW_DLV_ERROR - Error. Use 'error' to indicate a libdwarf-defined
685*7fd79137SRobert Mustacchi     *    error number.
686*7fd79137SRobert Mustacchi     * DW_DLV_NO_ENTRY - No such section.
687*7fd79137SRobert Mustacchi     */
688*7fd79137SRobert Mustacchi     int    (*relocate_a_section)(void* obj, Dwarf_Half section_index,
689*7fd79137SRobert Mustacchi          Dwarf_Debug dbg,
690*7fd79137SRobert Mustacchi          int* error);
691*7fd79137SRobert Mustacchi 
692*7fd79137SRobert Mustacchi };
693*7fd79137SRobert Mustacchi 
694*7fd79137SRobert Mustacchi 
695*7fd79137SRobert Mustacchi 
696*7fd79137SRobert Mustacchi /* These structures are allocated and deallocated by your code
697*7fd79137SRobert Mustacchi    when you are using the libdwarf Object File Interface
698*7fd79137SRobert Mustacchi    [dwarf_object_init() and dwarf_object_finish()] directly.
699*7fd79137SRobert Mustacchi    dwarf_object_finish() does not free
700*7fd79137SRobert Mustacchi    struct Dwarf_Obj_Access_Interface_s or its content.
701*7fd79137SRobert Mustacchi    (libdwarf does record a pointer to this struct: you must
702*7fd79137SRobert Mustacchi    ensure that pointer remains valid for as long as
703*7fd79137SRobert Mustacchi    a libdwarf instance is open (meaning
704*7fd79137SRobert Mustacchi    after dwarf_init() and before dwarf_finish()).
705*7fd79137SRobert Mustacchi 
706*7fd79137SRobert Mustacchi    If you are reading Elf objects and libelf use dwarf_init()
707*7fd79137SRobert Mustacchi    or dwarf_elf_init() which take care of these details.
708*7fd79137SRobert Mustacchi */
709*7fd79137SRobert Mustacchi struct Dwarf_Obj_Access_Interface_s {
710*7fd79137SRobert Mustacchi     /* object is a void* as it hides the data the object access routines
711*7fd79137SRobert Mustacchi        need (which varies by library in use and object format).
712*7fd79137SRobert Mustacchi     */
713*7fd79137SRobert Mustacchi     void* object;
714*7fd79137SRobert Mustacchi     const Dwarf_Obj_Access_Methods * methods;
715*7fd79137SRobert Mustacchi };
716*7fd79137SRobert Mustacchi 
717*7fd79137SRobert Mustacchi /* End libdwarf Object File Interface */
718*7fd79137SRobert Mustacchi 
719*7fd79137SRobert Mustacchi /*
720*7fd79137SRobert Mustacchi     Dwarf_dealloc() alloc_type arguments.
721*7fd79137SRobert Mustacchi     Argument points to:
722*7fd79137SRobert Mustacchi */
723*7fd79137SRobert Mustacchi #define DW_DLA_STRING          0x01     /* char* */
724*7fd79137SRobert Mustacchi #define DW_DLA_LOC             0x02     /* Dwarf_Loc */
725*7fd79137SRobert Mustacchi #define DW_DLA_LOCDESC         0x03     /* Dwarf_Locdesc */
726*7fd79137SRobert Mustacchi #define DW_DLA_ELLIST          0x04     /* Dwarf_Ellist (not used)*/
727*7fd79137SRobert Mustacchi #define DW_DLA_BOUNDS          0x05     /* Dwarf_Bounds (not used) */
728*7fd79137SRobert Mustacchi #define DW_DLA_BLOCK           0x06     /* Dwarf_Block */
729*7fd79137SRobert Mustacchi #define DW_DLA_DEBUG           0x07     /* Dwarf_Debug */
730*7fd79137SRobert Mustacchi #define DW_DLA_DIE             0x08     /* Dwarf_Die */
731*7fd79137SRobert Mustacchi #define DW_DLA_LINE            0x09     /* Dwarf_Line */
732*7fd79137SRobert Mustacchi #define DW_DLA_ATTR            0x0a     /* Dwarf_Attribute */
733*7fd79137SRobert Mustacchi #define DW_DLA_TYPE            0x0b     /* Dwarf_Type  (not used) */
734*7fd79137SRobert Mustacchi #define DW_DLA_SUBSCR          0x0c     /* Dwarf_Subscr (not used) */
735*7fd79137SRobert Mustacchi #define DW_DLA_GLOBAL          0x0d     /* Dwarf_Global */
736*7fd79137SRobert Mustacchi #define DW_DLA_ERROR           0x0e     /* Dwarf_Error */
737*7fd79137SRobert Mustacchi #define DW_DLA_LIST            0x0f     /* a list */
738*7fd79137SRobert Mustacchi #define DW_DLA_LINEBUF         0x10     /* Dwarf_Line* (not used) */
739*7fd79137SRobert Mustacchi #define DW_DLA_ARANGE          0x11     /* Dwarf_Arange */
740*7fd79137SRobert Mustacchi #define DW_DLA_ABBREV          0x12      /* Dwarf_Abbrev */
741*7fd79137SRobert Mustacchi #define DW_DLA_FRAME_OP        0x13      /* Dwarf_Frame_Op */
742*7fd79137SRobert Mustacchi #define DW_DLA_CIE             0x14     /* Dwarf_Cie */
743*7fd79137SRobert Mustacchi #define DW_DLA_FDE             0x15     /* Dwarf_Fde */
744*7fd79137SRobert Mustacchi #define DW_DLA_LOC_BLOCK       0x16     /* Dwarf_Loc Block (not used) */
745*7fd79137SRobert Mustacchi #define DW_DLA_FRAME_BLOCK     0x17     /* Dwarf_Frame Block (not used) */
746*7fd79137SRobert Mustacchi #define DW_DLA_FUNC            0x18     /* Dwarf_Func */
747*7fd79137SRobert Mustacchi #define DW_DLA_TYPENAME        0x19     /* Dwarf_Type */
748*7fd79137SRobert Mustacchi #define DW_DLA_VAR             0x1a     /* Dwarf_Var */
749*7fd79137SRobert Mustacchi #define DW_DLA_WEAK            0x1b     /* Dwarf_Weak */
750*7fd79137SRobert Mustacchi #define DW_DLA_ADDR            0x1c     /* Dwarf_Addr sized entries */
751*7fd79137SRobert Mustacchi #define DW_DLA_RANGES          0x1d     /* Dwarf_Ranges */
752*7fd79137SRobert Mustacchi 
753*7fd79137SRobert Mustacchi /* The augmenter string for CIE */
754*7fd79137SRobert Mustacchi #define DW_CIE_AUGMENTER_STRING_V0              "z"
755*7fd79137SRobert Mustacchi 
756*7fd79137SRobert Mustacchi /* dwarf_init() access arguments
757*7fd79137SRobert Mustacchi */
758*7fd79137SRobert Mustacchi #define DW_DLC_READ        0        /* read only access */
759*7fd79137SRobert Mustacchi #define DW_DLC_WRITE       1        /* write only access */
760*7fd79137SRobert Mustacchi #define DW_DLC_RDWR        2        /* read/write access NOT SUPPORTED*/
761*7fd79137SRobert Mustacchi 
762*7fd79137SRobert Mustacchi /* pro_init() access flag modifiers
763*7fd79137SRobert Mustacchi    If HAVE_DWARF2_99_EXTENSION is defined at libdwarf build time
764*7fd79137SRobert Mustacchi    and DW_DLC_OFFSET_SIZE_64  is passed in pro_init() flags then the DWARF3
765*7fd79137SRobert Mustacchi    64 bit offset extension is used to generate 64 bit offsets.
766*7fd79137SRobert Mustacchi */
767*7fd79137SRobert Mustacchi #define DW_DLC_SIZE_64     0x40000000 /* 32-bit address-size target */
768*7fd79137SRobert Mustacchi #define DW_DLC_SIZE_32     0x20000000 /* 64-bit address-size target */
769*7fd79137SRobert Mustacchi #define DW_DLC_OFFSET_SIZE_64 0x10000000 /* 64-bit offset-size DWARF */
770*7fd79137SRobert Mustacchi 
771*7fd79137SRobert Mustacchi /* dwarf_pro_init() access flag modifiers
772*7fd79137SRobert Mustacchi */
773*7fd79137SRobert Mustacchi #define DW_DLC_ISA_MIPS             0x00000000 /* MIPS target */
774*7fd79137SRobert Mustacchi #define DW_DLC_ISA_IA64             0x01000000 /* IA64 target */
775*7fd79137SRobert Mustacchi #define DW_DLC_STREAM_RELOCATIONS   0x02000000 /* Old style binary relocs */
776*7fd79137SRobert Mustacchi 
777*7fd79137SRobert Mustacchi     /* Usable with assembly output because it is up to the producer to
778*7fd79137SRobert Mustacchi        deal with locations in whatever manner the producer code wishes.
779*7fd79137SRobert Mustacchi        Possibly emitting text an assembler will recognize. */
780*7fd79137SRobert Mustacchi #define DW_DLC_SYMBOLIC_RELOCATIONS 0x04000000
781*7fd79137SRobert Mustacchi 
782*7fd79137SRobert Mustacchi #define DW_DLC_TARGET_BIGENDIAN     0x08000000 /* Big    endian target */
783*7fd79137SRobert Mustacchi #define DW_DLC_TARGET_LITTLEENDIAN  0x00100000 /* Little endian target */
784*7fd79137SRobert Mustacchi 
785*7fd79137SRobert Mustacchi #if 0
786*7fd79137SRobert Mustacchi   /*
787*7fd79137SRobert Mustacchi    The libdwarf producer interfaces jumble these two semantics together in
788*7fd79137SRobert Mustacchi    confusing ways.  We *should* have flags like these...
789*7fd79137SRobert Mustacchi    But changing the code means a lot of diffs.  So for now,
790*7fd79137SRobert Mustacchi    we leave things as they are
791*7fd79137SRobert Mustacchi   */
792*7fd79137SRobert Mustacchi   #define DW_DLC_SUN_OFFSET32        0x00010000 /* use 32-bit sec offsets */
793*7fd79137SRobert Mustacchi   #define DW_DLC_SUN_OFFSET64        0x00020000 /* use 64-bit sec offsets */
794*7fd79137SRobert Mustacchi   #define DW_DLC_SUN_POINTER32        0x00040000 /* use 4 for address_size */
795*7fd79137SRobert Mustacchi   #define DW_DLC_SUN_POINTER64        0x00080000 /* use 8 for address_size */
796*7fd79137SRobert Mustacchi #endif
797*7fd79137SRobert Mustacchi 
798*7fd79137SRobert Mustacchi /* dwarf_pcline() slide arguments
799*7fd79137SRobert Mustacchi */
800*7fd79137SRobert Mustacchi #define DW_DLS_BACKWARD   -1       /* slide backward to find line */
801*7fd79137SRobert Mustacchi #define DW_DLS_NOSLIDE     0       /* match exactly without sliding */
802*7fd79137SRobert Mustacchi #define DW_DLS_FORWARD     1       /* slide forward to find line */
803*7fd79137SRobert Mustacchi 
804*7fd79137SRobert Mustacchi /* libdwarf error numbers
805*7fd79137SRobert Mustacchi */
806*7fd79137SRobert Mustacchi #define DW_DLE_NE          0     /* no error */
807*7fd79137SRobert Mustacchi #define DW_DLE_VMM         1     /* dwarf format/library version mismatch */
808*7fd79137SRobert Mustacchi #define DW_DLE_MAP         2     /* memory map failure */
809*7fd79137SRobert Mustacchi #define DW_DLE_LEE         3     /* libelf error */
810*7fd79137SRobert Mustacchi #define DW_DLE_NDS         4     /* no debug section */
811*7fd79137SRobert Mustacchi #define DW_DLE_NLS         5     /* no line section */
812*7fd79137SRobert Mustacchi #define DW_DLE_ID          6     /* invalid descriptor for query */
813*7fd79137SRobert Mustacchi #define DW_DLE_IOF         7     /* I/O failure */
814*7fd79137SRobert Mustacchi #define DW_DLE_MAF         8     /* memory allocation failure */
815*7fd79137SRobert Mustacchi #define DW_DLE_IA          9     /* invalid argument */
816*7fd79137SRobert Mustacchi #define DW_DLE_MDE         10     /* mangled debugging entry */
817*7fd79137SRobert Mustacchi #define DW_DLE_MLE         11     /* mangled line number entry */
818*7fd79137SRobert Mustacchi #define DW_DLE_FNO         12     /* file not open */
819*7fd79137SRobert Mustacchi #define DW_DLE_FNR         13     /* file not a regular file */
820*7fd79137SRobert Mustacchi #define DW_DLE_FWA         14     /* file open with wrong access */
821*7fd79137SRobert Mustacchi #define DW_DLE_NOB         15     /* not an object file */
822*7fd79137SRobert Mustacchi #define DW_DLE_MOF         16     /* mangled object file header */
823*7fd79137SRobert Mustacchi #define DW_DLE_EOLL        17     /* end of location list entries */
824*7fd79137SRobert Mustacchi #define DW_DLE_NOLL        18     /* no location list section */
825*7fd79137SRobert Mustacchi #define DW_DLE_BADOFF      19     /* Invalid offset */
826*7fd79137SRobert Mustacchi #define DW_DLE_EOS         20     /* end of section  */
827*7fd79137SRobert Mustacchi #define DW_DLE_ATRUNC      21     /* abbreviations section appears truncated*/
828*7fd79137SRobert Mustacchi #define DW_DLE_BADBITC     22     /* Address size passed to dwarf bad*/
829*7fd79137SRobert Mustacchi                     /* It is not an allowed size (64 or 32) */
830*7fd79137SRobert Mustacchi     /* Error codes defined by the current Libdwarf Implementation. */
831*7fd79137SRobert Mustacchi #define DW_DLE_DBG_ALLOC                        23
832*7fd79137SRobert Mustacchi #define DW_DLE_FSTAT_ERROR                      24
833*7fd79137SRobert Mustacchi #define DW_DLE_FSTAT_MODE_ERROR                 25
834*7fd79137SRobert Mustacchi #define DW_DLE_INIT_ACCESS_WRONG                26
835*7fd79137SRobert Mustacchi #define DW_DLE_ELF_BEGIN_ERROR                  27
836*7fd79137SRobert Mustacchi #define DW_DLE_ELF_GETEHDR_ERROR                28
837*7fd79137SRobert Mustacchi #define DW_DLE_ELF_GETSHDR_ERROR                29
838*7fd79137SRobert Mustacchi #define DW_DLE_ELF_STRPTR_ERROR                 30
839*7fd79137SRobert Mustacchi #define DW_DLE_DEBUG_INFO_DUPLICATE             31
840*7fd79137SRobert Mustacchi #define DW_DLE_DEBUG_INFO_NULL                  32
841*7fd79137SRobert Mustacchi #define DW_DLE_DEBUG_ABBREV_DUPLICATE           33
842*7fd79137SRobert Mustacchi #define DW_DLE_DEBUG_ABBREV_NULL                34
843*7fd79137SRobert Mustacchi #define DW_DLE_DEBUG_ARANGES_DUPLICATE          35
844*7fd79137SRobert Mustacchi #define DW_DLE_DEBUG_ARANGES_NULL               36
845*7fd79137SRobert Mustacchi #define DW_DLE_DEBUG_LINE_DUPLICATE             37
846*7fd79137SRobert Mustacchi #define DW_DLE_DEBUG_LINE_NULL                  38
847*7fd79137SRobert Mustacchi #define DW_DLE_DEBUG_LOC_DUPLICATE              39
848*7fd79137SRobert Mustacchi #define DW_DLE_DEBUG_LOC_NULL                   40
849*7fd79137SRobert Mustacchi #define DW_DLE_DEBUG_MACINFO_DUPLICATE          41
850*7fd79137SRobert Mustacchi #define DW_DLE_DEBUG_MACINFO_NULL               42
851*7fd79137SRobert Mustacchi #define DW_DLE_DEBUG_PUBNAMES_DUPLICATE         43
852*7fd79137SRobert Mustacchi #define DW_DLE_DEBUG_PUBNAMES_NULL              44
853*7fd79137SRobert Mustacchi #define DW_DLE_DEBUG_STR_DUPLICATE              45
854*7fd79137SRobert Mustacchi #define DW_DLE_DEBUG_STR_NULL                   46
855*7fd79137SRobert Mustacchi #define DW_DLE_CU_LENGTH_ERROR                  47
856*7fd79137SRobert Mustacchi #define DW_DLE_VERSION_STAMP_ERROR              48
857*7fd79137SRobert Mustacchi #define DW_DLE_ABBREV_OFFSET_ERROR              49
858*7fd79137SRobert Mustacchi #define DW_DLE_ADDRESS_SIZE_ERROR               50
859*7fd79137SRobert Mustacchi #define DW_DLE_DEBUG_INFO_PTR_NULL              51
860*7fd79137SRobert Mustacchi #define DW_DLE_DIE_NULL                         52
861*7fd79137SRobert Mustacchi #define DW_DLE_STRING_OFFSET_BAD                53
862*7fd79137SRobert Mustacchi #define DW_DLE_DEBUG_LINE_LENGTH_BAD            54
863*7fd79137SRobert Mustacchi #define DW_DLE_LINE_PROLOG_LENGTH_BAD           55
864*7fd79137SRobert Mustacchi #define DW_DLE_LINE_NUM_OPERANDS_BAD            56
865*7fd79137SRobert Mustacchi #define DW_DLE_LINE_SET_ADDR_ERROR              57 /* No longer used. */
866*7fd79137SRobert Mustacchi #define DW_DLE_LINE_EXT_OPCODE_BAD              58
867*7fd79137SRobert Mustacchi #define DW_DLE_DWARF_LINE_NULL                  59
868*7fd79137SRobert Mustacchi #define DW_DLE_INCL_DIR_NUM_BAD                 60
869*7fd79137SRobert Mustacchi #define DW_DLE_LINE_FILE_NUM_BAD                61
870*7fd79137SRobert Mustacchi #define DW_DLE_ALLOC_FAIL                       62
871*7fd79137SRobert Mustacchi #define DW_DLE_NO_CALLBACK_FUNC                 63
872*7fd79137SRobert Mustacchi #define DW_DLE_SECT_ALLOC                       64
873*7fd79137SRobert Mustacchi #define DW_DLE_FILE_ENTRY_ALLOC                 65
874*7fd79137SRobert Mustacchi #define DW_DLE_LINE_ALLOC                       66
875*7fd79137SRobert Mustacchi #define DW_DLE_FPGM_ALLOC                       67
876*7fd79137SRobert Mustacchi #define DW_DLE_INCDIR_ALLOC                     68
877*7fd79137SRobert Mustacchi #define DW_DLE_STRING_ALLOC                     69
878*7fd79137SRobert Mustacchi #define DW_DLE_CHUNK_ALLOC                      70
879*7fd79137SRobert Mustacchi #define DW_DLE_BYTEOFF_ERR                      71
880*7fd79137SRobert Mustacchi #define DW_DLE_CIE_ALLOC                        72
881*7fd79137SRobert Mustacchi #define DW_DLE_FDE_ALLOC                        73
882*7fd79137SRobert Mustacchi #define DW_DLE_REGNO_OVFL                       74
883*7fd79137SRobert Mustacchi #define DW_DLE_CIE_OFFS_ALLOC                   75
884*7fd79137SRobert Mustacchi #define DW_DLE_WRONG_ADDRESS                    76
885*7fd79137SRobert Mustacchi #define DW_DLE_EXTRA_NEIGHBORS                  77
886*7fd79137SRobert Mustacchi #define    DW_DLE_WRONG_TAG                     78
887*7fd79137SRobert Mustacchi #define DW_DLE_DIE_ALLOC                        79
888*7fd79137SRobert Mustacchi #define DW_DLE_PARENT_EXISTS                    80
889*7fd79137SRobert Mustacchi #define DW_DLE_DBG_NULL                         81
890*7fd79137SRobert Mustacchi #define DW_DLE_DEBUGLINE_ERROR                  82
891*7fd79137SRobert Mustacchi #define DW_DLE_DEBUGFRAME_ERROR                 83
892*7fd79137SRobert Mustacchi #define DW_DLE_DEBUGINFO_ERROR                  84
893*7fd79137SRobert Mustacchi #define DW_DLE_ATTR_ALLOC                       85
894*7fd79137SRobert Mustacchi #define DW_DLE_ABBREV_ALLOC                     86
895*7fd79137SRobert Mustacchi #define DW_DLE_OFFSET_UFLW                      87
896*7fd79137SRobert Mustacchi #define DW_DLE_ELF_SECT_ERR                     88
897*7fd79137SRobert Mustacchi #define DW_DLE_DEBUG_FRAME_LENGTH_BAD           89
898*7fd79137SRobert Mustacchi #define DW_DLE_FRAME_VERSION_BAD                90
899*7fd79137SRobert Mustacchi #define DW_DLE_CIE_RET_ADDR_REG_ERROR           91
900*7fd79137SRobert Mustacchi #define DW_DLE_FDE_NULL                         92
901*7fd79137SRobert Mustacchi #define DW_DLE_FDE_DBG_NULL                     93
902*7fd79137SRobert Mustacchi #define DW_DLE_CIE_NULL                         94
903*7fd79137SRobert Mustacchi #define DW_DLE_CIE_DBG_NULL                     95
904*7fd79137SRobert Mustacchi #define DW_DLE_FRAME_TABLE_COL_BAD              96
905*7fd79137SRobert Mustacchi #define DW_DLE_PC_NOT_IN_FDE_RANGE              97
906*7fd79137SRobert Mustacchi #define DW_DLE_CIE_INSTR_EXEC_ERROR             98
907*7fd79137SRobert Mustacchi #define DW_DLE_FRAME_INSTR_EXEC_ERROR           99
908*7fd79137SRobert Mustacchi #define DW_DLE_FDE_PTR_NULL                    100
909*7fd79137SRobert Mustacchi #define DW_DLE_RET_OP_LIST_NULL                101
910*7fd79137SRobert Mustacchi #define DW_DLE_LINE_CONTEXT_NULL               102
911*7fd79137SRobert Mustacchi #define DW_DLE_DBG_NO_CU_CONTEXT               103
912*7fd79137SRobert Mustacchi #define DW_DLE_DIE_NO_CU_CONTEXT               104
913*7fd79137SRobert Mustacchi #define DW_DLE_FIRST_DIE_NOT_CU                105
914*7fd79137SRobert Mustacchi #define DW_DLE_NEXT_DIE_PTR_NULL               106
915*7fd79137SRobert Mustacchi #define DW_DLE_DEBUG_FRAME_DUPLICATE           107
916*7fd79137SRobert Mustacchi #define DW_DLE_DEBUG_FRAME_NULL                108
917*7fd79137SRobert Mustacchi #define DW_DLE_ABBREV_DECODE_ERROR             109
918*7fd79137SRobert Mustacchi #define DW_DLE_DWARF_ABBREV_NULL               110
919*7fd79137SRobert Mustacchi #define DW_DLE_ATTR_NULL                       111
920*7fd79137SRobert Mustacchi #define DW_DLE_DIE_BAD                         112
921*7fd79137SRobert Mustacchi #define DW_DLE_DIE_ABBREV_BAD                  113
922*7fd79137SRobert Mustacchi #define DW_DLE_ATTR_FORM_BAD                   114
923*7fd79137SRobert Mustacchi #define DW_DLE_ATTR_NO_CU_CONTEXT              115
924*7fd79137SRobert Mustacchi #define DW_DLE_ATTR_FORM_SIZE_BAD              116
925*7fd79137SRobert Mustacchi #define DW_DLE_ATTR_DBG_NULL                   117
926*7fd79137SRobert Mustacchi #define DW_DLE_BAD_REF_FORM                    118
927*7fd79137SRobert Mustacchi #define DW_DLE_ATTR_FORM_OFFSET_BAD            119
928*7fd79137SRobert Mustacchi #define DW_DLE_LINE_OFFSET_BAD                 120
929*7fd79137SRobert Mustacchi #define DW_DLE_DEBUG_STR_OFFSET_BAD            121
930*7fd79137SRobert Mustacchi #define DW_DLE_STRING_PTR_NULL                 122
931*7fd79137SRobert Mustacchi #define DW_DLE_PUBNAMES_VERSION_ERROR          123
932*7fd79137SRobert Mustacchi #define DW_DLE_PUBNAMES_LENGTH_BAD             124
933*7fd79137SRobert Mustacchi #define DW_DLE_GLOBAL_NULL                     125
934*7fd79137SRobert Mustacchi #define DW_DLE_GLOBAL_CONTEXT_NULL             126
935*7fd79137SRobert Mustacchi #define DW_DLE_DIR_INDEX_BAD                   127
936*7fd79137SRobert Mustacchi #define DW_DLE_LOC_EXPR_BAD                    128
937*7fd79137SRobert Mustacchi #define DW_DLE_DIE_LOC_EXPR_BAD                129
938*7fd79137SRobert Mustacchi #define DW_DLE_ADDR_ALLOC                      130
939*7fd79137SRobert Mustacchi #define DW_DLE_OFFSET_BAD                      131
940*7fd79137SRobert Mustacchi #define DW_DLE_MAKE_CU_CONTEXT_FAIL            132
941*7fd79137SRobert Mustacchi #define DW_DLE_REL_ALLOC                       133
942*7fd79137SRobert Mustacchi #define DW_DLE_ARANGE_OFFSET_BAD               134
943*7fd79137SRobert Mustacchi #define DW_DLE_SEGMENT_SIZE_BAD                135
944*7fd79137SRobert Mustacchi #define DW_DLE_ARANGE_LENGTH_BAD               136
945*7fd79137SRobert Mustacchi #define DW_DLE_ARANGE_DECODE_ERROR             137
946*7fd79137SRobert Mustacchi #define DW_DLE_ARANGES_NULL                    138
947*7fd79137SRobert Mustacchi #define DW_DLE_ARANGE_NULL                     139
948*7fd79137SRobert Mustacchi #define DW_DLE_NO_FILE_NAME                    140
949*7fd79137SRobert Mustacchi #define DW_DLE_NO_COMP_DIR                     141
950*7fd79137SRobert Mustacchi #define DW_DLE_CU_ADDRESS_SIZE_BAD             142
951*7fd79137SRobert Mustacchi #define DW_DLE_INPUT_ATTR_BAD                  143
952*7fd79137SRobert Mustacchi #define DW_DLE_EXPR_NULL                       144
953*7fd79137SRobert Mustacchi #define DW_DLE_BAD_EXPR_OPCODE                 145
954*7fd79137SRobert Mustacchi #define DW_DLE_EXPR_LENGTH_BAD                 146
955*7fd79137SRobert Mustacchi #define DW_DLE_MULTIPLE_RELOC_IN_EXPR          147
956*7fd79137SRobert Mustacchi #define DW_DLE_ELF_GETIDENT_ERROR              148
957*7fd79137SRobert Mustacchi #define DW_DLE_NO_AT_MIPS_FDE                  149
958*7fd79137SRobert Mustacchi #define DW_DLE_NO_CIE_FOR_FDE                  150
959*7fd79137SRobert Mustacchi #define DW_DLE_DIE_ABBREV_LIST_NULL            151
960*7fd79137SRobert Mustacchi #define DW_DLE_DEBUG_FUNCNAMES_DUPLICATE       152
961*7fd79137SRobert Mustacchi #define DW_DLE_DEBUG_FUNCNAMES_NULL            153
962*7fd79137SRobert Mustacchi #define DW_DLE_DEBUG_FUNCNAMES_VERSION_ERROR   154
963*7fd79137SRobert Mustacchi #define DW_DLE_DEBUG_FUNCNAMES_LENGTH_BAD      155
964*7fd79137SRobert Mustacchi #define DW_DLE_FUNC_NULL                       156
965*7fd79137SRobert Mustacchi #define DW_DLE_FUNC_CONTEXT_NULL               157
966*7fd79137SRobert Mustacchi #define DW_DLE_DEBUG_TYPENAMES_DUPLICATE       158
967*7fd79137SRobert Mustacchi #define DW_DLE_DEBUG_TYPENAMES_NULL            159
968*7fd79137SRobert Mustacchi #define DW_DLE_DEBUG_TYPENAMES_VERSION_ERROR   160
969*7fd79137SRobert Mustacchi #define DW_DLE_DEBUG_TYPENAMES_LENGTH_BAD      161
970*7fd79137SRobert Mustacchi #define DW_DLE_TYPE_NULL                       162
971*7fd79137SRobert Mustacchi #define DW_DLE_TYPE_CONTEXT_NULL               163
972*7fd79137SRobert Mustacchi #define DW_DLE_DEBUG_VARNAMES_DUPLICATE        164
973*7fd79137SRobert Mustacchi #define DW_DLE_DEBUG_VARNAMES_NULL             165
974*7fd79137SRobert Mustacchi #define DW_DLE_DEBUG_VARNAMES_VERSION_ERROR    166
975*7fd79137SRobert Mustacchi #define DW_DLE_DEBUG_VARNAMES_LENGTH_BAD       167
976*7fd79137SRobert Mustacchi #define DW_DLE_VAR_NULL                        168
977*7fd79137SRobert Mustacchi #define DW_DLE_VAR_CONTEXT_NULL                169
978*7fd79137SRobert Mustacchi #define DW_DLE_DEBUG_WEAKNAMES_DUPLICATE       170
979*7fd79137SRobert Mustacchi #define DW_DLE_DEBUG_WEAKNAMES_NULL            171
980*7fd79137SRobert Mustacchi #define DW_DLE_DEBUG_WEAKNAMES_VERSION_ERROR   172
981*7fd79137SRobert Mustacchi #define DW_DLE_DEBUG_WEAKNAMES_LENGTH_BAD      173
982*7fd79137SRobert Mustacchi #define DW_DLE_WEAK_NULL                       174
983*7fd79137SRobert Mustacchi #define DW_DLE_WEAK_CONTEXT_NULL               175
984*7fd79137SRobert Mustacchi #define DW_DLE_LOCDESC_COUNT_WRONG             176
985*7fd79137SRobert Mustacchi #define DW_DLE_MACINFO_STRING_NULL             177
986*7fd79137SRobert Mustacchi #define DW_DLE_MACINFO_STRING_EMPTY            178
987*7fd79137SRobert Mustacchi #define DW_DLE_MACINFO_INTERNAL_ERROR_SPACE    179
988*7fd79137SRobert Mustacchi #define DW_DLE_MACINFO_MALLOC_FAIL             180
989*7fd79137SRobert Mustacchi #define DW_DLE_DEBUGMACINFO_ERROR              181
990*7fd79137SRobert Mustacchi #define DW_DLE_DEBUG_MACRO_LENGTH_BAD          182
991*7fd79137SRobert Mustacchi #define DW_DLE_DEBUG_MACRO_MAX_BAD             183
992*7fd79137SRobert Mustacchi #define DW_DLE_DEBUG_MACRO_INTERNAL_ERR        184
993*7fd79137SRobert Mustacchi #define DW_DLE_DEBUG_MACRO_MALLOC_SPACE        185
994*7fd79137SRobert Mustacchi #define DW_DLE_DEBUG_MACRO_INCONSISTENT        186
995*7fd79137SRobert Mustacchi #define DW_DLE_DF_NO_CIE_AUGMENTATION          187
996*7fd79137SRobert Mustacchi #define DW_DLE_DF_REG_NUM_TOO_HIGH             188
997*7fd79137SRobert Mustacchi #define DW_DLE_DF_MAKE_INSTR_NO_INIT           189
998*7fd79137SRobert Mustacchi #define DW_DLE_DF_NEW_LOC_LESS_OLD_LOC         190
999*7fd79137SRobert Mustacchi #define DW_DLE_DF_POP_EMPTY_STACK              191
1000*7fd79137SRobert Mustacchi #define DW_DLE_DF_ALLOC_FAIL                   192
1001*7fd79137SRobert Mustacchi #define DW_DLE_DF_FRAME_DECODING_ERROR         193
1002*7fd79137SRobert Mustacchi #define DW_DLE_DEBUG_LOC_SECTION_SHORT         194
1003*7fd79137SRobert Mustacchi #define DW_DLE_FRAME_AUGMENTATION_UNKNOWN      195
1004*7fd79137SRobert Mustacchi #define DW_DLE_PUBTYPE_CONTEXT                 196 /* Unused. */
1005*7fd79137SRobert Mustacchi #define DW_DLE_DEBUG_PUBTYPES_LENGTH_BAD       197
1006*7fd79137SRobert Mustacchi #define DW_DLE_DEBUG_PUBTYPES_VERSION_ERROR    198
1007*7fd79137SRobert Mustacchi #define DW_DLE_DEBUG_PUBTYPES_DUPLICATE        199
1008*7fd79137SRobert Mustacchi #define DW_DLE_FRAME_CIE_DECODE_ERROR          200
1009*7fd79137SRobert Mustacchi #define DW_DLE_FRAME_REGISTER_UNREPRESENTABLE  201
1010*7fd79137SRobert Mustacchi #define DW_DLE_FRAME_REGISTER_COUNT_MISMATCH   202
1011*7fd79137SRobert Mustacchi #define DW_DLE_LINK_LOOP                       203
1012*7fd79137SRobert Mustacchi #define DW_DLE_STRP_OFFSET_BAD                 204
1013*7fd79137SRobert Mustacchi #define DW_DLE_DEBUG_RANGES_DUPLICATE          205
1014*7fd79137SRobert Mustacchi #define DW_DLE_DEBUG_RANGES_OFFSET_BAD         206
1015*7fd79137SRobert Mustacchi #define DW_DLE_DEBUG_RANGES_MISSING_END        207
1016*7fd79137SRobert Mustacchi #define DW_DLE_DEBUG_RANGES_OUT_OF_MEM         208
1017*7fd79137SRobert Mustacchi #define DW_DLE_DEBUG_SYMTAB_ERR                209
1018*7fd79137SRobert Mustacchi #define DW_DLE_DEBUG_STRTAB_ERR                210
1019*7fd79137SRobert Mustacchi #define DW_DLE_RELOC_MISMATCH_INDEX            211
1020*7fd79137SRobert Mustacchi #define DW_DLE_RELOC_MISMATCH_RELOC_INDEX      212
1021*7fd79137SRobert Mustacchi #define DW_DLE_RELOC_MISMATCH_STRTAB_INDEX     213
1022*7fd79137SRobert Mustacchi #define DW_DLE_RELOC_SECTION_MISMATCH          214
1023*7fd79137SRobert Mustacchi #define DW_DLE_RELOC_SECTION_MISSING_INDEX     215
1024*7fd79137SRobert Mustacchi #define DW_DLE_RELOC_SECTION_LENGTH_ODD        216
1025*7fd79137SRobert Mustacchi #define DW_DLE_RELOC_SECTION_PTR_NULL          217
1026*7fd79137SRobert Mustacchi #define DW_DLE_RELOC_SECTION_MALLOC_FAIL       218
1027*7fd79137SRobert Mustacchi #define DW_DLE_NO_ELF64_SUPPORT                219
1028*7fd79137SRobert Mustacchi #define DW_DLE_MISSING_ELF64_SUPPORT           220
1029*7fd79137SRobert Mustacchi #define DW_DLE_ORPHAN_FDE                      221
1030*7fd79137SRobert Mustacchi #define DW_DLE_DUPLICATE_INST_BLOCK            222
1031*7fd79137SRobert Mustacchi #define DW_DLE_BAD_REF_SIG8_FORM               223
1032*7fd79137SRobert Mustacchi #define DW_DLE_ATTR_EXPRLOC_FORM_BAD           224
1033*7fd79137SRobert Mustacchi #define DW_DLE_FORM_SEC_OFFSET_LENGTH_BAD      225
1034*7fd79137SRobert Mustacchi #define DW_DLE_NOT_REF_FORM                    226
1035*7fd79137SRobert Mustacchi #define DW_DLE_DEBUG_FRAME_LENGTH_NOT_MULTIPLE 227
1036*7fd79137SRobert Mustacchi 
1037*7fd79137SRobert Mustacchi 
1038*7fd79137SRobert Mustacchi 
1039*7fd79137SRobert Mustacchi     /* DW_DLE_LAST MUST EQUAL LAST ERROR NUMBER */
1040*7fd79137SRobert Mustacchi #define DW_DLE_LAST        227
1041*7fd79137SRobert Mustacchi #define DW_DLE_LO_USER     0x10000
1042*7fd79137SRobert Mustacchi 
1043*7fd79137SRobert Mustacchi    /* Taken as meaning 'undefined value', this is not
1044*7fd79137SRobert Mustacchi       a column or register number.
1045*7fd79137SRobert Mustacchi       Only present at libdwarf runtime. Never on disk.
1046*7fd79137SRobert Mustacchi       DW_FRAME_* Values present on disk are in dwarf.h
1047*7fd79137SRobert Mustacchi    */
1048*7fd79137SRobert Mustacchi #define DW_FRAME_UNDEFINED_VAL          1034
1049*7fd79137SRobert Mustacchi 
1050*7fd79137SRobert Mustacchi    /* Taken as meaning 'same value' as caller had, not a column
1051*7fd79137SRobert Mustacchi       or register number
1052*7fd79137SRobert Mustacchi       Only present at libdwarf runtime. Never on disk.
1053*7fd79137SRobert Mustacchi       DW_FRAME_* Values present on disk are in dwarf.h
1054*7fd79137SRobert Mustacchi    */
1055*7fd79137SRobert Mustacchi #define DW_FRAME_SAME_VAL               1035
1056*7fd79137SRobert Mustacchi 
1057*7fd79137SRobert Mustacchi 
1058*7fd79137SRobert Mustacchi 
1059*7fd79137SRobert Mustacchi /* error return values
1060*7fd79137SRobert Mustacchi */
1061*7fd79137SRobert Mustacchi #define DW_DLV_BADADDR     (~(Dwarf_Addr)0)
1062*7fd79137SRobert Mustacchi     /* for functions returning target address */
1063*7fd79137SRobert Mustacchi 
1064*7fd79137SRobert Mustacchi #define DW_DLV_NOCOUNT     ((Dwarf_Signed)-1)
1065*7fd79137SRobert Mustacchi     /* for functions returning count */
1066*7fd79137SRobert Mustacchi 
1067*7fd79137SRobert Mustacchi #define DW_DLV_BADOFFSET   (~(Dwarf_Off)0)
1068*7fd79137SRobert Mustacchi     /* for functions returning offset */
1069*7fd79137SRobert Mustacchi 
1070*7fd79137SRobert Mustacchi /* standard return values for functions */
1071*7fd79137SRobert Mustacchi #define DW_DLV_NO_ENTRY -1
1072*7fd79137SRobert Mustacchi #define DW_DLV_OK        0
1073*7fd79137SRobert Mustacchi #define DW_DLV_ERROR     1
1074*7fd79137SRobert Mustacchi 
1075*7fd79137SRobert Mustacchi /* Special values for offset_into_exception_table field of dwarf fde's. */
1076*7fd79137SRobert Mustacchi /* The following value indicates that there is no Exception table offset
1077*7fd79137SRobert Mustacchi    associated with a dwarf frame. */
1078*7fd79137SRobert Mustacchi #define DW_DLX_NO_EH_OFFSET         (-1LL)
1079*7fd79137SRobert Mustacchi /* The following value indicates that the producer was unable to analyse the
1080*7fd79137SRobert Mustacchi    source file to generate Exception tables for this function. */
1081*7fd79137SRobert Mustacchi #define DW_DLX_EH_OFFSET_UNAVAILABLE  (-2LL)
1082*7fd79137SRobert Mustacchi 
1083*7fd79137SRobert Mustacchi 
1084*7fd79137SRobert Mustacchi /*===========================================================================*/
1085*7fd79137SRobert Mustacchi /*  Dwarf consumer interface initialization and termination operations */
1086*7fd79137SRobert Mustacchi 
1087*7fd79137SRobert Mustacchi /* Initialization based on Unix open fd (using libelf internally). */
1088*7fd79137SRobert Mustacchi int dwarf_init(int    /*fd*/,
1089*7fd79137SRobert Mustacchi     Dwarf_Unsigned    /*access*/,
1090*7fd79137SRobert Mustacchi     Dwarf_Handler     /*errhand*/,
1091*7fd79137SRobert Mustacchi     Dwarf_Ptr         /*errarg*/,
1092*7fd79137SRobert Mustacchi     Dwarf_Debug*      /*dbg*/,
1093*7fd79137SRobert Mustacchi     Dwarf_Error*      /*error*/);
1094*7fd79137SRobert Mustacchi 
1095*7fd79137SRobert Mustacchi /* Initialization based on libelf/sgi-fastlibelf open pointer. */
1096*7fd79137SRobert Mustacchi int dwarf_elf_init(dwarf_elf_handle /*elf*/,
1097*7fd79137SRobert Mustacchi     Dwarf_Unsigned    /*access*/,
1098*7fd79137SRobert Mustacchi     Dwarf_Handler     /*errhand*/,
1099*7fd79137SRobert Mustacchi     Dwarf_Ptr         /*errarg*/,
1100*7fd79137SRobert Mustacchi     Dwarf_Debug*      /*dbg*/,
1101*7fd79137SRobert Mustacchi     Dwarf_Error*      /*error*/);
1102*7fd79137SRobert Mustacchi 
1103*7fd79137SRobert Mustacchi /* Undocumented function for memory allocator. */
1104*7fd79137SRobert Mustacchi void dwarf_print_memory_stats(Dwarf_Debug  /*dbg*/);
1105*7fd79137SRobert Mustacchi 
1106*7fd79137SRobert Mustacchi int dwarf_get_elf(Dwarf_Debug /*dbg*/,
1107*7fd79137SRobert Mustacchi     dwarf_elf_handle* /*return_elfptr*/,
1108*7fd79137SRobert Mustacchi     Dwarf_Error*      /*error*/);
1109*7fd79137SRobert Mustacchi 
1110*7fd79137SRobert Mustacchi int dwarf_finish(Dwarf_Debug /*dbg*/, Dwarf_Error* /*error*/);
1111*7fd79137SRobert Mustacchi 
1112*7fd79137SRobert Mustacchi 
1113*7fd79137SRobert Mustacchi int dwarf_object_init(Dwarf_Obj_Access_Interface* /* obj */,
1114*7fd79137SRobert Mustacchi     Dwarf_Handler /* errhand */,
1115*7fd79137SRobert Mustacchi     Dwarf_Ptr     /* errarg */,
1116*7fd79137SRobert Mustacchi     Dwarf_Debug*  /* dbg */,
1117*7fd79137SRobert Mustacchi     Dwarf_Error*  /* error */);
1118*7fd79137SRobert Mustacchi 
1119*7fd79137SRobert Mustacchi int dwarf_object_finish(Dwarf_Debug /* dbg */,
1120*7fd79137SRobert Mustacchi     Dwarf_Error* /* error */);
1121*7fd79137SRobert Mustacchi 
1122*7fd79137SRobert Mustacchi /* die traversal operations */
1123*7fd79137SRobert Mustacchi int dwarf_next_cu_header_b(Dwarf_Debug /*dbg*/,
1124*7fd79137SRobert Mustacchi     Dwarf_Unsigned* /*cu_header_length*/,
1125*7fd79137SRobert Mustacchi     Dwarf_Half*     /*version_stamp*/,
1126*7fd79137SRobert Mustacchi     Dwarf_Off*      /*abbrev_offset*/,
1127*7fd79137SRobert Mustacchi     Dwarf_Half*     /*address_size*/,
1128*7fd79137SRobert Mustacchi     Dwarf_Half*     /*length_size*/,
1129*7fd79137SRobert Mustacchi     Dwarf_Half*     /*extension_size*/,
1130*7fd79137SRobert Mustacchi     Dwarf_Unsigned* /*next_cu_header_offset*/,
1131*7fd79137SRobert Mustacchi     Dwarf_Error*    /*error*/);
1132*7fd79137SRobert Mustacchi /* The following is now obsolete, though supported. November 2009. */
1133*7fd79137SRobert Mustacchi int dwarf_next_cu_header(Dwarf_Debug /*dbg*/,
1134*7fd79137SRobert Mustacchi     Dwarf_Unsigned* /*cu_header_length*/,
1135*7fd79137SRobert Mustacchi     Dwarf_Half*     /*version_stamp*/,
1136*7fd79137SRobert Mustacchi     Dwarf_Off*      /*abbrev_offset*/,
1137*7fd79137SRobert Mustacchi     Dwarf_Half*     /*address_size*/,
1138*7fd79137SRobert Mustacchi     Dwarf_Unsigned* /*next_cu_header_offset*/,
1139*7fd79137SRobert Mustacchi     Dwarf_Error*    /*error*/);
1140*7fd79137SRobert Mustacchi 
1141*7fd79137SRobert Mustacchi int dwarf_siblingof(Dwarf_Debug /*dbg*/,
1142*7fd79137SRobert Mustacchi     Dwarf_Die        /*die*/,
1143*7fd79137SRobert Mustacchi     Dwarf_Die*       /*return_siblingdie*/,
1144*7fd79137SRobert Mustacchi     Dwarf_Error*     /*error*/);
1145*7fd79137SRobert Mustacchi 
1146*7fd79137SRobert Mustacchi int dwarf_child(Dwarf_Die /*die*/,
1147*7fd79137SRobert Mustacchi     Dwarf_Die*       /*return_childdie*/,
1148*7fd79137SRobert Mustacchi     Dwarf_Error*     /*error*/);
1149*7fd79137SRobert Mustacchi 
1150*7fd79137SRobert Mustacchi /* Finding die given global (not CU-relative) offset */
1151*7fd79137SRobert Mustacchi int dwarf_offdie(Dwarf_Debug /*dbg*/,
1152*7fd79137SRobert Mustacchi     Dwarf_Off        /*offset*/,
1153*7fd79137SRobert Mustacchi     Dwarf_Die*       /*return_die*/,
1154*7fd79137SRobert Mustacchi     Dwarf_Error*     /*error*/);
1155*7fd79137SRobert Mustacchi 
1156*7fd79137SRobert Mustacchi /* Higher level functions (Unimplemented) */
1157*7fd79137SRobert Mustacchi int dwarf_pcfile(Dwarf_Debug /*dbg*/,
1158*7fd79137SRobert Mustacchi     Dwarf_Addr       /*pc*/,
1159*7fd79137SRobert Mustacchi     Dwarf_Die*       /*return_die*/,
1160*7fd79137SRobert Mustacchi     Dwarf_Error*     /*error*/);
1161*7fd79137SRobert Mustacchi 
1162*7fd79137SRobert Mustacchi /* Unimplemented */
1163*7fd79137SRobert Mustacchi int dwarf_pcsubr(Dwarf_Debug /*dbg*/,
1164*7fd79137SRobert Mustacchi     Dwarf_Addr       /*pc*/,
1165*7fd79137SRobert Mustacchi     Dwarf_Die*       /*return_die*/,
1166*7fd79137SRobert Mustacchi     Dwarf_Error*     /*error*/);
1167*7fd79137SRobert Mustacchi 
1168*7fd79137SRobert Mustacchi /* Unimplemented */
1169*7fd79137SRobert Mustacchi int dwarf_pcscope(Dwarf_Debug /*dbg*/,
1170*7fd79137SRobert Mustacchi     Dwarf_Addr       /*pc*/,
1171*7fd79137SRobert Mustacchi     Dwarf_Die*       /*return_die*/,
1172*7fd79137SRobert Mustacchi     Dwarf_Error*     /*error*/);
1173*7fd79137SRobert Mustacchi 
1174*7fd79137SRobert Mustacchi /* operations on DIEs */
1175*7fd79137SRobert Mustacchi int dwarf_tag(Dwarf_Die /*die*/,
1176*7fd79137SRobert Mustacchi     Dwarf_Half*      /*return_tag*/,
1177*7fd79137SRobert Mustacchi     Dwarf_Error*     /*error*/);
1178*7fd79137SRobert Mustacchi 
1179*7fd79137SRobert Mustacchi /* utility? */
1180*7fd79137SRobert Mustacchi /* dwarf_dieoffset returns the global debug_info
1181*7fd79137SRobert Mustacchi    section offset, not the CU relative offset. */
1182*7fd79137SRobert Mustacchi int dwarf_dieoffset(Dwarf_Die /*die*/,
1183*7fd79137SRobert Mustacchi     Dwarf_Off*       /*return_offset*/,
1184*7fd79137SRobert Mustacchi     Dwarf_Error*     /*error*/);
1185*7fd79137SRobert Mustacchi 
1186*7fd79137SRobert Mustacchi /* dwarf_CU_dieoffset_given_die returns
1187*7fd79137SRobert Mustacchi    the global debug_info section offset of the CU die
1188*7fd79137SRobert Mustacchi    that is the CU containing the given_die
1189*7fd79137SRobert Mustacchi    (the passed in DIE can be any DIE).
1190*7fd79137SRobert Mustacchi    This information makes it possible for a consumer to
1191*7fd79137SRobert Mustacchi    find and print CU context information for any die.
1192*7fd79137SRobert Mustacchi    See also dwarf_get_cu_die_offset_given_cu_header_offset(). */
1193*7fd79137SRobert Mustacchi int dwarf_CU_dieoffset_given_die(Dwarf_Die /*given_die*/,
1194*7fd79137SRobert Mustacchi     Dwarf_Off*       /*return_offset*/,
1195*7fd79137SRobert Mustacchi     Dwarf_Error*     /*error*/);
1196*7fd79137SRobert Mustacchi 
1197*7fd79137SRobert Mustacchi /* dwarf_die_CU_offset returns the CU relative offset
1198*7fd79137SRobert Mustacchi    not the global debug_info section offset, given
1199*7fd79137SRobert Mustacchi    any DIE in the CU.  See also dwarf_CU_dieoffset_given_die().
1200*7fd79137SRobert Mustacchi    */
1201*7fd79137SRobert Mustacchi int dwarf_die_CU_offset(Dwarf_Die /*die*/,
1202*7fd79137SRobert Mustacchi     Dwarf_Off*       /*return_offset*/,
1203*7fd79137SRobert Mustacchi     Dwarf_Error*     /*error*/);
1204*7fd79137SRobert Mustacchi 
1205*7fd79137SRobert Mustacchi int dwarf_die_CU_offset_range(Dwarf_Die /*die*/,
1206*7fd79137SRobert Mustacchi     Dwarf_Off*       /*return_CU_header_offset*/,
1207*7fd79137SRobert Mustacchi     Dwarf_Off*       /*return_CU_length_bytes*/,
1208*7fd79137SRobert Mustacchi     Dwarf_Error*     /*error*/);
1209*7fd79137SRobert Mustacchi 
1210*7fd79137SRobert Mustacchi int dwarf_attr (Dwarf_Die /*die*/,
1211*7fd79137SRobert Mustacchi     Dwarf_Half        /*attr*/,
1212*7fd79137SRobert Mustacchi     Dwarf_Attribute * /*returned_attr*/,
1213*7fd79137SRobert Mustacchi     Dwarf_Error*      /*error*/);
1214*7fd79137SRobert Mustacchi 
1215*7fd79137SRobert Mustacchi int dwarf_diename(Dwarf_Die /*die*/,
1216*7fd79137SRobert Mustacchi     char   **        /*diename*/,
1217*7fd79137SRobert Mustacchi     Dwarf_Error*     /*error*/);
1218*7fd79137SRobert Mustacchi 
1219*7fd79137SRobert Mustacchi /* Returns the  abbrev code of the die. Cannot fail. */
1220*7fd79137SRobert Mustacchi int dwarf_die_abbrev_code(Dwarf_Die /*die */);
1221*7fd79137SRobert Mustacchi 
1222*7fd79137SRobert Mustacchi 
1223*7fd79137SRobert Mustacchi /* convenience functions, alternative to using dwarf_attrlist() */
1224*7fd79137SRobert Mustacchi int dwarf_hasattr(Dwarf_Die /*die*/,
1225*7fd79137SRobert Mustacchi     Dwarf_Half       /*attr*/,
1226*7fd79137SRobert Mustacchi     Dwarf_Bool *     /*returned_bool*/,
1227*7fd79137SRobert Mustacchi     Dwarf_Error*     /*error*/);
1228*7fd79137SRobert Mustacchi 
1229*7fd79137SRobert Mustacchi /* dwarf_loclist_n preferred over dwarf_loclist */
1230*7fd79137SRobert Mustacchi int dwarf_loclist_n(Dwarf_Attribute /*attr*/,
1231*7fd79137SRobert Mustacchi     Dwarf_Locdesc*** /*llbuf*/,
1232*7fd79137SRobert Mustacchi     Dwarf_Signed *   /*locCount*/,
1233*7fd79137SRobert Mustacchi     Dwarf_Error*     /*error*/);
1234*7fd79137SRobert Mustacchi 
1235*7fd79137SRobert Mustacchi int dwarf_loclist(Dwarf_Attribute /*attr*/,  /* inflexible! */
1236*7fd79137SRobert Mustacchi     Dwarf_Locdesc**  /*llbuf*/,
1237*7fd79137SRobert Mustacchi     Dwarf_Signed *   /*locCount*/,
1238*7fd79137SRobert Mustacchi     Dwarf_Error*     /*error*/);
1239*7fd79137SRobert Mustacchi 
1240*7fd79137SRobert Mustacchi /* Extracts a dwarf expression from an expression byte stream.
1241*7fd79137SRobert Mustacchi    Useful to get expressions from DW_CFA_def_cfa_expression
1242*7fd79137SRobert Mustacchi    DW_CFA_expression DW_CFA_val_expression expression bytes.
1243*7fd79137SRobert Mustacchi    27 April 2009: dwarf_loclist_from_expr() interface with
1244*7fd79137SRobert Mustacchi    no addr_size is obsolete but supported,
1245*7fd79137SRobert Mustacchi    use dwarf_loclist_from_expr_a() instead.
1246*7fd79137SRobert Mustacchi */
1247*7fd79137SRobert Mustacchi int dwarf_loclist_from_expr(Dwarf_Debug dbg,
1248*7fd79137SRobert Mustacchi     Dwarf_Ptr expression_in,
1249*7fd79137SRobert Mustacchi     Dwarf_Unsigned expression_length,
1250*7fd79137SRobert Mustacchi     Dwarf_Locdesc ** llbuf,
1251*7fd79137SRobert Mustacchi     Dwarf_Signed * listlen, Dwarf_Error * error);
1252*7fd79137SRobert Mustacchi 
1253*7fd79137SRobert Mustacchi /* dwarf_loclist_from_expr_a() new 27 Apr 2009: added addr_size argument. */
1254*7fd79137SRobert Mustacchi int dwarf_loclist_from_expr_a(Dwarf_Debug dbg,
1255*7fd79137SRobert Mustacchi     Dwarf_Ptr expression_in,
1256*7fd79137SRobert Mustacchi     Dwarf_Unsigned expression_length,
1257*7fd79137SRobert Mustacchi     Dwarf_Half addr_size,
1258*7fd79137SRobert Mustacchi     Dwarf_Locdesc ** llbuf,
1259*7fd79137SRobert Mustacchi     Dwarf_Signed * listlen, Dwarf_Error * error);
1260*7fd79137SRobert Mustacchi 
1261*7fd79137SRobert Mustacchi /* Unimplemented */
1262*7fd79137SRobert Mustacchi int dwarf_stringlen(Dwarf_Die /*die*/,
1263*7fd79137SRobert Mustacchi     Dwarf_Locdesc ** /*returned_locdesc*/,
1264*7fd79137SRobert Mustacchi     Dwarf_Error*     /*error*/);
1265*7fd79137SRobert Mustacchi 
1266*7fd79137SRobert Mustacchi /* Unimplemented */
1267*7fd79137SRobert Mustacchi int dwarf_subscrcnt(Dwarf_Die /*die*/,
1268*7fd79137SRobert Mustacchi     Dwarf_Signed *   /*returned_count*/,
1269*7fd79137SRobert Mustacchi     Dwarf_Error*     /*error*/);
1270*7fd79137SRobert Mustacchi 
1271*7fd79137SRobert Mustacchi /* Unimplemented */
1272*7fd79137SRobert Mustacchi int dwarf_nthsubscr(Dwarf_Die /*die*/,
1273*7fd79137SRobert Mustacchi     Dwarf_Unsigned   /*ssndx*/,
1274*7fd79137SRobert Mustacchi     Dwarf_Die *      /*returned_die*/,
1275*7fd79137SRobert Mustacchi     Dwarf_Error*     /*error*/);
1276*7fd79137SRobert Mustacchi 
1277*7fd79137SRobert Mustacchi int dwarf_lowpc(Dwarf_Die /*die*/,
1278*7fd79137SRobert Mustacchi     Dwarf_Addr  *    /*returned_addr*/,
1279*7fd79137SRobert Mustacchi     Dwarf_Error*     /*error*/);
1280*7fd79137SRobert Mustacchi 
1281*7fd79137SRobert Mustacchi int dwarf_highpc(Dwarf_Die /*die*/,
1282*7fd79137SRobert Mustacchi     Dwarf_Addr  *    /*returned_addr*/,
1283*7fd79137SRobert Mustacchi     Dwarf_Error*     /*error*/);
1284*7fd79137SRobert Mustacchi 
1285*7fd79137SRobert Mustacchi int dwarf_bytesize(Dwarf_Die /*die*/,
1286*7fd79137SRobert Mustacchi     Dwarf_Unsigned * /*returned_size*/,
1287*7fd79137SRobert Mustacchi     Dwarf_Error*     /*error*/);
1288*7fd79137SRobert Mustacchi 
1289*7fd79137SRobert Mustacchi /* Unimplemented */
1290*7fd79137SRobert Mustacchi int dwarf_isbitfield(Dwarf_Die /*die*/,
1291*7fd79137SRobert Mustacchi     Dwarf_Bool  *    /*returned_bool*/,
1292*7fd79137SRobert Mustacchi     Dwarf_Error*     /*error*/);
1293*7fd79137SRobert Mustacchi 
1294*7fd79137SRobert Mustacchi int dwarf_bitsize(Dwarf_Die /*die*/,
1295*7fd79137SRobert Mustacchi     Dwarf_Unsigned * /*returned_size*/,
1296*7fd79137SRobert Mustacchi     Dwarf_Error*     /*error*/);
1297*7fd79137SRobert Mustacchi 
1298*7fd79137SRobert Mustacchi int dwarf_bitoffset(Dwarf_Die /*die*/,
1299*7fd79137SRobert Mustacchi     Dwarf_Unsigned * /*returned_offset*/,
1300*7fd79137SRobert Mustacchi     Dwarf_Error*     /*error*/);
1301*7fd79137SRobert Mustacchi 
1302*7fd79137SRobert Mustacchi int dwarf_srclang(Dwarf_Die /*die*/,
1303*7fd79137SRobert Mustacchi     Dwarf_Unsigned * /*returned_lang*/,
1304*7fd79137SRobert Mustacchi     Dwarf_Error*     /*error*/);
1305*7fd79137SRobert Mustacchi 
1306*7fd79137SRobert Mustacchi int dwarf_arrayorder(Dwarf_Die /*die*/,
1307*7fd79137SRobert Mustacchi     Dwarf_Unsigned * /*returned_order*/,
1308*7fd79137SRobert Mustacchi     Dwarf_Error*     /*error*/);
1309*7fd79137SRobert Mustacchi 
1310*7fd79137SRobert Mustacchi /* end of convenience function list */
1311*7fd79137SRobert Mustacchi 
1312*7fd79137SRobert Mustacchi /* this is the main interface to attributes of a DIE */
1313*7fd79137SRobert Mustacchi int dwarf_attrlist(Dwarf_Die /*die*/,
1314*7fd79137SRobert Mustacchi     Dwarf_Attribute** /*attrbuf*/,
1315*7fd79137SRobert Mustacchi     Dwarf_Signed   * /*attrcount*/,
1316*7fd79137SRobert Mustacchi     Dwarf_Error*     /*error*/);
1317*7fd79137SRobert Mustacchi 
1318*7fd79137SRobert Mustacchi /* query operations for attributes */
1319*7fd79137SRobert Mustacchi int dwarf_hasform(Dwarf_Attribute /*attr*/,
1320*7fd79137SRobert Mustacchi     Dwarf_Half       /*form*/,
1321*7fd79137SRobert Mustacchi     Dwarf_Bool *     /*returned_bool*/,
1322*7fd79137SRobert Mustacchi     Dwarf_Error*     /*error*/);
1323*7fd79137SRobert Mustacchi 
1324*7fd79137SRobert Mustacchi int dwarf_whatform(Dwarf_Attribute /*attr*/,
1325*7fd79137SRobert Mustacchi     Dwarf_Half *     /*returned_form*/,
1326*7fd79137SRobert Mustacchi     Dwarf_Error*     /*error*/);
1327*7fd79137SRobert Mustacchi 
1328*7fd79137SRobert Mustacchi int dwarf_whatform_direct(Dwarf_Attribute /*attr*/,
1329*7fd79137SRobert Mustacchi     Dwarf_Half *     /*returned_form*/,
1330*7fd79137SRobert Mustacchi     Dwarf_Error*     /*error*/);
1331*7fd79137SRobert Mustacchi 
1332*7fd79137SRobert Mustacchi int dwarf_whatattr(Dwarf_Attribute /*attr*/,
1333*7fd79137SRobert Mustacchi     Dwarf_Half *     /*returned_attr_num*/,
1334*7fd79137SRobert Mustacchi     Dwarf_Error*     /*error*/);
1335*7fd79137SRobert Mustacchi 
1336*7fd79137SRobert Mustacchi /*
1337*7fd79137SRobert Mustacchi     The following are concerned with the Primary Interface: getting
1338*7fd79137SRobert Mustacchi     the actual data values. One function per 'kind' of FORM.
1339*7fd79137SRobert Mustacchi */
1340*7fd79137SRobert Mustacchi /*  dwarf_formref returns, thru return_offset, a CU-relative offset
1341*7fd79137SRobert Mustacchi     and does not allow DW_FORM_ref_addr*/
1342*7fd79137SRobert Mustacchi int dwarf_formref(Dwarf_Attribute /*attr*/,
1343*7fd79137SRobert Mustacchi     Dwarf_Off*       /*return_offset*/,
1344*7fd79137SRobert Mustacchi     Dwarf_Error*     /*error*/);
1345*7fd79137SRobert Mustacchi /*  dwarf_global_formref returns, thru return_offset,
1346*7fd79137SRobert Mustacchi     a debug_info-relative offset and does allow all reference forms*/
1347*7fd79137SRobert Mustacchi int dwarf_global_formref(Dwarf_Attribute /*attr*/,
1348*7fd79137SRobert Mustacchi     Dwarf_Off*       /*return_offset*/,
1349*7fd79137SRobert Mustacchi     Dwarf_Error*     /*error*/);
1350*7fd79137SRobert Mustacchi 
1351*7fd79137SRobert Mustacchi /*  dwarf_formsig8 returns in the caller-provided 8 byte area
1352*7fd79137SRobert Mustacchi     the 8 bytes of a DW_FORM_ref_sig8.  Not a string.  */
1353*7fd79137SRobert Mustacchi int dwarf_formsig8(Dwarf_Attribute /*attr*/,
1354*7fd79137SRobert Mustacchi     Dwarf_Sig8 * /*returned sig bytes*/,
1355*7fd79137SRobert Mustacchi     Dwarf_Error*     /*error*/);
1356*7fd79137SRobert Mustacchi 
1357*7fd79137SRobert Mustacchi int dwarf_formaddr(Dwarf_Attribute /*attr*/,
1358*7fd79137SRobert Mustacchi     Dwarf_Addr   *   /*returned_addr*/,
1359*7fd79137SRobert Mustacchi     Dwarf_Error*     /*error*/);
1360*7fd79137SRobert Mustacchi 
1361*7fd79137SRobert Mustacchi int dwarf_formflag(Dwarf_Attribute /*attr*/,
1362*7fd79137SRobert Mustacchi     Dwarf_Bool *     /*returned_bool*/,
1363*7fd79137SRobert Mustacchi     Dwarf_Error*     /*error*/);
1364*7fd79137SRobert Mustacchi 
1365*7fd79137SRobert Mustacchi int dwarf_formudata(Dwarf_Attribute /*attr*/,
1366*7fd79137SRobert Mustacchi     Dwarf_Unsigned  * /*returned_val*/,
1367*7fd79137SRobert Mustacchi     Dwarf_Error*     /*error*/);
1368*7fd79137SRobert Mustacchi 
1369*7fd79137SRobert Mustacchi int dwarf_formsdata(Dwarf_Attribute     /*attr*/,
1370*7fd79137SRobert Mustacchi     Dwarf_Signed  *  /*returned_val*/,
1371*7fd79137SRobert Mustacchi     Dwarf_Error*     /*error*/);
1372*7fd79137SRobert Mustacchi 
1373*7fd79137SRobert Mustacchi int dwarf_formblock(Dwarf_Attribute /*attr*/,
1374*7fd79137SRobert Mustacchi     Dwarf_Block    ** /*returned_block*/,
1375*7fd79137SRobert Mustacchi     Dwarf_Error*     /*error*/);
1376*7fd79137SRobert Mustacchi 
1377*7fd79137SRobert Mustacchi int dwarf_formstring(Dwarf_Attribute /*attr*/,
1378*7fd79137SRobert Mustacchi     char   **        /*returned_string*/,
1379*7fd79137SRobert Mustacchi     Dwarf_Error*     /*error*/);
1380*7fd79137SRobert Mustacchi 
1381*7fd79137SRobert Mustacchi int dwarf_formexprloc(Dwarf_Attribute /*attr*/,
1382*7fd79137SRobert Mustacchi     Dwarf_Unsigned * /*return_exprlen*/,
1383*7fd79137SRobert Mustacchi     Dwarf_Ptr  * /*block_ptr*/,
1384*7fd79137SRobert Mustacchi     Dwarf_Error * /*error*/);
1385*7fd79137SRobert Mustacchi 
1386*7fd79137SRobert Mustacchi 
1387*7fd79137SRobert Mustacchi /* end attribute query operations. */
1388*7fd79137SRobert Mustacchi 
1389*7fd79137SRobert Mustacchi /* line number operations */
1390*7fd79137SRobert Mustacchi /* dwarf_srclines  is the normal interface */
1391*7fd79137SRobert Mustacchi int dwarf_srclines(Dwarf_Die /*die*/,
1392*7fd79137SRobert Mustacchi     Dwarf_Line**     /*linebuf*/,
1393*7fd79137SRobert Mustacchi     Dwarf_Signed *   /*linecount*/,
1394*7fd79137SRobert Mustacchi     Dwarf_Error*     /*error*/);
1395*7fd79137SRobert Mustacchi 
1396*7fd79137SRobert Mustacchi /* dwarf_srclines_dealloc, created July 2005, is the new
1397*7fd79137SRobert Mustacchi    method for deallocating what dwarf_srclines returns.
1398*7fd79137SRobert Mustacchi    More complete free than using dwarf_dealloc directly. */
1399*7fd79137SRobert Mustacchi void dwarf_srclines_dealloc(Dwarf_Debug /*dbg*/,
1400*7fd79137SRobert Mustacchi     Dwarf_Line*       /*linebuf*/,
1401*7fd79137SRobert Mustacchi     Dwarf_Signed      /*count */);
1402*7fd79137SRobert Mustacchi 
1403*7fd79137SRobert Mustacchi 
1404*7fd79137SRobert Mustacchi int dwarf_srcfiles(Dwarf_Die /*die*/,
1405*7fd79137SRobert Mustacchi     char***          /*srcfiles*/,
1406*7fd79137SRobert Mustacchi     Dwarf_Signed *   /*filecount*/,
1407*7fd79137SRobert Mustacchi     Dwarf_Error*     /*error*/);
1408*7fd79137SRobert Mustacchi 
1409*7fd79137SRobert Mustacchi /* Unimplemented. */
1410*7fd79137SRobert Mustacchi int dwarf_dieline(Dwarf_Die /*die*/,
1411*7fd79137SRobert Mustacchi     Dwarf_Line  *    /*returned_line*/,
1412*7fd79137SRobert Mustacchi     Dwarf_Error *    /*error*/);
1413*7fd79137SRobert Mustacchi 
1414*7fd79137SRobert Mustacchi int dwarf_linebeginstatement(Dwarf_Line /*line*/,
1415*7fd79137SRobert Mustacchi     Dwarf_Bool  *    /*returned_bool*/,
1416*7fd79137SRobert Mustacchi     Dwarf_Error*     /*error*/);
1417*7fd79137SRobert Mustacchi 
1418*7fd79137SRobert Mustacchi int dwarf_lineendsequence(Dwarf_Line /*line*/,
1419*7fd79137SRobert Mustacchi     Dwarf_Bool  *    /*returned_bool*/,
1420*7fd79137SRobert Mustacchi     Dwarf_Error*     /*error*/);
1421*7fd79137SRobert Mustacchi 
1422*7fd79137SRobert Mustacchi int dwarf_lineno(Dwarf_Line /*line*/,
1423*7fd79137SRobert Mustacchi     Dwarf_Unsigned * /*returned_lineno*/,
1424*7fd79137SRobert Mustacchi     Dwarf_Error*     /*error*/);
1425*7fd79137SRobert Mustacchi 
1426*7fd79137SRobert Mustacchi int dwarf_line_srcfileno(Dwarf_Line /*line*/,
1427*7fd79137SRobert Mustacchi     Dwarf_Unsigned * /*ret_fileno*/,
1428*7fd79137SRobert Mustacchi     Dwarf_Error *    /*error*/);
1429*7fd79137SRobert Mustacchi 
1430*7fd79137SRobert Mustacchi int dwarf_lineaddr(Dwarf_Line /*line*/,
1431*7fd79137SRobert Mustacchi     Dwarf_Addr *     /*returned_addr*/,
1432*7fd79137SRobert Mustacchi     Dwarf_Error*     /*error*/);
1433*7fd79137SRobert Mustacchi 
1434*7fd79137SRobert Mustacchi int dwarf_lineoff(Dwarf_Line /*line*/,
1435*7fd79137SRobert Mustacchi     Dwarf_Signed  *  /*returned_lineoffset*/,
1436*7fd79137SRobert Mustacchi     Dwarf_Error*     /*error*/);
1437*7fd79137SRobert Mustacchi 
1438*7fd79137SRobert Mustacchi int dwarf_linesrc(Dwarf_Line /*line*/,
1439*7fd79137SRobert Mustacchi     char   **        /*returned_name*/,
1440*7fd79137SRobert Mustacchi     Dwarf_Error*     /*error*/);
1441*7fd79137SRobert Mustacchi 
1442*7fd79137SRobert Mustacchi int dwarf_lineblock(Dwarf_Line /*line*/,
1443*7fd79137SRobert Mustacchi     Dwarf_Bool  *    /*returned_bool*/,
1444*7fd79137SRobert Mustacchi     Dwarf_Error*     /*error*/);
1445*7fd79137SRobert Mustacchi 
1446*7fd79137SRobert Mustacchi /* tertiary interface to line info */
1447*7fd79137SRobert Mustacchi /* Unimplemented */
1448*7fd79137SRobert Mustacchi int dwarf_pclines(Dwarf_Debug /*dbg*/,
1449*7fd79137SRobert Mustacchi     Dwarf_Addr       /*pc*/,
1450*7fd79137SRobert Mustacchi     Dwarf_Line**     /*linebuf*/,
1451*7fd79137SRobert Mustacchi     Dwarf_Signed *   /*linecount*/,
1452*7fd79137SRobert Mustacchi     Dwarf_Signed     /*slide*/,
1453*7fd79137SRobert Mustacchi     Dwarf_Error*     /*error*/);
1454*7fd79137SRobert Mustacchi /* end line number operations */
1455*7fd79137SRobert Mustacchi 
1456*7fd79137SRobert Mustacchi /* global name space operations (.debug_pubnames access) */
1457*7fd79137SRobert Mustacchi int dwarf_get_globals(Dwarf_Debug /*dbg*/,
1458*7fd79137SRobert Mustacchi     Dwarf_Global**   /*globals*/,
1459*7fd79137SRobert Mustacchi     Dwarf_Signed *   /*number_of_globals*/,
1460*7fd79137SRobert Mustacchi     Dwarf_Error*     /*error*/);
1461*7fd79137SRobert Mustacchi void dwarf_globals_dealloc(Dwarf_Debug /*dbg*/,
1462*7fd79137SRobert Mustacchi     Dwarf_Global*    /*globals*/,
1463*7fd79137SRobert Mustacchi     Dwarf_Signed     /*number_of_globals*/);
1464*7fd79137SRobert Mustacchi 
1465*7fd79137SRobert Mustacchi int dwarf_globname(Dwarf_Global /*glob*/,
1466*7fd79137SRobert Mustacchi     char   **        /*returned_name*/,
1467*7fd79137SRobert Mustacchi     Dwarf_Error*     /*error*/);
1468*7fd79137SRobert Mustacchi 
1469*7fd79137SRobert Mustacchi int dwarf_global_die_offset(Dwarf_Global /*global*/,
1470*7fd79137SRobert Mustacchi     Dwarf_Off*       /*return_offset*/,
1471*7fd79137SRobert Mustacchi     Dwarf_Error *    /*error*/);
1472*7fd79137SRobert Mustacchi 
1473*7fd79137SRobert Mustacchi /* This returns the CU die global offset if one knows the
1474*7fd79137SRobert Mustacchi    CU header global offset.
1475*7fd79137SRobert Mustacchi    See also dwarf_CU_dieoffset_given_die(). */
1476*7fd79137SRobert Mustacchi int dwarf_get_cu_die_offset_given_cu_header_offset(
1477*7fd79137SRobert Mustacchi     Dwarf_Debug      /*dbg*/,
1478*7fd79137SRobert Mustacchi     Dwarf_Off        /*in_cu_header_offset*/,
1479*7fd79137SRobert Mustacchi     Dwarf_Off *  /*out_cu_die_offset*/,
1480*7fd79137SRobert Mustacchi     Dwarf_Error *    /*err*/);
1481*7fd79137SRobert Mustacchi #ifdef __sgi /* pragma is sgi MIPS only */
1482*7fd79137SRobert Mustacchi #pragma optional dwarf_get_cu_die_offset_given_cu_header_offset
1483*7fd79137SRobert Mustacchi #endif
1484*7fd79137SRobert Mustacchi 
1485*7fd79137SRobert Mustacchi int dwarf_global_cu_offset(Dwarf_Global /*global*/,
1486*7fd79137SRobert Mustacchi     Dwarf_Off*       /*return_offset*/,
1487*7fd79137SRobert Mustacchi     Dwarf_Error*     /*error*/);
1488*7fd79137SRobert Mustacchi 
1489*7fd79137SRobert Mustacchi int dwarf_global_name_offsets(Dwarf_Global /*global*/,
1490*7fd79137SRobert Mustacchi     char   **        /*returned_name*/,
1491*7fd79137SRobert Mustacchi     Dwarf_Off*       /*die_offset*/,
1492*7fd79137SRobert Mustacchi     Dwarf_Off*       /*cu_offset*/,
1493*7fd79137SRobert Mustacchi     Dwarf_Error*     /*error*/);
1494*7fd79137SRobert Mustacchi 
1495*7fd79137SRobert Mustacchi /* Static function name operations.  */
1496*7fd79137SRobert Mustacchi int dwarf_get_funcs(Dwarf_Debug    /*dbg*/,
1497*7fd79137SRobert Mustacchi     Dwarf_Func**     /*funcs*/,
1498*7fd79137SRobert Mustacchi     Dwarf_Signed *   /*number_of_funcs*/,
1499*7fd79137SRobert Mustacchi     Dwarf_Error*     /*error*/);
1500*7fd79137SRobert Mustacchi void dwarf_funcs_dealloc(Dwarf_Debug /*dbg*/,
1501*7fd79137SRobert Mustacchi     Dwarf_Func*      /*funcs*/,
1502*7fd79137SRobert Mustacchi     Dwarf_Signed     /*number_of_funcs*/);
1503*7fd79137SRobert Mustacchi 
1504*7fd79137SRobert Mustacchi int dwarf_funcname(Dwarf_Func /*func*/,
1505*7fd79137SRobert Mustacchi     char   **        /*returned_name*/,
1506*7fd79137SRobert Mustacchi     Dwarf_Error*     /*error*/);
1507*7fd79137SRobert Mustacchi 
1508*7fd79137SRobert Mustacchi int dwarf_func_die_offset(Dwarf_Func /*func*/,
1509*7fd79137SRobert Mustacchi     Dwarf_Off*       /*return_offset*/,
1510*7fd79137SRobert Mustacchi     Dwarf_Error*     /*error*/);
1511*7fd79137SRobert Mustacchi 
1512*7fd79137SRobert Mustacchi int dwarf_func_cu_offset(Dwarf_Func /*func*/,
1513*7fd79137SRobert Mustacchi     Dwarf_Off*       /*return_offset*/,
1514*7fd79137SRobert Mustacchi     Dwarf_Error*     /*error*/);
1515*7fd79137SRobert Mustacchi 
1516*7fd79137SRobert Mustacchi int dwarf_func_name_offsets(Dwarf_Func /*func*/,
1517*7fd79137SRobert Mustacchi     char   **        /*returned_name*/,
1518*7fd79137SRobert Mustacchi     Dwarf_Off*       /*die_offset*/,
1519*7fd79137SRobert Mustacchi     Dwarf_Off*       /*cu_offset*/,
1520*7fd79137SRobert Mustacchi     Dwarf_Error*     /*error*/);
1521*7fd79137SRobert Mustacchi 
1522*7fd79137SRobert Mustacchi /* User-defined type name operations, SGI IRIX .debug_typenames section.
1523*7fd79137SRobert Mustacchi    Same content as DWARF3 .debug_pubtypes, but defined years before
1524*7fd79137SRobert Mustacchi    .debug_pubtypes was defined.   SGI IRIX only. */
1525*7fd79137SRobert Mustacchi int dwarf_get_types(Dwarf_Debug    /*dbg*/,
1526*7fd79137SRobert Mustacchi     Dwarf_Type**     /*types*/,
1527*7fd79137SRobert Mustacchi     Dwarf_Signed *   /*number_of_types*/,
1528*7fd79137SRobert Mustacchi     Dwarf_Error*     /*error*/);
1529*7fd79137SRobert Mustacchi void dwarf_types_dealloc(Dwarf_Debug /*dbg*/,
1530*7fd79137SRobert Mustacchi     Dwarf_Type*      /*types*/,
1531*7fd79137SRobert Mustacchi     Dwarf_Signed     /*number_of_types*/);
1532*7fd79137SRobert Mustacchi 
1533*7fd79137SRobert Mustacchi 
1534*7fd79137SRobert Mustacchi int dwarf_typename(Dwarf_Type /*type*/,
1535*7fd79137SRobert Mustacchi     char   **        /*returned_name*/,
1536*7fd79137SRobert Mustacchi     Dwarf_Error*     /*error*/);
1537*7fd79137SRobert Mustacchi 
1538*7fd79137SRobert Mustacchi int dwarf_type_die_offset(Dwarf_Type /*type*/,
1539*7fd79137SRobert Mustacchi     Dwarf_Off*       /*return_offset*/,
1540*7fd79137SRobert Mustacchi     Dwarf_Error*     /*error*/);
1541*7fd79137SRobert Mustacchi 
1542*7fd79137SRobert Mustacchi int dwarf_type_cu_offset(Dwarf_Type /*type*/,
1543*7fd79137SRobert Mustacchi     Dwarf_Off*       /*return_offset*/,
1544*7fd79137SRobert Mustacchi     Dwarf_Error*     /*error*/);
1545*7fd79137SRobert Mustacchi 
1546*7fd79137SRobert Mustacchi int dwarf_type_name_offsets(Dwarf_Type    /*type*/,
1547*7fd79137SRobert Mustacchi     char   **        /*returned_name*/,
1548*7fd79137SRobert Mustacchi     Dwarf_Off*       /*die_offset*/,
1549*7fd79137SRobert Mustacchi     Dwarf_Off*       /*cu_offset*/,
1550*7fd79137SRobert Mustacchi     Dwarf_Error*     /*error*/);
1551*7fd79137SRobert Mustacchi 
1552*7fd79137SRobert Mustacchi /* User-defined type name operations, DWARF3  .debug_pubtypes section.
1553*7fd79137SRobert Mustacchi */
1554*7fd79137SRobert Mustacchi int dwarf_get_pubtypes(Dwarf_Debug    /*dbg*/,
1555*7fd79137SRobert Mustacchi     Dwarf_Type**     /*types*/,
1556*7fd79137SRobert Mustacchi     Dwarf_Signed *   /*number_of_types*/,
1557*7fd79137SRobert Mustacchi     Dwarf_Error*     /*error*/);
1558*7fd79137SRobert Mustacchi void dwarf_pubtypes_dealloc(Dwarf_Debug /*dbg*/,
1559*7fd79137SRobert Mustacchi     Dwarf_Type*      /*pubtypes*/,
1560*7fd79137SRobert Mustacchi     Dwarf_Signed     /*number_of_pubtypes*/);
1561*7fd79137SRobert Mustacchi 
1562*7fd79137SRobert Mustacchi 
1563*7fd79137SRobert Mustacchi int dwarf_pubtypename(Dwarf_Type /*type*/,
1564*7fd79137SRobert Mustacchi     char   **        /*returned_name*/,
1565*7fd79137SRobert Mustacchi     Dwarf_Error*     /*error*/);
1566*7fd79137SRobert Mustacchi 
1567*7fd79137SRobert Mustacchi int dwarf_pubtype_die_offset(Dwarf_Type /*type*/,
1568*7fd79137SRobert Mustacchi     Dwarf_Off*       /*return_offset*/,
1569*7fd79137SRobert Mustacchi     Dwarf_Error*     /*error*/);
1570*7fd79137SRobert Mustacchi 
1571*7fd79137SRobert Mustacchi int dwarf_pubtype_cu_offset(Dwarf_Type /*type*/,
1572*7fd79137SRobert Mustacchi     Dwarf_Off*       /*return_offset*/,
1573*7fd79137SRobert Mustacchi     Dwarf_Error*     /*error*/);
1574*7fd79137SRobert Mustacchi 
1575*7fd79137SRobert Mustacchi int dwarf_pubtype_name_offsets(Dwarf_Type    /*type*/,
1576*7fd79137SRobert Mustacchi     char   **        /*returned_name*/,
1577*7fd79137SRobert Mustacchi     Dwarf_Off*       /*die_offset*/,
1578*7fd79137SRobert Mustacchi     Dwarf_Off*       /*cu_offset*/,
1579*7fd79137SRobert Mustacchi     Dwarf_Error*     /*error*/);
1580*7fd79137SRobert Mustacchi 
1581*7fd79137SRobert Mustacchi /* File-scope static variable name operations.  */
1582*7fd79137SRobert Mustacchi int dwarf_get_vars(Dwarf_Debug    /*dbg*/,
1583*7fd79137SRobert Mustacchi     Dwarf_Var**      /*vars*/,
1584*7fd79137SRobert Mustacchi     Dwarf_Signed *   /*number_of_vars*/,
1585*7fd79137SRobert Mustacchi     Dwarf_Error*     /*error*/);
1586*7fd79137SRobert Mustacchi void dwarf_vars_dealloc(Dwarf_Debug /*dbg*/,
1587*7fd79137SRobert Mustacchi     Dwarf_Var*       /*vars*/,
1588*7fd79137SRobert Mustacchi     Dwarf_Signed     /*number_of_vars*/);
1589*7fd79137SRobert Mustacchi 
1590*7fd79137SRobert Mustacchi 
1591*7fd79137SRobert Mustacchi int dwarf_varname(Dwarf_Var /*var*/,
1592*7fd79137SRobert Mustacchi     char   **        /*returned_name*/,
1593*7fd79137SRobert Mustacchi     Dwarf_Error*     /*error*/);
1594*7fd79137SRobert Mustacchi 
1595*7fd79137SRobert Mustacchi int dwarf_var_die_offset(Dwarf_Var /*var*/,
1596*7fd79137SRobert Mustacchi     Dwarf_Off*       /*return_offset*/,
1597*7fd79137SRobert Mustacchi     Dwarf_Error*     /*error*/);
1598*7fd79137SRobert Mustacchi 
1599*7fd79137SRobert Mustacchi int dwarf_var_cu_offset(Dwarf_Var /*var*/,
1600*7fd79137SRobert Mustacchi     Dwarf_Off*       /*return_offset*/,
1601*7fd79137SRobert Mustacchi     Dwarf_Error*     /*error*/);
1602*7fd79137SRobert Mustacchi 
1603*7fd79137SRobert Mustacchi int dwarf_var_name_offsets(Dwarf_Var /*var*/,
1604*7fd79137SRobert Mustacchi     char   **        /*returned_name*/,
1605*7fd79137SRobert Mustacchi     Dwarf_Off*       /*die_offset*/,
1606*7fd79137SRobert Mustacchi     Dwarf_Off*       /*cu_offset*/,
1607*7fd79137SRobert Mustacchi     Dwarf_Error*     /*error*/);
1608*7fd79137SRobert Mustacchi 
1609*7fd79137SRobert Mustacchi /* weak name operations.  */
1610*7fd79137SRobert Mustacchi int dwarf_get_weaks(Dwarf_Debug    /*dbg*/,
1611*7fd79137SRobert Mustacchi     Dwarf_Weak**     /*weaks*/,
1612*7fd79137SRobert Mustacchi     Dwarf_Signed *   /*number_of_weaks*/,
1613*7fd79137SRobert Mustacchi     Dwarf_Error*     /*error*/);
1614*7fd79137SRobert Mustacchi void dwarf_weaks_dealloc(Dwarf_Debug /*dbg*/,
1615*7fd79137SRobert Mustacchi     Dwarf_Weak*      /*weaks*/,
1616*7fd79137SRobert Mustacchi     Dwarf_Signed     /*number_of_weaks*/);
1617*7fd79137SRobert Mustacchi 
1618*7fd79137SRobert Mustacchi 
1619*7fd79137SRobert Mustacchi int dwarf_weakname(Dwarf_Weak /*weak*/,
1620*7fd79137SRobert Mustacchi     char   **        /*returned_name*/,
1621*7fd79137SRobert Mustacchi     Dwarf_Error*     /*error*/);
1622*7fd79137SRobert Mustacchi 
1623*7fd79137SRobert Mustacchi int dwarf_weak_die_offset(Dwarf_Weak /*weak*/,
1624*7fd79137SRobert Mustacchi     Dwarf_Off*       /*return_offset*/,
1625*7fd79137SRobert Mustacchi     Dwarf_Error*     /*error*/);
1626*7fd79137SRobert Mustacchi 
1627*7fd79137SRobert Mustacchi int dwarf_weak_cu_offset(Dwarf_Weak /*weak*/,
1628*7fd79137SRobert Mustacchi     Dwarf_Off*       /*return_offset*/,
1629*7fd79137SRobert Mustacchi     Dwarf_Error*     /*error*/);
1630*7fd79137SRobert Mustacchi 
1631*7fd79137SRobert Mustacchi int dwarf_weak_name_offsets(Dwarf_Weak    /*weak*/,
1632*7fd79137SRobert Mustacchi     char   **        /*returned_name*/,
1633*7fd79137SRobert Mustacchi     Dwarf_Off*       /*die_offset*/,
1634*7fd79137SRobert Mustacchi     Dwarf_Off*       /*cu_offset*/,
1635*7fd79137SRobert Mustacchi     Dwarf_Error*     /*error*/);
1636*7fd79137SRobert Mustacchi 
1637*7fd79137SRobert Mustacchi /* location list section operation.  (.debug_loc access) */
1638*7fd79137SRobert Mustacchi int dwarf_get_loclist_entry(Dwarf_Debug /*dbg*/,
1639*7fd79137SRobert Mustacchi     Dwarf_Unsigned   /*offset*/,
1640*7fd79137SRobert Mustacchi     Dwarf_Addr*      /*hipc*/,
1641*7fd79137SRobert Mustacchi     Dwarf_Addr*      /*lopc*/,
1642*7fd79137SRobert Mustacchi     Dwarf_Ptr*       /*data*/,
1643*7fd79137SRobert Mustacchi     Dwarf_Unsigned*  /*entry_len*/,
1644*7fd79137SRobert Mustacchi     Dwarf_Unsigned*  /*next_entry*/,
1645*7fd79137SRobert Mustacchi     Dwarf_Error*     /*error*/);
1646*7fd79137SRobert Mustacchi 
1647*7fd79137SRobert Mustacchi /* abbreviation section operations */
1648*7fd79137SRobert Mustacchi int dwarf_get_abbrev(Dwarf_Debug /*dbg*/,
1649*7fd79137SRobert Mustacchi     Dwarf_Unsigned   /*offset*/,
1650*7fd79137SRobert Mustacchi     Dwarf_Abbrev  *  /*returned_abbrev*/,
1651*7fd79137SRobert Mustacchi     Dwarf_Unsigned*  /*length*/,
1652*7fd79137SRobert Mustacchi     Dwarf_Unsigned*  /*attr_count*/,
1653*7fd79137SRobert Mustacchi     Dwarf_Error*     /*error*/);
1654*7fd79137SRobert Mustacchi 
1655*7fd79137SRobert Mustacchi int dwarf_get_abbrev_tag(Dwarf_Abbrev /*abbrev*/,
1656*7fd79137SRobert Mustacchi     Dwarf_Half*      /*return_tag_number*/,
1657*7fd79137SRobert Mustacchi     Dwarf_Error*     /*error*/);
1658*7fd79137SRobert Mustacchi int dwarf_get_abbrev_code(Dwarf_Abbrev /*abbrev*/,
1659*7fd79137SRobert Mustacchi     Dwarf_Unsigned*  /*return_code_number*/,
1660*7fd79137SRobert Mustacchi     Dwarf_Error*     /*error*/);
1661*7fd79137SRobert Mustacchi 
1662*7fd79137SRobert Mustacchi int dwarf_get_abbrev_children_flag(Dwarf_Abbrev /*abbrev*/,
1663*7fd79137SRobert Mustacchi     Dwarf_Signed*    /*return_flag*/,
1664*7fd79137SRobert Mustacchi     Dwarf_Error*     /*error*/);
1665*7fd79137SRobert Mustacchi 
1666*7fd79137SRobert Mustacchi int dwarf_get_abbrev_entry(Dwarf_Abbrev /*abbrev*/,
1667*7fd79137SRobert Mustacchi     Dwarf_Signed     /*index*/,
1668*7fd79137SRobert Mustacchi     Dwarf_Half  *    /*returned_attr_num*/,
1669*7fd79137SRobert Mustacchi     Dwarf_Signed*    /*form*/,
1670*7fd79137SRobert Mustacchi     Dwarf_Off*       /*offset*/,
1671*7fd79137SRobert Mustacchi     Dwarf_Error*     /*error*/);
1672*7fd79137SRobert Mustacchi 
1673*7fd79137SRobert Mustacchi /* consumer string section operation */
1674*7fd79137SRobert Mustacchi int dwarf_get_str(Dwarf_Debug /*dbg*/,
1675*7fd79137SRobert Mustacchi     Dwarf_Off        /*offset*/,
1676*7fd79137SRobert Mustacchi     char**           /*string*/,
1677*7fd79137SRobert Mustacchi     Dwarf_Signed *   /*strlen_of_string*/,
1678*7fd79137SRobert Mustacchi     Dwarf_Error*     /*error*/);
1679*7fd79137SRobert Mustacchi 
1680*7fd79137SRobert Mustacchi /* Consumer op on  gnu .eh_frame info */
1681*7fd79137SRobert Mustacchi int dwarf_get_fde_list_eh(
1682*7fd79137SRobert Mustacchi     Dwarf_Debug      /*dbg*/,
1683*7fd79137SRobert Mustacchi     Dwarf_Cie**      /*cie_data*/,
1684*7fd79137SRobert Mustacchi     Dwarf_Signed*    /*cie_element_count*/,
1685*7fd79137SRobert Mustacchi     Dwarf_Fde**      /*fde_data*/,
1686*7fd79137SRobert Mustacchi     Dwarf_Signed*    /*fde_element_count*/,
1687*7fd79137SRobert Mustacchi     Dwarf_Error*     /*error*/);
1688*7fd79137SRobert Mustacchi 
1689*7fd79137SRobert Mustacchi 
1690*7fd79137SRobert Mustacchi /* consumer operations on frame info: .debug_frame */
1691*7fd79137SRobert Mustacchi int dwarf_get_fde_list(Dwarf_Debug /*dbg*/,
1692*7fd79137SRobert Mustacchi     Dwarf_Cie**      /*cie_data*/,
1693*7fd79137SRobert Mustacchi     Dwarf_Signed*    /*cie_element_count*/,
1694*7fd79137SRobert Mustacchi     Dwarf_Fde**      /*fde_data*/,
1695*7fd79137SRobert Mustacchi     Dwarf_Signed*    /*fde_element_count*/,
1696*7fd79137SRobert Mustacchi     Dwarf_Error*     /*error*/);
1697*7fd79137SRobert Mustacchi 
1698*7fd79137SRobert Mustacchi /* Release storage gotten by dwarf_get_fde_list_eh() or
1699*7fd79137SRobert Mustacchi    dwarf_get_fde_list() */
1700*7fd79137SRobert Mustacchi void dwarf_fde_cie_list_dealloc(Dwarf_Debug dbg,
1701*7fd79137SRobert Mustacchi     Dwarf_Cie *cie_data,
1702*7fd79137SRobert Mustacchi     Dwarf_Signed cie_element_count,
1703*7fd79137SRobert Mustacchi     Dwarf_Fde *fde_data,
1704*7fd79137SRobert Mustacchi     Dwarf_Signed fde_element_count);
1705*7fd79137SRobert Mustacchi 
1706*7fd79137SRobert Mustacchi 
1707*7fd79137SRobert Mustacchi 
1708*7fd79137SRobert Mustacchi int dwarf_get_fde_range(Dwarf_Fde /*fde*/,
1709*7fd79137SRobert Mustacchi     Dwarf_Addr*      /*low_pc*/,
1710*7fd79137SRobert Mustacchi     Dwarf_Unsigned*  /*func_length*/,
1711*7fd79137SRobert Mustacchi     Dwarf_Ptr*       /*fde_bytes*/,
1712*7fd79137SRobert Mustacchi     Dwarf_Unsigned*  /*fde_byte_length*/,
1713*7fd79137SRobert Mustacchi     Dwarf_Off*       /*cie_offset*/,
1714*7fd79137SRobert Mustacchi     Dwarf_Signed*    /*cie_index*/,
1715*7fd79137SRobert Mustacchi     Dwarf_Off*       /*fde_offset*/,
1716*7fd79137SRobert Mustacchi     Dwarf_Error*     /*error*/);
1717*7fd79137SRobert Mustacchi 
1718*7fd79137SRobert Mustacchi /*  Useful for IRIX only:  see dwarf_get_cie_augmentation_data()
1719*7fd79137SRobert Mustacchi        dwarf_get_fde_augmentation_data() for GNU .eh_frame. */
1720*7fd79137SRobert Mustacchi int dwarf_get_fde_exception_info(Dwarf_Fde /*fde*/,
1721*7fd79137SRobert Mustacchi     Dwarf_Signed*    /* offset_into_exception_tables */,
1722*7fd79137SRobert Mustacchi     Dwarf_Error*     /*error*/);
1723*7fd79137SRobert Mustacchi 
1724*7fd79137SRobert Mustacchi 
1725*7fd79137SRobert Mustacchi int dwarf_get_cie_of_fde(Dwarf_Fde /*fde*/,
1726*7fd79137SRobert Mustacchi     Dwarf_Cie *      /*cie_returned*/,
1727*7fd79137SRobert Mustacchi     Dwarf_Error*     /*error*/);
1728*7fd79137SRobert Mustacchi 
1729*7fd79137SRobert Mustacchi int dwarf_get_cie_info(Dwarf_Cie /*cie*/,
1730*7fd79137SRobert Mustacchi     Dwarf_Unsigned * /*bytes_in_cie*/,
1731*7fd79137SRobert Mustacchi     Dwarf_Small*     /*version*/,
1732*7fd79137SRobert Mustacchi     char        **   /*augmenter*/,
1733*7fd79137SRobert Mustacchi     Dwarf_Unsigned*  /*code_alignment_factor*/,
1734*7fd79137SRobert Mustacchi     Dwarf_Signed*    /*data_alignment_factor*/,
1735*7fd79137SRobert Mustacchi     Dwarf_Half*      /*return_address_register_rule*/,
1736*7fd79137SRobert Mustacchi     Dwarf_Ptr*       /*initial_instructions*/,
1737*7fd79137SRobert Mustacchi     Dwarf_Unsigned*  /*initial_instructions_length*/,
1738*7fd79137SRobert Mustacchi     Dwarf_Error*     /*error*/);
1739*7fd79137SRobert Mustacchi 
1740*7fd79137SRobert Mustacchi /* dwarf_get_cie_index new September 2009. */
1741*7fd79137SRobert Mustacchi int dwarf_get_cie_index(
1742*7fd79137SRobert Mustacchi     Dwarf_Cie /*cie*/,
1743*7fd79137SRobert Mustacchi     Dwarf_Signed* /*index*/,
1744*7fd79137SRobert Mustacchi     Dwarf_Error* /*error*/ );
1745*7fd79137SRobert Mustacchi 
1746*7fd79137SRobert Mustacchi 
1747*7fd79137SRobert Mustacchi int dwarf_get_fde_instr_bytes(Dwarf_Fde /*fde*/,
1748*7fd79137SRobert Mustacchi     Dwarf_Ptr *      /*outinstrs*/, Dwarf_Unsigned * /*outlen*/,
1749*7fd79137SRobert Mustacchi     Dwarf_Error *    /*error*/);
1750*7fd79137SRobert Mustacchi 
1751*7fd79137SRobert Mustacchi int dwarf_get_fde_info_for_all_regs(Dwarf_Fde /*fde*/,
1752*7fd79137SRobert Mustacchi     Dwarf_Addr       /*pc_requested*/,
1753*7fd79137SRobert Mustacchi     Dwarf_Regtable*  /*reg_table*/,
1754*7fd79137SRobert Mustacchi     Dwarf_Addr*      /*row_pc*/,
1755*7fd79137SRobert Mustacchi     Dwarf_Error*     /*error*/);
1756*7fd79137SRobert Mustacchi 
1757*7fd79137SRobert Mustacchi int dwarf_get_fde_info_for_all_regs3(Dwarf_Fde /*fde*/,
1758*7fd79137SRobert Mustacchi     Dwarf_Addr       /*pc_requested*/,
1759*7fd79137SRobert Mustacchi     Dwarf_Regtable3* /*reg_table*/,
1760*7fd79137SRobert Mustacchi     Dwarf_Addr*      /*row_pc*/,
1761*7fd79137SRobert Mustacchi     Dwarf_Error*     /*error*/);
1762*7fd79137SRobert Mustacchi 
1763*7fd79137SRobert Mustacchi /* In this older interface DW_FRAME_CFA_COL is a meaningful
1764*7fd79137SRobert Mustacchi     column (which does not work well with DWARF3 or
1765*7fd79137SRobert Mustacchi     non-MIPS architectures). */
1766*7fd79137SRobert Mustacchi int dwarf_get_fde_info_for_reg(Dwarf_Fde /*fde*/,
1767*7fd79137SRobert Mustacchi     Dwarf_Half       /*table_column*/,
1768*7fd79137SRobert Mustacchi     Dwarf_Addr       /*pc_requested*/,
1769*7fd79137SRobert Mustacchi     Dwarf_Signed*    /*offset_relevant*/,
1770*7fd79137SRobert Mustacchi     Dwarf_Signed*    /*register*/,
1771*7fd79137SRobert Mustacchi     Dwarf_Signed*    /*offset*/,
1772*7fd79137SRobert Mustacchi     Dwarf_Addr*      /*row_pc*/,
1773*7fd79137SRobert Mustacchi     Dwarf_Error*     /*error*/);
1774*7fd79137SRobert Mustacchi 
1775*7fd79137SRobert Mustacchi /* See discussion of dw_value_type, libdwarf.h.
1776*7fd79137SRobert Mustacchi    Use of DW_FRAME_CFA_COL is not meaningful in this interface.
1777*7fd79137SRobert Mustacchi    See dwarf_get_fde_info_for_cfa_reg3().
1778*7fd79137SRobert Mustacchi */
1779*7fd79137SRobert Mustacchi /* dwarf_get_fde_info_for_reg3 is useful on a single column, but
1780*7fd79137SRobert Mustacchi    it is inefficient to iterate across all table_columns using this
1781*7fd79137SRobert Mustacchi    function.  Instead call dwarf_get_fde_info_for_all_regs3() and index
1782*7fd79137SRobert Mustacchi    into the table it fills in. */
1783*7fd79137SRobert Mustacchi int dwarf_get_fde_info_for_reg3(Dwarf_Fde /*fde*/,
1784*7fd79137SRobert Mustacchi     Dwarf_Half       /*table_column*/,
1785*7fd79137SRobert Mustacchi     Dwarf_Addr       /*pc_requested*/,
1786*7fd79137SRobert Mustacchi     Dwarf_Small  *   /*value_type*/,
1787*7fd79137SRobert Mustacchi     Dwarf_Signed *   /*offset_relevant*/,
1788*7fd79137SRobert Mustacchi     Dwarf_Signed*    /*register*/,
1789*7fd79137SRobert Mustacchi     Dwarf_Signed*    /*offset_or_block_len*/,
1790*7fd79137SRobert Mustacchi     Dwarf_Ptr   *    /*block_ptr */,
1791*7fd79137SRobert Mustacchi     Dwarf_Addr*      /*row_pc_out*/,
1792*7fd79137SRobert Mustacchi     Dwarf_Error*     /*error*/);
1793*7fd79137SRobert Mustacchi 
1794*7fd79137SRobert Mustacchi /* Use this to get the cfa. */
1795*7fd79137SRobert Mustacchi int dwarf_get_fde_info_for_cfa_reg3(Dwarf_Fde /*fde*/,
1796*7fd79137SRobert Mustacchi     Dwarf_Addr       /*pc_requested*/,
1797*7fd79137SRobert Mustacchi     Dwarf_Small  *   /*value_type*/,
1798*7fd79137SRobert Mustacchi     Dwarf_Signed *   /*offset_relevant*/,
1799*7fd79137SRobert Mustacchi     Dwarf_Signed*    /*register*/,
1800*7fd79137SRobert Mustacchi     Dwarf_Signed*    /*offset_or_block_len*/,
1801*7fd79137SRobert Mustacchi     Dwarf_Ptr   *    /*block_ptr */,
1802*7fd79137SRobert Mustacchi     Dwarf_Addr*      /*row_pc_out*/,
1803*7fd79137SRobert Mustacchi     Dwarf_Error*     /*error*/);
1804*7fd79137SRobert Mustacchi 
1805*7fd79137SRobert Mustacchi int dwarf_get_fde_for_die(Dwarf_Debug /*dbg*/,
1806*7fd79137SRobert Mustacchi     Dwarf_Die        /*subr_die */,
1807*7fd79137SRobert Mustacchi     Dwarf_Fde  *     /*returned_fde*/,
1808*7fd79137SRobert Mustacchi     Dwarf_Error*     /*error*/);
1809*7fd79137SRobert Mustacchi 
1810*7fd79137SRobert Mustacchi int dwarf_get_fde_n(Dwarf_Fde* /*fde_data*/,
1811*7fd79137SRobert Mustacchi     Dwarf_Unsigned   /*fde_index*/,
1812*7fd79137SRobert Mustacchi     Dwarf_Fde  *     /*returned_fde*/,
1813*7fd79137SRobert Mustacchi     Dwarf_Error*     /*error*/);
1814*7fd79137SRobert Mustacchi 
1815*7fd79137SRobert Mustacchi int dwarf_get_fde_at_pc(Dwarf_Fde* /*fde_data*/,
1816*7fd79137SRobert Mustacchi     Dwarf_Addr       /*pc_of_interest*/,
1817*7fd79137SRobert Mustacchi     Dwarf_Fde  *     /*returned_fde*/,
1818*7fd79137SRobert Mustacchi     Dwarf_Addr*      /*lopc*/,
1819*7fd79137SRobert Mustacchi     Dwarf_Addr*      /*hipc*/,
1820*7fd79137SRobert Mustacchi     Dwarf_Error*     /*error*/);
1821*7fd79137SRobert Mustacchi 
1822*7fd79137SRobert Mustacchi /* GNU .eh_frame augmentation information, raw form, see
1823*7fd79137SRobert Mustacchi    Linux Standard Base Core Specification version 3.0 . */
1824*7fd79137SRobert Mustacchi int dwarf_get_cie_augmentation_data(Dwarf_Cie /* cie*/,
1825*7fd79137SRobert Mustacchi     Dwarf_Small **   /* augdata */,
1826*7fd79137SRobert Mustacchi     Dwarf_Unsigned * /* augdata_len */,
1827*7fd79137SRobert Mustacchi     Dwarf_Error*     /*error*/);
1828*7fd79137SRobert Mustacchi /* GNU .eh_frame augmentation information, raw form, see
1829*7fd79137SRobert Mustacchi    Linux Standard Base Core Specification version 3.0 . */
1830*7fd79137SRobert Mustacchi int dwarf_get_fde_augmentation_data(Dwarf_Fde /* fde*/,
1831*7fd79137SRobert Mustacchi     Dwarf_Small **   /* augdata */,
1832*7fd79137SRobert Mustacchi     Dwarf_Unsigned * /* augdata_len */,
1833*7fd79137SRobert Mustacchi     Dwarf_Error*     /*error*/);
1834*7fd79137SRobert Mustacchi 
1835*7fd79137SRobert Mustacchi int dwarf_expand_frame_instructions(Dwarf_Cie /*cie*/,
1836*7fd79137SRobert Mustacchi     Dwarf_Ptr        /*instruction*/,
1837*7fd79137SRobert Mustacchi     Dwarf_Unsigned   /*i_length*/,
1838*7fd79137SRobert Mustacchi     Dwarf_Frame_Op** /*returned_op_list*/,
1839*7fd79137SRobert Mustacchi     Dwarf_Signed*    /*op_count*/,
1840*7fd79137SRobert Mustacchi     Dwarf_Error*     /*error*/);
1841*7fd79137SRobert Mustacchi 
1842*7fd79137SRobert Mustacchi /* Operations on .debug_aranges. */
1843*7fd79137SRobert Mustacchi int dwarf_get_aranges(Dwarf_Debug /*dbg*/,
1844*7fd79137SRobert Mustacchi     Dwarf_Arange**   /*aranges*/,
1845*7fd79137SRobert Mustacchi     Dwarf_Signed *   /*arange_count*/,
1846*7fd79137SRobert Mustacchi     Dwarf_Error*     /*error*/);
1847*7fd79137SRobert Mustacchi 
1848*7fd79137SRobert Mustacchi 
1849*7fd79137SRobert Mustacchi 
1850*7fd79137SRobert Mustacchi int dwarf_get_arange(
1851*7fd79137SRobert Mustacchi     Dwarf_Arange*    /*aranges*/,
1852*7fd79137SRobert Mustacchi     Dwarf_Unsigned   /*arange_count*/,
1853*7fd79137SRobert Mustacchi     Dwarf_Addr       /*address*/,
1854*7fd79137SRobert Mustacchi     Dwarf_Arange *   /*returned_arange*/,
1855*7fd79137SRobert Mustacchi     Dwarf_Error*     /*error*/);
1856*7fd79137SRobert Mustacchi 
1857*7fd79137SRobert Mustacchi int dwarf_get_cu_die_offset(
1858*7fd79137SRobert Mustacchi     Dwarf_Arange     /*arange*/,
1859*7fd79137SRobert Mustacchi     Dwarf_Off*       /*return_offset*/,
1860*7fd79137SRobert Mustacchi     Dwarf_Error*     /*error*/);
1861*7fd79137SRobert Mustacchi 
1862*7fd79137SRobert Mustacchi int dwarf_get_arange_cu_header_offset(
1863*7fd79137SRobert Mustacchi     Dwarf_Arange     /*arange*/,
1864*7fd79137SRobert Mustacchi     Dwarf_Off*       /*return_cu_header_offset*/,
1865*7fd79137SRobert Mustacchi     Dwarf_Error*     /*error*/);
1866*7fd79137SRobert Mustacchi #ifdef __sgi /* pragma is sgi MIPS only */
1867*7fd79137SRobert Mustacchi #pragma optional dwarf_get_arange_cu_header_offset
1868*7fd79137SRobert Mustacchi #endif
1869*7fd79137SRobert Mustacchi 
1870*7fd79137SRobert Mustacchi /* DWARF2,3 interface. No longer really adequate (it was never
1871*7fd79137SRobert Mustacchi    right for segmented address spaces, please switch
1872*7fd79137SRobert Mustacchi    to using dwarf_get_arange_info_b instead.
1873*7fd79137SRobert Mustacchi    There is no effective difference between these
1874*7fd79137SRobert Mustacchi    functions  if the address space
1875*7fd79137SRobert Mustacchi    of the target is not segmented.  */
1876*7fd79137SRobert Mustacchi int dwarf_get_arange_info(
1877*7fd79137SRobert Mustacchi     Dwarf_Arange     /*arange*/,
1878*7fd79137SRobert Mustacchi     Dwarf_Addr*      /*start*/,
1879*7fd79137SRobert Mustacchi     Dwarf_Unsigned*  /*length*/,
1880*7fd79137SRobert Mustacchi     Dwarf_Off*       /*cu_die_offset*/,
1881*7fd79137SRobert Mustacchi     Dwarf_Error*     /*error*/ );
1882*7fd79137SRobert Mustacchi 
1883*7fd79137SRobert Mustacchi /* New for DWARF4, entries may have segment information.
1884*7fd79137SRobert Mustacchi    *segment is only meaningful if *segment_entry_size is non-zero. */
1885*7fd79137SRobert Mustacchi int dwarf_get_arange_info_b(
1886*7fd79137SRobert Mustacchi     Dwarf_Arange     /*arange*/,
1887*7fd79137SRobert Mustacchi     Dwarf_Unsigned*  /*segment*/,
1888*7fd79137SRobert Mustacchi     Dwarf_Unsigned*  /*segment_entry_size*/,
1889*7fd79137SRobert Mustacchi     Dwarf_Addr    *  /*start*/,
1890*7fd79137SRobert Mustacchi     Dwarf_Unsigned*  /*length*/,
1891*7fd79137SRobert Mustacchi     Dwarf_Off     *  /*cu_die_offset*/,
1892*7fd79137SRobert Mustacchi     Dwarf_Error   *  /*error*/ );
1893*7fd79137SRobert Mustacchi 
1894*7fd79137SRobert Mustacchi 
1895*7fd79137SRobert Mustacchi /* consumer .debug_macinfo information interface.
1896*7fd79137SRobert Mustacchi */
1897*7fd79137SRobert Mustacchi struct Dwarf_Macro_Details_s {
1898*7fd79137SRobert Mustacchi     Dwarf_Off    dmd_offset; /* offset, in the section,
1899*7fd79137SRobert Mustacchi                               of this macro info */
1900*7fd79137SRobert Mustacchi     Dwarf_Small  dmd_type;   /* the type, DW_MACINFO_define etc*/
1901*7fd79137SRobert Mustacchi     Dwarf_Signed dmd_lineno; /* the source line number where
1902*7fd79137SRobert Mustacchi                               applicable and vend_def # if
1903*7fd79137SRobert Mustacchi                               vendor_extension op
1904*7fd79137SRobert Mustacchi                              */
1905*7fd79137SRobert Mustacchi 
1906*7fd79137SRobert Mustacchi     Dwarf_Signed dmd_fileindex;/* the source file index:
1907*7fd79137SRobert Mustacchi                               applies to define undef start_file
1908*7fd79137SRobert Mustacchi                                */
1909*7fd79137SRobert Mustacchi     char *       dmd_macro;  /* macro name (with value for defineop)
1910*7fd79137SRobert Mustacchi                               string from vendor ext
1911*7fd79137SRobert Mustacchi                              */
1912*7fd79137SRobert Mustacchi };
1913*7fd79137SRobert Mustacchi 
1914*7fd79137SRobert Mustacchi /* dwarf_print_lines is for use by dwarfdump: it prints
1915*7fd79137SRobert Mustacchi    line info to stdout.
1916*7fd79137SRobert Mustacchi    The _dwarf name is obsolete. Use dwarf_ instead.
1917*7fd79137SRobert Mustacchi    Added extra argnument 2/2009 for better checking.
1918*7fd79137SRobert Mustacchi */
1919*7fd79137SRobert Mustacchi int _dwarf_print_lines(Dwarf_Die /*cu_die*/,Dwarf_Error * /*error*/);
1920*7fd79137SRobert Mustacchi int dwarf_print_lines(Dwarf_Die /*cu_die*/,Dwarf_Error * /*error*/,
1921*7fd79137SRobert Mustacchi    int * /*error_count_out */);
1922*7fd79137SRobert Mustacchi 
1923*7fd79137SRobert Mustacchi /* dwarf_check_lineheader lets dwarfdump get detailed messages
1924*7fd79137SRobert Mustacchi    about some compiler errors we detect.
1925*7fd79137SRobert Mustacchi    We return the count of detected errors throught the
1926*7fd79137SRobert Mustacchi    pointer.
1927*7fd79137SRobert Mustacchi */
1928*7fd79137SRobert Mustacchi void dwarf_check_lineheader(Dwarf_Die /*cu_die*/,int *errcount_out);
1929*7fd79137SRobert Mustacchi 
1930*7fd79137SRobert Mustacchi /* dwarf_ld_sort_lines helps SGI IRIX ld
1931*7fd79137SRobert Mustacchi    rearrange lines in .debug_line in a .o created with a text
1932*7fd79137SRobert Mustacchi    section per function.
1933*7fd79137SRobert Mustacchi         -OPT:procedure_reorder=ON
1934*7fd79137SRobert Mustacchi    where ld-cord (cord(1)ing by ld,
1935*7fd79137SRobert Mustacchi    not by cord(1)) may have changed the function order.
1936*7fd79137SRobert Mustacchi    The _dwarf name is obsolete. Use dwarf_ instead.
1937*7fd79137SRobert Mustacchi */
1938*7fd79137SRobert Mustacchi int _dwarf_ld_sort_lines(
1939*7fd79137SRobert Mustacchi     void *         /*orig_buffer*/,
1940*7fd79137SRobert Mustacchi     unsigned long  /* buffer_len*/,
1941*7fd79137SRobert Mustacchi     int            /*is_64_bit*/,
1942*7fd79137SRobert Mustacchi     int *          /*any_change*/,
1943*7fd79137SRobert Mustacchi     int *          /*err_code*/);
1944*7fd79137SRobert Mustacchi int dwarf_ld_sort_lines(
1945*7fd79137SRobert Mustacchi     void *         /*orig_buffer*/,
1946*7fd79137SRobert Mustacchi     unsigned long  /*buffer_len*/,
1947*7fd79137SRobert Mustacchi     int            /*is_64_bit*/,
1948*7fd79137SRobert Mustacchi     int *          /*any_change*/,
1949*7fd79137SRobert Mustacchi     int *          /*err_code*/);
1950*7fd79137SRobert Mustacchi 
1951*7fd79137SRobert Mustacchi /* Used by dwarfdump -v to print fde offsets from debugging
1952*7fd79137SRobert Mustacchi    info.
1953*7fd79137SRobert Mustacchi    The _dwarf name is obsolete. Use dwarf_ instead.
1954*7fd79137SRobert Mustacchi */
1955*7fd79137SRobert Mustacchi int _dwarf_fde_section_offset(Dwarf_Debug dbg,
1956*7fd79137SRobert Mustacchi     Dwarf_Fde         /*in_fde*/,
1957*7fd79137SRobert Mustacchi     Dwarf_Off *       /*fde_off*/,
1958*7fd79137SRobert Mustacchi     Dwarf_Off *       /*cie_off*/,
1959*7fd79137SRobert Mustacchi     Dwarf_Error *     /*err*/);
1960*7fd79137SRobert Mustacchi int dwarf_fde_section_offset(Dwarf_Debug dbg,
1961*7fd79137SRobert Mustacchi     Dwarf_Fde         /*in_fde*/,
1962*7fd79137SRobert Mustacchi     Dwarf_Off *       /*fde_off*/,
1963*7fd79137SRobert Mustacchi     Dwarf_Off *       /*cie_off*/,
1964*7fd79137SRobert Mustacchi     Dwarf_Error *     /*err*/);
1965*7fd79137SRobert Mustacchi 
1966*7fd79137SRobert Mustacchi /* Used by dwarfdump -v to print cie offsets from debugging
1967*7fd79137SRobert Mustacchi    info.
1968*7fd79137SRobert Mustacchi    The _dwarf name is obsolete. Use dwarf_ instead.
1969*7fd79137SRobert Mustacchi */
1970*7fd79137SRobert Mustacchi int dwarf_cie_section_offset(Dwarf_Debug /*dbg*/,
1971*7fd79137SRobert Mustacchi     Dwarf_Cie     /*in_cie*/,
1972*7fd79137SRobert Mustacchi     Dwarf_Off *   /*cie_off */,
1973*7fd79137SRobert Mustacchi     Dwarf_Error * /*err*/);
1974*7fd79137SRobert Mustacchi int _dwarf_cie_section_offset(Dwarf_Debug /*dbg*/,
1975*7fd79137SRobert Mustacchi     Dwarf_Cie     /*in_cie*/,
1976*7fd79137SRobert Mustacchi     Dwarf_Off *   /*cie_off*/,
1977*7fd79137SRobert Mustacchi     Dwarf_Error * /*err*/);
1978*7fd79137SRobert Mustacchi 
1979*7fd79137SRobert Mustacchi typedef struct Dwarf_Macro_Details_s Dwarf_Macro_Details;
1980*7fd79137SRobert Mustacchi 
1981*7fd79137SRobert Mustacchi int dwarf_get_macro(Dwarf_Debug /*dbg*/,
1982*7fd79137SRobert Mustacchi     char *        /*requested_macro_name*/,
1983*7fd79137SRobert Mustacchi     Dwarf_Addr    /*pc_of_request*/,
1984*7fd79137SRobert Mustacchi     char **       /*returned_macro_value*/,
1985*7fd79137SRobert Mustacchi     Dwarf_Error * /*error*/);
1986*7fd79137SRobert Mustacchi 
1987*7fd79137SRobert Mustacchi int dwarf_get_all_defined_macros(Dwarf_Debug /*dbg*/,
1988*7fd79137SRobert Mustacchi     Dwarf_Addr     /*pc_of_request*/,
1989*7fd79137SRobert Mustacchi     Dwarf_Signed * /*returned_count*/,
1990*7fd79137SRobert Mustacchi     char ***       /*returned_pointers_to_macros*/,
1991*7fd79137SRobert Mustacchi     Dwarf_Error *  /*error*/);
1992*7fd79137SRobert Mustacchi 
1993*7fd79137SRobert Mustacchi char *dwarf_find_macro_value_start(char * /*macro_string*/);
1994*7fd79137SRobert Mustacchi 
1995*7fd79137SRobert Mustacchi int dwarf_get_macro_details(Dwarf_Debug /*dbg*/,
1996*7fd79137SRobert Mustacchi     Dwarf_Off            /*macro_offset*/,
1997*7fd79137SRobert Mustacchi     Dwarf_Unsigned       /*maximum_count*/,
1998*7fd79137SRobert Mustacchi     Dwarf_Signed         * /*entry_count*/,
1999*7fd79137SRobert Mustacchi     Dwarf_Macro_Details ** /*details*/,
2000*7fd79137SRobert Mustacchi     Dwarf_Error *        /*err*/);
2001*7fd79137SRobert Mustacchi 
2002*7fd79137SRobert Mustacchi 
2003*7fd79137SRobert Mustacchi int dwarf_get_address_size(Dwarf_Debug /*dbg*/,
2004*7fd79137SRobert Mustacchi     Dwarf_Half  *    /*addr_size*/,
2005*7fd79137SRobert Mustacchi     Dwarf_Error *    /*error*/);
2006*7fd79137SRobert Mustacchi int dwarf_get_die_address_size(Dwarf_Die /*die*/,
2007*7fd79137SRobert Mustacchi     Dwarf_Half  *    /*addr_size*/,
2008*7fd79137SRobert Mustacchi     Dwarf_Error *    /*error*/);
2009*7fd79137SRobert Mustacchi 
2010*7fd79137SRobert Mustacchi /* The dwarf specification separates FORMs into
2011*7fd79137SRobert Mustacchi different classes.  To do the seperation properly
2012*7fd79137SRobert Mustacchi requires 4 pieces of data as of DWARF4 (thus the
2013*7fd79137SRobert Mustacchi function arguments listed here).
2014*7fd79137SRobert Mustacchi The DWARF4 specification class definition suffices to
2015*7fd79137SRobert Mustacchi describe all DWARF versions.
2016*7fd79137SRobert Mustacchi See section 7.5.4, Attribute Encodings.
2017*7fd79137SRobert Mustacchi A return of DW_FORM_CLASS_UNKNOWN means we could not properly figure
2018*7fd79137SRobert Mustacchi out what form-class it is.
2019*7fd79137SRobert Mustacchi 
2020*7fd79137SRobert Mustacchi     DW_FORM_CLASS_FRAMEPTR is MIPS/IRIX only, and refers
2021*7fd79137SRobert Mustacchi     to the DW_AT_MIPS_fde attribute (a reference to the
2022*7fd79137SRobert Mustacchi     .debug_frame section).
2023*7fd79137SRobert Mustacchi */
2024*7fd79137SRobert Mustacchi enum Dwarf_Form_Class {
2025*7fd79137SRobert Mustacchi     DW_FORM_CLASS_UNKNOWN,   DW_FORM_CLASS_ADDRESS,
2026*7fd79137SRobert Mustacchi     DW_FORM_CLASS_BLOCK,     DW_FORM_CLASS_CONSTANT,
2027*7fd79137SRobert Mustacchi     DW_FORM_CLASS_EXPRLOC,   DW_FORM_CLASS_FLAG,
2028*7fd79137SRobert Mustacchi     DW_FORM_CLASS_LINEPTR,   DW_FORM_CLASS_LOCLISTPTR,
2029*7fd79137SRobert Mustacchi     DW_FORM_CLASS_MACPTR,    DW_FORM_CLASS_RANGELISTPTR,
2030*7fd79137SRobert Mustacchi     DW_FORM_CLASS_REFERENCE, DW_FORM_CLASS_STRING,
2031*7fd79137SRobert Mustacchi     DW_FORM_CLASS_FRAMEPTR
2032*7fd79137SRobert Mustacchi };
2033*7fd79137SRobert Mustacchi 
2034*7fd79137SRobert Mustacchi enum Dwarf_Form_Class dwarf_get_form_class(
2035*7fd79137SRobert Mustacchi     Dwarf_Half /* dwversion */,
2036*7fd79137SRobert Mustacchi     Dwarf_Half /* attrnum */,
2037*7fd79137SRobert Mustacchi     Dwarf_Half /*offset_size */,
2038*7fd79137SRobert Mustacchi     Dwarf_Half /*form*/);
2039*7fd79137SRobert Mustacchi 
2040*7fd79137SRobert Mustacchi /* utility operations */
2041*7fd79137SRobert Mustacchi Dwarf_Unsigned dwarf_errno(Dwarf_Error     /*error*/);
2042*7fd79137SRobert Mustacchi 
2043*7fd79137SRobert Mustacchi char* dwarf_errmsg(Dwarf_Error    /*error*/);
2044*7fd79137SRobert Mustacchi 
2045*7fd79137SRobert Mustacchi /* stringcheck zero is default and means do all
2046*7fd79137SRobert Mustacchi ** string length validity checks.
2047*7fd79137SRobert Mustacchi ** Call with parameter value 1 to turn off many such checks (and
2048*7fd79137SRobert Mustacchi ** increase performance).
2049*7fd79137SRobert Mustacchi ** Call with zero for safest running.
2050*7fd79137SRobert Mustacchi ** Actual value saved and returned is only 8 bits! Upper bits
2051*7fd79137SRobert Mustacchi ** ignored by libdwarf (and zero on return).
2052*7fd79137SRobert Mustacchi ** Returns previous value.
2053*7fd79137SRobert Mustacchi */
2054*7fd79137SRobert Mustacchi int dwarf_set_stringcheck(int /*stringcheck*/);
2055*7fd79137SRobert Mustacchi 
2056*7fd79137SRobert Mustacchi /* 'apply' defaults to 1 and means do all
2057*7fd79137SRobert Mustacchi  * 'rela' relocations on reading in a dwarf object section with
2058*7fd79137SRobert Mustacchi  * such relocations.
2059*7fd79137SRobert Mustacchi  * Call with parameter value 0 to turn off application of
2060*7fd79137SRobert Mustacchi  * such relocations.
2061*7fd79137SRobert Mustacchi  * Since the static linker leaves 'bogus' data in object sections
2062*7fd79137SRobert Mustacchi  * with a 'rela' relocation section such data cannot be read
2063*7fd79137SRobert Mustacchi  * sensibly without processing the relocations.  Such relocations
2064*7fd79137SRobert Mustacchi  * do not exist in executables and shared objects (.so), the
2065*7fd79137SRobert Mustacchi  * relocations only exist in plain .o relocatable object files.
2066*7fd79137SRobert Mustacchi  * Actual value saved and returned is only 8 bits! Upper bits
2067*7fd79137SRobert Mustacchi  * ignored by libdwarf (and zero on return).
2068*7fd79137SRobert Mustacchi  * Returns previous value.
2069*7fd79137SRobert Mustacchi  * */
2070*7fd79137SRobert Mustacchi int dwarf_set_reloc_application(int /*apply*/);
2071*7fd79137SRobert Mustacchi 
2072*7fd79137SRobert Mustacchi 
2073*7fd79137SRobert Mustacchi /* Unimplemented */
2074*7fd79137SRobert Mustacchi Dwarf_Handler dwarf_seterrhand(Dwarf_Debug /*dbg*/, Dwarf_Handler /*errhand*/);
2075*7fd79137SRobert Mustacchi 
2076*7fd79137SRobert Mustacchi /* Unimplemented */
2077*7fd79137SRobert Mustacchi Dwarf_Ptr dwarf_seterrarg(Dwarf_Debug /*dbg*/, Dwarf_Ptr /*errarg*/);
2078*7fd79137SRobert Mustacchi 
2079*7fd79137SRobert Mustacchi void dwarf_dealloc(Dwarf_Debug /*dbg*/, void* /*space*/,
2080*7fd79137SRobert Mustacchi     Dwarf_Unsigned /*type*/);
2081*7fd79137SRobert Mustacchi 
2082*7fd79137SRobert Mustacchi /* DWARF Producer Interface */
2083*7fd79137SRobert Mustacchi 
2084*7fd79137SRobert Mustacchi typedef int (*Dwarf_Callback_Func)(
2085*7fd79137SRobert Mustacchi     char*           /*name*/,
2086*7fd79137SRobert Mustacchi     int             /*size*/,
2087*7fd79137SRobert Mustacchi     Dwarf_Unsigned  /*type*/,
2088*7fd79137SRobert Mustacchi     Dwarf_Unsigned  /*flags*/,
2089*7fd79137SRobert Mustacchi     Dwarf_Unsigned  /*link*/,
2090*7fd79137SRobert Mustacchi     Dwarf_Unsigned  /*info*/,
2091*7fd79137SRobert Mustacchi     int*            /*sect name index*/,
2092*7fd79137SRobert Mustacchi     int*            /*error*/);
2093*7fd79137SRobert Mustacchi 
2094*7fd79137SRobert Mustacchi Dwarf_P_Debug dwarf_producer_init(
2095*7fd79137SRobert Mustacchi     Dwarf_Unsigned  /*creation_flags*/,
2096*7fd79137SRobert Mustacchi     Dwarf_Callback_Func    /*func*/,
2097*7fd79137SRobert Mustacchi     Dwarf_Handler   /*errhand*/,
2098*7fd79137SRobert Mustacchi     Dwarf_Ptr       /*errarg*/,
2099*7fd79137SRobert Mustacchi     Dwarf_Error*    /*error*/);
2100*7fd79137SRobert Mustacchi 
2101*7fd79137SRobert Mustacchi typedef int (*Dwarf_Callback_Func_b)(
2102*7fd79137SRobert Mustacchi     char*           /*name*/,
2103*7fd79137SRobert Mustacchi     int             /*size*/,
2104*7fd79137SRobert Mustacchi     Dwarf_Unsigned  /*type*/,
2105*7fd79137SRobert Mustacchi     Dwarf_Unsigned  /*flags*/,
2106*7fd79137SRobert Mustacchi     Dwarf_Unsigned  /*link*/,
2107*7fd79137SRobert Mustacchi     Dwarf_Unsigned  /*info*/,
2108*7fd79137SRobert Mustacchi     Dwarf_Unsigned* /*sect_name_index*/,
2109*7fd79137SRobert Mustacchi     int*            /*error*/);
2110*7fd79137SRobert Mustacchi 
2111*7fd79137SRobert Mustacchi 
2112*7fd79137SRobert Mustacchi Dwarf_P_Debug dwarf_producer_init_b(
2113*7fd79137SRobert Mustacchi     Dwarf_Unsigned        /*flags*/,
2114*7fd79137SRobert Mustacchi     Dwarf_Callback_Func_b /*func*/,
2115*7fd79137SRobert Mustacchi     Dwarf_Handler         /*errhand*/,
2116*7fd79137SRobert Mustacchi     Dwarf_Ptr             /*errarg*/,
2117*7fd79137SRobert Mustacchi     Dwarf_Error *         /*error*/);
2118*7fd79137SRobert Mustacchi 
2119*7fd79137SRobert Mustacchi 
2120*7fd79137SRobert Mustacchi Dwarf_Signed dwarf_transform_to_disk_form(Dwarf_P_Debug /*dbg*/,
2121*7fd79137SRobert Mustacchi     Dwarf_Error*     /*error*/);
2122*7fd79137SRobert Mustacchi 
2123*7fd79137SRobert Mustacchi Dwarf_Ptr dwarf_get_section_bytes(Dwarf_P_Debug /*dbg*/,
2124*7fd79137SRobert Mustacchi     Dwarf_Signed     /*dwarf_section*/,
2125*7fd79137SRobert Mustacchi     Dwarf_Signed*    /*elf_section_index*/,
2126*7fd79137SRobert Mustacchi     Dwarf_Unsigned*  /*length*/,
2127*7fd79137SRobert Mustacchi     Dwarf_Error*     /*error*/);
2128*7fd79137SRobert Mustacchi 
2129*7fd79137SRobert Mustacchi int  dwarf_get_relocation_info_count(
2130*7fd79137SRobert Mustacchi     Dwarf_P_Debug    /*dbg*/,
2131*7fd79137SRobert Mustacchi     Dwarf_Unsigned * /*count_of_relocation_sections*/,
2132*7fd79137SRobert Mustacchi     int *                /*drd_buffer_version*/,
2133*7fd79137SRobert Mustacchi     Dwarf_Error*     /*error*/);
2134*7fd79137SRobert Mustacchi 
2135*7fd79137SRobert Mustacchi int dwarf_get_relocation_info(
2136*7fd79137SRobert Mustacchi     Dwarf_P_Debug           /*dbg*/,
2137*7fd79137SRobert Mustacchi     Dwarf_Signed          * /*elf_section_index*/,
2138*7fd79137SRobert Mustacchi     Dwarf_Signed          * /*elf_section_index_link*/,
2139*7fd79137SRobert Mustacchi     Dwarf_Unsigned        * /*relocation_buffer_count*/,
2140*7fd79137SRobert Mustacchi     Dwarf_Relocation_Data * /*reldata_buffer*/,
2141*7fd79137SRobert Mustacchi     Dwarf_Error*            /*error*/);
2142*7fd79137SRobert Mustacchi 
2143*7fd79137SRobert Mustacchi /* v1:  no drd_length field, enum explicit */
2144*7fd79137SRobert Mustacchi /* v2:  has the drd_length field, enum value in uchar member */
2145*7fd79137SRobert Mustacchi #define DWARF_DRD_BUFFER_VERSION 2
2146*7fd79137SRobert Mustacchi 
2147*7fd79137SRobert Mustacchi /* Markers are not written  to DWARF2/3/4, they are user
2148*7fd79137SRobert Mustacchi    defined and may be used for any purpose.
2149*7fd79137SRobert Mustacchi */
2150*7fd79137SRobert Mustacchi Dwarf_Signed dwarf_get_die_markers(
2151*7fd79137SRobert Mustacchi     Dwarf_P_Debug     /*dbg*/,
2152*7fd79137SRobert Mustacchi     Dwarf_P_Marker *  /*marker_list*/,
2153*7fd79137SRobert Mustacchi     Dwarf_Unsigned *  /*marker_count*/,
2154*7fd79137SRobert Mustacchi     Dwarf_Error *     /*error*/);
2155*7fd79137SRobert Mustacchi 
2156*7fd79137SRobert Mustacchi int dwarf_get_string_attributes_count(Dwarf_P_Debug,
2157*7fd79137SRobert Mustacchi     Dwarf_Unsigned *,
2158*7fd79137SRobert Mustacchi     int *,
2159*7fd79137SRobert Mustacchi     Dwarf_Error *);
2160*7fd79137SRobert Mustacchi 
2161*7fd79137SRobert Mustacchi int dwarf_get_string_attributes_info(Dwarf_P_Debug,
2162*7fd79137SRobert Mustacchi     Dwarf_Signed *,
2163*7fd79137SRobert Mustacchi     Dwarf_Unsigned *,
2164*7fd79137SRobert Mustacchi     Dwarf_P_String_Attr *,
2165*7fd79137SRobert Mustacchi     Dwarf_Error *);
2166*7fd79137SRobert Mustacchi 
2167*7fd79137SRobert Mustacchi void dwarf_reset_section_bytes(Dwarf_P_Debug /*dbg*/);
2168*7fd79137SRobert Mustacchi 
2169*7fd79137SRobert Mustacchi Dwarf_Unsigned dwarf_producer_finish(Dwarf_P_Debug /*dbg*/,
2170*7fd79137SRobert Mustacchi     Dwarf_Error* /*error*/);
2171*7fd79137SRobert Mustacchi 
2172*7fd79137SRobert Mustacchi /* Producer attribute addition functions. */
2173*7fd79137SRobert Mustacchi Dwarf_P_Attribute dwarf_add_AT_targ_address(Dwarf_P_Debug /*dbg*/,
2174*7fd79137SRobert Mustacchi     Dwarf_P_Die     /*ownerdie*/,
2175*7fd79137SRobert Mustacchi     Dwarf_Half      /*attr*/,
2176*7fd79137SRobert Mustacchi     Dwarf_Unsigned  /*pc_value*/,
2177*7fd79137SRobert Mustacchi     Dwarf_Signed    /*sym_index*/,
2178*7fd79137SRobert Mustacchi     Dwarf_Error*    /*error*/);
2179*7fd79137SRobert Mustacchi 
2180*7fd79137SRobert Mustacchi Dwarf_P_Attribute dwarf_add_AT_block(Dwarf_P_Debug /*dbg*/,
2181*7fd79137SRobert Mustacchi     Dwarf_P_Die     /*ownerdie*/,
2182*7fd79137SRobert Mustacchi     Dwarf_Half      /*attr*/,
2183*7fd79137SRobert Mustacchi     Dwarf_Small*    /*block_data*/,
2184*7fd79137SRobert Mustacchi     Dwarf_Unsigned  /*block_len*/,
2185*7fd79137SRobert Mustacchi     Dwarf_Error*    /*error*/);
2186*7fd79137SRobert Mustacchi 
2187*7fd79137SRobert Mustacchi Dwarf_P_Attribute dwarf_add_AT_targ_address_b(Dwarf_P_Debug /*dbg*/,
2188*7fd79137SRobert Mustacchi     Dwarf_P_Die     /*ownerdie*/,
2189*7fd79137SRobert Mustacchi     Dwarf_Half      /*attr*/,
2190*7fd79137SRobert Mustacchi     Dwarf_Unsigned  /*pc_value*/,
2191*7fd79137SRobert Mustacchi     Dwarf_Unsigned  /*sym_index*/,
2192*7fd79137SRobert Mustacchi     Dwarf_Error*    /*error*/);
2193*7fd79137SRobert Mustacchi 
2194*7fd79137SRobert Mustacchi Dwarf_P_Attribute dwarf_add_AT_ref_address(Dwarf_P_Debug /*dbg*/,
2195*7fd79137SRobert Mustacchi     Dwarf_P_Die     /*ownerdie*/,
2196*7fd79137SRobert Mustacchi     Dwarf_Half      /*attr*/,
2197*7fd79137SRobert Mustacchi     Dwarf_Unsigned  /*pc_value*/,
2198*7fd79137SRobert Mustacchi     Dwarf_Unsigned  /*sym_index*/,
2199*7fd79137SRobert Mustacchi     Dwarf_Error*    /*error*/);
2200*7fd79137SRobert Mustacchi 
2201*7fd79137SRobert Mustacchi Dwarf_P_Attribute dwarf_add_AT_unsigned_const(Dwarf_P_Debug /*dbg*/,
2202*7fd79137SRobert Mustacchi     Dwarf_P_Die     /*ownerdie*/,
2203*7fd79137SRobert Mustacchi     Dwarf_Half      /*attr*/,
2204*7fd79137SRobert Mustacchi     Dwarf_Unsigned  /*value*/,
2205*7fd79137SRobert Mustacchi     Dwarf_Error*    /*error*/);
2206*7fd79137SRobert Mustacchi 
2207*7fd79137SRobert Mustacchi Dwarf_P_Attribute dwarf_add_AT_signed_const(Dwarf_P_Debug /*dbg*/,
2208*7fd79137SRobert Mustacchi     Dwarf_P_Die     /*ownerdie*/,
2209*7fd79137SRobert Mustacchi     Dwarf_Half      /*attr*/,
2210*7fd79137SRobert Mustacchi     Dwarf_Signed    /*value*/,
2211*7fd79137SRobert Mustacchi     Dwarf_Error*    /*error*/);
2212*7fd79137SRobert Mustacchi 
2213*7fd79137SRobert Mustacchi Dwarf_P_Attribute dwarf_add_AT_reference(Dwarf_P_Debug /*dbg*/,
2214*7fd79137SRobert Mustacchi     Dwarf_P_Die     /*ownerdie*/,
2215*7fd79137SRobert Mustacchi     Dwarf_Half      /*attr*/,
2216*7fd79137SRobert Mustacchi     Dwarf_P_Die     /*otherdie*/,
2217*7fd79137SRobert Mustacchi     Dwarf_Error*    /*error*/);
2218*7fd79137SRobert Mustacchi 
2219*7fd79137SRobert Mustacchi Dwarf_P_Attribute dwarf_add_AT_dataref(
2220*7fd79137SRobert Mustacchi     Dwarf_P_Debug   /* dbg*/,
2221*7fd79137SRobert Mustacchi     Dwarf_P_Die     /*ownerdie*/,
2222*7fd79137SRobert Mustacchi     Dwarf_Half      /*attr*/,
2223*7fd79137SRobert Mustacchi     Dwarf_Unsigned  /*pcvalue*/,
2224*7fd79137SRobert Mustacchi     Dwarf_Unsigned  /*sym_index*/,
2225*7fd79137SRobert Mustacchi     Dwarf_Error*    /*error*/);
2226*7fd79137SRobert Mustacchi 
2227*7fd79137SRobert Mustacchi Dwarf_P_Attribute dwarf_add_AT_const_value_string(Dwarf_P_Die /*ownerdie*/,
2228*7fd79137SRobert Mustacchi     char*           /*string_value*/,
2229*7fd79137SRobert Mustacchi     Dwarf_Error*    /*error*/);
2230*7fd79137SRobert Mustacchi 
2231*7fd79137SRobert Mustacchi Dwarf_P_Attribute dwarf_add_AT_location_expr(Dwarf_P_Debug /*dbg*/,
2232*7fd79137SRobert Mustacchi     Dwarf_P_Die     /*ownerdie*/,
2233*7fd79137SRobert Mustacchi     Dwarf_Half      /*attr*/,
2234*7fd79137SRobert Mustacchi     Dwarf_P_Expr    /*loc_expr*/,
2235*7fd79137SRobert Mustacchi     Dwarf_Error*    /*error*/);
2236*7fd79137SRobert Mustacchi 
2237*7fd79137SRobert Mustacchi Dwarf_P_Attribute dwarf_add_AT_string(Dwarf_P_Debug /*dbg*/,
2238*7fd79137SRobert Mustacchi     Dwarf_P_Die     /*ownerdie*/,
2239*7fd79137SRobert Mustacchi     Dwarf_Half      /*attr*/,
2240*7fd79137SRobert Mustacchi     char*           /*string*/,
2241*7fd79137SRobert Mustacchi     Dwarf_Error*     /*error*/);
2242*7fd79137SRobert Mustacchi 
2243*7fd79137SRobert Mustacchi Dwarf_P_Attribute dwarf_add_AT_flag(Dwarf_P_Debug /*dbg*/,
2244*7fd79137SRobert Mustacchi     Dwarf_P_Die     /*ownerdie*/,
2245*7fd79137SRobert Mustacchi     Dwarf_Half      /*attr*/,
2246*7fd79137SRobert Mustacchi     Dwarf_Small     /*flag*/,
2247*7fd79137SRobert Mustacchi     Dwarf_Error*    /*error*/);
2248*7fd79137SRobert Mustacchi 
2249*7fd79137SRobert Mustacchi Dwarf_P_Attribute dwarf_add_AT_producer(Dwarf_P_Die /*ownerdie*/,
2250*7fd79137SRobert Mustacchi     char*           /*producer_string*/,
2251*7fd79137SRobert Mustacchi     Dwarf_Error*    /*error*/);
2252*7fd79137SRobert Mustacchi 
2253*7fd79137SRobert Mustacchi Dwarf_P_Attribute dwarf_add_AT_const_value_signedint(Dwarf_P_Die /*ownerdie*/,
2254*7fd79137SRobert Mustacchi     Dwarf_Signed    /*signed_value*/,
2255*7fd79137SRobert Mustacchi     Dwarf_Error*    /*error*/);
2256*7fd79137SRobert Mustacchi 
2257*7fd79137SRobert Mustacchi Dwarf_P_Attribute dwarf_add_AT_const_value_unsignedint(
2258*7fd79137SRobert Mustacchi     Dwarf_P_Die     /*ownerdie*/,
2259*7fd79137SRobert Mustacchi     Dwarf_Unsigned  /*unsigned_value*/,
2260*7fd79137SRobert Mustacchi     Dwarf_Error*    /*error*/);
2261*7fd79137SRobert Mustacchi 
2262*7fd79137SRobert Mustacchi Dwarf_P_Attribute dwarf_add_AT_comp_dir(Dwarf_P_Die /*ownerdie*/,
2263*7fd79137SRobert Mustacchi     char*           /*current_working_directory*/,
2264*7fd79137SRobert Mustacchi     Dwarf_Error*    /*error*/);
2265*7fd79137SRobert Mustacchi 
2266*7fd79137SRobert Mustacchi Dwarf_P_Attribute dwarf_add_AT_name(Dwarf_P_Die    /*die*/,
2267*7fd79137SRobert Mustacchi     char*           /*name*/,
2268*7fd79137SRobert Mustacchi     Dwarf_Error*    /*error*/);
2269*7fd79137SRobert Mustacchi 
2270*7fd79137SRobert Mustacchi /* Producer line creation functions (.debug_line) */
2271*7fd79137SRobert Mustacchi Dwarf_Unsigned dwarf_add_directory_decl(Dwarf_P_Debug /*dbg*/,
2272*7fd79137SRobert Mustacchi     char*           /*name*/,
2273*7fd79137SRobert Mustacchi     Dwarf_Error*    /*error*/);
2274*7fd79137SRobert Mustacchi 
2275*7fd79137SRobert Mustacchi Dwarf_Unsigned dwarf_add_file_decl(Dwarf_P_Debug /*dbg*/,
2276*7fd79137SRobert Mustacchi     char*           /*name*/,
2277*7fd79137SRobert Mustacchi     Dwarf_Unsigned  /*dir_index*/,
2278*7fd79137SRobert Mustacchi     Dwarf_Unsigned  /*time_last_modified*/,
2279*7fd79137SRobert Mustacchi     Dwarf_Unsigned  /*length*/,
2280*7fd79137SRobert Mustacchi     Dwarf_Error*    /*error*/);
2281*7fd79137SRobert Mustacchi 
2282*7fd79137SRobert Mustacchi Dwarf_Unsigned dwarf_add_line_entry(Dwarf_P_Debug /*dbg*/,
2283*7fd79137SRobert Mustacchi     Dwarf_Unsigned  /*file_index*/,
2284*7fd79137SRobert Mustacchi     Dwarf_Addr      /*code_address*/,
2285*7fd79137SRobert Mustacchi     Dwarf_Unsigned  /*lineno*/,
2286*7fd79137SRobert Mustacchi     Dwarf_Signed    /*column_number*/,
2287*7fd79137SRobert Mustacchi     Dwarf_Bool      /*is_source_stmt_begin*/,
2288*7fd79137SRobert Mustacchi     Dwarf_Bool      /*is_basic_block_begin*/,
2289*7fd79137SRobert Mustacchi     Dwarf_Error*    /*error*/);
2290*7fd79137SRobert Mustacchi 
2291*7fd79137SRobert Mustacchi Dwarf_Unsigned dwarf_lne_set_address(Dwarf_P_Debug /*dbg*/,
2292*7fd79137SRobert Mustacchi     Dwarf_Unsigned  /*offset*/,
2293*7fd79137SRobert Mustacchi     Dwarf_Unsigned  /*symbol_index*/,
2294*7fd79137SRobert Mustacchi     Dwarf_Error*    /*error*/);
2295*7fd79137SRobert Mustacchi 
2296*7fd79137SRobert Mustacchi Dwarf_Unsigned dwarf_lne_end_sequence(Dwarf_P_Debug /*dbg*/,
2297*7fd79137SRobert Mustacchi     Dwarf_Addr      /*end_address*/,
2298*7fd79137SRobert Mustacchi     Dwarf_Error*    /*error*/);
2299*7fd79137SRobert Mustacchi 
2300*7fd79137SRobert Mustacchi /* Producer .debug_frame functions */
2301*7fd79137SRobert Mustacchi Dwarf_Unsigned dwarf_add_frame_cie(Dwarf_P_Debug /*dbg*/,
2302*7fd79137SRobert Mustacchi     char*           /*augmenter*/,
2303*7fd79137SRobert Mustacchi     Dwarf_Small     /*code_alignent_factor*/,
2304*7fd79137SRobert Mustacchi     Dwarf_Small     /*data_alignment_factor*/,
2305*7fd79137SRobert Mustacchi     Dwarf_Small     /*return_address_reg*/,
2306*7fd79137SRobert Mustacchi     Dwarf_Ptr       /*initialization_bytes*/,
2307*7fd79137SRobert Mustacchi     Dwarf_Unsigned  /*init_byte_len*/,
2308*7fd79137SRobert Mustacchi     Dwarf_Error*    /*error*/);
2309*7fd79137SRobert Mustacchi 
2310*7fd79137SRobert Mustacchi Dwarf_Unsigned dwarf_add_frame_fde(
2311*7fd79137SRobert Mustacchi     Dwarf_P_Debug   /*dbg*/,
2312*7fd79137SRobert Mustacchi     Dwarf_P_Fde     /*fde*/,
2313*7fd79137SRobert Mustacchi     Dwarf_P_Die     /*corresponding subprogram die*/,
2314*7fd79137SRobert Mustacchi     Dwarf_Unsigned  /*cie_to_use*/,
2315*7fd79137SRobert Mustacchi     Dwarf_Unsigned  /*virt_addr_of_described_code*/,
2316*7fd79137SRobert Mustacchi     Dwarf_Unsigned  /*length_of_code*/,
2317*7fd79137SRobert Mustacchi     Dwarf_Unsigned  /*symbol_index*/,
2318*7fd79137SRobert Mustacchi     Dwarf_Error*    /*error*/);
2319*7fd79137SRobert Mustacchi 
2320*7fd79137SRobert Mustacchi Dwarf_Unsigned dwarf_add_frame_fde_b(
2321*7fd79137SRobert Mustacchi     Dwarf_P_Debug  /*dbg*/,
2322*7fd79137SRobert Mustacchi     Dwarf_P_Fde    /*fde*/,
2323*7fd79137SRobert Mustacchi     Dwarf_P_Die    /*die*/,
2324*7fd79137SRobert Mustacchi     Dwarf_Unsigned /*cie*/,
2325*7fd79137SRobert Mustacchi     Dwarf_Addr     /*virt_addr*/,
2326*7fd79137SRobert Mustacchi     Dwarf_Unsigned /*code_len*/,
2327*7fd79137SRobert Mustacchi     Dwarf_Unsigned /*sym_idx*/,
2328*7fd79137SRobert Mustacchi     Dwarf_Unsigned /*sym_idx_of_end*/,
2329*7fd79137SRobert Mustacchi     Dwarf_Addr     /*offset_from_end_sym*/,
2330*7fd79137SRobert Mustacchi     Dwarf_Error*   /*error*/);
2331*7fd79137SRobert Mustacchi 
2332*7fd79137SRobert Mustacchi Dwarf_Unsigned dwarf_add_frame_info_b(
2333*7fd79137SRobert Mustacchi     Dwarf_P_Debug dbg   /*dbg*/,
2334*7fd79137SRobert Mustacchi     Dwarf_P_Fde     /*fde*/,
2335*7fd79137SRobert Mustacchi     Dwarf_P_Die     /*die*/,
2336*7fd79137SRobert Mustacchi     Dwarf_Unsigned  /*cie*/,
2337*7fd79137SRobert Mustacchi     Dwarf_Addr      /*virt_addr*/,
2338*7fd79137SRobert Mustacchi     Dwarf_Unsigned  /*code_len*/,
2339*7fd79137SRobert Mustacchi     Dwarf_Unsigned  /*symidx*/,
2340*7fd79137SRobert Mustacchi     Dwarf_Unsigned  /*end_symbol */,
2341*7fd79137SRobert Mustacchi     Dwarf_Addr      /*offset_from_end_symbol */,
2342*7fd79137SRobert Mustacchi     Dwarf_Signed    /*offset_into_exception_tables*/,
2343*7fd79137SRobert Mustacchi     Dwarf_Unsigned  /*exception_table_symbol*/,
2344*7fd79137SRobert Mustacchi     Dwarf_Error*    /*error*/);
2345*7fd79137SRobert Mustacchi 
2346*7fd79137SRobert Mustacchi Dwarf_Unsigned dwarf_add_frame_info(
2347*7fd79137SRobert Mustacchi     Dwarf_P_Debug dbg   /*dbg*/,
2348*7fd79137SRobert Mustacchi     Dwarf_P_Fde     /*fde*/,
2349*7fd79137SRobert Mustacchi     Dwarf_P_Die     /*die*/,
2350*7fd79137SRobert Mustacchi     Dwarf_Unsigned  /*cie*/,
2351*7fd79137SRobert Mustacchi     Dwarf_Addr      /*virt_addr*/,
2352*7fd79137SRobert Mustacchi     Dwarf_Unsigned  /*code_len*/,
2353*7fd79137SRobert Mustacchi     Dwarf_Unsigned  /*symidx*/,
2354*7fd79137SRobert Mustacchi     Dwarf_Signed    /*offset_into_exception_tables*/,
2355*7fd79137SRobert Mustacchi     Dwarf_Unsigned  /*exception_table_symbol*/,
2356*7fd79137SRobert Mustacchi     Dwarf_Error*    /*error*/);
2357*7fd79137SRobert Mustacchi 
2358*7fd79137SRobert Mustacchi Dwarf_P_Fde dwarf_add_fde_inst(
2359*7fd79137SRobert Mustacchi     Dwarf_P_Fde     /*fde*/,
2360*7fd79137SRobert Mustacchi     Dwarf_Small     /*op*/,
2361*7fd79137SRobert Mustacchi     Dwarf_Unsigned  /*val1*/,
2362*7fd79137SRobert Mustacchi     Dwarf_Unsigned  /*val2*/,
2363*7fd79137SRobert Mustacchi     Dwarf_Error*    /*error*/);
2364*7fd79137SRobert Mustacchi 
2365*7fd79137SRobert Mustacchi /* New September 17, 2009 */
2366*7fd79137SRobert Mustacchi int dwarf_insert_fde_inst_bytes(
2367*7fd79137SRobert Mustacchi     Dwarf_P_Debug  /*dbg*/,
2368*7fd79137SRobert Mustacchi     Dwarf_P_Fde    /*fde*/,
2369*7fd79137SRobert Mustacchi     Dwarf_Unsigned /*len*/,
2370*7fd79137SRobert Mustacchi     Dwarf_Ptr      /*ibytes*/,
2371*7fd79137SRobert Mustacchi     Dwarf_Error*   /*error*/);
2372*7fd79137SRobert Mustacchi 
2373*7fd79137SRobert Mustacchi 
2374*7fd79137SRobert Mustacchi Dwarf_P_Fde dwarf_new_fde(Dwarf_P_Debug    /*dbg*/, Dwarf_Error* /*error*/);
2375*7fd79137SRobert Mustacchi 
2376*7fd79137SRobert Mustacchi Dwarf_P_Fde dwarf_fde_cfa_offset(
2377*7fd79137SRobert Mustacchi     Dwarf_P_Fde     /*fde*/,
2378*7fd79137SRobert Mustacchi     Dwarf_Unsigned  /*register_number*/,
2379*7fd79137SRobert Mustacchi     Dwarf_Signed    /*offset*/,
2380*7fd79137SRobert Mustacchi     Dwarf_Error*    /*error*/);
2381*7fd79137SRobert Mustacchi 
2382*7fd79137SRobert Mustacchi /* die creation & addition routines */
2383*7fd79137SRobert Mustacchi Dwarf_P_Die dwarf_new_die(
2384*7fd79137SRobert Mustacchi     Dwarf_P_Debug    /*dbg*/,
2385*7fd79137SRobert Mustacchi     Dwarf_Tag         /*tag*/,
2386*7fd79137SRobert Mustacchi     Dwarf_P_Die     /*parent*/,
2387*7fd79137SRobert Mustacchi     Dwarf_P_Die     /*child*/,
2388*7fd79137SRobert Mustacchi     Dwarf_P_Die     /*left */,
2389*7fd79137SRobert Mustacchi     Dwarf_P_Die     /*right*/,
2390*7fd79137SRobert Mustacchi     Dwarf_Error*    /*error*/);
2391*7fd79137SRobert Mustacchi 
2392*7fd79137SRobert Mustacchi Dwarf_Unsigned dwarf_add_die_to_debug(
2393*7fd79137SRobert Mustacchi     Dwarf_P_Debug   /*dbg*/,
2394*7fd79137SRobert Mustacchi     Dwarf_P_Die     /*die*/,
2395*7fd79137SRobert Mustacchi     Dwarf_Error*    /*error*/);
2396*7fd79137SRobert Mustacchi 
2397*7fd79137SRobert Mustacchi /* Markers are not written  to DWARF2/3/4, they are user
2398*7fd79137SRobert Mustacchi    defined and may be used for any purpose.
2399*7fd79137SRobert Mustacchi */
2400*7fd79137SRobert Mustacchi Dwarf_Unsigned dwarf_add_die_marker(
2401*7fd79137SRobert Mustacchi     Dwarf_P_Debug   /*dbg*/,
2402*7fd79137SRobert Mustacchi     Dwarf_P_Die     /*die*/,
2403*7fd79137SRobert Mustacchi     Dwarf_Unsigned  /*marker*/,
2404*7fd79137SRobert Mustacchi     Dwarf_Error *   /*error*/);
2405*7fd79137SRobert Mustacchi 
2406*7fd79137SRobert Mustacchi Dwarf_Unsigned dwarf_get_die_marker(
2407*7fd79137SRobert Mustacchi     Dwarf_P_Debug   /*dbg*/,
2408*7fd79137SRobert Mustacchi     Dwarf_P_Die     /*die*/,
2409*7fd79137SRobert Mustacchi     Dwarf_Unsigned *  /*marker*/,
2410*7fd79137SRobert Mustacchi     Dwarf_Error *   /*error*/);
2411*7fd79137SRobert Mustacchi 
2412*7fd79137SRobert Mustacchi Dwarf_P_Die dwarf_die_link(
2413*7fd79137SRobert Mustacchi     Dwarf_P_Die     /*die*/,
2414*7fd79137SRobert Mustacchi     Dwarf_P_Die     /*parent*/,
2415*7fd79137SRobert Mustacchi     Dwarf_P_Die     /*child*/,
2416*7fd79137SRobert Mustacchi     Dwarf_P_Die     /*left*/,
2417*7fd79137SRobert Mustacchi     Dwarf_P_Die     /*right*/,
2418*7fd79137SRobert Mustacchi     Dwarf_Error*    /*error*/);
2419*7fd79137SRobert Mustacchi 
2420*7fd79137SRobert Mustacchi void dwarf_dealloc_compressed_block(
2421*7fd79137SRobert Mustacchi     Dwarf_P_Debug,
2422*7fd79137SRobert Mustacchi     void *
2423*7fd79137SRobert Mustacchi );
2424*7fd79137SRobert Mustacchi 
2425*7fd79137SRobert Mustacchi /* Call this passing in return value from dwarf_uncompress_integer_block()
2426*7fd79137SRobert Mustacchi  * to free the space the decompression allocated. */
2427*7fd79137SRobert Mustacchi void dwarf_dealloc_uncompressed_block(
2428*7fd79137SRobert Mustacchi     Dwarf_Debug,
2429*7fd79137SRobert Mustacchi     void *
2430*7fd79137SRobert Mustacchi );
2431*7fd79137SRobert Mustacchi 
2432*7fd79137SRobert Mustacchi void * dwarf_compress_integer_block(
2433*7fd79137SRobert Mustacchi     Dwarf_P_Debug,    /* dbg */
2434*7fd79137SRobert Mustacchi     Dwarf_Bool,       /* signed==true (or unsigned) */
2435*7fd79137SRobert Mustacchi     Dwarf_Small,      /* size of integer units: 8, 16, 32, 64 */
2436*7fd79137SRobert Mustacchi     void*,            /* data */
2437*7fd79137SRobert Mustacchi     Dwarf_Unsigned,   /* number of elements */
2438*7fd79137SRobert Mustacchi     Dwarf_Unsigned*,  /* number of bytes in output block */
2439*7fd79137SRobert Mustacchi     Dwarf_Error*      /* error */
2440*7fd79137SRobert Mustacchi );
2441*7fd79137SRobert Mustacchi 
2442*7fd79137SRobert Mustacchi /* Decode an array of signed leb integers (so of course the
2443*7fd79137SRobert Mustacchi  * array is not composed of fixed length values, but is instead
2444*7fd79137SRobert Mustacchi  * a sequence of sleb values).
2445*7fd79137SRobert Mustacchi  * Returns a DW_DLV_BADADDR on error.
2446*7fd79137SRobert Mustacchi  * Otherwise returns a pointer to an array of 32bit integers.
2447*7fd79137SRobert Mustacchi  * The signed argument must be non-zero (the decode
2448*7fd79137SRobert Mustacchi  * assumes sleb integers in the input data) at this time.
2449*7fd79137SRobert Mustacchi  * Size of integer units must be 32 (32 bits each) at this time.
2450*7fd79137SRobert Mustacchi  * Number of bytes in block is a byte count (not array count).
2451*7fd79137SRobert Mustacchi  * Returns number of units in output block (ie, number of elements
2452*7fd79137SRobert Mustacchi  * of the array that the return value points to) thru the argument.
2453*7fd79137SRobert Mustacchi  */
2454*7fd79137SRobert Mustacchi void * dwarf_uncompress_integer_block(
2455*7fd79137SRobert Mustacchi     Dwarf_Debug,      /* dbg */
2456*7fd79137SRobert Mustacchi     Dwarf_Bool,       /* signed==true (or unsigned) */
2457*7fd79137SRobert Mustacchi     Dwarf_Small,      /* size of integer units: 8, 16, 32, 64 */
2458*7fd79137SRobert Mustacchi     void*,            /* input data */
2459*7fd79137SRobert Mustacchi     Dwarf_Unsigned,   /* number of bytes in input */
2460*7fd79137SRobert Mustacchi     Dwarf_Unsigned*,  /* number of units in output block */
2461*7fd79137SRobert Mustacchi     Dwarf_Error*      /* error */
2462*7fd79137SRobert Mustacchi );
2463*7fd79137SRobert Mustacchi 
2464*7fd79137SRobert Mustacchi /* Operations to create location expressions. */
2465*7fd79137SRobert Mustacchi Dwarf_P_Expr dwarf_new_expr(Dwarf_P_Debug /*dbg*/, Dwarf_Error* /*error*/);
2466*7fd79137SRobert Mustacchi 
2467*7fd79137SRobert Mustacchi void dwarf_expr_reset(
2468*7fd79137SRobert Mustacchi     Dwarf_P_Expr      /*expr*/,
2469*7fd79137SRobert Mustacchi     Dwarf_Error*      /*error*/);
2470*7fd79137SRobert Mustacchi 
2471*7fd79137SRobert Mustacchi Dwarf_Unsigned dwarf_add_expr_gen(
2472*7fd79137SRobert Mustacchi     Dwarf_P_Expr      /*expr*/,
2473*7fd79137SRobert Mustacchi     Dwarf_Small       /*opcode*/,
2474*7fd79137SRobert Mustacchi     Dwarf_Unsigned    /*val1*/,
2475*7fd79137SRobert Mustacchi     Dwarf_Unsigned    /*val2*/,
2476*7fd79137SRobert Mustacchi     Dwarf_Error*      /*error*/);
2477*7fd79137SRobert Mustacchi 
2478*7fd79137SRobert Mustacchi Dwarf_Unsigned dwarf_add_expr_addr(
2479*7fd79137SRobert Mustacchi     Dwarf_P_Expr      /*expr*/,
2480*7fd79137SRobert Mustacchi     Dwarf_Unsigned    /*addr*/,
2481*7fd79137SRobert Mustacchi     Dwarf_Signed      /*sym_index*/,
2482*7fd79137SRobert Mustacchi     Dwarf_Error*      /*error*/);
2483*7fd79137SRobert Mustacchi 
2484*7fd79137SRobert Mustacchi Dwarf_Unsigned dwarf_add_expr_addr_b(
2485*7fd79137SRobert Mustacchi     Dwarf_P_Expr      /*expr*/,
2486*7fd79137SRobert Mustacchi     Dwarf_Unsigned    /*addr*/,
2487*7fd79137SRobert Mustacchi     Dwarf_Unsigned    /*sym_index*/,
2488*7fd79137SRobert Mustacchi     Dwarf_Error*      /*error*/);
2489*7fd79137SRobert Mustacchi 
2490*7fd79137SRobert Mustacchi Dwarf_Unsigned dwarf_expr_current_offset(
2491*7fd79137SRobert Mustacchi     Dwarf_P_Expr      /*expr*/,
2492*7fd79137SRobert Mustacchi     Dwarf_Error*      /*error*/);
2493*7fd79137SRobert Mustacchi 
2494*7fd79137SRobert Mustacchi Dwarf_Addr dwarf_expr_into_block(
2495*7fd79137SRobert Mustacchi     Dwarf_P_Expr      /*expr*/,
2496*7fd79137SRobert Mustacchi     Dwarf_Unsigned*   /*length*/,
2497*7fd79137SRobert Mustacchi     Dwarf_Error*      /*error*/);
2498*7fd79137SRobert Mustacchi 
2499*7fd79137SRobert Mustacchi Dwarf_Unsigned dwarf_add_arange(Dwarf_P_Debug /*dbg*/,
2500*7fd79137SRobert Mustacchi     Dwarf_Addr        /*begin_address*/,
2501*7fd79137SRobert Mustacchi     Dwarf_Unsigned    /*length*/,
2502*7fd79137SRobert Mustacchi     Dwarf_Signed      /*symbol_index*/,
2503*7fd79137SRobert Mustacchi     Dwarf_Error*      /*error*/);
2504*7fd79137SRobert Mustacchi 
2505*7fd79137SRobert Mustacchi Dwarf_Unsigned dwarf_add_arange_b(
2506*7fd79137SRobert Mustacchi     Dwarf_P_Debug  /*dbg*/,
2507*7fd79137SRobert Mustacchi     Dwarf_Addr     /*begin_address*/,
2508*7fd79137SRobert Mustacchi     Dwarf_Unsigned /*length*/,
2509*7fd79137SRobert Mustacchi     Dwarf_Unsigned /*symbol_index*/,
2510*7fd79137SRobert Mustacchi     Dwarf_Unsigned /*end_symbol_index*/,
2511*7fd79137SRobert Mustacchi     Dwarf_Addr     /*offset_from_end_symbol*/,
2512*7fd79137SRobert Mustacchi     Dwarf_Error *  /*error*/);
2513*7fd79137SRobert Mustacchi 
2514*7fd79137SRobert Mustacchi Dwarf_Unsigned dwarf_add_pubname(
2515*7fd79137SRobert Mustacchi     Dwarf_P_Debug      /*dbg*/,
2516*7fd79137SRobert Mustacchi     Dwarf_P_Die        /*die*/,
2517*7fd79137SRobert Mustacchi     char*              /*pubname_name*/,
2518*7fd79137SRobert Mustacchi     Dwarf_Error*       /*error*/);
2519*7fd79137SRobert Mustacchi 
2520*7fd79137SRobert Mustacchi Dwarf_Unsigned dwarf_add_funcname(
2521*7fd79137SRobert Mustacchi     Dwarf_P_Debug      /*dbg*/,
2522*7fd79137SRobert Mustacchi     Dwarf_P_Die        /*die*/,
2523*7fd79137SRobert Mustacchi     char*              /*func_name*/,
2524*7fd79137SRobert Mustacchi     Dwarf_Error*       /*error*/);
2525*7fd79137SRobert Mustacchi 
2526*7fd79137SRobert Mustacchi Dwarf_Unsigned dwarf_add_typename(
2527*7fd79137SRobert Mustacchi     Dwarf_P_Debug     /*dbg*/,
2528*7fd79137SRobert Mustacchi     Dwarf_P_Die       /*die*/,
2529*7fd79137SRobert Mustacchi     char*             /*type_name*/,
2530*7fd79137SRobert Mustacchi     Dwarf_Error*      /*error*/);
2531*7fd79137SRobert Mustacchi 
2532*7fd79137SRobert Mustacchi Dwarf_Unsigned dwarf_add_varname(
2533*7fd79137SRobert Mustacchi     Dwarf_P_Debug     /*dbg*/,
2534*7fd79137SRobert Mustacchi     Dwarf_P_Die       /*die*/,
2535*7fd79137SRobert Mustacchi     char*             /*var_name*/,
2536*7fd79137SRobert Mustacchi     Dwarf_Error*      /*error*/);
2537*7fd79137SRobert Mustacchi 
2538*7fd79137SRobert Mustacchi Dwarf_Unsigned dwarf_add_weakname(
2539*7fd79137SRobert Mustacchi     Dwarf_P_Debug    /*dbg*/,
2540*7fd79137SRobert Mustacchi     Dwarf_P_Die      /*die*/,
2541*7fd79137SRobert Mustacchi     char*            /*weak_name*/,
2542*7fd79137SRobert Mustacchi     Dwarf_Error*     /*error*/);
2543*7fd79137SRobert Mustacchi 
2544*7fd79137SRobert Mustacchi /* .debug_macinfo producer functions
2545*7fd79137SRobert Mustacchi    Functions must be called in right order: the section is output
2546*7fd79137SRobert Mustacchi    In the order these are presented.
2547*7fd79137SRobert Mustacchi */
2548*7fd79137SRobert Mustacchi int dwarf_def_macro(Dwarf_P_Debug /*dbg*/,
2549*7fd79137SRobert Mustacchi     Dwarf_Unsigned   /*line*/,
2550*7fd79137SRobert Mustacchi     char *           /*macname, with (arglist), no space before (*/,
2551*7fd79137SRobert Mustacchi     char *           /*macvalue*/,
2552*7fd79137SRobert Mustacchi     Dwarf_Error*     /*error*/);
2553*7fd79137SRobert Mustacchi 
2554*7fd79137SRobert Mustacchi int dwarf_undef_macro(Dwarf_P_Debug /*dbg*/,
2555*7fd79137SRobert Mustacchi     Dwarf_Unsigned   /*line*/,
2556*7fd79137SRobert Mustacchi     char *           /*macname, no arglist, of course*/,
2557*7fd79137SRobert Mustacchi     Dwarf_Error*     /*error*/);
2558*7fd79137SRobert Mustacchi 
2559*7fd79137SRobert Mustacchi int dwarf_start_macro_file(Dwarf_P_Debug /*dbg*/,
2560*7fd79137SRobert Mustacchi     Dwarf_Unsigned   /*fileindex*/,
2561*7fd79137SRobert Mustacchi     Dwarf_Unsigned   /*linenumber*/,
2562*7fd79137SRobert Mustacchi     Dwarf_Error*     /*error*/);
2563*7fd79137SRobert Mustacchi 
2564*7fd79137SRobert Mustacchi int dwarf_end_macro_file(Dwarf_P_Debug /*dbg*/,
2565*7fd79137SRobert Mustacchi     Dwarf_Error*     /*error*/);
2566*7fd79137SRobert Mustacchi 
2567*7fd79137SRobert Mustacchi int dwarf_vendor_ext(Dwarf_P_Debug /*dbg*/,
2568*7fd79137SRobert Mustacchi     Dwarf_Unsigned   /*constant*/,
2569*7fd79137SRobert Mustacchi     char *           /*string*/,
2570*7fd79137SRobert Mustacchi     Dwarf_Error*     /*error*/);
2571*7fd79137SRobert Mustacchi 
2572*7fd79137SRobert Mustacchi /* end macinfo producer functions */
2573*7fd79137SRobert Mustacchi 
2574*7fd79137SRobert Mustacchi int dwarf_attr_offset(Dwarf_Die /*die*/,
2575*7fd79137SRobert Mustacchi     Dwarf_Attribute /*attr of above die*/,
2576*7fd79137SRobert Mustacchi     Dwarf_Off     * /*returns offset thru this ptr */,
2577*7fd79137SRobert Mustacchi     Dwarf_Error   * /*error*/);
2578*7fd79137SRobert Mustacchi 
2579*7fd79137SRobert Mustacchi /* This is a hack so clients can verify offsets.
2580*7fd79137SRobert Mustacchi    Added April 2005 so that debugger can detect broken offsets
2581*7fd79137SRobert Mustacchi    (which happened in an IRIX executable larger than 2GB
2582*7fd79137SRobert Mustacchi     with MIPSpro 7.3.1.3 toolchain.).
2583*7fd79137SRobert Mustacchi */
2584*7fd79137SRobert Mustacchi int
2585*7fd79137SRobert Mustacchi dwarf_get_section_max_offsets(Dwarf_Debug /*dbg*/,
2586*7fd79137SRobert Mustacchi     Dwarf_Unsigned * /*debug_info_size*/,
2587*7fd79137SRobert Mustacchi     Dwarf_Unsigned * /*debug_abbrev_size*/,
2588*7fd79137SRobert Mustacchi     Dwarf_Unsigned * /*debug_line_size*/,
2589*7fd79137SRobert Mustacchi     Dwarf_Unsigned * /*debug_loc_size*/,
2590*7fd79137SRobert Mustacchi     Dwarf_Unsigned * /*debug_aranges_size*/,
2591*7fd79137SRobert Mustacchi     Dwarf_Unsigned * /*debug_macinfo_size*/,
2592*7fd79137SRobert Mustacchi     Dwarf_Unsigned * /*debug_pubnames_size*/,
2593*7fd79137SRobert Mustacchi     Dwarf_Unsigned * /*debug_str_size*/,
2594*7fd79137SRobert Mustacchi     Dwarf_Unsigned * /*debug_frame_size*/,
2595*7fd79137SRobert Mustacchi     Dwarf_Unsigned * /*debug_ranges_size*/,
2596*7fd79137SRobert Mustacchi     Dwarf_Unsigned * /*debug_pubtypes_size*/);
2597*7fd79137SRobert Mustacchi 
2598*7fd79137SRobert Mustacchi /* Multiple releases spelled 'initial' as 'inital' .
2599*7fd79137SRobert Mustacchi    The 'inital' spelling should not be used. */
2600*7fd79137SRobert Mustacchi Dwarf_Half dwarf_set_frame_rule_inital_value(Dwarf_Debug /*dbg*/,
2601*7fd79137SRobert Mustacchi     Dwarf_Half /*value*/);
2602*7fd79137SRobert Mustacchi /* Additional interface with correct 'initial' spelling. */
2603*7fd79137SRobert Mustacchi /* It is likely you will want to call the following 5 functions
2604*7fd79137SRobert Mustacchi    before accessing any frame information.  All are useful
2605*7fd79137SRobert Mustacchi    to tailor handling of pseudo-registers needed to turn
2606*7fd79137SRobert Mustacchi    frame operation references into simpler forms and to
2607*7fd79137SRobert Mustacchi    reflect ABI specific data.  Of course altering libdwarf.h
2608*7fd79137SRobert Mustacchi    and dwarf.h allow the same capabilities, but such header changes
2609*7fd79137SRobert Mustacchi    do not let one change these values at runtime. */
2610*7fd79137SRobert Mustacchi Dwarf_Half dwarf_set_frame_rule_initial_value(Dwarf_Debug /*dbg*/,
2611*7fd79137SRobert Mustacchi     Dwarf_Half /*value*/);
2612*7fd79137SRobert Mustacchi Dwarf_Half dwarf_set_frame_rule_table_size(Dwarf_Debug /*dbg*/,
2613*7fd79137SRobert Mustacchi     Dwarf_Half /*value*/);
2614*7fd79137SRobert Mustacchi Dwarf_Half dwarf_set_frame_cfa_value(Dwarf_Debug /*dbg*/,
2615*7fd79137SRobert Mustacchi     Dwarf_Half /*value*/);
2616*7fd79137SRobert Mustacchi Dwarf_Half dwarf_set_frame_same_value(Dwarf_Debug /*dbg*/,
2617*7fd79137SRobert Mustacchi     Dwarf_Half /*value*/);
2618*7fd79137SRobert Mustacchi Dwarf_Half dwarf_set_frame_undefined_value(Dwarf_Debug /*dbg*/,
2619*7fd79137SRobert Mustacchi     Dwarf_Half /*value*/);
2620*7fd79137SRobert Mustacchi 
2621*7fd79137SRobert Mustacchi /* As of April 27, 2009, this version with no diepointer is
2622*7fd79137SRobert Mustacchi    obsolete though supported.  Use dwarf_get_ranges_a() instead. */
2623*7fd79137SRobert Mustacchi int dwarf_get_ranges(Dwarf_Debug /*dbg*/,
2624*7fd79137SRobert Mustacchi     Dwarf_Off /*rangesoffset*/,
2625*7fd79137SRobert Mustacchi     Dwarf_Ranges ** /*rangesbuf*/,
2626*7fd79137SRobert Mustacchi     Dwarf_Signed * /*listlen*/,
2627*7fd79137SRobert Mustacchi     Dwarf_Unsigned * /*bytecount*/,
2628*7fd79137SRobert Mustacchi     Dwarf_Error * /*error*/);
2629*7fd79137SRobert Mustacchi 
2630*7fd79137SRobert Mustacchi /* This adds the address_size argument. New April 27, 2009 */
2631*7fd79137SRobert Mustacchi int dwarf_get_ranges_a(Dwarf_Debug /*dbg*/,
2632*7fd79137SRobert Mustacchi     Dwarf_Off /*rangesoffset*/,
2633*7fd79137SRobert Mustacchi     Dwarf_Die  /* diepointer */,
2634*7fd79137SRobert Mustacchi     Dwarf_Ranges ** /*rangesbuf*/,
2635*7fd79137SRobert Mustacchi     Dwarf_Signed * /*listlen*/,
2636*7fd79137SRobert Mustacchi     Dwarf_Unsigned * /*bytecount*/,
2637*7fd79137SRobert Mustacchi     Dwarf_Error * /*error*/);
2638*7fd79137SRobert Mustacchi 
2639*7fd79137SRobert Mustacchi void dwarf_ranges_dealloc(Dwarf_Debug /*dbg*/,
2640*7fd79137SRobert Mustacchi     Dwarf_Ranges * /*rangesbuf*/,
2641*7fd79137SRobert Mustacchi     Dwarf_Signed /*rangecount*/);
2642*7fd79137SRobert Mustacchi 
2643*7fd79137SRobert Mustacchi /* The harmless error list is a circular buffer of
2644*7fd79137SRobert Mustacchi    errors we note but which do not stop us from processing
2645*7fd79137SRobert Mustacchi    the object.  Created so dwarfdump or other tools
2646*7fd79137SRobert Mustacchi    can report such inconsequential errors without causing
2647*7fd79137SRobert Mustacchi    anything to stop early. */
2648*7fd79137SRobert Mustacchi #define DW_HARMLESS_ERROR_CIRCULAR_LIST_DEFAULT_SIZE 4
2649*7fd79137SRobert Mustacchi #define DW_HARMLESS_ERROR_MSG_STRING_SIZE   200
2650*7fd79137SRobert Mustacchi /* User code supplies size of array of pointers errmsg_ptrs_array
2651*7fd79137SRobert Mustacchi     in count and the array of pointers (the pointers themselves
2652*7fd79137SRobert Mustacchi     need not be initialized).
2653*7fd79137SRobert Mustacchi     The pointers returned in the array of pointers
2654*7fd79137SRobert Mustacchi     are invalidated by ANY call to libdwarf.
2655*7fd79137SRobert Mustacchi     Use them before making another libdwarf call!
2656*7fd79137SRobert Mustacchi     The array of string pointers passed in always has
2657*7fd79137SRobert Mustacchi     a final null pointer, so if there are N pointers the
2658*7fd79137SRobert Mustacchi     and M actual strings, then MIN(M,N-1) pointers are
2659*7fd79137SRobert Mustacchi     set to point to error strings.  The array of pointers
2660*7fd79137SRobert Mustacchi     to strings always terminates with a NULL pointer.
2661*7fd79137SRobert Mustacchi     If 'count' is passed in zero then errmsg_ptrs_array
2662*7fd79137SRobert Mustacchi     is not touched.
2663*7fd79137SRobert Mustacchi 
2664*7fd79137SRobert Mustacchi     The function returns DW_DLV_NO_ENTRY if no harmless errors
2665*7fd79137SRobert Mustacchi     were noted so far.  Returns DW_DLV_OK if there are errors.
2666*7fd79137SRobert Mustacchi     Never returns DW_DLV_ERROR.
2667*7fd79137SRobert Mustacchi 
2668*7fd79137SRobert Mustacchi     Each call empties the error list (discarding all current entries).
2669*7fd79137SRobert Mustacchi     If newerr_count is non-NULL the count of harmless errors
2670*7fd79137SRobert Mustacchi     since the last call is returned through the pointer
2671*7fd79137SRobert Mustacchi     (some may have been discarded or not returned, it is a circular
2672*7fd79137SRobert Mustacchi     list...).
2673*7fd79137SRobert Mustacchi     If DW_DLV_NO_ENTRY is returned none of the arguments
2674*7fd79137SRobert Mustacchi     here are touched or used.
2675*7fd79137SRobert Mustacchi     */
2676*7fd79137SRobert Mustacchi int dwarf_get_harmless_error_list(Dwarf_Debug /*dbg*/,
2677*7fd79137SRobert Mustacchi     unsigned  /*count*/,
2678*7fd79137SRobert Mustacchi     const char ** /*errmsg_ptrs_array*/,
2679*7fd79137SRobert Mustacchi     unsigned * /*newerr_count*/);
2680*7fd79137SRobert Mustacchi 
2681*7fd79137SRobert Mustacchi /* Insertion is only for testing the harmless error code, it is not
2682*7fd79137SRobert Mustacchi     necessarily useful otherwise. */
2683*7fd79137SRobert Mustacchi void dwarf_insert_harmless_error(Dwarf_Debug /*dbg*/,
2684*7fd79137SRobert Mustacchi     char * /*newerror*/);
2685*7fd79137SRobert Mustacchi 
2686*7fd79137SRobert Mustacchi /* The size of the circular list of strings may be set
2687*7fd79137SRobert Mustacchi    and reset as needed.  If it is shortened excess
2688*7fd79137SRobert Mustacchi    messages are simply dropped.  It returns the previous
2689*7fd79137SRobert Mustacchi    size. If zero passed in the size is unchanged
2690*7fd79137SRobert Mustacchi    and it simply returns the current size  */
2691*7fd79137SRobert Mustacchi unsigned dwarf_set_harmless_error_list_size(Dwarf_Debug /*dbg*/,
2692*7fd79137SRobert Mustacchi     unsigned /*maxcount*/);
2693*7fd79137SRobert Mustacchi /* The harmless error strings (if any) are freed when the dbg
2694*7fd79137SRobert Mustacchi    is dwarf_finish()ed. */
2695*7fd79137SRobert Mustacchi 
2696*7fd79137SRobert Mustacchi /*  When the val_in is known these dwarf_get_TAG_name (etc)
2697*7fd79137SRobert Mustacchi     functions return the string corresponding to the val_in passed in
2698*7fd79137SRobert Mustacchi     through the pointer s_out and the value returned is DW_DLV_OK.
2699*7fd79137SRobert Mustacchi     The strings are in static storage
2700*7fd79137SRobert Mustacchi     and must not be freed.
2701*7fd79137SRobert Mustacchi     If DW_DLV_NO_ENTRY is returned the val_in is not known and
2702*7fd79137SRobert Mustacchi     *s_out is not set.  DW_DLV_ERROR is never returned.*/
2703*7fd79137SRobert Mustacchi 
2704*7fd79137SRobert Mustacchi extern int dwarf_get_TAG_name(unsigned int /*val_in*/, const char ** /*s_out */);
2705*7fd79137SRobert Mustacchi extern int dwarf_get_children_name(unsigned int /*val_in*/, const char ** /*s_out */);
2706*7fd79137SRobert Mustacchi extern int dwarf_get_FORM_name(unsigned int /*val_in*/, const char ** /*s_out */);
2707*7fd79137SRobert Mustacchi extern int dwarf_get_AT_name(unsigned int /*val_in*/, const char ** /*s_out */);
2708*7fd79137SRobert Mustacchi extern int dwarf_get_OP_name(unsigned int /*val_in*/, const char ** /*s_out */);
2709*7fd79137SRobert Mustacchi extern int dwarf_get_ATE_name(unsigned int /*val_in*/, const char ** /*s_out */);
2710*7fd79137SRobert Mustacchi extern int dwarf_get_DS_name(unsigned int /*val_in*/, const char ** /*s_out */);
2711*7fd79137SRobert Mustacchi extern int dwarf_get_END_name(unsigned int /*val_in*/, const char ** /*s_out */);
2712*7fd79137SRobert Mustacchi extern int dwarf_get_ATCF_name(unsigned int /*val_in*/, const char ** /*s_out */);
2713*7fd79137SRobert Mustacchi extern int dwarf_get_ACCESS_name(unsigned int /*val_in*/, const char ** /*s_out */);
2714*7fd79137SRobert Mustacchi extern int dwarf_get_VIS_name(unsigned int /*val_in*/, const char ** /*s_out */);
2715*7fd79137SRobert Mustacchi extern int dwarf_get_VIRTUALITY_name(unsigned int /*val_in*/, const char ** /*s_out */);
2716*7fd79137SRobert Mustacchi extern int dwarf_get_LANG_name(unsigned int /*val_in*/, const char ** /*s_out */);
2717*7fd79137SRobert Mustacchi extern int dwarf_get_ID_name(unsigned int /*val_in*/, const char ** /*s_out */);
2718*7fd79137SRobert Mustacchi extern int dwarf_get_CC_name(unsigned int /*val_in*/, const char ** /*s_out */);
2719*7fd79137SRobert Mustacchi extern int dwarf_get_INL_name(unsigned int /*val_in*/, const char ** /*s_out */);
2720*7fd79137SRobert Mustacchi extern int dwarf_get_ORD_name(unsigned int /*val_in*/, const char ** /*s_out */);
2721*7fd79137SRobert Mustacchi extern int dwarf_get_DSC_name(unsigned int /*val_in*/, const char ** /*s_out */);
2722*7fd79137SRobert Mustacchi extern int dwarf_get_LNS_name(unsigned int /*val_in*/, const char ** /*s_out */);
2723*7fd79137SRobert Mustacchi extern int dwarf_get_LNE_name(unsigned int /*val_in*/, const char ** /*s_out */);
2724*7fd79137SRobert Mustacchi extern int dwarf_get_MACINFO_name(unsigned int /*val_in*/, const char ** /*s_out */);
2725*7fd79137SRobert Mustacchi extern int dwarf_get_CFA_name(unsigned int /*val_in*/, const char ** /*s_out */);
2726*7fd79137SRobert Mustacchi extern int dwarf_get_EH_name(unsigned int /*val_in*/, const char ** /*s_out */);
2727*7fd79137SRobert Mustacchi extern int dwarf_get_FRAME_name(unsigned int /*val_in*/, const char ** /*s_out */);
2728*7fd79137SRobert Mustacchi extern int dwarf_get_CHILDREN_name(unsigned int /*val_in*/, const char ** /*s_out */);
2729*7fd79137SRobert Mustacchi extern int dwarf_get_ADDR_name(unsigned int /*val_in*/, const char ** /*s_out */);
2730*7fd79137SRobert Mustacchi 
2731*7fd79137SRobert Mustacchi #ifdef __cplusplus
2732*7fd79137SRobert Mustacchi }
2733*7fd79137SRobert Mustacchi #endif
2734*7fd79137SRobert Mustacchi #endif /* _LIBDWARF_H */
2735*7fd79137SRobert Mustacchi 
2736*7fd79137SRobert Mustacchi 
2737