diff options
-rw-r--r-- | llvm/lib/XRay/InstrumentationMap.cpp | 8 | ||||
-rw-r--r-- | llvm/test/tools/llvm-xray/X86/Inputs/instr-map-mach.o | bin | 0 -> 3120 bytes | |||
-rw-r--r-- | llvm/test/tools/llvm-xray/X86/extract-instrmap-macho.ll | 9 |
3 files changed, 13 insertions, 4 deletions
diff --git a/llvm/lib/XRay/InstrumentationMap.cpp b/llvm/lib/XRay/InstrumentationMap.cpp index a7d6600b0d8..84317708d3f 100644 --- a/llvm/lib/XRay/InstrumentationMap.cpp +++ b/llvm/lib/XRay/InstrumentationMap.cpp @@ -47,18 +47,18 @@ Optional<uint64_t> InstrumentationMap::getFunctionAddr(int32_t FuncId) const { } static Error -loadELF64(StringRef Filename, object::OwningBinary<object::ObjectFile> &ObjFile, +loadObj(StringRef Filename, object::OwningBinary<object::ObjectFile> &ObjFile, InstrumentationMap::SledContainer &Sleds, InstrumentationMap::FunctionAddressMap &FunctionAddresses, InstrumentationMap::FunctionAddressReverseMap &FunctionIds) { InstrumentationMap Map; // Find the section named "xray_instr_map". - if (!ObjFile.getBinary()->isELF() || + if ((!ObjFile.getBinary()->isELF() && !ObjFile.getBinary()->isMachO()) || !(ObjFile.getBinary()->getArch() == Triple::x86_64 || ObjFile.getBinary()->getArch() == Triple::ppc64le)) return make_error<StringError>( - "File format not supported (only does ELF little endian 64-bit).", + "File format not supported (only does ELF and Mach-O little endian 64-bit).", std::make_error_code(std::errc::not_supported)); StringRef Contents = ""; @@ -191,7 +191,7 @@ llvm::xray::loadInstrumentationMap(StringRef Filename) { if (auto E = loadYAML(Fd, FileSize, Filename, Map.Sleds, Map.FunctionAddresses, Map.FunctionIds)) return std::move(E); - } else if (auto E = loadELF64(Filename, *ObjectFileOrError, Map.Sleds, + } else if (auto E = loadObj(Filename, *ObjectFileOrError, Map.Sleds, Map.FunctionAddresses, Map.FunctionIds)) { return std::move(E); } diff --git a/llvm/test/tools/llvm-xray/X86/Inputs/instr-map-mach.o b/llvm/test/tools/llvm-xray/X86/Inputs/instr-map-mach.o Binary files differnew file mode 100644 index 00000000000..44614fec321 --- /dev/null +++ b/llvm/test/tools/llvm-xray/X86/Inputs/instr-map-mach.o diff --git a/llvm/test/tools/llvm-xray/X86/extract-instrmap-macho.ll b/llvm/test/tools/llvm-xray/X86/extract-instrmap-macho.ll new file mode 100644 index 00000000000..a42307945f2 --- /dev/null +++ b/llvm/test/tools/llvm-xray/X86/extract-instrmap-macho.ll @@ -0,0 +1,9 @@ +; This test makes sure we can extract the instrumentation map from an +; XRay-instrumented object file. +; +; RUN: llvm-xray extract %S/Inputs/instr-map-mach.o -s | FileCheck %s + +; CHECK: --- +; CHECK-NEXT: - { id: 1, address: 0x0000000000000000, function: 0x0000000000000000, kind: function-enter, always-instrument: true, function-name: 'task(void*)' } +; CHECK-NEXT: - { id: 1, address: 0x0000000000000162, function: 0x0000000000000000, kind: function-exit, always-instrument: true, function-name: 'task(void*)' } +; CHECK-NEXT: ... |