diff options
Diffstat (limited to 'arch/sparc/kernel')
-rw-r--r-- | arch/sparc/kernel/entry.S | 10 | ||||
-rw-r--r-- | arch/sparc/kernel/kernel.h | 1 | ||||
-rw-r--r-- | arch/sparc/kernel/kgdb_32.c | 11 | ||||
-rw-r--r-- | arch/sparc/kernel/setup_32.c | 4 |
4 files changed, 11 insertions, 15 deletions
diff --git a/arch/sparc/kernel/entry.S b/arch/sparc/kernel/entry.S index 51aa6e86a5f8..07918ab3062e 100644 --- a/arch/sparc/kernel/entry.S +++ b/arch/sparc/kernel/entry.S | |||
@@ -1225,20 +1225,18 @@ breakpoint_trap: | |||
1225 | RESTORE_ALL | 1225 | RESTORE_ALL |
1226 | 1226 | ||
1227 | #ifdef CONFIG_KGDB | 1227 | #ifdef CONFIG_KGDB |
1228 | .align 4 | 1228 | ENTRY(kgdb_trap_low) |
1229 | .globl kgdb_trap_low | ||
1230 | .type kgdb_trap_low,#function | ||
1231 | kgdb_trap_low: | ||
1232 | rd %wim,%l3 | 1229 | rd %wim,%l3 |
1233 | SAVE_ALL | 1230 | SAVE_ALL |
1234 | wr %l0, PSR_ET, %psr | 1231 | wr %l0, PSR_ET, %psr |
1235 | WRITE_PAUSE | 1232 | WRITE_PAUSE |
1236 | 1233 | ||
1234 | mov %l7, %o0 ! trap_level | ||
1237 | call kgdb_trap | 1235 | call kgdb_trap |
1238 | add %sp, STACKFRAME_SZ, %o0 | 1236 | add %sp, STACKFRAME_SZ, %o1 ! struct pt_regs *regs |
1239 | 1237 | ||
1240 | RESTORE_ALL | 1238 | RESTORE_ALL |
1241 | .size kgdb_trap_low,.-kgdb_trap_low | 1239 | ENDPROC(kgdb_trap_low) |
1242 | #endif | 1240 | #endif |
1243 | 1241 | ||
1244 | .align 4 | 1242 | .align 4 |
diff --git a/arch/sparc/kernel/kernel.h b/arch/sparc/kernel/kernel.h index 5057ec2e4af6..c9804551262c 100644 --- a/arch/sparc/kernel/kernel.h +++ b/arch/sparc/kernel/kernel.h | |||
@@ -127,6 +127,7 @@ extern unsigned int t_nmi[]; | |||
127 | extern unsigned int linux_trap_ipi15_sun4d[]; | 127 | extern unsigned int linux_trap_ipi15_sun4d[]; |
128 | extern unsigned int linux_trap_ipi15_sun4m[]; | 128 | extern unsigned int linux_trap_ipi15_sun4m[]; |
129 | 129 | ||
130 | extern struct tt_entry trapbase; | ||
130 | extern struct tt_entry trapbase_cpu1; | 131 | extern struct tt_entry trapbase_cpu1; |
131 | extern struct tt_entry trapbase_cpu2; | 132 | extern struct tt_entry trapbase_cpu2; |
132 | extern struct tt_entry trapbase_cpu3; | 133 | extern struct tt_entry trapbase_cpu3; |
diff --git a/arch/sparc/kernel/kgdb_32.c b/arch/sparc/kernel/kgdb_32.c index dcf210811af4..6e8e318c57be 100644 --- a/arch/sparc/kernel/kgdb_32.c +++ b/arch/sparc/kernel/kgdb_32.c | |||
@@ -12,7 +12,8 @@ | |||
12 | #include <asm/irq.h> | 12 | #include <asm/irq.h> |
13 | #include <asm/cacheflush.h> | 13 | #include <asm/cacheflush.h> |
14 | 14 | ||
15 | extern unsigned long trapbase; | 15 | #include "kernel.h" |
16 | #include "entry.h" | ||
16 | 17 | ||
17 | void pt_regs_to_gdb_regs(unsigned long *gdb_regs, struct pt_regs *regs) | 18 | void pt_regs_to_gdb_regs(unsigned long *gdb_regs, struct pt_regs *regs) |
18 | { | 19 | { |
@@ -133,21 +134,19 @@ int kgdb_arch_handle_exception(int e_vector, int signo, int err_code, | |||
133 | return -1; | 134 | return -1; |
134 | } | 135 | } |
135 | 136 | ||
136 | extern void do_hw_interrupt(struct pt_regs *regs, unsigned long type); | 137 | asmlinkage void kgdb_trap(unsigned long trap_level, struct pt_regs *regs) |
137 | |||
138 | asmlinkage void kgdb_trap(struct pt_regs *regs) | ||
139 | { | 138 | { |
140 | unsigned long flags; | 139 | unsigned long flags; |
141 | 140 | ||
142 | if (user_mode(regs)) { | 141 | if (user_mode(regs)) { |
143 | do_hw_interrupt(regs, 0xfd); | 142 | do_hw_interrupt(regs, trap_level); |
144 | return; | 143 | return; |
145 | } | 144 | } |
146 | 145 | ||
147 | flushw_all(); | 146 | flushw_all(); |
148 | 147 | ||
149 | local_irq_save(flags); | 148 | local_irq_save(flags); |
150 | kgdb_handle_exception(0x172, SIGTRAP, 0, regs); | 149 | kgdb_handle_exception(trap_level, SIGTRAP, 0, regs); |
151 | local_irq_restore(flags); | 150 | local_irq_restore(flags); |
152 | } | 151 | } |
153 | 152 | ||
diff --git a/arch/sparc/kernel/setup_32.c b/arch/sparc/kernel/setup_32.c index 69d75ff1c25c..c4e65cb3280f 100644 --- a/arch/sparc/kernel/setup_32.c +++ b/arch/sparc/kernel/setup_32.c | |||
@@ -68,8 +68,6 @@ struct screen_info screen_info = { | |||
68 | * prints out pretty messages and returns. | 68 | * prints out pretty messages and returns. |
69 | */ | 69 | */ |
70 | 70 | ||
71 | extern unsigned long trapbase; | ||
72 | |||
73 | /* Pretty sick eh? */ | 71 | /* Pretty sick eh? */ |
74 | static void prom_sync_me(void) | 72 | static void prom_sync_me(void) |
75 | { | 73 | { |
@@ -300,7 +298,7 @@ void __init setup_arch(char **cmdline_p) | |||
300 | int i; | 298 | int i; |
301 | unsigned long highest_paddr; | 299 | unsigned long highest_paddr; |
302 | 300 | ||
303 | sparc_ttable = (struct tt_entry *) &trapbase; | 301 | sparc_ttable = &trapbase; |
304 | 302 | ||
305 | /* Initialize PROM console and command line. */ | 303 | /* Initialize PROM console and command line. */ |
306 | *cmdline_p = prom_getbootargs(); | 304 | *cmdline_p = prom_getbootargs(); |