From ac0cfc7fcb1b51ee6aeacfd676fa6dfbe11eefb5 Mon Sep 17 00:00:00 2001 From: davidxu Date: Wed, 10 Apr 2013 02:40:03 +0000 Subject: swapcontext wrapper can not be implemented in C, the stack pointer saved in the context becomes invalid when the function returns, same as setjmp, it must be implemented in assemble language, see discussions in PR misc/177624. --- lib/libthr/thread/thr_sig.c | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) (limited to 'lib/libthr') diff --git a/lib/libthr/thread/thr_sig.c b/lib/libthr/thread/thr_sig.c index d2be994..a99395f 100644 --- a/lib/libthr/thread/thr_sig.c +++ b/lib/libthr/thread/thr_sig.c @@ -737,13 +737,4 @@ _setcontext(const ucontext_t *ucp) return __sys_setcontext(&uc); } -__weak_reference(_swapcontext, swapcontext); -int -_swapcontext(ucontext_t *oucp, const ucontext_t *ucp) -{ - ucontext_t uc; - - (void) memcpy(&uc, ucp, sizeof(uc)); - remove_thr_signals(&uc.uc_sigmask); - return __sys_swapcontext(oucp, &uc); -} +__weak_reference(__sys_swapcontext, swapcontext); -- cgit v1.1