// SPDX-License-Identifier: GPL-2.0 /* * Copyright (C) 1995-2009 Russell King * Copyright (C) 2012 ARM Ltd. * Copyright (C) 2018 Cavium Networks. * Yury Norov */ #include #include #include #include #include #include #include #include #include #define get_sigset(s, m) get_sigset_t(s, m) #define put_sigset(s, m) put_sigset_t(m, s) #define restore_altstack(stack) compat_restore_altstack(stack) #define __save_altstack(stack, sp) __compat_save_altstack(stack, sp) #define copy_siginfo_to_user(frame_info, ksig_info) \ copy_siginfo_to_user32(frame_info, ksig_info) #define setup_return(regs, ka, user_layout, usig) \ { \ __setup_return(regs, ka, user_layout, usig); \ regs->regs[30] = \ (unsigned long)VDSO_SYMBOL(current->mm->context.vdso, \ sigtramp_ilp32); \ } struct ilp32_ucontext { u32 uc_flags; u32 uc_link; compat_stack_t uc_stack; compat_sigset_t uc_sigmask; /* glibc uses a 1024-bit sigset_t */ __u8 __unused[1024 / 8 - sizeof(compat_sigset_t)]; /* last for future expansion */ struct sigcontext uc_mcontext; }; struct rt_sigframe { struct compat_siginfo info; struct ilp32_ucontext uc; }; #include COMPAT_SYSCALL_DEFINE0(ilp32_rt_sigreturn) { struct pt_regs *regs = current_pt_regs(); return __sys_rt_sigreturn(regs); } int ilp32_setup_rt_frame(int usig, struct ksignal *ksig, sigset_t *set, struct pt_regs *regs) { return __setup_rt_frame(usig, ksig, set, regs); }