mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-06-21 02:24:22 +00:00
DWARF: Generate the address lookup table from the DIE tree if .debug_aranges is not available.
Ported from LLDB. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@139732 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@ -397,7 +397,8 @@ DWARFDebugInfoEntryMinimal::getAttributeValueAsSigned(
|
||||
}
|
||||
|
||||
uint64_t
|
||||
DWARFDebugInfoEntryMinimal::getAttributeValueAsReference(const DWARFCompileUnit* cu,
|
||||
DWARFDebugInfoEntryMinimal::getAttributeValueAsReference(
|
||||
const DWARFCompileUnit* cu,
|
||||
const uint16_t attr,
|
||||
uint64_t fail_value) const {
|
||||
DWARFFormValue form_value;
|
||||
@ -405,3 +406,26 @@ DWARFDebugInfoEntryMinimal::getAttributeValueAsReference(const DWARFCompileUnit*
|
||||
return form_value.getReference(cu);
|
||||
return fail_value;
|
||||
}
|
||||
|
||||
void
|
||||
DWARFDebugInfoEntryMinimal::buildAddressRangeTable(const DWARFCompileUnit *cu,
|
||||
DWARFDebugAranges *debug_aranges)
|
||||
const {
|
||||
if (AbbrevDecl) {
|
||||
uint16_t tag = AbbrevDecl->getTag();
|
||||
if (tag == DW_TAG_subprogram) {
|
||||
uint64_t hi_pc = -1ULL;
|
||||
uint64_t lo_pc = getAttributeValueAsUnsigned(cu, DW_AT_low_pc, -1ULL);
|
||||
if (lo_pc != -1ULL)
|
||||
hi_pc = getAttributeValueAsUnsigned(cu, DW_AT_high_pc, -1ULL);
|
||||
if (hi_pc != -1ULL)
|
||||
debug_aranges->appendRange(cu->getOffset(), lo_pc, hi_pc);
|
||||
}
|
||||
|
||||
const DWARFDebugInfoEntryMinimal *child = getFirstChild();
|
||||
while (child) {
|
||||
child->buildAddressRangeTable(cu, debug_aranges);
|
||||
child = child->getSibling();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user