| DWARF_GET_FDE_LIST(3) | Library Functions Manual | DWARF_GET_FDE_LIST(3) | 
dwarf_get_fde_list —
#include <libdwarf.h>
int
  
  dwarf_get_fde_list(Dwarf_Debug
    dbg, Dwarf_Cie **cie_list,
    Dwarf_Signed *cie_count, Dwarf_Fde
    **fde_list, Dwarf_Signed *fde_count,
    Dwarf_Error *err);
int
  
  dwarf_get_fde_list_eh(Dwarf_Debug
    dbg, Dwarf_Cie **cie_list,
    Dwarf_Signed *cie_count, Dwarf_Fde
    **fde_list, Dwarf_Signed *fde_count,
    Dwarf_Error *err);
Function dwarf_get_fde_list() retrieves
    frame information from the DWARF section named “.debug_frame”.
    For objects containing GNU style C++ exception handling information, the
    function dwarf_get_fde_list_eh() retrieves frame
    information from the section named “.eh_frame”.
Frame information is returned using opaque descriptors of type Dwarf_Cie and Dwarf_Fde. Applications need to use the other frame related functions in the DWARF(3) API set to retrieve the information contained in these descriptors.
Argument dbg should reference a DWARF debug context allocated using dwarf_init(3).
Argument cie_list should point to a location that will be set to a pointer to an array of Dwarf_Cie descriptors.
Argument cie_count should point to a location that will be set to the number of Dwarf_Cie descriptors returned.
Argument fde_list should point to a location that will be set to a pointer to an array of Dwarf_Fde descriptors.
Argument fde_count should point to a location that will be set to the number of Dwarf_Fde descriptors returned.
If argument err is not NULL, it will be used to store error information in case of an error.
DW_DLV_OK. They
  return DW_DLV_NO_ENTRY if there is no frame
  information associated with the given DWARF debug context. In case of an
  error, they return DW_DLV_ERROR and set the argument
  err.
DW_DLE_ARGUMENT]DW_DLE_NO_ENTRY]
Dwarf_Debug dbg;
Dwarf_Cie *cie_list, cie;
Dwarf_Fde *fde_list, fde;
Dwarf_Off fde_offset, cie_offset;
Dwarf_Unsigned func_len, fde_length, fde_instlen;
Dwarf_Signed cie_count, fde_count, cie_index;
Dwarf_Addr low_pc;
Dwarf_Ptr fde_addr, fde_inst, cie_inst;
Dwarf_Error de;
int i;
if (dwarf_get_fde_list(dbg, &cie_list, &cie_count,
    &fde_list, &fde_count, &de) != DW_DLV_OK) {
	errx(EXIT_FAILURE, "dwarf_get_fde_list failed: %s",
	    dwarf_errmsg(de));
}
for (i = 0; i < fde_count; i++) {
	if (dwarf_get_fde_n(fde_list, i, &fde, &de) != DW_DLV_OK) {
		warnx("dwarf_get_fde_n failed: %s",
		    dwarf_errmsg(de));
		continue;
	}
	if (dwarf_get_cie_of_fde(fde, &cie, &de) != DW_DLV_OK) {
		warnx("dwarf_get_fde_n failed: %s",
		    dwarf_errmsg(de));
		continue;
	}
	if (dwarf_get_fde_range(fde, &low_pc, &func_len, &fde_addr,
	    &fde_length, &cie_offset, &cie_index, &fde_offset,
	    &de) != DW_DLV_OK) {
		warnx("dwarf_get_fde_range failed: %s",
		    dwarf_errmsg(de));
		continue;
	}
	if (dwarf_get_fde_instr_bytes(fde, &fde_inst, &fde_instlen,
	    &de) != DW_DLV_OK) {
		warnx("dwarf_get_fde_instr_bytes failed: %s",
		    dwarf_errmsg(de));
		continue;
	}
	/* ... Use the retrieved frame information ... */
}
/* Indicate that the returned arrays may be freed. */
dwarf_fde_cie_list_dealloc(dbg, cie_list, cie_count, fde_list,
    fde_count);
| November 9, 2011 | NetBSD 9.4 |