aboutsummaryrefslogtreecommitdiff
path: root/sysdeps/mach/hurd/i386/trampoline.c
diff options
context:
space:
mode:
authorRoland McGrath <roland@gnu.org>1995-04-21 02:24:35 +0000
committerRoland McGrath <roland@gnu.org>1995-04-21 02:24:35 +0000
commit11d90def8c64fd858481a8ca3fbcf77f497f63b2 (patch)
tree010531d31329a790e70939a0bf9ff969367504eb /sysdeps/mach/hurd/i386/trampoline.c
parent67be1ecfe57c9bc8d984c4f22222ca859ea69a39 (diff)
downloadglibc-11d90def8c64fd858481a8ca3fbcf77f497f63b2.tar
glibc-11d90def8c64fd858481a8ca3fbcf77f497f63b2.tar.gz
glibc-11d90def8c64fd858481a8ca3fbcf77f497f63b2.tar.bz2
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/hurd/i386/trampoline.c')
-rw-r--r--sysdeps/mach/hurd/i386/trampoline.c6
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;
}