Skip to content

Commit

Permalink
jit: Don't inline functions that access thread-locals.
Browse files Browse the repository at this point in the history
Code inlined by LLVM can crash or fail with "Relocation type not
implemented yet!" if it tries to access thread local variables.  Don't
inline such code.

Back-patch to 11, where LLVM arrived.  Bug #16696.

Author: Dmitry Marakasov <amdmi3@amdmi3.ru>
Reviewed-by: Andres Freund <andres@anarazel.de>
Discussion: https://postgr.es/m/16696-29d944a33801fbfe@postgresql.org
  • Loading branch information
macdice committed Jul 22, 2021
1 parent 91e9e89 commit 0207d5f
Showing 1 changed file with 11 additions and 0 deletions.
11 changes: 11 additions & 0 deletions src/backend/jit/llvm/llvmjit_inline.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -608,6 +608,17 @@ function_inlinable(llvm::Function &F,
if (rv->materialize())
elog(FATAL, "failed to materialize metadata");

/*
* Don't inline functions that access thread local variables. That
* doesn't work on current LLVM releases (but might in future).
*/
if (rv->isThreadLocal())
{
ilog(DEBUG1, "cannot inline %s due to thread-local variable %s",
F.getName().data(), rv->getName().data());
return false;
}

/*
* Never want to inline externally visible vars, cheap enough to
* reference.
Expand Down

0 comments on commit 0207d5f

Please sign in to comment.