| 1 | /* $NetBSD: libdwarf.h,v 1.3 2016/02/20 02:43:41 christos Exp $ */ |
| 2 | |
| 3 | /*- |
| 4 | * Copyright (c) 2007 John Birrell (jb@freebsd.org) |
| 5 | * Copyright (c) 2009-2011,2014 Kai Wang |
| 6 | * All rights reserved. |
| 7 | * |
| 8 | * Redistribution and use in source and binary forms, with or without |
| 9 | * modification, are permitted provided that the following conditions |
| 10 | * are met: |
| 11 | * 1. Redistributions of source code must retain the above copyright |
| 12 | * notice, this list of conditions and the following disclaimer. |
| 13 | * 2. Redistributions in binary form must reproduce the above copyright |
| 14 | * notice, this list of conditions and the following disclaimer in the |
| 15 | * documentation and/or other materials provided with the distribution. |
| 16 | * |
| 17 | * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND |
| 18 | * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
| 19 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
| 20 | * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE |
| 21 | * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL |
| 22 | * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS |
| 23 | * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) |
| 24 | * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT |
| 25 | * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY |
| 26 | * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF |
| 27 | * SUCH DAMAGE. |
| 28 | * |
| 29 | * Id: libdwarf.h 3295 2016-01-08 22:08:10Z jkoshy |
| 30 | */ |
| 31 | |
| 32 | #ifndef _LIBDWARF_H_ |
| 33 | #define _LIBDWARF_H_ |
| 34 | |
| 35 | #include <libelf.h> |
| 36 | |
| 37 | typedef int Dwarf_Bool; |
| 38 | typedef uint64_t Dwarf_Off; |
| 39 | typedef uint64_t Dwarf_Unsigned; |
| 40 | typedef uint16_t Dwarf_Half; |
| 41 | typedef uint8_t Dwarf_Small; |
| 42 | typedef int64_t Dwarf_Signed; |
| 43 | typedef uint64_t Dwarf_Addr; |
| 44 | typedef void *Dwarf_Ptr; |
| 45 | |
| 46 | typedef struct _Dwarf_Abbrev *Dwarf_Abbrev; |
| 47 | typedef struct _Dwarf_Arange *Dwarf_Arange; |
| 48 | typedef struct _Dwarf_ArangeSet *Dwarf_ArangeSet; |
| 49 | typedef struct _Dwarf_Attribute *Dwarf_Attribute; |
| 50 | typedef struct _Dwarf_Attribute *Dwarf_P_Attribute; |
| 51 | typedef struct _Dwarf_AttrDef *Dwarf_AttrDef; |
| 52 | typedef struct _Dwarf_Cie *Dwarf_Cie; |
| 53 | typedef struct _Dwarf_Cie *Dwarf_P_Cie; |
| 54 | typedef struct _Dwarf_Debug *Dwarf_Debug; |
| 55 | typedef struct _Dwarf_Debug *Dwarf_P_Debug; |
| 56 | typedef struct _Dwarf_Die *Dwarf_Die; |
| 57 | typedef struct _Dwarf_Die *Dwarf_P_Die; |
| 58 | typedef struct _Dwarf_Fde *Dwarf_Fde; |
| 59 | typedef struct _Dwarf_Fde *Dwarf_P_Fde; |
| 60 | typedef struct _Dwarf_FrameSec *Dwarf_FrameSec; |
| 61 | typedef struct _Dwarf_Line *Dwarf_Line; |
| 62 | typedef struct _Dwarf_LineFile *Dwarf_LineFile; |
| 63 | typedef struct _Dwarf_LineInfo *Dwarf_LineInfo; |
| 64 | typedef struct _Dwarf_MacroSet *Dwarf_MacroSet; |
| 65 | typedef struct _Dwarf_NamePair *Dwarf_NamePair; |
| 66 | typedef struct _Dwarf_NamePair *Dwarf_Func; |
| 67 | typedef struct _Dwarf_NamePair *Dwarf_Global; |
| 68 | typedef struct _Dwarf_NamePair *Dwarf_Type; |
| 69 | typedef struct _Dwarf_NamePair *Dwarf_Var; |
| 70 | typedef struct _Dwarf_NamePair *Dwarf_Weak; |
| 71 | typedef struct _Dwarf_NameTbl *Dwarf_NameTbl; |
| 72 | typedef struct _Dwarf_NameSec *Dwarf_NameSec; |
| 73 | typedef struct _Dwarf_P_Expr *Dwarf_P_Expr; |
| 74 | typedef struct _Dwarf_Rangelist *Dwarf_Rangelist; |
| 75 | |
| 76 | typedef enum { |
| 77 | DW_OBJECT_MSB, |
| 78 | DW_OBJECT_LSB |
| 79 | } Dwarf_Endianness; |
| 80 | |
| 81 | typedef struct { |
| 82 | Dwarf_Addr addr; |
| 83 | Dwarf_Unsigned size; |
| 84 | const char *name; |
| 85 | } Dwarf_Obj_Access_Section; |
| 86 | |
| 87 | typedef struct { |
| 88 | int (*get_section_info)(void *_obj, Dwarf_Half _index, |
| 89 | Dwarf_Obj_Access_Section *_ret_section, int *_error); |
| 90 | Dwarf_Endianness (*get_byte_order)(void *_obj); |
| 91 | Dwarf_Small (*get_length_size)(void *_obj); |
| 92 | Dwarf_Small (*get_pointer_size)(void *_obj); |
| 93 | Dwarf_Unsigned (*get_section_count)(void *_obj); |
| 94 | int (*load_section)(void *_obj, Dwarf_Half _index, |
| 95 | Dwarf_Small **_ret_data, int *_error); |
| 96 | } Dwarf_Obj_Access_Methods; |
| 97 | |
| 98 | typedef struct { |
| 99 | void *object; |
| 100 | const Dwarf_Obj_Access_Methods *methods; |
| 101 | } Dwarf_Obj_Access_Interface; |
| 102 | |
| 103 | typedef int (*Dwarf_Callback_Func)(char *_name, int _size, |
| 104 | Dwarf_Unsigned _type, Dwarf_Unsigned _flags, Dwarf_Unsigned _link, |
| 105 | Dwarf_Unsigned _info, int *_index, int *_error); |
| 106 | |
| 107 | typedef int (*Dwarf_Callback_Func_b)(char *_name, int _size, |
| 108 | Dwarf_Unsigned _type, Dwarf_Unsigned _flags, Dwarf_Unsigned _link, |
| 109 | Dwarf_Unsigned _info, Dwarf_Unsigned *_index, int *_error); |
| 110 | |
| 111 | typedef Dwarf_Unsigned Dwarf_Tag; |
| 112 | |
| 113 | typedef struct { |
| 114 | Dwarf_Small lr_atom; |
| 115 | Dwarf_Unsigned lr_number; |
| 116 | Dwarf_Unsigned lr_number2; |
| 117 | Dwarf_Unsigned lr_offset; |
| 118 | } Dwarf_Loc; |
| 119 | |
| 120 | typedef struct { |
| 121 | Dwarf_Addr ld_lopc; |
| 122 | Dwarf_Addr ld_hipc; |
| 123 | Dwarf_Half ld_cents; |
| 124 | Dwarf_Loc *ld_s; |
| 125 | } Dwarf_Locdesc; |
| 126 | |
| 127 | typedef struct { |
| 128 | char signature[8]; |
| 129 | } Dwarf_Sig8; |
| 130 | |
| 131 | typedef struct { |
| 132 | Dwarf_Unsigned bl_len; |
| 133 | Dwarf_Ptr bl_data; |
| 134 | } Dwarf_Block; |
| 135 | |
| 136 | enum Dwarf_Ranges_Entry_Type { |
| 137 | DW_RANGES_ENTRY, |
| 138 | DW_RANGES_ADDRESS_SELECTION, |
| 139 | DW_RANGES_END |
| 140 | }; |
| 141 | |
| 142 | typedef struct { |
| 143 | Dwarf_Unsigned dwr_addr1; |
| 144 | Dwarf_Unsigned dwr_addr2; |
| 145 | enum Dwarf_Ranges_Entry_Type dwr_type; |
| 146 | } Dwarf_Ranges; |
| 147 | |
| 148 | enum Dwarf_Form_Class { |
| 149 | DW_FORM_CLASS_UNKNOWN, |
| 150 | DW_FORM_CLASS_ADDRESS, |
| 151 | DW_FORM_CLASS_BLOCK, |
| 152 | DW_FORM_CLASS_CONSTANT, |
| 153 | DW_FORM_CLASS_EXPRLOC, |
| 154 | DW_FORM_CLASS_FLAG, |
| 155 | DW_FORM_CLASS_LINEPTR, |
| 156 | DW_FORM_CLASS_LOCLISTPTR, |
| 157 | DW_FORM_CLASS_MACPTR, |
| 158 | DW_FORM_CLASS_RANGELISTPTR, |
| 159 | DW_FORM_CLASS_REFERENCE, |
| 160 | DW_FORM_CLASS_STRING |
| 161 | }; |
| 162 | |
| 163 | #ifndef DW_FRAME_HIGHEST_NORMAL_REGISTER |
| 164 | #define DW_FRAME_HIGHEST_NORMAL_REGISTER 63 |
| 165 | #endif |
| 166 | |
| 167 | #define DW_FRAME_RA_COL (DW_FRAME_HIGHEST_NORMAL_REGISTER + 1) |
| 168 | #define DW_FRAME_STATIC_LINK (DW_FRAME_HIGHEST_NORMAL_REGISTER + 2) |
| 169 | |
| 170 | #ifndef DW_FRAME_LAST_REG_NUM |
| 171 | #define DW_FRAME_LAST_REG_NUM (DW_FRAME_HIGHEST_NORMAL_REGISTER + 3) |
| 172 | #endif |
| 173 | |
| 174 | #ifndef DW_FRAME_REG_INITIAL_VALUE |
| 175 | #define DW_FRAME_REG_INITIAL_VALUE DW_FRAME_SAME_VAL |
| 176 | #endif |
| 177 | |
| 178 | #define DW_FRAME_UNDEFINED_VAL 1034 |
| 179 | #define DW_FRAME_SAME_VAL 1035 |
| 180 | #define DW_FRAME_CFA_COL3 1436 |
| 181 | |
| 182 | #define DW_EXPR_OFFSET 0 |
| 183 | #define DW_EXPR_VAL_OFFSET 1 |
| 184 | #define DW_EXPR_EXPRESSION 2 |
| 185 | #define DW_EXPR_VAL_EXPRESSION 3 |
| 186 | |
| 187 | /* |
| 188 | * Frame operation only for DWARF 2. |
| 189 | */ |
| 190 | |
| 191 | #define DW_FRAME_CFA_COL 0 |
| 192 | |
| 193 | typedef struct { |
| 194 | Dwarf_Small fp_base_op; |
| 195 | Dwarf_Small fp_extended_op; |
| 196 | Dwarf_Half fp_register; |
| 197 | Dwarf_Signed fp_offset; |
| 198 | Dwarf_Off fp_instr_offset; |
| 199 | } Dwarf_Frame_Op; |
| 200 | |
| 201 | #ifndef DW_REG_TABLE_SIZE |
| 202 | #define DW_REG_TABLE_SIZE 66 |
| 203 | #endif |
| 204 | |
| 205 | typedef struct { |
| 206 | struct { |
| 207 | Dwarf_Small dw_offset_relevant; |
| 208 | Dwarf_Half dw_regnum; |
| 209 | Dwarf_Addr dw_offset; |
| 210 | } rules[DW_REG_TABLE_SIZE]; |
| 211 | } Dwarf_Regtable; |
| 212 | |
| 213 | /* |
| 214 | * Frame operation for DWARF 3 and DWARF 2. |
| 215 | */ |
| 216 | |
| 217 | typedef struct { |
| 218 | Dwarf_Small fp_base_op; |
| 219 | Dwarf_Small fp_extended_op; |
| 220 | Dwarf_Half fp_register; |
| 221 | Dwarf_Unsigned fp_offset_or_block_len; |
| 222 | Dwarf_Small *fp_expr_block; |
| 223 | Dwarf_Off fp_instr_offset; |
| 224 | } Dwarf_Frame_Op3; |
| 225 | |
| 226 | typedef struct { |
| 227 | Dwarf_Small dw_offset_relevant; |
| 228 | Dwarf_Small dw_value_type; |
| 229 | Dwarf_Half dw_regnum; |
| 230 | Dwarf_Unsigned dw_offset_or_block_len; |
| 231 | Dwarf_Ptr dw_block_ptr; |
| 232 | } Dwarf_Regtable_Entry3; |
| 233 | |
| 234 | typedef struct { |
| 235 | Dwarf_Regtable_Entry3 rt3_cfa_rule; |
| 236 | Dwarf_Half rt3_reg_table_size; |
| 237 | Dwarf_Regtable_Entry3 *rt3_rules; |
| 238 | } Dwarf_Regtable3; |
| 239 | |
| 240 | typedef struct { |
| 241 | Dwarf_Off dmd_offset; |
| 242 | Dwarf_Small dmd_type; |
| 243 | Dwarf_Signed dmd_lineno; |
| 244 | Dwarf_Signed dmd_fileindex; |
| 245 | char *dmd_macro; |
| 246 | } Dwarf_Macro_Details; |
| 247 | |
| 248 | /* |
| 249 | * Symbols denoting allocation types, for use with dwarf_dealloc(3). |
| 250 | */ |
| 251 | |
| 252 | enum Dwarf_Allocation_Type { |
| 253 | DW_DLA_ABBREV, |
| 254 | DW_DLA_ADDR, |
| 255 | DW_DLA_ARANGE, |
| 256 | DW_DLA_ATTR, |
| 257 | DW_DLA_BLOCK, |
| 258 | DW_DLA_BOUNDS, |
| 259 | DW_DLA_CIE, |
| 260 | DW_DLA_DEBUG, |
| 261 | DW_DLA_DIE, |
| 262 | DW_DLA_ELLIST, |
| 263 | DW_DLA_ERROR, |
| 264 | DW_DLA_FDE, |
| 265 | DW_DLA_FRAME_BLOCK, |
| 266 | DW_DLA_FRAME_OP, |
| 267 | DW_DLA_FUNC, |
| 268 | DW_DLA_GLOBAL, |
| 269 | DW_DLA_LINE, |
| 270 | DW_DLA_LINEBUF, |
| 271 | DW_DLA_LIST, |
| 272 | DW_DLA_LOC, |
| 273 | DW_DLA_LOCDESC, |
| 274 | DW_DLA_LOC_BLOCK, |
| 275 | DW_DLA_RANGES, |
| 276 | DW_DLA_STRING, |
| 277 | DW_DLA_SUBSCR, |
| 278 | DW_DLA_TYPE, |
| 279 | DW_DLA_TYPENAME, |
| 280 | DW_DLA_VAR, |
| 281 | DW_DLA_WEAK |
| 282 | }; |
| 283 | |
| 284 | /* |
| 285 | * Relocation Type. |
| 286 | */ |
| 287 | enum Dwarf_Rel_Type { |
| 288 | dwarf_drt_none = 0, |
| 289 | dwarf_drt_data_reloc, |
| 290 | dwarf_drt_segment_rel, |
| 291 | dwarf_drt_first_of_length_pair, |
| 292 | dwarf_drt_second_of_length_pair |
| 293 | }; |
| 294 | |
| 295 | /* |
| 296 | * Relocation Entry. |
| 297 | */ |
| 298 | typedef struct Dwarf_Relocation_Data_s { |
| 299 | unsigned char drd_type; |
| 300 | unsigned char drd_length; |
| 301 | Dwarf_Unsigned drd_offset; |
| 302 | Dwarf_Unsigned drd_symbol_index; |
| 303 | } *Dwarf_Relocation_Data; |
| 304 | |
| 305 | #define DWARF_DRD_BUFFER_VERSION 2 |
| 306 | |
| 307 | /* |
| 308 | * Error numbers which are specific to this implementation. |
| 309 | */ |
| 310 | enum { |
| 311 | DW_DLE_NONE, /* No error. */ |
| 312 | DW_DLE_ERROR, /* An error! */ |
| 313 | DW_DLE_ARGUMENT, /* Invalid argument. */ |
| 314 | DW_DLE_DEBUG_INFO_NULL, /* Debug info NULL. */ |
| 315 | DW_DLE_NO_ENTRY, /* No entry. */ |
| 316 | DW_DLE_MEMORY, /* Insufficient memory. */ |
| 317 | DW_DLE_ELF, /* ELF error. */ |
| 318 | DW_DLE_CU_LENGTH_ERROR, /* Invalid compilation unit data. */ |
| 319 | DW_DLE_VERSION_STAMP_ERROR, /* Invalid version. */ |
| 320 | DW_DLE_DEBUG_ABBREV_NULL, /* Abbrev not found. */ |
| 321 | DW_DLE_DIE_NO_CU_CONTEXT, /* No current compilation unit. */ |
| 322 | DW_DLE_LOC_EXPR_BAD, /* Invalid location expression. */ |
| 323 | DW_DLE_EXPR_LENGTH_BAD, /* Invalid DWARF expression. */ |
| 324 | DW_DLE_DEBUG_LOC_SECTION_SHORT, /* Loclist section too short. */ |
| 325 | DW_DLE_ATTR_FORM_BAD, /* Invalid attribute form. */ |
| 326 | DW_DLE_DEBUG_LINE_LENGTH_BAD, /* Line info section too short. */ |
| 327 | DW_DLE_LINE_FILE_NUM_BAD, /* Invalid file number. */ |
| 328 | DW_DLE_DIR_INDEX_BAD, /* Invalid dir index. */ |
| 329 | DW_DLE_DEBUG_FRAME_LENGTH_BAD, /* Frame section too short. */ |
| 330 | DW_DLE_NO_CIE_FOR_FDE, /* CIE not found for certain FDE. */ |
| 331 | DW_DLE_FRAME_AUGMENTATION_UNKNOWN, /* Unknown CIE augmentation. */ |
| 332 | DW_DLE_FRAME_INSTR_EXEC_ERROR, /* Frame instruction exec error. */ |
| 333 | DW_DLE_FRAME_VERSION_BAD, /* Invalid frame section version. */ |
| 334 | DW_DLE_FRAME_TABLE_COL_BAD, /* Invalid table column. */ |
| 335 | DW_DLE_DF_REG_NUM_TOO_HIGH, /* Insufficient regtable space. */ |
| 336 | DW_DLE_PC_NOT_IN_FDE_RANGE, /* PC requested not in the FDE range. */ |
| 337 | DW_DLE_ARANGE_OFFSET_BAD, /* Invalid arange offset. */ |
| 338 | DW_DLE_DEBUG_MACRO_INCONSISTENT,/* Invalid macinfo data. */ |
| 339 | DW_DLE_ELF_SECT_ERR, /* Application callback failed. */ |
| 340 | DW_DLE_NUM /* Max error number. */ |
| 341 | }; |
| 342 | |
| 343 | /* |
| 344 | * Mapping of SGI libdwarf error codes for comptibility. |
| 345 | */ |
| 346 | #define DW_DLE_DBG_ALLOC DW_DLE_MEMORY |
| 347 | #define DW_DLE_ALLOC_FAIL DW_DLE_MEMORY |
| 348 | #define DW_DLE_SECT_ALLOC DW_DLE_MEMORY |
| 349 | #define DW_DLE_FILE_ENTRY_ALLOC DW_DLE_MEMORY |
| 350 | #define DW_DLE_LINE_ALLOC DW_DLE_MEMORY |
| 351 | #define DW_DLE_FPGM_ALLOC DW_DLE_MEMORY |
| 352 | #define DW_DLE_INCDIR_ALLOC DW_DLE_MEMORY |
| 353 | #define DW_DLE_STRING_ALLOC DW_DLE_MEMORY |
| 354 | #define DW_DLE_CHUNK_ALLOC DW_DLE_MEMORY |
| 355 | #define DW_DLE_CIE_ALLOC DW_DLE_MEMORY |
| 356 | #define DW_DLE_FDE_ALLOC DW_DLE_MEMORY |
| 357 | #define DW_DLE_CIE_OFFS_ALLOC DW_DLE_MEMORY |
| 358 | #define DW_DLE_DIE_ALLOC DW_DLE_MEMORY |
| 359 | #define DW_DLE_ATTR_ALLOC DW_DLE_MEMORY |
| 360 | #define DW_DLE_ABBREV_ALLOC DW_DLE_MEMORY |
| 361 | #define DW_DLE_ADDR_ALLOC DW_DLE_MEMORY |
| 362 | #define DW_DLE_REL_ALLOC DW_DLE_MEMORY |
| 363 | #define DW_DLE_MACINFO_MALLOC_FAIL DW_DLE_MEMORY |
| 364 | #define DW_DLE_DEBUG_MACRO_MALLOC_SPACE DW_DLE_MEMORY |
| 365 | #define DW_DLE_DF_ALLOC_FAIL DW_DLE_MEMORY |
| 366 | #define DW_DLE_RELOC_SECTION_MALLOC_FAIL DW_DLE_MEMORY |
| 367 | #define DW_DLE_DBG_NULL DW_DLE_ARGUMENT |
| 368 | #define DW_DLE_DIE_NULL DW_DLE_ARGUMENT |
| 369 | #define DW_DLE_FDE_NULL DW_DLE_ARGUMENT |
| 370 | #define DW_DLE_CIE_NULL DW_DLE_ARGUMENT |
| 371 | #define DW_DLE_ATTR_NULL DW_DLE_ARGUMENT |
| 372 | #define DW_DLE_GLOBAL_NULL DW_DLE_ARGUMENT |
| 373 | #define DW_DLE_ARANGES_NULL DW_DLE_ARGUMENT |
| 374 | #define DW_DLE_ARANGE_NULL DW_DLE_ARGUMENT |
| 375 | #define DW_DLE_EXPR_NULL DW_DLE_ARGUMENT |
| 376 | #define DW_DLE_FUNC_NULL DW_DLE_ARGUMENT |
| 377 | #define DW_DLE_TYPE_NULL DW_DLE_ARGUMENT |
| 378 | #define DW_DLE_VAR_NULL DW_DLE_ARGUMENT |
| 379 | #define DW_DLE_WEAK_NULL DW_DLE_ARGUMENT |
| 380 | #define DW_DLE_ELF_BEGIN_ERROR DW_DLE_ELF |
| 381 | #define DW_DLE_ELF_GETEHDR_ERROR DW_DLE_ELF |
| 382 | #define DW_DLE_ELF_GETSHDR_ERROR DW_DLE_ELF |
| 383 | #define DW_DLE_ELF_STRPTR_ERROR DW_DLE_ELF |
| 384 | #define DW_DLE_ELF_SECT_ERROR DW_DLE_ELF |
| 385 | #define DW_DLE_ELF_GETIDENT_ERROR DW_DLE_ELF |
| 386 | |
| 387 | typedef struct _Dwarf_Error { |
| 388 | int err_error; /* DWARF error. */ |
| 389 | int err_elferror; /* ELF error. */ |
| 390 | const char *err_func; /* Function name where error occurred. */ |
| 391 | int err_line; /* Line number where error occurred. */ |
| 392 | char err_msg[1024]; /* Formatted error message. */ |
| 393 | } Dwarf_Error; |
| 394 | |
| 395 | /* |
| 396 | * Dwarf error handler. |
| 397 | */ |
| 398 | typedef void (*Dwarf_Handler)(Dwarf_Error, Dwarf_Ptr); |
| 399 | |
| 400 | #define dwarf_errno(error) error.err_error |
| 401 | #define dwarf_errmsg(error) dwarf_errmsg_(&error) |
| 402 | |
| 403 | /* |
| 404 | * Return values which have to be compatible with other |
| 405 | * implementations of libdwarf. |
| 406 | */ |
| 407 | #define DW_DLV_NO_ENTRY -1 |
| 408 | #define DW_DLV_OK 0 |
| 409 | #define DW_DLV_ERROR 1 |
| 410 | #define DW_DLV_BADADDR NULL |
| 411 | #define DW_DLV_NOCOUNT ((Dwarf_Signed) -1) |
| 412 | |
| 413 | /* |
| 414 | * Access modes. |
| 415 | */ |
| 416 | #define DW_DLC_READ 0x0001 |
| 417 | #define DW_DLC_WRITE 0x0002 |
| 418 | #define DW_DLC_RDWR 0x0004 |
| 419 | |
| 420 | /* |
| 421 | * Flags used by libdwarf producer. |
| 422 | */ |
| 423 | #define DW_DLC_SIZE_64 0x40000000 |
| 424 | #define DW_DLC_SIZE_32 0x20000000 |
| 425 | #define DW_DLC_OFFSET_SIZE_64 0x10000000 |
| 426 | #define DW_DLC_ISA_MIPS 0x80000000 |
| 427 | #define DW_DLC_ISA_IA64 0x01000000 |
| 428 | #define DW_DLC_STREAM_RELOCATIONS 0x02000000 |
| 429 | #define DW_DLC_SYMBOLIC_RELOCATIONS 0x04000000 |
| 430 | #define DW_DLC_TARGET_BIGENDIAN 0x08000000 |
| 431 | #define DW_DLC_TARGET_LITTLEENDIAN 0x00100000 |
| 432 | |
| 433 | /* |
| 434 | * Instruction set architectures supported by this implementation. |
| 435 | */ |
| 436 | enum Dwarf_ISA { |
| 437 | DW_ISA_ARM, |
| 438 | DW_ISA_IA64, |
| 439 | DW_ISA_MIPS, |
| 440 | DW_ISA_PPC, |
| 441 | DW_ISA_SPARC, |
| 442 | DW_ISA_X86, |
| 443 | DW_ISA_X86_64, |
| 444 | DW_ISA_AARCH64, |
| 445 | DW_ISA_MAX |
| 446 | }; |
| 447 | |
| 448 | /* Function prototype definitions. */ |
| 449 | #ifdef __cplusplus |
| 450 | extern "C" { |
| 451 | #endif |
| 452 | Dwarf_P_Attribute dwarf_add_AT_comp_dir(Dwarf_P_Die, char *, Dwarf_Error *); |
| 453 | Dwarf_P_Attribute dwarf_add_AT_const_value_signedint(Dwarf_P_Die, Dwarf_Signed, |
| 454 | Dwarf_Error *); |
| 455 | Dwarf_P_Attribute dwarf_add_AT_const_value_string(Dwarf_P_Die, char *, |
| 456 | Dwarf_Error *); |
| 457 | Dwarf_P_Attribute dwarf_add_AT_const_value_unsignedint(Dwarf_P_Die, |
| 458 | Dwarf_Unsigned, Dwarf_Error *); |
| 459 | Dwarf_P_Attribute dwarf_add_AT_dataref(Dwarf_P_Debug, Dwarf_P_Die, Dwarf_Half, |
| 460 | Dwarf_Unsigned, Dwarf_Unsigned, Dwarf_Error *); |
| 461 | Dwarf_P_Attribute dwarf_add_AT_flag(Dwarf_P_Debug, Dwarf_P_Die, Dwarf_Half, |
| 462 | Dwarf_Small, Dwarf_Error *); |
| 463 | Dwarf_P_Attribute dwarf_add_AT_location_expr(Dwarf_P_Debug, Dwarf_P_Die, |
| 464 | Dwarf_Half, Dwarf_P_Expr, Dwarf_Error *); |
| 465 | Dwarf_P_Attribute dwarf_add_AT_name(Dwarf_P_Die, char *, Dwarf_Error *); |
| 466 | Dwarf_P_Attribute dwarf_add_AT_producer(Dwarf_P_Die, char *, Dwarf_Error *); |
| 467 | Dwarf_P_Attribute dwarf_add_AT_ref_address(Dwarf_P_Debug, Dwarf_P_Die, |
| 468 | Dwarf_Half, Dwarf_Unsigned, Dwarf_Unsigned, Dwarf_Error *); |
| 469 | Dwarf_P_Attribute dwarf_add_AT_reference(Dwarf_P_Debug, Dwarf_P_Die, Dwarf_Half, |
| 470 | Dwarf_P_Die, Dwarf_Error *); |
| 471 | Dwarf_P_Attribute dwarf_add_AT_signed_const(Dwarf_P_Debug, Dwarf_P_Die, |
| 472 | Dwarf_Half, Dwarf_Signed, Dwarf_Error *); |
| 473 | Dwarf_P_Attribute dwarf_add_AT_string(Dwarf_P_Debug, Dwarf_P_Die, Dwarf_Half, |
| 474 | char *, Dwarf_Error *); |
| 475 | Dwarf_P_Attribute dwarf_add_AT_targ_address(Dwarf_P_Debug, Dwarf_P_Die, |
| 476 | Dwarf_Half, Dwarf_Unsigned, Dwarf_Signed, Dwarf_Error *); |
| 477 | Dwarf_P_Attribute dwarf_add_AT_targ_address_b(Dwarf_P_Debug, Dwarf_P_Die, |
| 478 | Dwarf_Half, Dwarf_Unsigned, Dwarf_Unsigned, Dwarf_Error *); |
| 479 | Dwarf_P_Attribute dwarf_add_AT_unsigned_const(Dwarf_P_Debug, Dwarf_P_Die, |
| 480 | Dwarf_Half, Dwarf_Unsigned, Dwarf_Error *); |
| 481 | Dwarf_Unsigned dwarf_add_arange(Dwarf_P_Debug, Dwarf_Addr, Dwarf_Unsigned, |
| 482 | Dwarf_Signed, Dwarf_Error *); |
| 483 | Dwarf_Unsigned dwarf_add_arange_b(Dwarf_P_Debug, Dwarf_Addr, Dwarf_Unsigned, |
| 484 | Dwarf_Unsigned, Dwarf_Unsigned, Dwarf_Addr, Dwarf_Error *); |
| 485 | Dwarf_Unsigned dwarf_add_die_to_debug(Dwarf_P_Debug, Dwarf_P_Die, |
| 486 | Dwarf_Error *); |
| 487 | Dwarf_Unsigned dwarf_add_directory_decl(Dwarf_P_Debug, char *, Dwarf_Error *); |
| 488 | Dwarf_Unsigned dwarf_add_expr_addr(Dwarf_P_Expr, Dwarf_Unsigned, |
| 489 | Dwarf_Signed, Dwarf_Error *); |
| 490 | Dwarf_Unsigned dwarf_add_expr_addr_b(Dwarf_P_Expr, Dwarf_Unsigned, |
| 491 | Dwarf_Unsigned, Dwarf_Error *); |
| 492 | Dwarf_Unsigned dwarf_add_expr_gen(Dwarf_P_Expr, Dwarf_Small, Dwarf_Unsigned, |
| 493 | Dwarf_Unsigned, Dwarf_Error *); |
| 494 | Dwarf_P_Fde dwarf_add_fde_inst(Dwarf_P_Fde, Dwarf_Small, Dwarf_Unsigned, |
| 495 | Dwarf_Unsigned, Dwarf_Error *); |
| 496 | Dwarf_Unsigned dwarf_add_file_decl(Dwarf_P_Debug, char *, Dwarf_Unsigned, |
| 497 | Dwarf_Unsigned, Dwarf_Unsigned, Dwarf_Error *); |
| 498 | Dwarf_Unsigned dwarf_add_frame_cie(Dwarf_P_Debug, char *, Dwarf_Small, |
| 499 | Dwarf_Small, Dwarf_Small, Dwarf_Ptr, Dwarf_Unsigned, |
| 500 | Dwarf_Error *); |
| 501 | Dwarf_Unsigned dwarf_add_frame_fde(Dwarf_P_Debug, Dwarf_P_Fde, Dwarf_P_Die, |
| 502 | Dwarf_Unsigned, Dwarf_Addr, Dwarf_Unsigned, Dwarf_Unsigned, |
| 503 | Dwarf_Error *); |
| 504 | Dwarf_Unsigned dwarf_add_frame_fde_b(Dwarf_P_Debug, Dwarf_P_Fde, Dwarf_P_Die, |
| 505 | Dwarf_Unsigned, Dwarf_Addr, Dwarf_Unsigned, Dwarf_Unsigned, |
| 506 | Dwarf_Unsigned, Dwarf_Addr, Dwarf_Error *); |
| 507 | Dwarf_Unsigned dwarf_add_funcname(Dwarf_P_Debug, Dwarf_P_Die, char *, |
| 508 | Dwarf_Error *); |
| 509 | Dwarf_Unsigned dwarf_add_line_entry(Dwarf_P_Debug, Dwarf_Unsigned, |
| 510 | Dwarf_Addr, Dwarf_Unsigned, Dwarf_Signed, Dwarf_Bool, |
| 511 | Dwarf_Bool, Dwarf_Error *); |
| 512 | Dwarf_Unsigned dwarf_add_pubname(Dwarf_P_Debug, Dwarf_P_Die, char *, |
| 513 | Dwarf_Error *); |
| 514 | Dwarf_Unsigned dwarf_add_typename(Dwarf_P_Debug, Dwarf_P_Die, char *, |
| 515 | Dwarf_Error *); |
| 516 | Dwarf_Unsigned dwarf_add_varname(Dwarf_P_Debug, Dwarf_P_Die, char *, |
| 517 | Dwarf_Error *); |
| 518 | Dwarf_Unsigned dwarf_add_weakname(Dwarf_P_Debug, Dwarf_P_Die, char *, |
| 519 | Dwarf_Error *); |
| 520 | int dwarf_arrayorder(Dwarf_Die, Dwarf_Unsigned *, Dwarf_Error *); |
| 521 | int dwarf_attr(Dwarf_Die, Dwarf_Half, Dwarf_Attribute *, |
| 522 | Dwarf_Error *); |
| 523 | int dwarf_attrlist(Dwarf_Die, Dwarf_Attribute **, |
| 524 | Dwarf_Signed *, Dwarf_Error *); |
| 525 | int dwarf_attroffset(Dwarf_Attribute, Dwarf_Off *, Dwarf_Error *); |
| 526 | int dwarf_attrval_flag(Dwarf_Die, Dwarf_Half, Dwarf_Bool *, |
| 527 | Dwarf_Error *); |
| 528 | int dwarf_attrval_signed(Dwarf_Die, Dwarf_Half, Dwarf_Signed *, |
| 529 | Dwarf_Error *); |
| 530 | int dwarf_attrval_string(Dwarf_Die, Dwarf_Half, const char **, |
| 531 | Dwarf_Error *); |
| 532 | int dwarf_attrval_unsigned(Dwarf_Die, Dwarf_Half, Dwarf_Unsigned *, |
| 533 | Dwarf_Error *); |
| 534 | int dwarf_bitoffset(Dwarf_Die, Dwarf_Unsigned *, Dwarf_Error *); |
| 535 | int dwarf_bitsize(Dwarf_Die, Dwarf_Unsigned *, Dwarf_Error *); |
| 536 | int dwarf_bytesize(Dwarf_Die, Dwarf_Unsigned *, Dwarf_Error *); |
| 537 | int dwarf_child(Dwarf_Die, Dwarf_Die *, Dwarf_Error *); |
| 538 | void dwarf_dealloc(Dwarf_Debug, Dwarf_Ptr, Dwarf_Unsigned); |
| 539 | int dwarf_def_macro(Dwarf_P_Debug, Dwarf_Unsigned, char *, char *, |
| 540 | Dwarf_Error *); |
| 541 | int dwarf_die_CU_offset(Dwarf_Die, Dwarf_Off *, Dwarf_Error *); |
| 542 | int dwarf_die_CU_offset_range(Dwarf_Die, Dwarf_Off *, Dwarf_Off *, |
| 543 | Dwarf_Error *); |
| 544 | int dwarf_die_abbrev_code(Dwarf_Die); |
| 545 | Dwarf_P_Die dwarf_die_link(Dwarf_P_Die, Dwarf_P_Die, Dwarf_P_Die, |
| 546 | Dwarf_P_Die, Dwarf_P_Die, Dwarf_Error *); |
| 547 | int dwarf_diename(Dwarf_Die, char **, Dwarf_Error *); |
| 548 | int dwarf_dieoffset(Dwarf_Die, Dwarf_Off *, Dwarf_Error *); |
| 549 | int dwarf_elf_init(Elf *, int, Dwarf_Handler, Dwarf_Ptr, |
| 550 | Dwarf_Debug *, Dwarf_Error *); |
| 551 | int dwarf_end_macro_file(Dwarf_P_Debug, Dwarf_Error *); |
| 552 | const char *dwarf_errmsg_(Dwarf_Error *); |
| 553 | int dwarf_expand_frame_instructions(Dwarf_Cie, Dwarf_Ptr, |
| 554 | Dwarf_Unsigned, Dwarf_Frame_Op **, Dwarf_Signed *, |
| 555 | Dwarf_Error *); |
| 556 | Dwarf_Unsigned dwarf_expr_current_offset(Dwarf_P_Expr, Dwarf_Error *); |
| 557 | Dwarf_Addr dwarf_expr_into_block(Dwarf_P_Expr, Dwarf_Unsigned *, |
| 558 | Dwarf_Error *); |
| 559 | Dwarf_P_Fde dwarf_fde_cfa_offset(Dwarf_P_Fde, Dwarf_Unsigned, Dwarf_Signed, |
| 560 | Dwarf_Error *); |
| 561 | void dwarf_fde_cie_list_dealloc(Dwarf_Debug, Dwarf_Cie *, |
| 562 | Dwarf_Signed, Dwarf_Fde *, Dwarf_Signed); |
| 563 | char *dwarf_find_macro_value_start(char *); |
| 564 | int dwarf_finish(Dwarf_Debug, Dwarf_Error *); |
| 565 | int dwarf_formaddr(Dwarf_Attribute, Dwarf_Addr *, Dwarf_Error *); |
| 566 | int dwarf_formblock(Dwarf_Attribute, Dwarf_Block **, Dwarf_Error *); |
| 567 | int dwarf_formexprloc(Dwarf_Attribute, Dwarf_Unsigned *, |
| 568 | Dwarf_Ptr *, Dwarf_Error *); |
| 569 | int dwarf_formflag(Dwarf_Attribute, Dwarf_Bool *, Dwarf_Error *); |
| 570 | int dwarf_formref(Dwarf_Attribute, Dwarf_Off *, Dwarf_Error *); |
| 571 | int dwarf_formsdata(Dwarf_Attribute, Dwarf_Signed *, Dwarf_Error *); |
| 572 | int dwarf_formsig8(Dwarf_Attribute, Dwarf_Sig8 *, Dwarf_Error *); |
| 573 | int dwarf_formstring(Dwarf_Attribute, char **, Dwarf_Error *); |
| 574 | int dwarf_formudata(Dwarf_Attribute, Dwarf_Unsigned *, |
| 575 | Dwarf_Error *); |
| 576 | int dwarf_func_cu_offset(Dwarf_Func, Dwarf_Off *, Dwarf_Error *); |
| 577 | int dwarf_func_die_offset(Dwarf_Func, Dwarf_Off *, |
| 578 | Dwarf_Error *); |
| 579 | int dwarf_func_name_offsets(Dwarf_Func, char **, |
| 580 | Dwarf_Off *, Dwarf_Off *, Dwarf_Error *); |
| 581 | int dwarf_funcname(Dwarf_Func, char **, Dwarf_Error *); |
| 582 | void dwarf_funcs_dealloc(Dwarf_Debug, Dwarf_Func *, Dwarf_Signed); |
| 583 | int dwarf_get_ACCESS_name(unsigned, const char **); |
| 584 | int dwarf_get_ATE_name(unsigned, const char **); |
| 585 | int dwarf_get_AT_name(unsigned, const char **); |
| 586 | int dwarf_get_CC_name(unsigned, const char **); |
| 587 | int dwarf_get_CFA_name(unsigned, const char **); |
| 588 | int dwarf_get_CHILDREN_name(unsigned, const char **); |
| 589 | int dwarf_get_DSC_name(unsigned, const char **); |
| 590 | int dwarf_get_DS_name(unsigned, const char **); |
| 591 | int dwarf_get_EH_name(unsigned, const char **); |
| 592 | int dwarf_get_END_name(unsigned, const char **); |
| 593 | int dwarf_get_FORM_name(unsigned, const char **); |
| 594 | int dwarf_get_ID_name(unsigned, const char **); |
| 595 | int dwarf_get_INL_name(unsigned, const char **); |
| 596 | int dwarf_get_LANG_name(unsigned, const char **); |
| 597 | int dwarf_get_LNE_name(unsigned, const char **); |
| 598 | int dwarf_get_LNS_name(unsigned, const char **); |
| 599 | int dwarf_get_MACINFO_name(unsigned, const char **); |
| 600 | int dwarf_get_OP_name(unsigned, const char **); |
| 601 | int dwarf_get_ORD_name(unsigned, const char **); |
| 602 | int dwarf_get_TAG_name(unsigned, const char **); |
| 603 | int dwarf_get_VIRTUALITY_name(unsigned, const char **); |
| 604 | int dwarf_get_VIS_name(unsigned, const char **); |
| 605 | int dwarf_get_abbrev(Dwarf_Debug, Dwarf_Unsigned, Dwarf_Abbrev *, |
| 606 | Dwarf_Unsigned *, Dwarf_Unsigned *, Dwarf_Error *); |
| 607 | int dwarf_get_abbrev_children_flag(Dwarf_Abbrev, Dwarf_Signed *, |
| 608 | Dwarf_Error *); |
| 609 | int dwarf_get_abbrev_code(Dwarf_Abbrev, Dwarf_Unsigned *, |
| 610 | Dwarf_Error *); |
| 611 | int dwarf_get_abbrev_entry(Dwarf_Abbrev, Dwarf_Signed, Dwarf_Half *, |
| 612 | Dwarf_Signed *, Dwarf_Off *, Dwarf_Error *); |
| 613 | int dwarf_get_abbrev_tag(Dwarf_Abbrev, Dwarf_Half *, Dwarf_Error *); |
| 614 | int dwarf_get_address_size(Dwarf_Debug, Dwarf_Half *, |
| 615 | Dwarf_Error *); |
| 616 | int dwarf_get_arange(Dwarf_Arange *, Dwarf_Unsigned, Dwarf_Addr, |
| 617 | Dwarf_Arange *, Dwarf_Error *); |
| 618 | int (Dwarf_Arange, Dwarf_Off *, |
| 619 | Dwarf_Error *); |
| 620 | int dwarf_get_arange_info(Dwarf_Arange, Dwarf_Addr *, |
| 621 | Dwarf_Unsigned *, Dwarf_Off *, Dwarf_Error *); |
| 622 | int dwarf_get_aranges(Dwarf_Debug, Dwarf_Arange **, Dwarf_Signed *, |
| 623 | Dwarf_Error *); |
| 624 | int dwarf_get_cie_index(Dwarf_Cie, Dwarf_Signed *, Dwarf_Error *); |
| 625 | int dwarf_get_cie_info(Dwarf_Cie, Dwarf_Unsigned *, Dwarf_Small *, |
| 626 | char **, Dwarf_Unsigned *, Dwarf_Unsigned *, Dwarf_Half *, |
| 627 | Dwarf_Ptr *, Dwarf_Unsigned *, Dwarf_Error *); |
| 628 | int dwarf_get_cie_of_fde(Dwarf_Fde, Dwarf_Cie *, Dwarf_Error *); |
| 629 | int dwarf_get_cu_die_offset(Dwarf_Arange, Dwarf_Off *, |
| 630 | Dwarf_Error *); |
| 631 | int (Dwarf_Debug, |
| 632 | Dwarf_Off, Dwarf_Off *, Dwarf_Error *); |
| 633 | int (Dwarf_Debug, |
| 634 | Dwarf_Off, Dwarf_Bool, Dwarf_Off *, Dwarf_Error *); |
| 635 | Dwarf_Bool dwarf_get_die_infotypes_flag(Dwarf_Die); |
| 636 | int dwarf_get_elf(Dwarf_Debug, Elf **, Dwarf_Error *); |
| 637 | int dwarf_get_fde_at_pc(Dwarf_Fde *, Dwarf_Addr, Dwarf_Fde *, |
| 638 | Dwarf_Addr *, Dwarf_Addr *, Dwarf_Error *); |
| 639 | int dwarf_get_fde_info_for_all_regs(Dwarf_Fde, Dwarf_Addr, |
| 640 | Dwarf_Regtable *, Dwarf_Addr *, Dwarf_Error *); |
| 641 | int dwarf_get_fde_info_for_all_regs3(Dwarf_Fde, Dwarf_Addr, |
| 642 | Dwarf_Regtable3 *, Dwarf_Addr *, Dwarf_Error *); |
| 643 | int dwarf_get_fde_info_for_cfa_reg3(Dwarf_Fde, Dwarf_Addr, |
| 644 | Dwarf_Small *, Dwarf_Signed *, Dwarf_Signed *, Dwarf_Signed *, |
| 645 | Dwarf_Ptr *, Dwarf_Addr *, Dwarf_Error *); |
| 646 | int dwarf_get_fde_info_for_reg(Dwarf_Fde, Dwarf_Half, Dwarf_Addr, |
| 647 | Dwarf_Signed *, Dwarf_Signed *, Dwarf_Signed *, |
| 648 | Dwarf_Addr *, Dwarf_Error *); |
| 649 | int dwarf_get_fde_info_for_reg3(Dwarf_Fde, Dwarf_Half, Dwarf_Addr, |
| 650 | Dwarf_Small *, Dwarf_Signed *, Dwarf_Signed *, |
| 651 | Dwarf_Signed *, Dwarf_Ptr *, Dwarf_Addr *, Dwarf_Error *); |
| 652 | int dwarf_get_fde_instr_bytes(Dwarf_Fde, Dwarf_Ptr *, |
| 653 | Dwarf_Unsigned *, Dwarf_Error *); |
| 654 | int dwarf_get_fde_list(Dwarf_Debug, Dwarf_Cie **, Dwarf_Signed *, |
| 655 | Dwarf_Fde **, Dwarf_Signed *, Dwarf_Error *); |
| 656 | int dwarf_get_fde_list_eh(Dwarf_Debug, Dwarf_Cie **, Dwarf_Signed *, |
| 657 | Dwarf_Fde **, Dwarf_Signed *, Dwarf_Error *); |
| 658 | int dwarf_get_fde_n(Dwarf_Fde *, Dwarf_Unsigned, Dwarf_Fde *, |
| 659 | Dwarf_Error *); |
| 660 | int dwarf_get_fde_range(Dwarf_Fde, Dwarf_Addr *, Dwarf_Unsigned *, |
| 661 | Dwarf_Ptr *, Dwarf_Unsigned *, Dwarf_Off *, Dwarf_Signed *, |
| 662 | Dwarf_Off *, Dwarf_Error *); |
| 663 | enum Dwarf_Form_Class dwarf_get_form_class(Dwarf_Half, Dwarf_Half, Dwarf_Half, |
| 664 | Dwarf_Half); |
| 665 | int dwarf_get_funcs(Dwarf_Debug, Dwarf_Func **, Dwarf_Signed *, |
| 666 | Dwarf_Error *); |
| 667 | int dwarf_get_globals(Dwarf_Debug, Dwarf_Global **, Dwarf_Signed *, |
| 668 | Dwarf_Error *); |
| 669 | int dwarf_get_loclist_entry(Dwarf_Debug, Dwarf_Unsigned, |
| 670 | Dwarf_Addr *, Dwarf_Addr *, Dwarf_Ptr *, Dwarf_Unsigned *, |
| 671 | Dwarf_Unsigned *, Dwarf_Error *); |
| 672 | int dwarf_get_macro_details(Dwarf_Debug, Dwarf_Off, Dwarf_Unsigned, |
| 673 | Dwarf_Signed *, Dwarf_Macro_Details **, Dwarf_Error *); |
| 674 | int dwarf_get_pubtypes(Dwarf_Debug, Dwarf_Type **, Dwarf_Signed *, |
| 675 | Dwarf_Error *); |
| 676 | int dwarf_get_ranges(Dwarf_Debug, Dwarf_Off, Dwarf_Ranges **, |
| 677 | Dwarf_Signed *, Dwarf_Unsigned *, Dwarf_Error *); |
| 678 | int dwarf_get_ranges_a(Dwarf_Debug, Dwarf_Off, Dwarf_Die, |
| 679 | Dwarf_Ranges **, Dwarf_Signed *, Dwarf_Unsigned *, |
| 680 | Dwarf_Error *); |
| 681 | int dwarf_get_relocation_info(Dwarf_P_Debug, Dwarf_Signed *, |
| 682 | Dwarf_Signed *, Dwarf_Unsigned *, Dwarf_Relocation_Data *, |
| 683 | Dwarf_Error *); |
| 684 | int dwarf_get_relocation_info_count(Dwarf_P_Debug, Dwarf_Unsigned *, |
| 685 | int *, Dwarf_Error *); |
| 686 | Dwarf_Ptr dwarf_get_section_bytes(Dwarf_P_Debug, Dwarf_Signed, |
| 687 | Dwarf_Signed *, Dwarf_Unsigned *, Dwarf_Error *); |
| 688 | int dwarf_get_section_max_offsets(Dwarf_Debug, Dwarf_Unsigned *, |
| 689 | Dwarf_Unsigned *, Dwarf_Unsigned *, Dwarf_Unsigned *, |
| 690 | Dwarf_Unsigned *, Dwarf_Unsigned *, Dwarf_Unsigned *, |
| 691 | Dwarf_Unsigned *, Dwarf_Unsigned *, Dwarf_Unsigned *, |
| 692 | Dwarf_Unsigned *); |
| 693 | int dwarf_get_section_max_offsets_b(Dwarf_Debug, Dwarf_Unsigned *, |
| 694 | Dwarf_Unsigned *, Dwarf_Unsigned *, Dwarf_Unsigned *, |
| 695 | Dwarf_Unsigned *, Dwarf_Unsigned *, Dwarf_Unsigned *, |
| 696 | Dwarf_Unsigned *, Dwarf_Unsigned *, Dwarf_Unsigned *, |
| 697 | Dwarf_Unsigned *, Dwarf_Unsigned *); |
| 698 | int dwarf_get_str(Dwarf_Debug, Dwarf_Off, char **, Dwarf_Signed *, |
| 699 | Dwarf_Error *); |
| 700 | int dwarf_get_types(Dwarf_Debug, Dwarf_Type **, Dwarf_Signed *, |
| 701 | Dwarf_Error *); |
| 702 | int dwarf_get_vars(Dwarf_Debug, Dwarf_Var **, Dwarf_Signed *, |
| 703 | Dwarf_Error *); |
| 704 | int dwarf_get_weaks(Dwarf_Debug, Dwarf_Weak **, Dwarf_Signed *, |
| 705 | Dwarf_Error *); |
| 706 | int dwarf_global_cu_offset(Dwarf_Global, Dwarf_Off *, Dwarf_Error *); |
| 707 | int dwarf_global_die_offset(Dwarf_Global, Dwarf_Off *, |
| 708 | Dwarf_Error *); |
| 709 | int dwarf_global_formref(Dwarf_Attribute, Dwarf_Off *, |
| 710 | Dwarf_Error *); |
| 711 | int dwarf_global_name_offsets(Dwarf_Global, char **, |
| 712 | Dwarf_Off *, Dwarf_Off *, Dwarf_Error *); |
| 713 | void dwarf_globals_dealloc(Dwarf_Debug, Dwarf_Global *, Dwarf_Signed); |
| 714 | int dwarf_globname(Dwarf_Global, char **, Dwarf_Error *); |
| 715 | int dwarf_hasattr(Dwarf_Die, Dwarf_Half, Dwarf_Bool *, |
| 716 | Dwarf_Error *); |
| 717 | int dwarf_hasform(Dwarf_Attribute, Dwarf_Half, Dwarf_Bool *, |
| 718 | Dwarf_Error *); |
| 719 | int dwarf_highpc(Dwarf_Die, Dwarf_Addr *, Dwarf_Error *); |
| 720 | int dwarf_highpc_b(Dwarf_Die, Dwarf_Addr *, Dwarf_Half *, |
| 721 | enum Dwarf_Form_Class *, Dwarf_Error *); |
| 722 | int dwarf_init(int, int, Dwarf_Handler, Dwarf_Ptr, Dwarf_Debug *, |
| 723 | Dwarf_Error *); |
| 724 | int dwarf_line_srcfileno(Dwarf_Line, Dwarf_Unsigned *, |
| 725 | Dwarf_Error *); |
| 726 | int dwarf_lineaddr(Dwarf_Line, Dwarf_Addr *, Dwarf_Error *); |
| 727 | int dwarf_linebeginstatement(Dwarf_Line, Dwarf_Bool *, |
| 728 | Dwarf_Error *); |
| 729 | int dwarf_lineblock(Dwarf_Line, Dwarf_Bool *, Dwarf_Error *); |
| 730 | int dwarf_lineendsequence(Dwarf_Line, Dwarf_Bool *, Dwarf_Error *); |
| 731 | int dwarf_lineno(Dwarf_Line, Dwarf_Unsigned *, Dwarf_Error *); |
| 732 | int dwarf_lineoff(Dwarf_Line, Dwarf_Signed *, Dwarf_Error *); |
| 733 | int dwarf_linesrc(Dwarf_Line, char **, Dwarf_Error *); |
| 734 | Dwarf_Unsigned dwarf_lne_end_sequence(Dwarf_P_Debug, Dwarf_Addr, Dwarf_Error *); |
| 735 | Dwarf_Unsigned dwarf_lne_set_address(Dwarf_P_Debug, Dwarf_Addr, Dwarf_Unsigned, |
| 736 | Dwarf_Error *); |
| 737 | int dwarf_loclist(Dwarf_Attribute, Dwarf_Locdesc **, Dwarf_Signed *, |
| 738 | Dwarf_Error *); |
| 739 | int dwarf_loclist_from_expr(Dwarf_Debug, Dwarf_Ptr, Dwarf_Unsigned, |
| 740 | Dwarf_Locdesc **, Dwarf_Signed *, Dwarf_Error *); |
| 741 | int dwarf_loclist_from_expr_a(Dwarf_Debug, Dwarf_Ptr, |
| 742 | Dwarf_Unsigned, Dwarf_Half, Dwarf_Locdesc **, |
| 743 | Dwarf_Signed *, Dwarf_Error *); |
| 744 | int dwarf_loclist_from_expr_b(Dwarf_Debug, Dwarf_Ptr, |
| 745 | Dwarf_Unsigned, Dwarf_Half, Dwarf_Half, |
| 746 | Dwarf_Small, Dwarf_Locdesc **, Dwarf_Signed *, |
| 747 | Dwarf_Error *); |
| 748 | int dwarf_loclist_n(Dwarf_Attribute, Dwarf_Locdesc ***, |
| 749 | Dwarf_Signed *, Dwarf_Error *); |
| 750 | int dwarf_lowpc(Dwarf_Die, Dwarf_Addr *, Dwarf_Error *); |
| 751 | Dwarf_P_Die dwarf_new_die(Dwarf_P_Debug, Dwarf_Tag, Dwarf_P_Die, |
| 752 | Dwarf_P_Die, Dwarf_P_Die, Dwarf_P_Die, Dwarf_Error *); |
| 753 | Dwarf_P_Expr dwarf_new_expr(Dwarf_P_Debug, Dwarf_Error *); |
| 754 | Dwarf_P_Fde dwarf_new_fde(Dwarf_P_Debug, Dwarf_Error *); |
| 755 | int (Dwarf_Debug, Dwarf_Unsigned *, |
| 756 | Dwarf_Half *, Dwarf_Off *, Dwarf_Half *, |
| 757 | Dwarf_Unsigned *, Dwarf_Error *); |
| 758 | int (Dwarf_Debug, Dwarf_Unsigned *, |
| 759 | Dwarf_Half *, Dwarf_Off *, Dwarf_Half *, Dwarf_Half *, |
| 760 | Dwarf_Half *, Dwarf_Unsigned *, Dwarf_Error *); |
| 761 | int (Dwarf_Debug, Dwarf_Bool, |
| 762 | Dwarf_Unsigned *, Dwarf_Half *, Dwarf_Off *, Dwarf_Half *, |
| 763 | Dwarf_Half *, Dwarf_Half *, Dwarf_Sig8 *, Dwarf_Unsigned *, |
| 764 | Dwarf_Unsigned *, Dwarf_Error *); |
| 765 | int dwarf_next_types_section(Dwarf_Debug, Dwarf_Error *); |
| 766 | int dwarf_object_finish(Dwarf_Debug, Dwarf_Error *); |
| 767 | int dwarf_object_init(Dwarf_Obj_Access_Interface *, Dwarf_Handler, |
| 768 | Dwarf_Ptr, Dwarf_Debug *, Dwarf_Error *); |
| 769 | int dwarf_offdie(Dwarf_Debug, Dwarf_Off, Dwarf_Die *, |
| 770 | Dwarf_Error *); |
| 771 | int dwarf_offdie_b(Dwarf_Debug, Dwarf_Off, Dwarf_Bool, Dwarf_Die *, |
| 772 | Dwarf_Error *); |
| 773 | Dwarf_Unsigned dwarf_producer_finish(Dwarf_P_Debug, Dwarf_Error *); |
| 774 | Dwarf_P_Debug dwarf_producer_init(Dwarf_Unsigned, Dwarf_Callback_Func, |
| 775 | Dwarf_Handler, Dwarf_Ptr, Dwarf_Error *); |
| 776 | Dwarf_P_Debug dwarf_producer_init_b(Dwarf_Unsigned, Dwarf_Callback_Func_b, |
| 777 | Dwarf_Handler, Dwarf_Ptr, Dwarf_Error *); |
| 778 | int dwarf_producer_set_isa(Dwarf_P_Debug, enum Dwarf_ISA, |
| 779 | Dwarf_Error *); |
| 780 | int dwarf_pubtype_cu_offset(Dwarf_Type, Dwarf_Off *, Dwarf_Error *); |
| 781 | int dwarf_pubtype_die_offset(Dwarf_Type, Dwarf_Off *, |
| 782 | Dwarf_Error *); |
| 783 | int dwarf_pubtype_name_offsets(Dwarf_Type, char **, |
| 784 | Dwarf_Off *, Dwarf_Off *, Dwarf_Error *); |
| 785 | int dwarf_pubtypename(Dwarf_Type, char **, Dwarf_Error *); |
| 786 | void dwarf_pubtypes_dealloc(Dwarf_Debug, Dwarf_Type *, Dwarf_Signed); |
| 787 | void dwarf_ranges_dealloc(Dwarf_Debug, Dwarf_Ranges *, Dwarf_Signed); |
| 788 | void dwarf_reset_section_bytes(Dwarf_P_Debug); |
| 789 | Dwarf_Half dwarf_set_frame_cfa_value(Dwarf_Debug, Dwarf_Half); |
| 790 | Dwarf_Half dwarf_set_frame_rule_initial_value(Dwarf_Debug, Dwarf_Half); |
| 791 | Dwarf_Half dwarf_set_frame_rule_table_size(Dwarf_Debug, Dwarf_Half); |
| 792 | Dwarf_Half dwarf_set_frame_same_value(Dwarf_Debug, Dwarf_Half); |
| 793 | Dwarf_Half dwarf_set_frame_undefined_value(Dwarf_Debug, Dwarf_Half); |
| 794 | int dwarf_set_reloc_application(int); |
| 795 | Dwarf_Ptr dwarf_seterrarg(Dwarf_Debug, Dwarf_Ptr); |
| 796 | Dwarf_Handler dwarf_seterrhand(Dwarf_Debug, Dwarf_Handler); |
| 797 | int dwarf_siblingof(Dwarf_Debug, Dwarf_Die, Dwarf_Die *, Dwarf_Error *); |
| 798 | int dwarf_siblingof_b(Dwarf_Debug, Dwarf_Die, Dwarf_Die *, Dwarf_Bool, |
| 799 | Dwarf_Error *); |
| 800 | int dwarf_srcfiles(Dwarf_Die, char ***, Dwarf_Signed *, Dwarf_Error *); |
| 801 | int dwarf_srclang(Dwarf_Die, Dwarf_Unsigned *, Dwarf_Error *); |
| 802 | int dwarf_srclines(Dwarf_Die, Dwarf_Line **, Dwarf_Signed *, |
| 803 | Dwarf_Error *); |
| 804 | void dwarf_srclines_dealloc(Dwarf_Debug, Dwarf_Line *, |
| 805 | Dwarf_Signed); |
| 806 | int dwarf_start_macro_file(Dwarf_P_Debug, Dwarf_Unsigned, |
| 807 | Dwarf_Unsigned, Dwarf_Error *); |
| 808 | int dwarf_tag(Dwarf_Die, Dwarf_Half *, Dwarf_Error *); |
| 809 | Dwarf_Signed dwarf_transform_to_disk_form(Dwarf_P_Debug, Dwarf_Error *); |
| 810 | int dwarf_type_cu_offset(Dwarf_Type, Dwarf_Off *, Dwarf_Error *); |
| 811 | int dwarf_type_die_offset(Dwarf_Type, Dwarf_Off *, Dwarf_Error *); |
| 812 | int dwarf_type_name_offsets(Dwarf_Type, char **, |
| 813 | Dwarf_Off *, Dwarf_Off *, Dwarf_Error *); |
| 814 | int dwarf_typename(Dwarf_Type, char **, Dwarf_Error *); |
| 815 | void dwarf_types_dealloc(Dwarf_Debug, Dwarf_Type *, Dwarf_Signed); |
| 816 | int dwarf_undef_macro(Dwarf_P_Debug, Dwarf_Unsigned, char *, |
| 817 | Dwarf_Error *); |
| 818 | int dwarf_var_cu_offset(Dwarf_Var, Dwarf_Off *, Dwarf_Error *); |
| 819 | int dwarf_var_die_offset(Dwarf_Var, Dwarf_Off *, |
| 820 | Dwarf_Error *); |
| 821 | int dwarf_var_name_offsets(Dwarf_Var, char **, |
| 822 | Dwarf_Off *, Dwarf_Off *, Dwarf_Error *); |
| 823 | int dwarf_varname(Dwarf_Var, char **, Dwarf_Error *); |
| 824 | void dwarf_vars_dealloc(Dwarf_Debug, Dwarf_Var *, Dwarf_Signed); |
| 825 | int dwarf_vendor_ext(Dwarf_P_Debug, Dwarf_Unsigned, char *, |
| 826 | Dwarf_Error *); |
| 827 | int dwarf_weak_cu_offset(Dwarf_Weak, Dwarf_Off *, Dwarf_Error *); |
| 828 | int dwarf_weak_die_offset(Dwarf_Weak, Dwarf_Off *, |
| 829 | Dwarf_Error *); |
| 830 | int dwarf_weak_name_offsets(Dwarf_Weak, char **, |
| 831 | Dwarf_Off *, Dwarf_Off *, Dwarf_Error *); |
| 832 | int dwarf_weakname(Dwarf_Weak, char **, Dwarf_Error *); |
| 833 | void dwarf_weaks_dealloc(Dwarf_Debug, Dwarf_Weak *, Dwarf_Signed); |
| 834 | int dwarf_whatattr(Dwarf_Attribute, Dwarf_Half *, Dwarf_Error *); |
| 835 | int dwarf_whatform(Dwarf_Attribute, Dwarf_Half *, Dwarf_Error *); |
| 836 | int dwarf_whatform_direct(Dwarf_Attribute, Dwarf_Half *, |
| 837 | Dwarf_Error *); |
| 838 | #ifdef __cplusplus |
| 839 | } |
| 840 | #endif |
| 841 | |
| 842 | #endif /* !_LIBDWARF_H_ */ |
| 843 | |