Commit b1c1b7af authored by Thomas Munro's avatar Thomas Munro

jit: Don't inline functions that access thread-locals.

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: default avatarAndres Freund <andres@anarazel.de>
Discussion: https://postgr.es/m/16696-29d944a33801fbfe@postgresql.org
parent 227c4e57
...@@ -608,6 +608,17 @@ function_inlinable(llvm::Function &F, ...@@ -608,6 +608,17 @@ function_inlinable(llvm::Function &F,
if (rv->materialize()) if (rv->materialize())
elog(FATAL, "failed to materialize metadata"); 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 * Never want to inline externally visible vars, cheap enough to
* reference. * reference.
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment