Blame SOURCES/bpftrace-0.12.1-orc-Fix-build-with-clang-13.patch

d176e3
From 3bde9d98aa48b9c7eba9fe559dee6c66d8b57634 Mon Sep 17 00:00:00 2001
d176e3
From: Khem Raj <raj.khem@gmail.com>
d176e3
Date: Sat, 4 Sep 2021 17:28:17 -0700
d176e3
Subject: [PATCH] orc: Fix build with clang >= 13
d176e3
d176e3
Fixes errors like
d176e3
src/ast/bpforc/bpforcv2.cpp:3:9: error: constructor for 'bpftrace::BpfOrc' must explicitly initialize the member 'ES' which does not have a default constructor
d176e3
BpfOrc::BpfOrc(TargetMachine *TM, DataLayout DL)
d176e3
        ^
d176e3
d176e3
Fixes https://github.com/iovisor/bpftrace/issues/1963
d176e3
d176e3
Signed-off-by: Khem Raj <raj.khem@gmail.com>
d176e3
---
d176e3
 src/bpforc.h     | 23 ++++++++++++++++++++++-
d176e3
 src/bpforcv2.cpp | 23 +++++++++++++++--------
d176e3
 2 files changed, 37 insertions(+), 9 deletions(-)
d176e3
d176e3
diff --git a/src/bpforc.h b/src/bpforc.h
d176e3
index 5634c544..1900e497 100644
d176e3
--- a/src/bpforc.h
d176e3
+++ b/src/bpforc.h
d176e3
@@ -20,6 +20,9 @@
d176e3
 #ifdef LLVM_ORC_V2
d176e3
 #include <llvm/ExecutionEngine/Orc/Core.h>
d176e3
 #include <llvm/ExecutionEngine/Orc/JITTargetMachineBuilder.h>
d176e3
+#if LLVM_VERSION_MAJOR >= 13
d176e3
+#include <llvm/ExecutionEngine/Orc/ExecutorProcessControl.h>
d176e3
+#endif
d176e3
 #endif
d176e3
 
d176e3
 #include <optional>
d176e3
@@ -66,8 +69,12 @@ class BpfOrc
d176e3
   std::unique_ptr<TargetMachine> TM;
d176e3
   DataLayout DL;
d176e3
 #if LLVM_VERSION_MAJOR >= 7
d176e3
+#ifdef LLVM_ORC_V2
d176e3
+  std::unique_ptr<ExecutionSession> ES;
d176e3
+#else // LLVM_ORC_V1
d176e3
   ExecutionSession ES;
d176e3
 #endif
d176e3
+#endif
d176e3
 #if LLVM_VERSION_MAJOR >= 7 && LLVM_VERSION_MAJOR < 12
d176e3
   std::shared_ptr<SymbolResolver> Resolver;
d176e3
 #endif
d176e3
@@ -92,7 +99,21 @@ class BpfOrc
d176e3
 #endif
d176e3
 
d176e3
 public:
d176e3
+#if LLVM_VERSION_MAJOR >= 13
d176e3
+  ~BpfOrc()
d176e3
+  {
d176e3
+    if (auto Err = ES->endSession())
d176e3
+      ES->reportError(std::move(Err));
d176e3
+  }
d176e3
+#endif
d176e3
+#ifdef LLVM_ORC_V2
d176e3
+  BpfOrc(TargetMachine *TM,
d176e3
+         DataLayout DL,
d176e3
+         std::unique_ptr<ExecutionSession> ES);
d176e3
+#else
d176e3
   BpfOrc(TargetMachine *TM, DataLayout DL);
d176e3
+#endif
d176e3
+
d176e3
   void compile(std::unique_ptr<Module> M);
d176e3
 
d176e3
   /* Helper for creating a orc object, responsible for creating internal objects
d176e3
@@ -125,7 +146,7 @@ class BpfOrc
d176e3
 #ifdef LLVM_ORC_V2
d176e3
   Expected<JITEvaluatedSymbol> lookup(StringRef Name)
d176e3
   {
d176e3
-    return ES.lookup({ &MainJD }, Mangle(Name.str()));
d176e3
+    return ES->lookup({ &MainJD }, Mangle(Name.str()));
d176e3
   }
d176e3
 #endif
d176e3
 };
d176e3
diff --git a/src/bpforcv2.cpp b/src/bpforcv2.cpp
d176e3
index 209e08e5..104213b0 100644
d176e3
--- a/src/bpforcv2.cpp
d176e3
+++ b/src/bpforcv2.cpp
d176e3
@@ -1,24 +1,26 @@
d176e3
 // Included by bpforc.cpp
d176e3
 
d176e3
-BpfOrc::BpfOrc(TargetMachine *TM, DataLayout DL)
d176e3
+BpfOrc::BpfOrc(TargetMachine *TM,
d176e3
+               DataLayout DL,
d176e3
+               std::unique_ptr<ExecutionSession> ES)
d176e3
     : TM(std::move(TM)),
d176e3
       DL(std::move(DL)),
d176e3
-      ObjectLayer(ES,
d176e3
+      ES(std::move(ES)),
d176e3
+      ObjectLayer(*(this->ES),
d176e3
                   [this]() {
d176e3
                     return std::make_unique<MemoryManager>(sections_);
d176e3
                   }),
d176e3
-      CompileLayer(ES,
d176e3
+      CompileLayer(*this->ES,
d176e3
                    ObjectLayer,
d176e3
                    std::make_unique<SimpleCompiler>(*this->TM)),
d176e3
-      Mangle(ES, this->DL),
d176e3
+      Mangle(*this->ES, this->DL),
d176e3
       CTX(std::make_unique<LLVMContext>()),
d176e3
-      MainJD(cantFail(ES.createJITDylib("<main>")))
d176e3
+      MainJD(cantFail(this->ES->createJITDylib("<main>")))
d176e3
 {
d176e3
   MainJD.addGenerator(
d176e3
       cantFail(DynamicLibrarySearchGenerator::GetForCurrentProcess(
d176e3
           DL.getGlobalPrefix())));
d176e3
 }
d176e3
-
d176e3
 LLVMContext &BpfOrc::getContext()
d176e3
 {
d176e3
   return *CTX.getContext();
d176e3
@@ -37,8 +39,13 @@ std::unique_ptr<BpfOrc> BpfOrc::Create()
d176e3
   // return unique_ptrs
d176e3
   auto DL = cantFail(JTMB.getDefaultDataLayoutForTarget());
d176e3
   auto TM = cantFail(JTMB.createTargetMachine());
d176e3
-
d176e3
-  return std::make_unique<BpfOrc>(TM.release(), std::move(DL));
d176e3
+#if LLVM_VERSION_MAJOR >= 13
d176e3
+  auto EPC = SelfExecutorProcessControl::Create();
d176e3
+  auto ES = std::make_unique<ExecutionSession>(std::move(*EPC));
d176e3
+#else
d176e3
+  auto ES = std::make_unique<ExecutionSession>();
d176e3
+#endif
d176e3
+  return std::make_unique<BpfOrc>(TM.release(), std::move(DL), std::move(ES));
d176e3
 }
d176e3
 
d176e3
 void BpfOrc::compile(std::unique_ptr<Module> M)
d176e3
-- 
d176e3
2.31.1
d176e3