forked from OSchip/llvm-project
[dwarfdump] Add pretty printer for accelerator table based on Atom.
For instance, When dumping .apple_types, the second atom represents the DW_TAG. In addition to printing the raw value, we now also pretty print the value if the ATOM tells us how. llvm-svn: 337026
This commit is contained in:
parent
e86e6efea1
commit
327e7a1608
|
@ -540,6 +540,10 @@ bool isValidFormForVersion(Form F, unsigned Version, bool ExtensionsOk = true);
|
||||||
/// for attribute Attr.
|
/// for attribute Attr.
|
||||||
StringRef AttributeValueString(uint16_t Attr, unsigned Val);
|
StringRef AttributeValueString(uint16_t Attr, unsigned Val);
|
||||||
|
|
||||||
|
/// Returns the symbolic string representing Val when used as a value
|
||||||
|
/// for atom Atom.
|
||||||
|
StringRef AtomValueString(uint16_t Atom, unsigned Val);
|
||||||
|
|
||||||
/// Describes an entry of the various gnu_pub* debug sections.
|
/// Describes an entry of the various gnu_pub* debug sections.
|
||||||
///
|
///
|
||||||
/// The gnu_pub* kind looks like:
|
/// The gnu_pub* kind looks like:
|
||||||
|
|
|
@ -571,6 +571,17 @@ StringRef llvm::dwarf::AttributeValueString(uint16_t Attr, unsigned Val) {
|
||||||
return StringRef();
|
return StringRef();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
StringRef llvm::dwarf::AtomValueString(uint16_t Atom, unsigned Val) {
|
||||||
|
switch (Atom) {
|
||||||
|
case DW_ATOM_null:
|
||||||
|
return "NULL";
|
||||||
|
case DW_ATOM_die_tag:
|
||||||
|
return TagString(Val);
|
||||||
|
}
|
||||||
|
|
||||||
|
return StringRef();
|
||||||
|
}
|
||||||
|
|
||||||
StringRef llvm::dwarf::IndexString(unsigned Idx) {
|
StringRef llvm::dwarf::IndexString(unsigned Idx) {
|
||||||
switch (Idx) {
|
switch (Idx) {
|
||||||
default:
|
default:
|
||||||
|
|
|
@ -183,12 +183,18 @@ bool AppleAcceleratorTable::dumpName(ScopedPrinter &W,
|
||||||
ListScope DataScope(W, ("Data " + Twine(Data)).str());
|
ListScope DataScope(W, ("Data " + Twine(Data)).str());
|
||||||
unsigned i = 0;
|
unsigned i = 0;
|
||||||
for (auto &Atom : AtomForms) {
|
for (auto &Atom : AtomForms) {
|
||||||
W.startLine() << format("Atom[%d]: ", i++);
|
W.startLine() << format("Atom[%d]: ", i);
|
||||||
if (Atom.extractValue(AccelSection, DataOffset, FormParams))
|
if (Atom.extractValue(AccelSection, DataOffset, FormParams)) {
|
||||||
Atom.dump(W.getOStream());
|
Atom.dump(W.getOStream());
|
||||||
else
|
if (Optional<uint64_t> Val = Atom.getAsUnsignedConstant()) {
|
||||||
|
StringRef Str = dwarf::AtomValueString(HdrData.Atoms[i].first, *Val);
|
||||||
|
if (!Str.empty())
|
||||||
|
W.getOStream() << " (" << Str << ")";
|
||||||
|
}
|
||||||
|
} else
|
||||||
W.getOStream() << "Error extracting the value";
|
W.getOStream() << "Error extracting the value";
|
||||||
W.getOStream() << "\n";
|
W.getOStream() << "\n";
|
||||||
|
i++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return true; // more entries follow
|
return true; // more entries follow
|
||||||
|
|
|
@ -5,7 +5,7 @@ CHECK: .apple_types contents:
|
||||||
CHECK: String: 0x00000066 "A"
|
CHECK: String: 0x00000066 "A"
|
||||||
CHECK-NEXT: Data 0 [
|
CHECK-NEXT: Data 0 [
|
||||||
CHECK-NEXT: Atom[0]: 0x0000012d
|
CHECK-NEXT: Atom[0]: 0x0000012d
|
||||||
CHECK-NEXT: Atom[1]: 0x0013
|
CHECK-NEXT: Atom[1]: 0x0013 (DW_TAG_structure_type)
|
||||||
CHECK-NEXT: Atom[2]: 0x02
|
CHECK-NEXT: Atom[2]: 0x02
|
||||||
CHECK-NEXT: Atom[3]: 0x0b87b15a
|
CHECK-NEXT: Atom[3]: 0x0b87b15a
|
||||||
CHECK-NEXT: ]
|
CHECK-NEXT: ]
|
||||||
|
|
Loading…
Reference in New Issue