x86: get rid of pt_regs argument in sigreturn variants
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
parent
b3af11afe0
commit
3fe26fa34d
@ -215,8 +215,9 @@ static int ia32_restore_sigcontext(struct pt_regs *regs,
|
|||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
asmlinkage long sys32_sigreturn(struct pt_regs *regs)
|
asmlinkage long sys32_sigreturn(void)
|
||||||
{
|
{
|
||||||
|
struct pt_regs *regs = current_pt_regs();
|
||||||
struct sigframe_ia32 __user *frame = (struct sigframe_ia32 __user *)(regs->sp-8);
|
struct sigframe_ia32 __user *frame = (struct sigframe_ia32 __user *)(regs->sp-8);
|
||||||
sigset_t set;
|
sigset_t set;
|
||||||
unsigned int ax;
|
unsigned int ax;
|
||||||
@ -241,8 +242,9 @@ badframe:
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
asmlinkage long sys32_rt_sigreturn(struct pt_regs *regs)
|
asmlinkage long sys32_rt_sigreturn(void)
|
||||||
{
|
{
|
||||||
|
struct pt_regs *regs = current_pt_regs();
|
||||||
struct rt_sigframe_ia32 __user *frame;
|
struct rt_sigframe_ia32 __user *frame;
|
||||||
sigset_t set;
|
sigset_t set;
|
||||||
unsigned int ax;
|
unsigned int ax;
|
||||||
|
@ -456,17 +456,16 @@ ia32_badsys:
|
|||||||
ALIGN
|
ALIGN
|
||||||
GLOBAL(\label)
|
GLOBAL(\label)
|
||||||
leaq \func(%rip),%rax
|
leaq \func(%rip),%rax
|
||||||
leaq -ARGOFFSET+8(%rsp),\arg /* 8 for return address */
|
|
||||||
jmp ia32_ptregs_common
|
jmp ia32_ptregs_common
|
||||||
.endm
|
.endm
|
||||||
|
|
||||||
CFI_STARTPROC32
|
CFI_STARTPROC32
|
||||||
|
|
||||||
PTREGSCALL stub32_rt_sigreturn, sys32_rt_sigreturn, %rdi
|
PTREGSCALL stub32_rt_sigreturn, sys32_rt_sigreturn
|
||||||
PTREGSCALL stub32_sigreturn, sys32_sigreturn, %rdi
|
PTREGSCALL stub32_sigreturn, sys32_sigreturn
|
||||||
PTREGSCALL stub32_execve, compat_sys_execve, %rcx
|
PTREGSCALL stub32_execve, compat_sys_execve
|
||||||
PTREGSCALL stub32_fork, sys_fork, %rdi
|
PTREGSCALL stub32_fork, sys_fork
|
||||||
PTREGSCALL stub32_vfork, sys_vfork, %rdi
|
PTREGSCALL stub32_vfork, sys_vfork
|
||||||
|
|
||||||
ALIGN
|
ALIGN
|
||||||
GLOBAL(stub32_clone)
|
GLOBAL(stub32_clone)
|
||||||
|
@ -69,8 +69,8 @@ asmlinkage long sys32_fallocate(int, int, unsigned,
|
|||||||
|
|
||||||
/* ia32/ia32_signal.c */
|
/* ia32/ia32_signal.c */
|
||||||
asmlinkage long sys32_sigsuspend(int, int, old_sigset_t);
|
asmlinkage long sys32_sigsuspend(int, int, old_sigset_t);
|
||||||
asmlinkage long sys32_sigreturn(struct pt_regs *);
|
asmlinkage long sys32_sigreturn(void);
|
||||||
asmlinkage long sys32_rt_sigreturn(struct pt_regs *);
|
asmlinkage long sys32_rt_sigreturn(void);
|
||||||
|
|
||||||
/* ia32/ipc32.c */
|
/* ia32/ipc32.c */
|
||||||
asmlinkage long sys32_ipc(u32, int, int, int, compat_uptr_t, u32);
|
asmlinkage long sys32_ipc(u32, int, int, int, compat_uptr_t, u32);
|
||||||
|
@ -24,7 +24,7 @@ asmlinkage long sys_iopl(unsigned int);
|
|||||||
asmlinkage int sys_modify_ldt(int, void __user *, unsigned long);
|
asmlinkage int sys_modify_ldt(int, void __user *, unsigned long);
|
||||||
|
|
||||||
/* kernel/signal.c */
|
/* kernel/signal.c */
|
||||||
long sys_rt_sigreturn(struct pt_regs *);
|
long sys_rt_sigreturn(void);
|
||||||
|
|
||||||
/* kernel/tls.c */
|
/* kernel/tls.c */
|
||||||
asmlinkage int sys_set_thread_area(struct user_desc __user *);
|
asmlinkage int sys_set_thread_area(struct user_desc __user *);
|
||||||
@ -37,7 +37,7 @@ asmlinkage int sys_get_thread_area(struct user_desc __user *);
|
|||||||
asmlinkage int sys_sigsuspend(int, int, old_sigset_t);
|
asmlinkage int sys_sigsuspend(int, int, old_sigset_t);
|
||||||
asmlinkage int sys_sigaction(int, const struct old_sigaction __user *,
|
asmlinkage int sys_sigaction(int, const struct old_sigaction __user *,
|
||||||
struct old_sigaction __user *);
|
struct old_sigaction __user *);
|
||||||
unsigned long sys_sigreturn(struct pt_regs *);
|
unsigned long sys_sigreturn(void);
|
||||||
|
|
||||||
/* kernel/vm86_32.c */
|
/* kernel/vm86_32.c */
|
||||||
int sys_vm86old(struct vm86_struct __user *, struct pt_regs *);
|
int sys_vm86old(struct vm86_struct __user *, struct pt_regs *);
|
||||||
|
@ -702,12 +702,6 @@ END(syscall_badsys)
|
|||||||
/*
|
/*
|
||||||
* System calls that need a pt_regs pointer.
|
* System calls that need a pt_regs pointer.
|
||||||
*/
|
*/
|
||||||
#define PTREGSCALL0(name) \
|
|
||||||
ENTRY(ptregs_##name) ; \
|
|
||||||
leal 4(%esp),%eax; \
|
|
||||||
jmp sys_##name; \
|
|
||||||
ENDPROC(ptregs_##name)
|
|
||||||
|
|
||||||
#define PTREGSCALL1(name) \
|
#define PTREGSCALL1(name) \
|
||||||
ENTRY(ptregs_##name) ; \
|
ENTRY(ptregs_##name) ; \
|
||||||
leal 4(%esp),%edx; \
|
leal 4(%esp),%edx; \
|
||||||
@ -723,23 +717,6 @@ ENTRY(ptregs_##name) ; \
|
|||||||
jmp sys_##name; \
|
jmp sys_##name; \
|
||||||
ENDPROC(ptregs_##name)
|
ENDPROC(ptregs_##name)
|
||||||
|
|
||||||
#define PTREGSCALL3(name) \
|
|
||||||
ENTRY(ptregs_##name) ; \
|
|
||||||
CFI_STARTPROC; \
|
|
||||||
leal 4(%esp),%eax; \
|
|
||||||
pushl_cfi %eax; \
|
|
||||||
movl PT_EDX(%eax),%ecx; \
|
|
||||||
movl PT_ECX(%eax),%edx; \
|
|
||||||
movl PT_EBX(%eax),%eax; \
|
|
||||||
call sys_##name; \
|
|
||||||
addl $4,%esp; \
|
|
||||||
CFI_ADJUST_CFA_OFFSET -4; \
|
|
||||||
ret; \
|
|
||||||
CFI_ENDPROC; \
|
|
||||||
ENDPROC(ptregs_##name)
|
|
||||||
|
|
||||||
PTREGSCALL0(sigreturn)
|
|
||||||
PTREGSCALL0(rt_sigreturn)
|
|
||||||
PTREGSCALL2(vm86)
|
PTREGSCALL2(vm86)
|
||||||
PTREGSCALL1(vm86old)
|
PTREGSCALL1(vm86old)
|
||||||
|
|
||||||
|
@ -896,7 +896,6 @@ ENTRY(stub_rt_sigreturn)
|
|||||||
addq $8, %rsp
|
addq $8, %rsp
|
||||||
PARTIAL_FRAME 0
|
PARTIAL_FRAME 0
|
||||||
SAVE_REST
|
SAVE_REST
|
||||||
movq %rsp,%rdi
|
|
||||||
FIXUP_TOP_OF_STACK %r11
|
FIXUP_TOP_OF_STACK %r11
|
||||||
call sys_rt_sigreturn
|
call sys_rt_sigreturn
|
||||||
movq %rax,RAX(%rsp) # fixme, this could be done at the higher layer
|
movq %rax,RAX(%rsp) # fixme, this could be done at the higher layer
|
||||||
@ -911,7 +910,6 @@ ENTRY(stub_x32_rt_sigreturn)
|
|||||||
addq $8, %rsp
|
addq $8, %rsp
|
||||||
PARTIAL_FRAME 0
|
PARTIAL_FRAME 0
|
||||||
SAVE_REST
|
SAVE_REST
|
||||||
movq %rsp,%rdi
|
|
||||||
FIXUP_TOP_OF_STACK %r11
|
FIXUP_TOP_OF_STACK %r11
|
||||||
call sys32_x32_rt_sigreturn
|
call sys32_x32_rt_sigreturn
|
||||||
movq %rax,RAX(%rsp) # fixme, this could be done at the higher layer
|
movq %rax,RAX(%rsp) # fixme, this could be done at the higher layer
|
||||||
|
@ -597,8 +597,9 @@ sys_sigaction(int sig, const struct old_sigaction __user *act,
|
|||||||
* Do a signal return; undo the signal stack.
|
* Do a signal return; undo the signal stack.
|
||||||
*/
|
*/
|
||||||
#ifdef CONFIG_X86_32
|
#ifdef CONFIG_X86_32
|
||||||
unsigned long sys_sigreturn(struct pt_regs *regs)
|
unsigned long sys_sigreturn(void)
|
||||||
{
|
{
|
||||||
|
struct pt_regs *regs = current_pt_regs();
|
||||||
struct sigframe __user *frame;
|
struct sigframe __user *frame;
|
||||||
unsigned long ax;
|
unsigned long ax;
|
||||||
sigset_t set;
|
sigset_t set;
|
||||||
@ -625,8 +626,9 @@ badframe:
|
|||||||
}
|
}
|
||||||
#endif /* CONFIG_X86_32 */
|
#endif /* CONFIG_X86_32 */
|
||||||
|
|
||||||
long sys_rt_sigreturn(struct pt_regs *regs)
|
long sys_rt_sigreturn(void)
|
||||||
{
|
{
|
||||||
|
struct pt_regs *regs = current_pt_regs();
|
||||||
struct rt_sigframe __user *frame;
|
struct rt_sigframe __user *frame;
|
||||||
unsigned long ax;
|
unsigned long ax;
|
||||||
sigset_t set;
|
sigset_t set;
|
||||||
@ -843,8 +845,9 @@ void signal_fault(struct pt_regs *regs, void __user *frame, char *where)
|
|||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_X86_X32_ABI
|
#ifdef CONFIG_X86_X32_ABI
|
||||||
asmlinkage long sys32_x32_rt_sigreturn(struct pt_regs *regs)
|
asmlinkage long sys32_x32_rt_sigreturn(void)
|
||||||
{
|
{
|
||||||
|
struct pt_regs *regs = current_pt_regs();
|
||||||
struct rt_sigframe_x32 __user *frame;
|
struct rt_sigframe_x32 __user *frame;
|
||||||
sigset_t set;
|
sigset_t set;
|
||||||
unsigned long ax;
|
unsigned long ax;
|
||||||
|
@ -125,7 +125,7 @@
|
|||||||
116 i386 sysinfo sys_sysinfo compat_sys_sysinfo
|
116 i386 sysinfo sys_sysinfo compat_sys_sysinfo
|
||||||
117 i386 ipc sys_ipc sys32_ipc
|
117 i386 ipc sys_ipc sys32_ipc
|
||||||
118 i386 fsync sys_fsync
|
118 i386 fsync sys_fsync
|
||||||
119 i386 sigreturn ptregs_sigreturn stub32_sigreturn
|
119 i386 sigreturn sys_sigreturn stub32_sigreturn
|
||||||
120 i386 clone sys_clone stub32_clone
|
120 i386 clone sys_clone stub32_clone
|
||||||
121 i386 setdomainname sys_setdomainname
|
121 i386 setdomainname sys_setdomainname
|
||||||
122 i386 uname sys_newuname
|
122 i386 uname sys_newuname
|
||||||
@ -179,7 +179,7 @@
|
|||||||
170 i386 setresgid sys_setresgid16
|
170 i386 setresgid sys_setresgid16
|
||||||
171 i386 getresgid sys_getresgid16
|
171 i386 getresgid sys_getresgid16
|
||||||
172 i386 prctl sys_prctl
|
172 i386 prctl sys_prctl
|
||||||
173 i386 rt_sigreturn ptregs_rt_sigreturn stub32_rt_sigreturn
|
173 i386 rt_sigreturn sys_rt_sigreturn stub32_rt_sigreturn
|
||||||
174 i386 rt_sigaction sys_rt_sigaction sys32_rt_sigaction
|
174 i386 rt_sigaction sys_rt_sigaction sys32_rt_sigaction
|
||||||
175 i386 rt_sigprocmask sys_rt_sigprocmask
|
175 i386 rt_sigprocmask sys_rt_sigprocmask
|
||||||
176 i386 rt_sigpending sys_rt_sigpending sys32_rt_sigpending
|
176 i386 rt_sigpending sys_rt_sigpending sys32_rt_sigpending
|
||||||
|
@ -464,7 +464,7 @@ int setup_signal_stack_si(unsigned long stack_top, int sig,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
long sys_sigreturn(struct pt_regs *regs)
|
long sys_sigreturn(void)
|
||||||
{
|
{
|
||||||
unsigned long sp = PT_REGS_SP(¤t->thread.regs);
|
unsigned long sp = PT_REGS_SP(¤t->thread.regs);
|
||||||
struct sigframe __user *frame = (struct sigframe __user *)(sp - 8);
|
struct sigframe __user *frame = (struct sigframe __user *)(sp - 8);
|
||||||
@ -577,7 +577,7 @@ int setup_signal_stack_si(unsigned long stack_top, int sig,
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
long sys_rt_sigreturn(struct pt_regs *regs)
|
long sys_rt_sigreturn(void)
|
||||||
{
|
{
|
||||||
unsigned long sp = PT_REGS_SP(¤t->thread.regs);
|
unsigned long sp = PT_REGS_SP(¤t->thread.regs);
|
||||||
struct rt_sigframe __user *frame =
|
struct rt_sigframe __user *frame =
|
||||||
@ -601,14 +601,3 @@ long sys_rt_sigreturn(struct pt_regs *regs)
|
|||||||
force_sig(SIGSEGV, current);
|
force_sig(SIGSEGV, current);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_X86_32
|
|
||||||
long ptregs_sigreturn(void)
|
|
||||||
{
|
|
||||||
return sys_sigreturn(NULL);
|
|
||||||
}
|
|
||||||
long ptregs_rt_sigreturn(void)
|
|
||||||
{
|
|
||||||
return sys_rt_sigreturn(NULL);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user