2010/6/21 Vitaliy Vorobyov <deaths...@yandex.ru>: > Debugging with gdb-stub does not work with qemu-system-sparc target > > Qemu compiled from current git tree. > > execution string: qemu-system-sparc.exe -s -S -m 256 -L Bios -hda > sparc.img -boot c > connect with telnet localhost 1234 > enter '$s#73' (without quotes, this is single step command to gdb stub) > gdb stub reply '+' (without quotes, as it accept command) > After this qemu continuously execute instructions in single step mode > and does not exit to gdb stub after each executed instruction with > interrupt signal > ("T%02xthread:%02x;" /gdb_vm_state_change in gdbstub.c/ ); > > If we look at target-sparc/translate.c, we can see that > gen_helper_debug() is not called in single step mode: > > ======================== > if ((pc & TARGET_PAGE_MASK) == (tb->pc & TARGET_PAGE_MASK) && > (npc & TARGET_PAGE_MASK) == (tb->pc & TARGET_PAGE_MASK) && > !s->singlestep) { > /* jump to same page: we can use a direct jump */ > tcg_gen_goto_tb(tb_num); > tcg_gen_movi_tl(cpu_pc, pc); > tcg_gen_movi_tl(cpu_npc, npc); > tcg_gen_exit_tb((long)tb + tb_num); > } else { > /* jump to another page: currently not optimized */ > tcg_gen_movi_tl(cpu_pc, pc); > tcg_gen_movi_tl(cpu_npc, npc); > tcg_gen_exit_tb(0); > } > ========================= > > ======================== > /* if single step mode, we generate only one instruction and > generate an exception */ > if (dc->singlestep) { > break; > } > ======================== > > If we look similar code at target-sh4/translate.c we can see that is > called in this cases: > > ======================== > if ((tb->pc & TARGET_PAGE_MASK) == (dest & TARGET_PAGE_MASK) && > !ctx->singlestep_enabled) { > /* Use a direct jump if in same page and singlestep not enabled */ > tcg_gen_goto_tb(n); > tcg_gen_movi_i32(cpu_pc, dest); > tcg_gen_exit_tb((long) tb + n); > } else { > tcg_gen_movi_i32(cpu_pc, dest); > if (ctx->singlestep_enabled) > gen_helper_debug(); > tcg_gen_exit_tb(0); > } > ======================== > > ======================== > if (tb->cflags & CF_LAST_IO) > gen_io_end(); > if (env->singlestep_enabled) { > tcg_gen_movi_i32(cpu_pc, ctx.pc); > gen_helper_debug(); > } else { > ==========================
Nice analysis. How about submitting a patch? Please read CODING_STYLE and don't forget to add a Signed-off-By: line.