forked from luck/tmp_suning_uos_patched
xtensa: clean up system_call/xtensa_rt_sigreturn interaction
system_call assembly code always pushes pointer to struct pt_regs as the last additional parameter for all system calls. The only user of this feature is xtensa_rt_sigreturn. Avoid this special case. Define xtensa_rt_sigreturn as accepting no argiments. Use current_pt_regs to get pointer to struct pt_regs in xtensa_rt_sigreturn. Don't pass additional parameter from system_call code. Signed-off-by: Max Filippov <jcmvbkbc@gmail.com>
This commit is contained in:
parent
02ce94c229
commit
9d9043f6a8
|
@ -79,7 +79,7 @@ static inline void syscall_set_arguments(struct task_struct *task,
|
|||
regs->areg[reg[i]] = args[i];
|
||||
}
|
||||
|
||||
asmlinkage long xtensa_rt_sigreturn(struct pt_regs*);
|
||||
asmlinkage long xtensa_rt_sigreturn(void);
|
||||
asmlinkage long xtensa_shmat(int, char __user *, int);
|
||||
asmlinkage long xtensa_fadvise64_64(int, int,
|
||||
unsigned long long, unsigned long long);
|
||||
|
|
|
@ -1876,8 +1876,7 @@ ENDPROC(fast_store_prohibited)
|
|||
|
||||
ENTRY(system_call)
|
||||
|
||||
/* reserve 4 bytes on stack for function parameter */
|
||||
abi_entry(4)
|
||||
abi_entry_default
|
||||
|
||||
/* regs->syscall = regs->areg[2] */
|
||||
|
||||
|
@ -1915,9 +1914,6 @@ ENTRY(system_call)
|
|||
l32i a10, a2, PT_AREG8
|
||||
l32i a11, a2, PT_AREG9
|
||||
|
||||
/* Pass one additional argument to the syscall: pt_regs (on stack) */
|
||||
s32i a2, a1, 0
|
||||
|
||||
callx4 a4
|
||||
|
||||
1: /* regs->areg[2] = return_value */
|
||||
|
@ -1925,12 +1921,12 @@ ENTRY(system_call)
|
|||
s32i a6, a2, PT_AREG2
|
||||
bnez a3, 1f
|
||||
.Lsyscall_exit:
|
||||
abi_ret(4)
|
||||
abi_ret_default
|
||||
|
||||
1:
|
||||
mov a6, a2
|
||||
call4 do_syscall_trace_leave
|
||||
abi_ret(4)
|
||||
abi_ret_default
|
||||
|
||||
ENDPROC(system_call)
|
||||
|
||||
|
|
|
@ -236,9 +236,9 @@ restore_sigcontext(struct pt_regs *regs, struct rt_sigframe __user *frame)
|
|||
* Do a signal return; undo the signal stack.
|
||||
*/
|
||||
|
||||
asmlinkage long xtensa_rt_sigreturn(long a0, long a1, long a2, long a3,
|
||||
long a4, long a5, struct pt_regs *regs)
|
||||
asmlinkage long xtensa_rt_sigreturn(void)
|
||||
{
|
||||
struct pt_regs *regs = current_pt_regs();
|
||||
struct rt_sigframe __user *frame;
|
||||
sigset_t set;
|
||||
int ret;
|
||||
|
|
Loading…
Reference in New Issue
Block a user