| DWARF_CHILD(3) | Library Functions Manual | DWARF_CHILD(3) | 
dwarf_child, dwarf_offdie,
  dwarf_offdie_b,
  dwarf_siblingof,
  dwarf_siblingof_b —
#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);
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.
dwarf_dealloc() with the
  allocation type DW_DLA_DIE to free the memory area
  when the Dwarf_Die descriptor is no longer needed.
DW_DLV_OK]DW_DLV_ERROR]DW_DLV_NO_ENTRY]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.
DW_DLE_ARGUMENT]DW_DLE_DIE_NO_CU_CONTEXT]DW_DLE_NO_ENTRY]
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);
| December 21, 2014 | NetBSD 9.3 |