Skip to content

Commit

Permalink
[dsymutil] Improve verbose output (NFC)
Browse files Browse the repository at this point in the history
The verbose output for finding relocations assumed that we'd always dump
the DIE after (which starts with a newline) and therefore didn't include
one itself. However, this isn't always true, leading to garbled output.

This patch adds a newline to the verbose output and adds a line that
says that the DIE is being kept (which isn't obvious otherwise). It also
adds a 0x prefix to the relocations.

llvm-svn: 374123
  • Loading branch information
JDevlieghere committed Oct 8, 2019
1 parent 5841e9a commit a3f794e
Show file tree
Hide file tree
Showing 2 changed files with 55 additions and 30 deletions.
66 changes: 44 additions & 22 deletions llvm/test/tools/dsymutil/basic-linking.test
Expand Up @@ -25,36 +25,44 @@ CHECK-NOT: TAG
CHECK: AT_name {{.*}}basic3.c

CHECK-NOT: Found valid debug map entry
CHECK: Found valid debug map entry: _main 0000000000000000 => 0000000100000ea0
CHECK: Found valid debug map entry: _main 0x0000000000000000 => 0x0000000100000ea0
CHECK-NEXT: Keeping subprogram DIE:
CHECK-NEXT: DW_TAG_subprogram
CHECK-NEXT: DW_AT_name{{.*}}"main"

CHECK: Found valid debug map entry: _private_int 0000000000000560 => 0000000100001008
CHECK: Found valid debug map entry: _private_int 0x0000000000000560 => 0x0000000100001008
CHECK-NEXT: Keeping variable DIE:
CHECK-NEXT: DW_TAG_variable
CHECK-NEXT: DW_AT_name {{.*}}"private_int"
CHECK-NOT: Found valid debug map entry
CHECK: Found valid debug map entry: _baz 0000000000000310 => 0000000100001000
CHECK: Found valid debug map entry: _baz 0x0000000000000310 => 0x0000000100001000
CHECK-NEXT: Keeping variable DIE:
CHECK-NEXT: DW_TAG_variable
CHECK-NEXT: DW_AT_name {{.*}}"baz"
CHECK-NOT: Found valid debug map entry
CHECK: Found valid debug map entry: _foo 0000000000000020 => 0000000100000ed0
CHECK: Found valid debug map entry: _foo 0x0000000000000020 => 0x0000000100000ed0
CHECK-NEXT: Keeping subprogram DIE:
CHECK-NEXT: DW_TAG_subprogram
CHECK-NEXT: DW_AT_name {{.*}}"foo"
CHECK-NOT: Found valid debug map entry
CHECK: Found valid debug map entry: _inc 0000000000000070 => 0000000100000f20
CHECK: Found valid debug map entry: _inc 0x0000000000000070 => 0x0000000100000f20
CHECK-NEXT: Keeping subprogram DIE:
CHECK-NEXT: DW_TAG_subprogram
CHECK-NEXT: DW_AT_name {{.*}}"inc"

CHECK-NOT: Found valid debug map entry
CHECK: Found valid debug map entry: _val ffffffffffffffff => 0000000100001004
CHECK: Found valid debug map entry: _val 0xffffffffffffffff => 0x0000000100001004
CHECK-NEXT: Keeping variable DIE:
CHECK-NEXT: DW_TAG_variable
CHECK-NEXT: DW_AT_name {{.*}}"val"
CHECK-NOT: Found valid debug map entry
CHECK: Found valid debug map entry: _bar 0000000000000020 => 0000000100000f40
CHECK: Found valid debug map entry: _bar 0x0000000000000020 => 0x0000000100000f40
CHECK-NEXT: Keeping subprogram DIE:
CHECK-NEXT: DW_TAG_subprogram
CHECK-NEXT: DW_AT_name {{.*}}"bar"
CHECK-NOT: Found valid debug map entry
CHECK: Found valid debug map entry: _inc 0000000000000070 => 0000000100000f90
CHECK: Found valid debug map entry: _inc 0x0000000000000070 => 0x0000000100000f90
CHECK-NEXT: Keeping subprogram DIE:
CHECK-NEXT: DW_TAG_subprogram
CHECK-NEXT: DW_AT_name {{.*}}"inc")

Expand All @@ -75,27 +83,33 @@ CHECK-LTO-NOT: TAG
CHECK-LTO: AT_name {{.*}}basic3.c

CHECK-LTO-NOT: Found valid debug map entry
CHECK-LTO: Found valid debug map entry: _main 0000000000000000 => 0000000100000f40
CHECK-LTO: Found valid debug map entry: _main 0x0000000000000000 => 0x0000000100000f40
CHECK-LTO-NEXT: Keeping subprogram DIE:
CHECK-LTO-NEXT: DW_TAG_subprogram
CHECK-LTO-NEXT: DW_AT_name {{.*}}"main"
CHECK-LTO-NOT: Found valid debug map entry
CHECK-LTO: Found valid debug map entry: _private_int 00000000000008e8 => 0000000100001008
CHECK-LTO: Found valid debug map entry: _private_int 0x00000000000008e8 => 0x0000000100001008
CHECK-LTO-NEXT: Keeping variable DIE:
CHECK-LTO-NEXT: DW_TAG_variable
CHECK-LTO-NEXT: DW_AT_name {{.*}}"private_int"
CHECK-LTO-NOT: Found valid debug map entry
CHECK-LTO: Found valid debug map entry: _baz 0000000000000658 => 0000000100001000
CHECK-LTO: Found valid debug map entry: _baz 0x0000000000000658 => 0x0000000100001000
CHECK-LTO-NEXT: Keeping variable DIE:
CHECK-LTO-NEXT: DW_TAG_variable
CHECK-LTO-NEXT: DW_AT_name {{.*}} "baz"
CHECK-LTO-NOT: Found valid debug map entry
CHECK-LTO: Found valid debug map entry: _foo 0000000000000010 => 0000000100000f50
CHECK-LTO: Found valid debug map entry: _foo 0x0000000000000010 => 0x0000000100000f50
CHECK-LTO-NEXT: Keeping subprogram DIE:
CHECK-LTO-NEXT: DW_TAG_subprogram
CHECK-LTO-NEXT: DW_AT_name {{.*}}"foo"
CHECK-LTO-NOT: Found valid debug map entry
CHECK-LTO: Found valid debug map entry: _val 00000000000008ec => 0000000100001004
CHECK-LTO: Found valid debug map entry: _val 0x00000000000008ec => 0x0000000100001004
CHECK-LTO-NEXT: Keeping variable DIE:
CHECK-LTO-NEXT: DW_TAG_variable
CHECK-LTO-NEXT: DW_AT_name {{.*}}"val"
CHECK-LTO-NOT: Found valid debug map entry
CHECK-LTO: Found valid debug map entry: _bar 0000000000000050 => 0000000100000f90
CHECK-LTO: Found valid debug map entry: _bar 0x0000000000000050 => 0x0000000100000f90
CHECK-LTO-NEXT: Keeping subprogram DIE:
CHECK-LTO-NEXT: DW_TAG_subprogram
CHECK-LTO-NEXT: DW_AT_name {{.*}}"bar"

Expand All @@ -120,36 +134,44 @@ CHECK-ARCHIVE-NOT: TAG
CHECK-ARCHIVE: AT_name {{.*}}basic3.c

CHECK-ARCHIVE-NOT: Found valid debug map entry
CHECK-ARCHIVE: Found valid debug map entry: _main 0000000000000000 => 0000000100000ea0
CHECK-ARCHIVE: Found valid debug map entry: _main 0x0000000000000000 => 0x0000000100000ea0
CHECK-ARCHIVE-NEXT: Keeping subprogram DIE:
CHECK-ARCHIVE-NEXT: DW_TAG_subprogram
CHECK-ARCHIVE-NEXT: DW_AT_name{{.*}}"main"

CHECK-ARCHIVE-NOT: Found valid debug map entry
CHECK-ARCHIVE: Found valid debug map entry: _private_int 0000000000000560 => 0000000100001004
CHECK-ARCHIVE: Found valid debug map entry: _private_int 0x0000000000000560 => 0x0000000100001004
CHECK-ARCHIVE-NEXT: Keeping variable DIE:
CHECK-ARCHIVE-NEXT: DW_TAG_variable
CHECK-ARCHIVE-NEXT: DW_AT_name {{.*}}"private_int"
CHECK-ARCHIVE-NOT: Found valid debug map entry
CHECK-ARCHIVE: Found valid debug map entry: _baz 0000000000000310 => 0000000100001000
CHECK-ARCHIVE: Found valid debug map entry: _baz 0x0000000000000310 => 0x0000000100001000
CHECK-ARCHIVE-NEXT: Keeping variable DIE:
CHECK-ARCHIVE-NEXT: DW_TAG_variable
CHECK-ARCHIVE-NEXT: DW_AT_name {{.*}}"baz"
CHECK-ARCHIVE-NOT: Found valid debug map entry
CHECK-ARCHIVE: Found valid debug map entry: _foo 0000000000000020 => 0000000100000ed0
CHECK-ARCHIVE: Found valid debug map entry: _foo 0x0000000000000020 => 0x0000000100000ed0
CHECK-ARCHIVE-NEXT: Keeping subprogram DIE:
CHECK-ARCHIVE-NEXT: DW_TAG_subprogram
CHECK-ARCHIVE-NEXT: DW_AT_name {{.*}}"foo"
CHECK-ARCHIVE-NOT: Found valid debug map entry
CHECK-ARCHIVE: Found valid debug map entry: _inc 0000000000000070 => 0000000100000f20
CHECK-ARCHIVE: Found valid debug map entry: _inc 0x0000000000000070 => 0x0000000100000f20
CHECK-ARCHIVE-NEXT: Keeping subprogram DIE:
CHECK-ARCHIVE-NEXT: DW_TAG_subprogram
CHECK-ARCHIVE-NEXT: DW_AT_name {{.*}}"inc"

CHECK-ARCHIVE-NOT: Found valid debug map entry
CHECK-ARCHIVE: Found valid debug map entry: _val ffffffffffffffff => 0000000100001008
CHECK-ARCHIVE: Found valid debug map entry: _val 0xffffffffffffffff => 0x0000000100001008
CHECK-ARCHIVE-NEXT: Keeping variable DIE:
CHECK-ARCHIVE-NEXT: DW_TAG_variable
CHECK-ARCHIVE-NEXT: DW_AT_name {{.*}}"val"
CHECK-ARCHIVE-NOT: Found valid debug map entry
CHECK-ARCHIVE: Found valid debug map entry: _bar 0000000000000020 => 0000000100000f40
CHECK-ARCHIVE: Found valid debug map entry: _bar 0x0000000000000020 => 0x0000000100000f40
CHECK-ARCHIVE-NEXT: Keeping subprogram DIE:
CHECK-ARCHIVE-NEXT: DW_TAG_subprogram
CHECK-ARCHIVE-NEXT: DW_AT_name {{.*}}"bar"
CHECK-ARCHIVE-NOT: Found valid debug map entry
CHECK-ARCHIVE: Found valid debug map entry: _inc 0000000000000070 => 0000000100000f90
CHECK-ARCHIVE: Found valid debug map entry: _inc 0x0000000000000070 => 0x0000000100000f90
CHECK-ARCHIVE-NEXT: Keeping subprogram DIE:
CHECK-ARCHIVE-NEXT: DW_TAG_subprogram
CHECK-ARCHIVE-NEXT: DW_AT_name {{.*}}"inc")
19 changes: 11 additions & 8 deletions llvm/tools/dsymutil/DwarfLinker.cpp
Expand Up @@ -578,16 +578,17 @@ bool DwarfLinker::RelocationManager::hasValidRelocation(

const auto &ValidReloc = ValidRelocs[NextValidReloc++];
const auto &Mapping = ValidReloc.Mapping->getValue();
uint64_t ObjectAddress = Mapping.ObjectAddress
? uint64_t(*Mapping.ObjectAddress)
: std::numeric_limits<uint64_t>::max();
const uint64_t BinaryAddress = Mapping.BinaryAddress;
const uint64_t ObjectAddress = Mapping.ObjectAddress
? uint64_t(*Mapping.ObjectAddress)
: std::numeric_limits<uint64_t>::max();
if (Linker.Options.Verbose)
outs() << "Found valid debug map entry: " << ValidReloc.Mapping->getKey()
<< " "
<< format("\t%016" PRIx64 " => %016" PRIx64, ObjectAddress,
uint64_t(Mapping.BinaryAddress));
<< "\t"
<< format("0x%016" PRIx64 " => 0x%016" PRIx64 "\n", ObjectAddress,
BinaryAddress);

Info.AddrAdjust = int64_t(Mapping.BinaryAddress) + ValidReloc.Addend;
Info.AddrAdjust = BinaryAddress + ValidReloc.Addend;
if (Mapping.ObjectAddress)
Info.AddrAdjust -= ObjectAddress;
Info.InDebugMap = true;
Expand Down Expand Up @@ -644,14 +645,15 @@ unsigned DwarfLinker::shouldKeepVariableDIE(RelocationManager &RelocMgr,

// See if there is a relocation to a valid debug map entry inside
// this variable's location. The order is important here. We want to
// always check in the variable has a valid relocation, so that the
// always check if the variable has a valid relocation, so that the
// DIEInfo is filled. However, we don't want a static variable in a
// function to force us to keep the enclosing function.
if (!RelocMgr.hasValidRelocation(LocationOffset, LocationEndOffset, MyInfo) ||
(Flags & TF_InFunctionScope))
return Flags;

if (Options.Verbose) {
outs() << "Keeping variable DIE:";
DIDumpOptions DumpOpts;
DumpOpts.ChildRecurseDepth = 0;
DumpOpts.Verbose = Options.Verbose;
Expand Down Expand Up @@ -688,6 +690,7 @@ unsigned DwarfLinker::shouldKeepSubprogramDIE(
return Flags;

if (Options.Verbose) {
outs() << "Keeping subprogram DIE:";
DIDumpOptions DumpOpts;
DumpOpts.ChildRecurseDepth = 0;
DumpOpts.Verbose = Options.Verbose;
Expand Down

0 comments on commit a3f794e

Please sign in to comment.