qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] qemu-system-sparc singlestep not work in gdbstub


From: Blue Swirl
Subject: Re: [Qemu-devel] qemu-system-sparc singlestep not work in gdbstub
Date: Sun, 27 Jun 2010 17:33:00 +0000

2010/6/21 Vitaliy Vorobyov <address@hidden>:
> 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

[Prev in Thread] Current Thread [Next in Thread]