static size_t
-lookup (htab, hval, val)
- NAME *htab;
- unsigned long int hval;
- TYPE val;
+lookup (NAME *htab, unsigned long int hval, /*@null@*/ TYPE val)
+ /*@*/
{
/* First hash function: simply take the modul but prevent zero. */
size_t idx = 1 + hval % htab->size;
static void
insert_entry_2 (NAME *htab, unsigned long int hval, size_t idx, TYPE data)
+ /*@modifies htab @*/
{
#ifdef ITERATE
if (htab->table[idx].hashval == 0)
first = htab->first;
htab->first = NULL;
#endif
- htab->table = xcalloc ((1 + htab->size), sizeof (htab->table[0]));
+ htab->table = calloc ((1 + htab->size), sizeof (htab->table[0]));
if (htab->table == NULL)
{
/* We cannot enlarge the table. Live with what we got. This
#define INIT(name) _INIT (name)
#define _INIT(name) \
name##_init
-INIT(NAME) (htab, init_size)
- NAME *htab;
- unsigned long int init_size;
+INIT(NAME) (NAME *htab, unsigned long int init_size)
{
/* We need the size to be a prime. */
init_size = next_prime (init_size);
#ifdef ITERATE
htab->first = NULL;
#endif
- htab->table = (void *) xcalloc ((init_size + 1), sizeof (htab->table[0]));
+ htab->table = (void *) calloc ((init_size + 1), sizeof (htab->table[0]));
if (htab->table == NULL)
return -1;
#define FREE(name) _FREE (name)
#define _FREE(name) \
name##_free
-FREE(NAME) (htab)
- NAME *htab;
+FREE(NAME) (NAME *htab)
{
free (htab->table);
return 0;
#define INSERT(name) _INSERT (name)
#define _INSERT(name) \
name##_insert
-INSERT(NAME) (htab, hval, data)
- NAME *htab;
- unsigned long int hval;
- TYPE data;
+INSERT(NAME) (NAME *htab, unsigned long int hval, TYPE data)
{
size_t idx;
/* Make the hash value nonzero. */
- hval = hval ?: 1;
+ hval = hval ? hval : 1;
idx = lookup (htab, hval, data);
#define INSERT(name) _INSERT (name)
#define _INSERT(name) \
name##_overwrite
-INSERT(NAME) (htab, hval, data)
- NAME *htab;
- unsigned long int hval;
- TYPE data;
+INSERT(NAME) (NAME *htab, unsigned long int hval, TYPE data)
{
size_t idx;
/* Make the hash value nonzero. */
- hval = hval ?: 1;
+ hval = hval ? hval : 1;
idx = lookup (htab, hval, data);
#define FIND(name) _FIND (name)
#define _FIND(name) \
name##_find
-FIND(NAME) (htab, hval, val)
- NAME *htab;
- unsigned long int hval;
- TYPE val;
+FIND(NAME) (NAME *htab, unsigned long int hval, TYPE val)
{
size_t idx;
/* Make the hash value nonzero. */
- hval = hval ?: 1;
+ hval = hval ? hval : 1;
idx = lookup (htab, hval, val);
# define _ITERATEFCT(name) \
name##_iterate
TYPE
-ITERATEFCT(NAME) (htab, ptr)
- NAME *htab;
- void **ptr;
+ITERATEFCT(NAME) (NAME *htab, void **ptr)
{
# define TYPENAME(name) _TYPENAME (name)
# define _TYPENAME(name) \
#define _FUNCTIONS(name) \
/* Initialize the hash table. */ \
-extern int name##_init (name *htab, unsigned long int init_size); \
+extern int name##_init (name *htab, unsigned long int init_size) \
+ /*@modifies htab @*/; \
\
/* Free resources allocated for hash table. */ \
-extern int name##_free (name *htab); \
+extern int name##_free (name *htab) \
+ /*@modifies htab @*/; \
\
/* Insert new entry. */ \
-extern int name##_insert (name *htab, unsigned long int hval, TYPE data); \
+extern int name##_insert (name *htab, unsigned long int hval, /*@null@*/ TYPE data) \
+ /*@modifies htab @*/; \
\
/* Insert new entry, possibly overwrite old entry. */ \
-extern int name##_overwrite (name *htab, unsigned long int hval, TYPE data); \
+extern int name##_overwrite (name *htab, unsigned long int hval, TYPE data) \
+ /*@*/; \
\
/* Find entry in hash table. */ \
-extern TYPE name##_find (name *htab, unsigned long int hval, TYPE val);
+/*@null@*/ \
+extern TYPE name##_find (name *htab, unsigned long int hval, /*@null@*/ TYPE val) \
+ /*@*/;
#define FUNCTIONS(name) _FUNCTIONS (name)
FUNCTIONS (NAME)
#ifdef ITERATE
# define _XFUNCTIONS(name) \
/* Get next element in table. */ \
-extern TYPE name##_iterate (name *htab, void **ptr);
+extern TYPE name##_iterate (name *htab, void **ptr) \
+ /*@*/;
# define XFUNCTIONS(name) _XFUNCTIONS (name)
XFUNCTIONS (NAME)
#endif
--- /dev/null
+-D__GNUC__
+
++partial
++forcehints
+
+-warnunixlib
+-warnposix
+
+#+unixlib
++posixlib
+
++strict # lclint level
+
+# --- in progress
+-branchstate
+-compdef
+#-compmempass
+-internalglobs
+-modobserveruncon
+-moduncon # 1 dgettext
+-noeffectuncon # 1 dbg->dbg_errhand
+-nullderef # 15
+-nullpass # 1 faux
+-nullstate # 12
+-paramuse
+-protoparammatch
+-redef
+-retalias # 4
+-retvalint
+-shadow # 3
+-sysunrecog
+-unrecog
+-usereleased
+
+-dependenttrans
+-immediatetrans
+-kepttrans
+-observertrans
+-onlytrans
+-readonlytrans
+-statictrans
+-temptrans
+-unqualifiedtrans
+
+-looploopbreak
+-loopswitchbreak
+-sizeoftype
+
+# --- +partial artifacts
+-declundef
+-exportheader
+-exportheadervar
+-exportlocal
+
+-enummemuse
+-fcnuse
+-typeuse
+-varuse
+
+# --- not-yet at strict level
+-bitwisesigned
+-elseifcomplete
+-exportconst
+-exportfcn
+-exporttype
+-exportvar
+-fielduse
+-forblock # tedious
+-ifblock # tedious
+-namechecks # tedious ANSI compliance checks
+-ptrarith # tedious
+
+-compdestroy
+-mustdefine
+-sys-dir-errors
+
+-strictops
+-whileblock # tedious
+
+# --- not-yet at checks level
++enumint
+-mustfree
+-predboolptr
+-usedef
+
+# --- not-yet at standard level
+-boolops
++boolint
++charint
++ignorequals
++matchanyintegral
AM_CFLAGS = -Wall -Werror
INCLUDES = -I. -I$(srcdir) -I$(srcdir)/../libelf -I.. -I$(srcdir)/../lib
+LINT = splint
+
#lib_LTLIBRARIES = libdwarf.la
noinst_LTLIBRARIES = libdwarf.la
libdwarf_la_LDFLAGS = -Wl,--version-script,$(srcdir)/libdwarf.map
libdwarf_la_LIBADD = ../lib/libeu.la ../libelf/libelf.la
libdwarf_la_DEPENDENCIES = $(libdwarf_la_LIBADD) libdwarf.map
+
+.PSEUDO: lint
+lint:
+ $(LINT) $(DEFS) $(INCLUDES) $(GCC_INCLUDE) \
+ $(addprefix $(srcdir)/,$(libdwarf_la_SOURCES))
+
int
-dwarf_arrayorder (die, return_order, error)
- Dwarf_Die die;
- Dwarf_Unsigned *return_order;
- Dwarf_Error *error;
+dwarf_arrayorder (Dwarf_Die die, Dwarf_Unsigned *return_order,
+ Dwarf_Error *error)
{
return __libdwarf_getconstant (die, DW_AT_ordering, return_order, error);
}
int
-dwarf_attr (die, attr, return_attr, error)
- Dwarf_Die die;
- Dwarf_Half attr;
- Dwarf_Attribute *return_attr;
- Dwarf_Error *error;
+dwarf_attr (Dwarf_Die die, Dwarf_Half attr, Dwarf_Attribute *return_attr,
+ Dwarf_Error *error)
{
Dwarf_Debug dbg = die->cu->dbg;
Dwarf_Small *die_addr;
int
-dwarf_attrlist (die, attrbuf, attrcount, error)
- Dwarf_Die die;
- Dwarf_Attribute **attrbuf;
- Dwarf_Signed *attrcount;
- Dwarf_Error *error;
+dwarf_attrlist (Dwarf_Die die, Dwarf_Attribute **attrbuf,
+ Dwarf_Signed *attrcount, Dwarf_Error *error)
{
Dwarf_Debug dbg = die->cu->dbg;
Dwarf_Small *die_addr;
}
if (nattr == 0)
- return DW_DLV_NO_ENTRY;
+ {
+ *attrcount = 0;
+ *attrbuf = NULL;
+ return DW_DLV_NO_ENTRY;
+ }
/* Allocate the array for the result. */
result = (Dwarf_Attribute *) malloc (nattr * sizeof (Dwarf_Attribute));
int
-dwarf_bitoffset (die, return_size, error)
- Dwarf_Die die;
- Dwarf_Unsigned *return_size;
- Dwarf_Error *error;
+dwarf_bitoffset (Dwarf_Die die, Dwarf_Unsigned *return_size,
+ Dwarf_Error *error)
{
return __libdwarf_getconstant (die, DW_AT_bit_offset, return_size, error);
}
int
-dwarf_bitsize (die, return_size, error)
- Dwarf_Die die;
- Dwarf_Unsigned *return_size;
- Dwarf_Error *error;
+dwarf_bitsize (Dwarf_Die die, Dwarf_Unsigned *return_size, Dwarf_Error *error)
{
return __libdwarf_getconstant (die, DW_AT_bit_size, return_size, error);
}
int
-dwarf_bytesize (die, return_size, error)
- Dwarf_Die die;
- Dwarf_Unsigned *return_size;
- Dwarf_Error *error;
+dwarf_bytesize (Dwarf_Die die, Dwarf_Unsigned *return_size, Dwarf_Error *error)
{
return __libdwarf_getconstant (die, DW_AT_byte_size, return_size, error);
}
int
-dwarf_child (die, return_kid, error)
- Dwarf_Die die;
- Dwarf_Die *return_kid;
- Dwarf_Error *error;
+dwarf_child (Dwarf_Die die, Dwarf_Die *return_kid, Dwarf_Error *error)
{
Dwarf_Debug dbg = die->cu->dbg;
Dwarf_Abbrev abbrev;
void
-dwarf_dealloc (dbg, space, alloc_type)
- Dwarf_Debug dbg;
- Dwarf_Ptr space;
- Dwarf_Unsigned alloc_type;
+dwarf_dealloc (Dwarf_Debug dbg, Dwarf_Ptr space, Dwarf_Unsigned alloc_type)
{
/* XXX For now we don't do anything fancy. */
free (space);
int
-dwarf_die_CU_offset (die, return_offset, error)
- Dwarf_Die die;
- Dwarf_Off *return_offset;
- Dwarf_Error *error;
+dwarf_die_CU_offset (Dwarf_Die die, Dwarf_Off *return_offset,
+ Dwarf_Error *error)
{
*return_offset =
(die->addr
int
-dwarf_diename (die, return_name, error)
- Dwarf_Die die;
- char **return_name;
- Dwarf_Error *error;
+dwarf_diename (Dwarf_Die die, char **return_name, Dwarf_Error *error)
{
Dwarf_Debug dbg = die->cu->dbg;
Dwarf_Small *die_addr;
int
-dwarf_dieoffset (die, return_offset, error)
- Dwarf_Die die;
- Dwarf_Off *return_offset;
- Dwarf_Error *error;
+dwarf_dieoffset (Dwarf_Die die, Dwarf_Off *return_offset, Dwarf_Error *error)
{
*return_offset =
(die->addr - (Dwarf_Small *) die->cu->dbg->sections[IDX_debug_info].addr);
/* Section names. */
+/*@unchecked@*/
static const char dwarf_scnnames[IDX_last][17] =
{
[IDX_debug_info] = ".debug_info",
int
-dwarf_elf_init (elf, access, errhand, errarg, dbg, error)
- Elf *elf;
- Dwarf_Unsigned access;
- Dwarf_Handler errhand;
- Dwarf_Ptr errarg;
- Dwarf_Debug *dbg;
- Dwarf_Error *error;
+dwarf_elf_init (Elf *elf, Dwarf_Unsigned access, Dwarf_Handler errhand,
+ Dwarf_Ptr errarg, Dwarf_Debug *dbg, Dwarf_Error *error)
{
int result = DW_DLV_ERROR;
Dwarf_Debug newdbg;
/* Map error values to strings. */
/* XXX This table should avoid string pointers. Fixing it can wait
until the code is stable. */
+/*@unchecked@*/
static const char *msgs[] =
{
[DW_E_NOERROR] = N_("no error"),
[DW_E_VERSION_ERROR] = N_("version mismatch"),
[DW_E_INVALID_DIR_IDX] = N_("invalid directory index"),
[DW_E_INVALID_ADDR] = N_("invalid address"),
+ [DW_E_NO_ABBR] = N_("no valid abbreviation"),
};
#define nmsgs (sizeof (msgs) / sizeof (msgs[0]))
char *
-dwarf_find_macro_value_start (macro_string)
- char *macro_string;
+dwarf_find_macro_value_start (char *macro_string)
{
int with_paren = 0;
int
-dwarf_finish (dbg, error)
- Dwarf_Debug dbg;
- Dwarf_Error *error;
+dwarf_finish (Dwarf_Debug dbg, Dwarf_Error *error)
{
if (dbg == NULL)
return DW_DLV_ERROR;
int
-dwarf_formaddr (attr, return_addr, error)
- Dwarf_Attribute attr;
- Dwarf_Addr *return_addr;
- Dwarf_Error *error;
+dwarf_formaddr (Dwarf_Attribute attr, Dwarf_Addr *return_addr,
+ Dwarf_Error *error)
{
if (unlikely (attr->form != DW_FORM_addr))
{
int
-dwarf_formblock (attr, return_block, error)
- Dwarf_Attribute attr;
- Dwarf_Block **return_block;
- Dwarf_Error *error;
+dwarf_formblock (Dwarf_Attribute attr, Dwarf_Block **return_block,
+ Dwarf_Error *error)
{
Dwarf_Small *attrp = attr->valp;
Dwarf_Unsigned len;
int
-dwarf_formflag (attr, return_bool, error)
- Dwarf_Attribute attr;
- Dwarf_Bool *return_bool;
- Dwarf_Error *error;
+dwarf_formflag (Dwarf_Attribute attr, Dwarf_Bool *return_bool,
+ Dwarf_Error *error)
{
if (unlikely (attr->form != DW_FORM_flag))
{
int
-dwarf_formref (attr, return_offset, error)
- Dwarf_Attribute attr;
- Dwarf_Off *return_offset;
- Dwarf_Error *error;
+dwarf_formref (Dwarf_Attribute attr, Dwarf_Off *return_offset,
+ Dwarf_Error *error)
{
- switch (attr->code)
+ switch (attr->form)
{
case DW_FORM_ref1:
*return_offset = *attr->valp;
int
-dwarf_formsdata (attr, return_sval, error)
- Dwarf_Attribute attr;
- Dwarf_Signed *return_sval;
- Dwarf_Error *error;
+dwarf_formsdata (Dwarf_Attribute attr, Dwarf_Signed *return_sval,
+ Dwarf_Error *error)
{
Dwarf_Signed u128;
int
-dwarf_formstring (attr, return_string, error)
- Dwarf_Attribute attr;
- char **return_string;
- Dwarf_Error *error;
+dwarf_formstring (Dwarf_Attribute attr, char **return_string,
+ Dwarf_Error *error)
{
char *result;
int
-dwarf_formudata (attr, return_uval, error)
- Dwarf_Attribute attr;
- Dwarf_Unsigned *return_uval;
- Dwarf_Error *error;
+dwarf_formudata (Dwarf_Attribute attr, Dwarf_Unsigned *return_uval,
+ Dwarf_Error *error)
{
Dwarf_Unsigned u128;
int
-dwarf_get_abbrev (dbg, offset, return_abbrev, length, attr_count, error)
- Dwarf_Debug dbg;
- Dwarf_Unsigned offset;
- Dwarf_Abbrev *return_abbrev;
- Dwarf_Unsigned *length;
- Dwarf_Unsigned *attr_count;
- Dwarf_Error *error;
+dwarf_get_abbrev (Dwarf_Debug dbg, Dwarf_Unsigned offset,
+ Dwarf_Abbrev *return_abbrev, Dwarf_Unsigned *length,
+ Dwarf_Unsigned *attr_count, Dwarf_Error *error)
{
Dwarf_Abbrev ent;
Dwarf_Small *abbrevp;
#include "libdwarfP.h"
-int dwarf_get_abbrev_children_flag (abbrev, return_flag, error)
- Dwarf_Abbrev abbrev;
- Dwarf_Signed *return_flag;
- Dwarf_Error *error;
+int dwarf_get_abbrev_children_flag (Dwarf_Abbrev abbrev,
+ Dwarf_Signed *return_flag, Dwarf_Error *error)
{
*return_flag = abbrev->has_children;
return DW_DLV_OK;
#include "libdwarfP.h"
-int dwarf_get_abbrev_code (abbrev, return_code, error)
- Dwarf_Abbrev abbrev;
- Dwarf_Unsigned *return_code;
- Dwarf_Error *error;
+int dwarf_get_abbrev_code (Dwarf_Abbrev abbrev, Dwarf_Unsigned *return_code,
+ Dwarf_Error *error)
{
*return_code = abbrev->code;
return DW_DLV_OK;
int
-dwarf_get_abbrev_entry (abbrev, idx, attr_num, form, offset, error)
- Dwarf_Abbrev abbrev;
- Dwarf_Signed idx;
- Dwarf_Half *attr_num;
- Dwarf_Signed *form;
- Dwarf_Off *offset;
- Dwarf_Error *error;
+dwarf_get_abbrev_entry (Dwarf_Abbrev abbrev, Dwarf_Signed idx,
+ Dwarf_Half *attr_num, Dwarf_Signed *form, Dwarf_Off *offset,
+ Dwarf_Error *error)
{
Dwarf_Small *attrp;
Dwarf_Small *start_attrp;
#include "libdwarfP.h"
-int dwarf_get_abbrev_tag (abbrev, return_tag, error)
- Dwarf_Abbrev abbrev;
- Dwarf_Half *return_tag;
- Dwarf_Error *error;
+int dwarf_get_abbrev_tag (Dwarf_Abbrev abbrev, Dwarf_Half *return_tag,
+ Dwarf_Error *error)
{
*return_tag = abbrev->tag;
return DW_DLV_OK;
int
-dwarf_get_address_size (dbg, addr_size, error)
- Dwarf_Debug dbg;
- Dwarf_Half *addr_size;
- Dwarf_Error *error;
+dwarf_get_address_size (Dwarf_Debug dbg, Dwarf_Half *addr_size,
+ Dwarf_Error *error)
{
*addr_size = elf_getident (dbg->elf, NULL)[EI_CLASS] == ELFCLASS64 ? 8 : 4;
return DW_DLV_OK;
int
-dwarf_get_arange (aranges, arange_count, address, return_arange, error)
- Dwarf_Arange *aranges;
- Dwarf_Unsigned arange_count;
- Dwarf_Addr address;
- Dwarf_Arange *return_arange;
- Dwarf_Error *error;
+dwarf_get_arange (Dwarf_Arange *aranges, Dwarf_Unsigned arange_count,
+ Dwarf_Addr address, Dwarf_Arange *return_arange,
+ Dwarf_Error *error)
{
Dwarf_Unsigned cnt;
int
-dwarf_get_arange_info (arange, start, length, cu_die_offset, error)
- Dwarf_Arange arange;
- Dwarf_Addr *start;
- Dwarf_Unsigned *length;
- Dwarf_Off *cu_die_offset;
- Dwarf_Error *error;
+dwarf_get_arange_info (Dwarf_Arange arange, Dwarf_Addr *start,
+ Dwarf_Unsigned *length, Dwarf_Off *cu_die_offset,
+ Dwarf_Error *error)
{
Dwarf_Small *cu_header;
unsigned int offset_size;
int
-dwarf_get_aranges (dbg, aranges, return_count, error)
- Dwarf_Debug dbg;
- Dwarf_Arange **aranges;
- Dwarf_Signed *return_count;
- Dwarf_Error *error;
+dwarf_get_aranges (Dwarf_Debug dbg, Dwarf_Arange **aranges,
+ Dwarf_Signed *return_count, Dwarf_Error *error)
{
Dwarf_Small *readp;
Dwarf_Small *readendp;
int
-dwarf_get_cie_info (cie, bytes_in_cie, version, augmenter,
- code_alignment_factor, data_alignment_factor,
- return_address_register, initial_instructions,
- initial_instructions_length, error)
- Dwarf_Cie cie;
- Dwarf_Unsigned *bytes_in_cie;
- Dwarf_Small *version;
- char **augmenter;
- Dwarf_Unsigned *code_alignment_factor;
- Dwarf_Signed *data_alignment_factor;
- Dwarf_Half *return_address_register;
- Dwarf_Ptr *initial_instructions;
- Dwarf_Unsigned *initial_instructions_length;
- Dwarf_Error *error;
+dwarf_get_cie_info (Dwarf_Cie cie, Dwarf_Unsigned *bytes_in_cie,
+ Dwarf_Small *version, char **augmenter,
+ Dwarf_Unsigned *code_alignment_factor,
+ Dwarf_Signed *data_alignment_factor,
+ Dwarf_Half *return_address_register,
+ Dwarf_Ptr *initial_instructions,
+ Dwarf_Unsigned *initial_instructions_length,
+ Dwarf_Error *error)
{
*bytes_in_cie = cie->length;
int
-dwarf_get_cie_of_fde (fde, return_cie, error)
- Dwarf_Fde fde;
- Dwarf_Cie *return_cie;
- Dwarf_Error *error;
+dwarf_get_cie_of_fde (Dwarf_Fde fde, Dwarf_Cie *return_cie, Dwarf_Error *error)
{
*return_cie = fde->cie;
return DW_DLV_OK;
int
-dwarf_get_cu_die_offset (arange, return_offset, error)
- Dwarf_Arange arange;
- Dwarf_Off *return_offset;
- Dwarf_Error *error;
+dwarf_get_cu_die_offset (Dwarf_Arange arange, Dwarf_Off *return_offset,
+ Dwarf_Error *error)
{
Dwarf_Small *cu_header;
unsigned int offset_size;
int
-dwarf_get_elf_init (dbg, elf, error)
- Dwarf_Debug dbg;
- Elf **elf;
- Dwarf_Error *error;
+dwarf_get_elf_init (Dwarf_Debug dbg, Elf **elf, Dwarf_Error *error)
{
if (dbg == NULL)
return DW_DLV_ERROR;
int
-dwarf_get_fde_at_pc (fde_data, pc_of_interest, returned_fde, lopc, hipc, error)
- Dwarf_Fde *fde_data;
- Dwarf_Addr pc_of_interest;
- Dwarf_Fde *returned_fde;
- Dwarf_Addr *lopc;
- Dwarf_Addr *hipc;
- Dwarf_Error *error;
+dwarf_get_fde_at_pc (Dwarf_Fde *fde_data, Dwarf_Addr pc_of_interest,
+ Dwarf_Fde *returned_fde, Dwarf_Addr *lopc, Dwarf_Addr *hipc,
+ Dwarf_Error *error)
{
Dwarf_Debug dbg = fde_data[0]->cie->dbg;
int low = 0;
int
-dwarf_get_fde_instr_bytes (fde, outinstrs, outlen, error)
- Dwarf_Fde fde;
- Dwarf_Ptr *outinstrs;
- Dwarf_Unsigned *outlen;
- Dwarf_Error *error;
+dwarf_get_fde_instr_bytes (Dwarf_Fde fde, Dwarf_Ptr *outinstrs,
+ Dwarf_Unsigned *outlen, Dwarf_Error *error)
{
*outinstrs = fde->instructions;
*outlen = fde->instructions_length;
int
-dwarf_get_fde_list_eh (dbg, cie_data, cie_element_count, fde_data,
- fde_element_count, error)
- Dwarf_Debug dbg;
- Dwarf_Cie **cie_data;
- Dwarf_Signed *cie_element_count;
- Dwarf_Fde **fde_data;
- Dwarf_Signed *fde_element_count;
- Dwarf_Error *error;
+dwarf_get_fde_list_eh (Dwarf_Debug dbg, Dwarf_Cie **cie_data,
+ Dwarf_Signed *cie_element_count, Dwarf_Fde **fde_data,
+ Dwarf_Signed *fde_element_count, Dwarf_Error *error)
{
Dwarf_Small *readp;
Dwarf_Small *readendp;
int
-dwarf_get_fde_n (fde_data, fde_index, returned_fde, error)
- Dwarf_Fde *fde_data;
- Dwarf_Unsigned fde_index;
- Dwarf_Fde *returned_fde;
- Dwarf_Error *error;
+dwarf_get_fde_n (Dwarf_Fde *fde_data, Dwarf_Unsigned fde_index,
+ Dwarf_Fde *returned_fde, Dwarf_Error *error)
{
Dwarf_Debug dbg = fde_data[0]->cie->dbg;
int
-dwarf_get_fde_range (fde, low_pc, func_length, fde_bytes, fde_byte_length,
- cie_offset, cie_index, fde_offset, error)
- Dwarf_Fde fde;
- Dwarf_Addr *low_pc;
- Dwarf_Unsigned *func_length;
- Dwarf_Ptr *fde_bytes;
- Dwarf_Unsigned *fde_byte_length;
- Dwarf_Off *cie_offset;
- Dwarf_Signed *cie_index;
- Dwarf_Off *fde_offset;
- Dwarf_Error *error;
+dwarf_get_fde_range (Dwarf_Fde fde, Dwarf_Addr *low_pc,
+ Dwarf_Unsigned *func_length, Dwarf_Ptr *fde_bytes,
+ Dwarf_Unsigned *fde_byte_length, Dwarf_Off *cie_offset,
+ Dwarf_Signed *cie_index, Dwarf_Off *fde_offset,
+ Dwarf_Error *error)
{
*low_pc = fde->initial_location;
*func_length = fde->address_range;
/* Read the whole given section. */
int
-dwarf_get_globals (dbg, globals, return_count, error)
- Dwarf_Debug dbg;
- Dwarf_Global **globals;
- Dwarf_Signed *return_count;
- Dwarf_Error *error;
+dwarf_get_globals (Dwarf_Debug dbg, Dwarf_Global **globals,
+ Dwarf_Signed *return_count, Dwarf_Error *error)
{
Dwarf_Small *readp;
Dwarf_Small *readendp;
int
-dwarf_get_loclist_entry (dbg, offset, hipc_offset, lopc_offset, data,
- entry_len, next_entry, error)
- Dwarf_Debug dbg;
- Dwarf_Unsigned offset;
- Dwarf_Addr *hipc_offset;
- Dwarf_Addr *lopc_offset;
- Dwarf_Ptr *data;
- Dwarf_Unsigned *entry_len;
- Dwarf_Unsigned *next_entry;
- Dwarf_Error *error;
+dwarf_get_loclist_entry (Dwarf_Debug dbg, Dwarf_Unsigned offset,
+ Dwarf_Addr *hipc_offset, Dwarf_Addr *lopc_offset,
+ Dwarf_Ptr *data, Dwarf_Unsigned *entry_len,
+ Dwarf_Unsigned *next_entry, Dwarf_Error *error)
{
Dwarf_Small *locp;
int
-dwarf_get_str (dbg, offset, string, returned_str_len, error)
- Dwarf_Debug dbg;
- Dwarf_Off offset;
- char **string;
- Dwarf_Signed *returned_str_len;
- Dwarf_Error *error;
+dwarf_get_str (Dwarf_Debug dbg, Dwarf_Off offset, char **string,
+ Dwarf_Signed *returned_str_len, Dwarf_Error *error)
{
*string = (char *) dbg->sections[IDX_debug_str].addr;
if (*string == NULL)
Dwarf_Abbrev
-__libdwarf_get_abbrev (dbg, cu, code, error)
- Dwarf_Debug dbg;
- Dwarf_CU_Info cu;
- Dwarf_Word code;
- Dwarf_Error *error;
+internal_function
+__libdwarf_get_abbrev (Dwarf_Debug dbg, Dwarf_CU_Info cu, Dwarf_Word code,
+ Dwarf_Error *error)
{
Dwarf_Abbrev ent;
}
/* If we come here we haven't found anything. */
+ __libdwarf_error (dbg, error, DW_E_NO_ABBR);
return NULL;
}
int
-__libdwarf_getconstant (die, name, return_size, error)
- Dwarf_Die die;
- Dwarf_Half name;
- Dwarf_Unsigned *return_size;
- Dwarf_Error *error;
+internal_function
+__libdwarf_getconstant (Dwarf_Die die, Dwarf_Half name,
+ Dwarf_Unsigned *return_size, Dwarf_Error *error)
{
Dwarf_Debug dbg = die->cu->dbg;
Dwarf_Small *die_addr;
int
-dwarf_global_cu_offset (global, return_offset, error)
- Dwarf_Global global;
- Dwarf_Off *return_offset;
- Dwarf_Error *error;
+dwarf_global_cu_offset (Dwarf_Global global, Dwarf_Off *return_offset,
+ Dwarf_Error *error)
{
Dwarf_Small *cu_header;
unsigned int offset_size;
int
-dwarf_global_die_offset (global, return_offset, error)
- Dwarf_Global global;
- Dwarf_Off *return_offset;
- Dwarf_Error *error;
+dwarf_global_die_offset (Dwarf_Global global, Dwarf_Off *return_offset,
+ Dwarf_Error *error)
{
*return_offset = global->info->offset + global->offset;
int
-dwarf_global_formref (attr, return_offset, error)
- Dwarf_Attribute attr;
- Dwarf_Off *return_offset;
- Dwarf_Error *error;
+dwarf_global_formref (Dwarf_Attribute attr, Dwarf_Off *return_offset,
+ Dwarf_Error *error)
{
switch (attr->form)
{
int
-dwarf_global_name_offsets (global, return_name, die_offset, cu_offset, error)
- Dwarf_Global global;
- char **return_name;
- Dwarf_Off *die_offset;
- Dwarf_Off *cu_offset;
- Dwarf_Error *error;
+dwarf_global_name_offsets (Dwarf_Global global, char **return_name,
+ Dwarf_Off *die_offset, Dwarf_Off *cu_offset, Dwarf_Error *error)
{
if (return_name != NULL)
{
int
-dwarf_globname (global, return_name, error)
- Dwarf_Global global;
- char **return_name;
- Dwarf_Error *error;
+dwarf_globname (Dwarf_Global global, char **return_name, Dwarf_Error *error)
{
*return_name = strdup (global->name);
if (*return_name == NULL)
int
-dwarf_hasattr (die, attr, return_bool, error)
- Dwarf_Die die;
- Dwarf_Half attr;
- Dwarf_Bool *return_bool;
- Dwarf_Error *error;
+dwarf_hasattr (Dwarf_Die die, Dwarf_Half attr, Dwarf_Bool *return_bool,
+ Dwarf_Error *error)
{
Dwarf_Debug dbg = die->cu->dbg;
Dwarf_Small *die_addr;
int
-dwarf_hasform (attr, form, return_hasform, error)
- Dwarf_Attribute attr;
- Dwarf_Half form;
- Dwarf_Bool *return_hasform;
- Dwarf_Error *error;
+dwarf_hasform (Dwarf_Attribute attr, Dwarf_Half form,
+ Dwarf_Bool *return_hasform, Dwarf_Error *error)
{
*return_hasform = attr->form == form;
return DW_DLV_OK;
int
-dwarf_highpc (die, return_highpc, error)
- Dwarf_Die die;
- Dwarf_Addr *return_highpc;
- Dwarf_Error *error;
+dwarf_highpc (Dwarf_Die die, Dwarf_Addr *return_highpc, Dwarf_Error *error)
{
Dwarf_Debug dbg = die->cu->dbg;
Dwarf_Small *die_addr;
int
-dwarf_init (fd, access, errhand, errarg, dbg, error)
- int fd;
- Dwarf_Unsigned access;
- Dwarf_Handler errhand;
- Dwarf_Ptr errarg;
- Dwarf_Debug *dbg;
- Dwarf_Error *error;
+dwarf_init (int fd, Dwarf_Unsigned access, Dwarf_Handler errhand,
+ Dwarf_Ptr errarg, Dwarf_Debug *dbg, Dwarf_Error *error)
{
Elf *elf;
Elf_Cmd cmd;
int
-dwarf_lineaddr (line, return_lineaddr, error)
- Dwarf_Line line;
- Dwarf_Addr *return_lineaddr;
- Dwarf_Error *error;
+dwarf_lineaddr (Dwarf_Line line, Dwarf_Addr *return_lineaddr,
+ Dwarf_Error *error)
{
*return_lineaddr = line->addr;
return DW_DLV_OK;
int
-dwarf_linebeginstatement (line, return_bool, error)
- Dwarf_Line line;
- Dwarf_Bool *return_bool;
- Dwarf_Error *error;
+dwarf_linebeginstatement (Dwarf_Line line, Dwarf_Bool *return_bool,
+ Dwarf_Error *error)
{
*return_bool = line->is_stmt;
return DW_DLV_OK;
int
-dwarf_lineblock (line, return_bool, error)
- Dwarf_Line line;
- Dwarf_Bool *return_bool;
- Dwarf_Error *error;
+dwarf_lineblock (Dwarf_Line line, Dwarf_Bool *return_bool, Dwarf_Error *error)
{
*return_bool = line->basic_block;
return DW_DLV_OK;
int
-dwarf_lineendsequence (line, return_bool, error)
- Dwarf_Line line;
- Dwarf_Bool *return_bool;
- Dwarf_Error *error;
+dwarf_lineendsequence (Dwarf_Line line, Dwarf_Bool *return_bool,
+ Dwarf_Error *error)
{
*return_bool = line->end_sequence;
return DW_DLV_OK;
int
-dwarf_lineepiloguebegin (line, return_bool, error)
- Dwarf_Line line;
- Dwarf_Bool *return_bool;
- Dwarf_Error *error;
+dwarf_lineepiloguebegin (Dwarf_Line line, Dwarf_Bool *return_bool,
+ Dwarf_Error *error)
{
*return_bool = line->epilogue_begin;
return DW_DLV_OK;
int
-dwarf_lineno (line, return_lineno, error)
- Dwarf_Line line;
- Dwarf_Unsigned *return_lineno;
- Dwarf_Error *error;
+dwarf_lineno (Dwarf_Line line, Dwarf_Unsigned *return_lineno,
+ Dwarf_Error *error)
{
*return_lineno = line->line;
return DW_DLV_OK;
int
-dwarf_lineoff (line, return_lineoff, error)
- Dwarf_Line line;
- Dwarf_Signed *return_lineoff;
- Dwarf_Error *error;
+dwarf_lineoff (Dwarf_Line line, Dwarf_Signed *return_lineoff,
+ Dwarf_Error *error)
{
- *return_lineoff = line->column ?: -1;
+ *return_lineoff = line->column ? line->column : -1;
return DW_DLV_OK;
}
int
-dwarf_lineprologueend (line, return_bool, error)
- Dwarf_Line line;
- Dwarf_Bool *return_bool;
- Dwarf_Error *error;
+dwarf_lineprologueend (Dwarf_Line line, Dwarf_Bool *return_bool,
+ Dwarf_Error *error)
{
*return_bool = line->prologue_end;
return DW_DLV_OK;
int
-dwarf_linesrc (line, return_linesrc, error)
- Dwarf_Line line;
- char **return_linesrc;
- Dwarf_Error *error;
+dwarf_linesrc (Dwarf_Line line, char **return_linesrc, Dwarf_Error *error)
{
if (unlikely (line->file >= line->files->nfiles))
{
int
-dwarf_loclist (attr, llbuf, listlen, error)
- Dwarf_Attribute attr;
- Dwarf_Locdesc **llbuf;
- Dwarf_Signed *listlen;
- Dwarf_Error *error;
+dwarf_loclist (Dwarf_Attribute attr, Dwarf_Locdesc **llbuf,
+ Dwarf_Signed *listlen, Dwarf_Error *error)
{
Dwarf_CU_Info cu = attr->cu;
Dwarf_Debug dbg = cu->dbg;
case DW_OP_reg31:
case DW_OP_nop:
case DW_OP_push_object_address:
- case DW_OP_calli:
+ case DW_OP_call_ref:
/* No operand. */
break;
int
-dwarf_lowpc (die, return_lowpc, error)
- Dwarf_Die die;
- Dwarf_Addr *return_lowpc;
- Dwarf_Error *error;
+dwarf_lowpc (Dwarf_Die die, Dwarf_Addr *return_lowpc, Dwarf_Error *error)
{
Dwarf_Debug dbg = die->cu->dbg;
Dwarf_Small *die_addr;
cu->last_abbrev_offset = cu->abbrev_offset;
/* The address size. Always an 8-bit value. */
- cu->address_size = *cu_bytes;
+ cu->address_size = *cu_bytes++;
+
+ /* Store the header length. */
+ cu->header_length = (cu_bytes
+ - ((Dwarf_Small *) dbg->sections[IDX_debug_info].addr
+ + offset));
/* Initilize a few more members. */
if (unlikely (Dwarf_Abbrev_Hash_init (&cu->abbrev_hash,
int
-dwarf_next_cu_header (dbg, cu_header_length, version_stamp, abbrev_offset,
- address_size, next_cu_header, error)
- Dwarf_Debug dbg;
- Dwarf_Unsigned *cu_header_length;
- Dwarf_Half *version_stamp;
- Dwarf_Unsigned *abbrev_offset;
- Dwarf_Half *address_size;
- Dwarf_Unsigned *next_cu_header;
- Dwarf_Error *error;
+dwarf_next_cu_header (Dwarf_Debug dbg, Dwarf_Unsigned *cu_header_length,
+ Dwarf_Half *version_stamp, Dwarf_Unsigned *abbrev_offset,
+ Dwarf_Half *address_size, Dwarf_Unsigned *next_cu_header,
+ Dwarf_Error *error)
{
Dwarf_Unsigned offset_next_cu;
Dwarf_CU_Info cu;
/* Extract the information and put it where the user wants it. */
if (cu_header_length != NULL)
- *cu_header_length = cu->length;
+ *cu_header_length = cu->header_length;
if (version_stamp != NULL)
*version_stamp = cu->version_stamp;
/* XXX This function will have to be optimized. The search is too linear
to be performed too often -> O(n²). */
+/*@null@*/
static Dwarf_CU_Info
find_cu (Dwarf_Debug dbg, Dwarf_Off offset, Dwarf_Error *error)
+ /*@modifies dbg, *error @*/
{
Dwarf_CU_Info cu;
Dwarf_Word cu_offset;
int
-dwarf_offdie (dbg, offset, return_die, error)
- Dwarf_Debug dbg;
- Dwarf_Off offset;
- Dwarf_Die *return_die;
- Dwarf_Error *error;
+dwarf_offdie (Dwarf_Debug dbg, Dwarf_Off offset, Dwarf_Die *return_die,
+ Dwarf_Error *error)
{
Dwarf_CU_Info cu;
Dwarf_Die new_die;
Dwarf_Ptr
-dwarf_seterrarg (dbg, errarg)
- Dwarf_Debug dbg;
- Dwarf_Ptr errarg;
+dwarf_seterrarg (Dwarf_Debug dbg, Dwarf_Ptr errarg)
{
Dwarf_Ptr old = dbg->dbg_errarg;
dbg->dbg_errarg = errarg;
Dwarf_Handler
-dwarf_seterrhand (dbg, errhand)
- Dwarf_Debug dbg;
- Dwarf_Handler errhand;
+dwarf_seterrhand (Dwarf_Debug dbg, Dwarf_Handler errhand)
{
Dwarf_Handler old = dbg->dbg_errhand;
dbg->dbg_errhand = errhand;
int
-dwarf_siblingof (dbg, die, return_sub, error)
- Dwarf_Debug dbg;
- Dwarf_Die die;
- Dwarf_Die *return_sub;
- Dwarf_Error *error;
+dwarf_siblingof (Dwarf_Debug dbg, Dwarf_Die die, Dwarf_Die *return_sub,
+ Dwarf_Error *error)
{
Dwarf_Small *die_addr;
Dwarf_CU_Info cu;
{
Dwarf_Unsigned die_offset;
- /* We are supposedto return the DW_TAG_compile_unit die for the
+ /* We are supposed to return the DW_TAG_compile_unit die for the
current compile unit. For this to succeed the user must have
looked for the compile unit before. */
if (dbg->cu_list_current == NULL)
static int
-read_file_names (Dwarf_Debug dbg, char *comp_dir, Dwarf_Small **linepp,
- char ***result, Dwarf_Signed *nresult, Dwarf_Error *error)
+read_file_names (Dwarf_Debug dbg, /*@null@*/ char *comp_dir,
+ Dwarf_Small **linepp, char ***result, Dwarf_Signed *nresult,
+ Dwarf_Error *error)
+ /*@modifies *linepp, *result, *nresult, *error @*/
{
Dwarf_Small *linep = *linepp;
struct dirlist comp_dir_elem;
int
-dwarf_srcfiles (die, srcfiles, srcfilecount, error)
- Dwarf_Die die;
- char ***srcfiles;
- Dwarf_Signed *srcfilecount;
- Dwarf_Error *error;
+dwarf_srcfiles (Dwarf_Die die, char ***srcfiles, Dwarf_Signed *srcfilecount,
+ Dwarf_Error *error)
{
Dwarf_CU_Info cu = die->cu;
Dwarf_Debug dbg = cu->dbg;
int
-dwarf_srclang (die, return_lang, error)
- Dwarf_Die die;
- Dwarf_Unsigned *return_lang;
- Dwarf_Error *error;
+dwarf_srclang (Dwarf_Die die, Dwarf_Unsigned *return_lang, Dwarf_Error *error)
{
return __libdwarf_getconstant (die, DW_AT_language, return_lang, error);
}
int
-dwarf_srclines (die, linebuf, linecount, error)
- Dwarf_Die die;
- Dwarf_Line **linebuf;
- Dwarf_Signed *linecount;
- Dwarf_Error *error;
+dwarf_srclines (Dwarf_Die die, Dwarf_Line **linebuf, Dwarf_Signed *linecount,
+ Dwarf_Error *error)
{
Dwarf_CU_Info cu = die->cu;
Dwarf_Debug dbg = cu->dbg;
int
-dwarf_tag (die, tagval, error)
- Dwarf_Die die;
- Dwarf_Half *tagval;
- Dwarf_Error *error;
+dwarf_tag (Dwarf_Die die, Dwarf_Half *tagval, Dwarf_Error *error)
{
*tagval = die->abbrev->tag;
return DW_DLV_OK;
int
-dwarf_whatattr (attr, return_attr, error)
- Dwarf_Attribute attr;
- Dwarf_Half *return_attr;
- Dwarf_Error *error;
+dwarf_whatattr (Dwarf_Attribute attr, Dwarf_Half *return_attr,
+ Dwarf_Error *error)
{
*return_attr = attr->code;
return DW_DLV_OK;
int
-dwarf_whatform (attr, return_form, error)
- Dwarf_Attribute attr;
- Dwarf_Half *return_form;
- Dwarf_Error *error;
+dwarf_whatform (Dwarf_Attribute attr, Dwarf_Half *return_form,
+ Dwarf_Error *error)
{
*return_form = attr->form;
return DW_DLV_OK;
this library. Set the error handler and the parameter passed. */
extern int dwarf_init (int fd, Dwarf_Unsigned access,
Dwarf_Handler errhand, Dwarf_Ptr errarg,
- Dwarf_Debug *dbg, Dwarf_Error *errdesc);
+ Dwarf_Debug *dbg, Dwarf_Error *errdesc)
+ /*@modifies *dbg, *errdesc @*/;
/* Similar to `dwarf_init' but instead of a file descriptor of ELF
descriptor is passed. */
extern int dwarf_elf_init (Elf *elf, Dwarf_Unsigned access,
Dwarf_Handler errhand, Dwarf_Ptr errarg,
- Dwarf_Debug *dbg, Dwarf_Error *errdesc);
+ Dwarf_Debug *dbg, Dwarf_Error *errdesc)
+ /*@modifies elf, *dbg, *errdesc @*/;
/* Return ELF handle. */
extern int dwarf_get_elf_init (Dwarf_Debug dbg, Elf **elf,
- Dwarf_Error *errdesc);
+ Dwarf_Error *errdesc)
+ /*@modifies *elf, *errdesc @*/;
/* Free resources allocated for debug handle. */
-extern int dwarf_finish (Dwarf_Debug dbg, Dwarf_Error *errdesc);
+extern int dwarf_finish (/*@only@*/ Dwarf_Debug dbg, Dwarf_Error *errdesc)
+ /*@modifies dbg, *errdesc @*/;
/* Return information about current and find new compile unit header. */
Dwarf_Unsigned *abbrev_offset,
Dwarf_Half *address_size,
Dwarf_Unsigned *next_cu_header,
- Dwarf_Error *errdesc);
+ Dwarf_Error *errdesc)
+ /*@modifies dbg, *cu_header_length, *version_stamp, *abbrev_offset,
+ *address_size, *next_cu_header, *errdesc @*/;
/* Return sibling of given DIE. */
extern int dwarf_siblingof (Dwarf_Debug dbg, Dwarf_Die die,
- Dwarf_Die *return_sub, Dwarf_Error *errdesc);
+ Dwarf_Die *return_sub, Dwarf_Error *errdesc)
+ /*@modifies dbg, die, *return_sub, *errdesc @*/;
/* Return child of DIE. */
extern int dwarf_child (Dwarf_Die die, Dwarf_Die *return_kid,
- Dwarf_Error *errdesc);
+ Dwarf_Error *errdesc)
+ /*@modifies die, *return_kid, *errdesc @*/;
/* Return DIE at given offset. */
extern int dwarf_offdie (Dwarf_Debug dbg, Dwarf_Off offset,
- Dwarf_Die *return_die, Dwarf_Error *errdesc);
+ Dwarf_Die *return_die, Dwarf_Error *errdesc)
+ /*@modifies dbg, *return_die, *errdesc @*/;
/* Return tag of DIE. */
-extern int dwarf_tag (Dwarf_Die die, Dwarf_Half *tagval, Dwarf_Error *errdesc);
+extern int dwarf_tag (Dwarf_Die die, Dwarf_Half *tagval, Dwarf_Error *errdesc)
+ /*@modifies *tagval, *errdesc @*/;
/* Return offset of DIE in .debug_info section. */
extern int dwarf_dieoffset (Dwarf_Die die, Dwarf_Off *return_offset,
- Dwarf_Error *errdesc);
+ Dwarf_Error *errdesc)
+ /*@modifies *return_offset, *errdesc @*/;
/* Return offset of DIE in compile unit data. */
extern int dwarf_die_CU_offset (Dwarf_Die die, Dwarf_Off *return_offset,
- Dwarf_Error *errdesc);
+ Dwarf_Error *errdesc)
+ /*@modifies *return_offset, *errdesc @*/;
/* Return name attribute of DIE. */
extern int dwarf_diename (Dwarf_Die die, char **return_name,
- Dwarf_Error *errdesc);
+ Dwarf_Error *errdesc)
+ /*@modifies die, *return_name, *errdesc @*/;
/* Return list of attributes for DIE. */
extern int dwarf_attrlist (Dwarf_Die die, Dwarf_Attribute **attrbuf,
- Dwarf_Signed *attrcount, Dwarf_Error *errdesc);
+ Dwarf_Signed *attrcount, Dwarf_Error *errdesc)
+ /*@modifies die, *attrbuf, *attrcount, *errdesc @*/;
/* Determine whether DIE has attribute specified of given type. */
extern int dwarf_hasattr (Dwarf_Die die, Dwarf_Half attr,
- Dwarf_Bool *return_bool, Dwarf_Error *errdesc);
+ Dwarf_Bool *return_bool, Dwarf_Error *errdesc)
+ /*@modifies die, *return_bool, *errdesc @*/;
/* Return DIE attribute with specified of given type. */
extern int dwarf_attr (Dwarf_Die die, Dwarf_Half attr,
- Dwarf_Attribute *return_attr, Dwarf_Error *errdesc);
+ Dwarf_Attribute *return_attr, Dwarf_Error *errdesc)
+ /*@modifies die, *return_attr, *errdesc @*/;
/* Return low program counter value associated with die. */
extern int dwarf_lowpc (Dwarf_Die die, Dwarf_Addr *return_lowpc,
- Dwarf_Error *errdesc);
+ Dwarf_Error *errdesc)
+ /*@modifies die, *return_lowpc, *errdesc @*/;
/* Return high program counter value associated with die. */
extern int dwarf_highpc (Dwarf_Die die, Dwarf_Addr *return_lowpc,
- Dwarf_Error *errdesc);
+ Dwarf_Error *errdesc)
+ /*@modifies die, *return_lowpc, *errdesc @*/;
/* Return byte size value associated with die. */
extern int dwarf_bytesize (Dwarf_Die die, Dwarf_Unsigned *return_size,
- Dwarf_Error *errdesc);
+ Dwarf_Error *errdesc)
+ /*@modifies die, *return_size, *errdesc @*/;
/* Return bit size value associated with die. */
extern int dwarf_bitsize (Dwarf_Die die, Dwarf_Unsigned *return_size,
- Dwarf_Error *errdesc);
+ Dwarf_Error *errdesc)
+ /*@modifies die, *return_size, *errdesc @*/;
/* Return bit offset value associated with die. */
extern int dwarf_bitoffset (Dwarf_Die die, Dwarf_Unsigned *return_size,
- Dwarf_Error *errdesc);
+ Dwarf_Error *errdesc)
+ /*@modifies die, *return_size, *errdesc @*/;
/* Return source language associated with die. */
extern int dwarf_srclang (Dwarf_Die die, Dwarf_Unsigned *return_lang,
- Dwarf_Error *errdesc);
+ Dwarf_Error *errdesc)
+ /*@modifies die, *return_lang, *errdesc @*/;
/* Return source language associated with die. */
extern int dwarf_arrayorder (Dwarf_Die die, Dwarf_Unsigned *return_order,
- Dwarf_Error *errdesc);
+ Dwarf_Error *errdesc)
+ /*@modifies die, *return_order, *errdesc @*/;
/* Determine whether attribute has given form. */
extern int dwarf_hasform (Dwarf_Attribute attr, Dwarf_Half form,
- Dwarf_Bool *return_hasform, Dwarf_Error *errdesc);
+ Dwarf_Bool *return_hasform, Dwarf_Error *errdesc)
+ /*@modifies *return_hasform, *errdesc @*/;
/* Return form of attribute. */
extern int dwarf_whatform (Dwarf_Attribute attr, Dwarf_Half *return_form,
- Dwarf_Error *errdesc);
+ Dwarf_Error *errdesc)
+ /*@modifies *return_form, *errdesc @*/;
/* Return code of attribute. */
extern int dwarf_whatattr (Dwarf_Attribute attr, Dwarf_Half *return_attr,
- Dwarf_Error *errdesc);
+ Dwarf_Error *errdesc)
+ /*@modifies *return_attr, *errdesc @*/;
/* Return compile-unit relative offset of reference associated with form. */
extern int dwarf_formref (Dwarf_Attribute attr, Dwarf_Off *return_offset,
- Dwarf_Error *errdesc);
+ Dwarf_Error *errdesc)
+ /*@modifies *return_offset, *errdesc @*/;
/* Return .debug_info section global offset of reference associated
with form. */
extern int dwarf_global_formref (Dwarf_Attribute attr,
Dwarf_Off *return_offset,
- Dwarf_Error *errdesc);
+ Dwarf_Error *errdesc)
+ /*@modifies *return_offset, *errdesc @*/;
/* Return address represented by attribute. */
extern int dwarf_formaddr (Dwarf_Attribute attr, Dwarf_Addr *return_addr,
- Dwarf_Error *errdesc);
+ Dwarf_Error *errdesc)
+ /*@modifies *return_addr, *errdesc @*/;
/* Return flag represented by attribute. */
extern int dwarf_formflag (Dwarf_Attribute attr, Dwarf_Bool *return_bool,
- Dwarf_Error *errdesc);
+ Dwarf_Error *errdesc)
+ /*@modifies *return_bool, *errdesc @*/;
/* Return unsigned constant represented by attribute. */
extern int dwarf_formudata (Dwarf_Attribute attr, Dwarf_Unsigned *return_uval,
- Dwarf_Error *errdesc);
+ Dwarf_Error *errdesc)
+ /*@modifies *return_uval, *errdesc @*/;
/* Return signed constant represented by attribute. */
extern int dwarf_formsdata (Dwarf_Attribute attr, Dwarf_Signed *return_uval,
- Dwarf_Error *errdesc);
+ Dwarf_Error *errdesc)
+ /*@modifies *return_uval, *errdesc @*/;
/* Return block of uninterpreted data represented by attribute. */
extern int dwarf_formblock (Dwarf_Attribute attr, Dwarf_Block **return_block,
- Dwarf_Error *errdesc);
+ Dwarf_Error *errdesc)
+ /*@modifies *return_block, *errdesc @*/;
/* Return string represented by attribute. */
extern int dwarf_formstring (Dwarf_Attribute attr, char **return_string,
- Dwarf_Error *errdesc);
+ Dwarf_Error *errdesc)
+ /*@modifies *return_string, *errdesc @*/;
/* Return location expression list. */
extern int dwarf_loclist (Dwarf_Attribute attr, Dwarf_Locdesc **llbuf,
- Dwarf_Signed *listlen, Dwarf_Error *errdesc);
+ Dwarf_Signed *listlen, Dwarf_Error *errdesc)
+ /*@modifies *llbuf, *listlen, *errdesc @*/;
/* Return source lines of compilation unit. */
extern int dwarf_srclines (Dwarf_Die die, Dwarf_Line **linebuf,
- Dwarf_Signed *linecount, Dwarf_Error *errdesc);
+ Dwarf_Signed *linecount, Dwarf_Error *errdesc)
+ /*@modifies die, *linebuf, *linecount, *errdesc @*/;
/* Return files used in compilation unit. */
extern int dwarf_srcfiles (Dwarf_Die die, char ***srcfiles,
- Dwarf_Signed *srcfilecount, Dwarf_Error *errdesc);
+ Dwarf_Signed *srcfilecount, Dwarf_Error *errdesc)
+ /*@modifies die, *srcfiles, *srcfilecount, *errdesc @*/;
/* Determine whether line is the beginning of a statement. */
extern int dwarf_linebeginstatement (Dwarf_Line line, Dwarf_Bool *return_bool,
- Dwarf_Error *errdesc);
+ Dwarf_Error *errdesc)
+ /*@modifies *return_bool, *errdesc @*/;
/* Determine whether line is marked as ending a text sequence. */
extern int dwarf_lineendsequence (Dwarf_Line line, Dwarf_Bool *return_bool,
- Dwarf_Error *errdesc);
+ Dwarf_Error *errdesc)
+ /*@modifies *return_bool, *errdesc @*/;
/* Return source statement line number. */
extern int dwarf_lineno (Dwarf_Line line, Dwarf_Unsigned *return_lineno,
- Dwarf_Error *errdesc);
+ Dwarf_Error *errdesc)
+ /*@modifies *return_lineno, *errdesc @*/;
/* Return address associate with line. */
extern int dwarf_lineaddr (Dwarf_Line line, Dwarf_Addr *return_lineaddr,
- Dwarf_Error *errdesc);
+ Dwarf_Error *errdesc)
+ /*@modifies *return_lineaddr, *errdesc @*/;
/* Return column at which the statement begins. */
extern int dwarf_lineoff (Dwarf_Line line, Dwarf_Signed *return_lineoff,
- Dwarf_Error *errdesc);
+ Dwarf_Error *errdesc)
+ /*@modifies *return_lineoff, *errdesc @*/;
/* Return source file for line. */
extern int dwarf_linesrc (Dwarf_Line line, char **return_linesrc,
- Dwarf_Error *errdesc);
+ Dwarf_Error *errdesc)
+ /*@modifies *return_linesrc, *errdesc @*/;
/* Determine whether line is marked as beginning a basic block. */
extern int dwarf_lineblock (Dwarf_Line line, Dwarf_Bool *return_bool,
- Dwarf_Error *errdesc);
+ Dwarf_Error *errdesc)
+ /*@modifies *return_bool, *errdesc @*/;
/* Determine whether line is marked as ending the prologue. */
extern int dwarf_lineprologueend (Dwarf_Line line, Dwarf_Bool *return_bool,
- Dwarf_Error *errdesc);
+ Dwarf_Error *errdesc)
+ /*@modifies *return_bool, *errdesc @*/;
/* Determine whether line is marked as beginning the epilogue. */
extern int dwarf_lineepiloguebegin (Dwarf_Line line, Dwarf_Bool *return_bool,
- Dwarf_Error *errdesc);
+ Dwarf_Error *errdesc)
+ /*@modifies *return_bool, *errdesc @*/;
/* Return list of global definitions. */
extern int dwarf_get_globals (Dwarf_Debug dbg, Dwarf_Global **globals,
Dwarf_Signed *return_count,
- Dwarf_Error *errdesc);
+ Dwarf_Error *errdesc)
+ /*@modifies *globals, *return_count, *errdesc @*/;
/* Return name for global definition. */
extern int dwarf_globname (Dwarf_Global global, char **return_name,
- Dwarf_Error *errdesc);
+ Dwarf_Error *errdesc)
+ /*@modifies *return_name, *errdesc @*/;
/* Return DIE offset for global definition. */
extern int dwarf_global_die_offset (Dwarf_Global global,
Dwarf_Off *return_offset,
- Dwarf_Error *errdesc);
+ Dwarf_Error *errdesc)
+ /*@modifies *return_offset, *errdesc @*/;
/* Return offset of header of compile unit containing the global definition. */
extern int dwarf_global_cu_offset (Dwarf_Global global,
Dwarf_Off *return_offset,
- Dwarf_Error *errdesc);
+ Dwarf_Error *errdesc)
+ /*@modifies *return_offset, *errdesc @*/;
/* Return name, DIE offset, and offset of the compile unit DIE for the
global definition. */
extern int dwarf_global_name_offsets (Dwarf_Global global, char **return_name,
Dwarf_Off *die_offset,
Dwarf_Off *cu_offset,
- Dwarf_Error *errdesc);
+ Dwarf_Error *errdesc)
+ /*@modifies *return_name, *die_offset, *cu_offset, *errdesc @*/;
/* Find start of macro value. */
-extern char *dwarf_find_macro_value_start (char *macro_string);
+extern char *dwarf_find_macro_value_start (char *macro_string)
+ /*@*/;
/* Return string from debug string section. */
extern int dwarf_get_str (Dwarf_Debug dbg, Dwarf_Off offset, char **string,
Dwarf_Signed *returned_str_len,
- Dwarf_Error *errdesc);
+ Dwarf_Error *errdesc)
+ /*@modifies dbg, *string, *returned_str_len, *errdesc @*/;
/* Return list address ranges. */
extern int dwarf_get_aranges (Dwarf_Debug dbg, Dwarf_Arange **aranges,
Dwarf_Signed *return_count,
- Dwarf_Error *errdesc);
+ Dwarf_Error *errdesc)
+ /*@modifies *aranges, *return_count, *errdesc @*/;
/* Find matching range for address. */
extern int dwarf_get_arange (Dwarf_Arange *aranges,
Dwarf_Unsigned arange_count, Dwarf_Addr address,
Dwarf_Arange *return_arange,
- Dwarf_Error *errdesc);
+ Dwarf_Error *errdesc)
+ /*@modifies *return_arange, *errdesc @*/;
/* Return offset of compile unit DIE containing the range. */
extern int dwarf_get_cu_die_offset (Dwarf_Arange arange,
Dwarf_Off *return_offset,
- Dwarf_Error *errdesc);
+ Dwarf_Error *errdesc)
+ /*@modifies *return_offset, *errdesc @*/;
/* Return start, length, and CU DIE offset of range. */
extern int dwarf_get_arange_info (Dwarf_Arange arange, Dwarf_Addr *start,
Dwarf_Unsigned *length,
Dwarf_Off *cu_die_offset,
- Dwarf_Error *errdesc);
+ Dwarf_Error *errdesc)
+ /*@modifies *start, *length, *cu_die_offset, *errdesc @*/;
/* Frame descriptor handling. */
Dwarf_Signed *cie_element_count,
Dwarf_Fde **fde_data,
Dwarf_Signed *fde_element_count,
- Dwarf_Error *errdesc);
+ Dwarf_Error *errdesc)
+ /*@modifies dbg, *cie_data, *cie_element_count,
+ *fde_data, *fde_element_count, *errdesc @*/;
/* Get CIE of FDE. */
extern int dwarf_get_cie_of_fde (Dwarf_Fde fde, Dwarf_Cie *return_cie,
- Dwarf_Error *errdesc);
+ Dwarf_Error *errdesc)
+ /*@modifies *return_cie, *errdesc @*/;
/* Get information about the function range. */
extern int dwarf_get_fde_range (Dwarf_Fde fde, Dwarf_Addr *low_pc,
Dwarf_Ptr *fde_bytes,
Dwarf_Unsigned *fde_byte_length,
Dwarf_Off *cie_offset, Dwarf_Signed *cie_index,
- Dwarf_Off *fde_offset, Dwarf_Error *errdesc);
+ Dwarf_Off *fde_offset, Dwarf_Error *errdesc)
+ /*@modifies *low_pc, *func_length, *fde_bytes, *fde_byte_length,
+ *cie_offset, *cie_index, *cie_length, *fde_offset, *errdesc @*/;
/* Get information about CIE. */
extern int dwarf_get_cie_info (Dwarf_Cie cie, Dwarf_Unsigned *bytes_in_cie,
Dwarf_Half *return_address_register,
Dwarf_Ptr *initial_instructions,
Dwarf_Unsigned *initial_instructions_length,
- Dwarf_Error *errdesc);
+ Dwarf_Error *errdesc)
+ /*@modifies *bytes_in_cie, *version, *augmenter,
+ *code_alignment_factor, *data_alignment_factor,
+ *initial_instructions, *initial_instructions_length,
+ *return_address_register, *errdesc @*/;
/* Get frame construction instructions of FDE. */
extern int dwarf_get_fde_instr_bytes (Dwarf_Fde fde, Dwarf_Ptr *outinstrs,
Dwarf_Unsigned *outlen,
- Dwarf_Error *errdesc);
+ Dwarf_Error *errdesc)
+ /*@modifies *outinstrs, *outlen, *errdesc @*/;
/* Get nth frame descriptions. */
extern int dwarf_get_fde_n (Dwarf_Fde *fde_data, Dwarf_Unsigned fde_index,
- Dwarf_Fde *returned_fde, Dwarf_Error *errdesc);
+ Dwarf_Fde *returned_fde, Dwarf_Error *errdesc)
+ /*@modifies *returned_fde, *errdesc @*/;
/* Find FDE for given address. */
extern int dwarf_get_fde_at_pc (Dwarf_Fde *fde_data, Dwarf_Addr pc_of_interest,
Dwarf_Fde *returned_fde, Dwarf_Addr *lopc,
- Dwarf_Addr *hipc, Dwarf_Error *errdesc);
+ Dwarf_Addr *hipc, Dwarf_Error *errdesc)
+ /*@modifies *returned_fde, *lopc, *hipc, *errdesc @*/;
/* Return location list entry. */
Dwarf_Addr *lopc_offset, Dwarf_Ptr *data,
Dwarf_Unsigned *entry_len,
Dwarf_Unsigned *next_entry,
- Dwarf_Error *errdesc);
+ Dwarf_Error *errdesc)
+ /*@modifies *hipc_offset, *lopc_offset, *data,
+ *entry_len, *next_entry, *errdesc @*/;
/* Get abbreviation record. */
Dwarf_Unsigned offset,
Dwarf_Abbrev *returned_abbrev,
Dwarf_Unsigned *length,
- Dwarf_Unsigned *attr_count, Dwarf_Error *errdesc);
+ Dwarf_Unsigned *attr_count, Dwarf_Error *errdesc)
+ /*@modifies *returned_abbrev, *length, *attr_count, *errdesc @*/;
/* Get tag of abbreviation record. */
extern int dwarf_get_abbrev_tag (Dwarf_Abbrev abbrev, Dwarf_Half *return_tag,
- Dwarf_Error *errdesc);
+ Dwarf_Error *errdesc)
+ /*@modifies *return_tag @*/;
/* Get code of abbreviation record. */
extern int dwarf_get_abbrev_code (Dwarf_Abbrev abbrev,
Dwarf_Unsigned *return_code,
- Dwarf_Error *errdesc);
+ Dwarf_Error *errdesc)
+ /*@modifies *return_code @*/;
/* Get children flag of abbreviation record. */
extern int dwarf_get_abbrev_children_flag (Dwarf_Abbrev abbrev,
Dwarf_Signed *return_flag,
- Dwarf_Error *errdesc);
+ Dwarf_Error *errdesc)
+ /*@modifies *return_flag @*/;
/* Get attribute from abbreviation record. */
extern int dwarf_get_abbrev_entry (Dwarf_Abbrev abbrev, Dwarf_Signed idx,
Dwarf_Half *attr_num, Dwarf_Signed *form,
- Dwarf_Off *offset, Dwarf_Error *errdesc);
+ Dwarf_Off *offset, Dwarf_Error *errdesc)
+ /*@modifies *attr_num, *form, *offset @*/;
/* Memory handling. */
};
/* Deallocate memory. */
-extern void dwarf_dealloc (Dwarf_Debug dbg, Dwarf_Ptr space,
- Dwarf_Unsigned alloc_type);
+extern void dwarf_dealloc (Dwarf_Debug dbg, /*@only@*/ Dwarf_Ptr space,
+ Dwarf_Unsigned alloc_type)
+ /*@modifies space @*/;
/* Determine size of address of the binary. */
extern int dwarf_get_address_size (Dwarf_Debug dbg, Dwarf_Half *addr_size,
- Dwarf_Error *errdesc);
+ Dwarf_Error *errdesc)
+ /*@modifies *addr_size @*/;
/* Return error number. */
-extern Dwarf_Unsigned dwarf_errno (Dwarf_Error errdesc);
+extern Dwarf_Unsigned dwarf_errno (Dwarf_Error errdesc)
+ /*@*/;
/* Return string corresponding to error. */
-extern const char *dwarf_errmsg (Dwarf_Error errdesc);
+extern const char *dwarf_errmsg (Dwarf_Error errdesc)
+ /*@*/;
/* Set new error handler. */
-extern Dwarf_Handler dwarf_seterrhand (Dwarf_Debug dbg, Dwarf_Handler errhand);
+extern Dwarf_Handler dwarf_seterrhand (Dwarf_Debug dbg, Dwarf_Handler errhand)
+ /*@modifies dbg @*/;
/* Set new error handler argument. */
-extern Dwarf_Ptr dwarf_seterrarg (Dwarf_Debug dbg, Dwarf_Ptr errarg);
+extern Dwarf_Ptr dwarf_seterrarg (Dwarf_Debug dbg, Dwarf_Ptr errarg)
+ /*@modifies dbg @*/;
#endif /* libdwarf.h */
{
/* This is the information the 'dwarf_next_cu_header' function
is supposed to return. */
+ Dwarf_Unsigned header_length;
Dwarf_Unsigned length;
Dwarf_Unsigned abbrev_offset;
Dwarf_Half version_stamp;
Dwarf_Debug dbg;
+/*@relnull@*/
struct Dwarf_CU_Info_s *next;
} *cu_list;
+/*@relnull@*/
struct Dwarf_CU_Info_s *cu_list_current;
+/*@relnull@*/
struct Dwarf_CU_Info_s *cu_list_tail;
Dwarf_Unsigned cie_cnt;
/* Memory access macros. We have to define it here since code in the
header needs to know the structure of Dwarf_Debug. */
-#include <memory-access.h>
+#include "memory-access.h"
/* DWARF die representation. */
DW_E_VERSION_ERROR,
DW_E_INVALID_DIR_IDX,
DW_E_INVALID_ADDR,
+ DW_E_NO_ABBR,
};
/* Handle error according to user's wishes. */
-extern void __libdwarf_error (Dwarf_Debug dbg, Dwarf_Error *error, int errval)
- internal_function;
+extern void __libdwarf_error (Dwarf_Debug dbg, Dwarf_Error *err, int errval)
+ internal_function
+ /*@modifies *err @*/;
/* Find CU at given offset. */
extern int __libdwarf_get_cu_at_offset (Dwarf_Debug dbg, Dwarf_Unsigned offset,
Dwarf_CU_Info *result_cu,
- Dwarf_Error *error) internal_function;
+ Dwarf_Error *err) internal_function
+ /*@modifies dbg, *result_cu, *err @*/;
/* Find abbreviation. */
+/*@null@*/
extern Dwarf_Abbrev __libdwarf_get_abbrev (Dwarf_Debug dbg,
Dwarf_CU_Info cu,
Dwarf_Word code,
- Dwarf_Error *error)
- internal_function;
+ Dwarf_Error *err)
+ internal_function
+ /*@modifies cu, *err @*/;
/* Get constant type attribute value. */
extern int __libdwarf_getconstant (Dwarf_Die die, Dwarf_Half name,
Dwarf_Unsigned *return_size,
- Dwarf_Error *error) internal_function;
+ Dwarf_Error *err) internal_function
+ /*@modifies die, *return_size, *err @*/;
/* Determine length of form parameters. */
extern int __libdwarf_form_val_len (Dwarf_Debug dbg, Dwarf_CU_Info cu,
Dwarf_Word form, Dwarf_Small *valp,
- size_t *len, Dwarf_Error *error)
- internal_function;
-
-
-/* Number decoding macros. See 7.6 Variable Length Data. */
-#define get_uleb128(var, addr) \
- do { \
- Dwarf_Small __b = *addr++; \
- var = __b & 0x7f; \
- if (__b & 0x80) \
- { \
- __b = *addr++; \
- var |= (__b & 0x7f) << 7; \
- if (__b & 0x80) \
- { \
- __b = *addr++; \
- var |= (__b & 0x7f) << 14; \
- if (__b & 0x80) \
- { \
- __b = *addr++; \
- var |= (__b & 0x7f) << 21; \
- if (__b & 0x80) \
- /* Other implementation set VALUE to UINT_MAX in this \
- case. So we better do this as well. */ \
- var = UINT_MAX; \
- } \
- } \
- } \
- } while (0)
-
-/* The signed case is a big more complicated. */
-#define get_sleb128(var, addr) \
- do { \
- Dwarf_Small __b = *addr++; \
- int32_t __res = __b & 0x7f; \
- if ((__b & 0x80) == 0) \
- { \
- if (__b & 0x40) \
- __res |= 0xffffff80; \
- } \
- else \
- { \
- __b = *addr++; \
- __res |= (__b & 0x7f) << 7; \
- if ((__b & 0x80) == 0) \
- { \
- if (__b & 0x40) \
- __res |= 0xffffc000; \
- } \
- else \
- { \
- __b = *addr++; \
- __res |= (__b & 0x7f) << 14; \
- if ((__b & 0x80) == 0) \
- { \
- if (__b & 0x40) \
- __res |= 0xffe00000; \
- } \
- else \
- { \
- __b = *addr++; \
- __res |= (__b & 0x7f) << 21; \
- if ((__b & 0x80) == 0) \
- { \
- if (__b & 0x40) \
- __res |= 0xf0000000; \
- } \
- else \
- /* Other implementation set VALUE to INT_MAX in this \
- case. So we better do this as well. */ \
- __res = INT_MAX; \
- } \
- } \
- } \
- var = __res; \
- } while (0)
+ size_t *len, Dwarf_Error *err)
+ internal_function
+ /*@modifies *valp, *len, *err @*/;
/* gettext helper macros. */
#include <stdint.h>
-/* Which architectures support unaligned memory access? */
-#ifdef __i386__
-# define USE_UNALIGNED_MEMORY_ACCESS
-#endif
+/* Number decoding macros. See 7.6 Variable Length Data. */
+#define get_uleb128(var, addr) \
+ do { \
+ Dwarf_Small __b = *addr++; \
+ var = __b & 0x7f; \
+ if (__b & 0x80) \
+ { \
+ __b = *addr++; \
+ var |= (__b & 0x7f) << 7; \
+ if (__b & 0x80) \
+ { \
+ __b = *addr++; \
+ var |= (__b & 0x7f) << 14; \
+ if (__b & 0x80) \
+ { \
+ __b = *addr++; \
+ var |= (__b & 0x7f) << 21; \
+ if (__b & 0x80) \
+ /* Other implementation set VALUE to UINT_MAX in this \
+ case. So we better do this as well. */ \
+ var = UINT_MAX; \
+ } \
+ } \
+ } \
+ } while (0)
+
+/* The signed case is a big more complicated. */
+#define get_sleb128(var, addr) \
+ do { \
+ Dwarf_Small __b = *addr++; \
+ int32_t __res = __b & 0x7f; \
+ if ((__b & 0x80) == 0) \
+ { \
+ if (__b & 0x40) \
+ __res |= 0xffffff80; \
+ } \
+ else \
+ { \
+ __b = *addr++; \
+ __res |= (__b & 0x7f) << 7; \
+ if ((__b & 0x80) == 0) \
+ { \
+ if (__b & 0x40) \
+ __res |= 0xffffc000; \
+ } \
+ else \
+ { \
+ __b = *addr++; \
+ __res |= (__b & 0x7f) << 14; \
+ if ((__b & 0x80) == 0) \
+ { \
+ if (__b & 0x40) \
+ __res |= 0xffe00000; \
+ } \
+ else \
+ { \
+ __b = *addr++; \
+ __res |= (__b & 0x7f) << 21; \
+ if ((__b & 0x80) == 0) \
+ { \
+ if (__b & 0x40) \
+ __res |= 0xf0000000; \
+ } \
+ else \
+ /* Other implementation set VALUE to INT_MAX in this \
+ case. So we better do this as well. */ \
+ __res = INT_MAX; \
+ } \
+ } \
+ } \
+ var = __res; \
+ } while (0)
/* We use simple memory access functions in case the hardware allows it.
The caller has to make sure we don't have alias problems. */
-#ifdef USE_UNALIGNED_MEMORY_ACCESS
+#if ALLOW_UNALIGNED
# define read_2ubyte_unaligned(Dbg, Addr) \
((Dbg)->other_byte_order \
static inline uint16_t
read_2ubyte_unaligned (Dwarf_Debug dbg, void *p)
+ /*@*/
{
union unaligned *up = p;
if (dbg->other_byte_order)
}
static inline int16_t
read_2sbyte_unaligned (Dwarf_Debug dbg, void *p)
+ /*@*/
{
union unaligned *up = p;
if (dbg->other_byte_order)
static inline uint32_t
read_4ubyte_unaligned_noncvt (void *p)
+ /*@*/
{
union unaligned *up = p;
return up->u4;
}
static inline uint32_t
read_4ubyte_unaligned (Dwarf_Debug dbg, void *p)
+ /*@*/
{
union unaligned *up = p;
if (dbg->other_byte_order)
}
static inline int32_t
read_4sbyte_unaligned (Dwarf_Debug dbg, void *p)
+ /*@*/
{
union unaligned *up = p;
if (dbg->other_byte_order)
static inline uint64_t
read_8ubyte_unaligned (Dwarf_Debug dbg, void *p)
+ /*@*/
{
union unaligned *up = p;
if (dbg->other_byte_order)
}
static inline int64_t
read_8sbyte_unaligned (Dwarf_Debug dbg, void *p)
+ /*@*/
{
union unaligned *up = p;
if (dbg->other_byte_order)
INCLUDES = -I$(srcdir) -I$(top_srcdir)/libelf -I$(top_srcdir)/lib -I.. \
$(INCLTDL)
+LINT = splint
+
#lib_LTLIBRARIES = libebl.la
#pkglib_LTLIBRARIES = libebl_i386.la libebl_sh.la libebl_mips.la
noinst_LTLIBRARIES = libebl.la \
libebl_mips_la_SOURCES = mips_init.c mips_destr.c mips_symbol.c
libebl_mips_la_LDFLAGS = -module -Wl,--version-script,$(srcdir)/libebl_mips.map
libebl_mips_la_DEPENDENCIES = libebl_mips.map
+
+.PSEUDO: lint
+lint:
+ $(LINT) $(DEFS) $(INCLUDES) $(GCC_INCLUDE) -f $(top_srcdir)/splint.rc \
+ $(addprefix $(srcdir)/,$(libebl_la_SOURCES))
--- /dev/null
++partial
++forcehints
+
+-warnunixlib
+-warnposix
+
+#+unixlib
++posixlib
+
++strict # lclint level
+
+# --- in progress
+-branchstate
+-compdef # 34
+-compmempass # 17
+-internalglobs
+-moduncon # 3
+-noeffect # 1
+-noeffectuncon # 19
+-nullderef # 2
+-nullpass # 1
+-nullptrarith # 16
+-nullstate # 11
+-paramuse
+-protoparammatch
+-retalias # 12
+-retvalint
+-shadow # 2
+-sysunrecog
+-type
+-unrecog # 8
+-usereleased # 21
+
+-dependenttrans # 7
+-immediatetrans # 35
+-kepttrans # 13
+-onlytrans # 2
+-temptrans # 15
+-unqualifiedtrans # 6
+
+-casebreak
+-ifempty
+-loopswitchbreak
+-sizeoftype
+
+# --- +partial artifacts
+-declundef
+-exportheader
+-exportheadervar
+-exportlocal
+
+-enummemuse
+-fcnuse
+-typeuse
+-varuse
+
+# --- not-yet at strict level
+-bitwisesigned
+-elseifcomplete
+-exportconst
+-exportfcn
+-exporttype
+-exportvar
+-fielduse
+-forblock # tedious
+-ifblock # tedious
+-namechecks # tedious ANSI compliance checks
+-ptrarith # tedious
+
+-compdestroy
+-mustdefine
+-sys-dir-errors
+
+-strictops
+-whileblock # tedious
+
+# --- not-yet at checks level
++enumint
+-mustfree
+-predboolptr
+-usedef
+
+# --- not-yet at standard level
+-boolops
++boolint
++charint
++ignorequals
++matchanyintegral
.PSEUDO: lint
lint:
- $(LINT) $(DEFS) $(INCLUDES) $(GCC_INCLUDE) -f $(top_srcdir)/splint.rc \
+ $(LINT) $(DEFS) $(INCLUDES) $(GCC_INCLUDE) \
$(addprefix $(srcdir)/,$(libelf_la_SOURCES))
/* Retrieve file identification data. */
-extern char *elf_getident (Elf *__elf, size_t *ptr)
+extern char *elf_getident (Elf *__elf, /*@null@*/ size_t *ptr)
/*@modifies *ptr @*/;
/* Retrieve class-dependent object file header. */
/*@*/;
/* Get section with next section index. */
-extern Elf_Scn *elf_nextscn (Elf *__elf, Elf_Scn *__scn)
+extern Elf_Scn *elf_nextscn (Elf *__elf, /*@null@*/ Elf_Scn *__scn)
/*@*/;
/* Create a new section and append it at the end of the table. */
noinst_HEADERS = ltdl.h
endif
+LINT = splint
+
if CONVENIENCE_LTDL
noinst_LTLIBRARIES = libltdlc.la
endif
|| cp $$d/$$file $(DESTDIR)$(datadir)/libtool/libltdl/$$file || :; \
fi; \
done
+
+.PSEUDO: lint
+lint:
+ $(LINT) $(DEFS) $(INCLUDES) $(GCC_INCLUDE) -f $(top_srcdir)/splint.rc \
+ $(addprefix $(srcdir)/,$(libltdl_la_SOURCES))