Author: kib Date: Mon Aug 10 17:02:42 2015 New Revision: 286582 URL: https://svnweb.freebsd.org/changeset/base/286582
Log: Pre-resolve symbols required for the deferred signal processing. This avoids recursion into rtld when leaving libthr critical section for the deferred signal delivery. For the same reason, use syscall(2) instead of referencing __sys_sigreturn(2). Syscall() is already pre-resolved for fork() interceptor. Tested by: Andre Meiser <orta...@web.de> Sponsored by: The FreeBSD Foundation MFC after: 1 week Modified: head/lib/libthr/thread/thr_rtld.c head/lib/libthr/thread/thr_sig.c Modified: head/lib/libthr/thread/thr_rtld.c ============================================================================== --- head/lib/libthr/thread/thr_rtld.c Mon Aug 10 16:32:47 2015 (r286581) +++ head/lib/libthr/thread/thr_rtld.c Mon Aug 10 17:02:42 2015 (r286582) @@ -185,7 +185,9 @@ _thr_rtld_init(void) { struct RtldLockInfo li; struct pthread *curthread; + ucontext_t *uc; long dummy = -1; + int uc_len; curthread = _get_curthread(); @@ -231,4 +233,9 @@ _thr_rtld_init(void) _thr_signal_block(curthread); _rtld_thread_init(&li); _thr_signal_unblock(curthread); + + uc_len = __getcontextx_size(); + uc = alloca(uc_len); + getcontext(uc); + __fillcontextx2((char *)uc); } Modified: head/lib/libthr/thread/thr_sig.c ============================================================================== --- head/lib/libthr/thread/thr_sig.c Mon Aug 10 16:32:47 2015 (r286581) +++ head/lib/libthr/thread/thr_sig.c Mon Aug 10 17:02:42 2015 (r286582) @@ -30,6 +30,7 @@ #include <sys/param.h> #include <sys/types.h> #include <sys/signalvar.h> +#include <sys/syscall.h> #include <signal.h> #include <errno.h> #include <stdlib.h> @@ -257,7 +258,7 @@ handle_signal(struct sigaction *actp, in /* reschedule cancellation */ check_cancel(curthread, &uc2); errno = err; - __sys_sigreturn(&uc2); + syscall(SYS_sigreturn, &uc2); } void _______________________________________________ svn-src-head@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/svn-src-head To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"