diff --git a/src/Reactor/LLVMReactorDebugInfo.cpp b/src/Reactor/LLVMReactorDebugInfo.cpp
index 2a5e157..04c12e5 100644
--- a/src/Reactor/LLVMReactorDebugInfo.cpp
+++ b/src/Reactor/LLVMReactorDebugInfo.cpp
@@ -97,17 +97,15 @@
 
 	auto file = getOrCreateFile(location.function.file.c_str());
 	auto sp = diBuilder->createFunction(
-	    file,                    // scope
-	    "ReactorFunction",       // function name
-	    "ReactorFunction",       // linkage
-	    file,                    // file
-	    location.line,           // line
-	    funcTy,                  // type
-	    false,                   // internal linkage
-	    true,                    // definition
-	    location.line,           // scope line
-	    DINode::FlagPrototyped,  // flags
-	    false                    // is optimized
+	    file,                           // scope
+	    "ReactorFunction",              // function name
+	    "ReactorFunction",              // linkage
+	    file,                           // file
+	    location.line,                  // line
+	    funcTy,                         // type
+	    location.line,                  // scope line
+	    DINode::FlagPrototyped,         // flags
+	    DISubprogram::SPFlagDefinition  // subprogram flags
 	);
 	diSubprogram = sp;
 	function->setSubprogram(sp);
@@ -142,6 +140,8 @@
 
 void DebugInfo::syncScope(Backtrace const &backtrace)
 {
+	using namespace ::llvm;
+
 	auto shrink = [this](size_t newsize) {
 		while(diScope.size() > newsize)
 		{
@@ -204,17 +204,15 @@
 		auto name = "jit!" + (status == 0 ? std::string(buf) : location.function.name);
 
 		auto func = diBuilder->createFunction(
-		    file,                          // scope
-		    name,                          // function name
-		    "",                            // linkage
-		    file,                          // file
-		    location.line,                 // line
-		    funcTy,                        // type
-		    false,                         // internal linkage
-		    true,                          // definition
-		    location.line,                 // scope line
-		    llvm::DINode::FlagPrototyped,  // flags
-		    false                          // is optimized
+		    file,                           // scope
+		    name,                           // function name
+		    "",                             // linkage
+		    file,                           // file
+		    location.line,                  // line
+		    funcTy,                         // type
+		    location.line,                  // scope line
+		    DINode::FlagPrototyped,         // flags
+		    DISubprogram::SPFlagDefinition  // subprogram flags
 		);
 		diScope.push_back({ location, func });
 		LOG("+ STACK(%d): di: %p, location: %s:%d", int(i), di,
@@ -381,13 +379,15 @@
 void DebugInfo::NotifyObjectEmitted(const llvm::object::ObjectFile &Obj, const llvm::LoadedObjectInfo &L)
 {
 	std::unique_lock<std::mutex> lock(jitEventListenerMutex);
-	jitEventListener->NotifyObjectEmitted(Obj, static_cast<const llvm::RuntimeDyld::LoadedObjectInfo &>(L));
+	auto key = reinterpret_cast<llvm::JITEventListener::ObjectKey>(&Obj);
+	jitEventListener->notifyObjectLoaded(key, Obj, static_cast<const llvm::RuntimeDyld::LoadedObjectInfo &>(L));
 }
 
 void DebugInfo::NotifyFreeingObject(const llvm::object::ObjectFile &Obj)
 {
 	std::unique_lock<std::mutex> lock(jitEventListenerMutex);
-	jitEventListener->NotifyFreeingObject(Obj);
+	auto key = reinterpret_cast<llvm::JITEventListener::ObjectKey>(&Obj);
+	jitEventListener->notifyFreeingObject(key);
 }
 
 void DebugInfo::registerBasicTypes()
diff --git a/tests/kokoro/gcp_ubuntu/continuous.sh b/tests/kokoro/gcp_ubuntu/continuous.sh
index 481ec8e..055fcfc 100755
--- a/tests/kokoro/gcp_ubuntu/continuous.sh
+++ b/tests/kokoro/gcp_ubuntu/continuous.sh
@@ -53,16 +53,14 @@
 cd ..
 build/ReactorUnitTests --gtest_filter=ReactorUnitTests.Print*
 
-if [ "${LLVM_VERSION}" -ne "10.0" ]; then
-  # Incrementally build with REACTOR_EMIT_DEBUG_INFO to ensure it builds
-  cd build
-  cmake .. "-DREACTOR_EMIT_DEBUG_INFO=1"
-  cmake --build . --target ReactorUnitTests -- -j $(nproc)
-  cd ..
+# Incrementally build with REACTOR_EMIT_DEBUG_INFO to ensure it builds
+cd build
+cmake .. "-DREACTOR_EMIT_DEBUG_INFO=1"
+cmake --build . --target ReactorUnitTests -- -j $(nproc)
+cd ..
 
-  # Incrementally build with REACTOR_EMIT_PRINT_LOCATION to ensure it builds
-  cd build
-  cmake .. "-DREACTOR_EMIT_PRINT_LOCATION=1"
-  cmake --build . --target ReactorUnitTests -- -j $(nproc)
-  cd ..
-fi
+# Incrementally build with REACTOR_EMIT_PRINT_LOCATION to ensure it builds
+cd build
+cmake .. "-DREACTOR_EMIT_PRINT_LOCATION=1"
+cmake --build . --target ReactorUnitTests -- -j $(nproc)
+cd ..
diff --git a/tests/kokoro/gcp_windows/continuous.bat b/tests/kokoro/gcp_windows/continuous.bat
index 8603840..930dae8 100644
--- a/tests/kokoro/gcp_windows/continuous.bat
+++ b/tests/kokoro/gcp_windows/continuous.bat
@@ -43,17 +43,15 @@
 cd %SRC% || goto :error
 build\Debug\ReactorUnitTests.exe --gtest_filter=ReactorUnitTests.Print* || goto :error
 
-IF NOT "%LLVM_VERSION%"=="10.0" (
-  REM Incrementally build with REACTOR_EMIT_DEBUG_INFO to ensure it builds
-  cd %SRC%\build || goto :error
-  cmake "-DREACTOR_EMIT_DEBUG_INFO=1" .. || goto :error
-  cmake --build . --target ReactorUnitTests || goto :error
+REM Incrementally build with REACTOR_EMIT_DEBUG_INFO to ensure it builds
+cd %SRC%\build || goto :error
+cmake "-DREACTOR_EMIT_DEBUG_INFO=1" .. || goto :error
+cmake --build . --target ReactorUnitTests || goto :error
 
-  REM Incrementally build with REACTOR_EMIT_PRINT_LOCATION to ensure it builds
-  cd %SRC%\build || goto :error
-  cmake "-REACTOR_EMIT_PRINT_LOCATION=1" .. || goto :error
-  cmake --build . --target ReactorUnitTests || goto :error
-)
+REM Incrementally build with REACTOR_EMIT_PRINT_LOCATION to ensure it builds
+cd %SRC%\build || goto :error
+cmake "-REACTOR_EMIT_PRINT_LOCATION=1" .. || goto :error
+cmake --build . --target ReactorUnitTests || goto :error
 
 exit /b 0
 
diff --git a/third_party/llvm-10.0/CMakeLists.txt b/third_party/llvm-10.0/CMakeLists.txt
index b1424ef..c5e1a86 100644
--- a/third_party/llvm-10.0/CMakeLists.txt
+++ b/third_party/llvm-10.0/CMakeLists.txt
@@ -384,6 +384,7 @@
     ${LLVM_DIR}/lib/DebugInfo/DWARF/DWARFVerifier.cpp
     ${LLVM_DIR}/lib/Demangle/ItaniumDemangle.cpp
     ${LLVM_DIR}/lib/ExecutionEngine/ExecutionEngine.cpp
+    ${LLVM_DIR}/lib/ExecutionEngine/GDBRegistrationListener.cpp
     ${LLVM_DIR}/lib/ExecutionEngine/Orc/CompileUtils.cpp
     ${LLVM_DIR}/lib/ExecutionEngine/Orc/Core.cpp
     ${LLVM_DIR}/lib/ExecutionEngine/Orc/IRCompileLayer.cpp
