mirror of
https://github.com/postgres/postgres.git
synced 2025-04-21 12:05:57 +03:00
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: Andres Freund <andres@anarazel.de> Discussion: https://postgr.es/m/16696-29d944a33801fbfe@postgresql.org
This commit is contained in:
parent
91e9e89dcc
commit
0207d5fbeb
@ -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.
|
||||||
|
Loading…
x
Reference in New Issue
Block a user