Update of /cvsroot/hppaqemu/hppaqemu
In directory sc8-pr-cvs17.sourceforge.net:/tmp/cvs-serv27814
Modified Files:
gdbstub.c
Log Message:
Add support for GDB. (PSW, General registers and IAOQ/IASQ only.)
Index: gdbstub.c
===================================================================
RCS file: /cvsroot/hppaqemu/hppaqemu/gdbstub.c,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -d -r1.4 -r1.5
--- gdbstub.c 18 Feb 2008 05:24:38 -0000 1.4
+++ gdbstub.c 19 Feb 2008 12:14:30 -0000 1.5
@@ -856,6 +856,57 @@
for (i = 0; i < 16; i++) LOAD(env->regs[i]);
LOAD (env->pc);
}
+#elif defined (TARGET_HPPA)
+static int cpu_gdb_read_registers(CPUState *env, uint8_t *mem_buf)
+{
+ target_ulong *registers = (target_ulong *)mem_buf;
+ int i;
+
+ registers[0] = tswapl(env->psw);
+ /* gr0 is hardwired to zero */
+ /* fill in gr1..gr32 */
+ for(i = 0; i < 31; i++) {
+ registers[i + 1] = tswapl(env->gr[i]);
+ }
+ /* registers[32] = sar; */
+ registers[32] = 0;
+ registers[33] = tswapl(env->iaoq[0]);
+ registers[34] = tswap32(env->iasq[0]);
+ registers[35] = tswapl(env->iaoq[1]);
+ registers[36] = tswap32(env->iasq[1]);
+ /* ... */
+#ifndef TARGET_HPPA64
+ for(i = 37; i < 128; i++) {
+ registers[i] = 0;
+ }
+ return 128 * sizeof(target_ulong);
+#else
+ for(i = 37; i < 96; i++) {
+ registers[i] = 0;
+ }
+ return 96 * sizeof(target_ulong);
+#endif
+}
+
+static void cpu_gdb_write_registers(CPUState *env, uint8_t *mem_buf, int size)
+{
+ target_ulong *registers = (target_ulong *)mem_buf;
+ int i;
+
+ env->psw = tswapl(registers[0]);
+ /* gr0 is hardwired to zero */
+ /* fill in gr1..gr32 */
+ for(i = 0; i < 31; i++) {
+ env->gr[i] = tswapl(registers[i + 1]);
+ }
+ /* sar = registers[32]; */
+ env->iaoq[0] = tswapl(registers[33]);
+ env->iasq[0] = tswap32(registers[34]);
+ env->iaoq[1] = tswapl(registers[35]);
+ env->iasq[1] = tswap32(registers[36]);
+ /* ... */
+}
+
#else
static int cpu_gdb_read_registers(CPUState *env, uint8_t *mem_buf)
{
@@ -906,6 +957,9 @@
env->PC[env->current_tc] = addr;
#elif defined (TARGET_CRIS)
env->pc = addr;
+#elif defined (TARGET_HPPA)
+ env->iaoq[0] = addr;
+ env->iaoq[1] = addr + 4;
#endif
}
#ifdef CONFIG_USER_ONLY
@@ -932,6 +986,9 @@
env->PC[env->current_tc] = addr;
#elif defined (TARGET_CRIS)
env->pc = addr;
+#elif defined (TARGET_HPPA)
+ env->iaoq[0] = addr;
+ env->iaoq[1] = addr + 4;
#endif
}
cpu_single_step(env, 1);
|