patch-2.1.79 linux/arch/sparc/kernel/entry.S
Next file: linux/arch/sparc/kernel/head.S
Previous file: linux/arch/sparc/kernel/Makefile
Back to the patch index
Back to the overall index
- Lines: 141
- Date:
Mon Jan 12 15:15:43 1998
- Orig file:
v2.1.78/linux/arch/sparc/kernel/entry.S
- Orig date:
Wed Apr 23 19:01:16 1997
diff -u --recursive --new-file v2.1.78/linux/arch/sparc/kernel/entry.S linux/arch/sparc/kernel/entry.S
@@ -1,4 +1,4 @@
-/* $Id: entry.S,v 1.138 1997/04/15 09:00:50 davem Exp $
+/* $Id: entry.S,v 1.142 1998/01/07 06:33:47 baccala Exp $
* arch/sparc/kernel/entry.S: Sparc trap low-level entry points.
*
* Copyright (C) 1995 David S. Miller (davem@caip.rutgers.edu)
@@ -92,8 +92,8 @@
/* Load new kgdb register set. */
LOAD_KGDB_GLOBALS(sp)
LOAD_KGDB_INS(sp)
- LOAD_KGDB_SREGS(sp, l0, l2)
- wr %l0, 0x0, %y
+ LOAD_KGDB_SREGS(sp, l4, l0, l3, l5, l1, l2)
+ wr %l4, 0x0, %y
sethi %hi(in_trap_handler), %l4
ld [%lo(in_trap_handler) + %l4], %l5
@@ -108,7 +108,7 @@
STORE_PT_INS(sp)
STORE_PT_GLOBALS(sp)
STORE_PT_YREG(sp, g2)
- STORE_PT_PRIV(sp, l1, l2, l3)
+ STORE_PT_PRIV(sp, l0, l1, l2)
RESTORE_ALL
@@ -283,7 +283,7 @@
*/
.align 4
- .globl real_irq_entry
+ .globl real_irq_entry, patch_handler_irq
real_irq_entry:
SAVE_ALL
@@ -299,6 +299,7 @@
wr %g2, PSR_ET, %psr
WRITE_PAUSE
mov %l7, %o0 ! irq level
+patch_handler_irq:
call C_LABEL(handler_irq)
add %sp, REGWIN_SZ, %o1 ! pt_regs ptr
wr %l0, PSR_ET, %psr
@@ -1109,7 +1110,7 @@
call C_LABEL(do_ptrace)
add %sp, REGWIN_SZ, %o0
- ld [%curptr + 0x14], %l5
+ ld [%curptr + AOFF_task_flags], %l5
andcc %l5, 0x20, %g0
be 1f
nop
@@ -1143,7 +1144,7 @@
call C_LABEL(do_sigpause)
add %sp, REGWIN_SZ, %o1
- ld [%curptr + 0x14], %l5
+ ld [%curptr + AOFF_task_flags], %l5
andcc %l5, 0x20, %g0
be 1f
nop
@@ -1161,7 +1162,26 @@
call C_LABEL(do_sigsuspend)
add %sp, REGWIN_SZ, %o0
- ld [%curptr + 0x14], %l5
+ ld [%curptr + AOFF_task_flags], %l5
+ andcc %l5, 0x20, %g0
+ be 1f
+ nop
+
+ call C_LABEL(syscall_trace)
+ nop
+
+1:
+ /* We are returning to a signal handler. */
+ RESTORE_ALL
+
+ .align 4
+ .globl C_LABEL(sys_rt_sigsuspend)
+C_LABEL(sys_rt_sigsuspend):
+ /* Note: %o0, %o1 already have correct value... */
+ call C_LABEL(do_rt_sigsuspend)
+ add %sp, REGWIN_SZ, %o2
+
+ ld [%curptr + AOFF_task_flags], %l5
andcc %l5, 0x20, %g0
be 1f
nop
@@ -1179,7 +1199,7 @@
call C_LABEL(do_sigreturn)
add %sp, REGWIN_SZ, %o0
- ld [%curptr + 0x14], %l5
+ ld [%curptr + AOFF_task_flags], %l5
andcc %l5, 0x20, %g0
be 1f
nop
@@ -1193,6 +1213,24 @@
*/
RESTORE_ALL
+ .align 4
+ .globl C_LABEL(sys_rt_sigreturn)
+C_LABEL(sys_rt_sigreturn):
+ call C_LABEL(do_rt_sigreturn)
+ add %sp, REGWIN_SZ, %o0
+
+ ld [%curptr + AOFF_task_flags], %l5
+ andcc %l5, 0x20, %g0
+ be 1f
+ nop
+
+ call C_LABEL(syscall_trace)
+ nop
+
+1:
+ /* We are returning to a signal handler. */
+ RESTORE_ALL
+
/* Now that we have a real sys_clone, sys_fork() is
* implemented in terms of it. Our _real_ implementation
* of SunOS vfork() will use sys_clone() instead.
@@ -1301,7 +1339,7 @@
mov %i1, %o1
mov %i2, %o2
- ld [%curptr + 0x14], %l5
+ ld [%curptr + AOFF_task_flags], %l5
mov %i3, %o3
andcc %l5, 0x20, %g0
mov %i4, %o4
@@ -1315,7 +1353,7 @@
.globl C_LABEL(ret_sys_call)
C_LABEL(ret_sys_call):
- ld [%curptr + 0x14], %l6
+ ld [%curptr + AOFF_task_flags], %l6
cmp %o0, -ENOIOCTLCMD
ld [%sp + REGWIN_SZ + PT_PSR], %g3
set PSR_C, %g2
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen, slshen@lbl.gov