blob: 9a8abd67ec5c94a0bad855251f296d2f07be8bf3 [file] [log] [blame]
Linus Torvalds1da177e2005-04-16 15:20:36 -07001/*
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
Franck Bui-Huuc3fc4ab2007-02-05 15:24:20 +010011#ifndef __SIGNAL_COMMON_H
12#define __SIGNAL_COMMON_H
Ralf Baechlee50c0a82005-05-31 11:49:19 +000013
Franck Bui-Huu722bb632007-02-05 15:24:24 +010014/* #define DEBUG_SIG */
15
16#ifdef DEBUG_SIG
17# define DEBUGP(fmt, args...) printk("%s: " fmt, __FUNCTION__ , ##args)
18#else
19# define DEBUGP(fmt, args...)
20#endif
21
Franck Bui-Huuc3fc4ab2007-02-05 15:24:20 +010022/*
Franck Bui-Huuc0b9bae2007-02-05 15:24:21 +010023 * Horribly complicated - with the bloody RM9000 workarounds enabled
24 * the signal trampolines is moving to the end of the structure so we can
25 * increase the alignment without breaking software compatibility.
26 */
27#if ICACHE_REFILLS_WORKAROUND_WAR == 0
28
29struct sigframe {
30 u32 sf_ass[4]; /* argument save space for o32 */
31 u32 sf_code[2]; /* signal trampoline */
32 struct sigcontext sf_sc;
33 sigset_t sf_mask;
34};
35
36#else /* ICACHE_REFILLS_WORKAROUND_WAR */
37
38struct sigframe {
39 u32 sf_ass[4]; /* argument save space for o32 */
40 u32 sf_pad[2];
41 struct sigcontext sf_sc; /* hw context */
42 sigset_t sf_mask;
43 u32 sf_code[8] ____cacheline_aligned; /* signal trampoline */
44};
45
46#endif /* !ICACHE_REFILLS_WORKAROUND_WAR */
47
48/*
Franck Bui-Huuc3fc4ab2007-02-05 15:24:20 +010049 * handle hardware context
50 */
51extern int setup_sigcontext(struct pt_regs *, struct sigcontext __user *);
52extern int restore_sigcontext(struct pt_regs *, struct sigcontext __user *);
Linus Torvalds1da177e2005-04-16 15:20:36 -070053
54/*
55 * Determine which stack to use..
56 */
Franck Bui-Huuc3fc4ab2007-02-05 15:24:20 +010057extern void __user *get_sigframe(struct k_sigaction *ka, struct pt_regs *regs,
58 size_t frame_size);
59/*
60 * install trampoline code to get back from the sig handler
61 */
62extern int install_sigtramp(unsigned int __user *tramp, unsigned int syscall);
Linus Torvalds1da177e2005-04-16 15:20:36 -070063
Franck Bui-Huuc3fc4ab2007-02-05 15:24:20 +010064#endif /* __SIGNAL_COMMON_H */