1caab277bSThomas Gleixner /* SPDX-License-Identifier: GPL-2.0-only */
23dd681d9SWill Deacon /*
33dd681d9SWill Deacon * Copyright (C) 2012 ARM Ltd.
43dd681d9SWill Deacon */
53dd681d9SWill Deacon #ifndef __ASM_SIGNAL32_H
63dd681d9SWill Deacon #define __ASM_SIGNAL32_H
73dd681d9SWill Deacon
83dd681d9SWill Deacon #ifdef CONFIG_COMPAT
93dd681d9SWill Deacon #include <linux/compat.h>
103dd681d9SWill Deacon
11*206c0dfaSVincenzo Frascino struct compat_sigcontext {
12*206c0dfaSVincenzo Frascino /* We always set these two fields to 0 */
13*206c0dfaSVincenzo Frascino compat_ulong_t trap_no;
14*206c0dfaSVincenzo Frascino compat_ulong_t error_code;
15*206c0dfaSVincenzo Frascino
16*206c0dfaSVincenzo Frascino compat_ulong_t oldmask;
17*206c0dfaSVincenzo Frascino compat_ulong_t arm_r0;
18*206c0dfaSVincenzo Frascino compat_ulong_t arm_r1;
19*206c0dfaSVincenzo Frascino compat_ulong_t arm_r2;
20*206c0dfaSVincenzo Frascino compat_ulong_t arm_r3;
21*206c0dfaSVincenzo Frascino compat_ulong_t arm_r4;
22*206c0dfaSVincenzo Frascino compat_ulong_t arm_r5;
23*206c0dfaSVincenzo Frascino compat_ulong_t arm_r6;
24*206c0dfaSVincenzo Frascino compat_ulong_t arm_r7;
25*206c0dfaSVincenzo Frascino compat_ulong_t arm_r8;
26*206c0dfaSVincenzo Frascino compat_ulong_t arm_r9;
27*206c0dfaSVincenzo Frascino compat_ulong_t arm_r10;
28*206c0dfaSVincenzo Frascino compat_ulong_t arm_fp;
29*206c0dfaSVincenzo Frascino compat_ulong_t arm_ip;
30*206c0dfaSVincenzo Frascino compat_ulong_t arm_sp;
31*206c0dfaSVincenzo Frascino compat_ulong_t arm_lr;
32*206c0dfaSVincenzo Frascino compat_ulong_t arm_pc;
33*206c0dfaSVincenzo Frascino compat_ulong_t arm_cpsr;
34*206c0dfaSVincenzo Frascino compat_ulong_t fault_address;
35*206c0dfaSVincenzo Frascino };
36*206c0dfaSVincenzo Frascino
37*206c0dfaSVincenzo Frascino struct compat_ucontext {
38*206c0dfaSVincenzo Frascino compat_ulong_t uc_flags;
39*206c0dfaSVincenzo Frascino compat_uptr_t uc_link;
40*206c0dfaSVincenzo Frascino compat_stack_t uc_stack;
41*206c0dfaSVincenzo Frascino struct compat_sigcontext uc_mcontext;
42*206c0dfaSVincenzo Frascino compat_sigset_t uc_sigmask;
43*206c0dfaSVincenzo Frascino int __unused[32 - (sizeof(compat_sigset_t) / sizeof(int))];
44*206c0dfaSVincenzo Frascino compat_ulong_t uc_regspace[128] __attribute__((__aligned__(8)));
45*206c0dfaSVincenzo Frascino };
46*206c0dfaSVincenzo Frascino
47*206c0dfaSVincenzo Frascino struct compat_sigframe {
48*206c0dfaSVincenzo Frascino struct compat_ucontext uc;
49*206c0dfaSVincenzo Frascino compat_ulong_t retcode[2];
50*206c0dfaSVincenzo Frascino };
51*206c0dfaSVincenzo Frascino
52*206c0dfaSVincenzo Frascino struct compat_rt_sigframe {
53*206c0dfaSVincenzo Frascino struct compat_siginfo info;
54*206c0dfaSVincenzo Frascino struct compat_sigframe sig;
55*206c0dfaSVincenzo Frascino };
56*206c0dfaSVincenzo Frascino
5700554fa4SRichard Weinberger int compat_setup_frame(int usig, struct ksignal *ksig, sigset_t *set,
583dd681d9SWill Deacon struct pt_regs *regs);
5900554fa4SRichard Weinberger int compat_setup_rt_frame(int usig, struct ksignal *ksig, sigset_t *set,
6000554fa4SRichard Weinberger struct pt_regs *regs);
613dd681d9SWill Deacon
623dd681d9SWill Deacon void compat_setup_restart_syscall(struct pt_regs *regs);
633dd681d9SWill Deacon #else
643dd681d9SWill Deacon
compat_setup_frame(int usid,struct ksignal * ksig,sigset_t * set,struct pt_regs * regs)6500554fa4SRichard Weinberger static inline int compat_setup_frame(int usid, struct ksignal *ksig,
663dd681d9SWill Deacon sigset_t *set, struct pt_regs *regs)
673dd681d9SWill Deacon {
683dd681d9SWill Deacon return -ENOSYS;
693dd681d9SWill Deacon }
703dd681d9SWill Deacon
compat_setup_rt_frame(int usig,struct ksignal * ksig,sigset_t * set,struct pt_regs * regs)7100554fa4SRichard Weinberger static inline int compat_setup_rt_frame(int usig, struct ksignal *ksig, sigset_t *set,
723dd681d9SWill Deacon struct pt_regs *regs)
733dd681d9SWill Deacon {
743dd681d9SWill Deacon return -ENOSYS;
753dd681d9SWill Deacon }
763dd681d9SWill Deacon
compat_setup_restart_syscall(struct pt_regs * regs)773dd681d9SWill Deacon static inline void compat_setup_restart_syscall(struct pt_regs *regs)
783dd681d9SWill Deacon {
793dd681d9SWill Deacon }
803dd681d9SWill Deacon #endif /* CONFIG_COMPAT */
813dd681d9SWill Deacon #endif /* __ASM_SIGNAL32_H */
82