bba80928a8
the TLS pointer, therefore wrecking the pthread environement. Some ports had _UC_TLSBASE flag or equivalent (_UC_UNIQUE on alpha) that controlled whether setcontext() would change the TLS pointer. This change let libpthread override setcontext() with its own version that unsets _UC_TLSBASE, enabling safe usage of setcontext() with -lpthread. We also have the following required changes here: - rename alpha's _UC_UNIQUE into _UC_TLSBASE - add _UC_TLSBASE definition in header file for all ports (powerpc, sh3, sparc and sparc64 lack the implementation for now) - introduce a libc stub that can be overriden for setcontext() - modify MD libcs swapcontext() implementations so that they use the setcontext() libc stub instead of doing a plain system call. While we are there: - document various MD _UC_* flags in header file - add libc and libpthread tests for swapcontext() behavior (hopefully helpful to spot MD problems introduced with this change) Future work: - Deciding whether kernel support or _UC_TLSBASE should be added for powerpc, sh3, sparc and sparc64 is left to portmasters sparc64 Approved by core@ |
||
---|---|---|
.. | ||
_lwp.c | ||
_setjmp.S | ||
divrem.m4 | ||
fabs.S | ||
fixunsdfsi.S | ||
flt_rounds.c | ||
fpgetmask.c | ||
fpgetround.c | ||
fpgetsticky.c | ||
fpsetmask.c | ||
fpsetround.c | ||
fpsetsticky.c | ||
longjmp.c | ||
makecontext.c | ||
Makefile.inc | ||
modf.S | ||
nanf.c | ||
resumecontext.c | ||
setjmp.S | ||
sigsetjmp.S | ||
swapcontext.S |