From 22939fa0a4d8e139b14fb0d8c915bb45ce53600e Mon Sep 17 00:00:00 2001 From: Ed Maste Date: Thu, 16 Jan 2014 17:25:12 +0000 Subject: [PATCH] llvm-symbolizer: make mangled name heuristic apply to all symbols PR: http://llvm.org/pr18431 Review: http://llvm-reviews.chandlerc.com/D2552 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@199404 91177308-0d34-0410-b5e6-96231b3b80d8 --- test/DebugInfo/Inputs/llvm-symbolizer-test.c | 18 ++++++++++++++++++ test/DebugInfo/Inputs/llvm-symbolizer-test.elf-x86-64 | Bin 0 -> 10693 bytes test/DebugInfo/llvm-symbolizer.test | 11 +++++++++++ tools/llvm-symbolizer/LLVMSymbolize.cpp | 12 +++++------- tools/llvm-symbolizer/LLVMSymbolize.h | 1 - 5 files changed, 34 insertions(+), 8 deletions(-) create mode 100644 test/DebugInfo/Inputs/llvm-symbolizer-test.c create mode 100755 test/DebugInfo/Inputs/llvm-symbolizer-test.elf-x86-64 diff --git a/test/DebugInfo/Inputs/llvm-symbolizer-test.c b/test/DebugInfo/Inputs/llvm-symbolizer-test.c new file mode 100644 index 00000000000..4c40c00c673 --- /dev/null +++ b/test/DebugInfo/Inputs/llvm-symbolizer-test.c @@ -0,0 +1,18 @@ +int f(int a, int b) { + return a + b; +} + +int g(int a) { + return a + 1; +} + + +int main() { + return f(2, g(2)); +} + +// Built with Clang 3.3: +// $ mkdir -p /tmp/dbginfo +// $ cp llvm-symbolizer-test.c /tmp/dbginfo +// $ cd /tmp/dbginfo +// $ clang -g llvm-symbolizer-test.c -o diff --git a/test/DebugInfo/Inputs/llvm-symbolizer-test.elf-x86-64 b/test/DebugInfo/Inputs/llvm-symbolizer-test.elf-x86-64 new file mode 100755 index 0000000000000000000000000000000000000000..99a448a7778997c1fbae59a6d4dd975d341fa3ac GIT binary patch literal 10693 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 V#h1^hA76jT{iOkC$5=WR{|)#Sv~vIe literal 0 HcmV?d00001 diff --git a/test/DebugInfo/llvm-symbolizer.test b/test/DebugInfo/llvm-symbolizer.test index 897cc3e0d5d..d6e6e754424 100644 --- a/test/DebugInfo/llvm-symbolizer.test +++ b/test/DebugInfo/llvm-symbolizer.test @@ -66,3 +66,14 @@ RUN: | FileCheck %s --check-prefix=BINARY BINARY: main BINARY-NEXT: /tmp/dbginfo{{[/\\]}}dwarfdump-test.cc:16 BINARY: _start + +RUN: echo "0x400720" > %t.input5 +RUN: echo "0x4004a0" >> %t.input5 +RUN: echo "0x4006f0" >> %t.input5 +RUN: llvm-symbolizer --obj %p/Inputs/llvm-symbolizer-test.elf-x86-64 < %t.input5 \ +RUN: | FileCheck %s --check-prefix=BINARY_C + +BINARY_C: main +BINARY_C-NEXT: /tmp/dbginfo{{[/\\]}}llvm-symbolizer-test.c:10 +BINARY_C: _start +BINARY_C: {{g$}} diff --git a/tools/llvm-symbolizer/LLVMSymbolize.cpp b/tools/llvm-symbolizer/LLVMSymbolize.cpp index c522c0d3de6..71588e171fa 100644 --- a/tools/llvm-symbolizer/LLVMSymbolize.cpp +++ b/tools/llvm-symbolizer/LLVMSymbolize.cpp @@ -195,7 +195,7 @@ std::string LLVMSymbolizer::symbolizeData(const std::string &ModuleName, if (Opts.UseSymbolTable) { if (ModuleInfo *Info = getOrCreateModuleInfo(ModuleName)) { if (Info->symbolizeData(ModuleOffset, Name, Start, Size) && Opts.Demangle) - Name = DemangleGlobalName(Name); + Name = DemangleName(Name); } } std::stringstream ss; @@ -424,6 +424,10 @@ extern "C" char *__cxa_demangle(const char *mangled_name, char *output_buffer, std::string LLVMSymbolizer::DemangleName(const std::string &Name) { #if !defined(_MSC_VER) + // We can spoil names of symbols with C linkage, so use an heuristic + // approach to check if the name should be demangled. + if (Name.substr(0, 2) != "_Z") + return Name; int status = 0; char *DemangledName = __cxa_demangle(Name.c_str(), 0, 0, &status); if (status != 0) @@ -436,11 +440,5 @@ std::string LLVMSymbolizer::DemangleName(const std::string &Name) { #endif } -std::string LLVMSymbolizer::DemangleGlobalName(const std::string &Name) { - // We can spoil names of globals with C linkage, so use an heuristic - // approach to check if the name should be demangled. - return (Name.substr(0, 2) == "_Z") ? DemangleName(Name) : Name; -} - } // namespace symbolize } // namespace llvm diff --git a/tools/llvm-symbolizer/LLVMSymbolize.h b/tools/llvm-symbolizer/LLVMSymbolize.h index eb2666a542c..03c765cc9c3 100644 --- a/tools/llvm-symbolizer/LLVMSymbolize.h +++ b/tools/llvm-symbolizer/LLVMSymbolize.h @@ -71,7 +71,6 @@ private: ObjectFile *getObjectFileFromBinary(Binary *Bin, const std::string &ArchName); std::string printDILineInfo(DILineInfo LineInfo) const; - static std::string DemangleGlobalName(const std::string &Name); // Owns all the parsed binaries and object files. SmallVector ParsedBinariesAndObjects; -- 2.11.0