diff options
author | aurel32 <aurel32@c046a42c-6fe2-441c-8c8c-71466251a162> | 2009-04-08 21:29:37 +0000 |
---|---|---|
committer | aurel32 <aurel32@c046a42c-6fe2-441c-8c8c-71466251a162> | 2009-04-08 21:29:37 +0000 |
commit | fab9d28414ecbfbb2d89d9fecb47b7c982513072 (patch) | |
tree | 040b4a534707f105963ee8a8e21ae8bebad65856 | |
parent | dbfe4c3611a613df1f87b3d6a53063f7988ae5f7 (diff) |
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.c | 63 |
1 files changed, 25 insertions, 38 deletions
@@ -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); |