libdwarf.h revision 7c478bd95313f5f23a4c958a745db2134aa03244
/*
* Copyright 2004 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
#pragma ident "%Z%%M% %I% %E% SMI"
/*
Copyright (C) 2000, 2001 Silicon Graphics, Inc. All Rights Reserved.
under the terms of version 2.1 of the GNU Lesser General Public License
as published by the Free Software Foundation.
This program is distributed in the hope that it would be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Further, this software is distributed without any warranty that it is
free of the rightful claim of any third person regarding infringement
or the like. Any license provided herein, whether implied or
otherwise, applies only to this software file. Patent licenses, if
any, provided herein do not apply to combinations of this program with
other software, or any other product whatsoever.
You should have received a copy of the GNU Lesser General Public
License along with this program; if not, write the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston MA 02111-1307,
USA.
Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pky,
Mountain View, CA 94043, or:
For further information regarding this notice, see:
*/
#ifndef _LIBDWARF_H
#define _LIBDWARF_H
#ifdef __cplusplus
extern "C" {
#endif
/*
$Revision: 1.71 $ $Date: 2001/05/23 23:34:52 $
For libdwarf producers and consumers
The interface is defined as having 8-byte signed and unsigned
values so it can handle 64-or-32bit target on 64-or-32bit host.
Addr is the native size: it represents pointers on
the host machine (not the target!).
This contains declarations for types and all producer
and consumer functions.
Function declarations are written on a single line each here
so one can use grep to each declaration in its entirety.
The declarations are a little harder to read this way, but...
*/
#if (_MIPS_SZLONG == 64)
/* Special case for MIPS, so -64 (LP64) build gets simple -long-.
Non-MIPS LP64 or ILP64 environments should probably ensure
_MIPS_SZLONG set to 64 everywhere this header is #included.
*/
typedef int Dwarf_Bool; /* boolean type */
typedef unsigned long Dwarf_Off; /* 4 or 8 byte file offset */
typedef unsigned long Dwarf_Unsigned; /* 4 or 8 byte unsigned value */
typedef unsigned short Dwarf_Half; /* 2 byte unsigned value */
typedef unsigned char Dwarf_Small; /* 1 byte unsigned value */
typedef signed long Dwarf_Signed; /* 4 or 8 byte signed value */
typedef unsigned long Dwarf_Addr; /* target memory address */
#else /* 32-bit */
/* This is for ILP32, allowing i/o of 64bit dwarf info.
Also should be fine for LP64 and ILP64 cases.
*/
typedef int Dwarf_Bool; /* boolean type */
typedef unsigned long long Dwarf_Off; /* 8 byte file offset */
typedef unsigned long long Dwarf_Unsigned; /* 8 byte unsigned value*/
typedef unsigned short Dwarf_Half; /* 2 byte unsigned value */
typedef unsigned char Dwarf_Small; /* 1 byte unsigned value */
typedef signed long long Dwarf_Signed; /* 8 byte signed value */
typedef unsigned long long Dwarf_Addr; /* target memory address */
#endif
typedef void* Dwarf_Ptr; /* host machine pointer */
/* uninterpreted block of data
*/
typedef struct {
} Dwarf_Block;
/* location record
*/
typedef struct {
} Dwarf_Loc;
/* location description
*/
typedef struct {
/* Frame description instructions expanded.
*/
typedef struct {
/* DW_REG_TABLE_SIZE must reflect the number of registers
*(DW_FRAME_LAST_REG_NUM) as defined in dwarf.h
*/
#define DW_REG_TABLE_SIZE 66
typedef struct {
struct {
/* for DW_DLC_SYMBOLIC_RELOCATIONS output to caller
v2, adding drd_length: some relocations are 4 and
some 8 bytes (pointers are 8, section offsets 4) in
some dwarf environments. (MIPS relocations are all one
size in any given ABI.) Changing drd_type to an unsigned char
to keep struct size down.
*/
enum Dwarf_Rel_Type {
dwarf_drt_none, /* should not get to caller */
dwarf_drt_data_reloc, /* simple normal relocation */
dwarf_drt_segment_rel, /* special reloc, exceptions*/
dwarf_drt_first_of_length_pair,/* this and drt_second
for .word end - begin
case */
};
typedef struct Dwarf_Relocation_Data_s * Dwarf_Relocation_Data;
struct Dwarf_Relocation_Data_s {
to keep size small in struct */
unsigned char drd_length; /* length in bytes
of data being relocated. 4 for 32bit.
8 for 64bit data */
};
/* Opaque types for Consumer Library. */
typedef struct Dwarf_Debug_s* Dwarf_Debug;
typedef struct Dwarf_Die_s* Dwarf_Die;
typedef struct Dwarf_Line_s* Dwarf_Line;
typedef struct Dwarf_Global_s* Dwarf_Global;
typedef struct Dwarf_Func_s* Dwarf_Func;
typedef struct Dwarf_Type_s* Dwarf_Type;
typedef struct Dwarf_Var_s* Dwarf_Var;
typedef struct Dwarf_Weak_s* Dwarf_Weak;
typedef struct Dwarf_Error_s* Dwarf_Error;
typedef struct Dwarf_Attribute_s* Dwarf_Attribute;
typedef struct Dwarf_Abbrev_s* Dwarf_Abbrev;
typedef struct Dwarf_Fde_s* Dwarf_Fde;
typedef struct Dwarf_Cie_s* Dwarf_Cie;
typedef struct Dwarf_Arange_s* Dwarf_Arange;
/* Opaque types for Producer Library. */
typedef struct Dwarf_P_Debug_s* Dwarf_P_Debug;
typedef struct Dwarf_P_Die_s* Dwarf_P_Die;
typedef struct Dwarf_P_Attribute_s* Dwarf_P_Attribute;
typedef struct Dwarf_P_Fde_s* Dwarf_P_Fde;
typedef struct Dwarf_P_Expr_s* Dwarf_P_Expr;
typedef Dwarf_Unsigned Dwarf_Tag;
/* error handler function
*/
/*
Dwarf_dealloc() alloc_type arguments.
Argument points to:
*/
/* The augmenter string for CIE */
#define DW_CIE_AUGMENTER_STRING_V0 "z"
/* dwarf_init() access arguments
*/
#define DW_DLC_READ 0 /* read only access */
/* dwarf_init() access flag modifiers
*/
/* dwarf_init() access flag modifiers
*/
/* dwarf_pcline() slide arguments
*/
#define DW_DLS_NOSLIDE 0 /* match exactly without sliding */
/* libdwarf error numbers
*/
#define DW_DLE_NE 0 /* no error */
/* It is not an allowed size (64 or 32) */
/* Error codes defined by the current Libdwarf Implementation. */
#define DW_DLE_DBG_ALLOC 23
#define DW_DLE_FSTAT_ERROR 24
#define DW_DLE_FSTAT_MODE_ERROR 25
#define DW_DLE_INIT_ACCESS_WRONG 26
#define DW_DLE_ELF_BEGIN_ERROR 27
#define DW_DLE_ELF_GETEHDR_ERROR 28
#define DW_DLE_ELF_GETSHDR_ERROR 29
#define DW_DLE_ELF_STRPTR_ERROR 30
#define DW_DLE_DEBUG_INFO_DUPLICATE 31
#define DW_DLE_DEBUG_INFO_NULL 32
#define DW_DLE_DEBUG_ABBREV_DUPLICATE 33
#define DW_DLE_DEBUG_ABBREV_NULL 34
#define DW_DLE_DEBUG_ARANGES_DUPLICATE 35
#define DW_DLE_DEBUG_ARANGES_NULL 36
#define DW_DLE_DEBUG_LINE_DUPLICATE 37
#define DW_DLE_DEBUG_LINE_NULL 38
#define DW_DLE_DEBUG_LOC_DUPLICATE 39
#define DW_DLE_DEBUG_LOC_NULL 40
#define DW_DLE_DEBUG_MACINFO_DUPLICATE 41
#define DW_DLE_DEBUG_MACINFO_NULL 42
#define DW_DLE_DEBUG_PUBNAMES_DUPLICATE 43
#define DW_DLE_DEBUG_PUBNAMES_NULL 44
#define DW_DLE_DEBUG_STR_DUPLICATE 45
#define DW_DLE_DEBUG_STR_NULL 46
#define DW_DLE_CU_LENGTH_ERROR 47
#define DW_DLE_VERSION_STAMP_ERROR 48
#define DW_DLE_ABBREV_OFFSET_ERROR 49
#define DW_DLE_ADDRESS_SIZE_ERROR 50
#define DW_DLE_DEBUG_INFO_PTR_NULL 51
#define DW_DLE_DIE_NULL 52
#define DW_DLE_STRING_OFFSET_BAD 53
#define DW_DLE_DEBUG_LINE_LENGTH_BAD 54
#define DW_DLE_LINE_PROLOG_LENGTH_BAD 55
#define DW_DLE_LINE_NUM_OPERANDS_BAD 56
#define DW_DLE_LINE_SET_ADDR_ERROR 57
#define DW_DLE_LINE_EXT_OPCODE_BAD 58
#define DW_DLE_DWARF_LINE_NULL 59
#define DW_DLE_INCL_DIR_NUM_BAD 60
#define DW_DLE_LINE_FILE_NUM_BAD 61
#define DW_DLE_ALLOC_FAIL 62
#define DW_DLE_NO_CALLBACK_FUNC 63
#define DW_DLE_SECT_ALLOC 64
#define DW_DLE_FILE_ENTRY_ALLOC 65
#define DW_DLE_LINE_ALLOC 66
#define DW_DLE_FPGM_ALLOC 67
#define DW_DLE_INCDIR_ALLOC 68
#define DW_DLE_STRING_ALLOC 69
#define DW_DLE_CHUNK_ALLOC 70
#define DW_DLE_BYTEOFF_ERR 71
#define DW_DLE_CIE_ALLOC 72
#define DW_DLE_FDE_ALLOC 73
#define DW_DLE_REGNO_OVFL 74
#define DW_DLE_CIE_OFFS_ALLOC 75
#define DW_DLE_WRONG_ADDRESS 76
#define DW_DLE_EXTRA_NEIGHBORS 77
#define DW_DLE_WRONG_TAG 78
#define DW_DLE_DIE_ALLOC 79
#define DW_DLE_PARENT_EXISTS 80
#define DW_DLE_DBG_NULL 81
#define DW_DLE_DEBUGLINE_ERROR 82
#define DW_DLE_DEBUGFRAME_ERROR 83
#define DW_DLE_DEBUGINFO_ERROR 84
#define DW_DLE_ATTR_ALLOC 85
#define DW_DLE_ABBREV_ALLOC 86
#define DW_DLE_OFFSET_UFLW 87
#define DW_DLE_ELF_SECT_ERR 88
#define DW_DLE_DEBUG_FRAME_LENGTH_BAD 89
#define DW_DLE_FRAME_VERSION_BAD 90
#define DW_DLE_CIE_RET_ADDR_REG_ERROR 91
#define DW_DLE_FDE_NULL 92
#define DW_DLE_FDE_DBG_NULL 93
#define DW_DLE_CIE_NULL 94
#define DW_DLE_CIE_DBG_NULL 95
#define DW_DLE_FRAME_TABLE_COL_BAD 96
#define DW_DLE_PC_NOT_IN_FDE_RANGE 97
#define DW_DLE_CIE_INSTR_EXEC_ERROR 98
#define DW_DLE_FRAME_INSTR_EXEC_ERROR 99
#define DW_DLE_FDE_PTR_NULL 100
#define DW_DLE_RET_OP_LIST_NULL 101
#define DW_DLE_LINE_CONTEXT_NULL 102
#define DW_DLE_DBG_NO_CU_CONTEXT 103
#define DW_DLE_DIE_NO_CU_CONTEXT 104
#define DW_DLE_FIRST_DIE_NOT_CU 105
#define DW_DLE_NEXT_DIE_PTR_NULL 106
#define DW_DLE_DEBUG_FRAME_DUPLICATE 107
#define DW_DLE_DEBUG_FRAME_NULL 108
#define DW_DLE_ABBREV_DECODE_ERROR 109
#define DW_DLE_DWARF_ABBREV_NULL 110
#define DW_DLE_ATTR_NULL 111
#define DW_DLE_DIE_BAD 112
#define DW_DLE_DIE_ABBREV_BAD 113
#define DW_DLE_ATTR_FORM_BAD 114
#define DW_DLE_ATTR_NO_CU_CONTEXT 115
#define DW_DLE_ATTR_FORM_SIZE_BAD 116
#define DW_DLE_ATTR_DBG_NULL 117
#define DW_DLE_BAD_REF_FORM 118
#define DW_DLE_ATTR_FORM_OFFSET_BAD 119
#define DW_DLE_LINE_OFFSET_BAD 120
#define DW_DLE_DEBUG_STR_OFFSET_BAD 121
#define DW_DLE_STRING_PTR_NULL 122
#define DW_DLE_PUBNAMES_VERSION_ERROR 123
#define DW_DLE_PUBNAMES_LENGTH_BAD 124
#define DW_DLE_GLOBAL_NULL 125
#define DW_DLE_GLOBAL_CONTEXT_NULL 126
#define DW_DLE_DIR_INDEX_BAD 127
#define DW_DLE_LOC_EXPR_BAD 128
#define DW_DLE_DIE_LOC_EXPR_BAD 129
#define DW_DLE_ADDR_ALLOC 130
#define DW_DLE_OFFSET_BAD 131
#define DW_DLE_MAKE_CU_CONTEXT_FAIL 132
#define DW_DLE_REL_ALLOC 133
#define DW_DLE_ARANGE_OFFSET_BAD 134
#define DW_DLE_SEGMENT_SIZE_BAD 135
#define DW_DLE_ARANGE_LENGTH_BAD 136
#define DW_DLE_ARANGE_DECODE_ERROR 137
#define DW_DLE_ARANGES_NULL 138
#define DW_DLE_ARANGE_NULL 139
#define DW_DLE_NO_FILE_NAME 140
#define DW_DLE_NO_COMP_DIR 141
#define DW_DLE_CU_ADDRESS_SIZE_BAD 142
#define DW_DLE_INPUT_ATTR_BAD 143
#define DW_DLE_EXPR_NULL 144
#define DW_DLE_BAD_EXPR_OPCODE 145
#define DW_DLE_EXPR_LENGTH_BAD 146
#define DW_DLE_MULTIPLE_RELOC_IN_EXPR 147
#define DW_DLE_ELF_GETIDENT_ERROR 148
#define DW_DLE_NO_AT_MIPS_FDE 149
#define DW_DLE_NO_CIE_FOR_FDE 150
#define DW_DLE_DIE_ABBREV_LIST_NULL 151
#define DW_DLE_DEBUG_FUNCNAMES_DUPLICATE 152
#define DW_DLE_DEBUG_FUNCNAMES_NULL 153
#define DW_DLE_DEBUG_FUNCNAMES_VERSION_ERROR 154
#define DW_DLE_DEBUG_FUNCNAMES_LENGTH_BAD 155
#define DW_DLE_FUNC_NULL 156
#define DW_DLE_FUNC_CONTEXT_NULL 157
#define DW_DLE_DEBUG_TYPENAMES_DUPLICATE 158
#define DW_DLE_DEBUG_TYPENAMES_NULL 159
#define DW_DLE_DEBUG_TYPENAMES_VERSION_ERROR 160
#define DW_DLE_DEBUG_TYPENAMES_LENGTH_BAD 161
#define DW_DLE_TYPE_NULL 162
#define DW_DLE_TYPE_CONTEXT_NULL 163
#define DW_DLE_DEBUG_VARNAMES_DUPLICATE 164
#define DW_DLE_DEBUG_VARNAMES_NULL 165
#define DW_DLE_DEBUG_VARNAMES_VERSION_ERROR 166
#define DW_DLE_DEBUG_VARNAMES_LENGTH_BAD 167
#define DW_DLE_VAR_NULL 168
#define DW_DLE_VAR_CONTEXT_NULL 169
#define DW_DLE_DEBUG_WEAKNAMES_DUPLICATE 170
#define DW_DLE_DEBUG_WEAKNAMES_NULL 171
#define DW_DLE_DEBUG_WEAKNAMES_VERSION_ERROR 172
#define DW_DLE_DEBUG_WEAKNAMES_LENGTH_BAD 173
#define DW_DLE_WEAK_NULL 174
#define DW_DLE_WEAK_CONTEXT_NULL 175
#define DW_DLE_LOCDESC_COUNT_WRONG 176
#define DW_DLE_MACINFO_STRING_NULL 177
#define DW_DLE_MACINFO_STRING_EMPTY 178
#define DW_DLE_MACINFO_INTERNAL_ERROR_SPACE 179
#define DW_DLE_MACINFO_MALLOC_FAIL 180
#define DW_DLE_DEBUGMACINFO_ERROR 181
#define DW_DLE_DEBUG_MACRO_LENGTH_BAD 182
#define DW_DLE_DEBUG_MACRO_MAX_BAD 183
#define DW_DLE_DEBUG_MACRO_INTERNAL_ERR 184
#define DW_DLE_DEBUG_MACRO_MALLOC_SPACE 185
#define DW_DLE_DEBUG_MACRO_INCONSISTENT 186
#define DW_DLE_DF_NO_CIE_AUGMENTATION 187
#define DW_DLE_DF_REG_NUM_TOO_HIGH 188
#define DW_DLE_DF_MAKE_INSTR_NO_INIT 189
#define DW_DLE_DF_NEW_LOC_LESS_OLD_LOC 190
#define DW_DLE_DF_POP_EMPTY_STACK 191
#define DW_DLE_DF_ALLOC_FAIL 192
#define DW_DLE_DF_FRAME_DECODING_ERROR 193
/* DW_DLE_LAST MUST EQUAL LAST ERROR NUMBER */
#define DW_DLE_LAST 193
#define DW_DLE_LO_USER 0x10000
/* taken as meaning 'undefined value', this is not
a column or register number.
Only present at libdwarf runtime. Never on disk.
DW_FRAME_* Values present on disk are in dwarf.h
*/
#define DW_FRAME_UNDEFINED_VAL 1034
/* taken as meaning 'same value' as caller had, not a column
or register number
Only present at libdwarf runtime. Never on disk.
DW_FRAME_* Values present on disk are in dwarf.h
*/
#define DW_FRAME_SAME_VAL 1035
/* error return values
*/
#define DW_DLV_BADADDR (~(Dwarf_Addr)0)
/* for functions returning target address */
/* for functions returning count */
#define DW_DLV_BADOFFSET (~(Dwarf_Off)0)
/* for functions returning offset */
/* standard return values for functions */
#define DW_DLV_NO_ENTRY -1
#define DW_DLV_OK 0
#define DW_DLV_ERROR 1
/* Special values for offset_into_exception_table field of dwarf fde's. */
/* The following value indicates that there is no Exception table offset
associated with a dwarf frame. */
#define DW_DLX_NO_EH_OFFSET (-1LL)
/* The following value indicates that the producer was unable to analyse the
source file to generate Exception tables for this function. */
#define DW_DLX_EH_OFFSET_UNAVAILABLE (-2LL)
/*===========================================================================*/
/* Dwarf consumer interface initialization and termination operations */
/* non-elf initialization */
int dwarf_init(int /*fd*/,
Dwarf_Unsigned /*access*/,
Dwarf_Handler /*errhand*/,
Dwarf_Ptr /*errarg*/,
Dwarf_Debug * /*dbg*/,
Dwarf_Error* /*error*/);
/* elf intialization */
Dwarf_Unsigned /*access*/,
Dwarf_Handler /*errhand*/,
Dwarf_Ptr /*errarg*/,
Dwarf_Debug * /*dbg*/,
Dwarf_Error* /*error*/);
/* Undocumented function for memory allocator. */
Elf ** /*return_elfptr*/,
Dwarf_Error* /*error*/);
/* die traversal operations */
Dwarf_Unsigned* /*cu_header_length*/,
Dwarf_Half* /*version_stamp*/,
Dwarf_Off* /*abbrev_offset*/,
Dwarf_Half* /*address_size*/,
Dwarf_Unsigned* /*next_cu_header_offset*/,
Dwarf_Error* /*error*/);
Dwarf_Die /*die*/,
Dwarf_Die* /*return_siblingdie*/,
Dwarf_Error* /*error*/);
Dwarf_Die* /*return_childdie*/,
Dwarf_Error* /*error*/);
/* finding die given offset */
Dwarf_Off /*offset*/,
Dwarf_Die* /*return_die*/,
Dwarf_Error* /*error*/);
/* higher level functions (Unimplemented) */
Dwarf_Addr /*pc*/,
Dwarf_Die* /*return_die*/,
Dwarf_Error* /*error*/);
/* Unimplemented */
Dwarf_Addr /*pc*/,
Dwarf_Die* /*return_die*/,
Dwarf_Error* /*error*/);
/* Unimplemented */
Dwarf_Addr /*pc*/,
Dwarf_Die* /*return_die*/,
Dwarf_Error* /*error*/);
/* operations on DIEs */
Dwarf_Half* /*return_tag*/,
Dwarf_Error* /*error*/);
/* utility? */
Dwarf_Off* /*return_offset*/,
Dwarf_Error* /*error*/);
Dwarf_Off* /*return_offset*/,
Dwarf_Error* /*error*/);
Dwarf_Half /*attr*/,
Dwarf_Attribute * /*returned_attr*/,
Dwarf_Error* /*error*/);
char ** /*diename*/,
Dwarf_Error* /*error*/);
/* convenience functions, alternative to using dwarf_attrlist() */
Dwarf_Half /*attr*/,
Dwarf_Bool * /*returned_bool*/,
Dwarf_Error* /*error*/);
Dwarf_Locdesc** /*llbuf*/,
Dwarf_Signed * /*locCount*/,
Dwarf_Error* /*error*/);
/* Unimplemented */
Dwarf_Locdesc ** /*returned_locdesc*/,
Dwarf_Error* /*error*/);
/* Unimplemented */
Dwarf_Signed * /*returned_count*/,
Dwarf_Error* /*error*/);
/* Unimplemented */
Dwarf_Unsigned /*ssndx*/,
Dwarf_Die * /*returned_die*/,
Dwarf_Error* /*error*/);
Dwarf_Addr * /*returned_addr*/,
Dwarf_Error* /*error*/);
Dwarf_Addr * /*returned_addr*/,
Dwarf_Error* /*error*/);
Dwarf_Unsigned * /*returned_size*/,
Dwarf_Error* /*error*/);
/* Unimplemented */
Dwarf_Bool * /*returned_bool*/,
Dwarf_Error* /*error*/);
Dwarf_Unsigned * /*returned_size*/,
Dwarf_Error* /*error*/);
Dwarf_Unsigned * /*returned_offset*/,
Dwarf_Error* /*error*/);
Dwarf_Unsigned * /*returned_lang*/,
Dwarf_Error* /*error*/);
Dwarf_Unsigned * /*returned_order*/,
Dwarf_Error* /*error*/);
/* end of convenience function list */
/* this is the main interface to attributes of a DIE */
Dwarf_Attribute** /*attrbuf*/,
Dwarf_Signed * /*attrcount*/,
Dwarf_Error* /*error*/);
/* query operations for attributes */
Dwarf_Half /*form*/,
Dwarf_Bool * /*returned_bool*/,
Dwarf_Error* /*error*/);
Dwarf_Half * /*returned_form*/,
Dwarf_Error* /*error*/);
Dwarf_Half * /*returned_attr_num*/,
Dwarf_Error* /*error*/);
/*
The following are concerned with the Primary Interface: getting
the actual data values. One function per 'kind' of FORM.
*/
/*dwarf_formref returns, thru return_offset, a CU-relative offset
** and does not allow DW_FORM_ref_addr*/
Dwarf_Off* /*return_offset*/,
Dwarf_Error* /*error*/);
/*dwarf_global_formref returns, thru return_offset,
a debug_info-relative offset and does allow all reference forms*/
Dwarf_Off* /*return_offset*/,
Dwarf_Error* /*error*/);
Dwarf_Addr * /*returned_addr*/,
Dwarf_Error* /*error*/);
Dwarf_Bool * /*returned_bool*/,
Dwarf_Error* /*error*/);
Dwarf_Unsigned * /*returned_val*/,
Dwarf_Error* /*error*/);
Dwarf_Signed * /*returned_val*/,
Dwarf_Error* /*error*/);
Dwarf_Block ** /*returned_block*/,
Dwarf_Error* /*error*/);
char ** /*returned_string*/,
Dwarf_Error* /*error*/);
/* end attribute query operations. */
/* line number operations */
/* dwarf_srclines is the normal interface */
Dwarf_Line** /*linebuf*/,
Dwarf_Signed * /*linecount*/,
Dwarf_Error* /*error*/);
char*** /*srcfiles*/,
Dwarf_Signed * /*filecount*/,
Dwarf_Error* /*error*/);
/* Unimplemented. */
Dwarf_Line * /*returned_line*/,
Dwarf_Error * /*error*/);
Dwarf_Bool * /*returned_bool*/,
Dwarf_Error* /*error*/);
Dwarf_Bool * /*returned_bool*/,
Dwarf_Error* /*error*/);
Dwarf_Unsigned * /*returned_lineno*/,
Dwarf_Error* /*error*/);
Dwarf_Addr * /*returned_addr*/,
Dwarf_Error* /*error*/);
Dwarf_Signed * /*returned_lineoffset*/,
Dwarf_Error* /*error*/);
char ** /*returned_name*/,
Dwarf_Error* /*error*/);
Dwarf_Bool * /*returned_bool*/,
Dwarf_Error* /*error*/);
/* tertiary interface to line info */
/* Unimplemented */
Dwarf_Addr /*pc*/,
Dwarf_Line** /*linebuf*/,
Dwarf_Signed * /*linecount*/,
Dwarf_Signed /*slide*/,
Dwarf_Error* /*error*/);
/* end line number operations */
/* global name space operations (.debug_pubnames access) */
Dwarf_Global** /*globals*/,
Dwarf_Signed * /*number_of_globals*/,
Dwarf_Error* /*error*/);
char ** /*returned_name*/,
Dwarf_Error* /*error*/);
Dwarf_Off* /*return_offset*/,
Dwarf_Error * /*error*/);
Dwarf_Debug /*dbg*/,
Dwarf_Off /*in_cu_header_offset*/,
Dwarf_Off * /*out_cu_die_offset*/,
Dwarf_Error * /*err*/);
#ifdef __sgi /* pragma is sgi MIPS only */
#endif
Dwarf_Off* /*return_offset*/,
Dwarf_Error* /*error*/);
char ** /*returned_name*/,
Dwarf_Off* /*die_offset*/,
Dwarf_Off* /*cu_offset*/,
Dwarf_Error* /*error*/);
/* Static function name operations. */
Dwarf_Func** /*funcs*/,
Dwarf_Signed * /*number_of_funcs*/,
Dwarf_Error* /*error*/);
char ** /*returned_name*/,
Dwarf_Error* /*error*/);
Dwarf_Off* /*return_offset*/,
Dwarf_Error* /*error*/);
Dwarf_Off* /*return_offset*/,
Dwarf_Error* /*error*/);
char ** /*returned_name*/,
Dwarf_Off* /*die_offset*/,
Dwarf_Off* /*cu_offset*/,
Dwarf_Error* /*error*/);
/* User-defined type name operations. */
Dwarf_Type** /*types*/,
Dwarf_Signed * /*number_of_types*/,
Dwarf_Error* /*error*/);
char ** /*returned_name*/,
Dwarf_Error* /*error*/);
Dwarf_Off* /*return_offset*/,
Dwarf_Error* /*error*/);
Dwarf_Off* /*return_offset*/,
Dwarf_Error* /*error*/);
char ** /*returned_name*/,
Dwarf_Off* /*die_offset*/,
Dwarf_Off* /*cu_offset*/,
Dwarf_Error* /*error*/);
/* File-scope static variable name operations. */
Dwarf_Var** /*vars*/,
Dwarf_Signed * /*number_of_vars*/,
Dwarf_Error* /*error*/);
char ** /*returned_name*/,
Dwarf_Error* /*error*/);
Dwarf_Off* /*return_offset*/,
Dwarf_Error* /*error*/);
Dwarf_Off* /*return_offset*/,
Dwarf_Error* /*error*/);
char ** /*returned_name*/,
Dwarf_Off* /*die_offset*/,
Dwarf_Off* /*cu_offset*/,
Dwarf_Error* /*error*/);
/* weak name operations. */
Dwarf_Weak** /*weaks*/,
Dwarf_Signed * /*number_of_weaks*/,
Dwarf_Error* /*error*/);
char ** /*returned_name*/,
Dwarf_Error* /*error*/);
Dwarf_Off* /*return_offset*/,
Dwarf_Error* /*error*/);
Dwarf_Off* /*return_offset*/,
Dwarf_Error* /*error*/);
char ** /*returned_name*/,
Dwarf_Off* /*die_offset*/,
Dwarf_Off* /*cu_offset*/,
Dwarf_Error* /*error*/);
/* location list section operation. (.debug_loc access) */
/* Unimplemented. */
Dwarf_Unsigned /*offset*/,
Dwarf_Addr* /*hipc*/,
Dwarf_Addr* /*lopc*/,
Dwarf_Ptr* /*data*/,
Dwarf_Unsigned* /*entry_len*/,
Dwarf_Unsigned* /*next_entry*/,
Dwarf_Error* /*error*/);
/* abbreviation section operations */
Dwarf_Unsigned /*offset*/,
Dwarf_Abbrev * /*returned_abbrev*/,
Dwarf_Unsigned* /*length*/,
Dwarf_Unsigned* /*attr_count*/,
Dwarf_Error* /*error*/);
Dwarf_Half* /*return_tag_number*/,
Dwarf_Error* /*error*/);
Dwarf_Unsigned* /*return_code_number*/,
Dwarf_Error* /*error*/);
Dwarf_Signed* /*return_flag*/,
Dwarf_Error* /*error*/);
Dwarf_Signed /*index*/,
Dwarf_Half * /*returned_attr_num*/,
Dwarf_Signed* /*form*/,
Dwarf_Off* /*offset*/,
Dwarf_Error* /*error*/);
/* consumer string section operation */
Dwarf_Off /*offset*/,
char** /*string*/,
Dwarf_Signed * /*strlen_of_string*/,
Dwarf_Error* /*error*/);
/* Consumer op on gnu .eh_frame info */
Dwarf_Debug /*dbg*/,
Dwarf_Cie ** /*cie_data*/,
Dwarf_Signed * /*cie_element_count*/,
Dwarf_Fde ** /*fde_data*/,
Dwarf_Signed * /*fde_element_count*/,
Dwarf_Error * /*error*/);
/* consumer operations on frame info: .debug_frame */
Dwarf_Cie** /*cie_data*/,
Dwarf_Signed* /*cie_element_count*/,
Dwarf_Fde** /*fde_data*/,
Dwarf_Signed* /*fde_element_count*/,
Dwarf_Error* /*error*/);
Dwarf_Addr* /*low_pc*/,
Dwarf_Unsigned* /*func_length*/,
Dwarf_Ptr* /*fde_bytes*/,
Dwarf_Unsigned* /*fde_byte_length*/,
Dwarf_Off* /*cie_offset*/,
Dwarf_Signed* /*cie_index*/,
Dwarf_Off* /*fde_offset*/,
Dwarf_Error* /*error*/);
Dwarf_Signed* /* offset_into_exception_tables */,
Dwarf_Error* /*error*/);
Dwarf_Cie * /*cie_returned*/,
Dwarf_Error* /*error*/);
Dwarf_Unsigned * /*bytes_in_cie*/,
Dwarf_Small* /*version*/,
char ** /*augmenter*/,
Dwarf_Unsigned* /*code_alignment_factor*/,
Dwarf_Signed* /*data_alignment_factor*/,
Dwarf_Half* /*return_address_register_rule*/,
Dwarf_Ptr* /*initial_instructions*/,
Dwarf_Unsigned* /*initial_instructions_length*/,
Dwarf_Error* /*error*/);
Dwarf_Error * /*error*/);
Dwarf_Addr /*pc_requested*/,
Dwarf_Regtable* /*reg_table*/,
Dwarf_Addr* /*row_pc*/,
Dwarf_Error* /*error*/);
Dwarf_Half /*table_column*/,
Dwarf_Addr /*pc_requested*/,
Dwarf_Signed* /*offset_relevant*/,
Dwarf_Signed* /*register*/,
Dwarf_Signed* /*offset*/,
Dwarf_Addr* /*row_pc*/,
Dwarf_Error* /*error*/);
Dwarf_Die /*subr_die */,
Dwarf_Fde * /*returned_fde*/,
Dwarf_Error* /*error*/);
Dwarf_Unsigned /*fde_index*/,
Dwarf_Fde * /*returned_fde*/,
Dwarf_Error* /*error*/);
Dwarf_Addr /*pc_of_interest*/,
Dwarf_Fde * /*returned_fde*/,
Dwarf_Addr* /*lopc*/,
Dwarf_Addr* /*hipc*/,
Dwarf_Error* /*error*/);
Dwarf_Ptr /*instruction*/,
Dwarf_Unsigned /*i_length*/,
Dwarf_Frame_Op** /*returned_op_list*/,
Dwarf_Signed* /*op_count*/,
Dwarf_Error* /*error*/);
/* Operations on .debug_aranges. */
Dwarf_Arange** /*aranges*/,
Dwarf_Signed * /*arange_count*/,
Dwarf_Error* /*error*/);
int dwarf_get_arange(
Dwarf_Arange* /*aranges*/,
Dwarf_Unsigned /*arange_count*/,
Dwarf_Addr /*address*/,
Dwarf_Arange * /*returned_arange*/,
Dwarf_Error* /*error*/);
Dwarf_Arange /*arange*/,
Dwarf_Off* /*return_offset*/,
Dwarf_Error* /*error*/);
Dwarf_Arange /*arange*/,
Dwarf_Off* /*return_cu_header_offset*/,
Dwarf_Error* /*error*/);
#ifdef __sgi /* pragma is sgi MIPS only */
#endif
Dwarf_Arange /*arange*/,
Dwarf_Addr* /*start*/,
Dwarf_Unsigned* /*length*/,
Dwarf_Off* /*cu_die_offset*/,
Dwarf_Error* /*error*/);
/* consumer .debug_macinfo information interface.
*/
struct Dwarf_Macro_Details_s {
of this macro info */
applicable and vend_def # if
vendor_extension op
*/
applies to define undef start_file
*/
char * dmd_macro; /* macro name (with value for defineop)
string from vendor ext
*/
};
/* _dwarf_print_lines is for use by dwarfdump: it prints
line info to stdout.
*/
/* _dwarf_ld_sort_lines is for use solely by ld for
rearranging lines in .debug_line in a .o created with a text
section per function.
-OPT:procedure_reorder=ON
where ld-cord (cord(1)ing by ld,
not by cord(1)) may have changed the function order.
*/
int _dwarf_ld_sort_lines(
void * orig_buffer,
unsigned long buffer_len,
int is_64_bit,
int *any_change,
int * err_code);
/* Used by dwarfdump -v to print offsets, for debugging
dwarf info
*/
Dwarf_Error *err);
/* Used by dwarfdump -v to print offsets, for debugging
dwarf info
*/
Dwarf_Error *err);
typedef struct Dwarf_Macro_Details_s Dwarf_Macro_Details;
char * /*requested_macro_name*/,
Dwarf_Addr /*pc_of_request*/,
char ** /*returned_macro_value*/,
Dwarf_Error * /*error*/);
Dwarf_Addr /*pc_of_request*/,
Dwarf_Signed * /*returned_count*/,
char *** /*returned_pointers_to_macros*/,
Dwarf_Error * /*error*/);
char *dwarf_find_macro_value_start(char * /*macro_string*/);
Dwarf_Off /*macro_offset*/,
Dwarf_Unsigned /*maximum_count*/,
Dwarf_Signed * /*entry_count*/,
Dwarf_Macro_Details ** /*details*/,
Dwarf_Error * /*err*/);
Dwarf_Half * /*addr_size*/,
Dwarf_Error * /*error*/);
/* utility operations */
/* stringcheck zero is default and means do all
** string length validity checks.
** Call with parameter value 1 to turn off many such checks (and
** increase performance).
** Call with zero for safest running.
** Actual value saved and returned is only 8 bits! Upper bits
** ignored by libdwarf (and zero on return).
** Returns previous value.
*/
int dwarf_set_stringcheck(int /*stringcheck*/);
/* Unimplemented */
/* Unimplemented */
Dwarf_Unsigned /*type*/);
/* DWARF Producer Interface */
typedef int (*Dwarf_Callback_Func)(
char* /*name*/,
int /*size*/,
Dwarf_Unsigned /*type*/,
Dwarf_Unsigned /*flags*/,
Dwarf_Unsigned /*link*/,
Dwarf_Unsigned /*info*/,
int* /*sect name index*/,
int* /*error*/);
Dwarf_Unsigned /*creation_flags*/,
Dwarf_Callback_Func /*func*/,
Dwarf_Handler /*errhand*/,
Dwarf_Ptr /*errarg*/,
Dwarf_Error* /*error*/);
typedef int (*Dwarf_Callback_Func_b)(
char* /*name*/,
int /*size*/,
Dwarf_Unsigned /*type*/,
Dwarf_Unsigned /*flags*/,
Dwarf_Unsigned /*link*/,
Dwarf_Unsigned /*info*/,
Dwarf_Unsigned* /*sect_name_index*/,
int* /*error*/);
Dwarf_Unsigned /*flags*/,
Dwarf_Callback_Func_b /*func*/,
Dwarf_Handler /*errhand*/,
Dwarf_Ptr /*errarg*/,
Dwarf_Error * /*error*/);
Dwarf_Error* /*error*/);
Dwarf_Signed /*dwarf_section*/,
Dwarf_Signed* /*elf_section_index*/,
Dwarf_Unsigned* /*length*/,
Dwarf_Error* /*error*/);
Dwarf_P_Debug /*dbg*/,
Dwarf_Unsigned * /*count_of_relocation_sections*/,
int * /*drd_buffer_version*/,
Dwarf_Error* /*error*/);
Dwarf_P_Debug /*dbg*/,
Dwarf_Signed * /*elf_section_index*/,
Dwarf_Signed * /*elf_section_index_link*/,
Dwarf_Unsigned * /*relocation_buffer_count*/,
Dwarf_Relocation_Data * /*reldata_buffer*/,
Dwarf_Error* /*error*/);
/* v1: no drd_length field, enum explicit */
/* v2: has the drd_length field, enum value in uchar member */
#define DWARF_DRD_BUFFER_VERSION 2
Dwarf_Error* /*error*/);
/* Producer attribute addition functions. */
Dwarf_P_Die /*ownerdie*/,
Dwarf_Half /*attr*/,
Dwarf_Unsigned /*pc_value*/,
Dwarf_Signed /*sym_index*/,
Dwarf_Error* /*error*/);
Dwarf_P_Die /*ownerdie*/,
Dwarf_Half /*attr*/,
Dwarf_Small* /*block_data*/,
Dwarf_Unsigned /*block_len*/,
Dwarf_Error* /*error*/);
Dwarf_P_Die /*ownerdie*/,
Dwarf_Half /*attr*/,
Dwarf_Unsigned /*pc_value*/,
Dwarf_Unsigned /*sym_index*/,
Dwarf_Error* /*error*/);
Dwarf_P_Die /*ownerdie*/,
Dwarf_Half /*attr*/,
Dwarf_Unsigned /*value*/,
Dwarf_Error* /*error*/);
Dwarf_P_Die /*ownerdie*/,
Dwarf_Half /*attr*/,
Dwarf_Signed /*value*/,
Dwarf_Error* /*error*/);
Dwarf_P_Die /*ownerdie*/,
Dwarf_Half /*attr*/,
Dwarf_P_Die /*otherdie*/,
Dwarf_Error* /*error*/);
char* /*string_value*/,
Dwarf_Error* /*error*/);
Dwarf_P_Die /*ownerdie*/,
Dwarf_Half /*attr*/,
Dwarf_P_Expr /*loc_expr*/,
Dwarf_Error* /*error*/);
Dwarf_P_Die /*ownerdie*/,
Dwarf_Half /*attr*/,
char* /*string*/,
Dwarf_Error* /*error*/);
Dwarf_P_Die /*ownerdie*/,
Dwarf_Half /*attr*/,
Dwarf_Small /*flag*/,
Dwarf_Error* /*error*/);
char* /*producer_string*/,
Dwarf_Error* /*error*/);
Dwarf_Signed /*signed_value*/,
Dwarf_Error* /*error*/);
Dwarf_P_Die /*ownerdie*/,
Dwarf_Unsigned /*unsigned_value*/,
Dwarf_Error* /*error*/);
char* /*current_working_directory*/,
Dwarf_Error* /*error*/);
char* /*name*/,
Dwarf_Error* /*error*/);
/* Producer line creation functions (.debug_line) */
char* /*name*/,
Dwarf_Error* /*error*/);
char* /*name*/,
Dwarf_Unsigned /*dir_index*/,
Dwarf_Unsigned /*time_last_modified*/,
Dwarf_Unsigned /*length*/,
Dwarf_Error* /*error*/);
Dwarf_Unsigned /*file_index*/,
Dwarf_Addr /*code_address*/,
Dwarf_Unsigned /*lineno*/,
Dwarf_Signed /*column_number*/,
Dwarf_Bool /*is_source_stmt_begin*/,
Dwarf_Bool /*is_basic_block_begin*/,
Dwarf_Error* /*error*/);
Dwarf_Unsigned /*offset*/,
Dwarf_Unsigned /*symbol_index*/,
Dwarf_Error* /*error*/);
Dwarf_Addr /*end_address*/,
Dwarf_Error* /*error*/);
/* Producer .debug_frame functions */
char* /*augmenter*/,
Dwarf_Small /*code_alignent_factor*/,
Dwarf_Small /*data_alignment_factor*/,
Dwarf_Small /*return_address_reg*/,
Dwarf_Ptr /*initialization_bytes*/,
Dwarf_Unsigned /*init_byte_len*/,
Dwarf_Error* /*error*/);
Dwarf_P_Debug /*dbg*/,
Dwarf_P_Fde /*fde*/,
Dwarf_P_Die /*corresponding subprogram die*/,
Dwarf_Unsigned /*cie_to_use*/,
Dwarf_Unsigned /*virt_addr_of_described_code*/,
Dwarf_Unsigned /*length_of_code*/,
Dwarf_Unsigned /*symbol_index*/,
Dwarf_Error* /*error*/);
Dwarf_P_Debug /*dbg*/,
Dwarf_P_Fde /*fde*/,
Dwarf_P_Die /*die*/,
Dwarf_Unsigned /*cie*/,
Dwarf_Addr /*virt_addr*/,
Dwarf_Unsigned /*code_len*/,
Dwarf_Unsigned /*sym_idx*/,
Dwarf_Unsigned /*sym_idx_of_end*/,
Dwarf_Addr /*offset_from_end_sym*/,
Dwarf_Error* /*error*/);
Dwarf_P_Fde /*fde*/,
Dwarf_P_Die /*die*/,
Dwarf_Unsigned /*cie*/,
Dwarf_Addr /*virt_addr*/,
Dwarf_Unsigned /*code_len*/,
Dwarf_Unsigned /*symidx*/,
Dwarf_Unsigned /* end_symbol */,
Dwarf_Addr /* offset_from_end_symbol */,
Dwarf_Signed /*offset_into_exception_tables*/,
Dwarf_Unsigned /*exception_table_symbol*/,
Dwarf_Error* /*error*/);
Dwarf_P_Fde /*fde*/,
Dwarf_P_Die /*die*/,
Dwarf_Unsigned /*cie*/,
Dwarf_Addr /*virt_addr*/,
Dwarf_Unsigned /*code_len*/,
Dwarf_Unsigned /*symidx*/,
Dwarf_Signed /*offset_into_exception_tables*/,
Dwarf_Unsigned /*exception_table_symbol*/,
Dwarf_Error* /*error*/);
Dwarf_P_Fde /*fde*/,
Dwarf_Small /*op*/,
Dwarf_Unsigned /*val1*/,
Dwarf_Unsigned /*val2*/,
Dwarf_Error* /*error*/);
Dwarf_P_Fde /*fde*/,
Dwarf_Unsigned /*register_number*/,
Dwarf_Signed /*offset*/,
Dwarf_Error* /*error*/);
/* die creation & addition routines */
Dwarf_P_Debug /*dbg*/,
Dwarf_Tag /*tag*/,
Dwarf_P_Die /*parent*/,
Dwarf_P_Die /*child*/,
Dwarf_P_Die /*left */,
Dwarf_P_Die /*right*/,
Dwarf_Error* /*error*/);
Dwarf_P_Debug /*dbg*/,
Dwarf_P_Die /*die*/,
Dwarf_Error* /*error*/);
Dwarf_P_Die /*die*/,
Dwarf_P_Die /*parent*/,
Dwarf_P_Die /*child*/,
Dwarf_P_Die /*left*/,
Dwarf_P_Die /*right*/,
Dwarf_Error* /*error*/);
void *
);
void *
);
void * dwarf_compress_integer_block(
Dwarf_P_Debug, /* dbg */
Dwarf_Bool, /* signed==true (or unsigned) */
Dwarf_Small, /* size of integer units: 8, 16, 32, 64 */
void*, /* data */
Dwarf_Unsigned, /* number of elements */
Dwarf_Unsigned*, /* number of bytes in output block */
Dwarf_Error* /* error */
);
void * dwarf_uncompress_integer_block(
Dwarf_Debug, /* dbg */
Dwarf_Bool, /* signed==true (or unsigned) */
Dwarf_Small, /* size of integer units: 8, 16, 32, 64 */
void*, /* data */
Dwarf_Unsigned, /* number of bytes in input */
Dwarf_Unsigned*, /* number of units in output block */
Dwarf_Error* /* error */
);
/* Operations to create location expressions. */
Dwarf_P_Expr /*expr*/,
Dwarf_Small /*opcode*/,
Dwarf_Unsigned /*val1*/,
Dwarf_Unsigned /*val2*/,
Dwarf_Error* /*error*/);
Dwarf_P_Expr /*expr*/,
Dwarf_Unsigned /*addr*/,
Dwarf_Signed /*sym_index*/,
Dwarf_Error* /*error*/);
Dwarf_P_Expr /*expr*/,
Dwarf_Unsigned /*addr*/,
Dwarf_Unsigned /*sym_index*/,
Dwarf_Error* /*error*/);
Dwarf_P_Expr /*expr*/,
Dwarf_Error* /*error*/);
Dwarf_P_Expr /*expr*/,
Dwarf_Unsigned* /*length*/,
Dwarf_Error* /*error*/);
Dwarf_Addr /*begin_address*/,
Dwarf_Unsigned /*length*/,
Dwarf_Signed /*symbol_index*/,
Dwarf_Error* /*error*/);
Dwarf_P_Debug /*dbg*/,
Dwarf_Addr /*begin_address*/,
Dwarf_Unsigned /*length*/,
Dwarf_Unsigned /*symbol_index*/,
Dwarf_Unsigned /*end_symbol_index*/,
Dwarf_Addr /*offset_from_end_symbol*/,
Dwarf_Error * /*error*/);
Dwarf_P_Debug /*dbg*/,
Dwarf_P_Die /*die*/,
char* /*pubname_name*/,
Dwarf_Error* /*error*/);
Dwarf_P_Debug /*dbg*/,
Dwarf_P_Die /*die*/,
char* /*func_name*/,
Dwarf_Error* /*error*/);
Dwarf_P_Debug /*dbg*/,
Dwarf_P_Die /*die*/,
char* /*type_name*/,
Dwarf_Error* /*error*/);
Dwarf_P_Debug /*dbg*/,
Dwarf_P_Die /*die*/,
char* /*var_name*/,
Dwarf_Error* /*error*/);
Dwarf_P_Debug /*dbg*/,
Dwarf_P_Die /*die*/,
char* /*weak_name*/,
Dwarf_Error* /*error*/);
/* .debug_macinfo producer functions
Functions must be called in right order: the section is output
In the order these are presented.
*/
Dwarf_Unsigned /*line*/,
char * /*macname, with (arglist), no space before (*/,
char * /*macvalue*/,
Dwarf_Error* /*error*/);
Dwarf_Unsigned /*line*/,
char * /*macname, no arglist, of course*/,
Dwarf_Error* /*error*/);
Dwarf_Unsigned /*fileindex*/,
Dwarf_Unsigned /*linenumber*/,
Dwarf_Error* /*error*/);
Dwarf_Error* /*error*/);
Dwarf_Unsigned /*constant*/,
char * /*string*/,
Dwarf_Error* /*error*/);
/* end macinfo producer functions */
Dwarf_Attribute /*attr of above die*/,
Dwarf_Off * /*returns offset thru this ptr */,
Dwarf_Error * /*error*/);
#ifdef __cplusplus
}
#endif
#endif /* _LIBDWARF_H */