NAME
dwarf_get_loclist_entry —
retrieve
DWARF location list entry
LIBRARY
DWARF Access Library (libdwarf, -ldwarf)
SYNOPSIS
#include <libdwarf.h>
int
dwarf_get_loclist_entry(
Dwarf_Debug dbg,
Dwarf_Unsigned offset,
Dwarf_Addr
*hipc,
Dwarf_Addr *lopc,
Dwarf_Ptr
*data,
Dwarf_Unsigned *entry_len,
Dwarf_Unsigned *next_entry,
Dwarf_Error
*err);
DESCRIPTION
Function
dwarf_get_loclist_entry() retrieves a location list
entry from the DWARF section “.debug_loc”.
Argument
dbg should reference a DWARF debug context
allocated using
dwarf_init(3).
Argument
offset is an offset, relative to the
“.debug_loc” section, to the start of the desired location list
entry.
Argument
hipc should point to a location which will hold
the offset, relative to the base address of the location list entry, of the
highest program counter value for the entry.
Argument
lowpc should point to a location which will hold
the offset, relative to the base address of the location list entry, of the
lowest program counter value for the entry.
Argument
data should point to a location which will be set
to a pointer to the location list data.
Argument
entry_len should point to a location which will
hold the length in bytes of the location list data returned in argument
data.
Argument
next_entry should point to a location which will
hold the offset of the next location list entry.
If argument
err is not NULL, it will be used to store
error information in case of an error.
RETURN VALUES
Function
dwarf_get_loclist_entry() returns
DW_DLV_OK
when it succeeds. It returns
DW_DLV_NO_ENTRY
if there is no location list at the
specified offset
offset. In case of an error, it returns
DW_DLV_ERROR
and sets the argument
err.
ERRORS
Function
dwarf_get_loclist_entry() can fail with:
-
-
- [
DW_DLE_ARGUMENT
]
- One of the arguments dbg,
hipc, lopc,
data, entry_len or
next_entry was NULL.
-
-
- [
DW_DLE_NO_ENTRY
]
- There is no location list at the specified offset
offset.
EXAMPLE
To iterate through all the location list entries in the “.debug_loc”
section, use:
Dwarf_Debug dbg;
Dwarf_Unsigned off, len, next;
Dwarf_Addr hipc, lopc;
Dwarf_Ptr data;
Dwarf_Error de;
int ret;
off = 0;
while ((ret = dwarf_get_loclist_entry(dbg, off, &hipc, &lopc, &data,
&len, &next, &de)) == DW_DLV_OK) {
/* ... use loclist entry ... */
off = next;
}
if (ret == DW_DLV_ERROR)
warnx("dwarf_get_loclist_entry failed: %s", dwarf_errmsg(de));
SEE ALSO
dwarf(3),
dwarf_loclist(3),
dwarf_loclist_n(3),
dwarf_loclist_from_expr(3),
dwarf_loclist_from_expr_a(3)