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

bd8a9c
From f562f8fae4bdb8ac51fc815b725bfaada2371b31 Mon Sep 17 00:00:00 2001
a2da7c
From: Khem Raj <raj.khem@gmail.com>
a2da7c
Date: Sat, 4 Sep 2021 17:28:17 -0700
bd8a9c
Subject: [PATCH 3/6] orc: Fix build with clang >= 13
a2da7c
a2da7c
Fixes errors like
a2da7c
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
a2da7c
BpfOrc::BpfOrc(TargetMachine *TM, DataLayout DL)
a2da7c
        ^
a2da7c
a2da7c
Fixes https://github.com/iovisor/bpftrace/issues/1963
a2da7c
a2da7c
Signed-off-by: Khem Raj <raj.khem@gmail.com>
a2da7c
---
a2da7c
 src/bpforc.h     | 23 ++++++++++++++++++++++-
a2da7c
 src/bpforcv2.cpp | 23 +++++++++++++++--------
a2da7c
 2 files changed, 37 insertions(+), 9 deletions(-)
a2da7c
a2da7c
diff --git a/src/bpforc.h b/src/bpforc.h
bd8a9c
index c333a651..cc6a1c97 100644
a2da7c
--- a/src/bpforc.h
a2da7c
+++ b/src/bpforc.h
a2da7c
@@ -20,6 +20,9 @@
a2da7c
 #ifdef LLVM_ORC_V2
a2da7c
 #include <llvm/ExecutionEngine/Orc/Core.h>
a2da7c
 #include <llvm/ExecutionEngine/Orc/JITTargetMachineBuilder.h>
a2da7c
+#if LLVM_VERSION_MAJOR >= 13
a2da7c
+#include <llvm/ExecutionEngine/Orc/ExecutorProcessControl.h>
a2da7c
+#endif
a2da7c
 #endif
a2da7c
 
a2da7c
 #include <optional>
bd8a9c
@@ -71,8 +74,12 @@ class BpfOrc
a2da7c
   std::unique_ptr<TargetMachine> TM;
a2da7c
   DataLayout DL;
a2da7c
 #if LLVM_VERSION_MAJOR >= 7
a2da7c
+#ifdef LLVM_ORC_V2
a2da7c
+  std::unique_ptr<ExecutionSession> ES;
a2da7c
+#else // LLVM_ORC_V1
a2da7c
   ExecutionSession ES;
a2da7c
 #endif
a2da7c
+#endif
a2da7c
 #if LLVM_VERSION_MAJOR >= 7 && LLVM_VERSION_MAJOR < 12
a2da7c
   std::shared_ptr<SymbolResolver> Resolver;
a2da7c
 #endif
bd8a9c
@@ -97,7 +104,21 @@ class BpfOrc
a2da7c
 #endif
a2da7c
 
a2da7c
 public:
a2da7c
+#if LLVM_VERSION_MAJOR >= 13
a2da7c
+  ~BpfOrc()
a2da7c
+  {
a2da7c
+    if (auto Err = ES->endSession())
a2da7c
+      ES->reportError(std::move(Err));
a2da7c
+  }
a2da7c
+#endif
a2da7c
+#ifdef LLVM_ORC_V2
a2da7c
+  BpfOrc(TargetMachine *TM,
a2da7c
+         DataLayout DL,
a2da7c
+         std::unique_ptr<ExecutionSession> ES);
a2da7c
+#else
a2da7c
   BpfOrc(TargetMachine *TM, DataLayout DL);
a2da7c
+#endif
a2da7c
+
a2da7c
   void compile(std::unique_ptr<Module> M);
a2da7c
 
a2da7c
   /* Helper for creating a orc object, responsible for creating internal objects
bd8a9c
@@ -130,7 +151,7 @@ class BpfOrc
a2da7c
 #ifdef LLVM_ORC_V2
a2da7c
   Expected<JITEvaluatedSymbol> lookup(StringRef Name)
a2da7c
   {
a2da7c
-    return ES.lookup({ &MainJD }, Mangle(Name.str()));
a2da7c
+    return ES->lookup({ &MainJD }, Mangle(Name.str()));
a2da7c
   }
a2da7c
 #endif
a2da7c
 };
a2da7c
diff --git a/src/bpforcv2.cpp b/src/bpforcv2.cpp
bd8a9c
index 9876625b..3e6684e4 100644
a2da7c
--- a/src/bpforcv2.cpp
a2da7c
+++ b/src/bpforcv2.cpp
bd8a9c
@@ -1,21 +1,23 @@
a2da7c
 // Included by bpforc.cpp
a2da7c
 
a2da7c
-BpfOrc::BpfOrc(TargetMachine *TM, DataLayout DL)
a2da7c
+BpfOrc::BpfOrc(TargetMachine *TM,
a2da7c
+               DataLayout DL,
a2da7c
+               std::unique_ptr<ExecutionSession> ES)
a2da7c
     : TM(std::move(TM)),
a2da7c
       DL(std::move(DL)),
a2da7c
-      ObjectLayer(ES,
a2da7c
+      ES(std::move(ES)),
a2da7c
+      ObjectLayer(*(this->ES),
a2da7c
                   [this]() {
a2da7c
                     return std::make_unique<MemoryManager>(sections_);
a2da7c
                   }),
a2da7c
-      CompileLayer(ES,
a2da7c
+      CompileLayer(*this->ES,
a2da7c
                    ObjectLayer,
a2da7c
                    std::make_unique<SimpleCompiler>(*this->TM)),
a2da7c
-      Mangle(ES, this->DL),
a2da7c
+      Mangle(*this->ES, this->DL),
a2da7c
       CTX(std::make_unique<LLVMContext>()),
a2da7c
-      MainJD(cantFail(ES.createJITDylib("<main>")))
a2da7c
+      MainJD(cantFail(this->ES->createJITDylib("<main>")))
a2da7c
 {
a2da7c
 }
a2da7c
-
a2da7c
 LLVMContext &BpfOrc::getContext()
a2da7c
 {
a2da7c
   return *CTX.getContext();
bd8a9c
@@ -34,8 +36,13 @@ std::unique_ptr<BpfOrc> BpfOrc::Create()
a2da7c
   // return unique_ptrs
a2da7c
   auto DL = cantFail(JTMB.getDefaultDataLayoutForTarget());
a2da7c
   auto TM = cantFail(JTMB.createTargetMachine());
a2da7c
-
a2da7c
-  return std::make_unique<BpfOrc>(TM.release(), std::move(DL));
a2da7c
+#if LLVM_VERSION_MAJOR >= 13
a2da7c
+  auto EPC = SelfExecutorProcessControl::Create();
a2da7c
+  auto ES = std::make_unique<ExecutionSession>(std::move(*EPC));
a2da7c
+#else
a2da7c
+  auto ES = std::make_unique<ExecutionSession>();
a2da7c
+#endif
a2da7c
+  return std::make_unique<BpfOrc>(TM.release(), std::move(DL), std::move(ES));
a2da7c
 }
a2da7c
 
a2da7c
 void BpfOrc::compile(std::unique_ptr<Module> M)
a2da7c
-- 
bd8a9c
2.35.3
a2da7c