mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-26 12:50:30 +00:00
[dwarfdump] Dump DW_AT_ranges values inline in the debug_info dump.
The output looks like that: DW_AT_ranges [FORM_data4] (0x00000000 [0x00000001000024a0 - 0x00000001000024c2) [0x0000000100002505 - 0x000000010000268b)) Differential Revision: http://reviews.llvm.org/D5712 llvm-svn: 220466
This commit is contained in:
parent
65b92cb354
commit
5be0c9358b
@ -88,12 +88,27 @@ static void dumpApplePropertyAttribute(raw_ostream &OS, uint64_t Val) {
|
||||
OS << ")";
|
||||
}
|
||||
|
||||
static void dumpRanges(raw_ostream &OS, const DWARFAddressRangesVector& Ranges,
|
||||
unsigned AddressSize, unsigned Indent) {
|
||||
if (Ranges.empty())
|
||||
return;
|
||||
|
||||
for (const auto &Range: Ranges) {
|
||||
OS << '\n';
|
||||
OS.indent(Indent);
|
||||
OS << format("[0x%0*" PRIx64 " - 0x%0*" PRIx64 ")",
|
||||
AddressSize*2, Range.first,
|
||||
AddressSize*2, Range.second);
|
||||
}
|
||||
}
|
||||
|
||||
void DWARFDebugInfoEntryMinimal::dumpAttribute(raw_ostream &OS,
|
||||
DWARFUnit *u,
|
||||
uint32_t *offset_ptr,
|
||||
uint16_t attr, uint16_t form,
|
||||
unsigned indent) const {
|
||||
OS << " ";
|
||||
const char BaseIndent[] = " ";
|
||||
OS << BaseIndent;
|
||||
OS.indent(indent+2);
|
||||
const char *attrString = AttributeString(attr);
|
||||
if (attrString)
|
||||
@ -149,6 +164,9 @@ void DWARFDebugInfoEntryMinimal::dumpAttribute(raw_ostream &OS,
|
||||
} else if (attr == DW_AT_APPLE_property_attribute) {
|
||||
if (Optional<uint64_t> OptVal = formValue.getAsUnsignedConstant())
|
||||
dumpApplePropertyAttribute(OS, *OptVal);
|
||||
} else if (attr == DW_AT_ranges) {
|
||||
dumpRanges(OS, getAddressRanges(u), u->getAddressByteSize(),
|
||||
sizeof(BaseIndent)+indent+4);
|
||||
}
|
||||
|
||||
OS << ")\n";
|
||||
|
@ -14,7 +14,7 @@
|
||||
; describes those subprograms
|
||||
|
||||
; CHECK: DW_TAG_compile_unit
|
||||
; CHECK: DW_AT_ranges [DW_FORM_sec_offset] (0x00000000)
|
||||
; CHECK: DW_AT_ranges [DW_FORM_sec_offset] (0x00000000
|
||||
; CHECK-NOT: {{DW_TAG|NULL}}
|
||||
|
||||
; Omitting the subprograms without inlined subroutines is not possible
|
||||
|
@ -16,7 +16,7 @@
|
||||
; CHECK: DW_AT_location [DW_FORM_sec_offset] ([[E:0x[0-9a-z]*]])
|
||||
; CHECK: DW_AT_location [DW_FORM_sec_offset] ([[B:0x[0-9a-z]*]])
|
||||
; CHECK: DW_AT_location [DW_FORM_sec_offset] ([[D:0x[0-9a-z]*]])
|
||||
; CHECK: DW_AT_ranges [DW_FORM_sec_offset] (0x00000000)
|
||||
; CHECK: DW_AT_ranges [DW_FORM_sec_offset] (0x00000000
|
||||
; CHECK: .debug_loc contents:
|
||||
; CHECK-NOT: Beginning address offset
|
||||
; CHECK: .debug_loc.dwo contents:
|
||||
|
@ -1,5 +1,19 @@
|
||||
RUN: llvm-dwarfdump %p/Inputs/dwarfdump-test4.elf-x86-64 | FileCheck %s
|
||||
|
||||
CHECK: .debug_info contents:
|
||||
CHECK: DW_TAG_compile_unit
|
||||
CHECK-NOT: TAG
|
||||
CHECK: DW_AT_ranges [DW_FORM_data4] (0x00000000
|
||||
CHECK-NEXT: [0x000000000000062c - 0x0000000000000637)
|
||||
CHECK-NEXT: [0x0000000000000637 - 0x000000000000063d))
|
||||
|
||||
CHECK: DW_TAG_compile_unit
|
||||
CHECK-NOT: TAG
|
||||
CHECK: DW_AT_ranges [DW_FORM_data4] (0x00000030
|
||||
CHECK-NEXT: [0x0000000000000640 - 0x000000000000064b)
|
||||
CHECK-NEXT: [0x0000000000000637 - 0x000000000000063d))
|
||||
|
||||
|
||||
CHECK: .debug_ranges contents:
|
||||
CHECK-NEXT: 00000000 000000000000062c 0000000000000637
|
||||
CHECK-NEXT: 00000000 0000000000000637 000000000000063d
|
||||
|
@ -25,7 +25,7 @@ b:
|
||||
// DWARF: .debug_info contents:
|
||||
// DWARF: 0x{{[0-9a-f]+}}: DW_TAG_compile_unit [1]
|
||||
// CHECK-NOT-DWARF: DW_TAG_
|
||||
// DWARF: DW_AT_ranges [DW_FORM_data4] (0x00000000)
|
||||
// DWARF: DW_AT_ranges [DW_FORM_data4] (0x00000000
|
||||
|
||||
// DWARF: 0x{{[0-9a-f]+}}: DW_TAG_label [2] *
|
||||
// DWARF-NEXT: DW_AT_name [DW_FORM_string] ("a")
|
||||
|
Loading…
Reference in New Issue
Block a user