diff options
author | Roland McGrath <roland@gnu.org> | 1995-04-21 02:24:35 +0000 |
---|---|---|
committer | Roland McGrath <roland@gnu.org> | 1995-04-21 02:24:35 +0000 |
commit | 11d90def8c64fd858481a8ca3fbcf77f497f63b2 (patch) | |
tree | 010531d31329a790e70939a0bf9ff969367504eb /sysdeps/mach | |
parent | 67be1ecfe57c9bc8d984c4f22222ca859ea69a39 (diff) | |
download | glibc-11d90def8c64fd858481a8ca3fbcf77f497f63b2.tar.gz glibc-11d90def8c64fd858481a8ca3fbcf77f497f63b2.tar.xz glibc-11d90def8c64fd858481a8ca3fbcf77f497f63b2.zip |
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. HAVE_WEAK_SYMBOLS for doing weak_alias.
Diffstat (limited to 'sysdeps/mach')
-rw-r--r-- | sysdeps/mach/hurd/i386/trampoline.c | 6 |
1 files changed, 5 insertions, 1 deletions
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; } |