|
@@ -237,6 +237,18 @@ int kgdb_arch_handle_exception(int e_vector, int signo, int err_code,
|
|
|
return -1;
|
|
|
}
|
|
|
|
|
|
+unsigned long kgdb_arch_pc(int exception, struct pt_regs *regs)
|
|
|
+{
|
|
|
+ if (exception == 60)
|
|
|
+ return instruction_pointer(regs) - 2;
|
|
|
+ return instruction_pointer(regs);
|
|
|
+}
|
|
|
+
|
|
|
+void kgdb_arch_set_pc(struct pt_regs *regs, unsigned long ip)
|
|
|
+{
|
|
|
+ regs->pc = ip;
|
|
|
+}
|
|
|
+
|
|
|
/*
|
|
|
* The primary entry points for the kgdb debug trap table entries.
|
|
|
*/
|
|
@@ -247,7 +259,7 @@ BUILD_TRAP_HANDLER(singlestep)
|
|
|
|
|
|
local_irq_save(flags);
|
|
|
regs->pc -= instruction_size(__raw_readw(regs->pc - 4));
|
|
|
- kgdb_handle_exception(vec >> 2, SIGTRAP, 0, regs);
|
|
|
+ kgdb_handle_exception(0, SIGTRAP, 0, regs);
|
|
|
local_irq_restore(flags);
|
|
|
}
|
|
|
|