diff options
author | Markus Böck <markus.boeck02@gmail.com> | 2020-04-18 08:23:37 -0700 |
---|---|---|
committer | Fangrui Song <maskray@google.com> | 2020-04-18 08:30:50 -0700 |
commit | cacf1b5093279ae2aaa695d3eb5f0c116d0746ea (patch) | |
tree | 22e83c1ad31a0b8aeaf1a3b30478d667c77233e0 /llvm | |
parent | 5eb8d45ab5b85cb3a2edfe995cbf1d4b1beae462 (diff) | |
download | llvm-cacf1b5093279ae2aaa695d3eb5f0c116d0746ea.zip llvm-cacf1b5093279ae2aaa695d3eb5f0c116d0746ea.tar.gz llvm-cacf1b5093279ae2aaa695d3eb5f0c116d0746ea.tar.bz2 |
[llvm-objdump] Demangle C++ Symbols in branch and call targets
Currently C++ symbols are demangled in the symbol table as well as in
the disassembly and relocations. This patch adds demangling of C++
symbols in targets of calls and branches making it easier to decipher
control flow in disassembly. This also matches up with GNUobjdump's
behavior
Reviewed By: MaskRay
Differential Revision: https://reviews.llvm.org/D77957
Diffstat (limited to 'llvm')
-rw-r--r-- | llvm/test/tools/llvm-objdump/X86/demangle.s | 2 | ||||
-rw-r--r-- | llvm/tools/llvm-objdump/llvm-objdump.cpp | 5 |
2 files changed, 5 insertions, 2 deletions
diff --git a/llvm/test/tools/llvm-objdump/X86/demangle.s b/llvm/test/tools/llvm-objdump/X86/demangle.s index f6523f2..c2caae8 100644 --- a/llvm/test/tools/llvm-objdump/X86/demangle.s +++ b/llvm/test/tools/llvm-objdump/X86/demangle.s @@ -11,7 +11,7 @@ ## Check the case when relocations are inlined into disassembly. # RUN: llvm-objdump -d -r --demangle %t | FileCheck %s --check-prefix=INLINE # INLINE: <foo()>: -# INLINE-NEXT: 0: {{.*}} callq 0x5 <_Z3foov+0x5> +# INLINE-NEXT: 0: {{.*}} callq 0x5 <foo()+0x5> # INLINE-NEXT: 0000000000000001: R_X86_64_PLT32 foo()-0x4 .text diff --git a/llvm/tools/llvm-objdump/llvm-objdump.cpp b/llvm/tools/llvm-objdump/llvm-objdump.cpp index c264ea6..0eeb337 100644 --- a/llvm/tools/llvm-objdump/llvm-objdump.cpp +++ b/llvm/tools/llvm-objdump/llvm-objdump.cpp @@ -1556,7 +1556,10 @@ static void disassembleObject(const Target *TheTarget, const ObjectFile *Obj, if (TargetSym != TargetSectionSymbols->begin()) { --TargetSym; uint64_t TargetAddress = TargetSym->Addr; - StringRef TargetName = TargetSym->Name; + std::string TargetName = TargetSym->Name.str(); + if (Demangle) + TargetName = demangle(TargetName); + outs() << " <" << TargetName; uint64_t Disp = Target - TargetAddress; if (Disp) |