[prev in list] [next in list] [prev in thread] [next in thread]
List: git-commits-24
Subject: [SPARC]: Fix gcc-3.x builds.
From: Linux Kernel Mailing List <linux-kernel () vger ! kernel ! org>
Date: 2003-04-30 8:15:25
[Download RAW message or body]
ChangeSet 1.1122.3.4, 2003/04/30 01:15:25-07:00, zaitcev@redhat.com
[SPARC]: Fix gcc-3.x builds.
# This patch includes the following deltas:
# ChangeSet 1.1122.3.3 -> 1.1122.3.4
# arch/sparc/kernel/wuf.S 1.1 -> 1.2
# arch/sparc/kernel/process.c 1.11 -> 1.12
# arch/sparc/kernel/sunos_asm.S 1.1 -> 1.2
# arch/sparc/kernel/head.S 1.4 -> 1.5
# include/asm-sparc/kgdb.h 1.1 -> 1.2
# arch/sparc/kernel/rtrap.S 1.3 -> 1.4
# arch/sparc/kernel/trampoline.S 1.1 -> 1.2
# include/asm-sparc/winmacro.h 1.1 -> 1.2
# arch/sparc/kernel/entry.S 1.4 -> 1.5
# include/asm-sparc/processor.h 1.7 -> 1.8
# arch/sparc/kernel/windows.c 1.2 -> 1.3
# include/asm-sparc/system.h 1.5 -> 1.6
# arch/sparc/kernel/signal.c 1.7 -> 1.8
# arch/sparc/kernel/wof.S 1.1 -> 1.2
# include/asm-sparc/ptrace.h 1.1 -> 1.2
# arch/sparc/kernel/etrap.S 1.1 -> 1.2
#
arch/sparc/kernel/entry.S | 170 +++++++++++++++++++++--------------------
arch/sparc/kernel/etrap.S | 4
arch/sparc/kernel/head.S | 2
arch/sparc/kernel/process.c | 81 +++----------------
arch/sparc/kernel/rtrap.S | 18 ++--
arch/sparc/kernel/signal.c | 2
arch/sparc/kernel/sunos_asm.S | 20 ++--
arch/sparc/kernel/trampoline.S | 8 -
arch/sparc/kernel/windows.c | 2
arch/sparc/kernel/wof.S | 2
arch/sparc/kernel/wuf.S | 2
include/asm-sparc/kgdb.h | 56 ++++++-------
include/asm-sparc/processor.h | 2
include/asm-sparc/ptrace.h | 2
include/asm-sparc/system.h | 15 +--
include/asm-sparc/winmacro.h | 56 +++++--------
16 files changed, 194 insertions(+), 248 deletions(-)
diff -Nru a/arch/sparc/kernel/entry.S b/arch/sparc/kernel/entry.S
--- a/arch/sparc/kernel/entry.S Sat May 31 10:07:56 2003
+++ b/arch/sparc/kernel/entry.S Sat May 31 10:07:56 2003
@@ -38,6 +38,14 @@
#define NR_SYSCALLS 256 /* Each OS is different... */
+/* These are just handy. */
+#define _SV save %sp, -STACKFRAME_SZ, %sp
+#define _RS restore
+
+#define FLUSH_ALL_KERNEL_WINDOWS \
+ _SV; _SV; _SV; _SV; _SV; _SV; _SV; \
+ _RS; _RS; _RS; _RS; _RS; _RS; _RS;
+
/* First, KGDB low level things. This is a rewrite
* of the routines found in the sparc-stub.c asm() statement
* from the gdb distribution. This is also dual-purpose
@@ -70,11 +78,11 @@
/* Make sure kgdb sees the same state we just saved. */
LOAD_PT_GLOBALS(sp)
LOAD_PT_INS(sp)
- ld [%sp + REGWIN_SZ + PT_Y], %l4
- ld [%sp + REGWIN_SZ + PT_WIM], %l3
- ld [%sp + REGWIN_SZ + PT_PSR], %l0
- ld [%sp + REGWIN_SZ + PT_PC], %l1
- ld [%sp + REGWIN_SZ + PT_NPC], %l2
+ ld [%sp + STACKFRAME_SZ + PT_Y], %l4
+ ld [%sp + STACKFRAME_SZ + PT_WIM], %l3
+ ld [%sp + STACKFRAME_SZ + PT_PSR], %l0
+ ld [%sp + STACKFRAME_SZ + PT_PC], %l1
+ ld [%sp + STACKFRAME_SZ + PT_NPC], %l2
rd %tbr, %l5 /* Never changes... */
/* Make kgdb exception frame. */
@@ -94,7 +102,7 @@
WRITE_PAUSE
call C_LABEL(handle_exception)
- add %sp, REGWIN_SZ, %o0 ! Pass address of registers
+ add %sp, STACKFRAME_SZ, %o0 ! Pass address of registers
/* Load new kgdb register set. */
LOAD_KGDB_GLOBALS(sp)
@@ -263,7 +271,7 @@
mov 11, %o0 ! floppy irq level (unused anyway)
mov %g0, %o1 ! devid is not used in fast interrupts
call C_LABEL(sparc_floppy_irq)
- add %sp, REGWIN_SZ, %o2 ! struct pt_regs *regs
+ add %sp, STACKFRAME_SZ, %o2 ! struct pt_regs *regs
RESTORE_ALL
@@ -312,7 +320,7 @@
mov %l7, %o0 ! irq level
patch_handler_irq:
call C_LABEL(handler_irq)
- add %sp, REGWIN_SZ, %o1 ! pt_regs ptr
+ add %sp, STACKFRAME_SZ, %o1 ! pt_regs ptr
or %l0, PSR_PIL, %g2 ! restore PIL after handler_irq
wr %g2, PSR_ET, %psr ! keep ET up
WRITE_PAUSE
@@ -329,7 +337,7 @@
wr %g2, PSR_ET, %psr
WRITE_PAUSE
call C_LABEL(smp4m_percpu_timer_interrupt)
- add %sp, REGWIN_SZ, %o0
+ add %sp, STACKFRAME_SZ, %o0
wr %l0, PSR_ET, %psr
WRITE_PAUSE
RESTORE_ALL
@@ -436,7 +444,7 @@
wr %g2, PSR_ET, %psr
WRITE_PAUSE
call C_LABEL(smp4d_percpu_timer_interrupt)
- add %sp, REGWIN_SZ, %o0
+ add %sp, STACKFRAME_SZ, %o0
wr %l0, PSR_ET, %psr
WRITE_PAUSE
RESTORE_ALL
@@ -498,7 +506,7 @@
wr %l0, PSR_ET, %psr ! re-enable traps
WRITE_PAUSE
- add %sp, REGWIN_SZ, %o0
+ add %sp, STACKFRAME_SZ, %o0
mov %l1, %o1
mov %l2, %o2
call C_LABEL(do_illegal_instruction)
@@ -518,7 +526,7 @@
wr %l0, PSR_ET, %psr
WRITE_PAUSE
- add %sp, REGWIN_SZ, %o0
+ add %sp, STACKFRAME_SZ, %o0
mov %l1, %o1
mov %l2, %o2
call C_LABEL(do_priv_instruction)
@@ -541,7 +549,7 @@
ld [%l1], %o1
call C_LABEL(kernel_unaligned_trap)
- add %sp, REGWIN_SZ, %o0
+ add %sp, STACKFRAME_SZ, %o0
RESTORE_ALL
@@ -553,7 +561,7 @@
ld [%l1], %o1
call C_LABEL(user_unaligned_trap)
- add %sp, REGWIN_SZ, %o0
+ add %sp, STACKFRAME_SZ, %o0
RESTORE_ALL
@@ -566,7 +574,7 @@
wr %l0, PSR_ET, %psr ! re-enable traps
WRITE_PAUSE
- add %sp, REGWIN_SZ, %o0
+ add %sp, STACKFRAME_SZ, %o0
mov %l1, %o1
mov %l2, %o2
call C_LABEL(do_fpd_trap)
@@ -605,7 +613,7 @@
wr %l0, PSR_ET, %psr ! re-enable traps
WRITE_PAUSE
- add %sp, REGWIN_SZ, %o0
+ add %sp, STACKFRAME_SZ, %o0
mov %l1, %o1
mov %l2, %o2
call C_LABEL(do_fpe_trap)
@@ -622,7 +630,7 @@
wr %l0, PSR_ET, %psr ! re-enable traps
WRITE_PAUSE
- add %sp, REGWIN_SZ, %o0
+ add %sp, STACKFRAME_SZ, %o0
mov %l1, %o1
mov %l2, %o2
call C_LABEL(handle_tag_overflow)
@@ -639,7 +647,7 @@
wr %l0, PSR_ET, %psr ! re-enable traps
WRITE_PAUSE
- add %sp, REGWIN_SZ, %o0
+ add %sp, STACKFRAME_SZ, %o0
mov %l1, %o1
mov %l2, %o2
call C_LABEL(handle_watchpoint)
@@ -656,7 +664,7 @@
wr %l0, PSR_ET, %psr ! re-enable traps
WRITE_PAUSE
- add %sp, REGWIN_SZ, %o0
+ add %sp, STACKFRAME_SZ, %o0
mov %l1, %o1
mov %l2, %o2
call C_LABEL(handle_reg_access)
@@ -673,7 +681,7 @@
wr %l0, PSR_ET, %psr ! re-enable traps
WRITE_PAUSE
- add %sp, REGWIN_SZ, %o0
+ add %sp, STACKFRAME_SZ, %o0
mov %l1, %o1
mov %l2, %o2
call C_LABEL(handle_cp_disabled)
@@ -690,7 +698,7 @@
wr %l0, PSR_ET, %psr ! re-enable traps
WRITE_PAUSE
- add %sp, REGWIN_SZ, %o0
+ add %sp, STACKFRAME_SZ, %o0
mov %l1, %o1
mov %l2, %o2
call C_LABEL(handle_cp_exception)
@@ -707,7 +715,7 @@
wr %l0, PSR_ET, %psr ! re-enable traps
WRITE_PAUSE
- add %sp, REGWIN_SZ, %o0
+ add %sp, STACKFRAME_SZ, %o0
mov %l1, %o1
mov %l2, %o2
call C_LABEL(handle_hw_divzero)
@@ -731,10 +739,10 @@
nop
/* Advance over the trap instruction. */
- ld [%sp + REGWIN_SZ + PT_NPC], %l1
+ ld [%sp + STACKFRAME_SZ + PT_NPC], %l1
add %l1, 0x4, %l2
- st %l1, [%sp + REGWIN_SZ + PT_PC]
- st %l2, [%sp + REGWIN_SZ + PT_NPC]
+ st %l1, [%sp + STACKFRAME_SZ + PT_PC]
+ st %l2, [%sp + STACKFRAME_SZ + PT_NPC]
RESTORE_ALL
@@ -746,10 +754,10 @@
FLUSH_ALL_KERNEL_WINDOWS
/* Advance over the trap instruction. */
- ld [%sp + REGWIN_SZ + PT_NPC], %l1
+ ld [%sp + STACKFRAME_SZ + PT_NPC], %l1
add %l1, 0x4, %l2
- st %l1, [%sp + REGWIN_SZ + PT_PC]
- st %l2, [%sp + REGWIN_SZ + PT_NPC]
+ st %l1, [%sp + STACKFRAME_SZ + PT_PC]
+ st %l2, [%sp + STACKFRAME_SZ + PT_NPC]
RESTORE_ALL
@@ -818,7 +826,7 @@
sub %o0, 0x4, %o0
lda [%o0] ASI_CONTROL, %o3 ! async error
call C_LABEL(sparc_lvl15_nmi)
- add %sp, REGWIN_SZ, %o0
+ add %sp, STACKFRAME_SZ, %o0
RESTORE_ALL
@@ -1152,7 +1160,7 @@
WRITE_PAUSE
call C_LABEL(do_sun4c_fault)
- add %sp, REGWIN_SZ, %o0 ! arg1 = pt_regs ptr
+ add %sp, STACKFRAME_SZ, %o0 ! arg1 = pt_regs ptr
RESTORE_ALL
@@ -1186,7 +1194,7 @@
WRITE_PAUSE
call C_LABEL(do_sparc_fault)
- add %sp, REGWIN_SZ, %o0 ! arg1 = pt_regs ptr
+ add %sp, STACKFRAME_SZ, %o0 ! arg1 = pt_regs ptr
RESTORE_ALL
@@ -1224,7 +1232,7 @@
.globl C_LABEL(sys_nis_syscall)
C_LABEL(sys_nis_syscall):
mov %o7, %l5
- add %sp, REGWIN_SZ, %o0 ! pt_regs *regs arg
+ add %sp, STACKFRAME_SZ, %o0 ! pt_regs *regs arg
call C_LABEL(c_sys_nis_syscall)
mov %l5, %o7
@@ -1232,7 +1240,7 @@
.globl C_LABEL(sys_ptrace)
C_LABEL(sys_ptrace):
call C_LABEL(do_ptrace)
- add %sp, REGWIN_SZ, %o0
+ add %sp, STACKFRAME_SZ, %o0
ld [%curptr + AOFF_task_ptrace], %l5
andcc %l5, 0x02, %g0
@@ -1249,7 +1257,7 @@
.globl C_LABEL(sys_execve)
C_LABEL(sys_execve):
mov %o7, %l5
- add %sp, REGWIN_SZ, %o0 ! pt_regs *regs arg
+ add %sp, STACKFRAME_SZ, %o0 ! pt_regs *regs arg
call C_LABEL(sparc_execve)
mov %l5, %o7
@@ -1257,7 +1265,7 @@
.globl C_LABEL(sys_pipe)
C_LABEL(sys_pipe):
mov %o7, %l5
- add %sp, REGWIN_SZ, %o0 ! pt_regs *regs arg
+ add %sp, STACKFRAME_SZ, %o0 ! pt_regs *regs arg
call C_LABEL(sparc_pipe)
mov %l5, %o7
@@ -1282,7 +1290,7 @@
C_LABEL(sys_sigpause):
/* Note: %o0 already has correct value... */
call C_LABEL(do_sigpause)
- add %sp, REGWIN_SZ, %o1
+ add %sp, STACKFRAME_SZ, %o1
ld [%curptr + AOFF_task_ptrace], %l5
andcc %l5, 0x02, %g0
@@ -1300,7 +1308,7 @@
.globl C_LABEL(sys_sigsuspend)
C_LABEL(sys_sigsuspend):
call C_LABEL(do_sigsuspend)
- add %sp, REGWIN_SZ, %o0
+ add %sp, STACKFRAME_SZ, %o0
ld [%curptr + AOFF_task_ptrace], %l5
andcc %l5, 0x02, %g0
@@ -1319,7 +1327,7 @@
C_LABEL(sys_rt_sigsuspend):
/* Note: %o0, %o1 already have correct value... */
call C_LABEL(do_rt_sigsuspend)
- add %sp, REGWIN_SZ, %o2
+ add %sp, STACKFRAME_SZ, %o2
ld [%curptr + AOFF_task_ptrace], %l5
andcc %l5, 0x02, %g0
@@ -1337,7 +1345,7 @@
.globl C_LABEL(sys_sigreturn)
C_LABEL(sys_sigreturn):
call C_LABEL(do_sigreturn)
- add %sp, REGWIN_SZ, %o0
+ add %sp, STACKFRAME_SZ, %o0
ld [%curptr + AOFF_task_ptrace], %l5
andcc %l5, 0x02, %g0
@@ -1357,7 +1365,7 @@
.globl C_LABEL(sys_rt_sigreturn)
C_LABEL(sys_rt_sigreturn):
call C_LABEL(do_rt_sigreturn)
- add %sp, REGWIN_SZ, %o0
+ add %sp, STACKFRAME_SZ, %o0
ld [%curptr + AOFF_task_ptrace], %l5
andcc %l5, 0x02, %g0
@@ -1391,7 +1399,7 @@
WRITE_PAUSE
mov %fp, %o1 ! arg1: usp
std %g4, [%curptr + AOFF_task_thread + AOFF_thread_fork_kpsr]
- add %sp, REGWIN_SZ, %o2 ! arg2: pt_regs ptr
+ add %sp, STACKFRAME_SZ, %o2 ! arg2: pt_regs ptr
mov 0, %o3
call C_LABEL(do_fork)
mov %l5, %o7
@@ -1414,7 +1422,7 @@
andn %o1, 7, %o1 ! no, align to 8 bytes
1:
std %g4, [%curptr + AOFF_task_thread + AOFF_thread_fork_kpsr]
- add %sp, REGWIN_SZ, %o2 ! arg2: pt_regs ptr
+ add %sp, STACKFRAME_SZ, %o2 ! arg2: pt_regs ptr
mov 0, %o3
call C_LABEL(do_fork)
mov %l5, %o7
@@ -1435,7 +1443,7 @@
sethi %hi(C_LABEL(do_fork)), %l1
mov 0, %o3
jmpl %l1 + %lo(C_LABEL(do_fork)), %g0
- add %sp, REGWIN_SZ, %o2
+ add %sp, STACKFRAME_SZ, %o2
.align 4
linux_sparc_ni_syscall:
@@ -1466,7 +1474,7 @@
call schedule_tail
mov %g3, %o0
b C_LABEL(ret_sys_call)
- ld [%sp + REGWIN_SZ + PT_I0], %o0
+ ld [%sp + STACKFRAME_SZ + PT_I0], %o0
/* Linux native and SunOS system calls enter here... */
.align 4
@@ -1501,13 +1509,13 @@
call %l7
mov %i5, %o5
- st %o0, [%sp + REGWIN_SZ + PT_I0]
+ st %o0, [%sp + STACKFRAME_SZ + PT_I0]
.globl C_LABEL(ret_sys_call)
C_LABEL(ret_sys_call):
ld [%curptr + AOFF_task_ptrace], %l6
cmp %o0, -ENOIOCTLCMD
- ld [%sp + REGWIN_SZ + PT_PSR], %g3
+ ld [%sp + STACKFRAME_SZ + PT_PSR], %g3
set PSR_C, %g2
bgeu 1f
andcc %l6, 0x02, %l6
@@ -1515,35 +1523,35 @@
/* System call success, clear Carry condition code. */
andn %g3, %g2, %g3
clr %l6
- st %g3, [%sp + REGWIN_SZ + PT_PSR]
+ st %g3, [%sp + STACKFRAME_SZ + PT_PSR]
bne linux_syscall_trace2
- ld [%sp + REGWIN_SZ + PT_NPC], %l1 /* pc = npc */
+ ld [%sp + STACKFRAME_SZ + PT_NPC], %l1 /* pc = npc */
add %l1, 0x4, %l2 /* npc = npc+4 */
- st %l1, [%sp + REGWIN_SZ + PT_PC]
+ st %l1, [%sp + STACKFRAME_SZ + PT_PC]
b ret_trap_entry
- st %l2, [%sp + REGWIN_SZ + PT_NPC]
+ st %l2, [%sp + STACKFRAME_SZ + PT_NPC]
1:
/* System call failure, set Carry condition code.
* Also, get abs(errno) to return to the process.
*/
sub %g0, %o0, %o0
or %g3, %g2, %g3
- st %o0, [%sp + REGWIN_SZ + PT_I0]
+ st %o0, [%sp + STACKFRAME_SZ + PT_I0]
mov 1, %l6
- st %g3, [%sp + REGWIN_SZ + PT_PSR]
+ st %g3, [%sp + STACKFRAME_SZ + PT_PSR]
bne linux_syscall_trace2
- ld [%sp + REGWIN_SZ + PT_NPC], %l1 /* pc = npc */
+ ld [%sp + STACKFRAME_SZ + PT_NPC], %l1 /* pc = npc */
add %l1, 0x4, %l2 /* npc = npc+4 */
- st %l1, [%sp + REGWIN_SZ + PT_PC]
+ st %l1, [%sp + STACKFRAME_SZ + PT_PC]
b ret_trap_entry
- st %l2, [%sp + REGWIN_SZ + PT_NPC]
+ st %l2, [%sp + STACKFRAME_SZ + PT_NPC]
linux_syscall_trace2:
call C_LABEL(syscall_trace)
add %l1, 0x4, %l2 /* npc = npc+4 */
- st %l1, [%sp + REGWIN_SZ + PT_PC]
+ st %l1, [%sp + STACKFRAME_SZ + PT_PC]
b ret_trap_entry
- st %l2, [%sp + REGWIN_SZ + PT_NPC]
+ st %l2, [%sp + STACKFRAME_SZ + PT_NPC]
/*
@@ -1581,19 +1589,19 @@
mov %i0, %l5
call C_LABEL(do_solaris_syscall)
- add %sp, REGWIN_SZ, %o0
+ add %sp, STACKFRAME_SZ, %o0
- st %o0, [%sp + REGWIN_SZ + PT_I0]
+ st %o0, [%sp + STACKFRAME_SZ + PT_I0]
set PSR_C, %g2
cmp %o0, -ENOIOCTLCMD
bgeu 1f
- ld [%sp + REGWIN_SZ + PT_PSR], %g3
+ ld [%sp + STACKFRAME_SZ + PT_PSR], %g3
/* System call success, clear Carry condition code. */
andn %g3, %g2, %g3
clr %l6
b 2f
- st %g3, [%sp + REGWIN_SZ + PT_PSR]
+ st %g3, [%sp + STACKFRAME_SZ + PT_PSR]
1:
/* System call failure, set Carry condition code.
@@ -1601,9 +1609,9 @@
*/
sub %g0, %o0, %o0
mov 1, %l6
- st %o0, [%sp + REGWIN_SZ + PT_I0]
+ st %o0, [%sp + STACKFRAME_SZ + PT_I0]
or %g3, %g2, %g3
- st %g3, [%sp + REGWIN_SZ + PT_PSR]
+ st %g3, [%sp + STACKFRAME_SZ + PT_PSR]
/* Advance the pc and npc over the trap instruction.
* If the npc is unaligned (has a 1 in the lower byte), it means
@@ -1612,19 +1620,19 @@
* nPC (setcontext).
*/
2:
- ld [%sp + REGWIN_SZ + PT_NPC], %l1 /* pc = npc */
+ ld [%sp + STACKFRAME_SZ + PT_NPC], %l1 /* pc = npc */
andcc %l1, 1, %g0
bne 1f
add %l1, 0x4, %l2 /* npc = npc+4 */
- st %l1, [%sp + REGWIN_SZ + PT_PC]
+ st %l1, [%sp + STACKFRAME_SZ + PT_PC]
b ret_trap_entry
- st %l2, [%sp + REGWIN_SZ + PT_NPC]
+ st %l2, [%sp + STACKFRAME_SZ + PT_NPC]
/* kernel knows what it is doing, fixup npc and continue */
1:
sub %l1, 1, %l1
b ret_trap_entry
- st %l1, [%sp + REGWIN_SZ + PT_NPC]
+ st %l1, [%sp + STACKFRAME_SZ + PT_NPC]
#ifndef CONFIG_SUNOS_EMUL
.align 4
@@ -1637,7 +1645,7 @@
nop
mov %i0, %l5
call C_LABEL(do_sunos_syscall)
- add %sp, REGWIN_SZ, %o0
+ add %sp, STACKFRAME_SZ, %o0
#endif
/* {net, open}bsd system calls enter here... */
@@ -1674,17 +1682,17 @@
call %l7
mov %i5, %o5
- st %o0, [%sp + REGWIN_SZ + PT_I0]
+ st %o0, [%sp + STACKFRAME_SZ + PT_I0]
set PSR_C, %g2
cmp %o0, -ENOIOCTLCMD
bgeu 1f
- ld [%sp + REGWIN_SZ + PT_PSR], %g3
+ ld [%sp + STACKFRAME_SZ + PT_PSR], %g3
/* System call success, clear Carry condition code. */
andn %g3, %g2, %g3
clr %l6
b 2f
- st %g3, [%sp + REGWIN_SZ + PT_PSR]
+ st %g3, [%sp + STACKFRAME_SZ + PT_PSR]
1:
/* System call failure, set Carry condition code.
@@ -1698,17 +1706,17 @@
ld [%o3 + %o0], %o0
#endif
mov 1, %l6
- st %o0, [%sp + REGWIN_SZ + PT_I0]
+ st %o0, [%sp + STACKFRAME_SZ + PT_I0]
or %g3, %g2, %g3
- st %g3, [%sp + REGWIN_SZ + PT_PSR]
+ st %g3, [%sp + STACKFRAME_SZ + PT_PSR]
/* Advance the pc and npc over the trap instruction. */
2:
- ld [%sp + REGWIN_SZ + PT_NPC], %l1 /* pc = npc */
+ ld [%sp + STACKFRAME_SZ + PT_NPC], %l1 /* pc = npc */
add %l1, 0x4, %l2 /* npc = npc+4 */
- st %l1, [%sp + REGWIN_SZ + PT_PC]
+ st %l1, [%sp + STACKFRAME_SZ + PT_PC]
b ret_trap_entry
- st %l2, [%sp + REGWIN_SZ + PT_NPC]
+ st %l2, [%sp + STACKFRAME_SZ + PT_NPC]
/* Saving and restoring the FPU state is best done from lowlevel code.
*
@@ -1796,7 +1804,7 @@
.globl C_LABEL(ndelay)
C_LABEL(ndelay):
- save %sp, -REGWIN_SZ, %sp
+ save %sp, -STACKFRAME_SZ, %sp
mov %i0, %o0
call .umul
mov 5, %o1
@@ -1805,7 +1813,7 @@
.globl C_LABEL(udelay)
C_LABEL(udelay):
- save %sp, -REGWIN_SZ, %sp
+ save %sp, -STACKFRAME_SZ, %sp
mov %i0, %o0
sethi %hi(0x10c6), %o1
call .umul
@@ -1842,9 +1850,9 @@
wr %l0, PSR_ET, %psr
WRITE_PAUSE
- st %i0, [%sp + REGWIN_SZ + PT_G0] ! for restarting syscalls
+ st %i0, [%sp + STACKFRAME_SZ + PT_G0] ! for restarting syscalls
call C_LABEL(sparc_breakpoint)
- add %sp, REGWIN_SZ, %o0
+ add %sp, STACKFRAME_SZ, %o0
RESTORE_ALL
@@ -1938,7 +1946,7 @@
WRITE_PAUSE
call C_LABEL(pcic_nmi)
- add %sp, REGWIN_SZ, %o1 ! struct pt_regs *regs
+ add %sp, STACKFRAME_SZ, %o1 ! struct pt_regs *regs
RESTORE_ALL
.globl C_LABEL(pcic_nmi_trap_patch)
diff -Nru a/arch/sparc/kernel/etrap.S b/arch/sparc/kernel/etrap.S
--- a/arch/sparc/kernel/etrap.S Sat May 31 10:07:56 2003
+++ b/arch/sparc/kernel/etrap.S Sat May 31 10:07:56 2003
@@ -86,7 +86,7 @@
/* From kernel, allocate more kernel stack and
* build a pt_regs trap frame.
*/
- sub %fp, (REGWIN_SZ + TRACEREG_SZ), %t_kstack
+ sub %fp, (STACKFRAME_SZ + TRACEREG_SZ), %t_kstack
STORE_PT_ALL(t_kstack, t_psr, t_pc, t_npc, g2)
/* See if we are in the trap window. */
@@ -127,7 +127,7 @@
jmpl %t_retpc + 0x8, %g0 ! return to caller
mov %t_kstack, %sp ! and onto new kernel stack
-#define STACK_OFFSET (TASK_UNION_SIZE - (TRACEREG_SZ + REGWIN_SZ))
+#define STACK_OFFSET (TASK_UNION_SIZE - TRACEREG_SZ - STACKFRAME_SZ)
trap_setup_from_user:
/* We can't use %curptr yet. */
LOAD_CURRENT(t_kstack, t_twinmask)
diff -Nru a/arch/sparc/kernel/head.S b/arch/sparc/kernel/head.S
--- a/arch/sparc/kernel/head.S Sat May 31 10:07:56 2003
+++ b/arch/sparc/kernel/head.S Sat May 31 10:07:56 2003
@@ -1011,7 +1011,7 @@
/* I want a kernel stack NOW! */
set C_LABEL(init_task_union), %g1
- set (TASK_UNION_SIZE - REGWIN_SZ), %g2
+ set (TASK_UNION_SIZE - STACKFRAME_SZ), %g2
add %g1, %g2, %sp
mov 0, %fp /* And for good luck */
diff -Nru a/arch/sparc/kernel/process.c b/arch/sparc/kernel/process.c
--- a/arch/sparc/kernel/process.c Sat May 31 10:07:56 2003
+++ b/arch/sparc/kernel/process.c Sat May 31 10:07:56 2003
@@ -384,54 +384,6 @@
}
}
-static __inline__ void copy_regs(struct pt_regs *dst, struct pt_regs *src)
-{
- __asm__ __volatile__("ldd\t[%1 + 0x00], %%g2\n\t"
- "ldd\t[%1 + 0x08], %%g4\n\t"
- "ldd\t[%1 + 0x10], %%o4\n\t"
- "std\t%%g2, [%0 + 0x00]\n\t"
- "std\t%%g4, [%0 + 0x08]\n\t"
- "std\t%%o4, [%0 + 0x10]\n\t"
- "ldd\t[%1 + 0x18], %%g2\n\t"
- "ldd\t[%1 + 0x20], %%g4\n\t"
- "ldd\t[%1 + 0x28], %%o4\n\t"
- "std\t%%g2, [%0 + 0x18]\n\t"
- "std\t%%g4, [%0 + 0x20]\n\t"
- "std\t%%o4, [%0 + 0x28]\n\t"
- "ldd\t[%1 + 0x30], %%g2\n\t"
- "ldd\t[%1 + 0x38], %%g4\n\t"
- "ldd\t[%1 + 0x40], %%o4\n\t"
- "std\t%%g2, [%0 + 0x30]\n\t"
- "std\t%%g4, [%0 + 0x38]\n\t"
- "ldd\t[%1 + 0x48], %%g2\n\t"
- "std\t%%o4, [%0 + 0x40]\n\t"
- "std\t%%g2, [%0 + 0x48]\n\t" : :
- "r" (dst), "r" (src) :
- "g2", "g3", "g4", "g5", "o4", "o5");
-}
-
-static __inline__ void copy_regwin(struct reg_window *dst, struct reg_window *src)
-{
- __asm__ __volatile__("ldd\t[%1 + 0x00], %%g2\n\t"
- "ldd\t[%1 + 0x08], %%g4\n\t"
- "ldd\t[%1 + 0x10], %%o4\n\t"
- "std\t%%g2, [%0 + 0x00]\n\t"
- "std\t%%g4, [%0 + 0x08]\n\t"
- "std\t%%o4, [%0 + 0x10]\n\t"
- "ldd\t[%1 + 0x18], %%g2\n\t"
- "ldd\t[%1 + 0x20], %%g4\n\t"
- "ldd\t[%1 + 0x28], %%o4\n\t"
- "std\t%%g2, [%0 + 0x18]\n\t"
- "std\t%%g4, [%0 + 0x20]\n\t"
- "std\t%%o4, [%0 + 0x28]\n\t"
- "ldd\t[%1 + 0x30], %%g2\n\t"
- "ldd\t[%1 + 0x38], %%g4\n\t"
- "std\t%%g2, [%0 + 0x30]\n\t"
- "std\t%%g4, [%0 + 0x38]\n\t" : :
- "r" (dst), "r" (src) :
- "g2", "g3", "g4", "g5", "o4", "o5");
-}
-
static __inline__ struct sparc_stackf *
clone_stackframe(struct sparc_stackf *dst, struct sparc_stackf *src)
{
@@ -473,8 +425,7 @@
struct task_struct *p, struct pt_regs *regs)
{
struct pt_regs *childregs;
- struct reg_window *new_stack;
- unsigned long stack_offset;
+ char *new_stack;
#ifndef CONFIG_SMP
if(last_task_used_math == current) {
@@ -489,15 +440,18 @@
#endif
}
- /* Calculate offset to stack_frame & pt_regs */
- stack_offset = TASK_UNION_SIZE - TRACEREG_SZ;
-
- if(regs->psr & PSR_PS)
- stack_offset -= REGWIN_SZ;
- childregs = ((struct pt_regs *) (((unsigned long)p) + stack_offset));
- copy_regs(childregs, regs);
- new_stack = (((struct reg_window *) childregs) - 1);
- copy_regwin(new_stack, (((struct reg_window *) regs) - 1));
+ /*
+ * p new_stack childregs
+ * ! ! ! {if(PSR_PS) }
+ * V V (stk.fr.) V (pt_regs) { (stk.fr.) }
+ * +----- - - - - - ------+===========+============={+==========}+
+ */
+ new_stack = (char*)p + TASK_UNION_SIZE;
+ if (regs->psr & PSR_PS)
+ new_stack -= STACKFRAME_SZ;
+ new_stack -= STACKFRAME_SZ + TRACEREG_SZ;
+ memcpy(new_stack, (char *)regs - STACKFRAME_SZ, STACKFRAME_SZ + TRACEREG_SZ);
+ childregs = (struct pt_regs *) (new_stack + STACKFRAME_SZ);
p->thread.ksp = (unsigned long) new_stack;
p->thread.kpc = (((unsigned long) ret_from_fork) - 0x8);
@@ -511,16 +465,11 @@
extern struct pt_regs fake_swapper_regs;
p->thread.kregs = &fake_swapper_regs;
- new_stack = (struct reg_window *)
- ((((unsigned long)p) +
- (TASK_UNION_SIZE)) -
- (REGWIN_SZ));
+ new_stack += STACKFRAME_SZ + TRACEREG_SZ;
childregs->u_regs[UREG_FP] = (unsigned long) new_stack;
p->thread.flags |= SPARC_FLAG_KTHREAD;
p->thread.current_ds = KERNEL_DS;
- memcpy((void *)new_stack,
- (void *)regs->u_regs[UREG_FP],
- sizeof(struct reg_window));
+ memcpy(new_stack, (void *)regs->u_regs[UREG_FP], STACKFRAME_SZ);
childregs->u_regs[UREG_G6] = (unsigned long) p;
} else {
p->thread.kregs = childregs;
diff -Nru a/arch/sparc/kernel/rtrap.S b/arch/sparc/kernel/rtrap.S
--- a/arch/sparc/kernel/rtrap.S Sat May 31 10:07:56 2003
+++ b/arch/sparc/kernel/rtrap.S Sat May 31 10:07:56 2003
@@ -70,16 +70,16 @@
signal_p:
cmp %g2, 0
bz,a ret_trap_continue
- ld [%sp + REGWIN_SZ + PT_PSR], %t_psr
+ ld [%sp + STACKFRAME_SZ + PT_PSR], %t_psr
clr %o0
mov %l5, %o2
mov %l6, %o3
call C_LABEL(do_signal)
- add %sp, REGWIN_SZ, %o1 ! pt_regs ptr
+ add %sp, STACKFRAME_SZ, %o1 ! pt_regs ptr
/* Fall through. */
- ld [%sp + REGWIN_SZ + PT_PSR], %t_psr
+ ld [%sp + STACKFRAME_SZ + PT_PSR], %t_psr
clr %l6
ret_trap_continue:
wr %t_psr, 0x0, %psr
@@ -95,7 +95,7 @@
mov 1, %o1
call C_LABEL(try_to_clear_window_buffer)
- add %sp, REGWIN_SZ, %o0
+ add %sp, STACKFRAME_SZ, %o0
b signal_p
ld [%curptr + AOFF_task_sigpending], %g2
@@ -142,7 +142,7 @@
nop
b ret_trap_unaligned_pc
- add %sp, REGWIN_SZ, %o0
+ add %sp, STACKFRAME_SZ, %o0
1:
LOAD_PT_YREG(sp, g1)
@@ -155,9 +155,9 @@
rett %t_npc
ret_trap_unaligned_pc:
- ld [%sp + REGWIN_SZ + PT_PC], %o1
- ld [%sp + REGWIN_SZ + PT_NPC], %o2
- ld [%sp + REGWIN_SZ + PT_PSR], %o3
+ ld [%sp + STACKFRAME_SZ + PT_PC], %o1
+ ld [%sp + STACKFRAME_SZ + PT_NPC], %o2
+ ld [%sp + STACKFRAME_SZ + PT_PSR], %o3
wr %t_wim, 0x0, %wim ! or else...
@@ -215,7 +215,7 @@
WRITE_PAUSE
call C_LABEL(window_ret_fault)
- add %sp, REGWIN_SZ, %o0
+ add %sp, STACKFRAME_SZ, %o0
b signal_p
ld [%curptr + AOFF_task_sigpending], %g2
diff -Nru a/arch/sparc/kernel/signal.c b/arch/sparc/kernel/signal.c
--- a/arch/sparc/kernel/signal.c Sat May 31 10:07:56 2003
+++ b/arch/sparc/kernel/signal.c Sat May 31 10:07:56 2003
@@ -792,7 +792,7 @@
int window = 0, err;
synchronize_user_stack();
- sfp = (svr4_signal_frame_t *) get_sigframe(sa, regs, SVR4_SF_ALIGNED + REGWIN_SZ);
+ sfp = (svr4_signal_frame_t *) get_sigframe(sa, regs, SVR4_SF_ALIGNED + sizeof(struct reg_window));
if (invalid_frame_pointer (sfp, sizeof (*sfp))){
#ifdef DEBUG_SIGNALS
diff -Nru a/arch/sparc/kernel/sunos_asm.S b/arch/sparc/kernel/sunos_asm.S
--- a/arch/sparc/kernel/sunos_asm.S Sat May 31 10:07:56 2003
+++ b/arch/sparc/kernel/sunos_asm.S Sat May 31 10:07:56 2003
@@ -16,7 +16,7 @@
.align 4
/* When calling ret_sys_call, %o0 should contain the same
- * value as in [%sp + REGWIN_SZ + PT_I0] */
+ * value as in [%sp + STACKFRAME_SZ + PT_I0] */
/* SunOS getpid() returns pid in %o0 and ppid in %o1 */
.globl C_LABEL(sunos_getpid)
@@ -25,10 +25,10 @@
nop
call C_LABEL(sys_getpid)
- st %o0, [%sp + REGWIN_SZ + PT_I1]
+ st %o0, [%sp + STACKFRAME_SZ + PT_I1]
b C_LABEL(ret_sys_call)
- st %o0, [%sp + REGWIN_SZ + PT_I0]
+ st %o0, [%sp + STACKFRAME_SZ + PT_I0]
/* SunOS getuid() returns uid in %o0 and euid in %o1 */
.globl C_LABEL(sunos_getuid)
@@ -37,10 +37,10 @@
nop
call C_LABEL(sys_getuid16)
- st %o0, [%sp + REGWIN_SZ + PT_I1]
+ st %o0, [%sp + STACKFRAME_SZ + PT_I1]
b C_LABEL(ret_sys_call)
- st %o0, [%sp + REGWIN_SZ + PT_I0]
+ st %o0, [%sp + STACKFRAME_SZ + PT_I0]
/* SunOS getgid() returns gid in %o0 and egid in %o1 */
.globl C_LABEL(sunos_getgid)
@@ -49,20 +49,20 @@
nop
call C_LABEL(sys_getgid16)
- st %o0, [%sp + REGWIN_SZ + PT_I1]
+ st %o0, [%sp + STACKFRAME_SZ + PT_I1]
b C_LABEL(ret_sys_call)
- st %o0, [%sp + REGWIN_SZ + PT_I0]
+ st %o0, [%sp + STACKFRAME_SZ + PT_I0]
/* SunOS's execv() call only specifies the argv argument, the
* environment settings are the same as the calling processes.
*/
.globl C_LABEL(sunos_execv)
C_LABEL(sunos_execv):
- st %g0, [%sp + REGWIN_SZ + PT_I2]
+ st %g0, [%sp + STACKFRAME_SZ + PT_I2]
call C_LABEL(sparc_execve)
- add %sp, REGWIN_SZ, %o0
+ add %sp, STACKFRAME_SZ, %o0
b C_LABEL(ret_sys_call)
- ld [%sp + REGWIN_SZ + PT_I0], %o0
+ ld [%sp + STACKFRAME_SZ + PT_I0], %o0
diff -Nru a/arch/sparc/kernel/trampoline.S b/arch/sparc/kernel/trampoline.S
--- a/arch/sparc/kernel/trampoline.S Sat May 31 10:07:56 2003
+++ b/arch/sparc/kernel/trampoline.S Sat May 31 10:07:56 2003
@@ -63,8 +63,8 @@
and %g4, 0xc, %g4
ld [%g5 + %g4], %g6
- sethi %hi(TASK_UNION_SIZE - REGWIN_SZ), %sp
- or %sp, %lo(TASK_UNION_SIZE - REGWIN_SZ), %sp
+ sethi %hi(TASK_UNION_SIZE - STACKFRAME_SZ), %sp
+ or %sp, %lo(TASK_UNION_SIZE - STACKFRAME_SZ), %sp
add %g6, %sp, %sp
/* Turn on traps (PSR_ET). */
@@ -140,8 +140,8 @@
srl %g3, 1, %g4
ld [%g5 + %g4], %g6
- sethi %hi(TASK_UNION_SIZE - REGWIN_SZ), %sp
- or %sp, %lo(TASK_UNION_SIZE - REGWIN_SZ), %sp
+ sethi %hi(TASK_UNION_SIZE - STACKFRAME_SZ), %sp
+ or %sp, %lo(TASK_UNION_SIZE - STACKFRAME_SZ), %sp
add %g6, %sp, %sp
/* Turn on traps (PSR_ET). */
diff -Nru a/arch/sparc/kernel/windows.c b/arch/sparc/kernel/windows.c
--- a/arch/sparc/kernel/windows.c Sat May 31 10:07:56 2003
+++ b/arch/sparc/kernel/windows.c Sat May 31 10:07:56 2003
@@ -120,7 +120,7 @@
unsigned long sp = tp->rwbuf_stkptrs[window];
if((sp & 7) ||
- copy_to_user((char *) sp, &tp->reg_window[window], REGWIN_SZ))
+ copy_to_user((char *) sp, &tp->reg_window[window], sizeof(struct reg_window)))
do_exit(SIGILL);
}
tp->w_saved = 0;
diff -Nru a/arch/sparc/kernel/wof.S b/arch/sparc/kernel/wof.S
--- a/arch/sparc/kernel/wof.S Sat May 31 10:07:56 2003
+++ b/arch/sparc/kernel/wof.S Sat May 31 10:07:56 2003
@@ -234,7 +234,7 @@
spnwin_patch3: and %twin_tmp, 0xff, %twin_tmp ! patched on 7win Sparcs
st %twin_tmp, [%curptr + AOFF_task_thread + AOFF_thread_uwinmask]
-#define STACK_OFFSET (TASK_UNION_SIZE - TRACEREG_SZ - REGWIN_SZ)
+#define STACK_OFFSET (TASK_UNION_SIZE - TRACEREG_SZ - STACKFRAME_SZ)
sethi %hi(STACK_OFFSET), %sp
or %sp, %lo(STACK_OFFSET), %sp
diff -Nru a/arch/sparc/kernel/wuf.S b/arch/sparc/kernel/wuf.S
--- a/arch/sparc/kernel/wuf.S Sat May 31 10:07:56 2003
+++ b/arch/sparc/kernel/wuf.S Sat May 31 10:07:56 2003
@@ -138,7 +138,7 @@
C_LABEL(fwin_mmu_patchme): b C_LABEL(sun4c_fwin_stackchk)
andcc %sp, 0x7, %g0
-#define STACK_OFFSET (TASK_UNION_SIZE - TRACEREG_SZ - REGWIN_SZ)
+#define STACK_OFFSET (TASK_UNION_SIZE - TRACEREG_SZ - STACKFRAME_SZ)
fwin_user_stack_is_bolixed:
/* LOCATION: Window 'W' */
diff -Nru a/include/asm-sparc/kgdb.h b/include/asm-sparc/kgdb.h
--- a/include/asm-sparc/kgdb.h Sat May 31 10:07:56 2003
+++ b/include/asm-sparc/kgdb.h Sat May 31 10:07:56 2003
@@ -52,43 +52,43 @@
#define KGDB_NPC 0x114
#define SAVE_KGDB_GLOBALS(reg) \
- std %g0, [%reg + REGWIN_SZ + KGDB_G0]; \
- std %g2, [%reg + REGWIN_SZ + KGDB_G2]; \
- std %g4, [%reg + REGWIN_SZ + KGDB_G4]; \
- std %g6, [%reg + REGWIN_SZ + KGDB_G6];
+ std %g0, [%reg + STACKFRAME_SZ + KGDB_G0]; \
+ std %g2, [%reg + STACKFRAME_SZ + KGDB_G2]; \
+ std %g4, [%reg + STACKFRAME_SZ + KGDB_G4]; \
+ std %g6, [%reg + STACKFRAME_SZ + KGDB_G6];
#define SAVE_KGDB_INS(reg) \
- std %i0, [%reg + REGWIN_SZ + KGDB_I0]; \
- std %i2, [%reg + REGWIN_SZ + KGDB_I2]; \
- std %i4, [%reg + REGWIN_SZ + KGDB_I4]; \
- std %i6, [%reg + REGWIN_SZ + KGDB_I6];
+ std %i0, [%reg + STACKFRAME_SZ + KGDB_I0]; \
+ std %i2, [%reg + STACKFRAME_SZ + KGDB_I2]; \
+ std %i4, [%reg + STACKFRAME_SZ + KGDB_I4]; \
+ std %i6, [%reg + STACKFRAME_SZ + KGDB_I6];
#define SAVE_KGDB_SREGS(reg, reg_y, reg_psr, reg_wim, reg_tbr, reg_pc, reg_npc) \
- st %reg_y, [%reg + REGWIN_SZ + KGDB_Y]; \
- st %reg_psr, [%reg + REGWIN_SZ + KGDB_PSR]; \
- st %reg_wim, [%reg + REGWIN_SZ + KGDB_WIM]; \
- st %reg_tbr, [%reg + REGWIN_SZ + KGDB_TBR]; \
- st %reg_pc, [%reg + REGWIN_SZ + KGDB_PC]; \
- st %reg_npc, [%reg + REGWIN_SZ + KGDB_NPC];
+ st %reg_y, [%reg + STACKFRAME_SZ + KGDB_Y]; \
+ st %reg_psr, [%reg + STACKFRAME_SZ + KGDB_PSR]; \
+ st %reg_wim, [%reg + STACKFRAME_SZ + KGDB_WIM]; \
+ st %reg_tbr, [%reg + STACKFRAME_SZ + KGDB_TBR]; \
+ st %reg_pc, [%reg + STACKFRAME_SZ + KGDB_PC]; \
+ st %reg_npc, [%reg + STACKFRAME_SZ + KGDB_NPC];
#define LOAD_KGDB_GLOBALS(reg) \
- ld [%reg + REGWIN_SZ + KGDB_G1], %g1; \
- ldd [%reg + REGWIN_SZ + KGDB_G2], %g2; \
- ldd [%reg + REGWIN_SZ + KGDB_G4], %g4; \
- ldd [%reg + REGWIN_SZ + KGDB_G6], %g6;
+ ld [%reg + STACKFRAME_SZ + KGDB_G1], %g1; \
+ ldd [%reg + STACKFRAME_SZ + KGDB_G2], %g2; \
+ ldd [%reg + STACKFRAME_SZ + KGDB_G4], %g4; \
+ ldd [%reg + STACKFRAME_SZ + KGDB_G6], %g6;
#define LOAD_KGDB_INS(reg) \
- ldd [%reg + REGWIN_SZ + KGDB_I0], %i0; \
- ldd [%reg + REGWIN_SZ + KGDB_I2], %i2; \
- ldd [%reg + REGWIN_SZ + KGDB_I4], %i4; \
- ldd [%reg + REGWIN_SZ + KGDB_I6], %i6;
+ ldd [%reg + STACKFRAME_SZ + KGDB_I0], %i0; \
+ ldd [%reg + STACKFRAME_SZ + KGDB_I2], %i2; \
+ ldd [%reg + STACKFRAME_SZ + KGDB_I4], %i4; \
+ ldd [%reg + STACKFRAME_SZ + KGDB_I6], %i6;
#define LOAD_KGDB_SREGS(reg, reg_y, reg_psr, reg_wim, reg_tbr, reg_pc, reg_npc) \
- ld [%reg + REGWIN_SZ + KGDB_Y], %reg_y; \
- ld [%reg + REGWIN_SZ + KGDB_PSR], %reg_psr; \
- ld [%reg + REGWIN_SZ + KGDB_WIM], %reg_wim; \
- ld [%reg + REGWIN_SZ + KGDB_TBR], %reg_tbr; \
- ld [%reg + REGWIN_SZ + KGDB_PC], %reg_pc; \
- ld [%reg + REGWIN_SZ + KGDB_NPC], %reg_npc;
+ ld [%reg + STACKFRAME_SZ + KGDB_Y], %reg_y; \
+ ld [%reg + STACKFRAME_SZ + KGDB_PSR], %reg_psr; \
+ ld [%reg + STACKFRAME_SZ + KGDB_WIM], %reg_wim; \
+ ld [%reg + STACKFRAME_SZ + KGDB_TBR], %reg_tbr; \
+ ld [%reg + STACKFRAME_SZ + KGDB_PC], %reg_pc; \
+ ld [%reg + STACKFRAME_SZ + KGDB_NPC], %reg_npc;
#endif /* !(_SPARC_KGDB_H) */
diff -Nru a/include/asm-sparc/processor.h b/include/asm-sparc/processor.h
--- a/include/asm-sparc/processor.h Sat May 31 10:07:56 2003
+++ b/include/asm-sparc/processor.h Sat May 31 10:07:56 2003
@@ -140,7 +140,7 @@
"std\t%%g0, [%0 + %3 + 0x30]\n\t"
"st\t%1, [%0 + %3 + 0x38]\n\t"
"st\t%%g0, [%0 + %3 + 0x3c]"
- : : "r" (regs), "r" (sp - REGWIN_SZ), "r" (zero),
+ : : "r" (regs), "r" (sp - sizeof(struct reg_window)), "r" (zero),
"i" ((const unsigned long)(&((struct pt_regs *)0)->u_regs[0])));
}
diff -Nru a/include/asm-sparc/ptrace.h b/include/asm-sparc/ptrace.h
--- a/include/asm-sparc/ptrace.h Sat May 31 10:07:56 2003
+++ b/include/asm-sparc/ptrace.h Sat May 31 10:07:56 2003
@@ -58,7 +58,6 @@
#define TRACEREG_SZ sizeof(struct pt_regs)
#define STACKFRAME_SZ sizeof(struct sparc_stackf)
-#define REGWIN_SZ sizeof(struct reg_window)
#ifdef __KERNEL__
#define user_mode(regs) (!((regs)->psr & PSR_PS))
@@ -70,7 +69,6 @@
/* For assembly code. */
#define TRACEREG_SZ 0x50
#define STACKFRAME_SZ 0x60
-#define REGWIN_SZ 0x40
#endif
#include <asm/asm_offsets.h>
diff -Nru a/include/asm-sparc/system.h b/include/asm-sparc/system.h
--- a/include/asm-sparc/system.h Sat May 31 10:07:56 2003
+++ b/include/asm-sparc/system.h Sat May 31 10:07:56 2003
@@ -109,15 +109,14 @@
* - Anton
*/
#define switch_to(prev, next, last) do { \
- __label__ here; \
- register unsigned long task_pc asm("o7"); \
extern struct task_struct *current_set[NR_CPUS]; \
SWITCH_ENTER \
SWITCH_DO_LAZY_FPU \
next->active_mm->cpu_vm_mask |= (1 << smp_processor_id()); \
- task_pc = ((unsigned long) &&here) - 0x8; \
__asm__ __volatile__( \
+ "sethi %%hi(here - 0x8), %%o7\n\t" \
"mov %%g6, %%g3\n\t" \
+ "or %%o7, %%lo(here - 0x8), %%o7\n\t" \
"rd %%psr, %%g4\n\t" \
"std %%sp, [%%g6 + %4]\n\t" \
"rd %%wim, %%g5\n\t" \
@@ -141,16 +140,16 @@
"nop\n\t" \
"nop\n\t" \
"jmpl %%o7 + 0x8, %%g0\n\t" \
- " mov %%g3, %0\n\t" \
+ " mov %%g3, %0\n" \
+ "here:\n" \
: "=&r" (last) \
: "r" (&(current_set[hard_smp_processor_id()])), "r" (next), \
"i" ((const unsigned long)(&((struct task_struct *)0)->thread.kpsr)), \
- "i" ((const unsigned long)(&((struct task_struct *)0)->thread.ksp)), \
- "r" (task_pc) \
+ "i" ((const unsigned long)(&((struct task_struct *)0)->thread.ksp)) \
: "g1", "g2", "g3", "g4", "g5", "g7", "l0", "l1", "l3", \
"l4", "l5", "l6", "l7", "i0", "i1", "i2", "i3", "i4", "i5", "o0", "o1", "o2", \
- "o3"); \
-here:; } while(0)
+ "o3", "o7"); \
+ } while(0)
/*
* Changing the IRQ level on the Sparc.
diff -Nru a/include/asm-sparc/winmacro.h b/include/asm-sparc/winmacro.h
--- a/include/asm-sparc/winmacro.h Sat May 31 10:07:56 2003
+++ b/include/asm-sparc/winmacro.h Sat May 31 10:07:56 2003
@@ -11,14 +11,6 @@
#include <asm/ptrace.h>
#include <asm/psr.h>
-/* These are just handy. */
-#define _SV save %sp, -REGWIN_SZ, %sp
-#define _RS restore
-
-#define FLUSH_ALL_KERNEL_WINDOWS \
- _SV; _SV; _SV; _SV; _SV; _SV; _SV; \
- _RS; _RS; _RS; _RS; _RS; _RS; _RS;
-
/* Store the register window onto the 8-byte aligned area starting
* at %reg. It might be %sp, it might not, we don't care.
*/
@@ -45,25 +37,25 @@
/* Loading and storing struct pt_reg trap frames. */
#define LOAD_PT_INS(base_reg) \
- ldd [%base_reg + REGWIN_SZ + PT_I0], %i0; \
- ldd [%base_reg + REGWIN_SZ + PT_I2], %i2; \
- ldd [%base_reg + REGWIN_SZ + PT_I4], %i4; \
- ldd [%base_reg + REGWIN_SZ + PT_I6], %i6;
+ ldd [%base_reg + STACKFRAME_SZ + PT_I0], %i0; \
+ ldd [%base_reg + STACKFRAME_SZ + PT_I2], %i2; \
+ ldd [%base_reg + STACKFRAME_SZ + PT_I4], %i4; \
+ ldd [%base_reg + STACKFRAME_SZ + PT_I6], %i6;
#define LOAD_PT_GLOBALS(base_reg) \
- ld [%base_reg + REGWIN_SZ + PT_G1], %g1; \
- ldd [%base_reg + REGWIN_SZ + PT_G2], %g2; \
- ldd [%base_reg + REGWIN_SZ + PT_G4], %g4; \
- ldd [%base_reg + REGWIN_SZ + PT_G6], %g6;
+ ld [%base_reg + STACKFRAME_SZ + PT_G1], %g1; \
+ ldd [%base_reg + STACKFRAME_SZ + PT_G2], %g2; \
+ ldd [%base_reg + STACKFRAME_SZ + PT_G4], %g4; \
+ ldd [%base_reg + STACKFRAME_SZ + PT_G6], %g6;
#define LOAD_PT_YREG(base_reg, scratch) \
- ld [%base_reg + REGWIN_SZ + PT_Y], %scratch; \
+ ld [%base_reg + STACKFRAME_SZ + PT_Y], %scratch; \
wr %scratch, 0x0, %y;
#define LOAD_PT_PRIV(base_reg, pt_psr, pt_pc, pt_npc) \
- ld [%base_reg + REGWIN_SZ + PT_PSR], %pt_psr; \
- ld [%base_reg + REGWIN_SZ + PT_PC], %pt_pc; \
- ld [%base_reg + REGWIN_SZ + PT_NPC], %pt_npc;
+ ld [%base_reg + STACKFRAME_SZ + PT_PSR], %pt_psr; \
+ ld [%base_reg + STACKFRAME_SZ + PT_PC], %pt_pc; \
+ ld [%base_reg + STACKFRAME_SZ + PT_NPC], %pt_npc;
#define LOAD_PT_ALL(base_reg, pt_psr, pt_pc, pt_npc, scratch) \
LOAD_PT_YREG(base_reg, scratch) \
@@ -72,25 +64,25 @@
LOAD_PT_PRIV(base_reg, pt_psr, pt_pc, pt_npc)
#define STORE_PT_INS(base_reg) \
- std %i0, [%base_reg + REGWIN_SZ + PT_I0]; \
- std %i2, [%base_reg + REGWIN_SZ + PT_I2]; \
- std %i4, [%base_reg + REGWIN_SZ + PT_I4]; \
- std %i6, [%base_reg + REGWIN_SZ + PT_I6];
+ std %i0, [%base_reg + STACKFRAME_SZ + PT_I0]; \
+ std %i2, [%base_reg + STACKFRAME_SZ + PT_I2]; \
+ std %i4, [%base_reg + STACKFRAME_SZ + PT_I4]; \
+ std %i6, [%base_reg + STACKFRAME_SZ + PT_I6];
#define STORE_PT_GLOBALS(base_reg) \
- st %g1, [%base_reg + REGWIN_SZ + PT_G1]; \
- std %g2, [%base_reg + REGWIN_SZ + PT_G2]; \
- std %g4, [%base_reg + REGWIN_SZ + PT_G4]; \
- std %g6, [%base_reg + REGWIN_SZ + PT_G6];
+ st %g1, [%base_reg + STACKFRAME_SZ + PT_G1]; \
+ std %g2, [%base_reg + STACKFRAME_SZ + PT_G2]; \
+ std %g4, [%base_reg + STACKFRAME_SZ + PT_G4]; \
+ std %g6, [%base_reg + STACKFRAME_SZ + PT_G6];
#define STORE_PT_YREG(base_reg, scratch) \
rd %y, %scratch; \
- st %scratch, [%base_reg + REGWIN_SZ + PT_Y];
+ st %scratch, [%base_reg + STACKFRAME_SZ + PT_Y];
#define STORE_PT_PRIV(base_reg, pt_psr, pt_pc, pt_npc) \
- st %pt_psr, [%base_reg + REGWIN_SZ + PT_PSR]; \
- st %pt_pc, [%base_reg + REGWIN_SZ + PT_PC]; \
- st %pt_npc, [%base_reg + REGWIN_SZ + PT_NPC];
+ st %pt_psr, [%base_reg + STACKFRAME_SZ + PT_PSR]; \
+ st %pt_pc, [%base_reg + STACKFRAME_SZ + PT_PC]; \
+ st %pt_npc, [%base_reg + STACKFRAME_SZ + PT_NPC];
#define STORE_PT_ALL(base_reg, reg_psr, reg_pc, reg_npc, g_scratch) \
STORE_PT_PRIV(base_reg, reg_psr, reg_pc, reg_npc) \
-
To unsubscribe from this list: send the line "unsubscribe bk-commits-24" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic