xref: /linux/arch/arm64/include/asm/signal32.h (revision b907b80d)
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