Prepare for forthcoming LLVM 13 API change.
authorThomas Munro
Thu, 24 Jun 2021 21:55:26 +0000 (09:55 +1200)
committerThomas Munro
Thu, 24 Jun 2021 23:29:00 +0000 (11:29 +1200)
LLVM 13 (due out in September) has changed the semantics of
LLVMOrcAbsoluteSymbols(), so we need to bump some reference counts to
avoid a double-free that causes crashes and bad query results.

A proactive change seems necessary to avoid having a window of time
where our respective latest releases would interact badly.  It's
possible that the situation could change before then, though.

Thanks to Fabien Coelho for monitoring bleeding edge LLVM and Andres
Freund for tracking down the change.

Back-patch to 11, where the JIT code arrived.

Discussion: https://postgr.es/m/CA%2BhUKGLEy8mgtN7BNp0ooFAjUedDTJj5dME7NxLU-m91b85siA%40mail.gmail.com

src/backend/jit/llvm/llvmjit.c

index 2bc6d549d3cc8dd14a72b7df5ac54469481169b8..be2ca23dbb3ad8c10a805899bccc7c911c368bf9 100644 (file)
@@ -1085,6 +1085,9 @@ llvm_resolve_symbols(LLVMOrcDefinitionGeneratorRef GeneratorObj, void *Ctx,
    {
        const char *name = LLVMOrcSymbolStringPoolEntryStr(LookupSet[i].Name);
 
+#if LLVM_VERSION_MAJOR > 12
+       LLVMOrcRetainSymbolStringPoolEntry(LookupSet[i].Name);
+#endif
        symbols[i].Name = LookupSet[i].Name;
        symbols[i].Sym.Address = llvm_resolve_symbol(name, NULL);
        symbols[i].Sym.Flags.GenericFlags = LLVMJITSymbolGenericFlagsExported;