mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-07-22 23:24:59 +00:00
[dwarfdump] Add support for dumping accelerator tables.
The class used for the dump only allows to dump for the moment, but it can (and will) be easily extended to support search also. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@221836 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -9,6 +9,7 @@
|
||||
|
||||
#include "DWARFContext.h"
|
||||
#include "DWARFDebugArangeSet.h"
|
||||
#include "DWARFAcceleratorTable.h"
|
||||
|
||||
#include "llvm/ADT/SmallString.h"
|
||||
#include "llvm/ADT/StringSwitch.h"
|
||||
@@ -59,6 +60,17 @@ static void dumpPubSection(raw_ostream &OS, StringRef Name, StringRef Data,
|
||||
}
|
||||
}
|
||||
|
||||
static void dumpAccelSection(raw_ostream &OS, StringRef Name, StringRef Data,
|
||||
StringRef StringSection, bool LittleEndian) {
|
||||
DataExtractor AccelSection(Data, LittleEndian, 0);
|
||||
DataExtractor StrData(StringSection, LittleEndian, 0);
|
||||
OS << "\n." << Name << " contents:\n";
|
||||
DWARFAcceleratorTable Accel(AccelSection, StrData);
|
||||
if (!Accel.extract())
|
||||
return;
|
||||
Accel.dump(OS);
|
||||
}
|
||||
|
||||
void DWARFContext::dump(raw_ostream &OS, DIDumpType DumpType) {
|
||||
if (DumpType == DIDT_All || DumpType == DIDT_Abbrev) {
|
||||
OS << ".debug_abbrev contents:\n";
|
||||
@@ -218,6 +230,22 @@ void DWARFContext::dump(raw_ostream &OS, DIDumpType DumpType) {
|
||||
OS << format("%8.8x\n", strOffsetExt.getU32(&offset));
|
||||
}
|
||||
}
|
||||
|
||||
if (DumpType == DIDT_All || DumpType == DIDT_AppleNames)
|
||||
dumpAccelSection(OS, "apple_names", getAppleNamesSection(),
|
||||
getStringSection(), isLittleEndian());
|
||||
|
||||
if (DumpType == DIDT_All || DumpType == DIDT_AppleTypes)
|
||||
dumpAccelSection(OS, "apple_types", getAppleTypesSection(),
|
||||
getStringSection(), isLittleEndian());
|
||||
|
||||
if (DumpType == DIDT_All || DumpType == DIDT_AppleNamespaces)
|
||||
dumpAccelSection(OS, "apple_namespaces", getAppleNamespacesSection(),
|
||||
getStringSection(), isLittleEndian());
|
||||
|
||||
if (DumpType == DIDT_All || DumpType == DIDT_AppleObjC)
|
||||
dumpAccelSection(OS, "apple_objc", getAppleObjCSection(),
|
||||
getStringSection(), isLittleEndian());
|
||||
}
|
||||
|
||||
const DWARFDebugAbbrev *DWARFContext::getDebugAbbrev() {
|
||||
@@ -565,6 +593,11 @@ DWARFContextInMemory::DWARFContextInMemory(const object::ObjectFile &Obj)
|
||||
.Case("debug_str.dwo", &StringDWOSection)
|
||||
.Case("debug_str_offsets.dwo", &StringOffsetDWOSection)
|
||||
.Case("debug_addr", &AddrSection)
|
||||
.Case("apple_names", &AppleNamesSection)
|
||||
.Case("apple_types", &AppleTypesSection)
|
||||
.Case("apple_namespaces", &AppleNamespacesSection)
|
||||
.Case("apple_namespac", &AppleNamespacesSection)
|
||||
.Case("apple_objc", &AppleObjCSection)
|
||||
// Any more debug info sections go here.
|
||||
.Default(nullptr);
|
||||
if (SectionData) {
|
||||
|
Reference in New Issue
Block a user