DwarfLineEntry
Description
One row of the line-number matrix. address is the file-relative virtual address (the same address-space as ElfSymbol.value), so a caller who already did runtime_addr - module_base (e.g. via SymbolResolver) can feed the result directly to DwarfLinesResolve.
Fields
| Name | Description |
|---|---|
address |
Code address this row applies to. |
file |
Source filename (borrowed from internal string pool). |
dir |
Compilation directory hint, may be NULL. |
line |
Source line number (1-based, 0 means “no line”). |
column |
Source column (1-based, 0 means “no column”). |
is_stmt |
True at statement boundaries — preferred breakpoints. |
end_sequence |
True for the synthetic row that closes a contiguous range. Lookups never return such a row. |
Usage example (Cross-references)
Usage examples (Cross-references)
- In
Dwarf.c:71:
bool ok = false;
if (built) {
const DwarfLineEntry *e = DwarfLinesResolve(&lines, file_relative);
if (e && e->file && ZstrFindSubstring(e->file, "Dwarf.c") != NULL && e->line > 0) {
ok = true; }
if (cache_entry->dwarf_ok) {
const DwarfLineEntry *de = DwarfLinesResolve(&cache_entry->dwarf, file_relative);
if (de) {
out->source_file = de->file;- In
Dwarf.c:381:
U64Vec *pending_dir_offsets
) {
DwarfLineEntry e;
MemSet(&e, 0, sizeof(e));
e.address = st->address;- In
Dwarf.c:707:
// ---------------------------------------------------------------------------
const DwarfLineEntry *DwarfLinesResolve(const DwarfLines *self, u64 vaddr) {
if (!self || self->entries.length == 0)
return NULL;- In
Dwarf.c:715:
// by end_sequence rows; vaddr must not exceed the sequence's
// closing row.
const DwarfLineEntry *best = NULL;
const DwarfLineEntry *seq_open = NULL;
for (u64 i = 0; i < self->entries.length; ++i) {- In
Dwarf.c:716:
// closing row.
const DwarfLineEntry *best = NULL;
const DwarfLineEntry *seq_open = NULL;
for (u64 i = 0; i < self->entries.length; ++i) {
const DwarfLineEntry *e = &self->entries.data[i];- In
Dwarf.c:718:
const DwarfLineEntry *seq_open = NULL;
for (u64 i = 0; i < self->entries.length; ++i) {
const DwarfLineEntry *e = &self->entries.data[i];
if (e->end_sequence) {
// Sequence ends at this row's address (exclusive upper).
- In
Dwarf.h:55:
bool is_stmt;
bool end_sequence;
} DwarfLineEntry;
typedef Vec(DwarfLineEntry) DwarfLineEntries;- In
Dwarf.h:57:
} DwarfLineEntry;
typedef Vec(DwarfLineEntry) DwarfLineEntries;
///
- In
Dwarf.h:110:
/// TAGS: Parser, DWARF, Lookup
///
const DwarfLineEntry *DwarfLinesResolve(const DwarfLines *self, u64 vaddr);
///
Last updated on