summaryrefslogtreecommitdiff
path: root/sys/arch
diff options
context:
space:
mode:
Diffstat (limited to 'sys/arch')
-rw-r--r--sys/arch/mvmeppc/mvmeppc/genassym.cf7
-rw-r--r--sys/arch/mvmeppc/mvmeppc/locore.S42
2 files changed, 45 insertions, 4 deletions
diff --git a/sys/arch/mvmeppc/mvmeppc/genassym.cf b/sys/arch/mvmeppc/mvmeppc/genassym.cf
index ed2353e86b4..aaf0c2c59fe 100644
--- a/sys/arch/mvmeppc/mvmeppc/genassym.cf
+++ b/sys/arch/mvmeppc/mvmeppc/genassym.cf
@@ -1,4 +1,4 @@
-# $OpenBSD: genassym.cf,v 1.8 2004/11/16 17:08:09 miod Exp $
+# $OpenBSD: genassym.cf,v 1.9 2005/08/02 21:27:58 drahn Exp $
#
# Copyright (c) 1982, 1990 The Regents of the University of California.
# All rights reserved.
@@ -72,4 +72,9 @@ member p_back
member p_addr
member p_stat
+struct sigframe
+member sf_sc
+
+struct fpsig
+
export SONPROC
diff --git a/sys/arch/mvmeppc/mvmeppc/locore.S b/sys/arch/mvmeppc/mvmeppc/locore.S
index 782b1c3f9af..22e43fbeed5 100644
--- a/sys/arch/mvmeppc/mvmeppc/locore.S
+++ b/sys/arch/mvmeppc/mvmeppc/locore.S
@@ -1,4 +1,4 @@
-/* $OpenBSD: locore.S,v 1.10 2004/12/24 22:50:30 miod Exp $ */
+/* $OpenBSD: locore.S,v 1.11 2005/08/02 21:27:58 drahn Exp $ */
/* $NetBSD: locore.S,v 1.2 1996/10/16 19:33:09 ws Exp $ */
/*
@@ -1125,9 +1125,45 @@ _C_LABEL(setfault):
.type _C_LABEL(sigcode),@function
.type _C_LABEL(esigcode),@function
_C_LABEL(sigcode):
- addi %r1,%r1,-16 /* reserved space for callee */
+ addi %r1,%r1,-((16+FPSIG_SIZEOF+15)& ~0xf) /* reserved space for callee */
+ addi %r6,%r1,8
+ stfd %f0,0(%r6)
+ stfd %f1,8(%r6)
+ stfd %f2,16(%r6)
+ stfd %f3,24(%r6)
+ stfd %f4,32(%r6)
+ stfd %f5,40(%r6)
+ stfd %f6,48(%r6)
+ stfd %f7,56(%r6)
+ stfd %f8,64(%r6)
+ stfd %f9,72(%r6)
+ stfd %f10,80(%r6)
+ stfd %f11,88(%r6)
+ stfd %f12,96(%r6)
+ stfd %f13,104(%r6)
+ mffs %f0
+ stfd %f0,112(%r6)
+ lfd %f0,0(%r6) /* restore the clobbered register */
+
blrl
- addi %r3,%r1,16+8 /* compute &sf_sc */
+ addi %r6,%r1,8
+ lfd %f0,112(%r6)
+ mtfsf 0xff,%f0
+ lfd %f0,0(%r6)
+ lfd %f1,8(%r6)
+ lfd %f2,16(%r6)
+ lfd %f3,24(%r6)
+ lfd %f4,32(%r6)
+ lfd %f5,40(%r6)
+ lfd %f6,48(%r6)
+ lfd %f7,56(%r6)
+ lfd %f8,64(%r6)
+ lfd %f9,72(%r6)
+ lfd %f10,80(%r6)
+ lfd %f11,88(%r6)
+ lfd %f12,96(%r6)
+ lfd %f13,104(%r6)
+ addi %r3,%r1,((16+FPSIG_SIZEOF+15)&~0xf)+SF_SC /* compute &sf_sc */
li %r0,SYS_sigreturn
sc /* sigreturn(scp) */
li %r0,SYS_exit