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@ |
||
---|---|---|
.. | ||
d_mach | ||
h_atexit.c | ||
h_cancel.c | ||
h_common.h | ||
h_exit.c | ||
h_resolv.c | ||
Makefile | ||
t_atexit.sh | ||
t_barrier.c | ||
t_cancel.sh | ||
t_cond.c | ||
t_detach.c | ||
t_equal.c | ||
t_exit.sh | ||
t_fork.c | ||
t_fpu.c | ||
t_join.c | ||
t_kill.c | ||
t_mutex.c | ||
t_name.c | ||
t_once.c | ||
t_preempt.c | ||
t_resolv.sh | ||
t_rwlock.c | ||
t_sem.c | ||
t_sigalarm.c | ||
t_siglongjmp.c | ||
t_sigmask.c | ||
t_sigsuspend.c | ||
t_sleep.c | ||
t_swapcontext.c |