forked from OSchip/llvm-project
llvm-dwarfdump: support a --show-children option
This will print all children of a DIE when selectively printing only one DIE at a given offset. llvm-svn: 313464
This commit is contained in:
parent
099d7e452a
commit
597aa48d11
|
@ -139,6 +139,7 @@ enum DIDumpType : unsigned {
|
|||
struct DIDumpOptions {
|
||||
unsigned DumpType = DIDT_All;
|
||||
bool DumpEH = false;
|
||||
bool ShowChildren = false;
|
||||
bool SummarizeTypes = false;
|
||||
bool Verbose = false;
|
||||
};
|
||||
|
|
|
@ -223,6 +223,8 @@ void DWARFContext::dump(
|
|||
Optional<uint64_t> DumpOffset;
|
||||
uint64_t DumpType = DumpOpts.DumpType;
|
||||
bool DumpEH = DumpOpts.DumpEH;
|
||||
unsigned RecDepth =
|
||||
DumpOpts.ShowChildren ? std::numeric_limits<unsigned>::max() : 0;
|
||||
|
||||
StringRef Extension = sys::path::extension(DObj->getFileName());
|
||||
bool IsDWO = (Extension == ".dwo") || (Extension == ".dwp");
|
||||
|
@ -260,7 +262,7 @@ void DWARFContext::dump(
|
|||
if (shouldDump(IsExplicit, Name, DIDT_ID_DebugInfo, Section.Data)) {
|
||||
for (const auto &CU : CUs)
|
||||
if (DumpOffset)
|
||||
CU->getDIEForOffset(DumpOffset.getValue()).dump(OS, 0);
|
||||
CU->getDIEForOffset(DumpOffset.getValue()).dump(OS, RecDepth);
|
||||
else
|
||||
CU->dump(OS, DumpOpts);
|
||||
}
|
||||
|
@ -277,7 +279,7 @@ void DWARFContext::dump(
|
|||
for (const auto &TUS : TUSections)
|
||||
for (const auto &TU : TUS)
|
||||
if (DumpOffset)
|
||||
TU->getDIEForOffset(*DumpOffset).dump(OS, 0);
|
||||
TU->getDIEForOffset(*DumpOffset).dump(OS, RecDepth);
|
||||
else
|
||||
TU->dump(OS, DumpOpts);
|
||||
};
|
||||
|
|
|
@ -6,5 +6,17 @@ CHECK: DW_AT_name
|
|||
CHECK-NOT: {{:}}
|
||||
|
||||
RUN: llvm-mc %S/brief.s -filetype obj -triple x86_64-apple-darwin -o - \
|
||||
RUN: | llvm-dwarfdump -debug-info=0 - | FileCheck --allow-empty --check-prefix=EMPTY %s
|
||||
RUN: | llvm-dwarfdump -debug-info=0 - \
|
||||
RUN: | FileCheck --allow-empty --check-prefix=EMPTY %s
|
||||
EMPTY-NOT: DW_TAG
|
||||
|
||||
RUN: llvm-mc %S/brief.s -filetype obj -triple x86_64-apple-darwin -o - \
|
||||
RUN: | llvm-dwarfdump -debug-info=0x0000000b -c - \
|
||||
RUN: | FileCheck %s --check-prefix=CHILDREN
|
||||
|
||||
UN: llvm-mc %S/brief.s -filetype obj -triple x86_64-apple-darwin -o - \
|
||||
UN: | llvm-dwarfdump -debug-info=0x0000000b --show-children - \
|
||||
UN: | FileCheck %s --check-prefix=CHILDREN
|
||||
CHILDREN: .debug_info contents:
|
||||
CHILDREN: 0x0000000b: DW_TAG_compile_unit
|
||||
CHILDREN: DW_TAG_subprogram
|
||||
|
|
|
@ -6,3 +6,12 @@ CHECK: .debug_types contents:
|
|||
CHECK: 0x00000019: DW_TAG_structure_type
|
||||
CHECK: DW_AT_visibility
|
||||
CHECK-NOT: {{:}}
|
||||
|
||||
RUN: llvm-mc %S/../../../DebugInfo/Inputs/typeunit-header.s -filetype obj \
|
||||
RUN: -triple x86_64-unknown-elf -o - \
|
||||
RUN: | llvm-dwarfdump -c -debug-types=0x0000017 - \
|
||||
RUN: | FileCheck %s --check-prefix=CHILDREN
|
||||
CHILDREN: .debug_types contents:
|
||||
CHILDREN: 0x00000017: DW_TAG_type_unit
|
||||
CHILDREN: 0x00000019: DW_TAG_structure_type
|
||||
CHECK-NOT: {{:}}
|
||||
|
|
|
@ -126,6 +126,12 @@ static opt<bool> DumpUUID("uuid", desc("Show the UUID for each architecture"),
|
|||
cat(DwarfDumpCategory));
|
||||
static alias DumpUUIDAlias("u", desc("Alias for -uuid"), aliasopt(DumpUUID));
|
||||
|
||||
static opt<bool>
|
||||
ShowChildren("show-children",
|
||||
desc("Show a debug info entry's children when selectively "
|
||||
"printing with the =<Offset> option"));
|
||||
static alias ShowChildrenAlias("c", desc("Alias for -show-children"),
|
||||
aliasopt(ShowChildren));
|
||||
static opt<bool>
|
||||
SummarizeTypes("summarize-types",
|
||||
desc("Abbreviate the description of type unit entries"));
|
||||
|
@ -153,6 +159,7 @@ static void error(StringRef Filename, std::error_code EC) {
|
|||
static DIDumpOptions getDumpOpts() {
|
||||
DIDumpOptions DumpOpts;
|
||||
DumpOpts.DumpType = DumpType;
|
||||
DumpOpts.ShowChildren = ShowChildren;
|
||||
DumpOpts.SummarizeTypes = SummarizeTypes;
|
||||
DumpOpts.Verbose = Verbose;
|
||||
return DumpOpts;
|
||||
|
|
Loading…
Reference in New Issue