aboutsummaryrefslogtreecommitdiff
path: root/src/include/jit/llvmjit_backport.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/include/jit/llvmjit_backport.h')
-rw-r--r--src/include/jit/llvmjit_backport.h25
1 files changed, 25 insertions, 0 deletions
diff --git a/src/include/jit/llvmjit_backport.h b/src/include/jit/llvmjit_backport.h
new file mode 100644
index 00000000000..92874f7998c
--- /dev/null
+++ b/src/include/jit/llvmjit_backport.h
@@ -0,0 +1,25 @@
+/*
+ * A small header than can be included by backported LLVM code or PostgreSQL
+ * code, to control conditional compilation.
+ */
+#ifndef LLVMJIT_BACKPORT_H
+#define LLVMJIT_BACKPORT_H
+
+#include <llvm/Config/llvm-config.h>
+
+/*
+ * LLVM's RuntimeDyld can produce code that crashes on larger memory ARM
+ * systems, because llvm::SectionMemoryManager allocates multiple pieces of
+ * memory that can be placed too far apart for the generated code. See
+ * src/backend/jit/llvm/SectionMemoryManager.cpp for the patched replacement
+ * class llvm::backport::SectionMemoryManager that we use as a workaround.
+ * This header controls whether we use it.
+ *
+ * We have adjusted it to compile against a range of LLVM versions, but not
+ * further back than 12 for now.
+ */
+#if defined(__aarch64__) && LLVM_VERSION_MAJOR > 11
+#define USE_LLVM_BACKPORT_SECTION_MEMORY_MANAGER
+#endif
+
+#endif