|
|
| |
DWARF_CHILD(3) |
FreeBSD Library Functions Manual |
DWARF_CHILD(3) |
dwarf_child , dwarf_offdie ,
dwarf_offdie_b ,
dwarf_siblingof ,
dwarf_siblingof_b —
retrieve DWARF Debugging Information Entry descriptors
DWARF Access Library (libdwarf, -ldwarf)
#include <libdwarf.h>
int
dwarf_child (Dwarf_Die
die, Dwarf_Die
*ret_die, Dwarf_Error
*err);
int
dwarf_offdie (Dwarf_Debug dbg,
Dwarf_Off offset, Dwarf_Die
*ret_die, Dwarf_Error *err);
int
dwarf_offdie_b (Dwarf_Debug dbg,
Dwarf_Off offset, Dwarf_Bool
is_info, Dwarf_Die *ret_die,
Dwarf_Error *err);
int
dwarf_siblingof (Dwarf_Debug dbg,
Dwarf_Die die, Dwarf_Die
*ret_die, Dwarf_Error *err);
int
dwarf_siblingof_b (Dwarf_Debug
dbg, Dwarf_Die die, Dwarf_Die
*ret_die, Dwarf_Bool is_info,
Dwarf_Error *err);
These functions are used to retrieve and traverse DWARF Debugging Information
Entry (DIE) descriptors associated with a compilation unit. These descriptors
are arranged in the form of a tree, traversable using “child”
and “sibling” links; see
dwarf(3)
for more information. DWARF Debugging Information Entry descriptors are
represented by the Dwarf_Die opaque type.
Function dwarf_child () retrieves the child
of descriptor denoted by argument die, and stores it
in the location pointed to by argument ret_die.
Function dwarf_siblingof () retrieves the
sibling of the descriptor denoted by argument die, and
stores it in the location pointed to by argument
ret_die. If argument die is
NULL, the first debugging information entry descriptor for the current
compilation unit will be returned. This function and function
dwarf_child () may be used together to traverse the
tree of debugging information entry descriptors for a compilation unit.
Function dwarf_siblingof_b () is identical
to the function dwarf_siblingof () except that it can
retrieve the sibling descriptor from either the current compilation unit or
type unit. If argument is_info is non-zero, the
function behaves identically to function
dwarf_siblingof (). If argument
is_info is zero, the descriptor referred by argument
die should be associated with a debugging information
entry in the type unit. The function will store the sibling of the
descriptor in the location pointed to by argument
ret_die. If argument is_info is
zero and argument die is NULL ,
the first debugging information entry descriptor for the current type unit
will be returned.
Function dwarf_offdie () retrieves the
debugging information entry descriptor at global offset
offset in the “.debug_info” section of
the object associated with argument dbg. The returned
descriptor is written to the location pointed to by argument
ret_die.
Function dwarf_offdie_b () is identical to
the function dwarf_offdie () except that it can
retrieve the debugging information entry descriptor at global offset
offset from either of the “.debug_info”
and “.debug_types” sections of the object associated with
argument dbg. If argument
is_info is non-zero, the function will retrieve the
debugging information entry from the “.debug_info” section,
otherwise the function will retrieve the debugging information entry from
the “.debug_types” section. The returned descriptor is written
to the location pointed to by argument ret_die.
The memory area used for the Dwarf_Die descriptor returned
in argument ret_die is allocated by the
DWARF Access Library (libdwarf, -ldwarf). Application
code should use function dwarf_dealloc () with the
allocation type DW_DLA_DIE to free the memory area
when the Dwarf_Die descriptor is no longer needed.
These functions return the following values:
- [
DW_DLV_OK ]
- The call succeeded.
- [
DW_DLV_ERROR ]
- The requested operation failed. Additional information about the error
encountered will be recorded in argument err, if it
is not NULL.
- [
DW_DLV_NO_ENTRY ]
- For functions
dwarf_child (),
dwarf_siblingof () and
dwarf_siblingof_b (), the descriptor denoted by
argument die did not have a child or sibling.
For functions dwarf_offdie () and
dwarf_offdie_b (), there was no debugging
information entry at the offset specified by argument
offset.
To retrieve the first DWARF Debugging Information Entry descriptor for the first
compilation unit associated with a Dwarf_Debug instance,
and to traverse all its children, use:
Dwarf_Debug dbg;
Dwarf_Die die, die0;
Dwarf_Error de;
... allocate dbg using dwarf_init() etc ...
if (dwarf_next_cu_header(dbg, NULL, NULL, NULL, NULL, NULL, &de) !=
DW_DLV_OK)
errx(EXIT_FAILURE, "dwarf_next_cu_header: %s",
dwarf_errmsg(de));
/* Get the first DIE for the current compilation unit. */
die = NULL;
if (dwarf_siblingof(dbg, die, &die0, &de) != DW_DLV_OK)
errx(EXIT_FAILURE, "dwarf_siblingof: %s", dwarf_errmsg(de));
/* Get the first child of this DIE. */
die = die0;
if (dwarf_child(die, &die0, &de) != DW_DLV_OK)
errx(EXIT_FAILURE, "dwarf_child: %s", dwarf_errmsg(de));
/* Get the rest of children. */
do {
die = die0;
if (dwarf_siblingof(dbg, die, &die0, &de) == DW_DLV_ERROR)
errx(EXIT_FAILURE, "dwarf_siblingof: %s",
dwarf_errmsg(de));
} while (die0 != NULL);
These functions may fail with the following errors:
- [
DW_DLE_ARGUMENT ]
- Arguments dbg, die or
ret_die were NULL.
- [
DW_DLE_DIE_NO_CU_CONTEXT ]
- Argument dbg was not associated with a compilation
unit.
- [
DW_DLE_NO_ENTRY ]
- The descriptor denoted by argument die had no child
or sibling, or there was no DWARF debugging information entry at the
offset specified by argument offset.
Visit the GSP FreeBSD Man Page Interface. Output converted with ManDoc. |