forked from OSchip/llvm-project
llvm-dwarfdump: support .apple-namespaces in --find
llvm-svn: 314481
This commit is contained in:
parent
4a765da3e9
commit
f51e78017d
|
@ -71,6 +71,8 @@ class DWARFContext : public DIContext {
|
||||||
std::unique_ptr<DWARFDebugMacro> Macro;
|
std::unique_ptr<DWARFDebugMacro> Macro;
|
||||||
std::unique_ptr<DWARFAcceleratorTable> AppleNames;
|
std::unique_ptr<DWARFAcceleratorTable> AppleNames;
|
||||||
std::unique_ptr<DWARFAcceleratorTable> AppleTypes;
|
std::unique_ptr<DWARFAcceleratorTable> AppleTypes;
|
||||||
|
std::unique_ptr<DWARFAcceleratorTable> AppleNamespaces;
|
||||||
|
std::unique_ptr<DWARFAcceleratorTable> AppleObjC;
|
||||||
|
|
||||||
DWARFUnitSection<DWARFCompileUnit> DWOCUs;
|
DWARFUnitSection<DWARFCompileUnit> DWOCUs;
|
||||||
std::deque<DWARFUnitSection<DWARFTypeUnit>> DWOTUs;
|
std::deque<DWARFUnitSection<DWARFTypeUnit>> DWOTUs;
|
||||||
|
@ -246,6 +248,12 @@ public:
|
||||||
/// Get a reference to the parsed accelerator table object.
|
/// Get a reference to the parsed accelerator table object.
|
||||||
const DWARFAcceleratorTable &getAppleTypes();
|
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.
|
/// Get a pointer to a parsed line table corresponding to a compile unit.
|
||||||
const DWARFDebugLine::LineTable *getLineTableForUnit(DWARFUnit *cu);
|
const DWARFDebugLine::LineTable *getLineTableForUnit(DWARFUnit *cu);
|
||||||
|
|
||||||
|
|
|
@ -68,17 +68,6 @@ DWARFContext::DWARFContext(std::unique_ptr<const DWARFObject> DObj,
|
||||||
|
|
||||||
DWARFContext::~DWARFContext() = default;
|
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.
|
/// Dump the UUID load command.
|
||||||
static void dumpUUID(raw_ostream &OS, const ObjectFile &Obj) {
|
static void dumpUUID(raw_ostream &OS, const ObjectFile &Obj) {
|
||||||
auto *MachO = dyn_cast<MachOObjectFile>(&Obj);
|
auto *MachO = dyn_cast<MachOObjectFile>(&Obj);
|
||||||
|
@ -461,13 +450,11 @@ void DWARFContext::dump(
|
||||||
|
|
||||||
if (shouldDump(Explicit, ".apple_namespaces", DIDT_ID_AppleNamespaces,
|
if (shouldDump(Explicit, ".apple_namespaces", DIDT_ID_AppleNamespaces,
|
||||||
DObj->getAppleNamespacesSection().Data))
|
DObj->getAppleNamespacesSection().Data))
|
||||||
dumpAccelSection(OS, *DObj, DObj->getAppleNamespacesSection(),
|
getAppleNamespaces().dump(OS);
|
||||||
DObj->getStringSection(), isLittleEndian());
|
|
||||||
|
|
||||||
if (shouldDump(Explicit, ".apple_objc", DIDT_ID_AppleObjC,
|
if (shouldDump(Explicit, ".apple_objc", DIDT_ID_AppleObjC,
|
||||||
DObj->getAppleObjCSection().Data))
|
DObj->getAppleObjCSection().Data))
|
||||||
dumpAccelSection(OS, *DObj, DObj->getAppleObjCSection(),
|
getAppleObjC().dump(OS);
|
||||||
DObj->getStringSection(), isLittleEndian());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
DWARFCompileUnit *DWARFContext::getDWOCompileUnitForHash(uint64_t Hash) {
|
DWARFCompileUnit *DWARFContext::getDWOCompileUnitForHash(uint64_t Hash) {
|
||||||
|
@ -659,6 +646,17 @@ const DWARFAcceleratorTable &DWARFContext::getAppleTypes() {
|
||||||
DObj->getStringSection(), isLittleEndian());
|
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 *
|
const DWARFLineTable *
|
||||||
DWARFContext::getLineTableForUnit(DWARFUnit *U) {
|
DWARFContext::getLineTableForUnit(DWARFUnit *U) {
|
||||||
if (!Line)
|
if (!Line)
|
||||||
|
|
|
@ -35,3 +35,10 @@ TYPES: : DW_TAG_base_type
|
||||||
TYPES-NOT: {{:}}
|
TYPES-NOT: {{:}}
|
||||||
TYPES: DW_AT_name ("int")
|
TYPES: DW_AT_name ("int")
|
||||||
TYPES-NOT: {{:}}
|
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}}
|
||||||
|
|
|
@ -260,6 +260,8 @@ static bool dumpObjectFile(ObjectFile &Obj, DWARFContext &DICtx, Twine Filename,
|
||||||
return DumpOffsets[DIDT_ID_DebugInfo] = *Offset;
|
return DumpOffsets[DIDT_ID_DebugInfo] = *Offset;
|
||||||
if (auto Offset = find(DICtx.getAppleTypes()))
|
if (auto Offset = find(DICtx.getAppleTypes()))
|
||||||
return DumpOffsets[DIDT_ID_DebugInfo] = *Offset;
|
return DumpOffsets[DIDT_ID_DebugInfo] = *Offset;
|
||||||
|
if (auto Offset = find(DICtx.getAppleNamespaces()))
|
||||||
|
return DumpOffsets[DIDT_ID_DebugInfo] = *Offset;
|
||||||
}
|
}
|
||||||
return None;
|
return None;
|
||||||
}();
|
}();
|
||||||
|
|
Loading…
Reference in New Issue