aboutsummaryrefslogtreecommitdiffstats
path: root/arch/sparc/kernel/syscalls.S
diff options
context:
space:
mode:
Diffstat (limited to 'arch/sparc/kernel/syscalls.S')
-rw-r--r--arch/sparc/kernel/syscalls.S44
1 files changed, 27 insertions, 17 deletions
diff --git a/arch/sparc/kernel/syscalls.S b/arch/sparc/kernel/syscalls.S
index 7f5f65d0b3fd..e0fed7711a94 100644
--- a/arch/sparc/kernel/syscalls.S
+++ b/arch/sparc/kernel/syscalls.S
@@ -1,23 +1,19 @@
1 /* SunOS's execv() call only specifies the argv argument, the 1 /* SunOS's execv() call only specifies the argv argument, the
2 * environment settings are the same as the calling processes. 2 * environment settings are the same as the calling processes.
3 */ 3 */
4sys_execve: 4sys64_execve:
5 sethi %hi(sparc_execve), %g1 5 set sys_execve, %g1
6 ba,pt %xcc, execve_merge 6 jmpl %g1, %g0
7 or %g1, %lo(sparc_execve), %g1 7 flushw
8 8
9#ifdef CONFIG_COMPAT 9#ifdef CONFIG_COMPAT
10sunos_execv: 10sunos_execv:
11 stx %g0, [%sp + PTREGS_OFF + PT_V9_I2] 11 mov %g0, %o2
12sys32_execve: 12sys32_execve:
13 sethi %hi(sparc32_execve), %g1 13 set compat_sys_execve, %g1
14 or %g1, %lo(sparc32_execve), %g1
15#endif
16
17execve_merge:
18 flushw
19 jmpl %g1, %g0 14 jmpl %g1, %g0
20 add %sp, PTREGS_OFF, %o0 15 flushw
16#endif
21 17
22 .align 32 18 .align 32
23sys_sparc_pipe: 19sys_sparc_pipe:
@@ -112,16 +108,31 @@ sys_clone:
112ret_from_syscall: 108ret_from_syscall:
113 /* Clear current_thread_info()->new_child. */ 109 /* Clear current_thread_info()->new_child. */
114 stb %g0, [%g6 + TI_NEW_CHILD] 110 stb %g0, [%g6 + TI_NEW_CHILD]
115 ldx [%g6 + TI_FLAGS], %l0
116 call schedule_tail 111 call schedule_tail
117 mov %g7, %o0 112 mov %g7, %o0
113 ldx [%sp + PTREGS_OFF + PT_V9_I0], %o0
114 brnz,pt %o0, ret_sys_call
115 ldx [%g6 + TI_FLAGS], %l0
116 ldx [%sp + PTREGS_OFF + PT_V9_G1], %l1
117 call %l1
118 ldx [%sp + PTREGS_OFF + PT_V9_G2], %o0
118 ba,pt %xcc, ret_sys_call 119 ba,pt %xcc, ret_sys_call
119 ldx [%sp + PTREGS_OFF + PT_V9_I0], %o0 120 mov 0, %o0
121
122 .globl sparc_exit_group
123 .type sparc_exit_group,#function
124sparc_exit_group:
125 sethi %hi(sys_exit_group), %g7
126 ba,pt %xcc, 1f
127 or %g7, %lo(sys_exit_group), %g7
128 .size sparc_exit_group,.-sparc_exit_group
120 129
121 .globl sparc_exit 130 .globl sparc_exit
122 .type sparc_exit,#function 131 .type sparc_exit,#function
123sparc_exit: 132sparc_exit:
124 rdpr %pstate, %g2 133 sethi %hi(sys_exit), %g7
134 or %g7, %lo(sys_exit), %g7
1351: rdpr %pstate, %g2
125 wrpr %g2, PSTATE_IE, %pstate 136 wrpr %g2, PSTATE_IE, %pstate
126 rdpr %otherwin, %g1 137 rdpr %otherwin, %g1
127 rdpr %cansave, %g3 138 rdpr %cansave, %g3
@@ -129,7 +140,7 @@ sparc_exit:
129 wrpr %g3, 0x0, %cansave 140 wrpr %g3, 0x0, %cansave
130 wrpr %g0, 0x0, %otherwin 141 wrpr %g0, 0x0, %otherwin
131 wrpr %g2, 0x0, %pstate 142 wrpr %g2, 0x0, %pstate
132 ba,pt %xcc, sys_exit 143 jmpl %g7, %g0
133 stb %g0, [%g6 + TI_WSAVED] 144 stb %g0, [%g6 + TI_WSAVED]
134 .size sparc_exit,.-sparc_exit 145 .size sparc_exit,.-sparc_exit
135 146
@@ -222,7 +233,6 @@ ret_sys_call:
222 ldx [%sp + PTREGS_OFF + PT_V9_TNPC], %l1 ! pc = npc 233 ldx [%sp + PTREGS_OFF + PT_V9_TNPC], %l1 ! pc = npc
223 234
2242: 2352:
225 stb %g0, [%g6 + TI_SYS_NOERROR]
226 /* System call success, clear Carry condition code. */ 236 /* System call success, clear Carry condition code. */
227 andn %g3, %g2, %g3 237 andn %g3, %g2, %g3
2283: 2383: