1/* SPDX-License-Identifier: GPL-2.0-only */
2/*
3 * Copyright (C) 2012 ARM Ltd.
4 */
5#ifndef __ASM_SIGNAL32_H
6#define __ASM_SIGNAL32_H
7
8#ifdef CONFIG_COMPAT
9#include <linux/compat.h>
10
11struct compat_sigcontext {
12	/* We always set these two fields to 0 */
13	compat_ulong_t			trap_no;
14	compat_ulong_t			error_code;
15
16	compat_ulong_t			oldmask;
17	compat_ulong_t			arm_r0;
18	compat_ulong_t			arm_r1;
19	compat_ulong_t			arm_r2;
20	compat_ulong_t			arm_r3;
21	compat_ulong_t			arm_r4;
22	compat_ulong_t			arm_r5;
23	compat_ulong_t			arm_r6;
24	compat_ulong_t			arm_r7;
25	compat_ulong_t			arm_r8;
26	compat_ulong_t			arm_r9;
27	compat_ulong_t			arm_r10;
28	compat_ulong_t			arm_fp;
29	compat_ulong_t			arm_ip;
30	compat_ulong_t			arm_sp;
31	compat_ulong_t			arm_lr;
32	compat_ulong_t			arm_pc;
33	compat_ulong_t			arm_cpsr;
34	compat_ulong_t			fault_address;
35};
36
37struct compat_ucontext {
38	compat_ulong_t			uc_flags;
39	compat_uptr_t			uc_link;
40	compat_stack_t			uc_stack;
41	struct compat_sigcontext	uc_mcontext;
42	compat_sigset_t			uc_sigmask;
43	int 				__unused[32 - (sizeof(compat_sigset_t) / sizeof(int))];
44	compat_ulong_t			uc_regspace[128] __attribute__((__aligned__(8)));
45};
46
47struct compat_sigframe {
48	struct compat_ucontext	uc;
49	compat_ulong_t		retcode[2];
50};
51
52struct compat_rt_sigframe {
53	struct compat_siginfo info;
54	struct compat_sigframe sig;
55};
56
57int compat_setup_frame(int usig, struct ksignal *ksig, sigset_t *set,
58		       struct pt_regs *regs);
59int compat_setup_rt_frame(int usig, struct ksignal *ksig, sigset_t *set,
60			  struct pt_regs *regs);
61
62void compat_setup_restart_syscall(struct pt_regs *regs);
63#else
64
65static inline int compat_setup_frame(int usid, struct ksignal *ksig,
66				     sigset_t *set, struct pt_regs *regs)
67{
68	return -ENOSYS;
69}
70
71static inline int compat_setup_rt_frame(int usig, struct ksignal *ksig, sigset_t *set,
72					struct pt_regs *regs)
73{
74	return -ENOSYS;
75}
76
77static inline void compat_setup_restart_syscall(struct pt_regs *regs)
78{
79}
80#endif /* CONFIG_COMPAT */
81#endif /* __ASM_SIGNAL32_H */
82