mirror of
https://github.com/RPCS3/llvm.git
synced 2026-07-19 23:23:38 -04:00
[llvm-objdump] Allow --disassemble-functions to take demangled names
The --disassemble-functions switch takes demangled names when --demangle is specified, otherwise the switch takes mangled names. https://bugs.llvm.org/show_bug.cgi?id=41908 Reviewers: jhenderson, grimar, MaskRay, rupprecht Differential Revision: https://reviews.llvm.org/D63524 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@364121 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -1,27 +0,0 @@
|
||||
## Show that the --disassemble-functions switch takes mangled names, not
|
||||
## demangled names.
|
||||
|
||||
# RUN: yaml2obj %s -o %t.o
|
||||
# RUN: llvm-objdump -d --disassemble-functions=_Z3foov %t.o | FileCheck %s
|
||||
# RUN: llvm-objdump -d --disassemble-functions='foo()' %t.o | FileCheck %s --check-prefix=NOFOO
|
||||
# RUN: llvm-objdump -d -C --disassemble-functions='foo()' %t.o | FileCheck %s --check-prefix=NOFOO
|
||||
# RUN: llvm-objdump -d --disassemble-functions=foo %t.o | FileCheck %s --check-prefix=NOFOO
|
||||
|
||||
# CHECK: _Z3foov:
|
||||
|
||||
# NOFOO-NOT: foo
|
||||
|
||||
--- !ELF
|
||||
FileHeader:
|
||||
Class: ELFCLASS64
|
||||
Data: ELFDATA2LSB
|
||||
Type: ET_EXEC
|
||||
Machine: EM_X86_64
|
||||
Sections:
|
||||
- Name: .text
|
||||
Type: SHT_PROGBITS
|
||||
Flags: [SHF_ALLOC, SHF_EXECINSTR]
|
||||
Content: '90'
|
||||
Symbols:
|
||||
- Name: _Z3foov
|
||||
Section: .text
|
||||
@@ -0,0 +1,61 @@
|
||||
## Show that the --disassemble-functions switch takes demangled names when
|
||||
## --demangle is specified, otherwise the switch takes mangled names.
|
||||
|
||||
# RUN: yaml2obj %s -o %t.o
|
||||
|
||||
## --disassemble-functions without --demangle.
|
||||
# RUN: llvm-objdump --disassemble-functions=_Z3foov %t.o | FileCheck %s --check-prefix=MANGLED
|
||||
# RUN: llvm-objdump --disassemble-functions='foo()' %t.o 2>&1 \
|
||||
# RUN: | FileCheck %s --check-prefix=MANGLED-MISS
|
||||
# RUN: llvm-objdump --disassemble-functions=foo %t.o 2>&1 \
|
||||
# RUN: | FileCheck %s --check-prefix=MANGLED-MISS
|
||||
# RUN: llvm-objdump --disassemble-functions='i,f' %t.o | FileCheck %s --check-prefix=NOMANGLE
|
||||
|
||||
## --disassemble-functions with --demangle.
|
||||
# RUN: llvm-objdump -C --disassemble-functions='foo()' %t.o | FileCheck %s --check-prefix=DEMANGLED
|
||||
# RUN: llvm-objdump -C --disassemble-functions='_Z3foov' %t.o 2>&1 \
|
||||
# RUN: | FileCheck %s --check-prefix=DEMANGLED-MISS
|
||||
# RUN: llvm-objdump -C --disassemble-functions='i,f' %t.o | FileCheck %s --check-prefix=NOMANGLE
|
||||
# RUN: llvm-objdump -C --disassemble-functions='std::allocator<wchar_t>::allocator()' %t.o 2>&1 \
|
||||
# RUN: | FileCheck %s --check-prefix=DEMANGLED-MULTI
|
||||
|
||||
# MANGLED: _Z3foov:
|
||||
# MANGLED-MISS: warning: failed to disassemble missing function foo
|
||||
|
||||
# DEMANGLED: foo():
|
||||
# DEMANGLED-MISS: warning: failed to disassemble missing function _Z3foov
|
||||
|
||||
# NOMANGLE: i:
|
||||
# NOMANGLE: f:
|
||||
|
||||
# DEMANGLED-MULTI: std::allocator<wchar_t>::allocator():
|
||||
# DEMANGLED-MULTI: std::allocator<wchar_t>::allocator():
|
||||
|
||||
--- !ELF
|
||||
FileHeader:
|
||||
Class: ELFCLASS64
|
||||
Data: ELFDATA2LSB
|
||||
Type: ET_EXEC
|
||||
Machine: EM_X86_64
|
||||
Sections:
|
||||
- Name: .text
|
||||
Type: SHT_PROGBITS
|
||||
Flags: [SHF_ALLOC, SHF_EXECINSTR]
|
||||
Address: 0x1000
|
||||
Content: 9090909090
|
||||
Symbols:
|
||||
- Name: _Z3foov
|
||||
Value: 0x1000
|
||||
Section: .text
|
||||
- Name: i
|
||||
Value: 0x1001
|
||||
Section: .text
|
||||
- Name: f
|
||||
Value: 0x1002
|
||||
Section: .text
|
||||
- Name: _ZNSaIwEC1Ev
|
||||
Value: 0x1003
|
||||
Section: .text
|
||||
- Name: _ZNSaIwEC2Ev
|
||||
Value: 0x1004
|
||||
Section: .text
|
||||
@@ -143,7 +143,9 @@ static cl::alias DisassembleAllShort("D",
|
||||
|
||||
static cl::list<std::string>
|
||||
DisassembleFunctions("disassemble-functions", cl::CommaSeparated,
|
||||
cl::desc("List of functions to disassemble"),
|
||||
cl::desc("List of functions to disassemble. "
|
||||
"Accept demangled names when --demangle is "
|
||||
"specified, otherwise accept mangled names"),
|
||||
cl::cat(ObjdumpCat));
|
||||
|
||||
static cl::opt<bool> DisassembleZeroes(
|
||||
@@ -1207,17 +1209,20 @@ static void disassembleObject(const Target *TheTarget, const ObjectFile *Obj,
|
||||
std::vector<RelocationRef>::const_iterator RelEnd = Rels.end();
|
||||
// Disassemble symbol by symbol.
|
||||
for (unsigned SI = 0, SE = Symbols.size(); SI != SE; ++SI) {
|
||||
std::string SymbolName = std::get<1>(Symbols[SI]).str();
|
||||
if (Demangle)
|
||||
SymbolName = demangle(SymbolName);
|
||||
|
||||
// Skip if --disassemble-functions is not empty and the symbol is not in
|
||||
// the list.
|
||||
if (!DisasmFuncsSet.empty() &&
|
||||
!DisasmFuncsSet.count(std::get<1>(Symbols[SI])))
|
||||
if (!DisasmFuncsSet.empty() && !DisasmFuncsSet.count(SymbolName))
|
||||
continue;
|
||||
|
||||
uint64_t Start = std::get<0>(Symbols[SI]);
|
||||
if (Start < SectionAddr || StopAddress <= Start)
|
||||
continue;
|
||||
else
|
||||
FoundDisasmFuncsSet.insert(std::get<1>(Symbols[SI]));
|
||||
FoundDisasmFuncsSet.insert(SymbolName);
|
||||
|
||||
// The end is the section end, the beginning of the next symbol, or
|
||||
// --stop-address.
|
||||
@@ -1259,11 +1264,7 @@ static void disassembleObject(const Target *TheTarget, const ObjectFile *Obj,
|
||||
outs() << format(Is64Bits ? "%016" PRIx64 " " : "%08" PRIx64 " ",
|
||||
SectionAddr + Start + VMAAdjustment);
|
||||
|
||||
StringRef SymbolName = std::get<1>(Symbols[SI]);
|
||||
if (Demangle)
|
||||
outs() << demangle(SymbolName) << ":\n";
|
||||
else
|
||||
outs() << SymbolName << ":\n";
|
||||
outs() << SymbolName << ":\n";
|
||||
|
||||
// Don't print raw contents of a virtual section. A virtual section
|
||||
// doesn't have any contents in the file.
|
||||
|
||||
Reference in New Issue
Block a user