diff options
author | David S. Miller <davem@davemloft.net> | 2008-04-29 05:38:50 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2008-04-29 05:38:50 -0400 |
commit | e2fdd7fd99dd68b77caaf2a2272b75b5da890de7 (patch) | |
tree | d2b6d3a9b50e4d2ced793430d2b1414f790666a3 /include/asm-sparc64 | |
parent | 4d7ffa49909a830f5f926a3280731d01e29f31fb (diff) |
sparc: Add kgdb support.
Current limitations:
1) On SMP single stepping has some fundamental issues,
shared with other sw single-step architectures such
as mips and arm.
2) On 32-bit sparc we don't support SMP kgdb yet. That
requires some reworking of the IPI mechanisms and
infrastructure on that platform.
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'include/asm-sparc64')
-rw-r--r-- | include/asm-sparc64/kgdb.h | 1 | ||||
-rw-r--r-- | include/asm-sparc64/system.h | 5 | ||||
-rw-r--r-- | include/asm-sparc64/ttable.h | 6 |
3 files changed, 10 insertions, 2 deletions
diff --git a/include/asm-sparc64/kgdb.h b/include/asm-sparc64/kgdb.h new file mode 100644 index 000000000000..aa6532fd3a13 --- /dev/null +++ b/include/asm-sparc64/kgdb.h | |||
@@ -0,0 +1 @@ | |||
#include <asm-sparc/kgdb.h> | |||
diff --git a/include/asm-sparc64/system.h b/include/asm-sparc64/system.h index 53eae091a171..6897ac31be41 100644 --- a/include/asm-sparc64/system.h +++ b/include/asm-sparc64/system.h | |||
@@ -180,12 +180,13 @@ do { if (test_thread_flag(TIF_PERFCTR)) { \ | |||
180 | "ldx [%%sp + 2047 + 0x70], %%i6\n\t" \ | 180 | "ldx [%%sp + 2047 + 0x70], %%i6\n\t" \ |
181 | "ldx [%%sp + 2047 + 0x78], %%i7\n\t" \ | 181 | "ldx [%%sp + 2047 + 0x78], %%i7\n\t" \ |
182 | "ldx [%%g6 + %9], %%g4\n\t" \ | 182 | "ldx [%%g6 + %9], %%g4\n\t" \ |
183 | "brz,pt %%o7, 1f\n\t" \ | 183 | "brz,pt %%o7, switch_to_pc\n\t" \ |
184 | " mov %%g7, %0\n\t" \ | 184 | " mov %%g7, %0\n\t" \ |
185 | "sethi %%hi(ret_from_syscall), %%g1\n\t" \ | 185 | "sethi %%hi(ret_from_syscall), %%g1\n\t" \ |
186 | "jmpl %%g1 + %%lo(ret_from_syscall), %%g0\n\t" \ | 186 | "jmpl %%g1 + %%lo(ret_from_syscall), %%g0\n\t" \ |
187 | " nop\n\t" \ | 187 | " nop\n\t" \ |
188 | "1:\n\t" \ | 188 | ".globl switch_to_pc\n\t" \ |
189 | "switch_to_pc:\n\t" \ | ||
189 | : "=&r" (last), "=r" (current), "=r" (current_thread_info_reg), \ | 190 | : "=&r" (last), "=r" (current), "=r" (current_thread_info_reg), \ |
190 | "=r" (__local_per_cpu_offset) \ | 191 | "=r" (__local_per_cpu_offset) \ |
191 | : "0" (task_thread_info(next)), \ | 192 | : "0" (task_thread_info(next)), \ |
diff --git a/include/asm-sparc64/ttable.h b/include/asm-sparc64/ttable.h index d3cc4eff39a6..1b55538b944f 100644 --- a/include/asm-sparc64/ttable.h +++ b/include/asm-sparc64/ttable.h | |||
@@ -175,6 +175,12 @@ | |||
175 | #define KPROBES_TRAP(lvl) TRAP_ARG(bad_trap, lvl) | 175 | #define KPROBES_TRAP(lvl) TRAP_ARG(bad_trap, lvl) |
176 | #endif | 176 | #endif |
177 | 177 | ||
178 | #ifdef CONFIG_KGDB | ||
179 | #define KGDB_TRAP(lvl) TRAP_IRQ(kgdb_trap, lvl) | ||
180 | #else | ||
181 | #define KGDB_TRAP(lvl) TRAP_ARG(bad_trap, lvl) | ||
182 | #endif | ||
183 | |||
178 | #define SUN4V_ITSB_MISS \ | 184 | #define SUN4V_ITSB_MISS \ |
179 | ldxa [%g0] ASI_SCRATCHPAD, %g2; \ | 185 | ldxa [%g0] ASI_SCRATCHPAD, %g2; \ |
180 | ldx [%g2 + HV_FAULT_I_ADDR_OFFSET], %g4; \ | 186 | ldx [%g2 + HV_FAULT_I_ADDR_OFFSET], %g4; \ |