DWARF_LOCLIST(3) | Library Functions Manual | DWARF_LOCLIST(3) |
dwarf_loclist
, dwarf_loclist_n
—
#include <libdwarf.h>
int
dwarf_loclist
(Dwarf_Attribute
at, Dwarf_Locdesc **llbuf,
Dwarf_Signed *listlen, Dwarf_Error
*error);
int
dwarf_loclist_n
(Dwarf_Attribute
at, Dwarf_Locdesc ***llbuf,
Dwarf_Signed *listlen, Dwarf_Error
*error);
Note: function dwarf_loclist
() is
deprecated. New application code should instead use function
dwarf_loclist_n
()
Function dwarf_loclist_n
() retrieves the
list of location expressions associated with a DWARF attribute. Argument
at should reference a valid DWARF attribute. Argument
llbuf should point to a location which will hold a
returned array of pointers to Dwarf_Locdesc
descriptors. Argument listlen should point to a
location which will be set to the number of elements contained in the
returned array. If argument err is not NULL, it will
be used to store error information in case of an error.
Function dwarf_loclist
() retrieves the
first location expression associated with an attribute. Argument
at should reference a valid DWARF attribute. Argument
llbuf should point to a location which will hold the
returned pointer to a Dwarf_Locdesc descriptor.
Argument listlen should point to a location which will
be always set to 1. If argument err is not NULL, it
will be used to store error information in case of an error.
Dwarf_Locdesc descriptors are defined in the
header file <libdwarf.h>
,
and consist of following fields:
Each Dwarf_Loc descriptor represents one
operation of a location expression. These descriptors are defined in the
header file <libdwarf.h>
,
and consist of following fields:
DW_OP_*
constants
defined in the header file
<dwarf.h>
.DW_DLA_LOC_BLOCK
.DW_DLA_LOCDESC
.DW_DLA_LIST
.DW_DLV_OK
. In case
of an error, they return DW_DLV_ERROR
and set the
argument err.
DW_DLE_ARGUMENT
]DW_DLE_ARGUMENT
]Dwarf_Attribute at; Dwarf_Locdesc **llbuf; Dwarf_Signed lcnt; Dwarf_Loc *lr; Dwarf_Error de; int i; if (dwarf_loclist_n(at, &llbuf, &lcnt, &de) != DW_DLV_OK) errx(EXIT_FAILURE, "dwarf_loclist_n failed: %s", dwarf_errmsg(de)); for (i = 0; i < lcnt; i++) { /* ... Use llbuf[i] ... */ for (j = 0; (Dwarf_Half) j < llbuf[i]->ld_cents; j++) { lr = &llbuf[i]->ld_s[j]; /* ... Use each Dwarf_Loc descriptor ... */ } dwarf_dealloc(dbg, llbuf[i]->ld_s, DW_DLA_LOC_BLOCK); dwarf_dealloc(dbg, llbuf[i], DW_DLA_LOCDESC); } dwarf_dealloc(dbg, llbuf, DW_DLA_LIST);
November 9, 2011 | NetBSD 9.0 |