LLVMJIT: Fix memory leak

We were calling `new MemoryMapper` and passing it into the `llvm::SectionMemoryManager`, but the `SectionMemoryManager` does not take ownership, resulting in a leak.

Given that the `MemoryMapper` is entirely stateless, just use a pointer to a single static instance.

Bug: b/171402030
Change-Id: Ic3a118a5f4aeea6b6b60861399993e81827c9d48
Reviewed-on: https://swiftshader-review.googlesource.com/c/SwiftShader/+/49488
Reviewed-by: Antonio Maiorano <amaiorano@google.com>
Reviewed-by: Nicolas Capens <nicolascapens@google.com>
Kokoro-Result: kokoro <noreply+kokoro@google.com>
Tested-by: Ben Clayton <bclayton@google.com>
diff --git a/src/Reactor/LLVMJIT.cpp b/src/Reactor/LLVMJIT.cpp
index 5aa28a0..67cbbda 100644
--- a/src/Reactor/LLVMJIT.cpp
+++ b/src/Reactor/LLVMJIT.cpp
@@ -484,9 +484,6 @@
 // settings and no Reactor routine directly links against another.
 class JITRoutine : public rr::Routine
 {
-	using ObjLayer = llvm::orc::RTDyldObjectLinkingLayer;
-	using CompileLayer = llvm::orc::IRCompileLayer;
-
 	llvm::orc::RTDyldObjectLinkingLayer objectLayer;
 	llvm::orc::IRCompileLayer compileLayer;
 	llvm::orc::MangleAndInterner mangle;
@@ -501,7 +498,10 @@
 	    llvm::Function **funcs,
 	    size_t count,
 	    const rr::Config &config)
-	    : objectLayer(session, []() { return std::make_unique<llvm::SectionMemoryManager>(new MemoryMapper()); })
+	    : objectLayer(session, []() {
+		    static MemoryMapper mm;
+		    return std::make_unique<llvm::SectionMemoryManager>(&mm);
+	    })
 	    , compileLayer(session, objectLayer, std::make_unique<llvm::orc::ConcurrentIRCompiler>(JITGlobals::get()->getTargetMachineBuilder(config.getOptimization().getLevel())))
 	    , mangle(session, JITGlobals::get()->getDataLayout())
 	    , ctx(std::make_unique<llvm::LLVMContext>())