xref: /linux/arch/mips/kernel/signal-common.h (revision c0b9bae9)
1 /*
2  * This file is subject to the terms and conditions of the GNU General Public
3  * License.  See the file "COPYING" in the main directory of this archive
4  * for more details.
5  *
6  * Copyright (C) 1991, 1992  Linus Torvalds
7  * Copyright (C) 1994 - 2000  Ralf Baechle
8  * Copyright (C) 1999, 2000 Silicon Graphics, Inc.
9  */
10 
11 #ifndef __SIGNAL_COMMON_H
12 #define __SIGNAL_COMMON_H
13 
14 /*
15  * Horribly complicated - with the bloody RM9000 workarounds enabled
16  * the signal trampolines is moving to the end of the structure so we can
17  * increase the alignment without breaking software compatibility.
18  */
19 #if ICACHE_REFILLS_WORKAROUND_WAR == 0
20 
21 struct sigframe {
22 	u32 sf_ass[4];		/* argument save space for o32 */
23 	u32 sf_code[2];		/* signal trampoline */
24 	struct sigcontext sf_sc;
25 	sigset_t sf_mask;
26 };
27 
28 #else  /* ICACHE_REFILLS_WORKAROUND_WAR */
29 
30 struct sigframe {
31 	u32 sf_ass[4];			/* argument save space for o32 */
32 	u32 sf_pad[2];
33 	struct sigcontext sf_sc;	/* hw context */
34 	sigset_t sf_mask;
35 	u32 sf_code[8] ____cacheline_aligned;	/* signal trampoline */
36 };
37 
38 #endif	/* !ICACHE_REFILLS_WORKAROUND_WAR */
39 
40 /*
41  * handle hardware context
42  */
43 extern int setup_sigcontext(struct pt_regs *, struct sigcontext __user *);
44 extern int restore_sigcontext(struct pt_regs *, struct sigcontext __user *);
45 
46 /*
47  * Determine which stack to use..
48  */
49 extern void __user *get_sigframe(struct k_sigaction *ka, struct pt_regs *regs,
50 				 size_t frame_size);
51 /*
52  * install trampoline code to get back from the sig handler
53  */
54 extern int install_sigtramp(unsigned int __user *tramp, unsigned int syscall);
55 
56 #endif	/* __SIGNAL_COMMON_H */
57