dwarf_get_loclist_entry —
retrieve DWARF location list entry
DWARF Access Library (libdwarf, -ldwarf)
#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);
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.
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.
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));
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.
dwarf(3),
dwarf_loclist(3),
dwarf_loclist_from_expr(3),
dwarf_loclist_from_expr_a(3),
dwarf_loclist_n(3)