From f9fbef2e1790c1869915cf36e33ae0329580930e Mon Sep 17 00:00:00 2001 From: Hsin-Yi Chen Date: Sat, 3 Jun 2017 16:32:57 +0800 Subject: [PATCH] Add option to print mangled function names To compare vtable in VTS ABI test, add the option -mangled to have vndk-vtable-dumper print mangled function names. If the option is not specified, print demangled names. Bug: 37488823 Test: tests/test_vndk_vtable_dumper.py Test: vndk-vtable-dumper -mangled libhidlbase.so Change-Id: I0a57089425298d311e2366adb933c4c752a37b03 --- vndk/tools/vtable-dumper/elf_handling.cpp | 7 +++++-- vndk/tools/vtable-dumper/elf_handling.h | 6 ++++-- vndk/tools/vtable-dumper/vndk_vtable_dumper.cpp | 6 +++++- 3 files changed, 14 insertions(+), 5 deletions(-) diff --git a/vndk/tools/vtable-dumper/elf_handling.cpp b/vndk/tools/vtable-dumper/elf_handling.cpp index 635b09edd..e0483dbdb 100644 --- a/vndk/tools/vtable-dumper/elf_handling.cpp +++ b/vndk/tools/vtable-dumper/elf_handling.cpp @@ -126,7 +126,7 @@ bool ELFSharedObject::cacheELFSections() { } template -void ELFSharedObject::printVTables() const { +void ELFSharedObject::printVTables(bool Mangled) const { for (const VTable &Vtable : mVTables) { if (Vtable.getVTableSize() == 0) continue; @@ -138,9 +138,12 @@ void ELFSharedObject::printVTables() const { << " entries" << "\n"; for (const VFunction &Vfunction : Vtable) { + std::string VfunctionName = (Mangled ? + Vfunction.getMangledName() : + Vfunction.getDemangledName()); outs() << Vfunction.getOffset() << " (int (*)(...)) " - << Vfunction.getDemangledName() + << VfunctionName << "\n"; } outs() << "\n" diff --git a/vndk/tools/vtable-dumper/elf_handling.h b/vndk/tools/vtable-dumper/elf_handling.h index 2237c2165..9ef91b429 100644 --- a/vndk/tools/vtable-dumper/elf_handling.h +++ b/vndk/tools/vtable-dumper/elf_handling.h @@ -42,7 +42,9 @@ using llvm::outs; class SharedObject { public: static std::unique_ptr create(const ObjectFile *); - virtual void printVTables() const = 0; + /* Print mangled names if the argument is true; demangled if false. + */ + virtual void printVTables(bool) const = 0; virtual ~SharedObject() = 0; private: virtual bool getVTables() = 0; @@ -105,7 +107,7 @@ private: template class ELFSharedObject : public SharedObject { public: - void printVTables() const override; + void printVTables(bool) const override; bool getVTables() override; ~ELFSharedObject(); ELFSharedObject(const ELFObjectFile *); diff --git a/vndk/tools/vtable-dumper/vndk_vtable_dumper.cpp b/vndk/tools/vtable-dumper/vndk_vtable_dumper.cpp index 2ce2b161e..0f79c2dab 100644 --- a/vndk/tools/vtable-dumper/vndk_vtable_dumper.cpp +++ b/vndk/tools/vtable-dumper/vndk_vtable_dumper.cpp @@ -42,6 +42,10 @@ opt FilePath( Positional, Required, cat(VTableDumperCategory), desc("shared_library.so")); +opt Mangled( + "mangled", cat(VTableDumperCategory), + desc("Show mangled symbol names")); + static void HideIrrelevantCommandLineOptions() { for (StringMapEntry