|
@@ -50,12 +50,27 @@
|
|
|
# define FIX_EFLAGS __FIX_EFLAGS
|
|
|
#endif
|
|
|
|
|
|
+#ifdef CONFIG_X86_32
|
|
|
+asmlinkage int sys_sigaltstack(unsigned long bx)
|
|
|
+{
|
|
|
+ /*
|
|
|
+ * This is needed to make gcc realize it doesn't own the
|
|
|
+ * "struct pt_regs"
|
|
|
+ */
|
|
|
+ struct pt_regs *regs = (struct pt_regs *)&bx;
|
|
|
+ const stack_t __user *uss = (const stack_t __user *)bx;
|
|
|
+ stack_t __user *uoss = (stack_t __user *)regs->cx;
|
|
|
+
|
|
|
+ return do_sigaltstack(uss, uoss, regs->sp);
|
|
|
+}
|
|
|
+#else /* !CONFIG_X86_32 */
|
|
|
asmlinkage long
|
|
|
sys_sigaltstack(const stack_t __user *uss, stack_t __user *uoss,
|
|
|
struct pt_regs *regs)
|
|
|
{
|
|
|
return do_sigaltstack(uss, uoss, regs->sp);
|
|
|
}
|
|
|
+#endif /* CONFIG_X86_32 */
|
|
|
|
|
|
#define COPY(x) { \
|
|
|
err |= __get_user(regs->x, &sc->x); \
|