summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAdrian Prantl <aprantl@apple.com>2017-09-29 00:52:33 +0000
committerAdrian Prantl <aprantl@apple.com>2017-09-29 00:52:33 +0000
commitf51e78017d8b334c019ca8b90d9d1f00886a416a (patch)
tree17db523a2a5462e4f29e11526f460fa289acfa56
parent4a765da3e989b3b42d01ce6b9322974d248991a5 (diff)
downloadbcm5719-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.h8
-rw-r--r--llvm/lib/DebugInfo/DWARF/DWARFContext.cpp28
-rw-r--r--llvm/test/tools/llvm-dwarfdump/X86/find.test7
-rw-r--r--llvm/tools/llvm-dwarfdump/llvm-dwarfdump.cpp2
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;
}();
OpenPOWER on IntegriCloud