Main index | Section 3 | Options |
#include <libdwarf.h>
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:
ld_lopc | |
The lowest program counter address covered by the descriptor. This field will be set to 0 if the descriptor is not associated with an address range. | |
ld_hipc | |
The highest program counter address covered by the descriptor. This field will be set to 0 if the descriptor is not associated with an address range. | |
ld_cents | |
The number of entries returned in ld_s field. | |
ld_s | |
Pointer to an array of Dwarf_Loc descriptors. | |
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:
lr_atom | |
The operator name, one of the DW_OP_* constants defined in the header file <dwarf.h>. | |
lr_number | |
The first operand of this operation. | |
lr_number2 | |
The second operand of this operation. | |
lr_offset | |
The byte offset of this operation within the containing location expression. | |
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] | One of the arguments at, llbuf or listlen was NULL. |
[DW_DLE_ARGUMENT] | The attribute provided by argument at does not contain a location expression or is not associated with a location expression list. |
DWARF_LOCLIST (3) | November 9, 2011 |
Main index | Section 3 | Options |
Please direct any comments about this manual page service to Ben Bullock. Privacy policy.
“ | As soon as we started programming, we found to our surprise that it wasn't as easy to get programs right as we had thought. Debugging had to be discovered. I can remember the exact instant when I realized that a large part of my life from then on was going to be spent in finding mistakes in my own programs. | ” |
— Maurice Wilkes |