diff options
Diffstat (limited to 'include/asm-sparc64')
-rw-r--r-- | include/asm-sparc64/psrcompat.h | 2 | ||||
-rw-r--r-- | include/asm-sparc64/pstate.h | 1 | ||||
-rw-r--r-- | include/asm-sparc64/ptrace.h | 10 | ||||
-rw-r--r-- | include/asm-sparc64/signal.h | 8 | ||||
-rw-r--r-- | include/asm-sparc64/ttable.h | 7 |
5 files changed, 12 insertions, 16 deletions
diff --git a/include/asm-sparc64/psrcompat.h b/include/asm-sparc64/psrcompat.h index 5590ce6bd076..3614ca04753f 100644 --- a/include/asm-sparc64/psrcompat.h +++ b/include/asm-sparc64/psrcompat.h | |||
@@ -12,6 +12,7 @@ | |||
12 | #define PSR_PIL 0x00000f00 /* processor interrupt level */ | 12 | #define PSR_PIL 0x00000f00 /* processor interrupt level */ |
13 | #define PSR_EF 0x00001000 /* enable floating point */ | 13 | #define PSR_EF 0x00001000 /* enable floating point */ |
14 | #define PSR_EC 0x00002000 /* enable co-processor */ | 14 | #define PSR_EC 0x00002000 /* enable co-processor */ |
15 | #define PSR_SYSCALL 0x00004000 /* inside of a syscall */ | ||
15 | #define PSR_LE 0x00008000 /* SuperSparcII little-endian */ | 16 | #define PSR_LE 0x00008000 /* SuperSparcII little-endian */ |
16 | #define PSR_ICC 0x00f00000 /* integer condition codes */ | 17 | #define PSR_ICC 0x00f00000 /* integer condition codes */ |
17 | #define PSR_C 0x00100000 /* carry bit */ | 18 | #define PSR_C 0x00100000 /* carry bit */ |
@@ -30,6 +31,7 @@ static inline unsigned int tstate_to_psr(unsigned long tstate) | |||
30 | PSR_S | | 31 | PSR_S | |
31 | ((tstate & TSTATE_ICC) >> 12) | | 32 | ((tstate & TSTATE_ICC) >> 12) | |
32 | ((tstate & TSTATE_XCC) >> 20) | | 33 | ((tstate & TSTATE_XCC) >> 20) | |
34 | ((tstate & TSTATE_SYSCALL) ? PSR_SYSCALL : 0) | | ||
33 | PSR_V8PLUS); | 35 | PSR_V8PLUS); |
34 | } | 36 | } |
35 | 37 | ||
diff --git a/include/asm-sparc64/pstate.h b/include/asm-sparc64/pstate.h index f3c45484c636..949aebaf991d 100644 --- a/include/asm-sparc64/pstate.h +++ b/include/asm-sparc64/pstate.h | |||
@@ -62,6 +62,7 @@ | |||
62 | #define TSTATE_PRIV _AC(0x0000000000000400,UL) /* Privilege. */ | 62 | #define TSTATE_PRIV _AC(0x0000000000000400,UL) /* Privilege. */ |
63 | #define TSTATE_IE _AC(0x0000000000000200,UL) /* Interrupt Enable. */ | 63 | #define TSTATE_IE _AC(0x0000000000000200,UL) /* Interrupt Enable. */ |
64 | #define TSTATE_AG _AC(0x0000000000000100,UL) /* Alternate Globals.*/ | 64 | #define TSTATE_AG _AC(0x0000000000000100,UL) /* Alternate Globals.*/ |
65 | #define TSTATE_SYSCALL _AC(0x0000000000000020,UL) /* in syscall trap */ | ||
65 | #define TSTATE_CWP _AC(0x000000000000001f,UL) /* Curr Win-Pointer. */ | 66 | #define TSTATE_CWP _AC(0x000000000000001f,UL) /* Curr Win-Pointer. */ |
66 | 67 | ||
67 | /* Floating-Point Registers State Register. | 68 | /* Floating-Point Registers State Register. |
diff --git a/include/asm-sparc64/ptrace.h b/include/asm-sparc64/ptrace.h index 823656559d1a..90972a5ada59 100644 --- a/include/asm-sparc64/ptrace.h +++ b/include/asm-sparc64/ptrace.h | |||
@@ -42,16 +42,14 @@ static inline int pt_regs_trap_type(struct pt_regs *regs) | |||
42 | return regs->magic & 0x1ff; | 42 | return regs->magic & 0x1ff; |
43 | } | 43 | } |
44 | 44 | ||
45 | static inline int pt_regs_clear_trap_type(struct pt_regs *regs) | 45 | static inline bool pt_regs_is_syscall(struct pt_regs *regs) |
46 | { | 46 | { |
47 | return regs->magic &= ~0x1ff; | 47 | return (regs->tstate & TSTATE_SYSCALL); |
48 | } | 48 | } |
49 | 49 | ||
50 | static inline bool pt_regs_is_syscall(struct pt_regs *regs) | 50 | static inline bool pt_regs_clear_syscall(struct pt_regs *regs) |
51 | { | 51 | { |
52 | int tt = pt_regs_trap_type(regs); | 52 | return (regs->tstate &= ~TSTATE_SYSCALL); |
53 | |||
54 | return (tt == 0x110 || tt == 0x111 || tt == 0x16d); | ||
55 | } | 53 | } |
56 | 54 | ||
57 | struct pt_regs32 { | 55 | struct pt_regs32 { |
diff --git a/include/asm-sparc64/signal.h b/include/asm-sparc64/signal.h index fa6f467389db..c49f32d38707 100644 --- a/include/asm-sparc64/signal.h +++ b/include/asm-sparc64/signal.h | |||
@@ -186,13 +186,7 @@ struct k_sigaction { | |||
186 | void __user *ka_restorer; | 186 | void __user *ka_restorer; |
187 | }; | 187 | }; |
188 | 188 | ||
189 | struct signal_deliver_cookie { | 189 | #define ptrace_signal_deliver(regs, cookie) do { } while (0) |
190 | int restart_syscall; | ||
191 | unsigned long orig_i0; | ||
192 | }; | ||
193 | |||
194 | struct pt_regs; | ||
195 | extern void ptrace_signal_deliver(struct pt_regs *regs, void *cookie); | ||
196 | 190 | ||
197 | #endif /* !(__KERNEL__) */ | 191 | #endif /* !(__KERNEL__) */ |
198 | 192 | ||
diff --git a/include/asm-sparc64/ttable.h b/include/asm-sparc64/ttable.h index 1b55538b944f..52d67d394107 100644 --- a/include/asm-sparc64/ttable.h +++ b/include/asm-sparc64/ttable.h | |||
@@ -91,13 +91,14 @@ | |||
91 | nop; | 91 | nop; |
92 | 92 | ||
93 | #define SYSCALL_TRAP(routine, systbl) \ | 93 | #define SYSCALL_TRAP(routine, systbl) \ |
94 | rdpr %pil, %g2; \ | ||
95 | mov TSTATE_SYSCALL, %g3; \ | ||
94 | sethi %hi(109f), %g7; \ | 96 | sethi %hi(109f), %g7; \ |
95 | ba,pt %xcc, etrap; \ | 97 | ba,pt %xcc, etrap_syscall; \ |
96 | 109: or %g7, %lo(109b), %g7; \ | 98 | 109: or %g7, %lo(109b), %g7; \ |
97 | sethi %hi(systbl), %l7; \ | 99 | sethi %hi(systbl), %l7; \ |
98 | ba,pt %xcc, routine; \ | 100 | ba,pt %xcc, routine; \ |
99 | or %l7, %lo(systbl), %l7; \ | 101 | or %l7, %lo(systbl), %l7; |
100 | nop; nop; | ||
101 | 102 | ||
102 | #define TRAP_UTRAP(handler,lvl) \ | 103 | #define TRAP_UTRAP(handler,lvl) \ |
103 | mov handler, %g3; \ | 104 | mov handler, %g3; \ |