summary refs log tree commit diff stats
diff options
context:
space:
mode:
authoraurel32 <aurel32@c046a42c-6fe2-441c-8c8c-71466251a162>2009-04-08 21:29:37 +0000
committeraurel32 <aurel32@c046a42c-6fe2-441c-8c8c-71466251a162>2009-04-08 21:29:37 +0000
commitfab9d28414ecbfbb2d89d9fecb47b7c982513072 (patch)
tree040b4a534707f105963ee8a8e21ae8bebad65856
parentdbfe4c3611a613df1f87b3d6a53063f7988ae5f7 (diff)
downloadfocaccia-qemu-fab9d28414ecbfbb2d89d9fecb47b7c982513072.tar.gz
focaccia-qemu-fab9d28414ecbfbb2d89d9fecb47b7c982513072.zip
factor out setting pc in gdbstub
The code for handling the c and s packets both contain code for setting
the pc.  Move that code out to a common function.

Signed-off-by: Nathan Froyd <froydnj@codesourcery.com>
Acked-by: Jan Kiszka <jan.kiszka@siemens.com>
Signed-off-by: Aurelien Jarno <aurelien@aurel32.net>

git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@7039 c046a42c-6fe2-441c-8c8c-71466251a162
-rw-r--r--gdbstub.c63
1 files changed, 25 insertions, 38 deletions
diff --git a/gdbstub.c b/gdbstub.c
index 316f5e8176..a06ef34953 100644
--- a/gdbstub.c
+++ b/gdbstub.c
@@ -1512,6 +1512,29 @@ static void gdb_breakpoint_remove_all(void)
     }
 }
 
+static void gdb_set_cpu_pc(GDBState *s, target_ulong pc)
+{
+#if defined(TARGET_I386)
+    s->c_cpu->eip = pc;
+    cpu_synchronize_state(s->c_cpu, 1);
+#elif defined (TARGET_PPC)
+    s->c_cpu->nip = pc;
+#elif defined (TARGET_SPARC)
+    s->c_cpu->pc = pc;
+    s->c_cpu->npc = pc + 4;
+#elif defined (TARGET_ARM)
+    s->c_cpu->regs[15] = pc;
+#elif defined (TARGET_SH4)
+    s->c_cpu->pc = pc;
+#elif defined (TARGET_MIPS)
+    s->c_cpu->active_tc.PC = pc;
+#elif defined (TARGET_CRIS)
+    s->c_cpu->pc = pc;
+#elif defined (TARGET_ALPHA)
+    s->c_cpu->pc = pc;
+#endif
+}
+
 static int gdb_handle_packet(GDBState *s, const char *line_buf)
 {
     CPUState *env;
@@ -1542,25 +1565,7 @@ static int gdb_handle_packet(GDBState *s, const char *line_buf)
     case 'c':
         if (*p != '\0') {
             addr = strtoull(p, (char **)&p, 16);
-#if defined(TARGET_I386)
-            s->c_cpu->eip = addr;
-            cpu_synchronize_state(s->c_cpu, 1);
-#elif defined (TARGET_PPC)
-            s->c_cpu->nip = addr;
-#elif defined (TARGET_SPARC)
-            s->c_cpu->pc = addr;
-            s->c_cpu->npc = addr + 4;
-#elif defined (TARGET_ARM)
-            s->c_cpu->regs[15] = addr;
-#elif defined (TARGET_SH4)
-            s->c_cpu->pc = addr;
-#elif defined (TARGET_MIPS)
-            s->c_cpu->active_tc.PC = addr;
-#elif defined (TARGET_CRIS)
-            s->c_cpu->pc = addr;
-#elif defined (TARGET_ALPHA)
-            s->c_cpu->pc = addr;
-#endif
+            gdb_set_cpu_pc(s, addr);
         }
         s->signal = 0;
         gdb_continue(s);
@@ -1584,25 +1589,7 @@ static int gdb_handle_packet(GDBState *s, const char *line_buf)
     case 's':
         if (*p != '\0') {
             addr = strtoull(p, (char **)&p, 16);
-#if defined(TARGET_I386)
-            s->c_cpu->eip = addr;
-            cpu_synchronize_state(s->c_cpu, 1);
-#elif defined (TARGET_PPC)
-            s->c_cpu->nip = addr;
-#elif defined (TARGET_SPARC)
-            s->c_cpu->pc = addr;
-            s->c_cpu->npc = addr + 4;
-#elif defined (TARGET_ARM)
-            s->c_cpu->regs[15] = addr;
-#elif defined (TARGET_SH4)
-            s->c_cpu->pc = addr;
-#elif defined (TARGET_MIPS)
-            s->c_cpu->active_tc.PC = addr;
-#elif defined (TARGET_CRIS)
-            s->c_cpu->pc = addr;
-#elif defined (TARGET_ALPHA)
-            s->c_cpu->pc = addr;
-#endif
+            gdb_set_cpu_pc(s, addr);
         }
         cpu_single_step(s->c_cpu, sstep_flags);
         gdb_continue(s);