diff options
author | Adrian Prantl <aprantl@apple.com> | 2017-09-29 00:52:33 +0000 |
---|---|---|
committer | Adrian Prantl <aprantl@apple.com> | 2017-09-29 00:52:33 +0000 |
commit | f51e78017d8b334c019ca8b90d9d1f00886a416a (patch) | |
tree | 17db523a2a5462e4f29e11526f460fa289acfa56 | |
parent | 4a765da3e989b3b42d01ce6b9322974d248991a5 (diff) | |
download | bcm5719-llvm-f51e78017d8b334c019ca8b90d9d1f00886a416a.tar.gz bcm5719-llvm-f51e78017d8b334c019ca8b90d9d1f00886a416a.zip |
llvm-dwarfdump: support .apple-namespaces in --find
llvm-svn: 314481
-rw-r--r-- | llvm/include/llvm/DebugInfo/DWARF/DWARFContext.h | 8 | ||||
-rw-r--r-- | llvm/lib/DebugInfo/DWARF/DWARFContext.cpp | 28 | ||||
-rw-r--r-- | llvm/test/tools/llvm-dwarfdump/X86/find.test | 7 | ||||
-rw-r--r-- | llvm/tools/llvm-dwarfdump/llvm-dwarfdump.cpp | 2 |
4 files changed, 30 insertions, 15 deletions
diff --git a/llvm/include/llvm/DebugInfo/DWARF/DWARFContext.h b/llvm/include/llvm/DebugInfo/DWARF/DWARFContext.h index 9a1da73c20c..4cecd22d450 100644 --- a/llvm/include/llvm/DebugInfo/DWARF/DWARFContext.h +++ b/llvm/include/llvm/DebugInfo/DWARF/DWARFContext.h @@ -71,6 +71,8 @@ class DWARFContext : public DIContext { std::unique_ptr<DWARFDebugMacro> Macro; std::unique_ptr<DWARFAcceleratorTable> AppleNames; std::unique_ptr<DWARFAcceleratorTable> AppleTypes; + std::unique_ptr<DWARFAcceleratorTable> AppleNamespaces; + std::unique_ptr<DWARFAcceleratorTable> AppleObjC; DWARFUnitSection<DWARFCompileUnit> DWOCUs; std::deque<DWARFUnitSection<DWARFTypeUnit>> DWOTUs; @@ -246,6 +248,12 @@ public: /// Get a reference to the parsed accelerator table object. const DWARFAcceleratorTable &getAppleTypes(); + /// Get a reference to the parsed accelerator table object. + const DWARFAcceleratorTable &getAppleNamespaces(); + + /// Get a reference to the parsed accelerator table object. + const DWARFAcceleratorTable &getAppleObjC(); + /// Get a pointer to a parsed line table corresponding to a compile unit. const DWARFDebugLine::LineTable *getLineTableForUnit(DWARFUnit *cu); diff --git a/llvm/lib/DebugInfo/DWARF/DWARFContext.cpp b/llvm/lib/DebugInfo/DWARF/DWARFContext.cpp index a48f5c41b67..bf0c4b01dc0 100644 --- a/llvm/lib/DebugInfo/DWARF/DWARFContext.cpp +++ b/llvm/lib/DebugInfo/DWARF/DWARFContext.cpp @@ -68,17 +68,6 @@ DWARFContext::DWARFContext(std::unique_ptr<const DWARFObject> DObj, DWARFContext::~DWARFContext() = default; -static void dumpAccelSection(raw_ostream &OS, const DWARFObject &Obj, - const DWARFSection &Section, - StringRef StringSection, bool LittleEndian) { - DWARFDataExtractor AccelSection(Obj, Section, LittleEndian, 0); - DataExtractor StrData(StringSection, LittleEndian, 0); - DWARFAcceleratorTable Accel(AccelSection, StrData); - if (!Accel.extract()) - return; - Accel.dump(OS); -} - /// Dump the UUID load command. static void dumpUUID(raw_ostream &OS, const ObjectFile &Obj) { auto *MachO = dyn_cast<MachOObjectFile>(&Obj); @@ -461,13 +450,11 @@ void DWARFContext::dump( if (shouldDump(Explicit, ".apple_namespaces", DIDT_ID_AppleNamespaces, DObj->getAppleNamespacesSection().Data)) - dumpAccelSection(OS, *DObj, DObj->getAppleNamespacesSection(), - DObj->getStringSection(), isLittleEndian()); + getAppleNamespaces().dump(OS); if (shouldDump(Explicit, ".apple_objc", DIDT_ID_AppleObjC, DObj->getAppleObjCSection().Data)) - dumpAccelSection(OS, *DObj, DObj->getAppleObjCSection(), - DObj->getStringSection(), isLittleEndian()); + getAppleObjC().dump(OS); } DWARFCompileUnit *DWARFContext::getDWOCompileUnitForHash(uint64_t Hash) { @@ -659,6 +646,17 @@ const DWARFAcceleratorTable &DWARFContext::getAppleTypes() { DObj->getStringSection(), isLittleEndian()); } +const DWARFAcceleratorTable &DWARFContext::getAppleNamespaces() { + return getAccelTable(AppleNamespaces, *DObj, + DObj->getAppleNamespacesSection(), + DObj->getStringSection(), isLittleEndian()); +} + +const DWARFAcceleratorTable &DWARFContext::getAppleObjC() { + return getAccelTable(AppleObjC, *DObj, DObj->getAppleObjCSection(), + DObj->getStringSection(), isLittleEndian()); +} + const DWARFLineTable * DWARFContext::getLineTableForUnit(DWARFUnit *U) { if (!Line) diff --git a/llvm/test/tools/llvm-dwarfdump/X86/find.test b/llvm/test/tools/llvm-dwarfdump/X86/find.test index e6a40b07736..2d308b7973d 100644 --- a/llvm/test/tools/llvm-dwarfdump/X86/find.test +++ b/llvm/test/tools/llvm-dwarfdump/X86/find.test @@ -35,3 +35,10 @@ TYPES: : DW_TAG_base_type TYPES-NOT: {{:}} TYPES: DW_AT_name ("int") TYPES-NOT: {{:}} + +RUN: llvm-dwarfdump %S/../../dsymutil/Inputs/odr-anon-namespace/1.o \ +RUN: -find="(anonymous namespace)" \ +RUN: | FileCheck %s --check-prefix=NAMESPACE +NAMESPACE-NOT: {{: DW}} +NAMESPACE: 0x0000005b: DW_TAG_namespace +NAMESPACE-NOT: {{: DW}} diff --git a/llvm/tools/llvm-dwarfdump/llvm-dwarfdump.cpp b/llvm/tools/llvm-dwarfdump/llvm-dwarfdump.cpp index a36926d1097..c5584b81d3c 100644 --- a/llvm/tools/llvm-dwarfdump/llvm-dwarfdump.cpp +++ b/llvm/tools/llvm-dwarfdump/llvm-dwarfdump.cpp @@ -260,6 +260,8 @@ static bool dumpObjectFile(ObjectFile &Obj, DWARFContext &DICtx, Twine Filename, return DumpOffsets[DIDT_ID_DebugInfo] = *Offset; if (auto Offset = find(DICtx.getAppleTypes())) return DumpOffsets[DIDT_ID_DebugInfo] = *Offset; + if (auto Offset = find(DICtx.getAppleNamespaces())) + return DumpOffsets[DIDT_ID_DebugInfo] = *Offset; } return None; }(); |