/usr/include/libdwarf.h is in libdwarf-freebsd-dev 9.2+ds2-4.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 | /*-
* Copyright (c) 2007 John Birrell (jb@freebsd.org)
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
* $FreeBSD$
*/
#ifndef _LIBDWARF_H_
#define _LIBDWARF_H_
#include <libelf.h>
typedef int Dwarf_Bool;
typedef off_t Dwarf_Off;
typedef uint64_t Dwarf_Unsigned;
typedef uint16_t Dwarf_Half;
typedef uint8_t Dwarf_Small;
typedef int64_t Dwarf_Signed;
typedef uint64_t Dwarf_Addr;
typedef void *Dwarf_Ptr;
/* Forward definitions. */
typedef struct _Dwarf_Abbrev *Dwarf_Abbrev;
typedef struct _Dwarf_Arange *Dwarf_Arange;
typedef struct _Dwarf_Attribute *Dwarf_Attribute;
typedef struct _Dwarf_AttrValue *Dwarf_AttrValue;
typedef struct _Dwarf_CU *Dwarf_CU;
typedef struct _Dwarf_Cie *Dwarf_Cie;
typedef struct _Dwarf_Debug *Dwarf_Debug;
typedef struct _Dwarf_Die *Dwarf_Die;
typedef struct _Dwarf_Fde *Dwarf_Fde;
typedef struct _Dwarf_Func *Dwarf_Func;
typedef struct _Dwarf_Inlined_Func *Dwarf_Inlined_Func;
typedef struct _Dwarf_Global *Dwarf_Global;
typedef struct _Dwarf_Line *Dwarf_Line;
typedef struct _Dwarf_Type *Dwarf_Type;
typedef struct _Dwarf_Var *Dwarf_Var;
typedef struct _Dwarf_Weak *Dwarf_Weak;
typedef struct {
Dwarf_Small lr_atom;
Dwarf_Unsigned lr_number;
Dwarf_Unsigned lr_number2;
Dwarf_Unsigned lr_offset;
} Dwarf_Loc;
typedef struct {
Dwarf_Addr ld_lopc;
Dwarf_Addr ld_hipc;
Dwarf_Half ld_cents;
Dwarf_Loc *ld_s;
} Dwarf_Locdesc;
/* receiver function for dwarf_function_iterate_inlined_instance() API */
typedef void (*Dwarf_Inlined_Callback)(Dwarf_Inlined_Func, void *);
/*
* Error numbers which are specific to this implementation.
*/
enum {
DWARF_E_NONE, /* No error. */
DWARF_E_ERROR, /* An error! */
DWARF_E_NO_ENTRY, /* No entry. */
DWARF_E_ARGUMENT, /* Invalid argument. */
DWARF_E_DEBUG_INFO, /* Debug info NULL. */
DWARF_E_MEMORY, /* Insufficient memory. */
DWARF_E_ELF, /* ELF error. */
DWARF_E_INVALID_CU, /* Invalid compilation unit data. */
DWARF_E_CU_VERSION, /* Wrong CU version. */
DWARF_E_MISSING_ABBREV, /* Abbrev not found. */
DWARF_E_NOT_IMPLEMENTED, /* Not implemented. */
DWARF_E_CU_CURRENT, /* No current compilation unit. */
DWARF_E_BAD_FORM, /* Wrong form type for attribute value. */
DWARF_E_INVALID_EXPR, /* Invalid DWARF expression. */
DWARF_E_NUM /* Max error number. */
};
typedef struct _Dwarf_Error {
int err_error; /* DWARF error. */
int elf_error; /* ELF error. */
const char *err_func; /* Function name where error occurred. */
int err_line; /* Line number where error occurred. */
char err_msg[1024]; /* Formatted error message. */
} Dwarf_Error;
/*
* Return values which have to be compatible with other
* implementations of libdwarf.
*/
#define DW_DLV_NO_ENTRY DWARF_E_NO_ENTRY
#define DW_DLV_OK DWARF_E_NONE
#define DW_DLE_DEBUG_INFO_NULL DWARF_E_DEBUG_INFO
#define DW_DLC_READ 0 /* read only access */
/* Function prototype definitions. */
__BEGIN_DECLS
Dwarf_Abbrev dwarf_abbrev_find(Dwarf_CU, uint64_t);
Dwarf_AttrValue dwarf_attrval_find(Dwarf_Die, Dwarf_Half);
Dwarf_Die dwarf_die_find(Dwarf_Die, Dwarf_Unsigned);
const char *dwarf_errmsg(Dwarf_Error *);
const char *get_sht_desc(uint32_t);
const char *get_attr_desc(uint32_t);
const char *get_form_desc(uint32_t);
const char *get_tag_desc(uint32_t);
int dwarf_abbrev_add(Dwarf_CU, uint64_t, uint64_t, uint8_t, Dwarf_Abbrev *, Dwarf_Error *);
int dwarf_attr(Dwarf_Die, Dwarf_Half, Dwarf_Attribute *, Dwarf_Error *);
int dwarf_attr_add(Dwarf_Abbrev, uint64_t, uint64_t, Dwarf_Attribute *, Dwarf_Error *);
int dwarf_attrval(Dwarf_Die, Dwarf_Half, Dwarf_AttrValue *, Dwarf_Error *);
int dwarf_attrval_add(Dwarf_Die, Dwarf_AttrValue, Dwarf_AttrValue *, Dwarf_Error *);
int dwarf_attrval_flag(Dwarf_Die, uint64_t, Dwarf_Bool *, Dwarf_Error *);
int dwarf_attrval_signed(Dwarf_Die, uint64_t, Dwarf_Signed *, Dwarf_Error *);
int dwarf_attrval_string(Dwarf_Die, uint64_t, const char **, Dwarf_Error *);
int dwarf_attrval_unsigned(Dwarf_Die, uint64_t, Dwarf_Unsigned *, Dwarf_Error *);
int dwarf_child(Dwarf_Die, Dwarf_Die *, Dwarf_Error *);
int dwarf_die_add(Dwarf_CU, int, uint64_t, uint64_t, Dwarf_Abbrev, Dwarf_Die *, Dwarf_Error *);
int dwarf_dieoffset(Dwarf_Die, Dwarf_Off *, Dwarf_Error *);
int dwarf_elf_init(Elf *, int, Dwarf_Debug *, Dwarf_Error *);
int dwarf_errno(Dwarf_Error *);
int dwarf_finish(Dwarf_Debug *, Dwarf_Error *);
int dwarf_locdesc(Dwarf_Die, uint64_t, Dwarf_Locdesc **, Dwarf_Signed *, Dwarf_Error *);
int dwarf_locdesc_free(Dwarf_Locdesc *, Dwarf_Error *);
int dwarf_init(int, int, Dwarf_Debug *, Dwarf_Error *);
int dwarf_next_cu_header(Dwarf_Debug, Dwarf_Unsigned *, Dwarf_Half *,
Dwarf_Unsigned *, Dwarf_Half *, Dwarf_Unsigned *, Dwarf_Error *);
int dwarf_op_num(uint8_t, uint8_t *, int);
int dwarf_siblingof(Dwarf_Debug, Dwarf_Die, Dwarf_Die *, Dwarf_Error *);
int dwarf_tag(Dwarf_Die, Dwarf_Half *, Dwarf_Error *);
int dwarf_whatform(Dwarf_Attribute, Dwarf_Half *, Dwarf_Error *);
void dwarf_dealloc(Dwarf_Debug, Dwarf_Ptr, Dwarf_Unsigned);
void dwarf_dump(Dwarf_Debug);
void dwarf_dump_abbrev(Dwarf_Debug);
void dwarf_dump_av(Dwarf_Die, Dwarf_AttrValue);
void dwarf_dump_dbgstr(Dwarf_Debug);
void dwarf_dump_die(Dwarf_Die);
void dwarf_dump_die_at_offset(Dwarf_Debug, Dwarf_Off);
void dwarf_dump_info(Dwarf_Debug);
void dwarf_dump_shstrtab(Dwarf_Debug);
void dwarf_dump_strtab(Dwarf_Debug);
void dwarf_dump_symtab(Dwarf_Debug);
void dwarf_dump_raw(Dwarf_Debug);
void dwarf_dump_tree(Dwarf_Debug);
Dwarf_Func dwarf_find_function_by_offset(Dwarf_Debug dbg, Dwarf_Off off);
Dwarf_Func dwarf_find_function_by_name(Dwarf_Debug dbg, const char *name);
int dwarf_function_get_addr_range(Dwarf_Func f,
Dwarf_Addr *low_pc, Dwarf_Addr *high_pc);
int dwarf_function_is_inlined(Dwarf_Func f);
void dwarf_function_iterate_inlined_instance(Dwarf_Func func,
Dwarf_Inlined_Callback f, void *data);
int dwarf_inlined_function_get_addr_range(Dwarf_Inlined_Func f,
Dwarf_Addr *low_pc, Dwarf_Addr *high_pc);
__END_DECLS
#endif /* !_LIBDWARF_H_ */
|