From: George Rimar Date: Wed, 9 Jan 2019 14:43:33 +0000 (+0000) Subject: [llvm-objdump] - Print symbol addressed when dumping disassembly output (-d) X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=56b18a6bdf2201f32e055594c4b937c4cd699776;p=llvm [llvm-objdump] - Print symbol addressed when dumping disassembly output (-d) When GNU objdump dumps the input with -d it prints the symbol addresses, for example: 0000000000000031 : 31: 00 00 add %al,(%rax) ... llvm-objdump currently does not do that. Patch changes the behavior to match the GNU objdump. That is useful for implementing -z/--disassemble-zeroes (D56083), it allows omitting first zero bytes and keep the information about the symbol address in the output. Differential revision: https://reviews.llvm.org/D56123 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@350726 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/test/tools/llvm-objdump/X86/print-symbol-addr.s b/test/tools/llvm-objdump/X86/print-symbol-addr.s new file mode 100644 index 00000000000..9c5b23ecc0b --- /dev/null +++ b/test/tools/llvm-objdump/X86/print-symbol-addr.s @@ -0,0 +1,29 @@ +// RUN: llvm-mc %s -filetype=obj -triple=x86_64-pc-linux -o %t.o + +// Check we print the address of `foo` and `bar`. +// RUN: llvm-objdump -d %t.o | FileCheck %s +// CHECK: Disassembly of section .text: +// CHECK-NEXT: 0000000000000000 foo: +// CHECK-NEXT: 0: {{.*}} nop +// CHECK-NEXT: 1: {{.*}} nop +// CHECK: 0000000000000002 bar: +// CHECK-NEXT: 2: {{.*}} nop + +// Check we do not print the addresses with -no-leading-addr. +// RUN: llvm-objdump -d -no-leading-addr %t.o | FileCheck %s --check-prefix=NOADDR +// NOADDR: Disassembly of section .text: +// NOADDR-NEXT: {{^}}foo: +// NOADDR-NEXT: {{.*}} nop +// NOADDR-NEXT: {{.*}} nop +// NOADDR: {{^}}bar: +// NOADDR-NEXT: {{.*}} nop + +.text +.globl foo +.type foo, @function +foo: + nop + nop + +bar: + nop diff --git a/tools/llvm-objdump/llvm-objdump.cpp b/tools/llvm-objdump/llvm-objdump.cpp index f2eb69a2e8c..22fd1eb7dc2 100644 --- a/tools/llvm-objdump/llvm-objdump.cpp +++ b/tools/llvm-objdump/llvm-objdump.cpp @@ -1592,6 +1592,9 @@ static void DisassembleObject(const ObjectFile *Obj, bool InlineRelocs) { } outs() << '\n'; + if (!NoLeadingAddr) + outs() << format("%016" PRIx64 " ", SectionAddr + Start); + StringRef SymbolName = std::get<1>(Symbols[si]); if (Demangle) outs() << demangle(SymbolName) << ":\n";