Powerpc and software single step

Jimi Xenidis
2003-08-12T22:31:36Z

The AIX kernel does not support single step but the Linux kernel does.

However, I am working with a remote machine level debugger for PowerPC
that allows me to debug a running Linux kernel and cannot support
single stepping. For this I require that when debugging a Linux
target I need to turn on SOFTWARE_SINGLE_STEP.

I would like to add this to an "obscure" setting that will turn it on
even under Linux.
Here is the patch.. please accept, feel free to mangle the symbol
names to taste.

-JX

diff -Naur -X ./Xdiff src/gdb/config/powerpc/tm-linux.h mygdb/gdb/config/powerpc/tm-linux.h
--- src/gdb/config/powerpc/tm-linux.h Thu Jun 12 19:58:07 2003
+++ mygdb/gdb/config/powerpc/tm-linux.h Tue Aug 12 09:05:02 2003
@@ -33,9 +33,11 @@

/* We can single step on linux */
#undef SOFTWARE_SINGLE_STEP
-#define SOFTWARE_SINGLE_STEP(p,q) internal_error (__FILE__, __LINE__, "Will never execute!")
+extern void ppc_linux_software_single_step (enum target_signal, int);
+#define SOFTWARE_SINGLE_STEP(sig,bp_p) ppc_linux_software_single_step (sig, bp_p)
#undef SOFTWARE_SINGLE_STEP_P
-#define SOFTWARE_SINGLE_STEP_P() 0
+extern int ppc_linux_single_step_mode;
+#define SOFTWARE_SINGLE_STEP_P() ppc_linux_single_step_mode

/* Make sure nexti gets the help it needs for debugging assembly code
without symbols */
diff -Naur -X ./Xdiff src/gdb/ppc-linux-tdep.c mygdb/gdb/ppc-linux-tdep.c
--- src/gdb/ppc-linux-tdep.c Tue Jun 24 19:09:22 2003
+++ mygdb/gdb/ppc-linux-tdep.c Tue Aug 12 09:22:11 2003
@@ -1075,10 +1075,35 @@
}
}

+int ppc_linux_single_step_mode = 0;
+void
+ppc_linux_software_single_step (enum target_signal sig , int bp_p)
+{
+ if (ppc_linux_single_step_mode)
+ {
+ rs6000_software_single_step (sig, bp_p);
+ }
+ else
+ {
+ internal_error (__FILE__, __LINE__, "Will never execute!");
+ }
+}
+
void
_initialize_ppc_linux_tdep (void)
{
gdbarch_register_osabi (bfd_arch_powerpc, 0, GDB_OSABI_LINUX,
ppc_linux_init_abi);
add_core_fns (&ppc_linux_regset_core_fns);
+
+ add_show_from_set (add_set_cmd("single-step-mode", class_obscure,
+ var_integer,
+ &ppc_linux_single_step_mode, "\
+Set single step mode for PowerPCtarget:\n\
+ 0 = Target supports single stepping (i.e. Linux)\n\
+ 1 = Target does not support single stepping (i.e. AIX, Simulators).",
+ &setlist),
+ &showlist);
}
+
+