diff options
author | Prem Chintalapudi <prem.chintalapudi@gmail.com> | 2023-09-18 00:10:38 +0000 |
---|---|---|
committer | Lang Hames <lhames@gmail.com> | 2023-09-18 04:10:29 +0000 |
commit | 88e3358f331d727e7bbcddb2821ef89d25d1ab7a (patch) | |
tree | 7892510152b01e64d904466fe7a86188615a2b58 /llvm/tools/llvm-jitlink/llvm-jitlink.cpp | |
parent | cedf2ea7b50fd23a4f68f2276ebd9322e100e1f6 (diff) | |
download | llvm-88e3358f331d727e7bbcddb2821ef89d25d1ab7a.zip llvm-88e3358f331d727e7bbcddb2821ef89d25d1ab7a.tar.gz llvm-88e3358f331d727e7bbcddb2821ef89d25d1ab7a.tar.bz2 |
[ORC][JITLink] Non-debuginfo JITLink perf jitdump support.
This patch ports PerfJITEventListener to a JITLink plugin, but adds unwind
record support and drops debuginfo support temporarily. Debuginfo can be
enabled in the future by providing a way to obtain a DWARFContext from a
LinkGraph.
Reviewed By: lhames
Differential Revision: https://reviews.llvm.org/D146169
Diffstat (limited to 'llvm/tools/llvm-jitlink/llvm-jitlink.cpp')
-rw-r--r-- | llvm/tools/llvm-jitlink/llvm-jitlink.cpp | 23 |
1 files changed, 19 insertions, 4 deletions
diff --git a/llvm/tools/llvm-jitlink/llvm-jitlink.cpp b/llvm/tools/llvm-jitlink/llvm-jitlink.cpp index 64806b5..42ef651 100644 --- a/llvm/tools/llvm-jitlink/llvm-jitlink.cpp +++ b/llvm/tools/llvm-jitlink/llvm-jitlink.cpp @@ -28,8 +28,10 @@ #include "llvm/ExecutionEngine/Orc/MachOPlatform.h" #include "llvm/ExecutionEngine/Orc/MapperJITLinkMemoryManager.h" #include "llvm/ExecutionEngine/Orc/ObjectFileInterface.h" +#include "llvm/ExecutionEngine/Orc/PerfSupportPlugin.h" #include "llvm/ExecutionEngine/Orc/Shared/OrcRTBridge.h" #include "llvm/ExecutionEngine/Orc/TargetProcess/JITLoaderGDB.h" +#include "llvm/ExecutionEngine/Orc/TargetProcess/JITLoaderPerf.h" #include "llvm/ExecutionEngine/Orc/TargetProcess/RegisterEHFrames.h" #include "llvm/MC/MCAsmInfo.h" #include "llvm/MC/MCContext.h" @@ -140,6 +142,11 @@ static cl::opt<bool> cl::desc("Enable debugger suppport (default = !-noexec)"), cl::init(true), cl::Hidden, cl::cat(JITLinkCategory)); +static cl::opt<bool> PerfSupport("perf-support", + cl::desc("Enable perf profiling support"), + cl::init(false), cl::Hidden, + cl::cat(JITLinkCategory)); + static cl::opt<bool> NoProcessSymbols("no-process-syms", cl::desc("Do not resolve to llvm-jitlink process symbols"), @@ -243,10 +250,14 @@ static cl::opt<bool> UseSharedMemory( static ExitOnError ExitOnErr; static LLVM_ATTRIBUTE_USED void linkComponents() { - errs() << (void *)&llvm_orc_registerEHFrameSectionWrapper - << (void *)&llvm_orc_deregisterEHFrameSectionWrapper - << (void *)&llvm_orc_registerJITLoaderGDBWrapper - << (void *)&llvm_orc_registerJITLoaderGDBAllocAction; + errs() << "Linking in runtime functions\n" + << (void *)&llvm_orc_registerEHFrameSectionWrapper << '\n' + << (void *)&llvm_orc_deregisterEHFrameSectionWrapper << '\n' + << (void *)&llvm_orc_registerJITLoaderGDBWrapper << '\n' + << (void *)&llvm_orc_registerJITLoaderGDBAllocAction << '\n' + << (void *)&llvm_orc_registerJITLoaderPerfStart << '\n' + << (void *)&llvm_orc_registerJITLoaderPerfEnd << '\n' + << (void *)&llvm_orc_registerJITLoaderPerfImpl << '\n'; } static bool UseTestResultOverride = false; @@ -979,6 +990,10 @@ Session::Session(std::unique_ptr<ExecutorProcessControl> EPC, Error &Err) ObjLayer.addPlugin(ExitOnErr( GDBJITDebugInfoRegistrationPlugin::Create(this->ES, *MainJD, TT))); + if (PerfSupport && TT.isOSBinFormatELF()) + ObjLayer.addPlugin(ExitOnErr(PerfSupportPlugin::Create( + this->ES.getExecutorProcessControl(), *MainJD, true))); + // Set up the platform. if (TT.isOSBinFormatMachO() && !OrcRuntime.empty()) { if (auto P = |