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.

Reply via email to