From 8ef57f3e3f1b241e5b544a167ac64b35f7275759 Mon Sep 17 00:00:00 2001 From: Max Sherman Date: Thu, 16 Jan 2020 16:28:15 -0800 Subject: [PATCH] [xray] add --no-demangle cli opt for llvm-xray extract to output mangled names This adds an additional cli flag for the llvm-xray extract tool. This is useful if you're more interested in consuming the mangled symbol name, instead of the default now which is demangled. Differential Revision: https://reviews.llvm.org/D72804 --- .../AArch64/extract-instrmap-aarch64-mangled.test | 14 ++++++++++++++ llvm/tools/llvm-xray/xray-extract.cpp | 10 +++++++++- 2 files changed, 23 insertions(+), 1 deletion(-) create mode 100644 llvm/test/tools/llvm-xray/AArch64/extract-instrmap-aarch64-mangled.test diff --git a/llvm/test/tools/llvm-xray/AArch64/extract-instrmap-aarch64-mangled.test b/llvm/test/tools/llvm-xray/AArch64/extract-instrmap-aarch64-mangled.test new file mode 100644 index 0000000..5c87551 --- /dev/null +++ b/llvm/test/tools/llvm-xray/AArch64/extract-instrmap-aarch64-mangled.test @@ -0,0 +1,14 @@ +This test makes sure we can extract the instrumentation map from an +XRay-instrumented PIE file. + +RUN: yaml2obj %S/Inputs/elf64-pic.yaml -o %t.so +RUN: llvm-xray extract -s --no-demangle %t.so | FileCheck %s + +CHECK: --- +CHECK-NEXT: - { id: 1, address: 0x0000000000000420, function: 0x0000000000000420, kind: function-enter, always-instrument: true, function-name: _Z3foov } +CHECK-NEXT: - { id: 1, address: 0x0000000000000440, function: 0x0000000000000420, kind: function-exit, always-instrument: true, function-name: _Z3foov } +CHECK-NEXT: - { id: 2, address: 0x0000000000000464, function: 0x0000000000000464, kind: function-enter, always-instrument: true, function-name: _Z3barv } +CHECK-NEXT: - { id: 2, address: 0x0000000000000484, function: 0x0000000000000464, kind: function-exit, always-instrument: true, function-name: _Z3barv } +CHECK-NEXT: - { id: 3, address: 0x00000000000004A8, function: 0x00000000000004A8, kind: function-enter, always-instrument: true, function-name: _Z3jarv } +CHECK-NEXT: - { id: 3, address: 0x00000000000004C8, function: 0x00000000000004A8, kind: function-exit, always-instrument: true, function-name: _Z3jarv } +CHECK-NEXT: ... diff --git a/llvm/tools/llvm-xray/xray-extract.cpp b/llvm/tools/llvm-xray/xray-extract.cpp index af9255a..6ea0f59 100644 --- a/llvm/tools/llvm-xray/xray-extract.cpp +++ b/llvm/tools/llvm-xray/xray-extract.cpp @@ -45,6 +45,11 @@ static cl::opt ExtractSymbolize("symbolize", cl::value_desc("symbolize"), cl::sub(Extract)); static cl::alias ExtractSymbolize2("s", cl::aliasopt(ExtractSymbolize), cl::desc("alias for -symbolize")); +static cl::opt ExtractNoDemangle("no-demangle", + cl::value_desc("no-demangle"), + cl::init(false), + cl::desc("don't demangle symbols"), + cl::sub(Extract)); namespace { @@ -84,7 +89,10 @@ static CommandRegistration Unused(&Extract, []() -> Error { Twine("Cannot open file '") + ExtractOutput + "' for writing.", EC); const auto &FunctionAddresses = InstrumentationMapOrError->getFunctionAddresses(); - symbolize::LLVMSymbolizer Symbolizer; + symbolize::LLVMSymbolizer::Options opts; + if (ExtractNoDemangle) + opts.Demangle = false; + symbolize::LLVMSymbolizer Symbolizer(opts); llvm::xray::FuncIdConversionHelper FuncIdHelper(ExtractInput, Symbolizer, FunctionAddresses); exportAsYAML(*InstrumentationMapOrError, OS, FuncIdHelper); -- 2.7.4