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 --- /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 --- a/llvm/tools/llvm-xray/xray-extract.cpp +++ b/llvm/tools/llvm-xray/xray-extract.cpp @@ -45,6 +45,11 @@ 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 @@ 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);