diff options
author | Yoshinori Sato <ysato@users.sourceforge.jp> | 2006-12-11 19:11:45 -0500 |
---|---|---|
committer | Paul Mundt <lethal@linux-sh.org> | 2006-12-11 19:11:45 -0500 |
commit | e9cfc147df99790a7d260e9d20b865fa31ec56da (patch) | |
tree | 97a7428d70e2c6afe81a084a929ac15999e8ed13 /arch/sh/kernel/cpu/sh2 | |
parent | b641fe016a29fe2c0c7b0d717a5918e3f067a44f (diff) |
sh: Fixup SH-2 BUG() trap handling.
This adds in support for the BUG() trap on SH-2.
Signed-off-by: Yoshinori Sato <ysato@users.sourceforge.jp>
Signed-off-by: Paul Mundt <lethal@linux-sh.org>
Diffstat (limited to 'arch/sh/kernel/cpu/sh2')
-rw-r--r-- | arch/sh/kernel/cpu/sh2/entry.S | 32 |
1 files changed, 14 insertions, 18 deletions
diff --git a/arch/sh/kernel/cpu/sh2/entry.S b/arch/sh/kernel/cpu/sh2/entry.S index 34d51b3745ea..d51fa5e9904a 100644 --- a/arch/sh/kernel/cpu/sh2/entry.S +++ b/arch/sh/kernel/cpu/sh2/entry.S | |||
@@ -177,15 +177,21 @@ interrupt_entry: | |||
177 | 7: .long do_IRQ | 177 | 7: .long do_IRQ |
178 | 8: .long do_exception_error | 178 | 8: .long do_exception_error |
179 | 179 | ||
180 | trap_entry: | 180 | trap_entry: |
181 | add #-0x10,r9 | 181 | /* verbose BUG trapa entry check */ |
182 | mov #0x3e,r8 | ||
183 | cmp/ge r8,r9 | ||
184 | bf/s 1f | ||
185 | add #-0x10,r9 | ||
186 | add #0x10,r9 | ||
187 | 1: | ||
182 | shll2 r9 ! TRA | 188 | shll2 r9 ! TRA |
183 | mov #OFF_TRA,r8 | 189 | mov #OFF_TRA,r8 |
184 | add r15,r8 | 190 | add r15,r8 |
185 | mov.l r9,@r8 | 191 | mov.l r9,@r8 |
186 | mov r9,r8 | 192 | mov r9,r8 |
187 | #ifdef CONFIG_TRACE_IRQFLAGS | 193 | #ifdef CONFIG_TRACE_IRQFLAGS |
188 | mov.l 5f, r9 | 194 | mov.l 2f, r9 |
189 | jsr @r9 | 195 | jsr @r9 |
190 | nop | 196 | nop |
191 | #endif | 197 | #endif |
@@ -194,12 +200,8 @@ trap_entry: | |||
194 | nop | 200 | nop |
195 | 201 | ||
196 | .align 2 | 202 | .align 2 |
197 | 1: .long syscall_exit | ||
198 | 2: .long break_point_trap_software | ||
199 | 3: .long NR_syscalls | ||
200 | 4: .long sys_call_table | ||
201 | #ifdef CONFIG_TRACE_IRQFLAGS | 203 | #ifdef CONFIG_TRACE_IRQFLAGS |
202 | 5: .long trace_hardirqs_on | 204 | 2: .long trace_hardirqs_on |
203 | #endif | 205 | #endif |
204 | 206 | ||
205 | #if defined(CONFIG_SH_STANDARD_BIOS) | 207 | #if defined(CONFIG_SH_STANDARD_BIOS) |
@@ -264,7 +266,7 @@ ENTRY(address_error_handler) | |||
264 | restore_all: | 266 | restore_all: |
265 | cli | 267 | cli |
266 | #ifdef CONFIG_TRACE_IRQFLAGS | 268 | #ifdef CONFIG_TRACE_IRQFLAGS |
267 | mov.l 3f, r0 | 269 | mov.l 1f, r0 |
268 | jsr @r0 | 270 | jsr @r0 |
269 | nop | 271 | nop |
270 | #endif | 272 | #endif |
@@ -309,20 +311,14 @@ restore_all: | |||
309 | mov.l @r15,r15 | 311 | mov.l @r15,r15 |
310 | rte | 312 | rte |
311 | nop | 313 | nop |
312 | 2: | ||
313 | mov.l 1f,r8 | ||
314 | mov.l 2f,r9 | ||
315 | jmp @r9 | ||
316 | lds r8,pr | ||
317 | 314 | ||
318 | .align 2 | 315 | #ifdef CONFIG_TRACE_IRQFLAGS |
316 | 1: .long trace_hardirqs_off | ||
317 | #endif | ||
319 | $current_thread_info: | 318 | $current_thread_info: |
320 | .long __current_thread_info | 319 | .long __current_thread_info |
321 | $cpu_mode: | 320 | $cpu_mode: |
322 | .long __cpu_mode | 321 | .long __cpu_mode |
323 | #ifdef CONFIG_TRACE_IRQFLAGS | ||
324 | 3: .long trace_hardirqs_off | ||
325 | #endif | ||
326 | 322 | ||
327 | ! common exception handler | 323 | ! common exception handler |
328 | #include "../../entry-common.S" | 324 | #include "../../entry-common.S" |