xref: /titanic_44/usr/src/tools/ctf/dwarf/common/libdwarf.h (revision 07dc1947c362e187fb955d283b692f8769dd5def)
149d3bc91SRichard Lowe /*
249d3bc91SRichard Lowe 
3*07dc1947SRichard Lowe   Copyright (C) 2000-2010 Silicon Graphics, Inc.  All Rights Reserved.
4*07dc1947SRichard Lowe   Portions Copyright 2007-2010 Sun Microsystems, Inc. All rights reserved.
5*07dc1947SRichard Lowe   Portions Copyright 2008-2010 David Anderson. All rights reserved.
6*07dc1947SRichard Lowe   Portions Copyright 2008-2010 Arxan Technologies, Inc. All rights reserved.
749d3bc91SRichard Lowe 
849d3bc91SRichard Lowe   This program is free software; you can redistribute it and/or modify it
949d3bc91SRichard Lowe   under the terms of version 2.1 of the GNU Lesser General Public License
1049d3bc91SRichard Lowe   as published by the Free Software Foundation.
1149d3bc91SRichard Lowe 
1249d3bc91SRichard Lowe   This program is distributed in the hope that it would be useful, but
1349d3bc91SRichard Lowe   WITHOUT ANY WARRANTY; without even the implied warranty of
1449d3bc91SRichard Lowe   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
1549d3bc91SRichard Lowe 
1649d3bc91SRichard Lowe   Further, this software is distributed without any warranty that it is
1749d3bc91SRichard Lowe   free of the rightful claim of any third person regarding infringement
1849d3bc91SRichard Lowe   or the like.  Any license provided herein, whether implied or
1949d3bc91SRichard Lowe   otherwise, applies only to this software file.  Patent licenses, if
2049d3bc91SRichard Lowe   any, provided herein do not apply to combinations of this program with
2149d3bc91SRichard Lowe   other software, or any other product whatsoever.
2249d3bc91SRichard Lowe 
2349d3bc91SRichard Lowe   You should have received a copy of the GNU Lesser General Public
2449d3bc91SRichard Lowe   License along with this program; if not, write the Free Software
25*07dc1947SRichard Lowe   Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston MA 02110-1301,
2649d3bc91SRichard Lowe   USA.
2749d3bc91SRichard Lowe 
28*07dc1947SRichard Lowe   Contact information:  Silicon Graphics, Inc., 1500 Crittenden Lane,
2949d3bc91SRichard Lowe   Mountain View, CA 94043, or:
3049d3bc91SRichard Lowe 
3149d3bc91SRichard Lowe   http://www.sgi.com
3249d3bc91SRichard Lowe 
3349d3bc91SRichard Lowe   For further information regarding this notice, see:
3449d3bc91SRichard Lowe 
3549d3bc91SRichard Lowe   http://oss.sgi.com/projects/GenInfo/NoticeExplan
3649d3bc91SRichard Lowe 
3749d3bc91SRichard Lowe */
3849d3bc91SRichard Lowe 
3949d3bc91SRichard Lowe 
4049d3bc91SRichard Lowe #ifndef _LIBDWARF_H
4149d3bc91SRichard Lowe #define _LIBDWARF_H
4249d3bc91SRichard Lowe #ifdef __cplusplus
4349d3bc91SRichard Lowe extern "C" {
4449d3bc91SRichard Lowe #endif
4549d3bc91SRichard Lowe /*
4649d3bc91SRichard Lowe     libdwarf.h
47*07dc1947SRichard Lowe     $Revision: #9 $ $Date: 2008/01/17 $
4849d3bc91SRichard Lowe 
4949d3bc91SRichard Lowe     For libdwarf producers and consumers
5049d3bc91SRichard Lowe 
5149d3bc91SRichard Lowe     The interface is defined as having 8-byte signed and unsigned
5249d3bc91SRichard Lowe     values so it can handle 64-or-32bit target on 64-or-32bit host.
5349d3bc91SRichard Lowe     Addr is the native size: it represents pointers on
5449d3bc91SRichard Lowe     the host machine (not the target!).
5549d3bc91SRichard Lowe 
5649d3bc91SRichard Lowe     This contains declarations for types and all producer
5749d3bc91SRichard Lowe     and consumer functions.
5849d3bc91SRichard Lowe 
5949d3bc91SRichard Lowe     Function declarations are written on a single line each here
6049d3bc91SRichard Lowe     so one can use grep  to each declaration in its entirety.
6149d3bc91SRichard Lowe     The declarations are a little harder to read this way, but...
6249d3bc91SRichard Lowe 
6349d3bc91SRichard Lowe */
6449d3bc91SRichard Lowe 
6549d3bc91SRichard Lowe struct Elf;
6649d3bc91SRichard Lowe typedef struct Elf* dwarf_elf_handle;
6749d3bc91SRichard Lowe 
68*07dc1947SRichard Lowe /* To enable printing with printf regardless of the
69*07dc1947SRichard Lowe    actual underlying data type, we define the DW_PR_xxx macros. */
7049d3bc91SRichard Lowe #if (_MIPS_SZLONG == 64)
7149d3bc91SRichard Lowe /* Special case for MIPS, so -64 (LP64) build gets simple -long-.
7249d3bc91SRichard Lowe    Non-MIPS LP64 or ILP64 environments should probably ensure
7349d3bc91SRichard Lowe    _MIPS_SZLONG set to 64 everywhere this header is #included.
7449d3bc91SRichard Lowe */
7549d3bc91SRichard Lowe typedef int             Dwarf_Bool;         /* boolean type */
7649d3bc91SRichard Lowe typedef unsigned long   Dwarf_Off;          /* 4 or 8 byte file offset */
7749d3bc91SRichard Lowe typedef unsigned long   Dwarf_Unsigned;     /* 4 or 8 byte unsigned value */
7849d3bc91SRichard Lowe typedef unsigned short  Dwarf_Half;         /* 2 byte unsigned value */
7949d3bc91SRichard Lowe typedef unsigned char   Dwarf_Small;        /* 1 byte unsigned value */
8049d3bc91SRichard Lowe typedef signed   long   Dwarf_Signed;       /* 4 or 8 byte signed value */
8149d3bc91SRichard Lowe typedef unsigned long   Dwarf_Addr;         /* target memory address */
82*07dc1947SRichard Lowe #define  DW_PR_DUx  "lx"
83*07dc1947SRichard Lowe #define  DW_PR_DSx  "lx"
84*07dc1947SRichard Lowe #define  DW_PR_DUu  "lu"
85*07dc1947SRichard Lowe #define  DW_PR_DSd  "ld"
86*07dc1947SRichard Lowe 
8749d3bc91SRichard Lowe #else /* 32-bit */
8849d3bc91SRichard Lowe /* This is for ILP32, allowing i/o of 64bit dwarf info.
8949d3bc91SRichard Lowe    Also should be fine for LP64 and ILP64 cases.
9049d3bc91SRichard Lowe */
9149d3bc91SRichard Lowe typedef int                 Dwarf_Bool;     /* boolean type */
9249d3bc91SRichard Lowe typedef unsigned long long  Dwarf_Off;      /* 8 byte file offset */
9349d3bc91SRichard Lowe typedef unsigned long long  Dwarf_Unsigned; /* 8 byte unsigned value*/
9449d3bc91SRichard Lowe typedef unsigned short      Dwarf_Half;     /* 2 byte unsigned value */
9549d3bc91SRichard Lowe typedef unsigned char       Dwarf_Small;    /* 1 byte unsigned value */
9649d3bc91SRichard Lowe typedef signed   long long  Dwarf_Signed;   /* 8 byte signed value */
9749d3bc91SRichard Lowe typedef unsigned long long  Dwarf_Addr;     /* target memory address */
98*07dc1947SRichard Lowe #define  DW_PR_DUx  "llx"
99*07dc1947SRichard Lowe #define  DW_PR_DSx  "llx"
100*07dc1947SRichard Lowe #define  DW_PR_DUu  "llu"
101*07dc1947SRichard Lowe #define  DW_PR_DSd  "lld"
10249d3bc91SRichard Lowe #endif
103*07dc1947SRichard Lowe #ifdef HAVE_NONSTANDARD_PRINTF_64_FORMAT
104*07dc1947SRichard Lowe /* Windows does not use std C formatting, so allow it. */
105*07dc1947SRichard Lowe #undef DW_PR_DUx
106*07dc1947SRichard Lowe #undef DW_PR_DSx
107*07dc1947SRichard Lowe #undef DW_PR_DUu
108*07dc1947SRichard Lowe #undef DW_PR_DSd
109*07dc1947SRichard Lowe #define  DW_PR_DUx  "I64x"
110*07dc1947SRichard Lowe #define  DW_PR_DSx  "I64x"
111*07dc1947SRichard Lowe #define  DW_PR_DUu  "I64u"
112*07dc1947SRichard Lowe #define  DW_PR_DSd  "I64d"
113*07dc1947SRichard Lowe #endif /* HAVE_NONSTANDARD_FORMAT */
114*07dc1947SRichard Lowe 
11549d3bc91SRichard Lowe typedef void*        Dwarf_Ptr;          /* host machine pointer */
11649d3bc91SRichard Lowe 
117*07dc1947SRichard Lowe /* Used for DW_FORM_ref_sig8. It is not a string, it
118*07dc1947SRichard Lowe    is 8 bytes of a signature one would use to find
119*07dc1947SRichard Lowe    a type unit. See dwarf_formsig8()
120*07dc1947SRichard Lowe */
121*07dc1947SRichard Lowe typedef struct  {
122*07dc1947SRichard Lowe     char signature[8];
123*07dc1947SRichard Lowe } Dwarf_Sig8;
124*07dc1947SRichard Lowe 
12549d3bc91SRichard Lowe /* Contains info on an uninterpreted block of data
12649d3bc91SRichard Lowe */
12749d3bc91SRichard Lowe typedef struct {
12849d3bc91SRichard Lowe     Dwarf_Unsigned  bl_len;         /* length of block */
12949d3bc91SRichard Lowe     Dwarf_Ptr       bl_data;        /* uninterpreted data */
13049d3bc91SRichard Lowe     Dwarf_Small     bl_from_loclist; /*non-0 if loclist, else debug_info*/
13149d3bc91SRichard Lowe     Dwarf_Unsigned  bl_section_offset; /* Section (not CU) offset
13249d3bc91SRichard Lowe                                         which 'data' comes from. */
13349d3bc91SRichard Lowe } Dwarf_Block;
13449d3bc91SRichard Lowe 
13549d3bc91SRichard Lowe 
13649d3bc91SRichard Lowe /* location record
13749d3bc91SRichard Lowe */
13849d3bc91SRichard Lowe typedef struct {
13949d3bc91SRichard Lowe     Dwarf_Small     lr_atom;        /* location operation */
14049d3bc91SRichard Lowe     Dwarf_Unsigned  lr_number;      /* operand */
14149d3bc91SRichard Lowe     Dwarf_Unsigned  lr_number2;     /* for OP_BREGx */
14249d3bc91SRichard Lowe     Dwarf_Unsigned  lr_offset;      /* offset in locexpr for OP_BRA etc */
14349d3bc91SRichard Lowe } Dwarf_Loc;
14449d3bc91SRichard Lowe 
14549d3bc91SRichard Lowe 
14649d3bc91SRichard Lowe /* location description
14749d3bc91SRichard Lowe */
14849d3bc91SRichard Lowe typedef struct {
14949d3bc91SRichard Lowe     Dwarf_Addr      ld_lopc;        /* beginning of active range */
15049d3bc91SRichard Lowe     Dwarf_Addr      ld_hipc;        /* end of active range */
15149d3bc91SRichard Lowe     Dwarf_Half      ld_cents;       /* count of location records */
15249d3bc91SRichard Lowe     Dwarf_Loc*      ld_s;           /* pointer to list of same */
15349d3bc91SRichard Lowe     Dwarf_Small     ld_from_loclist;
15449d3bc91SRichard Lowe                       /* non-0 if loclist, else debug_info*/
15549d3bc91SRichard Lowe 
15649d3bc91SRichard Lowe     Dwarf_Unsigned  ld_section_offset; /* Section (not CU) offset
15749d3bc91SRichard Lowe                     where loc-expr begins*/
15849d3bc91SRichard Lowe } Dwarf_Locdesc;
15949d3bc91SRichard Lowe 
160*07dc1947SRichard Lowe /* First appears in DWARF3.
161*07dc1947SRichard Lowe    The dwr_addr1/addr2 data is either an offset (DW_RANGES_ENTRY)
162*07dc1947SRichard Lowe    or an address (dwr_addr2 in DW_RANGES_ADDRESS_SELECTION) or
163*07dc1947SRichard Lowe    both are zero (DW_RANGES_END).
164*07dc1947SRichard Lowe */
165*07dc1947SRichard Lowe enum Dwarf_Ranges_Entry_Type { DW_RANGES_ENTRY,
166*07dc1947SRichard Lowe     DW_RANGES_ADDRESS_SELECTION,
167*07dc1947SRichard Lowe     DW_RANGES_END };
168*07dc1947SRichard Lowe typedef struct {
169*07dc1947SRichard Lowe     Dwarf_Addr dwr_addr1;
170*07dc1947SRichard Lowe     Dwarf_Addr dwr_addr2;
171*07dc1947SRichard Lowe     enum Dwarf_Ranges_Entry_Type  dwr_type;
172*07dc1947SRichard Lowe } Dwarf_Ranges;
173*07dc1947SRichard Lowe 
17449d3bc91SRichard Lowe /* Frame description instructions expanded.
17549d3bc91SRichard Lowe */
17649d3bc91SRichard Lowe typedef struct {
17749d3bc91SRichard Lowe     Dwarf_Small     fp_base_op;
17849d3bc91SRichard Lowe     Dwarf_Small     fp_extended_op;
17949d3bc91SRichard Lowe     Dwarf_Half      fp_register;
180*07dc1947SRichard Lowe 
181*07dc1947SRichard Lowe     /* Value may be signed, depends on op.
182*07dc1947SRichard Lowe            Any applicable data_alignment_factor has
183*07dc1947SRichard Lowe            not been applied, this is the  raw offset. */
18449d3bc91SRichard Lowe     Dwarf_Unsigned  fp_offset;
18549d3bc91SRichard Lowe     Dwarf_Off       fp_instr_offset;
186*07dc1947SRichard Lowe } Dwarf_Frame_Op; /* DWARF2 */
18749d3bc91SRichard Lowe 
18849d3bc91SRichard Lowe typedef struct {
189*07dc1947SRichard Lowe     Dwarf_Small     fp_base_op;
190*07dc1947SRichard Lowe     Dwarf_Small     fp_extended_op;
191*07dc1947SRichard Lowe     Dwarf_Half      fp_register;
192*07dc1947SRichard Lowe 
193*07dc1947SRichard Lowe     /* Value may be signed, depends on op.
194*07dc1947SRichard Lowe            Any applicable data_alignment_factor has
195*07dc1947SRichard Lowe            not been applied, this is the  raw offset. */
196*07dc1947SRichard Lowe     Dwarf_Unsigned  fp_offset_or_block_len;
197*07dc1947SRichard Lowe     Dwarf_Small     *fp_expr_block;
198*07dc1947SRichard Lowe 
199*07dc1947SRichard Lowe     Dwarf_Off       fp_instr_offset;
200*07dc1947SRichard Lowe } Dwarf_Frame_Op3;  /* DWARF3 and DWARF2 compatible */
201*07dc1947SRichard Lowe 
202*07dc1947SRichard Lowe /*  ***IMPORTANT NOTE, TARGET DEPENDENCY ****
203*07dc1947SRichard Lowe    DW_REG_TABLE_SIZE must be at least as large as
204*07dc1947SRichard Lowe    the number of registers
205*07dc1947SRichard Lowe    (DW_FRAME_LAST_REG_NUM) as defined in dwarf.h
206*07dc1947SRichard Lowe    Preferably identical to DW_FRAME_LAST_REG_NUM.
207*07dc1947SRichard Lowe    Ensure [0-DW_REG_TABLE_SIZE] does not overlap
208*07dc1947SRichard Lowe    DW_FRAME_UNDEFINED_VAL or DW_FRAME_SAME_VAL.
209*07dc1947SRichard Lowe    Also ensure DW_FRAME_REG_INITIAL_VALUE is set to what
210*07dc1947SRichard Lowe    is appropriate to your cpu.
211*07dc1947SRichard Lowe    For various CPUs  DW_FRAME_UNDEFINED_VAL is correct
212*07dc1947SRichard Lowe    as the value for DW_FRAME_REG_INITIAL_VALUE.
213*07dc1947SRichard Lowe 
214*07dc1947SRichard Lowe    For consumer apps, this can be set dynamically: see
215*07dc1947SRichard Lowe    dwarf_set_frame_rule_table_size();
216*07dc1947SRichard Lowe  */
217*07dc1947SRichard Lowe #ifndef DW_REG_TABLE_SIZE
218*07dc1947SRichard Lowe #define DW_REG_TABLE_SIZE  66
219*07dc1947SRichard Lowe #endif
220*07dc1947SRichard Lowe 
221*07dc1947SRichard Lowe /* For MIPS, DW_FRAME_SAME_VAL is the correct default value
222*07dc1947SRichard Lowe    for a frame register value. For other CPUS another value
223*07dc1947SRichard Lowe    may be better, such as DW_FRAME_UNDEFINED_VAL.
224*07dc1947SRichard Lowe    See dwarf_set_frame_rule_table_size
225*07dc1947SRichard Lowe */
226*07dc1947SRichard Lowe #ifndef DW_FRAME_REG_INITIAL_VALUE
227*07dc1947SRichard Lowe #define DW_FRAME_REG_INITIAL_VALUE DW_FRAME_SAME_VAL
228*07dc1947SRichard Lowe #endif
229*07dc1947SRichard Lowe 
230*07dc1947SRichard Lowe /* Taken as meaning 'undefined value', this is not
231*07dc1947SRichard Lowe    a column or register number.
232*07dc1947SRichard Lowe    Only present at libdwarf runtime in the consumer
233*07dc1947SRichard Lowe    interfaces. Never on disk.
234*07dc1947SRichard Lowe    DW_FRAME_* Values present on disk are in dwarf.h
235*07dc1947SRichard Lowe    Ensure this is > DW_REG_TABLE_SIZE (the reg table
236*07dc1947SRichard Lowe    size is changeable at runtime with the *reg3() interfaces,
237*07dc1947SRichard Lowe    and this value must be greater than the reg table size).
238*07dc1947SRichard Lowe */
239*07dc1947SRichard Lowe #define DW_FRAME_UNDEFINED_VAL          1034
240*07dc1947SRichard Lowe 
241*07dc1947SRichard Lowe /* Taken as meaning 'same value' as caller had, not a column
242*07dc1947SRichard Lowe    or register number.
243*07dc1947SRichard Lowe    Only present at libdwarf runtime in the consumer
244*07dc1947SRichard Lowe    interfaces. Never on disk.
245*07dc1947SRichard Lowe    DW_FRAME_* Values present on disk are in dwarf.h
246*07dc1947SRichard Lowe    Ensure this is > DW_REG_TABLE_SIZE (the reg table
247*07dc1947SRichard Lowe    size is changeable at runtime with the *reg3() interfaces,
248*07dc1947SRichard Lowe    and this value must be greater than the reg table size).
249*07dc1947SRichard Lowe */
250*07dc1947SRichard Lowe #define DW_FRAME_SAME_VAL               1035
251*07dc1947SRichard Lowe 
252*07dc1947SRichard Lowe /* For DWARF3 consumer interfaces, make the CFA a column with no
253*07dc1947SRichard Lowe    real table number.  This is what should have been done
254*07dc1947SRichard Lowe    for the DWARF2 interfaces.  This actually works for
255*07dc1947SRichard Lowe    both DWARF2 and DWARF3, but see the libdwarf documentation
256*07dc1947SRichard Lowe    on Dwarf_Regtable3 and  dwarf_get_fde_info_for_reg3()
257*07dc1947SRichard Lowe    and  dwarf_get_fde_info_for_all_regs3()
258*07dc1947SRichard Lowe    Do NOT use this with the older dwarf_get_fde_info_for_reg()
259*07dc1947SRichard Lowe    or dwarf_get_fde_info_for_all_regs() consumer interfaces.
260*07dc1947SRichard Lowe    Must be higher than any register count for *any* ABI
261*07dc1947SRichard Lowe    (ensures maximum applicability with minimum effort).
262*07dc1947SRichard Lowe    Ensure this is > DW_REG_TABLE_SIZE (the reg table
263*07dc1947SRichard Lowe    size is changeable at runtime with the *reg3() interfaces,
264*07dc1947SRichard Lowe    and this value must be greater than the reg table size).
265*07dc1947SRichard Lowe    Only present at libdwarf runtime in the consumer
266*07dc1947SRichard Lowe    interfaces. Never on disk.
267*07dc1947SRichard Lowe */
268*07dc1947SRichard Lowe #define DW_FRAME_CFA_COL3               1436
269*07dc1947SRichard Lowe 
270*07dc1947SRichard Lowe /* The following are all needed to evaluate DWARF3 register rules.
271*07dc1947SRichard Lowe */
272*07dc1947SRichard Lowe #define DW_EXPR_OFFSET 0  /* DWARF2 only sees this. */
273*07dc1947SRichard Lowe #define DW_EXPR_VAL_OFFSET 1
274*07dc1947SRichard Lowe #define DW_EXPR_EXPRESSION 2
275*07dc1947SRichard Lowe #define DW_EXPR_VAL_EXPRESSION 3
276*07dc1947SRichard Lowe 
277*07dc1947SRichard Lowe typedef struct Dwarf_Regtable_Entry_s {
278*07dc1947SRichard Lowe     /*  For each index i (naming a hardware register with dwarf number
279*07dc1947SRichard Lowe             i) the following is true and defines the value of that register:
280*07dc1947SRichard Lowe 
281*07dc1947SRichard Lowe            If dw_regnum is Register DW_FRAME_UNDEFINED_VAL
282*07dc1947SRichard Lowe          it is not DWARF register number but
283*07dc1947SRichard Lowe         a place holder indicating the register has no defined value.
284*07dc1947SRichard Lowe            If dw_regnum is Register DW_FRAME_SAME_VAL
285*07dc1947SRichard Lowe            it  is not DWARF register number but
286*07dc1947SRichard Lowe         a place holder indicating the register has the same
287*07dc1947SRichard Lowe                 value in the previous frame.
288*07dc1947SRichard Lowe        DW_FRAME_UNDEFINED_VAL, DW_FRAME_SAME_VAL are
289*07dc1947SRichard Lowe            only present at libdwarf runtime. Never on disk.
290*07dc1947SRichard Lowe            DW_FRAME_* Values present on disk are in dwarf.h
291*07dc1947SRichard Lowe 
292*07dc1947SRichard Lowe           Otherwise: the register number is a DWARF register number
293*07dc1947SRichard Lowe           (see ABI documents for how this translates to hardware/
294*07dc1947SRichard Lowe            software register numbers in the machine hardware)
295*07dc1947SRichard Lowe       and the following applies:
296*07dc1947SRichard Lowe 
297*07dc1947SRichard Lowe           if dw_value_type == DW_EXPR_OFFSET (the only case for dwarf2):
298*07dc1947SRichard Lowe             If dw_offset_relevant is non-zero, then
299*07dc1947SRichard Lowe                 the value is stored at at the address CFA+N where
300*07dc1947SRichard Lowe                 N is a signed offset.
301*07dc1947SRichard Lowe                 Rule: Offset(N)
302*07dc1947SRichard Lowe             If dw_offset_relevant is zero, then the value of the register
303*07dc1947SRichard Lowe                 is the value of (DWARF) register number dw_regnum.
304*07dc1947SRichard Lowe                 Rule: register(F)
305*07dc1947SRichard Lowe           Other values of dw_value_type are an error.
306*07dc1947SRichard Lowe         */
30749d3bc91SRichard Lowe     Dwarf_Small         dw_offset_relevant;
308*07dc1947SRichard Lowe 
309*07dc1947SRichard Lowe     /* For DWARF2, always 0 */
310*07dc1947SRichard Lowe         Dwarf_Small         dw_value_type;
311*07dc1947SRichard Lowe 
31249d3bc91SRichard Lowe     Dwarf_Half          dw_regnum;
313*07dc1947SRichard Lowe 
314*07dc1947SRichard Lowe     /* The data type here should  the larger of Dwarf_Addr
315*07dc1947SRichard Lowe            and Dwarf_Unsigned and Dwarf_Signed. */
31649d3bc91SRichard Lowe     Dwarf_Addr          dw_offset;
317*07dc1947SRichard Lowe } Dwarf_Regtable_Entry;
318*07dc1947SRichard Lowe 
319*07dc1947SRichard Lowe typedef struct Dwarf_Regtable_s {
320*07dc1947SRichard Lowe     struct Dwarf_Regtable_Entry_s rules[DW_REG_TABLE_SIZE];
32149d3bc91SRichard Lowe } Dwarf_Regtable;
32249d3bc91SRichard Lowe 
323*07dc1947SRichard Lowe /* opaque type. Functional interface shown later. */
324*07dc1947SRichard Lowe struct Dwarf_Reg_value3_s;
325*07dc1947SRichard Lowe typedef struct Dwarf_Reg_value3_s Dwarf_Reg_Value3;
326*07dc1947SRichard Lowe 
327*07dc1947SRichard Lowe typedef struct Dwarf_Regtable_Entry3_s {
328*07dc1947SRichard Lowe     /*  For each index i (naming a hardware register with dwarf number
329*07dc1947SRichard Lowe         i) the following is true and defines the value of that register:
330*07dc1947SRichard Lowe 
331*07dc1947SRichard Lowe           If dw_regnum is Register DW_FRAME_UNDEFINED_VAL
332*07dc1947SRichard Lowe              it is not DWARF register number but
333*07dc1947SRichard Lowe              a place holder indicating the register has no defined value.
334*07dc1947SRichard Lowe           If dw_regnum is Register DW_FRAME_SAME_VAL
335*07dc1947SRichard Lowe              it  is not DWARF register number but
336*07dc1947SRichard Lowe              a place holder indicating the register has the same
337*07dc1947SRichard Lowe              value in the previous frame.
338*07dc1947SRichard Lowe            DW_FRAME_UNDEFINED_VAL, DW_FRAME_SAME_VAL and
339*07dc1947SRichard Lowe              DW_FRAME_CFA_COL3 are only present at libdwarf runtime.
340*07dc1947SRichard Lowe              Never on disk.
341*07dc1947SRichard Lowe              DW_FRAME_* Values present on disk are in dwarf.h
342*07dc1947SRichard Lowe            Because DW_FRAME_SAME_VAL and DW_FRAME_UNDEFINED_VAL
343*07dc1947SRichard Lowe            and DW_FRAME_CFA_COL3 are defineable at runtime
344*07dc1947SRichard Lowe            consider the names symbolic in this comment, not absolute.
345*07dc1947SRichard Lowe 
346*07dc1947SRichard Lowe           Otherwise: the register number is a DWARF register number
347*07dc1947SRichard Lowe             (see ABI documents for how this translates to hardware/
348*07dc1947SRichard Lowe              software register numbers in the machine hardware)
349*07dc1947SRichard Lowe              and the following applies:
350*07dc1947SRichard Lowe 
351*07dc1947SRichard Lowe            In a cfa-defining entry (rt3_cfa_rule) the regnum is the
352*07dc1947SRichard Lowe            CFA 'register number'. Which is some 'normal' register,
353*07dc1947SRichard Lowe            not DW_FRAME_CFA_COL3, nor DW_FRAME_SAME_VAL, nor
354*07dc1947SRichard Lowe            DW_FRAME_UNDEFINED_VAL.
355*07dc1947SRichard Lowe 
356*07dc1947SRichard Lowe           If dw_value_type == DW_EXPR_OFFSET (the only  possible case for
357*07dc1947SRichard Lowe              dwarf2):
358*07dc1947SRichard Lowe             If dw_offset_relevant is non-zero, then
359*07dc1947SRichard Lowe                the value is stored at at the address
360*07dc1947SRichard Lowe                CFA+N where N is a signed offset.
361*07dc1947SRichard Lowe                dw_regnum is the cfa register rule which means
362*07dc1947SRichard Lowe                one ignores dw_regnum and uses the CFA appropriately.
363*07dc1947SRichard Lowe                So dw_offset_or_block_len is a signed value, really,
364*07dc1947SRichard Lowe                and must be printed/evaluated as such.
365*07dc1947SRichard Lowe                Rule: Offset(N)
366*07dc1947SRichard Lowe             If dw_offset_relevant is zero, then the value of the register
367*07dc1947SRichard Lowe                is the value of (DWARF) register number dw_regnum.
368*07dc1947SRichard Lowe                Rule: register(R)
369*07dc1947SRichard Lowe           If dw_value_type  == DW_EXPR_VAL_OFFSET
370*07dc1947SRichard Lowe             the  value of this register is CFA +N where N is a signed offset.
371*07dc1947SRichard Lowe             dw_regnum is the cfa register rule which means
372*07dc1947SRichard Lowe             one ignores dw_regnum and uses the CFA appropriately.
373*07dc1947SRichard Lowe             Rule: val_offset(N)
374*07dc1947SRichard Lowe           If dw_value_type  == DW_EXPR_EXPRESSION
375*07dc1947SRichard Lowe             The value of the register is the value at the address
376*07dc1947SRichard Lowe             computed by evaluating the DWARF expression E.
377*07dc1947SRichard Lowe             Rule: expression(E)
378*07dc1947SRichard Lowe             The expression E byte stream is pointed to by dw_block_ptr.
379*07dc1947SRichard Lowe             The expression length in bytes is given by
380*07dc1947SRichard Lowe             dw_offset_or_block_len.
381*07dc1947SRichard Lowe           If dw_value_type  == DW_EXPR_VAL_EXPRESSION
382*07dc1947SRichard Lowe             The value of the register is the value
383*07dc1947SRichard Lowe             computed by evaluating the DWARF expression E.
384*07dc1947SRichard Lowe             Rule: val_expression(E)
385*07dc1947SRichard Lowe             The expression E byte stream is pointed to by dw_block_ptr.
386*07dc1947SRichard Lowe             The expression length in bytes is given by
387*07dc1947SRichard Lowe             dw_offset_or_block_len.
388*07dc1947SRichard Lowe           Other values of dw_value_type are an error.
389*07dc1947SRichard Lowe         */
390*07dc1947SRichard Lowe     Dwarf_Small         dw_offset_relevant;
391*07dc1947SRichard Lowe     Dwarf_Small         dw_value_type;
392*07dc1947SRichard Lowe     Dwarf_Half          dw_regnum;
393*07dc1947SRichard Lowe     Dwarf_Unsigned      dw_offset_or_block_len;
394*07dc1947SRichard Lowe     Dwarf_Ptr           dw_block_ptr;
395*07dc1947SRichard Lowe 
396*07dc1947SRichard Lowe }Dwarf_Regtable_Entry3;
397*07dc1947SRichard Lowe 
398*07dc1947SRichard Lowe /* For the DWARF3 version, moved the DW_FRAME_CFA_COL
399*07dc1947SRichard Lowe    out of the array and into its own struct.
400*07dc1947SRichard Lowe    Having it part of the array is not very easy to work
401*07dc1947SRichard Lowe    with from a portability point of view: changing
402*07dc1947SRichard Lowe    the number for every architecture is a pain (if one fails
403*07dc1947SRichard Lowe    to set it correctly a register rule gets clobbered when
404*07dc1947SRichard Lowe    setting CFA).  With MIPS it just happened to be easy to use
405*07dc1947SRichard Lowe    DW_FRAME_CFA_COL (it was wrong conceptually but it was easy...).
406*07dc1947SRichard Lowe 
407*07dc1947SRichard Lowe    rt3_rules and rt3_reg_table_size must be filled in before
408*07dc1947SRichard Lowe    calling libdwarf.  Filled in with a pointer to an array
409*07dc1947SRichard Lowe    (pointer and array  set up by the calling application)
410*07dc1947SRichard Lowe    of rt3_reg_table_size Dwarf_Regtable_Entry3_s structs.
411*07dc1947SRichard Lowe    libdwarf does not allocate or deallocate space for the
412*07dc1947SRichard Lowe    rules, you must do so.   libdwarf will initialize the
413*07dc1947SRichard Lowe    contents rules array, you do not need to do so (though
414*07dc1947SRichard Lowe    if you choose to initialize the array somehow that is ok:
415*07dc1947SRichard Lowe    libdwarf will overwrite your initializations with its own).
416*07dc1947SRichard Lowe 
417*07dc1947SRichard Lowe */
418*07dc1947SRichard Lowe typedef struct Dwarf_Regtable3_s {
419*07dc1947SRichard Lowe     struct Dwarf_Regtable_Entry3_s   rt3_cfa_rule;
420*07dc1947SRichard Lowe 
421*07dc1947SRichard Lowe     Dwarf_Half                       rt3_reg_table_size;
422*07dc1947SRichard Lowe     struct Dwarf_Regtable_Entry3_s * rt3_rules;
423*07dc1947SRichard Lowe } Dwarf_Regtable3;
424*07dc1947SRichard Lowe 
425*07dc1947SRichard Lowe 
426*07dc1947SRichard Lowe /* Use for DW_EPXR_STANDARD., DW_EXPR_VAL_OFFSET.
427*07dc1947SRichard Lowe    Returns DW_DLV_OK if the value is available.
428*07dc1947SRichard Lowe    If DW_DLV_OK returns the regnum and offset thru the pointers
429*07dc1947SRichard Lowe    (which the consumer must use appropriately).
430*07dc1947SRichard Lowe */
431*07dc1947SRichard Lowe int dwarf_frame_get_reg_register(struct Dwarf_Regtable_Entry3_s *reg_in,
432*07dc1947SRichard Lowe     Dwarf_Small *offset_relevant,
433*07dc1947SRichard Lowe     Dwarf_Half *regnum_out,
434*07dc1947SRichard Lowe     Dwarf_Signed *offset_out);
435*07dc1947SRichard Lowe 
436*07dc1947SRichard Lowe /* Use for DW_EXPR_EXPRESSION, DW_EXPR_VAL_EXPRESSION.
437*07dc1947SRichard Lowe    Returns DW_DLV_OK if the value is available.
438*07dc1947SRichard Lowe    The caller must pass in the address of a valid
439*07dc1947SRichard Lowe    Dwarf_Block (the caller need not initialize it).
440*07dc1947SRichard Lowe */
441*07dc1947SRichard Lowe int dwarf_frame_get_reg_expression(struct Dwarf_Regtable_Entry3_s *reg_in,
442*07dc1947SRichard Lowe     Dwarf_Block *block_out);
443*07dc1947SRichard Lowe 
444*07dc1947SRichard Lowe 
445*07dc1947SRichard Lowe /* For DW_DLC_SYMBOLIC_RELOCATIONS output to caller
44649d3bc91SRichard Lowe    v2, adding drd_length: some relocations are 4 and
44749d3bc91SRichard Lowe    some 8 bytes (pointers are 8, section offsets 4) in
44849d3bc91SRichard Lowe    some dwarf environments. (MIPS relocations are all one
44949d3bc91SRichard Lowe    size in any given ABI.) Changing drd_type to an unsigned char
45049d3bc91SRichard Lowe    to keep struct size down.
45149d3bc91SRichard Lowe */
45249d3bc91SRichard Lowe enum Dwarf_Rel_Type {
453*07dc1947SRichard Lowe         dwarf_drt_none,        /* Should not get to caller */
454*07dc1947SRichard Lowe         dwarf_drt_data_reloc,  /* Simple normal relocation. */
455*07dc1947SRichard Lowe         dwarf_drt_segment_rel, /* Special reloc, exceptions. */
456*07dc1947SRichard Lowe         /* dwarf_drt_first_of_length_pair  and drt_second
457*07dc1947SRichard Lowe            are for for the  .word end - begin case. */
458*07dc1947SRichard Lowe         dwarf_drt_first_of_length_pair,
45949d3bc91SRichard Lowe         dwarf_drt_second_of_length_pair
46049d3bc91SRichard Lowe };
461*07dc1947SRichard Lowe 
462*07dc1947SRichard Lowe typedef struct Dwarf_P_Marker_s * Dwarf_P_Marker;
463*07dc1947SRichard Lowe struct Dwarf_P_Marker_s {
464*07dc1947SRichard Lowe     Dwarf_Unsigned ma_marker;
465*07dc1947SRichard Lowe     Dwarf_Unsigned ma_offset;
466*07dc1947SRichard Lowe };
467*07dc1947SRichard Lowe 
46849d3bc91SRichard Lowe typedef struct Dwarf_Relocation_Data_s  * Dwarf_Relocation_Data;
46949d3bc91SRichard Lowe struct Dwarf_Relocation_Data_s {
470*07dc1947SRichard Lowe     unsigned char drd_type;   /* Cast to/from Dwarf_Rel_Type
471*07dc1947SRichard Lowe                                to keep size small in struct. */
472*07dc1947SRichard Lowe     unsigned char drd_length; /* Length in bytes of data being
473*07dc1947SRichard Lowe                                relocated. 4 for 32bit data,
474*07dc1947SRichard Lowe                                8 for 64bit data. */
475*07dc1947SRichard Lowe     Dwarf_Unsigned       drd_offset; /* Where the data to reloc is. */
47649d3bc91SRichard Lowe     Dwarf_Unsigned       drd_symbol_index;
47749d3bc91SRichard Lowe };
47849d3bc91SRichard Lowe 
479*07dc1947SRichard Lowe typedef struct Dwarf_P_String_Attr_s  * Dwarf_P_String_Attr;
480*07dc1947SRichard Lowe struct Dwarf_P_String_Attr_s {
481*07dc1947SRichard Lowe     Dwarf_Unsigned        sa_offset;  /* Offset of string attribute data */
482*07dc1947SRichard Lowe     Dwarf_Unsigned        sa_nbytes;
483*07dc1947SRichard Lowe };
484*07dc1947SRichard Lowe 
485*07dc1947SRichard Lowe 
48649d3bc91SRichard Lowe /* Opaque types for Consumer Library. */
48749d3bc91SRichard Lowe typedef struct Dwarf_Debug_s*      Dwarf_Debug;
48849d3bc91SRichard Lowe typedef struct Dwarf_Die_s*        Dwarf_Die;
48949d3bc91SRichard Lowe typedef struct Dwarf_Line_s*       Dwarf_Line;
49049d3bc91SRichard Lowe typedef struct Dwarf_Global_s*     Dwarf_Global;
49149d3bc91SRichard Lowe typedef struct Dwarf_Func_s*       Dwarf_Func;
49249d3bc91SRichard Lowe typedef struct Dwarf_Type_s*       Dwarf_Type;
49349d3bc91SRichard Lowe typedef struct Dwarf_Var_s*        Dwarf_Var;
49449d3bc91SRichard Lowe typedef struct Dwarf_Weak_s*       Dwarf_Weak;
49549d3bc91SRichard Lowe typedef struct Dwarf_Error_s*      Dwarf_Error;
49649d3bc91SRichard Lowe typedef struct Dwarf_Attribute_s*  Dwarf_Attribute;
49749d3bc91SRichard Lowe typedef struct Dwarf_Abbrev_s*       Dwarf_Abbrev;
49849d3bc91SRichard Lowe typedef struct Dwarf_Fde_s*         Dwarf_Fde;
49949d3bc91SRichard Lowe typedef struct Dwarf_Cie_s*         Dwarf_Cie;
50049d3bc91SRichard Lowe typedef struct Dwarf_Arange_s*       Dwarf_Arange;
50149d3bc91SRichard Lowe 
50249d3bc91SRichard Lowe /* Opaque types for Producer Library. */
50349d3bc91SRichard Lowe typedef struct Dwarf_P_Debug_s*           Dwarf_P_Debug;
50449d3bc91SRichard Lowe typedef struct Dwarf_P_Die_s*           Dwarf_P_Die;
50549d3bc91SRichard Lowe typedef struct Dwarf_P_Attribute_s*    Dwarf_P_Attribute;
50649d3bc91SRichard Lowe typedef struct Dwarf_P_Fde_s*        Dwarf_P_Fde;
50749d3bc91SRichard Lowe typedef struct Dwarf_P_Expr_s*        Dwarf_P_Expr;
50849d3bc91SRichard Lowe typedef Dwarf_Unsigned                Dwarf_Tag;
50949d3bc91SRichard Lowe 
51049d3bc91SRichard Lowe 
51149d3bc91SRichard Lowe /* error handler function
51249d3bc91SRichard Lowe */
51349d3bc91SRichard Lowe typedef void  (*Dwarf_Handler)(Dwarf_Error /*error*/, Dwarf_Ptr /*errarg*/);
51449d3bc91SRichard Lowe 
51549d3bc91SRichard Lowe 
516*07dc1947SRichard Lowe /* Begin libdwarf Object File Interface declarations.
517*07dc1947SRichard Lowe 
518*07dc1947SRichard Lowe As of February 2008 there are multiple dwarf_reader object access
519*07dc1947SRichard Lowe initialization methods available:
520*07dc1947SRichard Lowe The traditional dwarf_elf_init() and dwarf_init()  and dwarf_finish()
521*07dc1947SRichard Lowe     which assume libelf and POSIX file access.
522*07dc1947SRichard Lowe An object-file and library agnostic dwarf_object_init() and dwarf_object_finish()
523*07dc1947SRichard Lowe     which allow the coder to provide object access routines
524*07dc1947SRichard Lowe     abstracting away the elf interface.  So there is no dependence in the
525*07dc1947SRichard Lowe     reader code on the object format and no dependence on libelf.
526*07dc1947SRichard Lowe     See the code in dwarf_elf_access.c  and dwarf_original_elf_init.c
527*07dc1947SRichard Lowe     to see an example of initializing the structures mentioned below.
528*07dc1947SRichard Lowe 
529*07dc1947SRichard Lowe Projects using dwarf_elf_init() or dwarf_init() can ignore
530*07dc1947SRichard Lowe the Dwarf_Obj_Access* structures entirely as all these details
531*07dc1947SRichard Lowe are completed for you.
532*07dc1947SRichard Lowe 
533*07dc1947SRichard Lowe */
534*07dc1947SRichard Lowe 
535*07dc1947SRichard Lowe typedef struct Dwarf_Obj_Access_Interface_s   Dwarf_Obj_Access_Interface;
536*07dc1947SRichard Lowe typedef struct Dwarf_Obj_Access_Methods_s     Dwarf_Obj_Access_Methods;
537*07dc1947SRichard Lowe typedef struct Dwarf_Obj_Access_Section_s     Dwarf_Obj_Access_Section;
538*07dc1947SRichard Lowe 
539*07dc1947SRichard Lowe 
540*07dc1947SRichard Lowe /* Used in the get_section interface function
541*07dc1947SRichard Lowe    in Dwarf_Obj_Access_Section_s.  Since libdwarf
542*07dc1947SRichard Lowe    depends on standard DWARF section names an object
543*07dc1947SRichard Lowe    format that has no such names (but has some
544*07dc1947SRichard Lowe    method of setting up 'sections equivalents')
545*07dc1947SRichard Lowe    must arrange to return standard DWARF section
546*07dc1947SRichard Lowe    names in the 'name' field.  libdwarf does
547*07dc1947SRichard Lowe    not free the strings in 'name'. */
548*07dc1947SRichard Lowe struct Dwarf_Obj_Access_Section_s {
549*07dc1947SRichard Lowe     Dwarf_Addr     addr;
550*07dc1947SRichard Lowe     Dwarf_Unsigned size;
551*07dc1947SRichard Lowe     const char*    name;
552*07dc1947SRichard Lowe     /* Set link to zero if it is meaningless.  If non-zero
553*07dc1947SRichard Lowe        it should be a link to a rela section or from symtab
554*07dc1947SRichard Lowe        to strtab.  In Elf it is sh_link. */
555*07dc1947SRichard Lowe     Dwarf_Unsigned link;
556*07dc1947SRichard Lowe };
557*07dc1947SRichard Lowe 
558*07dc1947SRichard Lowe /* Returned by the get_endianness function in
559*07dc1947SRichard Lowe    Dwarf_Obj_Access_Methods_s. */
560*07dc1947SRichard Lowe typedef enum {
561*07dc1947SRichard Lowe     DW_OBJECT_MSB,
562*07dc1947SRichard Lowe     DW_OBJECT_LSB
563*07dc1947SRichard Lowe } Dwarf_Endianness;
564*07dc1947SRichard Lowe 
565*07dc1947SRichard Lowe /* The functions we need to access object data from libdwarf are declared here.
566*07dc1947SRichard Lowe 
567*07dc1947SRichard Lowe    In these function pointer declarations
568*07dc1947SRichard Lowe    'void *obj' is intended to be a pointer (the object field in
569*07dc1947SRichard Lowe    Dwarf_Obj_Access_Interface_s)
570*07dc1947SRichard Lowe    that hides the library-specific and object-specific data that makes
571*07dc1947SRichard Lowe    it possible to handle multiple object formats and multiple libraries.
572*07dc1947SRichard Lowe    It's not required that one handles multiple such in a single libdwarf
573*07dc1947SRichard Lowe    archive/shared-library (but not ruled out either).
574*07dc1947SRichard Lowe    See  dwarf_elf_object_access_internals_t and dwarf_elf_access.c
575*07dc1947SRichard Lowe    for an example.
576*07dc1947SRichard Lowe 
577*07dc1947SRichard Lowe */
578*07dc1947SRichard Lowe struct Dwarf_Obj_Access_Methods_s {
579*07dc1947SRichard Lowe     /**
580*07dc1947SRichard Lowe      * get_section_info
581*07dc1947SRichard Lowe      *
582*07dc1947SRichard Lowe      * Get address, size, and name info about a section.
583*07dc1947SRichard Lowe      *
584*07dc1947SRichard Lowe      * Parameters
585*07dc1947SRichard Lowe      * section_index - Zero-based index.
586*07dc1947SRichard Lowe      * return_section - Pointer to a structure in which section info
587*07dc1947SRichard Lowe      *   will be placed.   Caller must provide a valid pointer to a
588*07dc1947SRichard Lowe      *   structure area.  The structure's contents will be overwritten
589*07dc1947SRichard Lowe      *   by the call to get_section_info.
590*07dc1947SRichard Lowe      * error - A pointer to an integer in which an error code may be stored.
591*07dc1947SRichard Lowe      *
592*07dc1947SRichard Lowe      * Return
593*07dc1947SRichard Lowe      * DW_DLV_OK - Everything ok.
594*07dc1947SRichard Lowe      * DW_DLV_ERROR - Error occurred. Use 'error' to determine the
595*07dc1947SRichard Lowe      *    libdwarf defined error.
596*07dc1947SRichard Lowe      * DW_DLV_NO_ENTRY - No such section.
597*07dc1947SRichard Lowe      */
598*07dc1947SRichard Lowe     int    (*get_section_info)(void* obj, Dwarf_Half section_index,
599*07dc1947SRichard Lowe         Dwarf_Obj_Access_Section* return_section, int* error);
600*07dc1947SRichard Lowe     /**
601*07dc1947SRichard Lowe      * get_byte_order
602*07dc1947SRichard Lowe      *
603*07dc1947SRichard Lowe      * Get whether the object file represented by this interface is big-endian
604*07dc1947SRichard Lowe      * (DW_OBJECT_MSB) or little endian (DW_OBJECT_LSB).
605*07dc1947SRichard Lowe      *
606*07dc1947SRichard Lowe      * Parameters
607*07dc1947SRichard Lowe      * obj - Equivalent to 'this' in OO languages.
608*07dc1947SRichard Lowe      *
609*07dc1947SRichard Lowe      * Return
610*07dc1947SRichard Lowe      * Endianness of object. Cannot fail.
611*07dc1947SRichard Lowe      */
612*07dc1947SRichard Lowe     Dwarf_Endianness  (*get_byte_order)(void* obj);
613*07dc1947SRichard Lowe     /**
614*07dc1947SRichard Lowe      * get_length_size
615*07dc1947SRichard Lowe      *
616*07dc1947SRichard Lowe      * Get the size of a length field in the underlying object file.
617*07dc1947SRichard Lowe      * libdwarf currently supports * 4 and 8 byte sizes, but may
618*07dc1947SRichard Lowe      * support larger in the future.
619*07dc1947SRichard Lowe      * Perhaps the return type should be an enumeration?
620*07dc1947SRichard Lowe      *
621*07dc1947SRichard Lowe      * Parameters
622*07dc1947SRichard Lowe      * obj - Equivalent to 'this' in OO languages.
623*07dc1947SRichard Lowe      *
624*07dc1947SRichard Lowe      * Return
625*07dc1947SRichard Lowe      * Size of length. Cannot fail.
626*07dc1947SRichard Lowe      */
627*07dc1947SRichard Lowe     Dwarf_Small   (*get_length_size)(void* obj);
628*07dc1947SRichard Lowe     /**
629*07dc1947SRichard Lowe      * get_pointer_size
630*07dc1947SRichard Lowe      *
631*07dc1947SRichard Lowe      * Get the size of a pointer field in the underlying object file.
632*07dc1947SRichard Lowe      * libdwarf currently supports  4 and 8 byte sizes.
633*07dc1947SRichard Lowe      * Perhaps the return type should be an enumeration?
634*07dc1947SRichard Lowe 
635*07dc1947SRichard Lowe      * Return
636*07dc1947SRichard Lowe      * Size of pointer. Cannot fail.
637*07dc1947SRichard Lowe      */
638*07dc1947SRichard Lowe     Dwarf_Small   (*get_pointer_size)(void* obj);
639*07dc1947SRichard Lowe     /**
640*07dc1947SRichard Lowe      * get_section_count
641*07dc1947SRichard Lowe      *
642*07dc1947SRichard Lowe      * Get the number of sections in the object file.
643*07dc1947SRichard Lowe      *
644*07dc1947SRichard Lowe      * Parameters
645*07dc1947SRichard Lowe      *
646*07dc1947SRichard Lowe      * Return
647*07dc1947SRichard Lowe      * Number of sections
648*07dc1947SRichard Lowe      */
649*07dc1947SRichard Lowe     Dwarf_Unsigned  (*get_section_count)(void* obj);
650*07dc1947SRichard Lowe     /**
651*07dc1947SRichard Lowe      * load_section
652*07dc1947SRichard Lowe      *
653*07dc1947SRichard Lowe      * Get a pointer to an array of bytes that represent the section.
654*07dc1947SRichard Lowe      *
655*07dc1947SRichard Lowe      * Parameters
656*07dc1947SRichard Lowe      * section_index - Zero-based index.
657*07dc1947SRichard Lowe      * return_data - The address of a pointer to which the section data block
658*07dc1947SRichard Lowe      *   will be assigned.
659*07dc1947SRichard Lowe      * error - Pointer to an integer for returning libdwarf-defined
660*07dc1947SRichard Lowe      *   error numbers.
661*07dc1947SRichard Lowe      *
662*07dc1947SRichard Lowe      * Return
663*07dc1947SRichard Lowe      * DW_DLV_OK - No error.
664*07dc1947SRichard Lowe      * DW_DLV_ERROR - Error. Use 'error' to indicate a libdwarf-defined
665*07dc1947SRichard Lowe      *    error number.
666*07dc1947SRichard Lowe      * DW_DLV_NO_ENTRY - No such section.
667*07dc1947SRichard Lowe      */
668*07dc1947SRichard Lowe     int    (*load_section)(void* obj, Dwarf_Half section_index,
669*07dc1947SRichard Lowe         Dwarf_Small** return_data, int* error);
670*07dc1947SRichard Lowe 
671*07dc1947SRichard Lowe    /**
672*07dc1947SRichard Lowe     * relocate_a_section
673*07dc1947SRichard Lowe     * If relocations are not supported leave this pointer NULL.
674*07dc1947SRichard Lowe     *
675*07dc1947SRichard Lowe     * Get a pointer to an array of bytes that represent the section.
676*07dc1947SRichard Lowe     *
677*07dc1947SRichard Lowe     * Parameters
678*07dc1947SRichard Lowe     * section_index - Zero-based index of the section to be relocated.
679*07dc1947SRichard Lowe     * error - Pointer to an integer for returning libdwarf-defined
680*07dc1947SRichard Lowe     *   error numbers.
681*07dc1947SRichard Lowe     *
682*07dc1947SRichard Lowe     * Return
683*07dc1947SRichard Lowe     * DW_DLV_OK - No error.
684*07dc1947SRichard Lowe     * DW_DLV_ERROR - Error. Use 'error' to indicate a libdwarf-defined
685*07dc1947SRichard Lowe     *    error number.
686*07dc1947SRichard Lowe     * DW_DLV_NO_ENTRY - No such section.
687*07dc1947SRichard Lowe     */
688*07dc1947SRichard Lowe     int    (*relocate_a_section)(void* obj, Dwarf_Half section_index,
689*07dc1947SRichard Lowe          Dwarf_Debug dbg,
690*07dc1947SRichard Lowe          int* error);
691*07dc1947SRichard Lowe 
692*07dc1947SRichard Lowe };
693*07dc1947SRichard Lowe 
694*07dc1947SRichard Lowe 
695*07dc1947SRichard Lowe 
696*07dc1947SRichard Lowe /* These structures are allocated and deallocated by your code
697*07dc1947SRichard Lowe    when you are using the libdwarf Object File Interface
698*07dc1947SRichard Lowe    [dwarf_object_init() and dwarf_object_finish()] directly.
699*07dc1947SRichard Lowe    dwarf_object_finish() does not free
700*07dc1947SRichard Lowe    struct Dwarf_Obj_Access_Interface_s or its content.
701*07dc1947SRichard Lowe    (libdwarf does record a pointer to this struct: you must
702*07dc1947SRichard Lowe    ensure that pointer remains valid for as long as
703*07dc1947SRichard Lowe    a libdwarf instance is open (meaning
704*07dc1947SRichard Lowe    after dwarf_init() and before dwarf_finish()).
705*07dc1947SRichard Lowe 
706*07dc1947SRichard Lowe    If you are reading Elf objects and libelf use dwarf_init()
707*07dc1947SRichard Lowe    or dwarf_elf_init() which take care of these details.
708*07dc1947SRichard Lowe */
709*07dc1947SRichard Lowe struct Dwarf_Obj_Access_Interface_s {
710*07dc1947SRichard Lowe     /* object is a void* as it hides the data the object access routines
711*07dc1947SRichard Lowe        need (which varies by library in use and object format).
712*07dc1947SRichard Lowe     */
713*07dc1947SRichard Lowe     void* object;
714*07dc1947SRichard Lowe     const Dwarf_Obj_Access_Methods * methods;
715*07dc1947SRichard Lowe };
716*07dc1947SRichard Lowe 
717*07dc1947SRichard Lowe /* End libdwarf Object File Interface */
718*07dc1947SRichard Lowe 
71949d3bc91SRichard Lowe /*
72049d3bc91SRichard Lowe     Dwarf_dealloc() alloc_type arguments.
72149d3bc91SRichard Lowe     Argument points to:
72249d3bc91SRichard Lowe */
72349d3bc91SRichard Lowe #define DW_DLA_STRING          0x01     /* char* */
72449d3bc91SRichard Lowe #define DW_DLA_LOC             0x02     /* Dwarf_Loc */
72549d3bc91SRichard Lowe #define DW_DLA_LOCDESC         0x03     /* Dwarf_Locdesc */
72649d3bc91SRichard Lowe #define DW_DLA_ELLIST          0x04     /* Dwarf_Ellist (not used)*/
72749d3bc91SRichard Lowe #define DW_DLA_BOUNDS          0x05     /* Dwarf_Bounds (not used) */
72849d3bc91SRichard Lowe #define DW_DLA_BLOCK           0x06     /* Dwarf_Block */
72949d3bc91SRichard Lowe #define DW_DLA_DEBUG           0x07     /* Dwarf_Debug */
73049d3bc91SRichard Lowe #define DW_DLA_DIE             0x08     /* Dwarf_Die */
73149d3bc91SRichard Lowe #define DW_DLA_LINE            0x09     /* Dwarf_Line */
73249d3bc91SRichard Lowe #define DW_DLA_ATTR            0x0a     /* Dwarf_Attribute */
73349d3bc91SRichard Lowe #define DW_DLA_TYPE            0x0b     /* Dwarf_Type  (not used) */
73449d3bc91SRichard Lowe #define DW_DLA_SUBSCR          0x0c     /* Dwarf_Subscr (not used) */
73549d3bc91SRichard Lowe #define DW_DLA_GLOBAL          0x0d     /* Dwarf_Global */
73649d3bc91SRichard Lowe #define DW_DLA_ERROR           0x0e     /* Dwarf_Error */
73749d3bc91SRichard Lowe #define DW_DLA_LIST            0x0f     /* a list */
73849d3bc91SRichard Lowe #define DW_DLA_LINEBUF         0x10     /* Dwarf_Line* (not used) */
73949d3bc91SRichard Lowe #define DW_DLA_ARANGE          0x11     /* Dwarf_Arange */
74049d3bc91SRichard Lowe #define DW_DLA_ABBREV          0x12      /* Dwarf_Abbrev */
74149d3bc91SRichard Lowe #define DW_DLA_FRAME_OP        0x13      /* Dwarf_Frame_Op */
74249d3bc91SRichard Lowe #define DW_DLA_CIE             0x14     /* Dwarf_Cie */
74349d3bc91SRichard Lowe #define DW_DLA_FDE             0x15     /* Dwarf_Fde */
74449d3bc91SRichard Lowe #define DW_DLA_LOC_BLOCK       0x16     /* Dwarf_Loc Block (not used) */
74549d3bc91SRichard Lowe #define DW_DLA_FRAME_BLOCK     0x17     /* Dwarf_Frame Block (not used) */
74649d3bc91SRichard Lowe #define DW_DLA_FUNC            0x18     /* Dwarf_Func */
74749d3bc91SRichard Lowe #define DW_DLA_TYPENAME        0x19     /* Dwarf_Type */
74849d3bc91SRichard Lowe #define DW_DLA_VAR             0x1a     /* Dwarf_Var */
74949d3bc91SRichard Lowe #define DW_DLA_WEAK            0x1b     /* Dwarf_Weak */
75049d3bc91SRichard Lowe #define DW_DLA_ADDR            0x1c     /* Dwarf_Addr sized entries */
751*07dc1947SRichard Lowe #define DW_DLA_RANGES          0x1d     /* Dwarf_Ranges */
75249d3bc91SRichard Lowe 
75349d3bc91SRichard Lowe /* The augmenter string for CIE */
75449d3bc91SRichard Lowe #define DW_CIE_AUGMENTER_STRING_V0              "z"
75549d3bc91SRichard Lowe 
75649d3bc91SRichard Lowe /* dwarf_init() access arguments
75749d3bc91SRichard Lowe */
75849d3bc91SRichard Lowe #define DW_DLC_READ        0        /* read only access */
75949d3bc91SRichard Lowe #define DW_DLC_WRITE       1        /* write only access */
76049d3bc91SRichard Lowe #define DW_DLC_RDWR        2        /* read/write access NOT SUPPORTED*/
76149d3bc91SRichard Lowe 
762*07dc1947SRichard Lowe /* pro_init() access flag modifiers
763*07dc1947SRichard Lowe    If HAVE_DWARF2_99_EXTENSION is defined at libdwarf build time
764*07dc1947SRichard Lowe    and DW_DLC_OFFSET_SIZE_64  is passed in pro_init() flags then the DWARF3
765*07dc1947SRichard Lowe    64 bit offset extension is used to generate 64 bit offsets.
76649d3bc91SRichard Lowe */
767*07dc1947SRichard Lowe #define DW_DLC_SIZE_64     0x40000000 /* 32-bit address-size target */
768*07dc1947SRichard Lowe #define DW_DLC_SIZE_32     0x20000000 /* 64-bit address-size target */
769*07dc1947SRichard Lowe #define DW_DLC_OFFSET_SIZE_64 0x10000000 /* 64-bit offset-size DWARF */
77049d3bc91SRichard Lowe 
771*07dc1947SRichard Lowe /* dwarf_pro_init() access flag modifiers
77249d3bc91SRichard Lowe */
77349d3bc91SRichard Lowe #define DW_DLC_ISA_MIPS             0x00000000 /* MIPS target */
77449d3bc91SRichard Lowe #define DW_DLC_ISA_IA64             0x01000000 /* IA64 target */
775*07dc1947SRichard Lowe #define DW_DLC_STREAM_RELOCATIONS   0x02000000 /* Old style binary relocs */
776*07dc1947SRichard Lowe 
777*07dc1947SRichard Lowe     /* Usable with assembly output because it is up to the producer to
778*07dc1947SRichard Lowe        deal with locations in whatever manner the producer code wishes.
779*07dc1947SRichard Lowe        Possibly emitting text an assembler will recognize. */
780*07dc1947SRichard Lowe #define DW_DLC_SYMBOLIC_RELOCATIONS 0x04000000
781*07dc1947SRichard Lowe 
782*07dc1947SRichard Lowe #define DW_DLC_TARGET_BIGENDIAN     0x08000000 /* Big    endian target */
783*07dc1947SRichard Lowe #define DW_DLC_TARGET_LITTLEENDIAN  0x00100000 /* Little endian target */
784*07dc1947SRichard Lowe 
785*07dc1947SRichard Lowe #if 0
786*07dc1947SRichard Lowe   /*
787*07dc1947SRichard Lowe    The libdwarf producer interfaces jumble these two semantics together in
788*07dc1947SRichard Lowe    confusing ways.  We *should* have flags like these...
789*07dc1947SRichard Lowe    But changing the code means a lot of diffs.  So for now,
790*07dc1947SRichard Lowe    we leave things as they are
791*07dc1947SRichard Lowe   */
792*07dc1947SRichard Lowe   #define DW_DLC_SUN_OFFSET32        0x00010000 /* use 32-bit sec offsets */
793*07dc1947SRichard Lowe   #define DW_DLC_SUN_OFFSET64        0x00020000 /* use 64-bit sec offsets */
794*07dc1947SRichard Lowe   #define DW_DLC_SUN_POINTER32        0x00040000 /* use 4 for address_size */
795*07dc1947SRichard Lowe   #define DW_DLC_SUN_POINTER64        0x00080000 /* use 8 for address_size */
796*07dc1947SRichard Lowe #endif
79749d3bc91SRichard Lowe 
79849d3bc91SRichard Lowe /* dwarf_pcline() slide arguments
79949d3bc91SRichard Lowe */
80049d3bc91SRichard Lowe #define DW_DLS_BACKWARD   -1       /* slide backward to find line */
80149d3bc91SRichard Lowe #define DW_DLS_NOSLIDE     0       /* match exactly without sliding */
80249d3bc91SRichard Lowe #define DW_DLS_FORWARD     1       /* slide forward to find line */
80349d3bc91SRichard Lowe 
80449d3bc91SRichard Lowe /* libdwarf error numbers
80549d3bc91SRichard Lowe */
80649d3bc91SRichard Lowe #define DW_DLE_NE          0     /* no error */
80749d3bc91SRichard Lowe #define DW_DLE_VMM         1     /* dwarf format/library version mismatch */
80849d3bc91SRichard Lowe #define DW_DLE_MAP         2     /* memory map failure */
80949d3bc91SRichard Lowe #define DW_DLE_LEE         3     /* libelf error */
81049d3bc91SRichard Lowe #define DW_DLE_NDS         4     /* no debug section */
81149d3bc91SRichard Lowe #define DW_DLE_NLS         5     /* no line section */
81249d3bc91SRichard Lowe #define DW_DLE_ID          6     /* invalid descriptor for query */
81349d3bc91SRichard Lowe #define DW_DLE_IOF         7     /* I/O failure */
81449d3bc91SRichard Lowe #define DW_DLE_MAF         8     /* memory allocation failure */
81549d3bc91SRichard Lowe #define DW_DLE_IA          9     /* invalid argument */
81649d3bc91SRichard Lowe #define DW_DLE_MDE         10     /* mangled debugging entry */
81749d3bc91SRichard Lowe #define DW_DLE_MLE         11     /* mangled line number entry */
81849d3bc91SRichard Lowe #define DW_DLE_FNO         12     /* file not open */
81949d3bc91SRichard Lowe #define DW_DLE_FNR         13     /* file not a regular file */
82049d3bc91SRichard Lowe #define DW_DLE_FWA         14     /* file open with wrong access */
82149d3bc91SRichard Lowe #define DW_DLE_NOB         15     /* not an object file */
82249d3bc91SRichard Lowe #define DW_DLE_MOF         16     /* mangled object file header */
82349d3bc91SRichard Lowe #define DW_DLE_EOLL        17     /* end of location list entries */
82449d3bc91SRichard Lowe #define DW_DLE_NOLL        18     /* no location list section */
82549d3bc91SRichard Lowe #define DW_DLE_BADOFF      19     /* Invalid offset */
82649d3bc91SRichard Lowe #define DW_DLE_EOS         20     /* end of section  */
82749d3bc91SRichard Lowe #define DW_DLE_ATRUNC      21     /* abbreviations section appears truncated*/
82849d3bc91SRichard Lowe #define DW_DLE_BADBITC     22     /* Address size passed to dwarf bad*/
82949d3bc91SRichard Lowe                     /* It is not an allowed size (64 or 32) */
83049d3bc91SRichard Lowe     /* Error codes defined by the current Libdwarf Implementation. */
83149d3bc91SRichard Lowe #define DW_DLE_DBG_ALLOC                        23
83249d3bc91SRichard Lowe #define DW_DLE_FSTAT_ERROR                      24
83349d3bc91SRichard Lowe #define DW_DLE_FSTAT_MODE_ERROR                 25
83449d3bc91SRichard Lowe #define DW_DLE_INIT_ACCESS_WRONG                26
83549d3bc91SRichard Lowe #define DW_DLE_ELF_BEGIN_ERROR                  27
83649d3bc91SRichard Lowe #define DW_DLE_ELF_GETEHDR_ERROR                28
83749d3bc91SRichard Lowe #define DW_DLE_ELF_GETSHDR_ERROR                29
83849d3bc91SRichard Lowe #define DW_DLE_ELF_STRPTR_ERROR                 30
83949d3bc91SRichard Lowe #define DW_DLE_DEBUG_INFO_DUPLICATE             31
84049d3bc91SRichard Lowe #define DW_DLE_DEBUG_INFO_NULL                  32
84149d3bc91SRichard Lowe #define DW_DLE_DEBUG_ABBREV_DUPLICATE           33
84249d3bc91SRichard Lowe #define DW_DLE_DEBUG_ABBREV_NULL                34
84349d3bc91SRichard Lowe #define DW_DLE_DEBUG_ARANGES_DUPLICATE          35
84449d3bc91SRichard Lowe #define DW_DLE_DEBUG_ARANGES_NULL               36
84549d3bc91SRichard Lowe #define DW_DLE_DEBUG_LINE_DUPLICATE             37
84649d3bc91SRichard Lowe #define DW_DLE_DEBUG_LINE_NULL                  38
84749d3bc91SRichard Lowe #define DW_DLE_DEBUG_LOC_DUPLICATE              39
84849d3bc91SRichard Lowe #define DW_DLE_DEBUG_LOC_NULL                   40
84949d3bc91SRichard Lowe #define DW_DLE_DEBUG_MACINFO_DUPLICATE          41
85049d3bc91SRichard Lowe #define DW_DLE_DEBUG_MACINFO_NULL               42
85149d3bc91SRichard Lowe #define DW_DLE_DEBUG_PUBNAMES_DUPLICATE         43
85249d3bc91SRichard Lowe #define DW_DLE_DEBUG_PUBNAMES_NULL              44
85349d3bc91SRichard Lowe #define DW_DLE_DEBUG_STR_DUPLICATE              45
85449d3bc91SRichard Lowe #define DW_DLE_DEBUG_STR_NULL                   46
85549d3bc91SRichard Lowe #define DW_DLE_CU_LENGTH_ERROR                  47
85649d3bc91SRichard Lowe #define DW_DLE_VERSION_STAMP_ERROR              48
85749d3bc91SRichard Lowe #define DW_DLE_ABBREV_OFFSET_ERROR              49
85849d3bc91SRichard Lowe #define DW_DLE_ADDRESS_SIZE_ERROR               50
85949d3bc91SRichard Lowe #define DW_DLE_DEBUG_INFO_PTR_NULL              51
86049d3bc91SRichard Lowe #define DW_DLE_DIE_NULL                         52
86149d3bc91SRichard Lowe #define DW_DLE_STRING_OFFSET_BAD                53
86249d3bc91SRichard Lowe #define DW_DLE_DEBUG_LINE_LENGTH_BAD            54
86349d3bc91SRichard Lowe #define DW_DLE_LINE_PROLOG_LENGTH_BAD           55
86449d3bc91SRichard Lowe #define DW_DLE_LINE_NUM_OPERANDS_BAD            56
865*07dc1947SRichard Lowe #define DW_DLE_LINE_SET_ADDR_ERROR              57 /* No longer used. */
86649d3bc91SRichard Lowe #define DW_DLE_LINE_EXT_OPCODE_BAD              58
86749d3bc91SRichard Lowe #define DW_DLE_DWARF_LINE_NULL                  59
86849d3bc91SRichard Lowe #define DW_DLE_INCL_DIR_NUM_BAD                 60
86949d3bc91SRichard Lowe #define DW_DLE_LINE_FILE_NUM_BAD                61
87049d3bc91SRichard Lowe #define DW_DLE_ALLOC_FAIL                       62
87149d3bc91SRichard Lowe #define DW_DLE_NO_CALLBACK_FUNC                 63
87249d3bc91SRichard Lowe #define DW_DLE_SECT_ALLOC                       64
87349d3bc91SRichard Lowe #define DW_DLE_FILE_ENTRY_ALLOC                 65
87449d3bc91SRichard Lowe #define DW_DLE_LINE_ALLOC                       66
87549d3bc91SRichard Lowe #define DW_DLE_FPGM_ALLOC                       67
87649d3bc91SRichard Lowe #define DW_DLE_INCDIR_ALLOC                     68
87749d3bc91SRichard Lowe #define DW_DLE_STRING_ALLOC                     69
87849d3bc91SRichard Lowe #define DW_DLE_CHUNK_ALLOC                      70
87949d3bc91SRichard Lowe #define DW_DLE_BYTEOFF_ERR                      71
88049d3bc91SRichard Lowe #define DW_DLE_CIE_ALLOC                        72
88149d3bc91SRichard Lowe #define DW_DLE_FDE_ALLOC                        73
88249d3bc91SRichard Lowe #define DW_DLE_REGNO_OVFL                       74
88349d3bc91SRichard Lowe #define DW_DLE_CIE_OFFS_ALLOC                   75
88449d3bc91SRichard Lowe #define DW_DLE_WRONG_ADDRESS                    76
88549d3bc91SRichard Lowe #define DW_DLE_EXTRA_NEIGHBORS                  77
88649d3bc91SRichard Lowe #define    DW_DLE_WRONG_TAG                     78
88749d3bc91SRichard Lowe #define DW_DLE_DIE_ALLOC                        79
88849d3bc91SRichard Lowe #define DW_DLE_PARENT_EXISTS                    80
88949d3bc91SRichard Lowe #define DW_DLE_DBG_NULL                         81
89049d3bc91SRichard Lowe #define DW_DLE_DEBUGLINE_ERROR                  82
89149d3bc91SRichard Lowe #define DW_DLE_DEBUGFRAME_ERROR                 83
89249d3bc91SRichard Lowe #define DW_DLE_DEBUGINFO_ERROR                  84
89349d3bc91SRichard Lowe #define DW_DLE_ATTR_ALLOC                       85
89449d3bc91SRichard Lowe #define DW_DLE_ABBREV_ALLOC                     86
89549d3bc91SRichard Lowe #define DW_DLE_OFFSET_UFLW                      87
89649d3bc91SRichard Lowe #define DW_DLE_ELF_SECT_ERR                     88
89749d3bc91SRichard Lowe #define DW_DLE_DEBUG_FRAME_LENGTH_BAD           89
89849d3bc91SRichard Lowe #define DW_DLE_FRAME_VERSION_BAD                90
89949d3bc91SRichard Lowe #define DW_DLE_CIE_RET_ADDR_REG_ERROR           91
90049d3bc91SRichard Lowe #define DW_DLE_FDE_NULL                         92
90149d3bc91SRichard Lowe #define DW_DLE_FDE_DBG_NULL                     93
90249d3bc91SRichard Lowe #define DW_DLE_CIE_NULL                         94
90349d3bc91SRichard Lowe #define DW_DLE_CIE_DBG_NULL                     95
90449d3bc91SRichard Lowe #define DW_DLE_FRAME_TABLE_COL_BAD              96
90549d3bc91SRichard Lowe #define DW_DLE_PC_NOT_IN_FDE_RANGE              97
90649d3bc91SRichard Lowe #define DW_DLE_CIE_INSTR_EXEC_ERROR             98
90749d3bc91SRichard Lowe #define DW_DLE_FRAME_INSTR_EXEC_ERROR           99
90849d3bc91SRichard Lowe #define DW_DLE_FDE_PTR_NULL                    100
90949d3bc91SRichard Lowe #define DW_DLE_RET_OP_LIST_NULL                101
91049d3bc91SRichard Lowe #define DW_DLE_LINE_CONTEXT_NULL               102
91149d3bc91SRichard Lowe #define DW_DLE_DBG_NO_CU_CONTEXT               103
91249d3bc91SRichard Lowe #define DW_DLE_DIE_NO_CU_CONTEXT               104
91349d3bc91SRichard Lowe #define DW_DLE_FIRST_DIE_NOT_CU                105
91449d3bc91SRichard Lowe #define DW_DLE_NEXT_DIE_PTR_NULL               106
91549d3bc91SRichard Lowe #define DW_DLE_DEBUG_FRAME_DUPLICATE           107
91649d3bc91SRichard Lowe #define DW_DLE_DEBUG_FRAME_NULL                108
91749d3bc91SRichard Lowe #define DW_DLE_ABBREV_DECODE_ERROR             109
91849d3bc91SRichard Lowe #define DW_DLE_DWARF_ABBREV_NULL               110
91949d3bc91SRichard Lowe #define DW_DLE_ATTR_NULL                       111
92049d3bc91SRichard Lowe #define DW_DLE_DIE_BAD                         112
92149d3bc91SRichard Lowe #define DW_DLE_DIE_ABBREV_BAD                  113
92249d3bc91SRichard Lowe #define DW_DLE_ATTR_FORM_BAD                   114
92349d3bc91SRichard Lowe #define DW_DLE_ATTR_NO_CU_CONTEXT              115
92449d3bc91SRichard Lowe #define DW_DLE_ATTR_FORM_SIZE_BAD              116
92549d3bc91SRichard Lowe #define DW_DLE_ATTR_DBG_NULL                   117
92649d3bc91SRichard Lowe #define DW_DLE_BAD_REF_FORM                    118
92749d3bc91SRichard Lowe #define DW_DLE_ATTR_FORM_OFFSET_BAD            119
92849d3bc91SRichard Lowe #define DW_DLE_LINE_OFFSET_BAD                 120
92949d3bc91SRichard Lowe #define DW_DLE_DEBUG_STR_OFFSET_BAD            121
93049d3bc91SRichard Lowe #define DW_DLE_STRING_PTR_NULL                 122
93149d3bc91SRichard Lowe #define DW_DLE_PUBNAMES_VERSION_ERROR          123
93249d3bc91SRichard Lowe #define DW_DLE_PUBNAMES_LENGTH_BAD             124
93349d3bc91SRichard Lowe #define DW_DLE_GLOBAL_NULL                     125
93449d3bc91SRichard Lowe #define DW_DLE_GLOBAL_CONTEXT_NULL             126
93549d3bc91SRichard Lowe #define DW_DLE_DIR_INDEX_BAD                   127
93649d3bc91SRichard Lowe #define DW_DLE_LOC_EXPR_BAD                    128
93749d3bc91SRichard Lowe #define DW_DLE_DIE_LOC_EXPR_BAD                129
93849d3bc91SRichard Lowe #define DW_DLE_ADDR_ALLOC                      130
93949d3bc91SRichard Lowe #define DW_DLE_OFFSET_BAD                      131
94049d3bc91SRichard Lowe #define DW_DLE_MAKE_CU_CONTEXT_FAIL            132
94149d3bc91SRichard Lowe #define DW_DLE_REL_ALLOC                       133
94249d3bc91SRichard Lowe #define DW_DLE_ARANGE_OFFSET_BAD               134
94349d3bc91SRichard Lowe #define DW_DLE_SEGMENT_SIZE_BAD                135
94449d3bc91SRichard Lowe #define DW_DLE_ARANGE_LENGTH_BAD               136
94549d3bc91SRichard Lowe #define DW_DLE_ARANGE_DECODE_ERROR             137
94649d3bc91SRichard Lowe #define DW_DLE_ARANGES_NULL                    138
94749d3bc91SRichard Lowe #define DW_DLE_ARANGE_NULL                     139
94849d3bc91SRichard Lowe #define DW_DLE_NO_FILE_NAME                    140
94949d3bc91SRichard Lowe #define DW_DLE_NO_COMP_DIR                     141
95049d3bc91SRichard Lowe #define DW_DLE_CU_ADDRESS_SIZE_BAD             142
95149d3bc91SRichard Lowe #define DW_DLE_INPUT_ATTR_BAD                  143
95249d3bc91SRichard Lowe #define DW_DLE_EXPR_NULL                       144
95349d3bc91SRichard Lowe #define DW_DLE_BAD_EXPR_OPCODE                 145
95449d3bc91SRichard Lowe #define DW_DLE_EXPR_LENGTH_BAD                 146
95549d3bc91SRichard Lowe #define DW_DLE_MULTIPLE_RELOC_IN_EXPR          147
95649d3bc91SRichard Lowe #define DW_DLE_ELF_GETIDENT_ERROR              148
95749d3bc91SRichard Lowe #define DW_DLE_NO_AT_MIPS_FDE                  149
95849d3bc91SRichard Lowe #define DW_DLE_NO_CIE_FOR_FDE                  150
95949d3bc91SRichard Lowe #define DW_DLE_DIE_ABBREV_LIST_NULL            151
96049d3bc91SRichard Lowe #define DW_DLE_DEBUG_FUNCNAMES_DUPLICATE       152
96149d3bc91SRichard Lowe #define DW_DLE_DEBUG_FUNCNAMES_NULL            153
96249d3bc91SRichard Lowe #define DW_DLE_DEBUG_FUNCNAMES_VERSION_ERROR   154
96349d3bc91SRichard Lowe #define DW_DLE_DEBUG_FUNCNAMES_LENGTH_BAD      155
96449d3bc91SRichard Lowe #define DW_DLE_FUNC_NULL                       156
96549d3bc91SRichard Lowe #define DW_DLE_FUNC_CONTEXT_NULL               157
96649d3bc91SRichard Lowe #define DW_DLE_DEBUG_TYPENAMES_DUPLICATE       158
96749d3bc91SRichard Lowe #define DW_DLE_DEBUG_TYPENAMES_NULL            159
96849d3bc91SRichard Lowe #define DW_DLE_DEBUG_TYPENAMES_VERSION_ERROR   160
96949d3bc91SRichard Lowe #define DW_DLE_DEBUG_TYPENAMES_LENGTH_BAD      161
97049d3bc91SRichard Lowe #define DW_DLE_TYPE_NULL                       162
97149d3bc91SRichard Lowe #define DW_DLE_TYPE_CONTEXT_NULL               163
97249d3bc91SRichard Lowe #define DW_DLE_DEBUG_VARNAMES_DUPLICATE        164
97349d3bc91SRichard Lowe #define DW_DLE_DEBUG_VARNAMES_NULL             165
97449d3bc91SRichard Lowe #define DW_DLE_DEBUG_VARNAMES_VERSION_ERROR    166
97549d3bc91SRichard Lowe #define DW_DLE_DEBUG_VARNAMES_LENGTH_BAD       167
97649d3bc91SRichard Lowe #define DW_DLE_VAR_NULL                        168
97749d3bc91SRichard Lowe #define DW_DLE_VAR_CONTEXT_NULL                169
97849d3bc91SRichard Lowe #define DW_DLE_DEBUG_WEAKNAMES_DUPLICATE       170
97949d3bc91SRichard Lowe #define DW_DLE_DEBUG_WEAKNAMES_NULL            171
98049d3bc91SRichard Lowe #define DW_DLE_DEBUG_WEAKNAMES_VERSION_ERROR   172
98149d3bc91SRichard Lowe #define DW_DLE_DEBUG_WEAKNAMES_LENGTH_BAD      173
98249d3bc91SRichard Lowe #define DW_DLE_WEAK_NULL                       174
98349d3bc91SRichard Lowe #define DW_DLE_WEAK_CONTEXT_NULL               175
98449d3bc91SRichard Lowe #define DW_DLE_LOCDESC_COUNT_WRONG             176
98549d3bc91SRichard Lowe #define DW_DLE_MACINFO_STRING_NULL             177
98649d3bc91SRichard Lowe #define DW_DLE_MACINFO_STRING_EMPTY            178
98749d3bc91SRichard Lowe #define DW_DLE_MACINFO_INTERNAL_ERROR_SPACE    179
98849d3bc91SRichard Lowe #define DW_DLE_MACINFO_MALLOC_FAIL             180
98949d3bc91SRichard Lowe #define DW_DLE_DEBUGMACINFO_ERROR              181
99049d3bc91SRichard Lowe #define DW_DLE_DEBUG_MACRO_LENGTH_BAD          182
99149d3bc91SRichard Lowe #define DW_DLE_DEBUG_MACRO_MAX_BAD             183
99249d3bc91SRichard Lowe #define DW_DLE_DEBUG_MACRO_INTERNAL_ERR        184
99349d3bc91SRichard Lowe #define DW_DLE_DEBUG_MACRO_MALLOC_SPACE        185
99449d3bc91SRichard Lowe #define DW_DLE_DEBUG_MACRO_INCONSISTENT        186
99549d3bc91SRichard Lowe #define DW_DLE_DF_NO_CIE_AUGMENTATION          187
99649d3bc91SRichard Lowe #define DW_DLE_DF_REG_NUM_TOO_HIGH             188
99749d3bc91SRichard Lowe #define DW_DLE_DF_MAKE_INSTR_NO_INIT           189
99849d3bc91SRichard Lowe #define DW_DLE_DF_NEW_LOC_LESS_OLD_LOC         190
99949d3bc91SRichard Lowe #define DW_DLE_DF_POP_EMPTY_STACK              191
100049d3bc91SRichard Lowe #define DW_DLE_DF_ALLOC_FAIL                   192
100149d3bc91SRichard Lowe #define DW_DLE_DF_FRAME_DECODING_ERROR         193
100249d3bc91SRichard Lowe #define DW_DLE_DEBUG_LOC_SECTION_SHORT         194
1003*07dc1947SRichard Lowe #define DW_DLE_FRAME_AUGMENTATION_UNKNOWN      195
1004*07dc1947SRichard Lowe #define DW_DLE_PUBTYPE_CONTEXT                 196 /* Unused. */
1005*07dc1947SRichard Lowe #define DW_DLE_DEBUG_PUBTYPES_LENGTH_BAD       197
1006*07dc1947SRichard Lowe #define DW_DLE_DEBUG_PUBTYPES_VERSION_ERROR    198
1007*07dc1947SRichard Lowe #define DW_DLE_DEBUG_PUBTYPES_DUPLICATE        199
1008*07dc1947SRichard Lowe #define DW_DLE_FRAME_CIE_DECODE_ERROR          200
1009*07dc1947SRichard Lowe #define DW_DLE_FRAME_REGISTER_UNREPRESENTABLE  201
1010*07dc1947SRichard Lowe #define DW_DLE_FRAME_REGISTER_COUNT_MISMATCH   202
1011*07dc1947SRichard Lowe #define DW_DLE_LINK_LOOP                       203
1012*07dc1947SRichard Lowe #define DW_DLE_STRP_OFFSET_BAD                 204
1013*07dc1947SRichard Lowe #define DW_DLE_DEBUG_RANGES_DUPLICATE          205
1014*07dc1947SRichard Lowe #define DW_DLE_DEBUG_RANGES_OFFSET_BAD         206
1015*07dc1947SRichard Lowe #define DW_DLE_DEBUG_RANGES_MISSING_END        207
1016*07dc1947SRichard Lowe #define DW_DLE_DEBUG_RANGES_OUT_OF_MEM         208
1017*07dc1947SRichard Lowe #define DW_DLE_DEBUG_SYMTAB_ERR                209
1018*07dc1947SRichard Lowe #define DW_DLE_DEBUG_STRTAB_ERR                210
1019*07dc1947SRichard Lowe #define DW_DLE_RELOC_MISMATCH_INDEX            211
1020*07dc1947SRichard Lowe #define DW_DLE_RELOC_MISMATCH_RELOC_INDEX      212
1021*07dc1947SRichard Lowe #define DW_DLE_RELOC_MISMATCH_STRTAB_INDEX     213
1022*07dc1947SRichard Lowe #define DW_DLE_RELOC_SECTION_MISMATCH          214
1023*07dc1947SRichard Lowe #define DW_DLE_RELOC_SECTION_MISSING_INDEX     215
1024*07dc1947SRichard Lowe #define DW_DLE_RELOC_SECTION_LENGTH_ODD        216
1025*07dc1947SRichard Lowe #define DW_DLE_RELOC_SECTION_PTR_NULL          217
1026*07dc1947SRichard Lowe #define DW_DLE_RELOC_SECTION_MALLOC_FAIL       218
1027*07dc1947SRichard Lowe #define DW_DLE_NO_ELF64_SUPPORT                219
1028*07dc1947SRichard Lowe #define DW_DLE_MISSING_ELF64_SUPPORT           220
1029*07dc1947SRichard Lowe #define DW_DLE_ORPHAN_FDE                      221
1030*07dc1947SRichard Lowe #define DW_DLE_DUPLICATE_INST_BLOCK            222
1031*07dc1947SRichard Lowe #define DW_DLE_BAD_REF_SIG8_FORM               223
1032*07dc1947SRichard Lowe #define DW_DLE_ATTR_EXPRLOC_FORM_BAD           224
1033*07dc1947SRichard Lowe #define DW_DLE_FORM_SEC_OFFSET_LENGTH_BAD      225
1034*07dc1947SRichard Lowe #define DW_DLE_NOT_REF_FORM                    226
1035*07dc1947SRichard Lowe #define DW_DLE_DEBUG_FRAME_LENGTH_NOT_MULTIPLE 227
1036*07dc1947SRichard Lowe 
1037*07dc1947SRichard Lowe 
103849d3bc91SRichard Lowe 
103949d3bc91SRichard Lowe     /* DW_DLE_LAST MUST EQUAL LAST ERROR NUMBER */
1040*07dc1947SRichard Lowe #define DW_DLE_LAST        227
104149d3bc91SRichard Lowe #define DW_DLE_LO_USER     0x10000
104249d3bc91SRichard Lowe 
1043*07dc1947SRichard Lowe    /* Taken as meaning 'undefined value', this is not
104449d3bc91SRichard Lowe       a column or register number.
104549d3bc91SRichard Lowe       Only present at libdwarf runtime. Never on disk.
104649d3bc91SRichard Lowe       DW_FRAME_* Values present on disk are in dwarf.h
104749d3bc91SRichard Lowe    */
104849d3bc91SRichard Lowe #define DW_FRAME_UNDEFINED_VAL          1034
104949d3bc91SRichard Lowe 
1050*07dc1947SRichard Lowe    /* Taken as meaning 'same value' as caller had, not a column
105149d3bc91SRichard Lowe       or register number
105249d3bc91SRichard Lowe       Only present at libdwarf runtime. Never on disk.
105349d3bc91SRichard Lowe       DW_FRAME_* Values present on disk are in dwarf.h
105449d3bc91SRichard Lowe    */
105549d3bc91SRichard Lowe #define DW_FRAME_SAME_VAL               1035
105649d3bc91SRichard Lowe 
105749d3bc91SRichard Lowe 
105849d3bc91SRichard Lowe 
105949d3bc91SRichard Lowe /* error return values
106049d3bc91SRichard Lowe */
106149d3bc91SRichard Lowe #define DW_DLV_BADADDR     (~(Dwarf_Addr)0)
106249d3bc91SRichard Lowe     /* for functions returning target address */
106349d3bc91SRichard Lowe 
106449d3bc91SRichard Lowe #define DW_DLV_NOCOUNT     ((Dwarf_Signed)-1)
106549d3bc91SRichard Lowe     /* for functions returning count */
106649d3bc91SRichard Lowe 
106749d3bc91SRichard Lowe #define DW_DLV_BADOFFSET   (~(Dwarf_Off)0)
106849d3bc91SRichard Lowe     /* for functions returning offset */
106949d3bc91SRichard Lowe 
107049d3bc91SRichard Lowe /* standard return values for functions */
107149d3bc91SRichard Lowe #define DW_DLV_NO_ENTRY -1
107249d3bc91SRichard Lowe #define DW_DLV_OK        0
107349d3bc91SRichard Lowe #define DW_DLV_ERROR     1
107449d3bc91SRichard Lowe 
107549d3bc91SRichard Lowe /* Special values for offset_into_exception_table field of dwarf fde's. */
107649d3bc91SRichard Lowe /* The following value indicates that there is no Exception table offset
107749d3bc91SRichard Lowe    associated with a dwarf frame. */
107849d3bc91SRichard Lowe #define DW_DLX_NO_EH_OFFSET         (-1LL)
107949d3bc91SRichard Lowe /* The following value indicates that the producer was unable to analyse the
108049d3bc91SRichard Lowe    source file to generate Exception tables for this function. */
108149d3bc91SRichard Lowe #define DW_DLX_EH_OFFSET_UNAVAILABLE  (-2LL)
108249d3bc91SRichard Lowe 
108349d3bc91SRichard Lowe 
108449d3bc91SRichard Lowe /*===========================================================================*/
108549d3bc91SRichard Lowe /*  Dwarf consumer interface initialization and termination operations */
108649d3bc91SRichard Lowe 
1087*07dc1947SRichard Lowe /* Initialization based on Unix open fd (using libelf internally). */
108849d3bc91SRichard Lowe int dwarf_init(int    /*fd*/,
108949d3bc91SRichard Lowe     Dwarf_Unsigned    /*access*/,
109049d3bc91SRichard Lowe     Dwarf_Handler     /*errhand*/,
109149d3bc91SRichard Lowe     Dwarf_Ptr         /*errarg*/,
109249d3bc91SRichard Lowe     Dwarf_Debug*      /*dbg*/,
109349d3bc91SRichard Lowe     Dwarf_Error*      /*error*/);
109449d3bc91SRichard Lowe 
1095*07dc1947SRichard Lowe /* Initialization based on libelf/sgi-fastlibelf open pointer. */
109649d3bc91SRichard Lowe int dwarf_elf_init(dwarf_elf_handle /*elf*/,
109749d3bc91SRichard Lowe     Dwarf_Unsigned    /*access*/,
109849d3bc91SRichard Lowe     Dwarf_Handler     /*errhand*/,
109949d3bc91SRichard Lowe     Dwarf_Ptr         /*errarg*/,
110049d3bc91SRichard Lowe     Dwarf_Debug*      /*dbg*/,
110149d3bc91SRichard Lowe     Dwarf_Error*      /*error*/);
110249d3bc91SRichard Lowe 
110349d3bc91SRichard Lowe /* Undocumented function for memory allocator. */
110449d3bc91SRichard Lowe void dwarf_print_memory_stats(Dwarf_Debug  /*dbg*/);
110549d3bc91SRichard Lowe 
110649d3bc91SRichard Lowe int dwarf_get_elf(Dwarf_Debug /*dbg*/,
110749d3bc91SRichard Lowe     dwarf_elf_handle* /*return_elfptr*/,
110849d3bc91SRichard Lowe     Dwarf_Error*      /*error*/);
110949d3bc91SRichard Lowe 
111049d3bc91SRichard Lowe int dwarf_finish(Dwarf_Debug /*dbg*/, Dwarf_Error* /*error*/);
111149d3bc91SRichard Lowe 
1112*07dc1947SRichard Lowe 
1113*07dc1947SRichard Lowe int dwarf_object_init(Dwarf_Obj_Access_Interface* /* obj */,
1114*07dc1947SRichard Lowe     Dwarf_Handler /* errhand */,
1115*07dc1947SRichard Lowe     Dwarf_Ptr     /* errarg */,
1116*07dc1947SRichard Lowe     Dwarf_Debug*  /* dbg */,
1117*07dc1947SRichard Lowe     Dwarf_Error*  /* error */);
1118*07dc1947SRichard Lowe 
1119*07dc1947SRichard Lowe int dwarf_object_finish(Dwarf_Debug /* dbg */,
1120*07dc1947SRichard Lowe     Dwarf_Error* /* error */);
1121*07dc1947SRichard Lowe 
112249d3bc91SRichard Lowe /* die traversal operations */
1123*07dc1947SRichard Lowe int dwarf_next_cu_header_b(Dwarf_Debug /*dbg*/,
1124*07dc1947SRichard Lowe     Dwarf_Unsigned* /*cu_header_length*/,
1125*07dc1947SRichard Lowe     Dwarf_Half*     /*version_stamp*/,
1126*07dc1947SRichard Lowe     Dwarf_Off*      /*abbrev_offset*/,
1127*07dc1947SRichard Lowe     Dwarf_Half*     /*address_size*/,
1128*07dc1947SRichard Lowe     Dwarf_Half*     /*length_size*/,
1129*07dc1947SRichard Lowe     Dwarf_Half*     /*extension_size*/,
1130*07dc1947SRichard Lowe     Dwarf_Unsigned* /*next_cu_header_offset*/,
1131*07dc1947SRichard Lowe     Dwarf_Error*    /*error*/);
1132*07dc1947SRichard Lowe /* The following is now obsolete, though supported. November 2009. */
113349d3bc91SRichard Lowe int dwarf_next_cu_header(Dwarf_Debug /*dbg*/,
113449d3bc91SRichard Lowe     Dwarf_Unsigned* /*cu_header_length*/,
113549d3bc91SRichard Lowe     Dwarf_Half*     /*version_stamp*/,
113649d3bc91SRichard Lowe     Dwarf_Off*      /*abbrev_offset*/,
113749d3bc91SRichard Lowe     Dwarf_Half*     /*address_size*/,
113849d3bc91SRichard Lowe     Dwarf_Unsigned* /*next_cu_header_offset*/,
113949d3bc91SRichard Lowe     Dwarf_Error*    /*error*/);
114049d3bc91SRichard Lowe 
114149d3bc91SRichard Lowe int dwarf_siblingof(Dwarf_Debug /*dbg*/,
114249d3bc91SRichard Lowe     Dwarf_Die        /*die*/,
114349d3bc91SRichard Lowe     Dwarf_Die*       /*return_siblingdie*/,
114449d3bc91SRichard Lowe     Dwarf_Error*     /*error*/);
114549d3bc91SRichard Lowe 
114649d3bc91SRichard Lowe int dwarf_child(Dwarf_Die /*die*/,
114749d3bc91SRichard Lowe     Dwarf_Die*       /*return_childdie*/,
114849d3bc91SRichard Lowe     Dwarf_Error*     /*error*/);
114949d3bc91SRichard Lowe 
1150*07dc1947SRichard Lowe /* Finding die given global (not CU-relative) offset */
115149d3bc91SRichard Lowe int dwarf_offdie(Dwarf_Debug /*dbg*/,
115249d3bc91SRichard Lowe     Dwarf_Off        /*offset*/,
115349d3bc91SRichard Lowe     Dwarf_Die*       /*return_die*/,
115449d3bc91SRichard Lowe     Dwarf_Error*     /*error*/);
115549d3bc91SRichard Lowe 
1156*07dc1947SRichard Lowe /* Higher level functions (Unimplemented) */
115749d3bc91SRichard Lowe int dwarf_pcfile(Dwarf_Debug /*dbg*/,
115849d3bc91SRichard Lowe     Dwarf_Addr       /*pc*/,
115949d3bc91SRichard Lowe     Dwarf_Die*       /*return_die*/,
116049d3bc91SRichard Lowe     Dwarf_Error*     /*error*/);
116149d3bc91SRichard Lowe 
116249d3bc91SRichard Lowe /* Unimplemented */
116349d3bc91SRichard Lowe int dwarf_pcsubr(Dwarf_Debug /*dbg*/,
116449d3bc91SRichard Lowe     Dwarf_Addr       /*pc*/,
116549d3bc91SRichard Lowe     Dwarf_Die*       /*return_die*/,
116649d3bc91SRichard Lowe     Dwarf_Error*     /*error*/);
116749d3bc91SRichard Lowe 
116849d3bc91SRichard Lowe /* Unimplemented */
116949d3bc91SRichard Lowe int dwarf_pcscope(Dwarf_Debug /*dbg*/,
117049d3bc91SRichard Lowe     Dwarf_Addr       /*pc*/,
117149d3bc91SRichard Lowe     Dwarf_Die*       /*return_die*/,
117249d3bc91SRichard Lowe     Dwarf_Error*     /*error*/);
117349d3bc91SRichard Lowe 
117449d3bc91SRichard Lowe /* operations on DIEs */
117549d3bc91SRichard Lowe int dwarf_tag(Dwarf_Die /*die*/,
117649d3bc91SRichard Lowe     Dwarf_Half*      /*return_tag*/,
117749d3bc91SRichard Lowe     Dwarf_Error*     /*error*/);
117849d3bc91SRichard Lowe 
117949d3bc91SRichard Lowe /* utility? */
1180*07dc1947SRichard Lowe /* dwarf_dieoffset returns the global debug_info
1181*07dc1947SRichard Lowe    section offset, not the CU relative offset. */
118249d3bc91SRichard Lowe int dwarf_dieoffset(Dwarf_Die /*die*/,
118349d3bc91SRichard Lowe     Dwarf_Off*       /*return_offset*/,
118449d3bc91SRichard Lowe     Dwarf_Error*     /*error*/);
118549d3bc91SRichard Lowe 
1186*07dc1947SRichard Lowe /* dwarf_CU_dieoffset_given_die returns
1187*07dc1947SRichard Lowe    the global debug_info section offset of the CU die
1188*07dc1947SRichard Lowe    that is the CU containing the given_die
1189*07dc1947SRichard Lowe    (the passed in DIE can be any DIE).
1190*07dc1947SRichard Lowe    This information makes it possible for a consumer to
1191*07dc1947SRichard Lowe    find and print CU context information for any die.
1192*07dc1947SRichard Lowe    See also dwarf_get_cu_die_offset_given_cu_header_offset(). */
1193*07dc1947SRichard Lowe int dwarf_CU_dieoffset_given_die(Dwarf_Die /*given_die*/,
1194*07dc1947SRichard Lowe     Dwarf_Off*       /*return_offset*/,
1195*07dc1947SRichard Lowe     Dwarf_Error*     /*error*/);
1196*07dc1947SRichard Lowe 
1197*07dc1947SRichard Lowe /* dwarf_die_CU_offset returns the CU relative offset
1198*07dc1947SRichard Lowe    not the global debug_info section offset, given
1199*07dc1947SRichard Lowe    any DIE in the CU.  See also dwarf_CU_dieoffset_given_die().
1200*07dc1947SRichard Lowe    */
120149d3bc91SRichard Lowe int dwarf_die_CU_offset(Dwarf_Die /*die*/,
120249d3bc91SRichard Lowe     Dwarf_Off*       /*return_offset*/,
120349d3bc91SRichard Lowe     Dwarf_Error*     /*error*/);
120449d3bc91SRichard Lowe 
1205*07dc1947SRichard Lowe int dwarf_die_CU_offset_range(Dwarf_Die /*die*/,
1206*07dc1947SRichard Lowe     Dwarf_Off*       /*return_CU_header_offset*/,
1207*07dc1947SRichard Lowe     Dwarf_Off*       /*return_CU_length_bytes*/,
1208*07dc1947SRichard Lowe     Dwarf_Error*     /*error*/);
1209*07dc1947SRichard Lowe 
121049d3bc91SRichard Lowe int dwarf_attr (Dwarf_Die /*die*/,
121149d3bc91SRichard Lowe     Dwarf_Half        /*attr*/,
121249d3bc91SRichard Lowe     Dwarf_Attribute * /*returned_attr*/,
121349d3bc91SRichard Lowe     Dwarf_Error*      /*error*/);
121449d3bc91SRichard Lowe 
121549d3bc91SRichard Lowe int dwarf_diename(Dwarf_Die /*die*/,
121649d3bc91SRichard Lowe     char   **        /*diename*/,
121749d3bc91SRichard Lowe     Dwarf_Error*     /*error*/);
121849d3bc91SRichard Lowe 
1219*07dc1947SRichard Lowe /* Returns the  abbrev code of the die. Cannot fail. */
1220*07dc1947SRichard Lowe int dwarf_die_abbrev_code(Dwarf_Die /*die */);
1221*07dc1947SRichard Lowe 
1222*07dc1947SRichard Lowe 
122349d3bc91SRichard Lowe /* convenience functions, alternative to using dwarf_attrlist() */
122449d3bc91SRichard Lowe int dwarf_hasattr(Dwarf_Die /*die*/,
122549d3bc91SRichard Lowe     Dwarf_Half       /*attr*/,
122649d3bc91SRichard Lowe     Dwarf_Bool *     /*returned_bool*/,
122749d3bc91SRichard Lowe     Dwarf_Error*     /*error*/);
122849d3bc91SRichard Lowe 
122949d3bc91SRichard Lowe /* dwarf_loclist_n preferred over dwarf_loclist */
123049d3bc91SRichard Lowe int dwarf_loclist_n(Dwarf_Attribute /*attr*/,
123149d3bc91SRichard Lowe     Dwarf_Locdesc*** /*llbuf*/,
123249d3bc91SRichard Lowe     Dwarf_Signed *   /*locCount*/,
123349d3bc91SRichard Lowe     Dwarf_Error*     /*error*/);
123449d3bc91SRichard Lowe 
123549d3bc91SRichard Lowe int dwarf_loclist(Dwarf_Attribute /*attr*/,  /* inflexible! */
123649d3bc91SRichard Lowe     Dwarf_Locdesc**  /*llbuf*/,
123749d3bc91SRichard Lowe     Dwarf_Signed *   /*locCount*/,
123849d3bc91SRichard Lowe     Dwarf_Error*     /*error*/);
123949d3bc91SRichard Lowe 
1240*07dc1947SRichard Lowe /* Extracts a dwarf expression from an expression byte stream.
1241*07dc1947SRichard Lowe    Useful to get expressions from DW_CFA_def_cfa_expression
1242*07dc1947SRichard Lowe    DW_CFA_expression DW_CFA_val_expression expression bytes.
1243*07dc1947SRichard Lowe    27 April 2009: dwarf_loclist_from_expr() interface with
1244*07dc1947SRichard Lowe    no addr_size is obsolete but supported,
1245*07dc1947SRichard Lowe    use dwarf_loclist_from_expr_a() instead.
1246*07dc1947SRichard Lowe */
1247*07dc1947SRichard Lowe int dwarf_loclist_from_expr(Dwarf_Debug dbg,
1248*07dc1947SRichard Lowe     Dwarf_Ptr expression_in,
1249*07dc1947SRichard Lowe     Dwarf_Unsigned expression_length,
1250*07dc1947SRichard Lowe     Dwarf_Locdesc ** llbuf,
1251*07dc1947SRichard Lowe     Dwarf_Signed * listlen, Dwarf_Error * error);
1252*07dc1947SRichard Lowe 
1253*07dc1947SRichard Lowe /* dwarf_loclist_from_expr_a() new 27 Apr 2009: added addr_size argument. */
1254*07dc1947SRichard Lowe int dwarf_loclist_from_expr_a(Dwarf_Debug dbg,
1255*07dc1947SRichard Lowe     Dwarf_Ptr expression_in,
1256*07dc1947SRichard Lowe     Dwarf_Unsigned expression_length,
1257*07dc1947SRichard Lowe     Dwarf_Half addr_size,
1258*07dc1947SRichard Lowe     Dwarf_Locdesc ** llbuf,
1259*07dc1947SRichard Lowe     Dwarf_Signed * listlen, Dwarf_Error * error);
1260*07dc1947SRichard Lowe 
126149d3bc91SRichard Lowe /* Unimplemented */
126249d3bc91SRichard Lowe int dwarf_stringlen(Dwarf_Die /*die*/,
126349d3bc91SRichard Lowe     Dwarf_Locdesc ** /*returned_locdesc*/,
126449d3bc91SRichard Lowe     Dwarf_Error*     /*error*/);
126549d3bc91SRichard Lowe 
126649d3bc91SRichard Lowe /* Unimplemented */
126749d3bc91SRichard Lowe int dwarf_subscrcnt(Dwarf_Die /*die*/,
126849d3bc91SRichard Lowe     Dwarf_Signed *   /*returned_count*/,
126949d3bc91SRichard Lowe     Dwarf_Error*     /*error*/);
127049d3bc91SRichard Lowe 
127149d3bc91SRichard Lowe /* Unimplemented */
127249d3bc91SRichard Lowe int dwarf_nthsubscr(Dwarf_Die /*die*/,
127349d3bc91SRichard Lowe     Dwarf_Unsigned   /*ssndx*/,
127449d3bc91SRichard Lowe     Dwarf_Die *      /*returned_die*/,
127549d3bc91SRichard Lowe     Dwarf_Error*     /*error*/);
127649d3bc91SRichard Lowe 
127749d3bc91SRichard Lowe int dwarf_lowpc(Dwarf_Die /*die*/,
127849d3bc91SRichard Lowe     Dwarf_Addr  *    /*returned_addr*/,
127949d3bc91SRichard Lowe     Dwarf_Error*     /*error*/);
128049d3bc91SRichard Lowe 
128149d3bc91SRichard Lowe int dwarf_highpc(Dwarf_Die /*die*/,
128249d3bc91SRichard Lowe     Dwarf_Addr  *    /*returned_addr*/,
128349d3bc91SRichard Lowe     Dwarf_Error*     /*error*/);
128449d3bc91SRichard Lowe 
128549d3bc91SRichard Lowe int dwarf_bytesize(Dwarf_Die /*die*/,
128649d3bc91SRichard Lowe     Dwarf_Unsigned * /*returned_size*/,
128749d3bc91SRichard Lowe     Dwarf_Error*     /*error*/);
128849d3bc91SRichard Lowe 
128949d3bc91SRichard Lowe /* Unimplemented */
129049d3bc91SRichard Lowe int dwarf_isbitfield(Dwarf_Die /*die*/,
129149d3bc91SRichard Lowe     Dwarf_Bool  *    /*returned_bool*/,
129249d3bc91SRichard Lowe     Dwarf_Error*     /*error*/);
129349d3bc91SRichard Lowe 
129449d3bc91SRichard Lowe int dwarf_bitsize(Dwarf_Die /*die*/,
129549d3bc91SRichard Lowe     Dwarf_Unsigned * /*returned_size*/,
129649d3bc91SRichard Lowe     Dwarf_Error*     /*error*/);
129749d3bc91SRichard Lowe 
129849d3bc91SRichard Lowe int dwarf_bitoffset(Dwarf_Die /*die*/,
129949d3bc91SRichard Lowe     Dwarf_Unsigned * /*returned_offset*/,
130049d3bc91SRichard Lowe     Dwarf_Error*     /*error*/);
130149d3bc91SRichard Lowe 
130249d3bc91SRichard Lowe int dwarf_srclang(Dwarf_Die /*die*/,
130349d3bc91SRichard Lowe     Dwarf_Unsigned * /*returned_lang*/,
130449d3bc91SRichard Lowe     Dwarf_Error*     /*error*/);
130549d3bc91SRichard Lowe 
130649d3bc91SRichard Lowe int dwarf_arrayorder(Dwarf_Die /*die*/,
130749d3bc91SRichard Lowe     Dwarf_Unsigned * /*returned_order*/,
130849d3bc91SRichard Lowe     Dwarf_Error*     /*error*/);
130949d3bc91SRichard Lowe 
131049d3bc91SRichard Lowe /* end of convenience function list */
131149d3bc91SRichard Lowe 
131249d3bc91SRichard Lowe /* this is the main interface to attributes of a DIE */
131349d3bc91SRichard Lowe int dwarf_attrlist(Dwarf_Die /*die*/,
131449d3bc91SRichard Lowe     Dwarf_Attribute** /*attrbuf*/,
131549d3bc91SRichard Lowe     Dwarf_Signed   * /*attrcount*/,
131649d3bc91SRichard Lowe     Dwarf_Error*     /*error*/);
131749d3bc91SRichard Lowe 
131849d3bc91SRichard Lowe /* query operations for attributes */
131949d3bc91SRichard Lowe int dwarf_hasform(Dwarf_Attribute /*attr*/,
132049d3bc91SRichard Lowe     Dwarf_Half       /*form*/,
132149d3bc91SRichard Lowe     Dwarf_Bool *     /*returned_bool*/,
132249d3bc91SRichard Lowe     Dwarf_Error*     /*error*/);
132349d3bc91SRichard Lowe 
132449d3bc91SRichard Lowe int dwarf_whatform(Dwarf_Attribute /*attr*/,
132549d3bc91SRichard Lowe     Dwarf_Half *     /*returned_form*/,
132649d3bc91SRichard Lowe     Dwarf_Error*     /*error*/);
132749d3bc91SRichard Lowe 
132849d3bc91SRichard Lowe int dwarf_whatform_direct(Dwarf_Attribute /*attr*/,
132949d3bc91SRichard Lowe     Dwarf_Half *     /*returned_form*/,
133049d3bc91SRichard Lowe     Dwarf_Error*     /*error*/);
133149d3bc91SRichard Lowe 
133249d3bc91SRichard Lowe int dwarf_whatattr(Dwarf_Attribute /*attr*/,
133349d3bc91SRichard Lowe     Dwarf_Half *     /*returned_attr_num*/,
133449d3bc91SRichard Lowe     Dwarf_Error*     /*error*/);
133549d3bc91SRichard Lowe 
133649d3bc91SRichard Lowe /*
133749d3bc91SRichard Lowe     The following are concerned with the Primary Interface: getting
133849d3bc91SRichard Lowe     the actual data values. One function per 'kind' of FORM.
133949d3bc91SRichard Lowe */
134049d3bc91SRichard Lowe /*  dwarf_formref returns, thru return_offset, a CU-relative offset
1341*07dc1947SRichard Lowe     and does not allow DW_FORM_ref_addr*/
134249d3bc91SRichard Lowe int dwarf_formref(Dwarf_Attribute /*attr*/,
134349d3bc91SRichard Lowe     Dwarf_Off*       /*return_offset*/,
134449d3bc91SRichard Lowe     Dwarf_Error*     /*error*/);
134549d3bc91SRichard Lowe /*  dwarf_global_formref returns, thru return_offset,
134649d3bc91SRichard Lowe     a debug_info-relative offset and does allow all reference forms*/
134749d3bc91SRichard Lowe int dwarf_global_formref(Dwarf_Attribute /*attr*/,
134849d3bc91SRichard Lowe     Dwarf_Off*       /*return_offset*/,
134949d3bc91SRichard Lowe     Dwarf_Error*     /*error*/);
135049d3bc91SRichard Lowe 
1351*07dc1947SRichard Lowe /*  dwarf_formsig8 returns in the caller-provided 8 byte area
1352*07dc1947SRichard Lowe     the 8 bytes of a DW_FORM_ref_sig8.  Not a string.  */
1353*07dc1947SRichard Lowe int dwarf_formsig8(Dwarf_Attribute /*attr*/,
1354*07dc1947SRichard Lowe     Dwarf_Sig8 * /*returned sig bytes*/,
1355*07dc1947SRichard Lowe     Dwarf_Error*     /*error*/);
1356*07dc1947SRichard Lowe 
135749d3bc91SRichard Lowe int dwarf_formaddr(Dwarf_Attribute /*attr*/,
135849d3bc91SRichard Lowe     Dwarf_Addr   *   /*returned_addr*/,
135949d3bc91SRichard Lowe     Dwarf_Error*     /*error*/);
136049d3bc91SRichard Lowe 
136149d3bc91SRichard Lowe int dwarf_formflag(Dwarf_Attribute /*attr*/,
136249d3bc91SRichard Lowe     Dwarf_Bool *     /*returned_bool*/,
136349d3bc91SRichard Lowe     Dwarf_Error*     /*error*/);
136449d3bc91SRichard Lowe 
136549d3bc91SRichard Lowe int dwarf_formudata(Dwarf_Attribute /*attr*/,
136649d3bc91SRichard Lowe     Dwarf_Unsigned  * /*returned_val*/,
136749d3bc91SRichard Lowe     Dwarf_Error*     /*error*/);
136849d3bc91SRichard Lowe 
136949d3bc91SRichard Lowe int dwarf_formsdata(Dwarf_Attribute     /*attr*/,
137049d3bc91SRichard Lowe     Dwarf_Signed  *  /*returned_val*/,
137149d3bc91SRichard Lowe     Dwarf_Error*     /*error*/);
137249d3bc91SRichard Lowe 
137349d3bc91SRichard Lowe int dwarf_formblock(Dwarf_Attribute /*attr*/,
137449d3bc91SRichard Lowe     Dwarf_Block    ** /*returned_block*/,
137549d3bc91SRichard Lowe     Dwarf_Error*     /*error*/);
137649d3bc91SRichard Lowe 
137749d3bc91SRichard Lowe int dwarf_formstring(Dwarf_Attribute /*attr*/,
137849d3bc91SRichard Lowe     char   **        /*returned_string*/,
137949d3bc91SRichard Lowe     Dwarf_Error*     /*error*/);
138049d3bc91SRichard Lowe 
1381*07dc1947SRichard Lowe int dwarf_formexprloc(Dwarf_Attribute /*attr*/,
1382*07dc1947SRichard Lowe     Dwarf_Unsigned * /*return_exprlen*/,
1383*07dc1947SRichard Lowe     Dwarf_Ptr  * /*block_ptr*/,
1384*07dc1947SRichard Lowe     Dwarf_Error * /*error*/);
1385*07dc1947SRichard Lowe 
1386*07dc1947SRichard Lowe 
138749d3bc91SRichard Lowe /* end attribute query operations. */
138849d3bc91SRichard Lowe 
138949d3bc91SRichard Lowe /* line number operations */
139049d3bc91SRichard Lowe /* dwarf_srclines  is the normal interface */
139149d3bc91SRichard Lowe int dwarf_srclines(Dwarf_Die /*die*/,
139249d3bc91SRichard Lowe     Dwarf_Line**     /*linebuf*/,
139349d3bc91SRichard Lowe     Dwarf_Signed *   /*linecount*/,
139449d3bc91SRichard Lowe     Dwarf_Error*     /*error*/);
139549d3bc91SRichard Lowe 
1396*07dc1947SRichard Lowe /* dwarf_srclines_dealloc, created July 2005, is the new
1397*07dc1947SRichard Lowe    method for deallocating what dwarf_srclines returns.
1398*07dc1947SRichard Lowe    More complete free than using dwarf_dealloc directly. */
1399*07dc1947SRichard Lowe void dwarf_srclines_dealloc(Dwarf_Debug /*dbg*/,
1400*07dc1947SRichard Lowe     Dwarf_Line*       /*linebuf*/,
1401*07dc1947SRichard Lowe     Dwarf_Signed      /*count */);
1402*07dc1947SRichard Lowe 
1403*07dc1947SRichard Lowe 
140449d3bc91SRichard Lowe int dwarf_srcfiles(Dwarf_Die /*die*/,
140549d3bc91SRichard Lowe     char***          /*srcfiles*/,
140649d3bc91SRichard Lowe     Dwarf_Signed *   /*filecount*/,
140749d3bc91SRichard Lowe     Dwarf_Error*     /*error*/);
140849d3bc91SRichard Lowe 
140949d3bc91SRichard Lowe /* Unimplemented. */
141049d3bc91SRichard Lowe int dwarf_dieline(Dwarf_Die /*die*/,
141149d3bc91SRichard Lowe     Dwarf_Line  *    /*returned_line*/,
141249d3bc91SRichard Lowe     Dwarf_Error *    /*error*/);
141349d3bc91SRichard Lowe 
141449d3bc91SRichard Lowe int dwarf_linebeginstatement(Dwarf_Line /*line*/,
141549d3bc91SRichard Lowe     Dwarf_Bool  *    /*returned_bool*/,
141649d3bc91SRichard Lowe     Dwarf_Error*     /*error*/);
141749d3bc91SRichard Lowe 
141849d3bc91SRichard Lowe int dwarf_lineendsequence(Dwarf_Line /*line*/,
141949d3bc91SRichard Lowe     Dwarf_Bool  *    /*returned_bool*/,
142049d3bc91SRichard Lowe     Dwarf_Error*     /*error*/);
142149d3bc91SRichard Lowe 
142249d3bc91SRichard Lowe int dwarf_lineno(Dwarf_Line /*line*/,
142349d3bc91SRichard Lowe     Dwarf_Unsigned * /*returned_lineno*/,
142449d3bc91SRichard Lowe     Dwarf_Error*     /*error*/);
142549d3bc91SRichard Lowe 
1426*07dc1947SRichard Lowe int dwarf_line_srcfileno(Dwarf_Line /*line*/,
1427*07dc1947SRichard Lowe     Dwarf_Unsigned * /*ret_fileno*/,
1428*07dc1947SRichard Lowe     Dwarf_Error *    /*error*/);
1429*07dc1947SRichard Lowe 
143049d3bc91SRichard Lowe int dwarf_lineaddr(Dwarf_Line /*line*/,
143149d3bc91SRichard Lowe     Dwarf_Addr *     /*returned_addr*/,
143249d3bc91SRichard Lowe     Dwarf_Error*     /*error*/);
143349d3bc91SRichard Lowe 
143449d3bc91SRichard Lowe int dwarf_lineoff(Dwarf_Line /*line*/,
143549d3bc91SRichard Lowe     Dwarf_Signed  *  /*returned_lineoffset*/,
143649d3bc91SRichard Lowe     Dwarf_Error*     /*error*/);
143749d3bc91SRichard Lowe 
143849d3bc91SRichard Lowe int dwarf_linesrc(Dwarf_Line /*line*/,
143949d3bc91SRichard Lowe     char   **        /*returned_name*/,
144049d3bc91SRichard Lowe     Dwarf_Error*     /*error*/);
144149d3bc91SRichard Lowe 
144249d3bc91SRichard Lowe int dwarf_lineblock(Dwarf_Line /*line*/,
144349d3bc91SRichard Lowe     Dwarf_Bool  *    /*returned_bool*/,
144449d3bc91SRichard Lowe     Dwarf_Error*     /*error*/);
144549d3bc91SRichard Lowe 
144649d3bc91SRichard Lowe /* tertiary interface to line info */
144749d3bc91SRichard Lowe /* Unimplemented */
144849d3bc91SRichard Lowe int dwarf_pclines(Dwarf_Debug /*dbg*/,
144949d3bc91SRichard Lowe     Dwarf_Addr       /*pc*/,
145049d3bc91SRichard Lowe     Dwarf_Line**     /*linebuf*/,
145149d3bc91SRichard Lowe     Dwarf_Signed *   /*linecount*/,
145249d3bc91SRichard Lowe     Dwarf_Signed     /*slide*/,
145349d3bc91SRichard Lowe     Dwarf_Error*     /*error*/);
145449d3bc91SRichard Lowe /* end line number operations */
145549d3bc91SRichard Lowe 
145649d3bc91SRichard Lowe /* global name space operations (.debug_pubnames access) */
145749d3bc91SRichard Lowe int dwarf_get_globals(Dwarf_Debug /*dbg*/,
145849d3bc91SRichard Lowe     Dwarf_Global**   /*globals*/,
145949d3bc91SRichard Lowe     Dwarf_Signed *   /*number_of_globals*/,
146049d3bc91SRichard Lowe     Dwarf_Error*     /*error*/);
1461*07dc1947SRichard Lowe void dwarf_globals_dealloc(Dwarf_Debug /*dbg*/,
1462*07dc1947SRichard Lowe     Dwarf_Global*    /*globals*/,
1463*07dc1947SRichard Lowe     Dwarf_Signed     /*number_of_globals*/);
146449d3bc91SRichard Lowe 
146549d3bc91SRichard Lowe int dwarf_globname(Dwarf_Global /*glob*/,
146649d3bc91SRichard Lowe     char   **        /*returned_name*/,
146749d3bc91SRichard Lowe     Dwarf_Error*     /*error*/);
146849d3bc91SRichard Lowe 
146949d3bc91SRichard Lowe int dwarf_global_die_offset(Dwarf_Global /*global*/,
147049d3bc91SRichard Lowe     Dwarf_Off*       /*return_offset*/,
147149d3bc91SRichard Lowe     Dwarf_Error *    /*error*/);
147249d3bc91SRichard Lowe 
1473*07dc1947SRichard Lowe /* This returns the CU die global offset if one knows the
1474*07dc1947SRichard Lowe    CU header global offset.
1475*07dc1947SRichard Lowe    See also dwarf_CU_dieoffset_given_die(). */
147649d3bc91SRichard Lowe int dwarf_get_cu_die_offset_given_cu_header_offset(
147749d3bc91SRichard Lowe     Dwarf_Debug      /*dbg*/,
147849d3bc91SRichard Lowe     Dwarf_Off        /*in_cu_header_offset*/,
147949d3bc91SRichard Lowe     Dwarf_Off *  /*out_cu_die_offset*/,
148049d3bc91SRichard Lowe     Dwarf_Error *    /*err*/);
148149d3bc91SRichard Lowe #ifdef __sgi /* pragma is sgi MIPS only */
148249d3bc91SRichard Lowe #pragma optional dwarf_get_cu_die_offset_given_cu_header_offset
148349d3bc91SRichard Lowe #endif
148449d3bc91SRichard Lowe 
148549d3bc91SRichard Lowe int dwarf_global_cu_offset(Dwarf_Global /*global*/,
148649d3bc91SRichard Lowe     Dwarf_Off*       /*return_offset*/,
148749d3bc91SRichard Lowe     Dwarf_Error*     /*error*/);
148849d3bc91SRichard Lowe 
148949d3bc91SRichard Lowe int dwarf_global_name_offsets(Dwarf_Global /*global*/,
149049d3bc91SRichard Lowe     char   **        /*returned_name*/,
149149d3bc91SRichard Lowe     Dwarf_Off*       /*die_offset*/,
149249d3bc91SRichard Lowe     Dwarf_Off*       /*cu_offset*/,
149349d3bc91SRichard Lowe     Dwarf_Error*     /*error*/);
149449d3bc91SRichard Lowe 
149549d3bc91SRichard Lowe /* Static function name operations.  */
149649d3bc91SRichard Lowe int dwarf_get_funcs(Dwarf_Debug    /*dbg*/,
149749d3bc91SRichard Lowe     Dwarf_Func**     /*funcs*/,
149849d3bc91SRichard Lowe     Dwarf_Signed *   /*number_of_funcs*/,
149949d3bc91SRichard Lowe     Dwarf_Error*     /*error*/);
1500*07dc1947SRichard Lowe void dwarf_funcs_dealloc(Dwarf_Debug /*dbg*/,
1501*07dc1947SRichard Lowe     Dwarf_Func*      /*funcs*/,
1502*07dc1947SRichard Lowe     Dwarf_Signed     /*number_of_funcs*/);
150349d3bc91SRichard Lowe 
150449d3bc91SRichard Lowe int dwarf_funcname(Dwarf_Func /*func*/,
150549d3bc91SRichard Lowe     char   **        /*returned_name*/,
150649d3bc91SRichard Lowe     Dwarf_Error*     /*error*/);
150749d3bc91SRichard Lowe 
150849d3bc91SRichard Lowe int dwarf_func_die_offset(Dwarf_Func /*func*/,
150949d3bc91SRichard Lowe     Dwarf_Off*       /*return_offset*/,
151049d3bc91SRichard Lowe     Dwarf_Error*     /*error*/);
151149d3bc91SRichard Lowe 
151249d3bc91SRichard Lowe int dwarf_func_cu_offset(Dwarf_Func /*func*/,
151349d3bc91SRichard Lowe     Dwarf_Off*       /*return_offset*/,
151449d3bc91SRichard Lowe     Dwarf_Error*     /*error*/);
151549d3bc91SRichard Lowe 
151649d3bc91SRichard Lowe int dwarf_func_name_offsets(Dwarf_Func /*func*/,
151749d3bc91SRichard Lowe     char   **        /*returned_name*/,
151849d3bc91SRichard Lowe     Dwarf_Off*       /*die_offset*/,
151949d3bc91SRichard Lowe     Dwarf_Off*       /*cu_offset*/,
152049d3bc91SRichard Lowe     Dwarf_Error*     /*error*/);
152149d3bc91SRichard Lowe 
1522*07dc1947SRichard Lowe /* User-defined type name operations, SGI IRIX .debug_typenames section.
1523*07dc1947SRichard Lowe    Same content as DWARF3 .debug_pubtypes, but defined years before
1524*07dc1947SRichard Lowe    .debug_pubtypes was defined.   SGI IRIX only. */
152549d3bc91SRichard Lowe int dwarf_get_types(Dwarf_Debug    /*dbg*/,
152649d3bc91SRichard Lowe     Dwarf_Type**     /*types*/,
152749d3bc91SRichard Lowe     Dwarf_Signed *   /*number_of_types*/,
152849d3bc91SRichard Lowe     Dwarf_Error*     /*error*/);
1529*07dc1947SRichard Lowe void dwarf_types_dealloc(Dwarf_Debug /*dbg*/,
1530*07dc1947SRichard Lowe     Dwarf_Type*      /*types*/,
1531*07dc1947SRichard Lowe     Dwarf_Signed     /*number_of_types*/);
1532*07dc1947SRichard Lowe 
153349d3bc91SRichard Lowe 
153449d3bc91SRichard Lowe int dwarf_typename(Dwarf_Type /*type*/,
153549d3bc91SRichard Lowe     char   **        /*returned_name*/,
153649d3bc91SRichard Lowe     Dwarf_Error*     /*error*/);
153749d3bc91SRichard Lowe 
153849d3bc91SRichard Lowe int dwarf_type_die_offset(Dwarf_Type /*type*/,
153949d3bc91SRichard Lowe     Dwarf_Off*       /*return_offset*/,
154049d3bc91SRichard Lowe     Dwarf_Error*     /*error*/);
154149d3bc91SRichard Lowe 
154249d3bc91SRichard Lowe int dwarf_type_cu_offset(Dwarf_Type /*type*/,
154349d3bc91SRichard Lowe     Dwarf_Off*       /*return_offset*/,
154449d3bc91SRichard Lowe     Dwarf_Error*     /*error*/);
154549d3bc91SRichard Lowe 
154649d3bc91SRichard Lowe int dwarf_type_name_offsets(Dwarf_Type    /*type*/,
154749d3bc91SRichard Lowe     char   **        /*returned_name*/,
154849d3bc91SRichard Lowe     Dwarf_Off*       /*die_offset*/,
154949d3bc91SRichard Lowe     Dwarf_Off*       /*cu_offset*/,
155049d3bc91SRichard Lowe     Dwarf_Error*     /*error*/);
155149d3bc91SRichard Lowe 
1552*07dc1947SRichard Lowe /* User-defined type name operations, DWARF3  .debug_pubtypes section.
1553*07dc1947SRichard Lowe */
1554*07dc1947SRichard Lowe int dwarf_get_pubtypes(Dwarf_Debug    /*dbg*/,
1555*07dc1947SRichard Lowe     Dwarf_Type**     /*types*/,
1556*07dc1947SRichard Lowe     Dwarf_Signed *   /*number_of_types*/,
1557*07dc1947SRichard Lowe     Dwarf_Error*     /*error*/);
1558*07dc1947SRichard Lowe void dwarf_pubtypes_dealloc(Dwarf_Debug /*dbg*/,
1559*07dc1947SRichard Lowe     Dwarf_Type*      /*pubtypes*/,
1560*07dc1947SRichard Lowe     Dwarf_Signed     /*number_of_pubtypes*/);
1561*07dc1947SRichard Lowe 
1562*07dc1947SRichard Lowe 
1563*07dc1947SRichard Lowe int dwarf_pubtypename(Dwarf_Type /*type*/,
1564*07dc1947SRichard Lowe     char   **        /*returned_name*/,
1565*07dc1947SRichard Lowe     Dwarf_Error*     /*error*/);
1566*07dc1947SRichard Lowe 
1567*07dc1947SRichard Lowe int dwarf_pubtype_die_offset(Dwarf_Type /*type*/,
1568*07dc1947SRichard Lowe     Dwarf_Off*       /*return_offset*/,
1569*07dc1947SRichard Lowe     Dwarf_Error*     /*error*/);
1570*07dc1947SRichard Lowe 
1571*07dc1947SRichard Lowe int dwarf_pubtype_cu_offset(Dwarf_Type /*type*/,
1572*07dc1947SRichard Lowe     Dwarf_Off*       /*return_offset*/,
1573*07dc1947SRichard Lowe     Dwarf_Error*     /*error*/);
1574*07dc1947SRichard Lowe 
1575*07dc1947SRichard Lowe int dwarf_pubtype_name_offsets(Dwarf_Type    /*type*/,
1576*07dc1947SRichard Lowe     char   **        /*returned_name*/,
1577*07dc1947SRichard Lowe     Dwarf_Off*       /*die_offset*/,
1578*07dc1947SRichard Lowe     Dwarf_Off*       /*cu_offset*/,
1579*07dc1947SRichard Lowe     Dwarf_Error*     /*error*/);
1580*07dc1947SRichard Lowe 
158149d3bc91SRichard Lowe /* File-scope static variable name operations.  */
158249d3bc91SRichard Lowe int dwarf_get_vars(Dwarf_Debug    /*dbg*/,
158349d3bc91SRichard Lowe     Dwarf_Var**      /*vars*/,
158449d3bc91SRichard Lowe     Dwarf_Signed *   /*number_of_vars*/,
158549d3bc91SRichard Lowe     Dwarf_Error*     /*error*/);
1586*07dc1947SRichard Lowe void dwarf_vars_dealloc(Dwarf_Debug /*dbg*/,
1587*07dc1947SRichard Lowe     Dwarf_Var*       /*vars*/,
1588*07dc1947SRichard Lowe     Dwarf_Signed     /*number_of_vars*/);
1589*07dc1947SRichard Lowe 
159049d3bc91SRichard Lowe 
159149d3bc91SRichard Lowe int dwarf_varname(Dwarf_Var /*var*/,
159249d3bc91SRichard Lowe     char   **        /*returned_name*/,
159349d3bc91SRichard Lowe     Dwarf_Error*     /*error*/);
159449d3bc91SRichard Lowe 
159549d3bc91SRichard Lowe int dwarf_var_die_offset(Dwarf_Var /*var*/,
159649d3bc91SRichard Lowe     Dwarf_Off*       /*return_offset*/,
159749d3bc91SRichard Lowe     Dwarf_Error*     /*error*/);
159849d3bc91SRichard Lowe 
159949d3bc91SRichard Lowe int dwarf_var_cu_offset(Dwarf_Var /*var*/,
160049d3bc91SRichard Lowe     Dwarf_Off*       /*return_offset*/,
160149d3bc91SRichard Lowe     Dwarf_Error*     /*error*/);
160249d3bc91SRichard Lowe 
160349d3bc91SRichard Lowe int dwarf_var_name_offsets(Dwarf_Var /*var*/,
160449d3bc91SRichard Lowe     char   **        /*returned_name*/,
160549d3bc91SRichard Lowe     Dwarf_Off*       /*die_offset*/,
160649d3bc91SRichard Lowe     Dwarf_Off*       /*cu_offset*/,
160749d3bc91SRichard Lowe     Dwarf_Error*     /*error*/);
160849d3bc91SRichard Lowe 
160949d3bc91SRichard Lowe /* weak name operations.  */
161049d3bc91SRichard Lowe int dwarf_get_weaks(Dwarf_Debug    /*dbg*/,
161149d3bc91SRichard Lowe     Dwarf_Weak**     /*weaks*/,
161249d3bc91SRichard Lowe     Dwarf_Signed *   /*number_of_weaks*/,
161349d3bc91SRichard Lowe     Dwarf_Error*     /*error*/);
1614*07dc1947SRichard Lowe void dwarf_weaks_dealloc(Dwarf_Debug /*dbg*/,
1615*07dc1947SRichard Lowe     Dwarf_Weak*      /*weaks*/,
1616*07dc1947SRichard Lowe     Dwarf_Signed     /*number_of_weaks*/);
1617*07dc1947SRichard Lowe 
161849d3bc91SRichard Lowe 
161949d3bc91SRichard Lowe int dwarf_weakname(Dwarf_Weak /*weak*/,
162049d3bc91SRichard Lowe     char   **        /*returned_name*/,
162149d3bc91SRichard Lowe     Dwarf_Error*     /*error*/);
162249d3bc91SRichard Lowe 
162349d3bc91SRichard Lowe int dwarf_weak_die_offset(Dwarf_Weak /*weak*/,
162449d3bc91SRichard Lowe     Dwarf_Off*       /*return_offset*/,
162549d3bc91SRichard Lowe     Dwarf_Error*     /*error*/);
162649d3bc91SRichard Lowe 
162749d3bc91SRichard Lowe int dwarf_weak_cu_offset(Dwarf_Weak /*weak*/,
162849d3bc91SRichard Lowe     Dwarf_Off*       /*return_offset*/,
162949d3bc91SRichard Lowe     Dwarf_Error*     /*error*/);
163049d3bc91SRichard Lowe 
163149d3bc91SRichard Lowe int dwarf_weak_name_offsets(Dwarf_Weak    /*weak*/,
163249d3bc91SRichard Lowe     char   **        /*returned_name*/,
163349d3bc91SRichard Lowe     Dwarf_Off*       /*die_offset*/,
163449d3bc91SRichard Lowe     Dwarf_Off*       /*cu_offset*/,
163549d3bc91SRichard Lowe     Dwarf_Error*     /*error*/);
163649d3bc91SRichard Lowe 
163749d3bc91SRichard Lowe /* location list section operation.  (.debug_loc access) */
163849d3bc91SRichard Lowe int dwarf_get_loclist_entry(Dwarf_Debug /*dbg*/,
163949d3bc91SRichard Lowe     Dwarf_Unsigned   /*offset*/,
164049d3bc91SRichard Lowe     Dwarf_Addr*      /*hipc*/,
164149d3bc91SRichard Lowe     Dwarf_Addr*      /*lopc*/,
164249d3bc91SRichard Lowe     Dwarf_Ptr*       /*data*/,
164349d3bc91SRichard Lowe     Dwarf_Unsigned*  /*entry_len*/,
164449d3bc91SRichard Lowe     Dwarf_Unsigned*  /*next_entry*/,
164549d3bc91SRichard Lowe     Dwarf_Error*     /*error*/);
164649d3bc91SRichard Lowe 
164749d3bc91SRichard Lowe /* abbreviation section operations */
164849d3bc91SRichard Lowe int dwarf_get_abbrev(Dwarf_Debug /*dbg*/,
164949d3bc91SRichard Lowe     Dwarf_Unsigned   /*offset*/,
165049d3bc91SRichard Lowe     Dwarf_Abbrev  *  /*returned_abbrev*/,
165149d3bc91SRichard Lowe     Dwarf_Unsigned*  /*length*/,
165249d3bc91SRichard Lowe     Dwarf_Unsigned*  /*attr_count*/,
165349d3bc91SRichard Lowe     Dwarf_Error*     /*error*/);
165449d3bc91SRichard Lowe 
165549d3bc91SRichard Lowe int dwarf_get_abbrev_tag(Dwarf_Abbrev /*abbrev*/,
165649d3bc91SRichard Lowe     Dwarf_Half*      /*return_tag_number*/,
165749d3bc91SRichard Lowe     Dwarf_Error*     /*error*/);
165849d3bc91SRichard Lowe int dwarf_get_abbrev_code(Dwarf_Abbrev /*abbrev*/,
165949d3bc91SRichard Lowe     Dwarf_Unsigned*  /*return_code_number*/,
166049d3bc91SRichard Lowe     Dwarf_Error*     /*error*/);
166149d3bc91SRichard Lowe 
166249d3bc91SRichard Lowe int dwarf_get_abbrev_children_flag(Dwarf_Abbrev /*abbrev*/,
166349d3bc91SRichard Lowe     Dwarf_Signed*    /*return_flag*/,
166449d3bc91SRichard Lowe     Dwarf_Error*     /*error*/);
166549d3bc91SRichard Lowe 
166649d3bc91SRichard Lowe int dwarf_get_abbrev_entry(Dwarf_Abbrev /*abbrev*/,
166749d3bc91SRichard Lowe     Dwarf_Signed     /*index*/,
166849d3bc91SRichard Lowe     Dwarf_Half  *    /*returned_attr_num*/,
166949d3bc91SRichard Lowe     Dwarf_Signed*    /*form*/,
167049d3bc91SRichard Lowe     Dwarf_Off*       /*offset*/,
167149d3bc91SRichard Lowe     Dwarf_Error*     /*error*/);
167249d3bc91SRichard Lowe 
167349d3bc91SRichard Lowe /* consumer string section operation */
167449d3bc91SRichard Lowe int dwarf_get_str(Dwarf_Debug /*dbg*/,
167549d3bc91SRichard Lowe     Dwarf_Off        /*offset*/,
167649d3bc91SRichard Lowe     char**           /*string*/,
167749d3bc91SRichard Lowe     Dwarf_Signed *   /*strlen_of_string*/,
167849d3bc91SRichard Lowe     Dwarf_Error*     /*error*/);
167949d3bc91SRichard Lowe 
168049d3bc91SRichard Lowe /* Consumer op on  gnu .eh_frame info */
168149d3bc91SRichard Lowe int dwarf_get_fde_list_eh(
168249d3bc91SRichard Lowe     Dwarf_Debug      /*dbg*/,
168349d3bc91SRichard Lowe     Dwarf_Cie**      /*cie_data*/,
168449d3bc91SRichard Lowe     Dwarf_Signed*    /*cie_element_count*/,
168549d3bc91SRichard Lowe     Dwarf_Fde**      /*fde_data*/,
168649d3bc91SRichard Lowe     Dwarf_Signed*    /*fde_element_count*/,
168749d3bc91SRichard Lowe     Dwarf_Error*     /*error*/);
168849d3bc91SRichard Lowe 
168949d3bc91SRichard Lowe 
169049d3bc91SRichard Lowe /* consumer operations on frame info: .debug_frame */
169149d3bc91SRichard Lowe int dwarf_get_fde_list(Dwarf_Debug /*dbg*/,
169249d3bc91SRichard Lowe     Dwarf_Cie**      /*cie_data*/,
169349d3bc91SRichard Lowe     Dwarf_Signed*    /*cie_element_count*/,
169449d3bc91SRichard Lowe     Dwarf_Fde**      /*fde_data*/,
169549d3bc91SRichard Lowe     Dwarf_Signed*    /*fde_element_count*/,
169649d3bc91SRichard Lowe     Dwarf_Error*     /*error*/);
169749d3bc91SRichard Lowe 
1698*07dc1947SRichard Lowe /* Release storage gotten by dwarf_get_fde_list_eh() or
1699*07dc1947SRichard Lowe    dwarf_get_fde_list() */
1700*07dc1947SRichard Lowe void dwarf_fde_cie_list_dealloc(Dwarf_Debug dbg,
1701*07dc1947SRichard Lowe     Dwarf_Cie *cie_data,
1702*07dc1947SRichard Lowe     Dwarf_Signed cie_element_count,
1703*07dc1947SRichard Lowe     Dwarf_Fde *fde_data,
1704*07dc1947SRichard Lowe     Dwarf_Signed fde_element_count);
1705*07dc1947SRichard Lowe 
1706*07dc1947SRichard Lowe 
170749d3bc91SRichard Lowe 
170849d3bc91SRichard Lowe int dwarf_get_fde_range(Dwarf_Fde /*fde*/,
170949d3bc91SRichard Lowe     Dwarf_Addr*      /*low_pc*/,
171049d3bc91SRichard Lowe     Dwarf_Unsigned*  /*func_length*/,
171149d3bc91SRichard Lowe     Dwarf_Ptr*       /*fde_bytes*/,
171249d3bc91SRichard Lowe     Dwarf_Unsigned*  /*fde_byte_length*/,
171349d3bc91SRichard Lowe     Dwarf_Off*       /*cie_offset*/,
171449d3bc91SRichard Lowe     Dwarf_Signed*    /*cie_index*/,
171549d3bc91SRichard Lowe     Dwarf_Off*       /*fde_offset*/,
171649d3bc91SRichard Lowe     Dwarf_Error*     /*error*/);
171749d3bc91SRichard Lowe 
1718*07dc1947SRichard Lowe /*  Useful for IRIX only:  see dwarf_get_cie_augmentation_data()
1719*07dc1947SRichard Lowe        dwarf_get_fde_augmentation_data() for GNU .eh_frame. */
172049d3bc91SRichard Lowe int dwarf_get_fde_exception_info(Dwarf_Fde /*fde*/,
172149d3bc91SRichard Lowe     Dwarf_Signed*    /* offset_into_exception_tables */,
172249d3bc91SRichard Lowe     Dwarf_Error*     /*error*/);
172349d3bc91SRichard Lowe 
1724*07dc1947SRichard Lowe 
172549d3bc91SRichard Lowe int dwarf_get_cie_of_fde(Dwarf_Fde /*fde*/,
172649d3bc91SRichard Lowe     Dwarf_Cie *      /*cie_returned*/,
172749d3bc91SRichard Lowe     Dwarf_Error*     /*error*/);
172849d3bc91SRichard Lowe 
172949d3bc91SRichard Lowe int dwarf_get_cie_info(Dwarf_Cie /*cie*/,
173049d3bc91SRichard Lowe     Dwarf_Unsigned * /*bytes_in_cie*/,
173149d3bc91SRichard Lowe     Dwarf_Small*     /*version*/,
173249d3bc91SRichard Lowe     char        **   /*augmenter*/,
173349d3bc91SRichard Lowe     Dwarf_Unsigned*  /*code_alignment_factor*/,
173449d3bc91SRichard Lowe     Dwarf_Signed*    /*data_alignment_factor*/,
173549d3bc91SRichard Lowe     Dwarf_Half*      /*return_address_register_rule*/,
173649d3bc91SRichard Lowe     Dwarf_Ptr*       /*initial_instructions*/,
173749d3bc91SRichard Lowe     Dwarf_Unsigned*  /*initial_instructions_length*/,
173849d3bc91SRichard Lowe     Dwarf_Error*     /*error*/);
173949d3bc91SRichard Lowe 
1740*07dc1947SRichard Lowe /* dwarf_get_cie_index new September 2009. */
1741*07dc1947SRichard Lowe int dwarf_get_cie_index(
1742*07dc1947SRichard Lowe     Dwarf_Cie /*cie*/,
1743*07dc1947SRichard Lowe     Dwarf_Signed* /*index*/,
1744*07dc1947SRichard Lowe     Dwarf_Error* /*error*/ );
1745*07dc1947SRichard Lowe 
1746*07dc1947SRichard Lowe 
174749d3bc91SRichard Lowe int dwarf_get_fde_instr_bytes(Dwarf_Fde /*fde*/,
174849d3bc91SRichard Lowe     Dwarf_Ptr *      /*outinstrs*/, Dwarf_Unsigned * /*outlen*/,
174949d3bc91SRichard Lowe     Dwarf_Error *    /*error*/);
175049d3bc91SRichard Lowe 
175149d3bc91SRichard Lowe int dwarf_get_fde_info_for_all_regs(Dwarf_Fde /*fde*/,
175249d3bc91SRichard Lowe     Dwarf_Addr       /*pc_requested*/,
175349d3bc91SRichard Lowe     Dwarf_Regtable*  /*reg_table*/,
175449d3bc91SRichard Lowe     Dwarf_Addr*      /*row_pc*/,
175549d3bc91SRichard Lowe     Dwarf_Error*     /*error*/);
175649d3bc91SRichard Lowe 
1757*07dc1947SRichard Lowe int dwarf_get_fde_info_for_all_regs3(Dwarf_Fde /*fde*/,
1758*07dc1947SRichard Lowe     Dwarf_Addr       /*pc_requested*/,
1759*07dc1947SRichard Lowe     Dwarf_Regtable3* /*reg_table*/,
1760*07dc1947SRichard Lowe     Dwarf_Addr*      /*row_pc*/,
1761*07dc1947SRichard Lowe     Dwarf_Error*     /*error*/);
1762*07dc1947SRichard Lowe 
1763*07dc1947SRichard Lowe /* In this older interface DW_FRAME_CFA_COL is a meaningful
1764*07dc1947SRichard Lowe     column (which does not work well with DWARF3 or
1765*07dc1947SRichard Lowe     non-MIPS architectures). */
176649d3bc91SRichard Lowe int dwarf_get_fde_info_for_reg(Dwarf_Fde /*fde*/,
176749d3bc91SRichard Lowe     Dwarf_Half       /*table_column*/,
176849d3bc91SRichard Lowe     Dwarf_Addr       /*pc_requested*/,
176949d3bc91SRichard Lowe     Dwarf_Signed*    /*offset_relevant*/,
177049d3bc91SRichard Lowe     Dwarf_Signed*    /*register*/,
177149d3bc91SRichard Lowe     Dwarf_Signed*    /*offset*/,
177249d3bc91SRichard Lowe     Dwarf_Addr*      /*row_pc*/,
177349d3bc91SRichard Lowe     Dwarf_Error*     /*error*/);
177449d3bc91SRichard Lowe 
1775*07dc1947SRichard Lowe /* See discussion of dw_value_type, libdwarf.h.
1776*07dc1947SRichard Lowe    Use of DW_FRAME_CFA_COL is not meaningful in this interface.
1777*07dc1947SRichard Lowe    See dwarf_get_fde_info_for_cfa_reg3().
1778*07dc1947SRichard Lowe */
1779*07dc1947SRichard Lowe /* dwarf_get_fde_info_for_reg3 is useful on a single column, but
1780*07dc1947SRichard Lowe    it is inefficient to iterate across all table_columns using this
1781*07dc1947SRichard Lowe    function.  Instead call dwarf_get_fde_info_for_all_regs3() and index
1782*07dc1947SRichard Lowe    into the table it fills in. */
1783*07dc1947SRichard Lowe int dwarf_get_fde_info_for_reg3(Dwarf_Fde /*fde*/,
1784*07dc1947SRichard Lowe     Dwarf_Half       /*table_column*/,
1785*07dc1947SRichard Lowe     Dwarf_Addr       /*pc_requested*/,
1786*07dc1947SRichard Lowe     Dwarf_Small  *   /*value_type*/,
1787*07dc1947SRichard Lowe     Dwarf_Signed *   /*offset_relevant*/,
1788*07dc1947SRichard Lowe     Dwarf_Signed*    /*register*/,
1789*07dc1947SRichard Lowe     Dwarf_Signed*    /*offset_or_block_len*/,
1790*07dc1947SRichard Lowe     Dwarf_Ptr   *    /*block_ptr */,
1791*07dc1947SRichard Lowe     Dwarf_Addr*      /*row_pc_out*/,
1792*07dc1947SRichard Lowe     Dwarf_Error*     /*error*/);
1793*07dc1947SRichard Lowe 
1794*07dc1947SRichard Lowe /* Use this to get the cfa. */
1795*07dc1947SRichard Lowe int dwarf_get_fde_info_for_cfa_reg3(Dwarf_Fde /*fde*/,
1796*07dc1947SRichard Lowe     Dwarf_Addr       /*pc_requested*/,
1797*07dc1947SRichard Lowe     Dwarf_Small  *   /*value_type*/,
1798*07dc1947SRichard Lowe     Dwarf_Signed *   /*offset_relevant*/,
1799*07dc1947SRichard Lowe     Dwarf_Signed*    /*register*/,
1800*07dc1947SRichard Lowe     Dwarf_Signed*    /*offset_or_block_len*/,
1801*07dc1947SRichard Lowe     Dwarf_Ptr   *    /*block_ptr */,
1802*07dc1947SRichard Lowe     Dwarf_Addr*      /*row_pc_out*/,
1803*07dc1947SRichard Lowe     Dwarf_Error*     /*error*/);
1804*07dc1947SRichard Lowe 
180549d3bc91SRichard Lowe int dwarf_get_fde_for_die(Dwarf_Debug /*dbg*/,
180649d3bc91SRichard Lowe     Dwarf_Die        /*subr_die */,
180749d3bc91SRichard Lowe     Dwarf_Fde  *     /*returned_fde*/,
180849d3bc91SRichard Lowe     Dwarf_Error*     /*error*/);
180949d3bc91SRichard Lowe 
181049d3bc91SRichard Lowe int dwarf_get_fde_n(Dwarf_Fde* /*fde_data*/,
181149d3bc91SRichard Lowe     Dwarf_Unsigned   /*fde_index*/,
181249d3bc91SRichard Lowe     Dwarf_Fde  *     /*returned_fde*/,
181349d3bc91SRichard Lowe     Dwarf_Error*     /*error*/);
181449d3bc91SRichard Lowe 
181549d3bc91SRichard Lowe int dwarf_get_fde_at_pc(Dwarf_Fde* /*fde_data*/,
181649d3bc91SRichard Lowe     Dwarf_Addr       /*pc_of_interest*/,
181749d3bc91SRichard Lowe     Dwarf_Fde  *     /*returned_fde*/,
181849d3bc91SRichard Lowe     Dwarf_Addr*      /*lopc*/,
181949d3bc91SRichard Lowe     Dwarf_Addr*      /*hipc*/,
182049d3bc91SRichard Lowe     Dwarf_Error*     /*error*/);
182149d3bc91SRichard Lowe 
1822*07dc1947SRichard Lowe /* GNU .eh_frame augmentation information, raw form, see
1823*07dc1947SRichard Lowe    Linux Standard Base Core Specification version 3.0 . */
1824*07dc1947SRichard Lowe int dwarf_get_cie_augmentation_data(Dwarf_Cie /* cie*/,
1825*07dc1947SRichard Lowe     Dwarf_Small **   /* augdata */,
1826*07dc1947SRichard Lowe     Dwarf_Unsigned * /* augdata_len */,
1827*07dc1947SRichard Lowe     Dwarf_Error*     /*error*/);
1828*07dc1947SRichard Lowe /* GNU .eh_frame augmentation information, raw form, see
1829*07dc1947SRichard Lowe    Linux Standard Base Core Specification version 3.0 . */
1830*07dc1947SRichard Lowe int dwarf_get_fde_augmentation_data(Dwarf_Fde /* fde*/,
1831*07dc1947SRichard Lowe     Dwarf_Small **   /* augdata */,
1832*07dc1947SRichard Lowe     Dwarf_Unsigned * /* augdata_len */,
1833*07dc1947SRichard Lowe     Dwarf_Error*     /*error*/);
1834*07dc1947SRichard Lowe 
1835*07dc1947SRichard Lowe int dwarf_expand_frame_instructions(Dwarf_Cie /*cie*/,
183649d3bc91SRichard Lowe     Dwarf_Ptr        /*instruction*/,
183749d3bc91SRichard Lowe     Dwarf_Unsigned   /*i_length*/,
183849d3bc91SRichard Lowe     Dwarf_Frame_Op** /*returned_op_list*/,
183949d3bc91SRichard Lowe     Dwarf_Signed*    /*op_count*/,
184049d3bc91SRichard Lowe     Dwarf_Error*     /*error*/);
184149d3bc91SRichard Lowe 
184249d3bc91SRichard Lowe /* Operations on .debug_aranges. */
184349d3bc91SRichard Lowe int dwarf_get_aranges(Dwarf_Debug /*dbg*/,
184449d3bc91SRichard Lowe     Dwarf_Arange**   /*aranges*/,
184549d3bc91SRichard Lowe     Dwarf_Signed *   /*arange_count*/,
184649d3bc91SRichard Lowe     Dwarf_Error*     /*error*/);
184749d3bc91SRichard Lowe 
184849d3bc91SRichard Lowe 
184949d3bc91SRichard Lowe 
185049d3bc91SRichard Lowe int dwarf_get_arange(
185149d3bc91SRichard Lowe     Dwarf_Arange*    /*aranges*/,
185249d3bc91SRichard Lowe     Dwarf_Unsigned   /*arange_count*/,
185349d3bc91SRichard Lowe     Dwarf_Addr       /*address*/,
185449d3bc91SRichard Lowe     Dwarf_Arange *   /*returned_arange*/,
185549d3bc91SRichard Lowe     Dwarf_Error*     /*error*/);
185649d3bc91SRichard Lowe 
185749d3bc91SRichard Lowe int dwarf_get_cu_die_offset(
185849d3bc91SRichard Lowe     Dwarf_Arange     /*arange*/,
185949d3bc91SRichard Lowe     Dwarf_Off*       /*return_offset*/,
186049d3bc91SRichard Lowe     Dwarf_Error*     /*error*/);
186149d3bc91SRichard Lowe 
186249d3bc91SRichard Lowe int dwarf_get_arange_cu_header_offset(
186349d3bc91SRichard Lowe     Dwarf_Arange     /*arange*/,
186449d3bc91SRichard Lowe     Dwarf_Off*       /*return_cu_header_offset*/,
186549d3bc91SRichard Lowe     Dwarf_Error*     /*error*/);
186649d3bc91SRichard Lowe #ifdef __sgi /* pragma is sgi MIPS only */
186749d3bc91SRichard Lowe #pragma optional dwarf_get_arange_cu_header_offset
186849d3bc91SRichard Lowe #endif
186949d3bc91SRichard Lowe 
1870*07dc1947SRichard Lowe /* DWARF2,3 interface. No longer really adequate (it was never
1871*07dc1947SRichard Lowe    right for segmented address spaces, please switch
1872*07dc1947SRichard Lowe    to using dwarf_get_arange_info_b instead.
1873*07dc1947SRichard Lowe    There is no effective difference between these
1874*07dc1947SRichard Lowe    functions  if the address space
1875*07dc1947SRichard Lowe    of the target is not segmented.  */
187649d3bc91SRichard Lowe int dwarf_get_arange_info(
187749d3bc91SRichard Lowe     Dwarf_Arange     /*arange*/,
187849d3bc91SRichard Lowe     Dwarf_Addr*      /*start*/,
187949d3bc91SRichard Lowe     Dwarf_Unsigned*  /*length*/,
188049d3bc91SRichard Lowe     Dwarf_Off*       /*cu_die_offset*/,
188149d3bc91SRichard Lowe     Dwarf_Error*     /*error*/ );
188249d3bc91SRichard Lowe 
1883*07dc1947SRichard Lowe /* New for DWARF4, entries may have segment information.
1884*07dc1947SRichard Lowe    *segment is only meaningful if *segment_entry_size is non-zero. */
1885*07dc1947SRichard Lowe int dwarf_get_arange_info_b(
1886*07dc1947SRichard Lowe     Dwarf_Arange     /*arange*/,
1887*07dc1947SRichard Lowe     Dwarf_Unsigned*  /*segment*/,
1888*07dc1947SRichard Lowe     Dwarf_Unsigned*  /*segment_entry_size*/,
1889*07dc1947SRichard Lowe     Dwarf_Addr    *  /*start*/,
1890*07dc1947SRichard Lowe     Dwarf_Unsigned*  /*length*/,
1891*07dc1947SRichard Lowe     Dwarf_Off     *  /*cu_die_offset*/,
1892*07dc1947SRichard Lowe     Dwarf_Error   *  /*error*/ );
1893*07dc1947SRichard Lowe 
189449d3bc91SRichard Lowe 
189549d3bc91SRichard Lowe /* consumer .debug_macinfo information interface.
189649d3bc91SRichard Lowe */
189749d3bc91SRichard Lowe struct Dwarf_Macro_Details_s {
189849d3bc91SRichard Lowe     Dwarf_Off    dmd_offset; /* offset, in the section,
189949d3bc91SRichard Lowe                               of this macro info */
190049d3bc91SRichard Lowe     Dwarf_Small  dmd_type;   /* the type, DW_MACINFO_define etc*/
190149d3bc91SRichard Lowe     Dwarf_Signed dmd_lineno; /* the source line number where
190249d3bc91SRichard Lowe                               applicable and vend_def # if
190349d3bc91SRichard Lowe                               vendor_extension op
190449d3bc91SRichard Lowe                              */
190549d3bc91SRichard Lowe 
190649d3bc91SRichard Lowe     Dwarf_Signed dmd_fileindex;/* the source file index:
190749d3bc91SRichard Lowe                               applies to define undef start_file
190849d3bc91SRichard Lowe                                */
190949d3bc91SRichard Lowe     char *       dmd_macro;  /* macro name (with value for defineop)
191049d3bc91SRichard Lowe                               string from vendor ext
191149d3bc91SRichard Lowe                              */
191249d3bc91SRichard Lowe };
191349d3bc91SRichard Lowe 
1914*07dc1947SRichard Lowe /* dwarf_print_lines is for use by dwarfdump: it prints
191549d3bc91SRichard Lowe    line info to stdout.
1916*07dc1947SRichard Lowe    The _dwarf name is obsolete. Use dwarf_ instead.
1917*07dc1947SRichard Lowe    Added extra argnument 2/2009 for better checking.
191849d3bc91SRichard Lowe */
1919*07dc1947SRichard Lowe int _dwarf_print_lines(Dwarf_Die /*cu_die*/,Dwarf_Error * /*error*/);
1920*07dc1947SRichard Lowe int dwarf_print_lines(Dwarf_Die /*cu_die*/,Dwarf_Error * /*error*/,
1921*07dc1947SRichard Lowe    int * /*error_count_out */);
192249d3bc91SRichard Lowe 
1923*07dc1947SRichard Lowe /* dwarf_check_lineheader lets dwarfdump get detailed messages
1924*07dc1947SRichard Lowe    about some compiler errors we detect.
1925*07dc1947SRichard Lowe    We return the count of detected errors throught the
1926*07dc1947SRichard Lowe    pointer.
1927*07dc1947SRichard Lowe */
1928*07dc1947SRichard Lowe void dwarf_check_lineheader(Dwarf_Die /*cu_die*/,int *errcount_out);
1929*07dc1947SRichard Lowe 
1930*07dc1947SRichard Lowe /* dwarf_ld_sort_lines helps SGI IRIX ld
1931*07dc1947SRichard Lowe    rearrange lines in .debug_line in a .o created with a text
193249d3bc91SRichard Lowe    section per function.
193349d3bc91SRichard Lowe         -OPT:procedure_reorder=ON
193449d3bc91SRichard Lowe    where ld-cord (cord(1)ing by ld,
193549d3bc91SRichard Lowe    not by cord(1)) may have changed the function order.
1936*07dc1947SRichard Lowe    The _dwarf name is obsolete. Use dwarf_ instead.
193749d3bc91SRichard Lowe */
193849d3bc91SRichard Lowe int _dwarf_ld_sort_lines(
1939*07dc1947SRichard Lowe     void *         /*orig_buffer*/,
1940*07dc1947SRichard Lowe     unsigned long  /* buffer_len*/,
1941*07dc1947SRichard Lowe     int            /*is_64_bit*/,
1942*07dc1947SRichard Lowe     int *          /*any_change*/,
1943*07dc1947SRichard Lowe     int *          /*err_code*/);
1944*07dc1947SRichard Lowe int dwarf_ld_sort_lines(
1945*07dc1947SRichard Lowe     void *         /*orig_buffer*/,
1946*07dc1947SRichard Lowe     unsigned long  /*buffer_len*/,
1947*07dc1947SRichard Lowe     int            /*is_64_bit*/,
1948*07dc1947SRichard Lowe     int *          /*any_change*/,
1949*07dc1947SRichard Lowe     int *          /*err_code*/);
195049d3bc91SRichard Lowe 
1951*07dc1947SRichard Lowe /* Used by dwarfdump -v to print fde offsets from debugging
1952*07dc1947SRichard Lowe    info.
1953*07dc1947SRichard Lowe    The _dwarf name is obsolete. Use dwarf_ instead.
195449d3bc91SRichard Lowe */
1955*07dc1947SRichard Lowe int _dwarf_fde_section_offset(Dwarf_Debug dbg,
1956*07dc1947SRichard Lowe     Dwarf_Fde         /*in_fde*/,
1957*07dc1947SRichard Lowe     Dwarf_Off *       /*fde_off*/,
1958*07dc1947SRichard Lowe     Dwarf_Off *       /*cie_off*/,
1959*07dc1947SRichard Lowe     Dwarf_Error *     /*err*/);
1960*07dc1947SRichard Lowe int dwarf_fde_section_offset(Dwarf_Debug dbg,
1961*07dc1947SRichard Lowe     Dwarf_Fde         /*in_fde*/,
1962*07dc1947SRichard Lowe     Dwarf_Off *       /*fde_off*/,
1963*07dc1947SRichard Lowe     Dwarf_Off *       /*cie_off*/,
1964*07dc1947SRichard Lowe     Dwarf_Error *     /*err*/);
196549d3bc91SRichard Lowe 
1966*07dc1947SRichard Lowe /* Used by dwarfdump -v to print cie offsets from debugging
1967*07dc1947SRichard Lowe    info.
1968*07dc1947SRichard Lowe    The _dwarf name is obsolete. Use dwarf_ instead.
196949d3bc91SRichard Lowe */
1970*07dc1947SRichard Lowe int dwarf_cie_section_offset(Dwarf_Debug /*dbg*/,
1971*07dc1947SRichard Lowe     Dwarf_Cie     /*in_cie*/,
1972*07dc1947SRichard Lowe     Dwarf_Off *   /*cie_off */,
1973*07dc1947SRichard Lowe     Dwarf_Error * /*err*/);
1974*07dc1947SRichard Lowe int _dwarf_cie_section_offset(Dwarf_Debug /*dbg*/,
1975*07dc1947SRichard Lowe     Dwarf_Cie     /*in_cie*/,
1976*07dc1947SRichard Lowe     Dwarf_Off *   /*cie_off*/,
1977*07dc1947SRichard Lowe     Dwarf_Error * /*err*/);
197849d3bc91SRichard Lowe 
197949d3bc91SRichard Lowe typedef struct Dwarf_Macro_Details_s Dwarf_Macro_Details;
198049d3bc91SRichard Lowe 
198149d3bc91SRichard Lowe int dwarf_get_macro(Dwarf_Debug /*dbg*/,
198249d3bc91SRichard Lowe     char *        /*requested_macro_name*/,
198349d3bc91SRichard Lowe     Dwarf_Addr    /*pc_of_request*/,
198449d3bc91SRichard Lowe     char **       /*returned_macro_value*/,
198549d3bc91SRichard Lowe     Dwarf_Error * /*error*/);
198649d3bc91SRichard Lowe 
198749d3bc91SRichard Lowe int dwarf_get_all_defined_macros(Dwarf_Debug /*dbg*/,
198849d3bc91SRichard Lowe     Dwarf_Addr     /*pc_of_request*/,
198949d3bc91SRichard Lowe     Dwarf_Signed * /*returned_count*/,
199049d3bc91SRichard Lowe     char ***       /*returned_pointers_to_macros*/,
199149d3bc91SRichard Lowe     Dwarf_Error *  /*error*/);
199249d3bc91SRichard Lowe 
199349d3bc91SRichard Lowe char *dwarf_find_macro_value_start(char * /*macro_string*/);
199449d3bc91SRichard Lowe 
199549d3bc91SRichard Lowe int dwarf_get_macro_details(Dwarf_Debug /*dbg*/,
199649d3bc91SRichard Lowe     Dwarf_Off            /*macro_offset*/,
199749d3bc91SRichard Lowe     Dwarf_Unsigned       /*maximum_count*/,
199849d3bc91SRichard Lowe     Dwarf_Signed         * /*entry_count*/,
199949d3bc91SRichard Lowe     Dwarf_Macro_Details ** /*details*/,
200049d3bc91SRichard Lowe     Dwarf_Error *        /*err*/);
200149d3bc91SRichard Lowe 
200249d3bc91SRichard Lowe 
200349d3bc91SRichard Lowe int dwarf_get_address_size(Dwarf_Debug /*dbg*/,
200449d3bc91SRichard Lowe     Dwarf_Half  *    /*addr_size*/,
200549d3bc91SRichard Lowe     Dwarf_Error *    /*error*/);
2006*07dc1947SRichard Lowe int dwarf_get_die_address_size(Dwarf_Die /*die*/,
2007*07dc1947SRichard Lowe     Dwarf_Half  *    /*addr_size*/,
2008*07dc1947SRichard Lowe     Dwarf_Error *    /*error*/);
2009*07dc1947SRichard Lowe 
2010*07dc1947SRichard Lowe /* The dwarf specification separates FORMs into
2011*07dc1947SRichard Lowe different classes.  To do the seperation properly
2012*07dc1947SRichard Lowe requires 4 pieces of data as of DWARF4 (thus the
2013*07dc1947SRichard Lowe function arguments listed here).
2014*07dc1947SRichard Lowe The DWARF4 specification class definition suffices to
2015*07dc1947SRichard Lowe describe all DWARF versions.
2016*07dc1947SRichard Lowe See section 7.5.4, Attribute Encodings.
2017*07dc1947SRichard Lowe A return of DW_FORM_CLASS_UNKNOWN means we could not properly figure
2018*07dc1947SRichard Lowe out what form-class it is.
2019*07dc1947SRichard Lowe 
2020*07dc1947SRichard Lowe     DW_FORM_CLASS_FRAMEPTR is MIPS/IRIX only, and refers
2021*07dc1947SRichard Lowe     to the DW_AT_MIPS_fde attribute (a reference to the
2022*07dc1947SRichard Lowe     .debug_frame section).
2023*07dc1947SRichard Lowe */
2024*07dc1947SRichard Lowe enum Dwarf_Form_Class {
2025*07dc1947SRichard Lowe     DW_FORM_CLASS_UNKNOWN,   DW_FORM_CLASS_ADDRESS,
2026*07dc1947SRichard Lowe     DW_FORM_CLASS_BLOCK,     DW_FORM_CLASS_CONSTANT,
2027*07dc1947SRichard Lowe     DW_FORM_CLASS_EXPRLOC,   DW_FORM_CLASS_FLAG,
2028*07dc1947SRichard Lowe     DW_FORM_CLASS_LINEPTR,   DW_FORM_CLASS_LOCLISTPTR,
2029*07dc1947SRichard Lowe     DW_FORM_CLASS_MACPTR,    DW_FORM_CLASS_RANGELISTPTR,
2030*07dc1947SRichard Lowe     DW_FORM_CLASS_REFERENCE, DW_FORM_CLASS_STRING,
2031*07dc1947SRichard Lowe     DW_FORM_CLASS_FRAMEPTR
2032*07dc1947SRichard Lowe };
2033*07dc1947SRichard Lowe 
2034*07dc1947SRichard Lowe enum Dwarf_Form_Class dwarf_get_form_class(
2035*07dc1947SRichard Lowe     Dwarf_Half /* dwversion */,
2036*07dc1947SRichard Lowe     Dwarf_Half /* attrnum */,
2037*07dc1947SRichard Lowe     Dwarf_Half /*offset_size */,
2038*07dc1947SRichard Lowe     Dwarf_Half /*form*/);
203949d3bc91SRichard Lowe 
204049d3bc91SRichard Lowe /* utility operations */
204149d3bc91SRichard Lowe Dwarf_Unsigned dwarf_errno(Dwarf_Error     /*error*/);
204249d3bc91SRichard Lowe 
204349d3bc91SRichard Lowe char* dwarf_errmsg(Dwarf_Error    /*error*/);
204449d3bc91SRichard Lowe 
204549d3bc91SRichard Lowe /* stringcheck zero is default and means do all
204649d3bc91SRichard Lowe ** string length validity checks.
204749d3bc91SRichard Lowe ** Call with parameter value 1 to turn off many such checks (and
204849d3bc91SRichard Lowe ** increase performance).
204949d3bc91SRichard Lowe ** Call with zero for safest running.
205049d3bc91SRichard Lowe ** Actual value saved and returned is only 8 bits! Upper bits
205149d3bc91SRichard Lowe ** ignored by libdwarf (and zero on return).
205249d3bc91SRichard Lowe ** Returns previous value.
205349d3bc91SRichard Lowe */
205449d3bc91SRichard Lowe int dwarf_set_stringcheck(int /*stringcheck*/);
205549d3bc91SRichard Lowe 
2056*07dc1947SRichard Lowe /* 'apply' defaults to 1 and means do all
2057*07dc1947SRichard Lowe  * 'rela' relocations on reading in a dwarf object section with
2058*07dc1947SRichard Lowe  * such relocations.
2059*07dc1947SRichard Lowe  * Call with parameter value 0 to turn off application of
2060*07dc1947SRichard Lowe  * such relocations.
2061*07dc1947SRichard Lowe  * Since the static linker leaves 'bogus' data in object sections
2062*07dc1947SRichard Lowe  * with a 'rela' relocation section such data cannot be read
2063*07dc1947SRichard Lowe  * sensibly without processing the relocations.  Such relocations
2064*07dc1947SRichard Lowe  * do not exist in executables and shared objects (.so), the
2065*07dc1947SRichard Lowe  * relocations only exist in plain .o relocatable object files.
2066*07dc1947SRichard Lowe  * Actual value saved and returned is only 8 bits! Upper bits
2067*07dc1947SRichard Lowe  * ignored by libdwarf (and zero on return).
2068*07dc1947SRichard Lowe  * Returns previous value.
2069*07dc1947SRichard Lowe  * */
2070*07dc1947SRichard Lowe int dwarf_set_reloc_application(int /*apply*/);
2071*07dc1947SRichard Lowe 
2072*07dc1947SRichard Lowe 
207349d3bc91SRichard Lowe /* Unimplemented */
207449d3bc91SRichard Lowe Dwarf_Handler dwarf_seterrhand(Dwarf_Debug /*dbg*/, Dwarf_Handler /*errhand*/);
207549d3bc91SRichard Lowe 
207649d3bc91SRichard Lowe /* Unimplemented */
207749d3bc91SRichard Lowe Dwarf_Ptr dwarf_seterrarg(Dwarf_Debug /*dbg*/, Dwarf_Ptr /*errarg*/);
207849d3bc91SRichard Lowe 
207949d3bc91SRichard Lowe void dwarf_dealloc(Dwarf_Debug /*dbg*/, void* /*space*/,
208049d3bc91SRichard Lowe     Dwarf_Unsigned /*type*/);
208149d3bc91SRichard Lowe 
208249d3bc91SRichard Lowe /* DWARF Producer Interface */
208349d3bc91SRichard Lowe 
208449d3bc91SRichard Lowe typedef int (*Dwarf_Callback_Func)(
208549d3bc91SRichard Lowe     char*           /*name*/,
208649d3bc91SRichard Lowe     int             /*size*/,
208749d3bc91SRichard Lowe     Dwarf_Unsigned  /*type*/,
208849d3bc91SRichard Lowe     Dwarf_Unsigned  /*flags*/,
208949d3bc91SRichard Lowe     Dwarf_Unsigned  /*link*/,
209049d3bc91SRichard Lowe     Dwarf_Unsigned  /*info*/,
209149d3bc91SRichard Lowe     int*            /*sect name index*/,
209249d3bc91SRichard Lowe     int*            /*error*/);
209349d3bc91SRichard Lowe 
209449d3bc91SRichard Lowe Dwarf_P_Debug dwarf_producer_init(
209549d3bc91SRichard Lowe     Dwarf_Unsigned  /*creation_flags*/,
209649d3bc91SRichard Lowe     Dwarf_Callback_Func    /*func*/,
209749d3bc91SRichard Lowe     Dwarf_Handler   /*errhand*/,
209849d3bc91SRichard Lowe     Dwarf_Ptr       /*errarg*/,
209949d3bc91SRichard Lowe     Dwarf_Error*    /*error*/);
210049d3bc91SRichard Lowe 
210149d3bc91SRichard Lowe typedef int (*Dwarf_Callback_Func_b)(
210249d3bc91SRichard Lowe     char*           /*name*/,
210349d3bc91SRichard Lowe     int             /*size*/,
210449d3bc91SRichard Lowe     Dwarf_Unsigned  /*type*/,
210549d3bc91SRichard Lowe     Dwarf_Unsigned  /*flags*/,
210649d3bc91SRichard Lowe     Dwarf_Unsigned  /*link*/,
210749d3bc91SRichard Lowe     Dwarf_Unsigned  /*info*/,
210849d3bc91SRichard Lowe     Dwarf_Unsigned* /*sect_name_index*/,
210949d3bc91SRichard Lowe     int*            /*error*/);
211049d3bc91SRichard Lowe 
211149d3bc91SRichard Lowe 
211249d3bc91SRichard Lowe Dwarf_P_Debug dwarf_producer_init_b(
211349d3bc91SRichard Lowe     Dwarf_Unsigned        /*flags*/,
211449d3bc91SRichard Lowe     Dwarf_Callback_Func_b /*func*/,
211549d3bc91SRichard Lowe     Dwarf_Handler         /*errhand*/,
211649d3bc91SRichard Lowe     Dwarf_Ptr             /*errarg*/,
211749d3bc91SRichard Lowe     Dwarf_Error *         /*error*/);
211849d3bc91SRichard Lowe 
211949d3bc91SRichard Lowe 
212049d3bc91SRichard Lowe Dwarf_Signed dwarf_transform_to_disk_form(Dwarf_P_Debug /*dbg*/,
212149d3bc91SRichard Lowe     Dwarf_Error*     /*error*/);
212249d3bc91SRichard Lowe 
212349d3bc91SRichard Lowe Dwarf_Ptr dwarf_get_section_bytes(Dwarf_P_Debug /*dbg*/,
212449d3bc91SRichard Lowe     Dwarf_Signed     /*dwarf_section*/,
212549d3bc91SRichard Lowe     Dwarf_Signed*    /*elf_section_index*/,
212649d3bc91SRichard Lowe     Dwarf_Unsigned*  /*length*/,
212749d3bc91SRichard Lowe     Dwarf_Error*     /*error*/);
212849d3bc91SRichard Lowe 
212949d3bc91SRichard Lowe int  dwarf_get_relocation_info_count(
213049d3bc91SRichard Lowe     Dwarf_P_Debug    /*dbg*/,
213149d3bc91SRichard Lowe     Dwarf_Unsigned * /*count_of_relocation_sections*/,
213249d3bc91SRichard Lowe     int *                /*drd_buffer_version*/,
213349d3bc91SRichard Lowe     Dwarf_Error*     /*error*/);
213449d3bc91SRichard Lowe 
213549d3bc91SRichard Lowe int dwarf_get_relocation_info(
213649d3bc91SRichard Lowe     Dwarf_P_Debug           /*dbg*/,
213749d3bc91SRichard Lowe     Dwarf_Signed          * /*elf_section_index*/,
213849d3bc91SRichard Lowe     Dwarf_Signed          * /*elf_section_index_link*/,
213949d3bc91SRichard Lowe     Dwarf_Unsigned        * /*relocation_buffer_count*/,
214049d3bc91SRichard Lowe     Dwarf_Relocation_Data * /*reldata_buffer*/,
214149d3bc91SRichard Lowe     Dwarf_Error*            /*error*/);
214249d3bc91SRichard Lowe 
214349d3bc91SRichard Lowe /* v1:  no drd_length field, enum explicit */
214449d3bc91SRichard Lowe /* v2:  has the drd_length field, enum value in uchar member */
214549d3bc91SRichard Lowe #define DWARF_DRD_BUFFER_VERSION 2
214649d3bc91SRichard Lowe 
2147*07dc1947SRichard Lowe /* Markers are not written  to DWARF2/3/4, they are user
2148*07dc1947SRichard Lowe    defined and may be used for any purpose.
2149*07dc1947SRichard Lowe */
2150*07dc1947SRichard Lowe Dwarf_Signed dwarf_get_die_markers(
2151*07dc1947SRichard Lowe     Dwarf_P_Debug     /*dbg*/,
2152*07dc1947SRichard Lowe     Dwarf_P_Marker *  /*marker_list*/,
2153*07dc1947SRichard Lowe     Dwarf_Unsigned *  /*marker_count*/,
2154*07dc1947SRichard Lowe     Dwarf_Error *     /*error*/);
2155*07dc1947SRichard Lowe 
2156*07dc1947SRichard Lowe int dwarf_get_string_attributes_count(Dwarf_P_Debug,
2157*07dc1947SRichard Lowe     Dwarf_Unsigned *,
2158*07dc1947SRichard Lowe     int *,
2159*07dc1947SRichard Lowe     Dwarf_Error *);
2160*07dc1947SRichard Lowe 
2161*07dc1947SRichard Lowe int dwarf_get_string_attributes_info(Dwarf_P_Debug,
2162*07dc1947SRichard Lowe     Dwarf_Signed *,
2163*07dc1947SRichard Lowe     Dwarf_Unsigned *,
2164*07dc1947SRichard Lowe     Dwarf_P_String_Attr *,
2165*07dc1947SRichard Lowe     Dwarf_Error *);
2166*07dc1947SRichard Lowe 
216749d3bc91SRichard Lowe void dwarf_reset_section_bytes(Dwarf_P_Debug /*dbg*/);
216849d3bc91SRichard Lowe 
216949d3bc91SRichard Lowe Dwarf_Unsigned dwarf_producer_finish(Dwarf_P_Debug /*dbg*/,
217049d3bc91SRichard Lowe     Dwarf_Error* /*error*/);
217149d3bc91SRichard Lowe 
217249d3bc91SRichard Lowe /* Producer attribute addition functions. */
217349d3bc91SRichard Lowe Dwarf_P_Attribute dwarf_add_AT_targ_address(Dwarf_P_Debug /*dbg*/,
217449d3bc91SRichard Lowe     Dwarf_P_Die     /*ownerdie*/,
217549d3bc91SRichard Lowe     Dwarf_Half      /*attr*/,
217649d3bc91SRichard Lowe     Dwarf_Unsigned  /*pc_value*/,
217749d3bc91SRichard Lowe     Dwarf_Signed    /*sym_index*/,
217849d3bc91SRichard Lowe     Dwarf_Error*    /*error*/);
217949d3bc91SRichard Lowe 
2180*07dc1947SRichard Lowe Dwarf_P_Attribute dwarf_add_AT_block(Dwarf_P_Debug /*dbg*/,
2181*07dc1947SRichard Lowe     Dwarf_P_Die     /*ownerdie*/,
2182*07dc1947SRichard Lowe     Dwarf_Half      /*attr*/,
2183*07dc1947SRichard Lowe     Dwarf_Small*    /*block_data*/,
2184*07dc1947SRichard Lowe     Dwarf_Unsigned  /*block_len*/,
2185*07dc1947SRichard Lowe     Dwarf_Error*    /*error*/);
2186*07dc1947SRichard Lowe 
218749d3bc91SRichard Lowe Dwarf_P_Attribute dwarf_add_AT_targ_address_b(Dwarf_P_Debug /*dbg*/,
218849d3bc91SRichard Lowe     Dwarf_P_Die     /*ownerdie*/,
218949d3bc91SRichard Lowe     Dwarf_Half      /*attr*/,
219049d3bc91SRichard Lowe     Dwarf_Unsigned  /*pc_value*/,
219149d3bc91SRichard Lowe     Dwarf_Unsigned  /*sym_index*/,
219249d3bc91SRichard Lowe     Dwarf_Error*    /*error*/);
219349d3bc91SRichard Lowe 
2194*07dc1947SRichard Lowe Dwarf_P_Attribute dwarf_add_AT_ref_address(Dwarf_P_Debug /*dbg*/,
2195*07dc1947SRichard Lowe     Dwarf_P_Die     /*ownerdie*/,
2196*07dc1947SRichard Lowe     Dwarf_Half      /*attr*/,
2197*07dc1947SRichard Lowe     Dwarf_Unsigned  /*pc_value*/,
2198*07dc1947SRichard Lowe     Dwarf_Unsigned  /*sym_index*/,
2199*07dc1947SRichard Lowe     Dwarf_Error*    /*error*/);
2200*07dc1947SRichard Lowe 
220149d3bc91SRichard Lowe Dwarf_P_Attribute dwarf_add_AT_unsigned_const(Dwarf_P_Debug /*dbg*/,
220249d3bc91SRichard Lowe     Dwarf_P_Die     /*ownerdie*/,
220349d3bc91SRichard Lowe     Dwarf_Half      /*attr*/,
220449d3bc91SRichard Lowe     Dwarf_Unsigned  /*value*/,
220549d3bc91SRichard Lowe     Dwarf_Error*    /*error*/);
220649d3bc91SRichard Lowe 
220749d3bc91SRichard Lowe Dwarf_P_Attribute dwarf_add_AT_signed_const(Dwarf_P_Debug /*dbg*/,
220849d3bc91SRichard Lowe     Dwarf_P_Die     /*ownerdie*/,
220949d3bc91SRichard Lowe     Dwarf_Half      /*attr*/,
221049d3bc91SRichard Lowe     Dwarf_Signed    /*value*/,
221149d3bc91SRichard Lowe     Dwarf_Error*    /*error*/);
221249d3bc91SRichard Lowe 
221349d3bc91SRichard Lowe Dwarf_P_Attribute dwarf_add_AT_reference(Dwarf_P_Debug /*dbg*/,
221449d3bc91SRichard Lowe     Dwarf_P_Die     /*ownerdie*/,
221549d3bc91SRichard Lowe     Dwarf_Half      /*attr*/,
221649d3bc91SRichard Lowe     Dwarf_P_Die     /*otherdie*/,
221749d3bc91SRichard Lowe     Dwarf_Error*    /*error*/);
221849d3bc91SRichard Lowe 
2219*07dc1947SRichard Lowe Dwarf_P_Attribute dwarf_add_AT_dataref(
2220*07dc1947SRichard Lowe     Dwarf_P_Debug   /* dbg*/,
2221*07dc1947SRichard Lowe     Dwarf_P_Die     /*ownerdie*/,
2222*07dc1947SRichard Lowe     Dwarf_Half      /*attr*/,
2223*07dc1947SRichard Lowe     Dwarf_Unsigned  /*pcvalue*/,
2224*07dc1947SRichard Lowe     Dwarf_Unsigned  /*sym_index*/,
2225*07dc1947SRichard Lowe     Dwarf_Error*    /*error*/);
2226*07dc1947SRichard Lowe 
222749d3bc91SRichard Lowe Dwarf_P_Attribute dwarf_add_AT_const_value_string(Dwarf_P_Die /*ownerdie*/,
222849d3bc91SRichard Lowe     char*           /*string_value*/,
222949d3bc91SRichard Lowe     Dwarf_Error*    /*error*/);
223049d3bc91SRichard Lowe 
223149d3bc91SRichard Lowe Dwarf_P_Attribute dwarf_add_AT_location_expr(Dwarf_P_Debug /*dbg*/,
223249d3bc91SRichard Lowe     Dwarf_P_Die     /*ownerdie*/,
223349d3bc91SRichard Lowe     Dwarf_Half      /*attr*/,
223449d3bc91SRichard Lowe     Dwarf_P_Expr    /*loc_expr*/,
223549d3bc91SRichard Lowe     Dwarf_Error*    /*error*/);
223649d3bc91SRichard Lowe 
223749d3bc91SRichard Lowe Dwarf_P_Attribute dwarf_add_AT_string(Dwarf_P_Debug /*dbg*/,
223849d3bc91SRichard Lowe     Dwarf_P_Die     /*ownerdie*/,
223949d3bc91SRichard Lowe     Dwarf_Half      /*attr*/,
224049d3bc91SRichard Lowe     char*           /*string*/,
224149d3bc91SRichard Lowe     Dwarf_Error*     /*error*/);
224249d3bc91SRichard Lowe 
224349d3bc91SRichard Lowe Dwarf_P_Attribute dwarf_add_AT_flag(Dwarf_P_Debug /*dbg*/,
224449d3bc91SRichard Lowe     Dwarf_P_Die     /*ownerdie*/,
224549d3bc91SRichard Lowe     Dwarf_Half      /*attr*/,
224649d3bc91SRichard Lowe     Dwarf_Small     /*flag*/,
224749d3bc91SRichard Lowe     Dwarf_Error*    /*error*/);
224849d3bc91SRichard Lowe 
224949d3bc91SRichard Lowe Dwarf_P_Attribute dwarf_add_AT_producer(Dwarf_P_Die /*ownerdie*/,
225049d3bc91SRichard Lowe     char*           /*producer_string*/,
225149d3bc91SRichard Lowe     Dwarf_Error*    /*error*/);
225249d3bc91SRichard Lowe 
225349d3bc91SRichard Lowe Dwarf_P_Attribute dwarf_add_AT_const_value_signedint(Dwarf_P_Die /*ownerdie*/,
225449d3bc91SRichard Lowe     Dwarf_Signed    /*signed_value*/,
225549d3bc91SRichard Lowe     Dwarf_Error*    /*error*/);
225649d3bc91SRichard Lowe 
225749d3bc91SRichard Lowe Dwarf_P_Attribute dwarf_add_AT_const_value_unsignedint(
225849d3bc91SRichard Lowe     Dwarf_P_Die     /*ownerdie*/,
225949d3bc91SRichard Lowe     Dwarf_Unsigned  /*unsigned_value*/,
226049d3bc91SRichard Lowe     Dwarf_Error*    /*error*/);
226149d3bc91SRichard Lowe 
226249d3bc91SRichard Lowe Dwarf_P_Attribute dwarf_add_AT_comp_dir(Dwarf_P_Die /*ownerdie*/,
226349d3bc91SRichard Lowe     char*           /*current_working_directory*/,
226449d3bc91SRichard Lowe     Dwarf_Error*    /*error*/);
226549d3bc91SRichard Lowe 
226649d3bc91SRichard Lowe Dwarf_P_Attribute dwarf_add_AT_name(Dwarf_P_Die    /*die*/,
226749d3bc91SRichard Lowe     char*           /*name*/,
226849d3bc91SRichard Lowe     Dwarf_Error*    /*error*/);
226949d3bc91SRichard Lowe 
227049d3bc91SRichard Lowe /* Producer line creation functions (.debug_line) */
227149d3bc91SRichard Lowe Dwarf_Unsigned dwarf_add_directory_decl(Dwarf_P_Debug /*dbg*/,
227249d3bc91SRichard Lowe     char*           /*name*/,
227349d3bc91SRichard Lowe     Dwarf_Error*    /*error*/);
227449d3bc91SRichard Lowe 
227549d3bc91SRichard Lowe Dwarf_Unsigned dwarf_add_file_decl(Dwarf_P_Debug /*dbg*/,
227649d3bc91SRichard Lowe     char*           /*name*/,
227749d3bc91SRichard Lowe     Dwarf_Unsigned  /*dir_index*/,
227849d3bc91SRichard Lowe     Dwarf_Unsigned  /*time_last_modified*/,
227949d3bc91SRichard Lowe     Dwarf_Unsigned  /*length*/,
228049d3bc91SRichard Lowe     Dwarf_Error*    /*error*/);
228149d3bc91SRichard Lowe 
228249d3bc91SRichard Lowe Dwarf_Unsigned dwarf_add_line_entry(Dwarf_P_Debug /*dbg*/,
228349d3bc91SRichard Lowe     Dwarf_Unsigned  /*file_index*/,
228449d3bc91SRichard Lowe     Dwarf_Addr      /*code_address*/,
228549d3bc91SRichard Lowe     Dwarf_Unsigned  /*lineno*/,
228649d3bc91SRichard Lowe     Dwarf_Signed    /*column_number*/,
228749d3bc91SRichard Lowe     Dwarf_Bool      /*is_source_stmt_begin*/,
228849d3bc91SRichard Lowe     Dwarf_Bool      /*is_basic_block_begin*/,
228949d3bc91SRichard Lowe     Dwarf_Error*    /*error*/);
229049d3bc91SRichard Lowe 
229149d3bc91SRichard Lowe Dwarf_Unsigned dwarf_lne_set_address(Dwarf_P_Debug /*dbg*/,
229249d3bc91SRichard Lowe     Dwarf_Unsigned  /*offset*/,
229349d3bc91SRichard Lowe     Dwarf_Unsigned  /*symbol_index*/,
229449d3bc91SRichard Lowe     Dwarf_Error*    /*error*/);
229549d3bc91SRichard Lowe 
229649d3bc91SRichard Lowe Dwarf_Unsigned dwarf_lne_end_sequence(Dwarf_P_Debug /*dbg*/,
229749d3bc91SRichard Lowe     Dwarf_Addr      /*end_address*/,
229849d3bc91SRichard Lowe     Dwarf_Error*    /*error*/);
229949d3bc91SRichard Lowe 
230049d3bc91SRichard Lowe /* Producer .debug_frame functions */
230149d3bc91SRichard Lowe Dwarf_Unsigned dwarf_add_frame_cie(Dwarf_P_Debug /*dbg*/,
230249d3bc91SRichard Lowe     char*           /*augmenter*/,
230349d3bc91SRichard Lowe     Dwarf_Small     /*code_alignent_factor*/,
230449d3bc91SRichard Lowe     Dwarf_Small     /*data_alignment_factor*/,
230549d3bc91SRichard Lowe     Dwarf_Small     /*return_address_reg*/,
230649d3bc91SRichard Lowe     Dwarf_Ptr       /*initialization_bytes*/,
230749d3bc91SRichard Lowe     Dwarf_Unsigned  /*init_byte_len*/,
230849d3bc91SRichard Lowe     Dwarf_Error*    /*error*/);
230949d3bc91SRichard Lowe 
231049d3bc91SRichard Lowe Dwarf_Unsigned dwarf_add_frame_fde(
231149d3bc91SRichard Lowe     Dwarf_P_Debug   /*dbg*/,
231249d3bc91SRichard Lowe     Dwarf_P_Fde     /*fde*/,
231349d3bc91SRichard Lowe     Dwarf_P_Die     /*corresponding subprogram die*/,
231449d3bc91SRichard Lowe     Dwarf_Unsigned  /*cie_to_use*/,
231549d3bc91SRichard Lowe     Dwarf_Unsigned  /*virt_addr_of_described_code*/,
231649d3bc91SRichard Lowe     Dwarf_Unsigned  /*length_of_code*/,
231749d3bc91SRichard Lowe     Dwarf_Unsigned  /*symbol_index*/,
231849d3bc91SRichard Lowe     Dwarf_Error*    /*error*/);
231949d3bc91SRichard Lowe 
232049d3bc91SRichard Lowe Dwarf_Unsigned dwarf_add_frame_fde_b(
232149d3bc91SRichard Lowe     Dwarf_P_Debug  /*dbg*/,
232249d3bc91SRichard Lowe     Dwarf_P_Fde    /*fde*/,
232349d3bc91SRichard Lowe     Dwarf_P_Die    /*die*/,
232449d3bc91SRichard Lowe     Dwarf_Unsigned /*cie*/,
232549d3bc91SRichard Lowe     Dwarf_Addr     /*virt_addr*/,
232649d3bc91SRichard Lowe     Dwarf_Unsigned /*code_len*/,
232749d3bc91SRichard Lowe     Dwarf_Unsigned /*sym_idx*/,
232849d3bc91SRichard Lowe     Dwarf_Unsigned /*sym_idx_of_end*/,
232949d3bc91SRichard Lowe     Dwarf_Addr     /*offset_from_end_sym*/,
233049d3bc91SRichard Lowe     Dwarf_Error*   /*error*/);
233149d3bc91SRichard Lowe 
233249d3bc91SRichard Lowe Dwarf_Unsigned dwarf_add_frame_info_b(
233349d3bc91SRichard Lowe     Dwarf_P_Debug dbg   /*dbg*/,
233449d3bc91SRichard Lowe     Dwarf_P_Fde     /*fde*/,
233549d3bc91SRichard Lowe     Dwarf_P_Die     /*die*/,
233649d3bc91SRichard Lowe     Dwarf_Unsigned  /*cie*/,
233749d3bc91SRichard Lowe     Dwarf_Addr      /*virt_addr*/,
233849d3bc91SRichard Lowe     Dwarf_Unsigned  /*code_len*/,
233949d3bc91SRichard Lowe     Dwarf_Unsigned  /*symidx*/,
234049d3bc91SRichard Lowe     Dwarf_Unsigned  /*end_symbol */,
234149d3bc91SRichard Lowe     Dwarf_Addr      /*offset_from_end_symbol */,
234249d3bc91SRichard Lowe     Dwarf_Signed    /*offset_into_exception_tables*/,
234349d3bc91SRichard Lowe     Dwarf_Unsigned  /*exception_table_symbol*/,
234449d3bc91SRichard Lowe     Dwarf_Error*    /*error*/);
234549d3bc91SRichard Lowe 
234649d3bc91SRichard Lowe Dwarf_Unsigned dwarf_add_frame_info(
234749d3bc91SRichard Lowe     Dwarf_P_Debug dbg   /*dbg*/,
234849d3bc91SRichard Lowe     Dwarf_P_Fde     /*fde*/,
234949d3bc91SRichard Lowe     Dwarf_P_Die     /*die*/,
235049d3bc91SRichard Lowe     Dwarf_Unsigned  /*cie*/,
235149d3bc91SRichard Lowe     Dwarf_Addr      /*virt_addr*/,
235249d3bc91SRichard Lowe     Dwarf_Unsigned  /*code_len*/,
235349d3bc91SRichard Lowe     Dwarf_Unsigned  /*symidx*/,
235449d3bc91SRichard Lowe     Dwarf_Signed    /*offset_into_exception_tables*/,
235549d3bc91SRichard Lowe     Dwarf_Unsigned  /*exception_table_symbol*/,
235649d3bc91SRichard Lowe     Dwarf_Error*    /*error*/);
235749d3bc91SRichard Lowe 
235849d3bc91SRichard Lowe Dwarf_P_Fde dwarf_add_fde_inst(
235949d3bc91SRichard Lowe     Dwarf_P_Fde     /*fde*/,
236049d3bc91SRichard Lowe     Dwarf_Small     /*op*/,
236149d3bc91SRichard Lowe     Dwarf_Unsigned  /*val1*/,
236249d3bc91SRichard Lowe     Dwarf_Unsigned  /*val2*/,
236349d3bc91SRichard Lowe     Dwarf_Error*    /*error*/);
236449d3bc91SRichard Lowe 
2365*07dc1947SRichard Lowe /* New September 17, 2009 */
2366*07dc1947SRichard Lowe int dwarf_insert_fde_inst_bytes(
2367*07dc1947SRichard Lowe     Dwarf_P_Debug  /*dbg*/,
2368*07dc1947SRichard Lowe     Dwarf_P_Fde    /*fde*/,
2369*07dc1947SRichard Lowe     Dwarf_Unsigned /*len*/,
2370*07dc1947SRichard Lowe     Dwarf_Ptr      /*ibytes*/,
2371*07dc1947SRichard Lowe     Dwarf_Error*   /*error*/);
2372*07dc1947SRichard Lowe 
2373*07dc1947SRichard Lowe 
237449d3bc91SRichard Lowe Dwarf_P_Fde dwarf_new_fde(Dwarf_P_Debug    /*dbg*/, Dwarf_Error* /*error*/);
237549d3bc91SRichard Lowe 
237649d3bc91SRichard Lowe Dwarf_P_Fde dwarf_fde_cfa_offset(
237749d3bc91SRichard Lowe     Dwarf_P_Fde     /*fde*/,
237849d3bc91SRichard Lowe     Dwarf_Unsigned  /*register_number*/,
237949d3bc91SRichard Lowe     Dwarf_Signed    /*offset*/,
238049d3bc91SRichard Lowe     Dwarf_Error*    /*error*/);
238149d3bc91SRichard Lowe 
238249d3bc91SRichard Lowe /* die creation & addition routines */
238349d3bc91SRichard Lowe Dwarf_P_Die dwarf_new_die(
238449d3bc91SRichard Lowe     Dwarf_P_Debug    /*dbg*/,
238549d3bc91SRichard Lowe     Dwarf_Tag         /*tag*/,
238649d3bc91SRichard Lowe     Dwarf_P_Die     /*parent*/,
238749d3bc91SRichard Lowe     Dwarf_P_Die     /*child*/,
238849d3bc91SRichard Lowe     Dwarf_P_Die     /*left */,
238949d3bc91SRichard Lowe     Dwarf_P_Die     /*right*/,
239049d3bc91SRichard Lowe     Dwarf_Error*    /*error*/);
239149d3bc91SRichard Lowe 
239249d3bc91SRichard Lowe Dwarf_Unsigned dwarf_add_die_to_debug(
239349d3bc91SRichard Lowe     Dwarf_P_Debug   /*dbg*/,
239449d3bc91SRichard Lowe     Dwarf_P_Die     /*die*/,
239549d3bc91SRichard Lowe     Dwarf_Error*    /*error*/);
239649d3bc91SRichard Lowe 
2397*07dc1947SRichard Lowe /* Markers are not written  to DWARF2/3/4, they are user
2398*07dc1947SRichard Lowe    defined and may be used for any purpose.
2399*07dc1947SRichard Lowe */
2400*07dc1947SRichard Lowe Dwarf_Unsigned dwarf_add_die_marker(
2401*07dc1947SRichard Lowe     Dwarf_P_Debug   /*dbg*/,
2402*07dc1947SRichard Lowe     Dwarf_P_Die     /*die*/,
2403*07dc1947SRichard Lowe     Dwarf_Unsigned  /*marker*/,
2404*07dc1947SRichard Lowe     Dwarf_Error *   /*error*/);
2405*07dc1947SRichard Lowe 
2406*07dc1947SRichard Lowe Dwarf_Unsigned dwarf_get_die_marker(
2407*07dc1947SRichard Lowe     Dwarf_P_Debug   /*dbg*/,
2408*07dc1947SRichard Lowe     Dwarf_P_Die     /*die*/,
2409*07dc1947SRichard Lowe     Dwarf_Unsigned *  /*marker*/,
2410*07dc1947SRichard Lowe     Dwarf_Error *   /*error*/);
2411*07dc1947SRichard Lowe 
241249d3bc91SRichard Lowe Dwarf_P_Die dwarf_die_link(
241349d3bc91SRichard Lowe     Dwarf_P_Die     /*die*/,
241449d3bc91SRichard Lowe     Dwarf_P_Die     /*parent*/,
241549d3bc91SRichard Lowe     Dwarf_P_Die     /*child*/,
241649d3bc91SRichard Lowe     Dwarf_P_Die     /*left*/,
241749d3bc91SRichard Lowe     Dwarf_P_Die     /*right*/,
241849d3bc91SRichard Lowe     Dwarf_Error*    /*error*/);
241949d3bc91SRichard Lowe 
2420*07dc1947SRichard Lowe void dwarf_dealloc_compressed_block(
2421*07dc1947SRichard Lowe     Dwarf_P_Debug,
2422*07dc1947SRichard Lowe     void *
2423*07dc1947SRichard Lowe );
2424*07dc1947SRichard Lowe 
2425*07dc1947SRichard Lowe /* Call this passing in return value from dwarf_uncompress_integer_block()
2426*07dc1947SRichard Lowe  * to free the space the decompression allocated. */
2427*07dc1947SRichard Lowe void dwarf_dealloc_uncompressed_block(
2428*07dc1947SRichard Lowe     Dwarf_Debug,
2429*07dc1947SRichard Lowe     void *
2430*07dc1947SRichard Lowe );
2431*07dc1947SRichard Lowe 
2432*07dc1947SRichard Lowe void * dwarf_compress_integer_block(
2433*07dc1947SRichard Lowe     Dwarf_P_Debug,    /* dbg */
2434*07dc1947SRichard Lowe     Dwarf_Bool,       /* signed==true (or unsigned) */
2435*07dc1947SRichard Lowe     Dwarf_Small,      /* size of integer units: 8, 16, 32, 64 */
2436*07dc1947SRichard Lowe     void*,            /* data */
2437*07dc1947SRichard Lowe     Dwarf_Unsigned,   /* number of elements */
2438*07dc1947SRichard Lowe     Dwarf_Unsigned*,  /* number of bytes in output block */
2439*07dc1947SRichard Lowe     Dwarf_Error*      /* error */
2440*07dc1947SRichard Lowe );
2441*07dc1947SRichard Lowe 
2442*07dc1947SRichard Lowe /* Decode an array of signed leb integers (so of course the
2443*07dc1947SRichard Lowe  * array is not composed of fixed length values, but is instead
2444*07dc1947SRichard Lowe  * a sequence of sleb values).
2445*07dc1947SRichard Lowe  * Returns a DW_DLV_BADADDR on error.
2446*07dc1947SRichard Lowe  * Otherwise returns a pointer to an array of 32bit integers.
2447*07dc1947SRichard Lowe  * The signed argument must be non-zero (the decode
2448*07dc1947SRichard Lowe  * assumes sleb integers in the input data) at this time.
2449*07dc1947SRichard Lowe  * Size of integer units must be 32 (32 bits each) at this time.
2450*07dc1947SRichard Lowe  * Number of bytes in block is a byte count (not array count).
2451*07dc1947SRichard Lowe  * Returns number of units in output block (ie, number of elements
2452*07dc1947SRichard Lowe  * of the array that the return value points to) thru the argument.
2453*07dc1947SRichard Lowe  */
2454*07dc1947SRichard Lowe void * dwarf_uncompress_integer_block(
2455*07dc1947SRichard Lowe     Dwarf_Debug,      /* dbg */
2456*07dc1947SRichard Lowe     Dwarf_Bool,       /* signed==true (or unsigned) */
2457*07dc1947SRichard Lowe     Dwarf_Small,      /* size of integer units: 8, 16, 32, 64 */
2458*07dc1947SRichard Lowe     void*,            /* input data */
2459*07dc1947SRichard Lowe     Dwarf_Unsigned,   /* number of bytes in input */
2460*07dc1947SRichard Lowe     Dwarf_Unsigned*,  /* number of units in output block */
2461*07dc1947SRichard Lowe     Dwarf_Error*      /* error */
2462*07dc1947SRichard Lowe );
2463*07dc1947SRichard Lowe 
246449d3bc91SRichard Lowe /* Operations to create location expressions. */
246549d3bc91SRichard Lowe Dwarf_P_Expr dwarf_new_expr(Dwarf_P_Debug /*dbg*/, Dwarf_Error* /*error*/);
246649d3bc91SRichard Lowe 
2467*07dc1947SRichard Lowe void dwarf_expr_reset(
2468*07dc1947SRichard Lowe     Dwarf_P_Expr      /*expr*/,
2469*07dc1947SRichard Lowe     Dwarf_Error*      /*error*/);
2470*07dc1947SRichard Lowe 
247149d3bc91SRichard Lowe Dwarf_Unsigned dwarf_add_expr_gen(
247249d3bc91SRichard Lowe     Dwarf_P_Expr      /*expr*/,
247349d3bc91SRichard Lowe     Dwarf_Small       /*opcode*/,
247449d3bc91SRichard Lowe     Dwarf_Unsigned    /*val1*/,
247549d3bc91SRichard Lowe     Dwarf_Unsigned    /*val2*/,
247649d3bc91SRichard Lowe     Dwarf_Error*      /*error*/);
247749d3bc91SRichard Lowe 
247849d3bc91SRichard Lowe Dwarf_Unsigned dwarf_add_expr_addr(
247949d3bc91SRichard Lowe     Dwarf_P_Expr      /*expr*/,
248049d3bc91SRichard Lowe     Dwarf_Unsigned    /*addr*/,
248149d3bc91SRichard Lowe     Dwarf_Signed      /*sym_index*/,
248249d3bc91SRichard Lowe     Dwarf_Error*      /*error*/);
248349d3bc91SRichard Lowe 
248449d3bc91SRichard Lowe Dwarf_Unsigned dwarf_add_expr_addr_b(
248549d3bc91SRichard Lowe     Dwarf_P_Expr      /*expr*/,
248649d3bc91SRichard Lowe     Dwarf_Unsigned    /*addr*/,
248749d3bc91SRichard Lowe     Dwarf_Unsigned    /*sym_index*/,
248849d3bc91SRichard Lowe     Dwarf_Error*      /*error*/);
248949d3bc91SRichard Lowe 
249049d3bc91SRichard Lowe Dwarf_Unsigned dwarf_expr_current_offset(
249149d3bc91SRichard Lowe     Dwarf_P_Expr      /*expr*/,
249249d3bc91SRichard Lowe     Dwarf_Error*      /*error*/);
249349d3bc91SRichard Lowe 
249449d3bc91SRichard Lowe Dwarf_Addr dwarf_expr_into_block(
249549d3bc91SRichard Lowe     Dwarf_P_Expr      /*expr*/,
249649d3bc91SRichard Lowe     Dwarf_Unsigned*   /*length*/,
249749d3bc91SRichard Lowe     Dwarf_Error*      /*error*/);
249849d3bc91SRichard Lowe 
249949d3bc91SRichard Lowe Dwarf_Unsigned dwarf_add_arange(Dwarf_P_Debug /*dbg*/,
250049d3bc91SRichard Lowe     Dwarf_Addr        /*begin_address*/,
250149d3bc91SRichard Lowe     Dwarf_Unsigned    /*length*/,
250249d3bc91SRichard Lowe     Dwarf_Signed      /*symbol_index*/,
250349d3bc91SRichard Lowe     Dwarf_Error*      /*error*/);
250449d3bc91SRichard Lowe 
250549d3bc91SRichard Lowe Dwarf_Unsigned dwarf_add_arange_b(
250649d3bc91SRichard Lowe     Dwarf_P_Debug  /*dbg*/,
250749d3bc91SRichard Lowe     Dwarf_Addr     /*begin_address*/,
250849d3bc91SRichard Lowe     Dwarf_Unsigned /*length*/,
250949d3bc91SRichard Lowe     Dwarf_Unsigned /*symbol_index*/,
251049d3bc91SRichard Lowe     Dwarf_Unsigned /*end_symbol_index*/,
251149d3bc91SRichard Lowe     Dwarf_Addr     /*offset_from_end_symbol*/,
251249d3bc91SRichard Lowe     Dwarf_Error *  /*error*/);
251349d3bc91SRichard Lowe 
251449d3bc91SRichard Lowe Dwarf_Unsigned dwarf_add_pubname(
251549d3bc91SRichard Lowe     Dwarf_P_Debug      /*dbg*/,
251649d3bc91SRichard Lowe     Dwarf_P_Die        /*die*/,
251749d3bc91SRichard Lowe     char*              /*pubname_name*/,
251849d3bc91SRichard Lowe     Dwarf_Error*       /*error*/);
251949d3bc91SRichard Lowe 
252049d3bc91SRichard Lowe Dwarf_Unsigned dwarf_add_funcname(
252149d3bc91SRichard Lowe     Dwarf_P_Debug      /*dbg*/,
252249d3bc91SRichard Lowe     Dwarf_P_Die        /*die*/,
252349d3bc91SRichard Lowe     char*              /*func_name*/,
252449d3bc91SRichard Lowe     Dwarf_Error*       /*error*/);
252549d3bc91SRichard Lowe 
252649d3bc91SRichard Lowe Dwarf_Unsigned dwarf_add_typename(
252749d3bc91SRichard Lowe     Dwarf_P_Debug     /*dbg*/,
252849d3bc91SRichard Lowe     Dwarf_P_Die       /*die*/,
252949d3bc91SRichard Lowe     char*             /*type_name*/,
253049d3bc91SRichard Lowe     Dwarf_Error*      /*error*/);
253149d3bc91SRichard Lowe 
253249d3bc91SRichard Lowe Dwarf_Unsigned dwarf_add_varname(
253349d3bc91SRichard Lowe     Dwarf_P_Debug     /*dbg*/,
253449d3bc91SRichard Lowe     Dwarf_P_Die       /*die*/,
253549d3bc91SRichard Lowe     char*             /*var_name*/,
253649d3bc91SRichard Lowe     Dwarf_Error*      /*error*/);
253749d3bc91SRichard Lowe 
253849d3bc91SRichard Lowe Dwarf_Unsigned dwarf_add_weakname(
253949d3bc91SRichard Lowe     Dwarf_P_Debug    /*dbg*/,
254049d3bc91SRichard Lowe     Dwarf_P_Die      /*die*/,
254149d3bc91SRichard Lowe     char*            /*weak_name*/,
254249d3bc91SRichard Lowe     Dwarf_Error*     /*error*/);
254349d3bc91SRichard Lowe 
254449d3bc91SRichard Lowe /* .debug_macinfo producer functions
254549d3bc91SRichard Lowe    Functions must be called in right order: the section is output
254649d3bc91SRichard Lowe    In the order these are presented.
254749d3bc91SRichard Lowe */
254849d3bc91SRichard Lowe int dwarf_def_macro(Dwarf_P_Debug /*dbg*/,
254949d3bc91SRichard Lowe     Dwarf_Unsigned   /*line*/,
255049d3bc91SRichard Lowe     char *           /*macname, with (arglist), no space before (*/,
255149d3bc91SRichard Lowe     char *           /*macvalue*/,
255249d3bc91SRichard Lowe     Dwarf_Error*     /*error*/);
255349d3bc91SRichard Lowe 
255449d3bc91SRichard Lowe int dwarf_undef_macro(Dwarf_P_Debug /*dbg*/,
255549d3bc91SRichard Lowe     Dwarf_Unsigned   /*line*/,
255649d3bc91SRichard Lowe     char *           /*macname, no arglist, of course*/,
255749d3bc91SRichard Lowe     Dwarf_Error*     /*error*/);
255849d3bc91SRichard Lowe 
255949d3bc91SRichard Lowe int dwarf_start_macro_file(Dwarf_P_Debug /*dbg*/,
256049d3bc91SRichard Lowe     Dwarf_Unsigned   /*fileindex*/,
256149d3bc91SRichard Lowe     Dwarf_Unsigned   /*linenumber*/,
256249d3bc91SRichard Lowe     Dwarf_Error*     /*error*/);
256349d3bc91SRichard Lowe 
256449d3bc91SRichard Lowe int dwarf_end_macro_file(Dwarf_P_Debug /*dbg*/,
256549d3bc91SRichard Lowe     Dwarf_Error*     /*error*/);
256649d3bc91SRichard Lowe 
256749d3bc91SRichard Lowe int dwarf_vendor_ext(Dwarf_P_Debug /*dbg*/,
256849d3bc91SRichard Lowe     Dwarf_Unsigned   /*constant*/,
256949d3bc91SRichard Lowe     char *           /*string*/,
257049d3bc91SRichard Lowe     Dwarf_Error*     /*error*/);
257149d3bc91SRichard Lowe 
257249d3bc91SRichard Lowe /* end macinfo producer functions */
257349d3bc91SRichard Lowe 
257449d3bc91SRichard Lowe int dwarf_attr_offset(Dwarf_Die /*die*/,
257549d3bc91SRichard Lowe     Dwarf_Attribute /*attr of above die*/,
257649d3bc91SRichard Lowe     Dwarf_Off     * /*returns offset thru this ptr */,
257749d3bc91SRichard Lowe     Dwarf_Error   * /*error*/);
257849d3bc91SRichard Lowe 
2579*07dc1947SRichard Lowe /* This is a hack so clients can verify offsets.
2580*07dc1947SRichard Lowe    Added April 2005 so that debugger can detect broken offsets
2581*07dc1947SRichard Lowe    (which happened in an IRIX executable larger than 2GB
2582*07dc1947SRichard Lowe     with MIPSpro 7.3.1.3 toolchain.).
2583*07dc1947SRichard Lowe */
2584*07dc1947SRichard Lowe int
2585*07dc1947SRichard Lowe dwarf_get_section_max_offsets(Dwarf_Debug /*dbg*/,
2586*07dc1947SRichard Lowe     Dwarf_Unsigned * /*debug_info_size*/,
2587*07dc1947SRichard Lowe     Dwarf_Unsigned * /*debug_abbrev_size*/,
2588*07dc1947SRichard Lowe     Dwarf_Unsigned * /*debug_line_size*/,
2589*07dc1947SRichard Lowe     Dwarf_Unsigned * /*debug_loc_size*/,
2590*07dc1947SRichard Lowe     Dwarf_Unsigned * /*debug_aranges_size*/,
2591*07dc1947SRichard Lowe     Dwarf_Unsigned * /*debug_macinfo_size*/,
2592*07dc1947SRichard Lowe     Dwarf_Unsigned * /*debug_pubnames_size*/,
2593*07dc1947SRichard Lowe     Dwarf_Unsigned * /*debug_str_size*/,
2594*07dc1947SRichard Lowe     Dwarf_Unsigned * /*debug_frame_size*/,
2595*07dc1947SRichard Lowe     Dwarf_Unsigned * /*debug_ranges_size*/,
2596*07dc1947SRichard Lowe     Dwarf_Unsigned * /*debug_pubtypes_size*/);
2597*07dc1947SRichard Lowe 
2598*07dc1947SRichard Lowe /* Multiple releases spelled 'initial' as 'inital' .
2599*07dc1947SRichard Lowe    The 'inital' spelling should not be used. */
2600*07dc1947SRichard Lowe Dwarf_Half dwarf_set_frame_rule_inital_value(Dwarf_Debug /*dbg*/,
2601*07dc1947SRichard Lowe     Dwarf_Half /*value*/);
2602*07dc1947SRichard Lowe /* Additional interface with correct 'initial' spelling. */
2603*07dc1947SRichard Lowe /* It is likely you will want to call the following 5 functions
2604*07dc1947SRichard Lowe    before accessing any frame information.  All are useful
2605*07dc1947SRichard Lowe    to tailor handling of pseudo-registers needed to turn
2606*07dc1947SRichard Lowe    frame operation references into simpler forms and to
2607*07dc1947SRichard Lowe    reflect ABI specific data.  Of course altering libdwarf.h
2608*07dc1947SRichard Lowe    and dwarf.h allow the same capabilities, but such header changes
2609*07dc1947SRichard Lowe    do not let one change these values at runtime. */
2610*07dc1947SRichard Lowe Dwarf_Half dwarf_set_frame_rule_initial_value(Dwarf_Debug /*dbg*/,
2611*07dc1947SRichard Lowe     Dwarf_Half /*value*/);
2612*07dc1947SRichard Lowe Dwarf_Half dwarf_set_frame_rule_table_size(Dwarf_Debug /*dbg*/,
2613*07dc1947SRichard Lowe     Dwarf_Half /*value*/);
2614*07dc1947SRichard Lowe Dwarf_Half dwarf_set_frame_cfa_value(Dwarf_Debug /*dbg*/,
2615*07dc1947SRichard Lowe     Dwarf_Half /*value*/);
2616*07dc1947SRichard Lowe Dwarf_Half dwarf_set_frame_same_value(Dwarf_Debug /*dbg*/,
2617*07dc1947SRichard Lowe     Dwarf_Half /*value*/);
2618*07dc1947SRichard Lowe Dwarf_Half dwarf_set_frame_undefined_value(Dwarf_Debug /*dbg*/,
2619*07dc1947SRichard Lowe     Dwarf_Half /*value*/);
2620*07dc1947SRichard Lowe 
2621*07dc1947SRichard Lowe /* As of April 27, 2009, this version with no diepointer is
2622*07dc1947SRichard Lowe    obsolete though supported.  Use dwarf_get_ranges_a() instead. */
2623*07dc1947SRichard Lowe int dwarf_get_ranges(Dwarf_Debug /*dbg*/,
2624*07dc1947SRichard Lowe     Dwarf_Off /*rangesoffset*/,
2625*07dc1947SRichard Lowe     Dwarf_Ranges ** /*rangesbuf*/,
2626*07dc1947SRichard Lowe     Dwarf_Signed * /*listlen*/,
2627*07dc1947SRichard Lowe     Dwarf_Unsigned * /*bytecount*/,
2628*07dc1947SRichard Lowe     Dwarf_Error * /*error*/);
2629*07dc1947SRichard Lowe 
2630*07dc1947SRichard Lowe /* This adds the address_size argument. New April 27, 2009 */
2631*07dc1947SRichard Lowe int dwarf_get_ranges_a(Dwarf_Debug /*dbg*/,
2632*07dc1947SRichard Lowe     Dwarf_Off /*rangesoffset*/,
2633*07dc1947SRichard Lowe     Dwarf_Die  /* diepointer */,
2634*07dc1947SRichard Lowe     Dwarf_Ranges ** /*rangesbuf*/,
2635*07dc1947SRichard Lowe     Dwarf_Signed * /*listlen*/,
2636*07dc1947SRichard Lowe     Dwarf_Unsigned * /*bytecount*/,
2637*07dc1947SRichard Lowe     Dwarf_Error * /*error*/);
2638*07dc1947SRichard Lowe 
2639*07dc1947SRichard Lowe void dwarf_ranges_dealloc(Dwarf_Debug /*dbg*/,
2640*07dc1947SRichard Lowe     Dwarf_Ranges * /*rangesbuf*/,
2641*07dc1947SRichard Lowe     Dwarf_Signed /*rangecount*/);
2642*07dc1947SRichard Lowe 
2643*07dc1947SRichard Lowe /* The harmless error list is a circular buffer of
2644*07dc1947SRichard Lowe    errors we note but which do not stop us from processing
2645*07dc1947SRichard Lowe    the object.  Created so dwarfdump or other tools
2646*07dc1947SRichard Lowe    can report such inconsequential errors without causing
2647*07dc1947SRichard Lowe    anything to stop early. */
2648*07dc1947SRichard Lowe #define DW_HARMLESS_ERROR_CIRCULAR_LIST_DEFAULT_SIZE 4
2649*07dc1947SRichard Lowe #define DW_HARMLESS_ERROR_MSG_STRING_SIZE   200
2650*07dc1947SRichard Lowe /* User code supplies size of array of pointers errmsg_ptrs_array
2651*07dc1947SRichard Lowe     in count and the array of pointers (the pointers themselves
2652*07dc1947SRichard Lowe     need not be initialized).
2653*07dc1947SRichard Lowe     The pointers returned in the array of pointers
2654*07dc1947SRichard Lowe     are invalidated by ANY call to libdwarf.
2655*07dc1947SRichard Lowe     Use them before making another libdwarf call!
2656*07dc1947SRichard Lowe     The array of string pointers passed in always has
2657*07dc1947SRichard Lowe     a final null pointer, so if there are N pointers the
2658*07dc1947SRichard Lowe     and M actual strings, then MIN(M,N-1) pointers are
2659*07dc1947SRichard Lowe     set to point to error strings.  The array of pointers
2660*07dc1947SRichard Lowe     to strings always terminates with a NULL pointer.
2661*07dc1947SRichard Lowe     If 'count' is passed in zero then errmsg_ptrs_array
2662*07dc1947SRichard Lowe     is not touched.
2663*07dc1947SRichard Lowe 
2664*07dc1947SRichard Lowe     The function returns DW_DLV_NO_ENTRY if no harmless errors
2665*07dc1947SRichard Lowe     were noted so far.  Returns DW_DLV_OK if there are errors.
2666*07dc1947SRichard Lowe     Never returns DW_DLV_ERROR.
2667*07dc1947SRichard Lowe 
2668*07dc1947SRichard Lowe     Each call empties the error list (discarding all current entries).
2669*07dc1947SRichard Lowe     If newerr_count is non-NULL the count of harmless errors
2670*07dc1947SRichard Lowe     since the last call is returned through the pointer
2671*07dc1947SRichard Lowe     (some may have been discarded or not returned, it is a circular
2672*07dc1947SRichard Lowe     list...).
2673*07dc1947SRichard Lowe     If DW_DLV_NO_ENTRY is returned none of the arguments
2674*07dc1947SRichard Lowe     here are touched or used.
2675*07dc1947SRichard Lowe     */
2676*07dc1947SRichard Lowe int dwarf_get_harmless_error_list(Dwarf_Debug /*dbg*/,
2677*07dc1947SRichard Lowe     unsigned  /*count*/,
2678*07dc1947SRichard Lowe     const char ** /*errmsg_ptrs_array*/,
2679*07dc1947SRichard Lowe     unsigned * /*newerr_count*/);
2680*07dc1947SRichard Lowe 
2681*07dc1947SRichard Lowe /* Insertion is only for testing the harmless error code, it is not
2682*07dc1947SRichard Lowe     necessarily useful otherwise. */
2683*07dc1947SRichard Lowe void dwarf_insert_harmless_error(Dwarf_Debug /*dbg*/,
2684*07dc1947SRichard Lowe     char * /*newerror*/);
2685*07dc1947SRichard Lowe 
2686*07dc1947SRichard Lowe /* The size of the circular list of strings may be set
2687*07dc1947SRichard Lowe    and reset as needed.  If it is shortened excess
2688*07dc1947SRichard Lowe    messages are simply dropped.  It returns the previous
2689*07dc1947SRichard Lowe    size. If zero passed in the size is unchanged
2690*07dc1947SRichard Lowe    and it simply returns the current size  */
2691*07dc1947SRichard Lowe unsigned dwarf_set_harmless_error_list_size(Dwarf_Debug /*dbg*/,
2692*07dc1947SRichard Lowe     unsigned /*maxcount*/);
2693*07dc1947SRichard Lowe /* The harmless error strings (if any) are freed when the dbg
2694*07dc1947SRichard Lowe    is dwarf_finish()ed. */
2695*07dc1947SRichard Lowe 
2696*07dc1947SRichard Lowe /*  When the val_in is known these dwarf_get_TAG_name (etc)
2697*07dc1947SRichard Lowe     functions return the string corresponding to the val_in passed in
2698*07dc1947SRichard Lowe     through the pointer s_out and the value returned is DW_DLV_OK.
2699*07dc1947SRichard Lowe     The strings are in static storage
2700*07dc1947SRichard Lowe     and must not be freed.
2701*07dc1947SRichard Lowe     If DW_DLV_NO_ENTRY is returned the val_in is not known and
2702*07dc1947SRichard Lowe     *s_out is not set.  DW_DLV_ERROR is never returned.*/
2703*07dc1947SRichard Lowe 
2704*07dc1947SRichard Lowe extern int dwarf_get_TAG_name(unsigned int /*val_in*/, const char ** /*s_out */);
2705*07dc1947SRichard Lowe extern int dwarf_get_children_name(unsigned int /*val_in*/, const char ** /*s_out */);
2706*07dc1947SRichard Lowe extern int dwarf_get_FORM_name(unsigned int /*val_in*/, const char ** /*s_out */);
2707*07dc1947SRichard Lowe extern int dwarf_get_AT_name(unsigned int /*val_in*/, const char ** /*s_out */);
2708*07dc1947SRichard Lowe extern int dwarf_get_OP_name(unsigned int /*val_in*/, const char ** /*s_out */);
2709*07dc1947SRichard Lowe extern int dwarf_get_ATE_name(unsigned int /*val_in*/, const char ** /*s_out */);
2710*07dc1947SRichard Lowe extern int dwarf_get_DS_name(unsigned int /*val_in*/, const char ** /*s_out */);
2711*07dc1947SRichard Lowe extern int dwarf_get_END_name(unsigned int /*val_in*/, const char ** /*s_out */);
2712*07dc1947SRichard Lowe extern int dwarf_get_ATCF_name(unsigned int /*val_in*/, const char ** /*s_out */);
2713*07dc1947SRichard Lowe extern int dwarf_get_ACCESS_name(unsigned int /*val_in*/, const char ** /*s_out */);
2714*07dc1947SRichard Lowe extern int dwarf_get_VIS_name(unsigned int /*val_in*/, const char ** /*s_out */);
2715*07dc1947SRichard Lowe extern int dwarf_get_VIRTUALITY_name(unsigned int /*val_in*/, const char ** /*s_out */);
2716*07dc1947SRichard Lowe extern int dwarf_get_LANG_name(unsigned int /*val_in*/, const char ** /*s_out */);
2717*07dc1947SRichard Lowe extern int dwarf_get_ID_name(unsigned int /*val_in*/, const char ** /*s_out */);
2718*07dc1947SRichard Lowe extern int dwarf_get_CC_name(unsigned int /*val_in*/, const char ** /*s_out */);
2719*07dc1947SRichard Lowe extern int dwarf_get_INL_name(unsigned int /*val_in*/, const char ** /*s_out */);
2720*07dc1947SRichard Lowe extern int dwarf_get_ORD_name(unsigned int /*val_in*/, const char ** /*s_out */);
2721*07dc1947SRichard Lowe extern int dwarf_get_DSC_name(unsigned int /*val_in*/, const char ** /*s_out */);
2722*07dc1947SRichard Lowe extern int dwarf_get_LNS_name(unsigned int /*val_in*/, const char ** /*s_out */);
2723*07dc1947SRichard Lowe extern int dwarf_get_LNE_name(unsigned int /*val_in*/, const char ** /*s_out */);
2724*07dc1947SRichard Lowe extern int dwarf_get_MACINFO_name(unsigned int /*val_in*/, const char ** /*s_out */);
2725*07dc1947SRichard Lowe extern int dwarf_get_CFA_name(unsigned int /*val_in*/, const char ** /*s_out */);
2726*07dc1947SRichard Lowe extern int dwarf_get_EH_name(unsigned int /*val_in*/, const char ** /*s_out */);
2727*07dc1947SRichard Lowe extern int dwarf_get_FRAME_name(unsigned int /*val_in*/, const char ** /*s_out */);
2728*07dc1947SRichard Lowe extern int dwarf_get_CHILDREN_name(unsigned int /*val_in*/, const char ** /*s_out */);
2729*07dc1947SRichard Lowe extern int dwarf_get_ADDR_name(unsigned int /*val_in*/, const char ** /*s_out */);
273049d3bc91SRichard Lowe 
273149d3bc91SRichard Lowe #ifdef __cplusplus
273249d3bc91SRichard Lowe }
273349d3bc91SRichard Lowe #endif
273449d3bc91SRichard Lowe #endif /* _LIBDWARF_H */
273549d3bc91SRichard Lowe 
2736*07dc1947SRichard Lowe 
2737