postgres.git / summary / log / commit / refs

commit    6ada4fd06666cf778dacec0fb98d569760ffd70a
Author:   Thomas Munro <tmunro@postgresql.org>
Date:     Thu Jun 24 21:55:26 2021 +0000
First released in: 14.0, 11.13, 12.8, 13.4

    Prepare for forthcoming LLVM 13 API change.
    
    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 | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/backend/jit/llvm/llvmjit.c b/src/backend/jit/llvm/llvmjit.c index 78c0b9385c7..75b2d260b85 100644 --- a/src/backend/jit/llvm/llvmjit.c +++ b/src/backend/jit/llvm/llvmjit.c @@ -1104,6 +1104,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; [parent: 0efd2a1a66dd]