| 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 |