From ef93be84d33efa59667a1b58b75eac33b60d71b4 Mon Sep 17 00:00:00 2001 From: James Henderson Date: Wed, 3 Apr 2019 12:57:46 +0000 Subject: [PATCH] [llvm-nm]Add support for --no-demangle GNU nm has --no-demangle, so llvm-nm should too. It disables the --demangle switch. The patch also allows --demangle to be specified multiple times (the last of all --no-demangle/--demangle switches takes precedence). Reviewed by: grimar, rupprecht, mattd Differential Revision: https://reviews.llvm.org/D60134 llvm-svn: 357575 --- llvm/test/tools/llvm-nm/X86/demangle.ll | 7 +++++++ llvm/tools/llvm-nm/llvm-nm.cpp | 13 ++++++++++--- 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/llvm/test/tools/llvm-nm/X86/demangle.ll b/llvm/test/tools/llvm-nm/X86/demangle.ll index 283e604..b9f4b05 100644 --- a/llvm/test/tools/llvm-nm/X86/demangle.ll +++ b/llvm/test/tools/llvm-nm/X86/demangle.ll @@ -1,5 +1,6 @@ ; RUN: llc -filetype=obj -mtriple=x86_64-pc-linux -o %t.o %s ; RUN: llvm-nm %t.o | FileCheck --check-prefix="MANGLED" %s +; RUN: llvm-nm %t.o --no-demangle | FileCheck --check-prefix="MANGLED" %s ; RUN: llvm-nm -C %t.o | FileCheck --check-prefix="DEMANGLED" %s ; RUN: llvm-nm --demangle %t.o | FileCheck --check-prefix="DEMANGLED" %s @@ -11,6 +12,12 @@ ; RUN: llvm-nm %t.coff | FileCheck --check-prefix="COFF-MANGLED" %s ; RUN: llvm-nm -C %t.coff | FileCheck --check-prefix="COFF-DEMANGLED" %s +; Show that the last of --no-demangle/--demangle wins: +; RUN: llvm-nm --demangle --no-demangle %t.o | FileCheck --check-prefix="MANGLED" %s +; RUN: llvm-nm --no-demangle --demangle %t.o | FileCheck --check-prefix="DEMANGLED" %s +; RUN: llvm-nm --no-demangle --demangle --no-demangle %t.o | FileCheck --check-prefix="MANGLED" %s +; RUN: llvm-nm --demangle --no-demangle --demangle %t.o | FileCheck --check-prefix="DEMANGLED" %s + define i32 @_Z3fooi(i32) #0 { entry: ret i32 1 diff --git a/llvm/tools/llvm-nm/llvm-nm.cpp b/llvm/tools/llvm-nm/llvm-nm.cpp index 53f07d1..f28cc56 100644 --- a/llvm/tools/llvm-nm/llvm-nm.cpp +++ b/llvm/tools/llvm-nm/llvm-nm.cpp @@ -124,9 +124,12 @@ cl::opt NoSort("no-sort", cl::desc("Show symbols in order encountered")); cl::alias NoSortp("p", cl::desc("Alias for --no-sort"), cl::aliasopt(NoSort), cl::Grouping); -cl::opt Demangle("demangle", cl::desc("Demangle C++ symbol names")); -cl::alias DemangleC("C", cl::desc("Alias for --demangle"), cl::aliasopt(Demangle), - cl::Grouping); +cl::opt Demangle("demangle", cl::ZeroOrMore, + cl::desc("Demangle C++ symbol names")); +cl::alias DemangleC("C", cl::desc("Alias for --demangle"), + cl::aliasopt(Demangle), cl::Grouping); +cl::opt NoDemangle("no-demangle", cl::init(false), cl::ZeroOrMore, + cl::desc("Don't demangle symbol names")); cl::opt ReverseSort("reverse-sort", cl::desc("Sort in reverse order")); cl::alias ReverseSortr("r", cl::desc("Alias for --reverse-sort"), @@ -2106,6 +2109,10 @@ int main(int argc, char **argv) { if (InputFilenames.size() > 1) MultipleFiles = true; + // If both --demangle and --no-demangle are specified then pick the last one. + if (NoDemangle.getPosition() > Demangle.getPosition()) + Demangle = !NoDemangle; + for (unsigned i = 0; i < ArchFlags.size(); ++i) { if (ArchFlags[i] == "all") { ArchAll = true; -- 2.7.4