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