Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/netbsd-2-0]: src/sys/arch/sparc64/sparc64 Pull up following revision(s) ...
details: https://anonhg.NetBSD.org/src/rev/f41c1b227459
branches: netbsd-2-0
changeset: 564999:f41c1b227459
user: tron <tron%NetBSD.org@localhost>
date: Tue Oct 03 12:47:26 2006 +0000
description:
Pull up following revision(s) (requested by nakayama in ticket #10695):
sys/arch/sparc64/sparc64/locore.s: revision 1.217 via patch
sys/arch/sparc64/sparc64/locore.s: revision 1.218 via patch
Fix a couple of %y register save/restore errors, inspired from OpenBSD.
revision 1.44
date: 2004/04/23 04:18:17; author: marc; state: Exp; lines: +5 -4
fix a couple of %y register save/restore errors
1) don't save %y in a register that is later used before restoring %y
2) always restore %y after calling a signal handler
tested by drahn@, OK pval
>From OpenBSD:
- reload %fprs for checking it again.
- use symbolic names for checking in %fprs.
revision 1.51
date: 2005/07/18 14:50:11; author: deraadt; state: Exp; lines: +2 -1
cache a copy of the fprs so we know what fp restore we should do after
revision 1.50
date: 2005/07/14 01:46:13; author: deraadt; state: Exp; lines: +4 -4
use symbolic names for checking in %fprs, as above
diffstat:
sys/arch/sparc64/sparc64/locore.s | 25 +++++++++++++------------
1 files changed, 13 insertions(+), 12 deletions(-)
diffs (88 lines):
diff -r 8bb614122bfa -r f41c1b227459 sys/arch/sparc64/sparc64/locore.s
--- a/sys/arch/sparc64/sparc64/locore.s Fri Sep 29 22:22:35 2006 +0000
+++ b/sys/arch/sparc64/sparc64/locore.s Tue Oct 03 12:47:26 2006 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: locore.s,v 1.196.2.2 2005/05/01 11:23:38 tron Exp $ */
+/* $NetBSD: locore.s,v 1.196.2.3 2006/10/03 12:47:26 tron Exp $ */
/*
* Copyright (c) 1996-2002 Eduardo Horvath
@@ -3022,7 +3022,7 @@
stx %g4, [%sp + CC64FSZ + STKB + TF_G + (4*8)] ! sneak in g4
rdpr %tnpc, %g3
stx %g5, [%sp + CC64FSZ + STKB + TF_G + (5*8)] ! sneak in g5
- rd %y, %g4 ! save y
+ rd %y, %g5 ! save y
stx %g6, [%sp + CC64FSZ + STKB + TF_G + (6*8)] ! sneak in g6
mov %g2, %o7 ! Make the fault address look like the return address
stx %g7, [%sp + CC64FSZ + STKB + TF_G + (7*8)] ! sneak in g7
@@ -3037,9 +3037,9 @@
stx %g2, [%sp + CC64FSZ + STKB + TF_PC] ! set tf.tf_npc
stx %g3, [%sp + CC64FSZ + STKB + TF_NPC]
- rdpr %pil, %g5
- stb %g5, [%sp + CC64FSZ + STKB + TF_PIL]
- stb %g5, [%sp + CC64FSZ + STKB + TF_OLDPIL]
+ rdpr %pil, %g4
+ stb %g4, [%sp + CC64FSZ + STKB + TF_PIL]
+ stb %g4, [%sp + CC64FSZ + STKB + TF_OLDPIL]
#if 1
rdpr %tl, %g7
@@ -3087,7 +3087,7 @@
*/
cmp %o1, T_DATA_ERROR
- st %g4, [%sp + CC64FSZ + STKB + TF_Y]
+ st %g5, [%sp + CC64FSZ + STKB + TF_Y]
wr %g0, ASI_PRIMARY_NOFAULT, %asi ! Restore default ASI
be,pn %icc, data_error
wrpr %g0, PSTATE_INTR, %pstate ! reenable interrupts
@@ -3287,7 +3287,7 @@
stx %g6, [%sp + CC64FSZ + STKB + TF_G + (6*8)] ! sneak in g6
rdpr %tnpc, %g3
stx %g7, [%sp + CC64FSZ + STKB + TF_G + (7*8)] ! sneak in g7
- rd %y, %g7 ! save y
+ rd %y, %g5 ! save y
/* Finish stackframe, call C trap handler */
stx %g1, [%sp + CC64FSZ + STKB + TF_TSTATE] ! set tf.tf_psr, tf.tf_pc
@@ -3296,9 +3296,9 @@
stx %o2, [%sp + CC64FSZ + STKB + TF_PC]
stx %g3, [%sp + CC64FSZ + STKB + TF_NPC] ! set tf.tf_npc
- rdpr %pil, %g5
- stb %g5, [%sp + CC64FSZ + STKB + TF_PIL]
- stb %g5, [%sp + CC64FSZ + STKB + TF_OLDPIL]
+ rdpr %pil, %g4
+ stb %g4, [%sp + CC64FSZ + STKB + TF_PIL]
+ stb %g4, [%sp + CC64FSZ + STKB + TF_OLDPIL]
rdpr %tl, %g7
dec %g7
@@ -3316,7 +3316,7 @@
/* Use trap type to see what handler to call */
cmp %o1, T_INST_ERROR
be,pn %xcc, text_error
- st %g7, [%sp + CC64FSZ + STKB + TF_Y] ! set tf.tf_y
+ st %g5, [%sp + CC64FSZ + STKB + TF_Y] ! set tf.tf_y
wrpr %g0, PSTATE_INTR, %pstate ! reenable interrupts
call _C_LABEL(text_access_fault) ! mem_access_fault(&tf, type, pc, sfsr)
@@ -6815,6 +6815,7 @@
lduw [%fp + BIAS + 128 + 4], %o1 ! code
call %g1 ! (*sa->sa_handler)(sig,code,scp)
add %fp, BIAS + 128 + 8, %o2 ! scp
+ wr %l1, %g0, %y ! in any case, restore %y
/*
* Now that the handler has returned, re-establish all the state
@@ -6834,7 +6835,7 @@
ldda [%l0] ASI_BLK_P, %f16
1:
bz,pt %icc, 2f
- wr %l1, %g0, %y ! in any case, restore %y
+ nop
add %sp, BIAS+CC64FSZ+BLOCK_SIZE, %l0 ! Generate a pointer so we can
andn %l0, BLOCK_ALIGN, %l0 ! do a block load
inc 2*BLOCK_SIZE, %l0 ! and skip what we already loaded
Home |
Main Index |
Thread Index |
Old Index