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
This commit is contained in:
aurel32 2009-04-08 21:29:37 +00:00
parent dbfe4c3611
commit fab9d28414

View File

@ -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);