|
NAMEdwarf_get_abbrev_entry —
retrieve attribute information from an abbreviation
descriptor
LIBRARYDWARF Access Library (libdwarf, -ldwarf)SYNOPSIS#include <libdwarf.h>
int
DESCRIPTIONFunctiondwarf_get_abbrev_entry () retrieves attribute
information from a DWARF abbreviation descriptor.
Argument abbrev should be a valid abbreviation descriptor, as returned by function dwarf_get_abbrev(3). Argument ndx specifies the 0-based index of the attribute. The total count of the attributes contained in the abbreviation entry can be retrieved using the function dwarf_get_abbrev(3). Argument code should point to a location which will hold a returned attribute code. Argument form should point to a location which will hold the returned form of the attribute. Argument offset should point to a location which will hold a returned offset, relative to the “.debug_abbrev” section, for the specified attribute. If argument err is not NULL, it will be used to return an error descriptor in case of an error. RETURN VALUESFunctiondwarf_get_abbrev_entry () returns
DW_DLV_OK when it succeeds. It returns
DW_DLV_NO_ENTRY if the attribute index specified by
argument ndx is out of range. In case of an error, it
returns DW_DLV_ERROR and sets the argument
err.
EXAMPLESTo loop through all the attribute entries contained in the abbreviation section, use:Dwarf_Debug dbg; Dwarf_Abbrev ab; Dwarf_Off aboff, atoff; Dwarf_Signed form; Dwarf_Half attr; Dwarf_Unsigned length, attr_count; Dwarf_Error de; int i, ret; /* ...allocate 'dbg' using dwarf_init(3) ... */ while ((ret = dwarf_next_cu_header(dbg, NULL, NULL, &aboff, NULL, NULL, &de)) == DW_DLV_OK) { while ((ret = dwarf_get_abbrev(dbg, aboff, &ab, &length, &attr_count, &de)) == DW_DLV_OK) { if (length == 1) /* Last entry. */ break; aboff += length; for (i = 0; (Dwarf_Unsigned) i < attr_count; i++) { if (dwarf_get_abbrev_entry(ab, i, &attr, &form, &atoff, &de) != DW_DLV_OK) { warnx("dwarf_get_abbrev_entry failed:" " %s", dwarf_errmsg(de)); continue; } /* .. use the retrieved information ... */ } } if (ret != DW_DLV_OK) warnx("dwarf_get_abbrev: %s", dwarf_errmsg(de)); } if (ret == DW_DLV_ERROR) warnx("dwarf_next_cu_header: %s", dwarf_errmsg(de)); ERRORSFunctiondwarf_get_abbrev_entry () can fail with:
SEE ALSOdwarf(3), dwarf_get_abbrev(3)
Visit the GSP FreeBSD Man Page Interface. |