1260684Skaiw/*- 2260684Skaiw * Copyright (c) 2007 John Birrell (jb@freebsd.org) 3276371Semaste * Copyright (c) 2009-2011,2014 Kai Wang 4260684Skaiw * All rights reserved. 5260684Skaiw * 6260684Skaiw * Redistribution and use in source and binary forms, with or without 7260684Skaiw * modification, are permitted provided that the following conditions 8260684Skaiw * are met: 9260684Skaiw * 1. Redistributions of source code must retain the above copyright 10260684Skaiw * notice, this list of conditions and the following disclaimer. 11260684Skaiw * 2. Redistributions in binary form must reproduce the above copyright 12260684Skaiw * notice, this list of conditions and the following disclaimer in the 13260684Skaiw * documentation and/or other materials provided with the distribution. 14260684Skaiw * 15260684Skaiw * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 16260684Skaiw * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 17260684Skaiw * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 18260684Skaiw * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 19260684Skaiw * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 20260684Skaiw * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 21260684Skaiw * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 22260684Skaiw * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 23260684Skaiw * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 24260684Skaiw * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 25260684Skaiw * SUCH DAMAGE. 26260684Skaiw * 27338414Semaste * $Id: libdwarf.h 3578 2017-09-14 02:21:28Z emaste $ 28260684Skaiw */ 29260684Skaiw 30260684Skaiw#ifndef _LIBDWARF_H_ 31260684Skaiw#define _LIBDWARF_H_ 32260684Skaiw 33260684Skaiw#include <libelf.h> 34260684Skaiw 35260684Skaiwtypedef int Dwarf_Bool; 36295577Semastetypedef uint64_t Dwarf_Off; 37260684Skaiwtypedef uint64_t Dwarf_Unsigned; 38260684Skaiwtypedef uint16_t Dwarf_Half; 39260684Skaiwtypedef uint8_t Dwarf_Small; 40260684Skaiwtypedef int64_t Dwarf_Signed; 41260684Skaiwtypedef uint64_t Dwarf_Addr; 42260684Skaiwtypedef void *Dwarf_Ptr; 43260684Skaiw 44260684Skaiwtypedef struct _Dwarf_Abbrev *Dwarf_Abbrev; 45260684Skaiwtypedef struct _Dwarf_Arange *Dwarf_Arange; 46260684Skaiwtypedef struct _Dwarf_ArangeSet *Dwarf_ArangeSet; 47260684Skaiwtypedef struct _Dwarf_Attribute *Dwarf_Attribute; 48260684Skaiwtypedef struct _Dwarf_Attribute *Dwarf_P_Attribute; 49260684Skaiwtypedef struct _Dwarf_AttrDef *Dwarf_AttrDef; 50260684Skaiwtypedef struct _Dwarf_Cie *Dwarf_Cie; 51260684Skaiwtypedef struct _Dwarf_Cie *Dwarf_P_Cie; 52260684Skaiwtypedef struct _Dwarf_Debug *Dwarf_Debug; 53260684Skaiwtypedef struct _Dwarf_Debug *Dwarf_P_Debug; 54260684Skaiwtypedef struct _Dwarf_Die *Dwarf_Die; 55260684Skaiwtypedef struct _Dwarf_Die *Dwarf_P_Die; 56260684Skaiwtypedef struct _Dwarf_Fde *Dwarf_Fde; 57260684Skaiwtypedef struct _Dwarf_Fde *Dwarf_P_Fde; 58260684Skaiwtypedef struct _Dwarf_FrameSec *Dwarf_FrameSec; 59260684Skaiwtypedef struct _Dwarf_Line *Dwarf_Line; 60260684Skaiwtypedef struct _Dwarf_LineFile *Dwarf_LineFile; 61260684Skaiwtypedef struct _Dwarf_LineInfo *Dwarf_LineInfo; 62260684Skaiwtypedef struct _Dwarf_MacroSet *Dwarf_MacroSet; 63260684Skaiwtypedef struct _Dwarf_NamePair *Dwarf_NamePair; 64260684Skaiwtypedef struct _Dwarf_NamePair *Dwarf_Func; 65260684Skaiwtypedef struct _Dwarf_NamePair *Dwarf_Global; 66260684Skaiwtypedef struct _Dwarf_NamePair *Dwarf_Type; 67260684Skaiwtypedef struct _Dwarf_NamePair *Dwarf_Var; 68260684Skaiwtypedef struct _Dwarf_NamePair *Dwarf_Weak; 69260684Skaiwtypedef struct _Dwarf_NameTbl *Dwarf_NameTbl; 70260684Skaiwtypedef struct _Dwarf_NameSec *Dwarf_NameSec; 71260684Skaiwtypedef struct _Dwarf_P_Expr *Dwarf_P_Expr; 72260684Skaiwtypedef struct _Dwarf_Rangelist *Dwarf_Rangelist; 73260684Skaiw 74260684Skaiwtypedef enum { 75260684Skaiw DW_OBJECT_MSB, 76260684Skaiw DW_OBJECT_LSB 77260684Skaiw} Dwarf_Endianness; 78260684Skaiw 79260684Skaiwtypedef struct { 80260684Skaiw Dwarf_Addr addr; 81260684Skaiw Dwarf_Unsigned size; 82260684Skaiw const char *name; 83260684Skaiw} Dwarf_Obj_Access_Section; 84260684Skaiw 85260684Skaiwtypedef struct { 86260684Skaiw int (*get_section_info)(void *_obj, Dwarf_Half _index, 87260684Skaiw Dwarf_Obj_Access_Section *_ret_section, int *_error); 88260684Skaiw Dwarf_Endianness (*get_byte_order)(void *_obj); 89260684Skaiw Dwarf_Small (*get_length_size)(void *_obj); 90260684Skaiw Dwarf_Small (*get_pointer_size)(void *_obj); 91260684Skaiw Dwarf_Unsigned (*get_section_count)(void *_obj); 92260684Skaiw int (*load_section)(void *_obj, Dwarf_Half _index, 93260684Skaiw Dwarf_Small **_ret_data, int *_error); 94260684Skaiw} Dwarf_Obj_Access_Methods; 95260684Skaiw 96260684Skaiwtypedef struct { 97260684Skaiw void *object; 98260684Skaiw const Dwarf_Obj_Access_Methods *methods; 99260684Skaiw} Dwarf_Obj_Access_Interface; 100260684Skaiw 101260684Skaiwtypedef int (*Dwarf_Callback_Func)(char *_name, int _size, 102260684Skaiw Dwarf_Unsigned _type, Dwarf_Unsigned _flags, Dwarf_Unsigned _link, 103260684Skaiw Dwarf_Unsigned _info, int *_index, int *_error); 104260684Skaiw 105260684Skaiwtypedef int (*Dwarf_Callback_Func_b)(char *_name, int _size, 106260684Skaiw Dwarf_Unsigned _type, Dwarf_Unsigned _flags, Dwarf_Unsigned _link, 107260684Skaiw Dwarf_Unsigned _info, Dwarf_Unsigned *_index, int *_error); 108260684Skaiw 109260684Skaiwtypedef Dwarf_Unsigned Dwarf_Tag; 110260684Skaiw 111260684Skaiwtypedef struct { 112260684Skaiw Dwarf_Small lr_atom; 113260684Skaiw Dwarf_Unsigned lr_number; 114260684Skaiw Dwarf_Unsigned lr_number2; 115260684Skaiw Dwarf_Unsigned lr_offset; 116260684Skaiw} Dwarf_Loc; 117260684Skaiw 118260684Skaiwtypedef struct { 119260684Skaiw Dwarf_Addr ld_lopc; 120260684Skaiw Dwarf_Addr ld_hipc; 121260684Skaiw Dwarf_Half ld_cents; 122260684Skaiw Dwarf_Loc *ld_s; 123260684Skaiw} Dwarf_Locdesc; 124260684Skaiw 125260684Skaiwtypedef struct { 126260684Skaiw char signature[8]; 127260684Skaiw} Dwarf_Sig8; 128260684Skaiw 129260684Skaiwtypedef struct { 130260684Skaiw Dwarf_Unsigned bl_len; 131260684Skaiw Dwarf_Ptr bl_data; 132260684Skaiw} Dwarf_Block; 133260684Skaiw 134260684Skaiwenum Dwarf_Ranges_Entry_Type { 135260684Skaiw DW_RANGES_ENTRY, 136260684Skaiw DW_RANGES_ADDRESS_SELECTION, 137260684Skaiw DW_RANGES_END 138260684Skaiw}; 139260684Skaiw 140260684Skaiwtypedef struct { 141260684Skaiw Dwarf_Unsigned dwr_addr1; 142260684Skaiw Dwarf_Unsigned dwr_addr2; 143260684Skaiw enum Dwarf_Ranges_Entry_Type dwr_type; 144260684Skaiw} Dwarf_Ranges; 145260684Skaiw 146260684Skaiwenum Dwarf_Form_Class { 147260684Skaiw DW_FORM_CLASS_UNKNOWN, 148260684Skaiw DW_FORM_CLASS_ADDRESS, 149260684Skaiw DW_FORM_CLASS_BLOCK, 150260684Skaiw DW_FORM_CLASS_CONSTANT, 151260684Skaiw DW_FORM_CLASS_EXPRLOC, 152260684Skaiw DW_FORM_CLASS_FLAG, 153260684Skaiw DW_FORM_CLASS_LINEPTR, 154260684Skaiw DW_FORM_CLASS_LOCLISTPTR, 155260684Skaiw DW_FORM_CLASS_MACPTR, 156260684Skaiw DW_FORM_CLASS_RANGELISTPTR, 157260684Skaiw DW_FORM_CLASS_REFERENCE, 158260684Skaiw DW_FORM_CLASS_STRING 159260684Skaiw}; 160260684Skaiw 161260684Skaiw#ifndef DW_FRAME_HIGHEST_NORMAL_REGISTER 162260684Skaiw#define DW_FRAME_HIGHEST_NORMAL_REGISTER 63 163260684Skaiw#endif 164260684Skaiw 165260684Skaiw#define DW_FRAME_RA_COL (DW_FRAME_HIGHEST_NORMAL_REGISTER + 1) 166260684Skaiw#define DW_FRAME_STATIC_LINK (DW_FRAME_HIGHEST_NORMAL_REGISTER + 2) 167260684Skaiw 168260684Skaiw#ifndef DW_FRAME_LAST_REG_NUM 169260684Skaiw#define DW_FRAME_LAST_REG_NUM (DW_FRAME_HIGHEST_NORMAL_REGISTER + 3) 170260684Skaiw#endif 171260684Skaiw 172260684Skaiw#ifndef DW_FRAME_REG_INITIAL_VALUE 173260684Skaiw#define DW_FRAME_REG_INITIAL_VALUE DW_FRAME_SAME_VAL 174260684Skaiw#endif 175260684Skaiw 176260684Skaiw#define DW_FRAME_UNDEFINED_VAL 1034 177260684Skaiw#define DW_FRAME_SAME_VAL 1035 178260684Skaiw#define DW_FRAME_CFA_COL3 1436 179260684Skaiw 180260684Skaiw#define DW_EXPR_OFFSET 0 181260684Skaiw#define DW_EXPR_VAL_OFFSET 1 182260684Skaiw#define DW_EXPR_EXPRESSION 2 183260684Skaiw#define DW_EXPR_VAL_EXPRESSION 3 184260684Skaiw 185260684Skaiw/* 186260684Skaiw * Frame operation only for DWARF 2. 187260684Skaiw */ 188260684Skaiw 189260684Skaiw#define DW_FRAME_CFA_COL 0 190260684Skaiw 191260684Skaiwtypedef struct { 192260684Skaiw Dwarf_Small fp_base_op; 193260684Skaiw Dwarf_Small fp_extended_op; 194260684Skaiw Dwarf_Half fp_register; 195260684Skaiw Dwarf_Signed fp_offset; 196260684Skaiw Dwarf_Off fp_instr_offset; 197260684Skaiw} Dwarf_Frame_Op; 198260684Skaiw 199260684Skaiw#ifndef DW_REG_TABLE_SIZE 200260684Skaiw#define DW_REG_TABLE_SIZE 66 201260684Skaiw#endif 202260684Skaiw 203260684Skaiwtypedef struct { 204260684Skaiw struct { 205260684Skaiw Dwarf_Small dw_offset_relevant; 206260684Skaiw Dwarf_Half dw_regnum; 207260684Skaiw Dwarf_Addr dw_offset; 208260684Skaiw } rules[DW_REG_TABLE_SIZE]; 209260684Skaiw} Dwarf_Regtable; 210260684Skaiw 211260684Skaiw/* 212260684Skaiw * Frame operation for DWARF 3 and DWARF 2. 213260684Skaiw */ 214260684Skaiw 215260684Skaiwtypedef struct { 216260684Skaiw Dwarf_Small fp_base_op; 217260684Skaiw Dwarf_Small fp_extended_op; 218260684Skaiw Dwarf_Half fp_register; 219260684Skaiw Dwarf_Unsigned fp_offset_or_block_len; 220260684Skaiw Dwarf_Small *fp_expr_block; 221260684Skaiw Dwarf_Off fp_instr_offset; 222260684Skaiw} Dwarf_Frame_Op3; 223260684Skaiw 224260684Skaiwtypedef struct { 225260684Skaiw Dwarf_Small dw_offset_relevant; 226260684Skaiw Dwarf_Small dw_value_type; 227260684Skaiw Dwarf_Half dw_regnum; 228260684Skaiw Dwarf_Unsigned dw_offset_or_block_len; 229260684Skaiw Dwarf_Ptr dw_block_ptr; 230260684Skaiw} Dwarf_Regtable_Entry3; 231260684Skaiw 232260684Skaiwtypedef struct { 233260684Skaiw Dwarf_Regtable_Entry3 rt3_cfa_rule; 234260684Skaiw Dwarf_Half rt3_reg_table_size; 235260684Skaiw Dwarf_Regtable_Entry3 *rt3_rules; 236260684Skaiw} Dwarf_Regtable3; 237260684Skaiw 238260684Skaiwtypedef struct { 239260684Skaiw Dwarf_Off dmd_offset; 240260684Skaiw Dwarf_Small dmd_type; 241260684Skaiw Dwarf_Signed dmd_lineno; 242260684Skaiw Dwarf_Signed dmd_fileindex; 243260684Skaiw char *dmd_macro; 244260684Skaiw} Dwarf_Macro_Details; 245260684Skaiw 246260684Skaiw/* 247260684Skaiw * Symbols denoting allocation types, for use with dwarf_dealloc(3). 248260684Skaiw */ 249260684Skaiw 250260684Skaiwenum Dwarf_Allocation_Type { 251260684Skaiw DW_DLA_ABBREV, 252260684Skaiw DW_DLA_ADDR, 253260684Skaiw DW_DLA_ARANGE, 254260684Skaiw DW_DLA_ATTR, 255260684Skaiw DW_DLA_BLOCK, 256260684Skaiw DW_DLA_BOUNDS, 257260684Skaiw DW_DLA_CIE, 258260684Skaiw DW_DLA_DEBUG, 259260684Skaiw DW_DLA_DIE, 260260684Skaiw DW_DLA_ELLIST, 261260684Skaiw DW_DLA_ERROR, 262260684Skaiw DW_DLA_FDE, 263260684Skaiw DW_DLA_FRAME_BLOCK, 264260684Skaiw DW_DLA_FRAME_OP, 265260684Skaiw DW_DLA_FUNC, 266260684Skaiw DW_DLA_GLOBAL, 267260684Skaiw DW_DLA_LINE, 268260684Skaiw DW_DLA_LINEBUF, 269260684Skaiw DW_DLA_LIST, 270260684Skaiw DW_DLA_LOC, 271260684Skaiw DW_DLA_LOCDESC, 272260684Skaiw DW_DLA_LOC_BLOCK, 273260684Skaiw DW_DLA_RANGES, 274260684Skaiw DW_DLA_STRING, 275260684Skaiw DW_DLA_SUBSCR, 276260684Skaiw DW_DLA_TYPE, 277260684Skaiw DW_DLA_TYPENAME, 278260684Skaiw DW_DLA_VAR, 279260684Skaiw DW_DLA_WEAK 280260684Skaiw}; 281260684Skaiw 282260684Skaiw/* 283260684Skaiw * Relocation Type. 284260684Skaiw */ 285260684Skaiwenum Dwarf_Rel_Type { 286260684Skaiw dwarf_drt_none = 0, 287260684Skaiw dwarf_drt_data_reloc, 288260684Skaiw dwarf_drt_segment_rel, 289260684Skaiw dwarf_drt_first_of_length_pair, 290260684Skaiw dwarf_drt_second_of_length_pair 291260684Skaiw}; 292260684Skaiw 293260684Skaiw/* 294260684Skaiw * Relocation Entry. 295260684Skaiw */ 296260684Skaiwtypedef struct Dwarf_Relocation_Data_s { 297260684Skaiw unsigned char drd_type; 298260684Skaiw unsigned char drd_length; 299260684Skaiw Dwarf_Unsigned drd_offset; 300260684Skaiw Dwarf_Unsigned drd_symbol_index; 301260684Skaiw} *Dwarf_Relocation_Data; 302260684Skaiw 303260684Skaiw#define DWARF_DRD_BUFFER_VERSION 2 304260684Skaiw 305260684Skaiw/* 306260684Skaiw * Error numbers which are specific to this implementation. 307260684Skaiw */ 308260684Skaiwenum { 309260684Skaiw DW_DLE_NONE, /* No error. */ 310260684Skaiw DW_DLE_ERROR, /* An error! */ 311260684Skaiw DW_DLE_ARGUMENT, /* Invalid argument. */ 312260684Skaiw DW_DLE_DEBUG_INFO_NULL, /* Debug info NULL. */ 313260684Skaiw DW_DLE_NO_ENTRY, /* No entry. */ 314260684Skaiw DW_DLE_MEMORY, /* Insufficient memory. */ 315260684Skaiw DW_DLE_ELF, /* ELF error. */ 316260684Skaiw DW_DLE_CU_LENGTH_ERROR, /* Invalid compilation unit data. */ 317260684Skaiw DW_DLE_VERSION_STAMP_ERROR, /* Invalid version. */ 318260684Skaiw DW_DLE_DEBUG_ABBREV_NULL, /* Abbrev not found. */ 319260684Skaiw DW_DLE_DIE_NO_CU_CONTEXT, /* No current compilation unit. */ 320260684Skaiw DW_DLE_LOC_EXPR_BAD, /* Invalid location expression. */ 321260684Skaiw DW_DLE_EXPR_LENGTH_BAD, /* Invalid DWARF expression. */ 322260684Skaiw DW_DLE_DEBUG_LOC_SECTION_SHORT, /* Loclist section too short. */ 323260684Skaiw DW_DLE_ATTR_FORM_BAD, /* Invalid attribute form. */ 324260684Skaiw DW_DLE_DEBUG_LINE_LENGTH_BAD, /* Line info section too short. */ 325260684Skaiw DW_DLE_LINE_FILE_NUM_BAD, /* Invalid file number. */ 326260684Skaiw DW_DLE_DIR_INDEX_BAD, /* Invalid dir index. */ 327260684Skaiw DW_DLE_DEBUG_FRAME_LENGTH_BAD, /* Frame section too short. */ 328260684Skaiw DW_DLE_NO_CIE_FOR_FDE, /* CIE not found for certain FDE. */ 329260684Skaiw DW_DLE_FRAME_AUGMENTATION_UNKNOWN, /* Unknown CIE augmentation. */ 330260684Skaiw DW_DLE_FRAME_INSTR_EXEC_ERROR, /* Frame instruction exec error. */ 331260684Skaiw DW_DLE_FRAME_VERSION_BAD, /* Invalid frame section version. */ 332260684Skaiw DW_DLE_FRAME_TABLE_COL_BAD, /* Invalid table column. */ 333260684Skaiw DW_DLE_DF_REG_NUM_TOO_HIGH, /* Insufficient regtable space. */ 334260684Skaiw DW_DLE_PC_NOT_IN_FDE_RANGE, /* PC requested not in the FDE range. */ 335260684Skaiw DW_DLE_ARANGE_OFFSET_BAD, /* Invalid arange offset. */ 336260684Skaiw DW_DLE_DEBUG_MACRO_INCONSISTENT,/* Invalid macinfo data. */ 337260684Skaiw DW_DLE_ELF_SECT_ERR, /* Application callback failed. */ 338260684Skaiw DW_DLE_NUM /* Max error number. */ 339260684Skaiw}; 340260684Skaiw 341260684Skaiw/* 342260684Skaiw * Mapping of SGI libdwarf error codes for comptibility. 343260684Skaiw */ 344260684Skaiw#define DW_DLE_DBG_ALLOC DW_DLE_MEMORY 345260684Skaiw#define DW_DLE_ALLOC_FAIL DW_DLE_MEMORY 346260684Skaiw#define DW_DLE_SECT_ALLOC DW_DLE_MEMORY 347260684Skaiw#define DW_DLE_FILE_ENTRY_ALLOC DW_DLE_MEMORY 348260684Skaiw#define DW_DLE_LINE_ALLOC DW_DLE_MEMORY 349260684Skaiw#define DW_DLE_FPGM_ALLOC DW_DLE_MEMORY 350260684Skaiw#define DW_DLE_INCDIR_ALLOC DW_DLE_MEMORY 351260684Skaiw#define DW_DLE_STRING_ALLOC DW_DLE_MEMORY 352260684Skaiw#define DW_DLE_CHUNK_ALLOC DW_DLE_MEMORY 353260684Skaiw#define DW_DLE_CIE_ALLOC DW_DLE_MEMORY 354260684Skaiw#define DW_DLE_FDE_ALLOC DW_DLE_MEMORY 355260684Skaiw#define DW_DLE_CIE_OFFS_ALLOC DW_DLE_MEMORY 356260684Skaiw#define DW_DLE_DIE_ALLOC DW_DLE_MEMORY 357260684Skaiw#define DW_DLE_ATTR_ALLOC DW_DLE_MEMORY 358260684Skaiw#define DW_DLE_ABBREV_ALLOC DW_DLE_MEMORY 359260684Skaiw#define DW_DLE_ADDR_ALLOC DW_DLE_MEMORY 360260684Skaiw#define DW_DLE_REL_ALLOC DW_DLE_MEMORY 361260684Skaiw#define DW_DLE_MACINFO_MALLOC_FAIL DW_DLE_MEMORY 362260684Skaiw#define DW_DLE_DEBUG_MACRO_MALLOC_SPACE DW_DLE_MEMORY 363260684Skaiw#define DW_DLE_DF_ALLOC_FAIL DW_DLE_MEMORY 364260684Skaiw#define DW_DLE_RELOC_SECTION_MALLOC_FAIL DW_DLE_MEMORY 365260684Skaiw#define DW_DLE_DBG_NULL DW_DLE_ARGUMENT 366260684Skaiw#define DW_DLE_DIE_NULL DW_DLE_ARGUMENT 367260684Skaiw#define DW_DLE_FDE_NULL DW_DLE_ARGUMENT 368260684Skaiw#define DW_DLE_CIE_NULL DW_DLE_ARGUMENT 369260684Skaiw#define DW_DLE_ATTR_NULL DW_DLE_ARGUMENT 370260684Skaiw#define DW_DLE_GLOBAL_NULL DW_DLE_ARGUMENT 371260684Skaiw#define DW_DLE_ARANGES_NULL DW_DLE_ARGUMENT 372260684Skaiw#define DW_DLE_ARANGE_NULL DW_DLE_ARGUMENT 373260684Skaiw#define DW_DLE_EXPR_NULL DW_DLE_ARGUMENT 374260684Skaiw#define DW_DLE_FUNC_NULL DW_DLE_ARGUMENT 375260684Skaiw#define DW_DLE_TYPE_NULL DW_DLE_ARGUMENT 376260684Skaiw#define DW_DLE_VAR_NULL DW_DLE_ARGUMENT 377260684Skaiw#define DW_DLE_WEAK_NULL DW_DLE_ARGUMENT 378260684Skaiw#define DW_DLE_ELF_BEGIN_ERROR DW_DLE_ELF 379260684Skaiw#define DW_DLE_ELF_GETEHDR_ERROR DW_DLE_ELF 380260684Skaiw#define DW_DLE_ELF_GETSHDR_ERROR DW_DLE_ELF 381260684Skaiw#define DW_DLE_ELF_STRPTR_ERROR DW_DLE_ELF 382260684Skaiw#define DW_DLE_ELF_SECT_ERROR DW_DLE_ELF 383260684Skaiw#define DW_DLE_ELF_GETIDENT_ERROR DW_DLE_ELF 384260684Skaiw 385260684Skaiwtypedef struct _Dwarf_Error { 386260684Skaiw int err_error; /* DWARF error. */ 387260684Skaiw int err_elferror; /* ELF error. */ 388260684Skaiw const char *err_func; /* Function name where error occurred. */ 389260684Skaiw int err_line; /* Line number where error occurred. */ 390260684Skaiw char err_msg[1024]; /* Formatted error message. */ 391260684Skaiw} Dwarf_Error; 392260684Skaiw 393260684Skaiw/* 394260684Skaiw * Dwarf error handler. 395260684Skaiw */ 396260684Skaiwtypedef void (*Dwarf_Handler)(Dwarf_Error, Dwarf_Ptr); 397260684Skaiw 398260684Skaiw#define dwarf_errno(error) error.err_error 399260684Skaiw#define dwarf_errmsg(error) dwarf_errmsg_(&error) 400260684Skaiw 401260684Skaiw/* 402260684Skaiw * Return values which have to be compatible with other 403260684Skaiw * implementations of libdwarf. 404260684Skaiw */ 405260684Skaiw#define DW_DLV_NO_ENTRY -1 406260684Skaiw#define DW_DLV_OK 0 407260684Skaiw#define DW_DLV_ERROR 1 408260684Skaiw#define DW_DLV_BADADDR NULL 409260684Skaiw#define DW_DLV_NOCOUNT ((Dwarf_Signed) -1) 410260684Skaiw 411260684Skaiw/* 412260684Skaiw * Access modes. 413260684Skaiw */ 414260684Skaiw#define DW_DLC_READ 0x0001 415260684Skaiw#define DW_DLC_WRITE 0x0002 416260684Skaiw#define DW_DLC_RDWR 0x0004 417260684Skaiw 418260684Skaiw/* 419260684Skaiw * Flags used by libdwarf producer. 420260684Skaiw */ 421260684Skaiw#define DW_DLC_SIZE_64 0x40000000 422260684Skaiw#define DW_DLC_SIZE_32 0x20000000 423260684Skaiw#define DW_DLC_OFFSET_SIZE_64 0x10000000 424260684Skaiw#define DW_DLC_ISA_MIPS 0x80000000 425260684Skaiw#define DW_DLC_ISA_IA64 0x01000000 426260684Skaiw#define DW_DLC_STREAM_RELOCATIONS 0x02000000 427260684Skaiw#define DW_DLC_SYMBOLIC_RELOCATIONS 0x04000000 428260684Skaiw#define DW_DLC_TARGET_BIGENDIAN 0x08000000 429260684Skaiw#define DW_DLC_TARGET_LITTLEENDIAN 0x00100000 430260684Skaiw 431260684Skaiw/* 432260684Skaiw * Instruction set architectures supported by this implementation. 433260684Skaiw */ 434260684Skaiwenum Dwarf_ISA { 435260684Skaiw DW_ISA_ARM, 436260684Skaiw DW_ISA_IA64, 437260684Skaiw DW_ISA_MIPS, 438260684Skaiw DW_ISA_PPC, 439260684Skaiw DW_ISA_SPARC, 440260684Skaiw DW_ISA_X86, 441260684Skaiw DW_ISA_X86_64, 442278580Semaste DW_ISA_AARCH64, 443300675Sbr DW_ISA_RISCV, 444260684Skaiw DW_ISA_MAX 445260684Skaiw}; 446260684Skaiw 447260684Skaiw/* Function prototype definitions. */ 448280932Semaste#ifdef __cplusplus 449280932Semasteextern "C" { 450280932Semaste#endif 451260684SkaiwDwarf_P_Attribute dwarf_add_AT_comp_dir(Dwarf_P_Die, char *, Dwarf_Error *); 452260684SkaiwDwarf_P_Attribute dwarf_add_AT_const_value_signedint(Dwarf_P_Die, Dwarf_Signed, 453260684Skaiw Dwarf_Error *); 454260684SkaiwDwarf_P_Attribute dwarf_add_AT_const_value_string(Dwarf_P_Die, char *, 455260684Skaiw Dwarf_Error *); 456260684SkaiwDwarf_P_Attribute dwarf_add_AT_const_value_unsignedint(Dwarf_P_Die, 457260684Skaiw Dwarf_Unsigned, Dwarf_Error *); 458260684SkaiwDwarf_P_Attribute dwarf_add_AT_dataref(Dwarf_P_Debug, Dwarf_P_Die, Dwarf_Half, 459260684Skaiw Dwarf_Unsigned, Dwarf_Unsigned, Dwarf_Error *); 460260684SkaiwDwarf_P_Attribute dwarf_add_AT_flag(Dwarf_P_Debug, Dwarf_P_Die, Dwarf_Half, 461260684Skaiw Dwarf_Small, Dwarf_Error *); 462260684SkaiwDwarf_P_Attribute dwarf_add_AT_location_expr(Dwarf_P_Debug, Dwarf_P_Die, 463260684Skaiw Dwarf_Half, Dwarf_P_Expr, Dwarf_Error *); 464260684SkaiwDwarf_P_Attribute dwarf_add_AT_name(Dwarf_P_Die, char *, Dwarf_Error *); 465260684SkaiwDwarf_P_Attribute dwarf_add_AT_producer(Dwarf_P_Die, char *, Dwarf_Error *); 466260684SkaiwDwarf_P_Attribute dwarf_add_AT_ref_address(Dwarf_P_Debug, Dwarf_P_Die, 467260684Skaiw Dwarf_Half, Dwarf_Unsigned, Dwarf_Unsigned, Dwarf_Error *); 468260684SkaiwDwarf_P_Attribute dwarf_add_AT_reference(Dwarf_P_Debug, Dwarf_P_Die, Dwarf_Half, 469260684Skaiw Dwarf_P_Die, Dwarf_Error *); 470260684SkaiwDwarf_P_Attribute dwarf_add_AT_signed_const(Dwarf_P_Debug, Dwarf_P_Die, 471260684Skaiw Dwarf_Half, Dwarf_Signed, Dwarf_Error *); 472260684SkaiwDwarf_P_Attribute dwarf_add_AT_string(Dwarf_P_Debug, Dwarf_P_Die, Dwarf_Half, 473260684Skaiw char *, Dwarf_Error *); 474260684SkaiwDwarf_P_Attribute dwarf_add_AT_targ_address(Dwarf_P_Debug, Dwarf_P_Die, 475260684Skaiw Dwarf_Half, Dwarf_Unsigned, Dwarf_Signed, Dwarf_Error *); 476260684SkaiwDwarf_P_Attribute dwarf_add_AT_targ_address_b(Dwarf_P_Debug, Dwarf_P_Die, 477260684Skaiw Dwarf_Half, Dwarf_Unsigned, Dwarf_Unsigned, Dwarf_Error *); 478260684SkaiwDwarf_P_Attribute dwarf_add_AT_unsigned_const(Dwarf_P_Debug, Dwarf_P_Die, 479260684Skaiw Dwarf_Half, Dwarf_Unsigned, Dwarf_Error *); 480260684SkaiwDwarf_Unsigned dwarf_add_arange(Dwarf_P_Debug, Dwarf_Addr, Dwarf_Unsigned, 481260684Skaiw Dwarf_Signed, Dwarf_Error *); 482260684SkaiwDwarf_Unsigned dwarf_add_arange_b(Dwarf_P_Debug, Dwarf_Addr, Dwarf_Unsigned, 483260684Skaiw Dwarf_Unsigned, Dwarf_Unsigned, Dwarf_Addr, Dwarf_Error *); 484260684SkaiwDwarf_Unsigned dwarf_add_die_to_debug(Dwarf_P_Debug, Dwarf_P_Die, 485260684Skaiw Dwarf_Error *); 486260684SkaiwDwarf_Unsigned dwarf_add_directory_decl(Dwarf_P_Debug, char *, Dwarf_Error *); 487260684SkaiwDwarf_Unsigned dwarf_add_expr_addr(Dwarf_P_Expr, Dwarf_Unsigned, 488260684Skaiw Dwarf_Signed, Dwarf_Error *); 489260684SkaiwDwarf_Unsigned dwarf_add_expr_addr_b(Dwarf_P_Expr, Dwarf_Unsigned, 490260684Skaiw Dwarf_Unsigned, Dwarf_Error *); 491260684SkaiwDwarf_Unsigned dwarf_add_expr_gen(Dwarf_P_Expr, Dwarf_Small, Dwarf_Unsigned, 492260684Skaiw Dwarf_Unsigned, Dwarf_Error *); 493260684SkaiwDwarf_P_Fde dwarf_add_fde_inst(Dwarf_P_Fde, Dwarf_Small, Dwarf_Unsigned, 494260684Skaiw Dwarf_Unsigned, Dwarf_Error *); 495260684SkaiwDwarf_Unsigned dwarf_add_file_decl(Dwarf_P_Debug, char *, Dwarf_Unsigned, 496260684Skaiw Dwarf_Unsigned, Dwarf_Unsigned, Dwarf_Error *); 497260684SkaiwDwarf_Unsigned dwarf_add_frame_cie(Dwarf_P_Debug, char *, Dwarf_Small, 498260684Skaiw Dwarf_Small, Dwarf_Small, Dwarf_Ptr, Dwarf_Unsigned, 499260684Skaiw Dwarf_Error *); 500260684SkaiwDwarf_Unsigned dwarf_add_frame_fde(Dwarf_P_Debug, Dwarf_P_Fde, Dwarf_P_Die, 501260684Skaiw Dwarf_Unsigned, Dwarf_Addr, Dwarf_Unsigned, Dwarf_Unsigned, 502260684Skaiw Dwarf_Error *); 503260684SkaiwDwarf_Unsigned dwarf_add_frame_fde_b(Dwarf_P_Debug, Dwarf_P_Fde, Dwarf_P_Die, 504260684Skaiw Dwarf_Unsigned, Dwarf_Addr, Dwarf_Unsigned, Dwarf_Unsigned, 505260684Skaiw Dwarf_Unsigned, Dwarf_Addr, Dwarf_Error *); 506260684SkaiwDwarf_Unsigned dwarf_add_funcname(Dwarf_P_Debug, Dwarf_P_Die, char *, 507260684Skaiw Dwarf_Error *); 508260684SkaiwDwarf_Unsigned dwarf_add_line_entry(Dwarf_P_Debug, Dwarf_Unsigned, 509260684Skaiw Dwarf_Addr, Dwarf_Unsigned, Dwarf_Signed, Dwarf_Bool, 510260684Skaiw Dwarf_Bool, Dwarf_Error *); 511260684SkaiwDwarf_Unsigned dwarf_add_pubname(Dwarf_P_Debug, Dwarf_P_Die, char *, 512260684Skaiw Dwarf_Error *); 513260684SkaiwDwarf_Unsigned dwarf_add_typename(Dwarf_P_Debug, Dwarf_P_Die, char *, 514260684Skaiw Dwarf_Error *); 515260684SkaiwDwarf_Unsigned dwarf_add_varname(Dwarf_P_Debug, Dwarf_P_Die, char *, 516260684Skaiw Dwarf_Error *); 517260684SkaiwDwarf_Unsigned dwarf_add_weakname(Dwarf_P_Debug, Dwarf_P_Die, char *, 518260684Skaiw Dwarf_Error *); 519260684Skaiwint dwarf_arrayorder(Dwarf_Die, Dwarf_Unsigned *, Dwarf_Error *); 520260684Skaiwint dwarf_attr(Dwarf_Die, Dwarf_Half, Dwarf_Attribute *, 521260684Skaiw Dwarf_Error *); 522260684Skaiwint dwarf_attrlist(Dwarf_Die, Dwarf_Attribute **, 523260684Skaiw Dwarf_Signed *, Dwarf_Error *); 524276371Semasteint dwarf_attroffset(Dwarf_Attribute, Dwarf_Off *, Dwarf_Error *); 525260684Skaiwint dwarf_attrval_flag(Dwarf_Die, Dwarf_Half, Dwarf_Bool *, 526260684Skaiw Dwarf_Error *); 527260684Skaiwint dwarf_attrval_signed(Dwarf_Die, Dwarf_Half, Dwarf_Signed *, 528260684Skaiw Dwarf_Error *); 529260684Skaiwint dwarf_attrval_string(Dwarf_Die, Dwarf_Half, const char **, 530260684Skaiw Dwarf_Error *); 531260684Skaiwint dwarf_attrval_unsigned(Dwarf_Die, Dwarf_Half, Dwarf_Unsigned *, 532260684Skaiw Dwarf_Error *); 533260684Skaiwint dwarf_bitoffset(Dwarf_Die, Dwarf_Unsigned *, Dwarf_Error *); 534260684Skaiwint dwarf_bitsize(Dwarf_Die, Dwarf_Unsigned *, Dwarf_Error *); 535260684Skaiwint dwarf_bytesize(Dwarf_Die, Dwarf_Unsigned *, Dwarf_Error *); 536260684Skaiwint dwarf_child(Dwarf_Die, Dwarf_Die *, Dwarf_Error *); 537260684Skaiwvoid dwarf_dealloc(Dwarf_Debug, Dwarf_Ptr, Dwarf_Unsigned); 538260684Skaiwint dwarf_def_macro(Dwarf_P_Debug, Dwarf_Unsigned, char *, char *, 539260684Skaiw Dwarf_Error *); 540260684Skaiwint dwarf_die_CU_offset(Dwarf_Die, Dwarf_Off *, Dwarf_Error *); 541260684Skaiwint dwarf_die_CU_offset_range(Dwarf_Die, Dwarf_Off *, Dwarf_Off *, 542260684Skaiw Dwarf_Error *); 543260684Skaiwint dwarf_die_abbrev_code(Dwarf_Die); 544260684SkaiwDwarf_P_Die dwarf_die_link(Dwarf_P_Die, Dwarf_P_Die, Dwarf_P_Die, 545260684Skaiw Dwarf_P_Die, Dwarf_P_Die, Dwarf_Error *); 546260684Skaiwint dwarf_diename(Dwarf_Die, char **, Dwarf_Error *); 547260684Skaiwint dwarf_dieoffset(Dwarf_Die, Dwarf_Off *, Dwarf_Error *); 548260684Skaiwint dwarf_elf_init(Elf *, int, Dwarf_Handler, Dwarf_Ptr, 549260684Skaiw Dwarf_Debug *, Dwarf_Error *); 550260684Skaiwint dwarf_end_macro_file(Dwarf_P_Debug, Dwarf_Error *); 551260684Skaiwconst char *dwarf_errmsg_(Dwarf_Error *); 552260684Skaiwint dwarf_expand_frame_instructions(Dwarf_Cie, Dwarf_Ptr, 553260684Skaiw Dwarf_Unsigned, Dwarf_Frame_Op **, Dwarf_Signed *, 554260684Skaiw Dwarf_Error *); 555260684SkaiwDwarf_Unsigned dwarf_expr_current_offset(Dwarf_P_Expr, Dwarf_Error *); 556260684SkaiwDwarf_Addr dwarf_expr_into_block(Dwarf_P_Expr, Dwarf_Unsigned *, 557260684Skaiw Dwarf_Error *); 558260684SkaiwDwarf_P_Fde dwarf_fde_cfa_offset(Dwarf_P_Fde, Dwarf_Unsigned, Dwarf_Signed, 559260684Skaiw Dwarf_Error *); 560260684Skaiwvoid dwarf_fde_cie_list_dealloc(Dwarf_Debug, Dwarf_Cie *, 561260684Skaiw Dwarf_Signed, Dwarf_Fde *, Dwarf_Signed); 562260684Skaiwchar *dwarf_find_macro_value_start(char *); 563260684Skaiwint dwarf_finish(Dwarf_Debug, Dwarf_Error *); 564260684Skaiwint dwarf_formaddr(Dwarf_Attribute, Dwarf_Addr *, Dwarf_Error *); 565260684Skaiwint dwarf_formblock(Dwarf_Attribute, Dwarf_Block **, Dwarf_Error *); 566260684Skaiwint dwarf_formexprloc(Dwarf_Attribute, Dwarf_Unsigned *, 567260684Skaiw Dwarf_Ptr *, Dwarf_Error *); 568260684Skaiwint dwarf_formflag(Dwarf_Attribute, Dwarf_Bool *, Dwarf_Error *); 569260684Skaiwint dwarf_formref(Dwarf_Attribute, Dwarf_Off *, Dwarf_Error *); 570260684Skaiwint dwarf_formsdata(Dwarf_Attribute, Dwarf_Signed *, Dwarf_Error *); 571260684Skaiwint dwarf_formsig8(Dwarf_Attribute, Dwarf_Sig8 *, Dwarf_Error *); 572260684Skaiwint dwarf_formstring(Dwarf_Attribute, char **, Dwarf_Error *); 573260684Skaiwint dwarf_formudata(Dwarf_Attribute, Dwarf_Unsigned *, 574260684Skaiw Dwarf_Error *); 575260684Skaiwint dwarf_func_cu_offset(Dwarf_Func, Dwarf_Off *, Dwarf_Error *); 576260684Skaiwint dwarf_func_die_offset(Dwarf_Func, Dwarf_Off *, 577260684Skaiw Dwarf_Error *); 578260684Skaiwint dwarf_func_name_offsets(Dwarf_Func, char **, 579260684Skaiw Dwarf_Off *, Dwarf_Off *, Dwarf_Error *); 580260684Skaiwint dwarf_funcname(Dwarf_Func, char **, Dwarf_Error *); 581260684Skaiwvoid dwarf_funcs_dealloc(Dwarf_Debug, Dwarf_Func *, Dwarf_Signed); 582260684Skaiwint dwarf_get_ACCESS_name(unsigned, const char **); 583260684Skaiwint dwarf_get_ATE_name(unsigned, const char **); 584260684Skaiwint dwarf_get_AT_name(unsigned, const char **); 585260684Skaiwint dwarf_get_CC_name(unsigned, const char **); 586260684Skaiwint dwarf_get_CFA_name(unsigned, const char **); 587260684Skaiwint dwarf_get_CHILDREN_name(unsigned, const char **); 588260684Skaiwint dwarf_get_DSC_name(unsigned, const char **); 589260684Skaiwint dwarf_get_DS_name(unsigned, const char **); 590260684Skaiwint dwarf_get_EH_name(unsigned, const char **); 591260684Skaiwint dwarf_get_END_name(unsigned, const char **); 592260684Skaiwint dwarf_get_FORM_name(unsigned, const char **); 593260684Skaiwint dwarf_get_ID_name(unsigned, const char **); 594260684Skaiwint dwarf_get_INL_name(unsigned, const char **); 595260684Skaiwint dwarf_get_LANG_name(unsigned, const char **); 596260684Skaiwint dwarf_get_LNE_name(unsigned, const char **); 597260684Skaiwint dwarf_get_LNS_name(unsigned, const char **); 598260684Skaiwint dwarf_get_MACINFO_name(unsigned, const char **); 599260684Skaiwint dwarf_get_OP_name(unsigned, const char **); 600260684Skaiwint dwarf_get_ORD_name(unsigned, const char **); 601260684Skaiwint dwarf_get_TAG_name(unsigned, const char **); 602260684Skaiwint dwarf_get_VIRTUALITY_name(unsigned, const char **); 603260684Skaiwint dwarf_get_VIS_name(unsigned, const char **); 604260684Skaiwint dwarf_get_abbrev(Dwarf_Debug, Dwarf_Unsigned, Dwarf_Abbrev *, 605260684Skaiw Dwarf_Unsigned *, Dwarf_Unsigned *, Dwarf_Error *); 606260684Skaiwint dwarf_get_abbrev_children_flag(Dwarf_Abbrev, Dwarf_Signed *, 607260684Skaiw Dwarf_Error *); 608260684Skaiwint dwarf_get_abbrev_code(Dwarf_Abbrev, Dwarf_Unsigned *, 609260684Skaiw Dwarf_Error *); 610260684Skaiwint dwarf_get_abbrev_entry(Dwarf_Abbrev, Dwarf_Signed, Dwarf_Half *, 611260684Skaiw Dwarf_Signed *, Dwarf_Off *, Dwarf_Error *); 612260684Skaiwint dwarf_get_abbrev_tag(Dwarf_Abbrev, Dwarf_Half *, Dwarf_Error *); 613260684Skaiwint dwarf_get_address_size(Dwarf_Debug, Dwarf_Half *, 614260684Skaiw Dwarf_Error *); 615260684Skaiwint dwarf_get_arange(Dwarf_Arange *, Dwarf_Unsigned, Dwarf_Addr, 616260684Skaiw Dwarf_Arange *, Dwarf_Error *); 617260684Skaiwint dwarf_get_arange_cu_header_offset(Dwarf_Arange, Dwarf_Off *, 618260684Skaiw Dwarf_Error *); 619260684Skaiwint dwarf_get_arange_info(Dwarf_Arange, Dwarf_Addr *, 620260684Skaiw Dwarf_Unsigned *, Dwarf_Off *, Dwarf_Error *); 621260684Skaiwint dwarf_get_aranges(Dwarf_Debug, Dwarf_Arange **, Dwarf_Signed *, 622260684Skaiw Dwarf_Error *); 623260684Skaiwint dwarf_get_cie_index(Dwarf_Cie, Dwarf_Signed *, Dwarf_Error *); 624260684Skaiwint dwarf_get_cie_info(Dwarf_Cie, Dwarf_Unsigned *, Dwarf_Small *, 625260684Skaiw char **, Dwarf_Unsigned *, Dwarf_Unsigned *, Dwarf_Half *, 626260684Skaiw Dwarf_Ptr *, Dwarf_Unsigned *, Dwarf_Error *); 627260684Skaiwint dwarf_get_cie_of_fde(Dwarf_Fde, Dwarf_Cie *, Dwarf_Error *); 628260684Skaiwint dwarf_get_cu_die_offset(Dwarf_Arange, Dwarf_Off *, 629260684Skaiw Dwarf_Error *); 630260684Skaiwint dwarf_get_cu_die_offset_given_cu_header_offset(Dwarf_Debug, 631260684Skaiw Dwarf_Off, Dwarf_Off *, Dwarf_Error *); 632276371Semasteint dwarf_get_cu_die_offset_given_cu_header_offset_b(Dwarf_Debug, 633276371Semaste Dwarf_Off, Dwarf_Bool, Dwarf_Off *, Dwarf_Error *); 634276371SemasteDwarf_Bool dwarf_get_die_infotypes_flag(Dwarf_Die); 635260684Skaiwint dwarf_get_elf(Dwarf_Debug, Elf **, Dwarf_Error *); 636260684Skaiwint dwarf_get_fde_at_pc(Dwarf_Fde *, Dwarf_Addr, Dwarf_Fde *, 637260684Skaiw Dwarf_Addr *, Dwarf_Addr *, Dwarf_Error *); 638260684Skaiwint dwarf_get_fde_info_for_all_regs(Dwarf_Fde, Dwarf_Addr, 639260684Skaiw Dwarf_Regtable *, Dwarf_Addr *, Dwarf_Error *); 640260684Skaiwint dwarf_get_fde_info_for_all_regs3(Dwarf_Fde, Dwarf_Addr, 641260684Skaiw Dwarf_Regtable3 *, Dwarf_Addr *, Dwarf_Error *); 642260684Skaiwint dwarf_get_fde_info_for_cfa_reg3(Dwarf_Fde, Dwarf_Addr, 643260684Skaiw Dwarf_Small *, Dwarf_Signed *, Dwarf_Signed *, Dwarf_Signed *, 644260684Skaiw Dwarf_Ptr *, Dwarf_Addr *, Dwarf_Error *); 645260684Skaiwint dwarf_get_fde_info_for_reg(Dwarf_Fde, Dwarf_Half, Dwarf_Addr, 646260684Skaiw Dwarf_Signed *, Dwarf_Signed *, Dwarf_Signed *, 647260684Skaiw Dwarf_Addr *, Dwarf_Error *); 648260684Skaiwint dwarf_get_fde_info_for_reg3(Dwarf_Fde, Dwarf_Half, Dwarf_Addr, 649260684Skaiw Dwarf_Small *, Dwarf_Signed *, Dwarf_Signed *, 650260684Skaiw Dwarf_Signed *, Dwarf_Ptr *, Dwarf_Addr *, Dwarf_Error *); 651260684Skaiwint dwarf_get_fde_instr_bytes(Dwarf_Fde, Dwarf_Ptr *, 652260684Skaiw Dwarf_Unsigned *, Dwarf_Error *); 653260684Skaiwint dwarf_get_fde_list(Dwarf_Debug, Dwarf_Cie **, Dwarf_Signed *, 654260684Skaiw Dwarf_Fde **, Dwarf_Signed *, Dwarf_Error *); 655260684Skaiwint dwarf_get_fde_list_eh(Dwarf_Debug, Dwarf_Cie **, Dwarf_Signed *, 656260684Skaiw Dwarf_Fde **, Dwarf_Signed *, Dwarf_Error *); 657260684Skaiwint dwarf_get_fde_n(Dwarf_Fde *, Dwarf_Unsigned, Dwarf_Fde *, 658260684Skaiw Dwarf_Error *); 659260684Skaiwint dwarf_get_fde_range(Dwarf_Fde, Dwarf_Addr *, Dwarf_Unsigned *, 660260684Skaiw Dwarf_Ptr *, Dwarf_Unsigned *, Dwarf_Off *, Dwarf_Signed *, 661260684Skaiw Dwarf_Off *, Dwarf_Error *); 662260684Skaiwenum Dwarf_Form_Class dwarf_get_form_class(Dwarf_Half, Dwarf_Half, Dwarf_Half, 663260684Skaiw Dwarf_Half); 664260684Skaiwint dwarf_get_funcs(Dwarf_Debug, Dwarf_Func **, Dwarf_Signed *, 665260684Skaiw Dwarf_Error *); 666260684Skaiwint dwarf_get_globals(Dwarf_Debug, Dwarf_Global **, Dwarf_Signed *, 667260684Skaiw Dwarf_Error *); 668260684Skaiwint dwarf_get_loclist_entry(Dwarf_Debug, Dwarf_Unsigned, 669260684Skaiw Dwarf_Addr *, Dwarf_Addr *, Dwarf_Ptr *, Dwarf_Unsigned *, 670260684Skaiw Dwarf_Unsigned *, Dwarf_Error *); 671260684Skaiwint dwarf_get_macro_details(Dwarf_Debug, Dwarf_Off, Dwarf_Unsigned, 672260684Skaiw Dwarf_Signed *, Dwarf_Macro_Details **, Dwarf_Error *); 673260684Skaiwint dwarf_get_pubtypes(Dwarf_Debug, Dwarf_Type **, Dwarf_Signed *, 674260684Skaiw Dwarf_Error *); 675260684Skaiwint dwarf_get_ranges(Dwarf_Debug, Dwarf_Off, Dwarf_Ranges **, 676260684Skaiw Dwarf_Signed *, Dwarf_Unsigned *, Dwarf_Error *); 677260684Skaiwint dwarf_get_ranges_a(Dwarf_Debug, Dwarf_Off, Dwarf_Die, 678260684Skaiw Dwarf_Ranges **, Dwarf_Signed *, Dwarf_Unsigned *, 679260684Skaiw Dwarf_Error *); 680260684Skaiwint dwarf_get_relocation_info(Dwarf_P_Debug, Dwarf_Signed *, 681260684Skaiw Dwarf_Signed *, Dwarf_Unsigned *, Dwarf_Relocation_Data *, 682260684Skaiw Dwarf_Error *); 683260684Skaiwint dwarf_get_relocation_info_count(Dwarf_P_Debug, Dwarf_Unsigned *, 684260684Skaiw int *, Dwarf_Error *); 685260684SkaiwDwarf_Ptr dwarf_get_section_bytes(Dwarf_P_Debug, Dwarf_Signed, 686260684Skaiw Dwarf_Signed *, Dwarf_Unsigned *, Dwarf_Error *); 687276371Semasteint dwarf_get_section_max_offsets(Dwarf_Debug, Dwarf_Unsigned *, 688276371Semaste Dwarf_Unsigned *, Dwarf_Unsigned *, Dwarf_Unsigned *, 689276371Semaste Dwarf_Unsigned *, Dwarf_Unsigned *, Dwarf_Unsigned *, 690276371Semaste Dwarf_Unsigned *, Dwarf_Unsigned *, Dwarf_Unsigned *, 691276371Semaste Dwarf_Unsigned *); 692276371Semasteint dwarf_get_section_max_offsets_b(Dwarf_Debug, Dwarf_Unsigned *, 693276371Semaste Dwarf_Unsigned *, Dwarf_Unsigned *, Dwarf_Unsigned *, 694276371Semaste Dwarf_Unsigned *, Dwarf_Unsigned *, Dwarf_Unsigned *, 695276371Semaste Dwarf_Unsigned *, Dwarf_Unsigned *, Dwarf_Unsigned *, 696276371Semaste Dwarf_Unsigned *, Dwarf_Unsigned *); 697260684Skaiwint dwarf_get_str(Dwarf_Debug, Dwarf_Off, char **, Dwarf_Signed *, 698260684Skaiw Dwarf_Error *); 699260684Skaiwint dwarf_get_types(Dwarf_Debug, Dwarf_Type **, Dwarf_Signed *, 700260684Skaiw Dwarf_Error *); 701260684Skaiwint dwarf_get_vars(Dwarf_Debug, Dwarf_Var **, Dwarf_Signed *, 702260684Skaiw Dwarf_Error *); 703260684Skaiwint dwarf_get_weaks(Dwarf_Debug, Dwarf_Weak **, Dwarf_Signed *, 704260684Skaiw Dwarf_Error *); 705260684Skaiwint dwarf_global_cu_offset(Dwarf_Global, Dwarf_Off *, Dwarf_Error *); 706260684Skaiwint dwarf_global_die_offset(Dwarf_Global, Dwarf_Off *, 707260684Skaiw Dwarf_Error *); 708260684Skaiwint dwarf_global_formref(Dwarf_Attribute, Dwarf_Off *, 709260684Skaiw Dwarf_Error *); 710260684Skaiwint dwarf_global_name_offsets(Dwarf_Global, char **, 711260684Skaiw Dwarf_Off *, Dwarf_Off *, Dwarf_Error *); 712260684Skaiwvoid dwarf_globals_dealloc(Dwarf_Debug, Dwarf_Global *, Dwarf_Signed); 713260684Skaiwint dwarf_globname(Dwarf_Global, char **, Dwarf_Error *); 714260684Skaiwint dwarf_hasattr(Dwarf_Die, Dwarf_Half, Dwarf_Bool *, 715260684Skaiw Dwarf_Error *); 716260684Skaiwint dwarf_hasform(Dwarf_Attribute, Dwarf_Half, Dwarf_Bool *, 717260684Skaiw Dwarf_Error *); 718260684Skaiwint dwarf_highpc(Dwarf_Die, Dwarf_Addr *, Dwarf_Error *); 719276371Semasteint dwarf_highpc_b(Dwarf_Die, Dwarf_Addr *, Dwarf_Half *, 720276371Semaste enum Dwarf_Form_Class *, Dwarf_Error *); 721260684Skaiwint dwarf_init(int, int, Dwarf_Handler, Dwarf_Ptr, Dwarf_Debug *, 722260684Skaiw Dwarf_Error *); 723260684Skaiwint dwarf_line_srcfileno(Dwarf_Line, Dwarf_Unsigned *, 724260684Skaiw Dwarf_Error *); 725260684Skaiwint dwarf_lineaddr(Dwarf_Line, Dwarf_Addr *, Dwarf_Error *); 726260684Skaiwint dwarf_linebeginstatement(Dwarf_Line, Dwarf_Bool *, 727260684Skaiw Dwarf_Error *); 728260684Skaiwint dwarf_lineblock(Dwarf_Line, Dwarf_Bool *, Dwarf_Error *); 729260684Skaiwint dwarf_lineendsequence(Dwarf_Line, Dwarf_Bool *, Dwarf_Error *); 730260684Skaiwint dwarf_lineno(Dwarf_Line, Dwarf_Unsigned *, Dwarf_Error *); 731260684Skaiwint dwarf_lineoff(Dwarf_Line, Dwarf_Signed *, Dwarf_Error *); 732260684Skaiwint dwarf_linesrc(Dwarf_Line, char **, Dwarf_Error *); 733260684SkaiwDwarf_Unsigned dwarf_lne_end_sequence(Dwarf_P_Debug, Dwarf_Addr, Dwarf_Error *); 734260684SkaiwDwarf_Unsigned dwarf_lne_set_address(Dwarf_P_Debug, Dwarf_Addr, Dwarf_Unsigned, 735260684Skaiw Dwarf_Error *); 736260684Skaiwint dwarf_loclist(Dwarf_Attribute, Dwarf_Locdesc **, Dwarf_Signed *, 737260684Skaiw Dwarf_Error *); 738260684Skaiwint dwarf_loclist_from_expr(Dwarf_Debug, Dwarf_Ptr, Dwarf_Unsigned, 739260684Skaiw Dwarf_Locdesc **, Dwarf_Signed *, Dwarf_Error *); 740260684Skaiwint dwarf_loclist_from_expr_a(Dwarf_Debug, Dwarf_Ptr, 741260684Skaiw Dwarf_Unsigned, Dwarf_Half, Dwarf_Locdesc **, 742260684Skaiw Dwarf_Signed *, Dwarf_Error *); 743276371Semasteint dwarf_loclist_from_expr_b(Dwarf_Debug, Dwarf_Ptr, 744276371Semaste Dwarf_Unsigned, Dwarf_Half, Dwarf_Half, 745276371Semaste Dwarf_Small, Dwarf_Locdesc **, Dwarf_Signed *, 746276371Semaste Dwarf_Error *); 747260684Skaiwint dwarf_loclist_n(Dwarf_Attribute, Dwarf_Locdesc ***, 748260684Skaiw Dwarf_Signed *, Dwarf_Error *); 749260684Skaiwint dwarf_lowpc(Dwarf_Die, Dwarf_Addr *, Dwarf_Error *); 750260684SkaiwDwarf_P_Die dwarf_new_die(Dwarf_P_Debug, Dwarf_Tag, Dwarf_P_Die, 751260684Skaiw Dwarf_P_Die, Dwarf_P_Die, Dwarf_P_Die, Dwarf_Error *); 752260684SkaiwDwarf_P_Expr dwarf_new_expr(Dwarf_P_Debug, Dwarf_Error *); 753260684SkaiwDwarf_P_Fde dwarf_new_fde(Dwarf_P_Debug, Dwarf_Error *); 754260684Skaiwint dwarf_next_cu_header(Dwarf_Debug, Dwarf_Unsigned *, 755260684Skaiw Dwarf_Half *, Dwarf_Off *, Dwarf_Half *, 756260684Skaiw Dwarf_Unsigned *, Dwarf_Error *); 757260684Skaiwint dwarf_next_cu_header_b(Dwarf_Debug, Dwarf_Unsigned *, 758260684Skaiw Dwarf_Half *, Dwarf_Off *, Dwarf_Half *, Dwarf_Half *, 759260684Skaiw Dwarf_Half *, Dwarf_Unsigned *, Dwarf_Error *); 760276371Semasteint dwarf_next_cu_header_c(Dwarf_Debug, Dwarf_Bool, 761276371Semaste Dwarf_Unsigned *, Dwarf_Half *, Dwarf_Off *, Dwarf_Half *, 762276371Semaste Dwarf_Half *, Dwarf_Half *, Dwarf_Sig8 *, Dwarf_Unsigned *, 763276371Semaste Dwarf_Unsigned *, Dwarf_Error *); 764276371Semasteint dwarf_next_types_section(Dwarf_Debug, Dwarf_Error *); 765260684Skaiwint dwarf_object_finish(Dwarf_Debug, Dwarf_Error *); 766260684Skaiwint dwarf_object_init(Dwarf_Obj_Access_Interface *, Dwarf_Handler, 767260684Skaiw Dwarf_Ptr, Dwarf_Debug *, Dwarf_Error *); 768260684Skaiwint dwarf_offdie(Dwarf_Debug, Dwarf_Off, Dwarf_Die *, 769260684Skaiw Dwarf_Error *); 770276371Semasteint dwarf_offdie_b(Dwarf_Debug, Dwarf_Off, Dwarf_Bool, Dwarf_Die *, 771276371Semaste Dwarf_Error *); 772260684SkaiwDwarf_Unsigned dwarf_producer_finish(Dwarf_P_Debug, Dwarf_Error *); 773260684SkaiwDwarf_P_Debug dwarf_producer_init(Dwarf_Unsigned, Dwarf_Callback_Func, 774260684Skaiw Dwarf_Handler, Dwarf_Ptr, Dwarf_Error *); 775260684SkaiwDwarf_P_Debug dwarf_producer_init_b(Dwarf_Unsigned, Dwarf_Callback_Func_b, 776260684Skaiw Dwarf_Handler, Dwarf_Ptr, Dwarf_Error *); 777260684Skaiwint dwarf_producer_set_isa(Dwarf_P_Debug, enum Dwarf_ISA, 778260684Skaiw Dwarf_Error *); 779260684Skaiwint dwarf_pubtype_cu_offset(Dwarf_Type, Dwarf_Off *, Dwarf_Error *); 780260684Skaiwint dwarf_pubtype_die_offset(Dwarf_Type, Dwarf_Off *, 781260684Skaiw Dwarf_Error *); 782260684Skaiwint dwarf_pubtype_name_offsets(Dwarf_Type, char **, 783260684Skaiw Dwarf_Off *, Dwarf_Off *, Dwarf_Error *); 784260684Skaiwint dwarf_pubtypename(Dwarf_Type, char **, Dwarf_Error *); 785260684Skaiwvoid dwarf_pubtypes_dealloc(Dwarf_Debug, Dwarf_Type *, Dwarf_Signed); 786260684Skaiwvoid dwarf_ranges_dealloc(Dwarf_Debug, Dwarf_Ranges *, Dwarf_Signed); 787260684Skaiwvoid dwarf_reset_section_bytes(Dwarf_P_Debug); 788260684SkaiwDwarf_Half dwarf_set_frame_cfa_value(Dwarf_Debug, Dwarf_Half); 789260684SkaiwDwarf_Half dwarf_set_frame_rule_initial_value(Dwarf_Debug, Dwarf_Half); 790260684SkaiwDwarf_Half dwarf_set_frame_rule_table_size(Dwarf_Debug, Dwarf_Half); 791260684SkaiwDwarf_Half dwarf_set_frame_same_value(Dwarf_Debug, Dwarf_Half); 792260684SkaiwDwarf_Half dwarf_set_frame_undefined_value(Dwarf_Debug, Dwarf_Half); 793260684Skaiwint dwarf_set_reloc_application(int); 794260684SkaiwDwarf_Ptr dwarf_seterrarg(Dwarf_Debug, Dwarf_Ptr); 795260684SkaiwDwarf_Handler dwarf_seterrhand(Dwarf_Debug, Dwarf_Handler); 796260684Skaiwint dwarf_siblingof(Dwarf_Debug, Dwarf_Die, Dwarf_Die *, Dwarf_Error *); 797276371Semasteint dwarf_siblingof_b(Dwarf_Debug, Dwarf_Die, Dwarf_Die *, Dwarf_Bool, 798276371Semaste Dwarf_Error *); 799260684Skaiwint dwarf_srcfiles(Dwarf_Die, char ***, Dwarf_Signed *, Dwarf_Error *); 800260684Skaiwint dwarf_srclang(Dwarf_Die, Dwarf_Unsigned *, Dwarf_Error *); 801260684Skaiwint dwarf_srclines(Dwarf_Die, Dwarf_Line **, Dwarf_Signed *, 802260684Skaiw Dwarf_Error *); 803260684Skaiwvoid dwarf_srclines_dealloc(Dwarf_Debug, Dwarf_Line *, 804260684Skaiw Dwarf_Signed); 805260684Skaiwint dwarf_start_macro_file(Dwarf_P_Debug, Dwarf_Unsigned, 806260684Skaiw Dwarf_Unsigned, Dwarf_Error *); 807260684Skaiwint dwarf_tag(Dwarf_Die, Dwarf_Half *, Dwarf_Error *); 808260684SkaiwDwarf_Signed dwarf_transform_to_disk_form(Dwarf_P_Debug, Dwarf_Error *); 809260684Skaiwint dwarf_type_cu_offset(Dwarf_Type, Dwarf_Off *, Dwarf_Error *); 810260684Skaiwint dwarf_type_die_offset(Dwarf_Type, Dwarf_Off *, Dwarf_Error *); 811260684Skaiwint dwarf_type_name_offsets(Dwarf_Type, char **, 812260684Skaiw Dwarf_Off *, Dwarf_Off *, Dwarf_Error *); 813260684Skaiwint dwarf_typename(Dwarf_Type, char **, Dwarf_Error *); 814260684Skaiwvoid dwarf_types_dealloc(Dwarf_Debug, Dwarf_Type *, Dwarf_Signed); 815260684Skaiwint dwarf_undef_macro(Dwarf_P_Debug, Dwarf_Unsigned, char *, 816260684Skaiw Dwarf_Error *); 817260684Skaiwint dwarf_var_cu_offset(Dwarf_Var, Dwarf_Off *, Dwarf_Error *); 818260684Skaiwint dwarf_var_die_offset(Dwarf_Var, Dwarf_Off *, 819260684Skaiw Dwarf_Error *); 820260684Skaiwint dwarf_var_name_offsets(Dwarf_Var, char **, 821260684Skaiw Dwarf_Off *, Dwarf_Off *, Dwarf_Error *); 822260684Skaiwint dwarf_varname(Dwarf_Var, char **, Dwarf_Error *); 823260684Skaiwvoid dwarf_vars_dealloc(Dwarf_Debug, Dwarf_Var *, Dwarf_Signed); 824260684Skaiwint dwarf_vendor_ext(Dwarf_P_Debug, Dwarf_Unsigned, char *, 825260684Skaiw Dwarf_Error *); 826260684Skaiwint dwarf_weak_cu_offset(Dwarf_Weak, Dwarf_Off *, Dwarf_Error *); 827260684Skaiwint dwarf_weak_die_offset(Dwarf_Weak, Dwarf_Off *, 828260684Skaiw Dwarf_Error *); 829260684Skaiwint dwarf_weak_name_offsets(Dwarf_Weak, char **, 830260684Skaiw Dwarf_Off *, Dwarf_Off *, Dwarf_Error *); 831260684Skaiwint dwarf_weakname(Dwarf_Weak, char **, Dwarf_Error *); 832260684Skaiwvoid dwarf_weaks_dealloc(Dwarf_Debug, Dwarf_Weak *, Dwarf_Signed); 833260684Skaiwint dwarf_whatattr(Dwarf_Attribute, Dwarf_Half *, Dwarf_Error *); 834260684Skaiwint dwarf_whatform(Dwarf_Attribute, Dwarf_Half *, Dwarf_Error *); 835260684Skaiwint dwarf_whatform_direct(Dwarf_Attribute, Dwarf_Half *, 836260684Skaiw Dwarf_Error *); 837280932Semaste#ifdef __cplusplus 838280932Semaste} 839280932Semaste#endif 840260684Skaiw 841260684Skaiw#endif /* !_LIBDWARF_H_ */ 842