aboutsummaryrefslogtreecommitdiff
path: root/llvm/tools/llvm-jitlink/llvm-jitlink.cpp
diff options
context:
space:
mode:
authorPrem Chintalapudi <prem.chintalapudi@gmail.com>2023-09-18 00:10:38 +0000
committerLang Hames <lhames@gmail.com>2023-09-18 04:10:29 +0000
commit88e3358f331d727e7bbcddb2821ef89d25d1ab7a (patch)
tree7892510152b01e64d904466fe7a86188615a2b58 /llvm/tools/llvm-jitlink/llvm-jitlink.cpp
parentcedf2ea7b50fd23a4f68f2276ebd9322e100e1f6 (diff)
downloadllvm-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.cpp23
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 =