mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-06-19 03:24:09 +00:00
Add support for fetching inlining context (stack of source code locations)
by instruction address from DWARF. Add --inlining flag to llvm-dwarfdump to demonstrate and test this functionality, so that "llvm-dwarfdump --inlining --address=0x..." now works much like "addr2line -i 0x...", provided that the binary has debug info (Clang's -gline-tables-only *is* enough). git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@163128 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@ -37,10 +37,7 @@ bool DWARFDebugRangeList::extract(DataExtractor data, uint32_t *offset_ptr) {
|
||||
clear();
|
||||
return false;
|
||||
}
|
||||
// The end of any given range list is marked by an end of list entry,
|
||||
// which consists of a 0 for the beginning address offset
|
||||
// and a 0 for the ending address offset.
|
||||
if (entry.StartAddress == 0 && entry.EndAddress == 0)
|
||||
if (entry.isEndOfListEntry())
|
||||
break;
|
||||
Entries.push_back(entry);
|
||||
}
|
||||
@ -57,3 +54,14 @@ void DWARFDebugRangeList::dump(raw_ostream &OS) const {
|
||||
}
|
||||
OS << format("%08x <End of list>\n", Offset);
|
||||
}
|
||||
|
||||
bool DWARFDebugRangeList::containsAddress(uint64_t BaseAddress,
|
||||
uint64_t Address) const {
|
||||
for (int i = 0, n = Entries.size(); i != n; ++i) {
|
||||
if (Entries[i].isBaseAddressSelectionEntry(AddressSize))
|
||||
BaseAddress = Entries[i].EndAddress;
|
||||
else if (Entries[i].containsAddress(BaseAddress, Address))
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
Reference in New Issue
Block a user