• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2000 Jeff Dike (jdike@karaya.com)
3  * Licensed under the GPL
4  */
5 
6 #ifndef __SYS_SIGCONTEXT_PPC_H
7 #define __SYS_SIGCONTEXT_PPC_H
8 
9 #define DSISR_WRITE 0x02000000
10 
11 #define SC_FAULT_ADDR(sc) ({ \
12 		struct sigcontext *_sc = (sc); \
13 		long retval = -1; \
14 		switch (_sc->regs->trap) { \
15 		case 0x300: \
16 			/* data exception */ \
17 			retval = _sc->regs->dar; \
18 			break; \
19 		case 0x400: \
20 			/* instruction exception */ \
21 			retval = _sc->regs->nip; \
22 			break; \
23 		default: \
24 			panic("SC_FAULT_ADDR: unhandled trap type\n"); \
25 		} \
26 		retval; \
27 	})
28 
29 #define SC_FAULT_WRITE(sc) ({ \
30 		struct sigcontext *_sc = (sc); \
31 		long retval = -1; \
32 		switch (_sc->regs->trap) { \
33 		case 0x300: \
34 			/* data exception */ \
35 			retval = !!(_sc->regs->dsisr & DSISR_WRITE); \
36 			break; \
37 		case 0x400: \
38 			/* instruction exception: not a write */ \
39 			retval = 0; \
40 			break; \
41 		default: \
42 			panic("SC_FAULT_ADDR: unhandled trap type\n"); \
43 		} \
44 		retval; \
45 	})
46 
47 #define SC_IP(sc) ((sc)->regs->nip)
48 #define SC_SP(sc) ((sc)->regs->gpr[1])
49 #define SEGV_IS_FIXABLE(sc) (1)
50 
51 #endif
52 
53 /*
54  * Overrides for Emacs so that we follow Linus's tabbing style.
55  * Emacs will notice this stuff at the end of the file and automatically
56  * adjust the settings for this buffer only.  This must remain at the end
57  * of the file.
58  * ---------------------------------------------------------------------------
59  * Local variables:
60  * c-file-style: "linux"
61  * End:
62  */
63