Nathan Froyd wrote: > 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 Yep, that makes it better. Acked-by: Jan Kiszka > --- > gdbstub.c | 63 ++++++++++++++++++++++++------------------------------------ > 1 files changed, 25 insertions(+), 38 deletions(-) > > diff --git a/gdbstub.c b/gdbstub.c > index 518c939..f6d2f1b 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);