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.
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);
DW_DLE_ARGUMENT
]NULL
.DW_DLE_ARGUMENT
]November 9, 2011 | NetBSD 10.0 |