diff options
-rw-r--r-- | ChangeLog | 8 | ||||
-rw-r--r-- | sysdeps/mach/hurd/i386/trampoline.c | 6 |
2 files changed, 12 insertions, 2 deletions
@@ -1,7 +1,13 @@ +Thu Apr 20 22:23:58 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu> + + * sysdeps/mach/hurd/i386/trampoline.c (_hurd_setup_sighandler): + Point the return address for sigreturn's frame at a "hlt" insn so + it will definitely crash if sigreturn returns. + Wed Apr 19 18:40:11 1995 Brendan Kehoe (brendan@zen.org) * time/tzset.c (__tzname, __daylight, __timezone): Don't check - HAVE_WEAK_SYBMOLS for doing weak_alias. + HAVE_WEAK_SYMBOLS for doing weak_alias. Wed Apr 19 18:12:56 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu> diff --git a/sysdeps/mach/hurd/i386/trampoline.c b/sysdeps/mach/hurd/i386/trampoline.c index 5f3361b97e..3402181481 100644 --- a/sysdeps/mach/hurd/i386/trampoline.c +++ b/sysdeps/mach/hurd/i386/trampoline.c @@ -44,7 +44,7 @@ _hurd_setup_sighandler (struct hurd_sigstate *ss, __sighandler_t handler, volatile int rpc_wait, struct machine_thread_all_state *state) { - __label__ trampoline, rpc_wait_trampoline; + __label__ trampoline, rpc_wait_trampoline, firewall; void *volatile sigsp; struct sigcontext *scp; struct @@ -143,6 +143,7 @@ _hurd_setup_sighandler (struct hurd_sigstate *ss, __sighandler_t handler, stackframe->sigcode = sigcode; stackframe->scp = stackframe->return_scp = scp = &stackframe->ctx; stackframe->sigreturn_addr = &__sigreturn; + stackframe->sigreturn_returns_here = &&firewall; /* Crash on return. */ /* Set up the sigcontext from the current state of the thread. */ @@ -255,6 +256,9 @@ _hurd_setup_sighandler (struct hurd_sigstate *ss, __sighandler_t handler, __sigreturn (SCP); this call never returns. */ "ret"); + firewall: + asm volatile ("hlt"); + /* NOTREACHED */ return NULL; } |