Apply google3 upstream fixes for latest LLVM

As LLVM Orc v2 API is in flux, changes are being made in google3. This
CL applies those changes, while also continuing to make our backend
work against LLVM 10.

Bug: b/171402030
Change-Id: If7be93bfe495e9d40a6e69415978a622ed3afb50
Reviewed-on: https://swiftshader-review.googlesource.com/c/SwiftShader/+/49608
Presubmit-Ready: Antonio Maiorano <amaiorano@google.com>
Reviewed-by: Nicolas Capens <nicolascapens@google.com>
Kokoro-Result: kokoro <noreply+kokoro@google.com>
Tested-by: Antonio Maiorano <amaiorano@google.com>
diff --git a/src/Reactor/LLVMJIT.cpp b/src/Reactor/LLVMJIT.cpp
index ba07d8f..707f668 100644
--- a/src/Reactor/LLVMJIT.cpp
+++ b/src/Reactor/LLVMJIT.cpp
@@ -252,7 +252,11 @@
 }
 #endif
 
+#if LLVM_VERSION_MAJOR >= 11 /* TODO(b/165000222): Unconditional after LLVM 11 upgrade */
+class ExternalSymbolGenerator : public llvm::orc::DefinitionGenerator
+#else
 class ExternalSymbolGenerator : public llvm::orc::JITDylib::DefinitionGenerator
+#endif
 {
 	struct Atomic
 	{
@@ -413,10 +417,14 @@
 		}
 	};
 
-	llvm::Error tryToGenerate(llvm::orc::LookupKind kind,
-	                          llvm::orc::JITDylib &dylib,
-	                          llvm::orc::JITDylibLookupFlags flags,
-	                          const llvm::orc::SymbolLookupSet &set) override
+	llvm::Error tryToGenerate(
+#if LLVM_VERSION_MAJOR >= 11 /* TODO(b/165000222): Unconditional after LLVM 11 upgrade */
+	    llvm::orc::LookupState &state,
+#endif
+	    llvm::orc::LookupKind kind,
+	    llvm::orc::JITDylib &dylib,
+	    llvm::orc::JITDylibLookupFlags flags,
+	    const llvm::orc::SymbolLookupSet &set) override
 	{
 		static Resolver resolver;
 
@@ -566,10 +574,11 @@
 
 	~JITRoutine()
 	{
-		// TODO(b/165000222): Unconditional after LLVM 11 upgrade
-#if LLVM_VERSION_MAJOR >= 11
-		// Avoid assert in ~RTDyldObjectLinkingLayer()
-		dylib.getDefaultResourceTracker()->remove();
+#if LLVM_VERSION_MAJOR >= 11 /* TODO(b/165000222): Unconditional after LLVM 11 upgrade */
+		if(auto err = session.endSession())
+		{
+			session.reportError(std::move(err));
+		}
 #endif
 	}