qemu-devel
[Top][All Lists]
Advanced

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

Re: [Qemu-devel] 答复: [RFC PATCH v5 10/13] gdbstub: allow reverse execut


From: Frederic Konrad
Subject: Re: [Qemu-devel] 答复: [RFC PATCH v5 10/13] gdbstub: allow reverse execution in gdb stub.
Date: Thu, 26 Jun 2014 09:39:46 +0200
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Thunderbird/24.5.0

On 26/06/2014 04:50, address@hidden wrote:
> Hi, 
>
> Why not a gdb record support?
>
> Thanks!
> Li Guang
Hi,

Good idea.
We didn't think about that yet.
It might be done in a futur patch-set.

Thanks,
Fred

>> -----邮件原件-----
>> 发件人: address@hidden
>> [mailto:address@hidden 代表
>> address@hidden
>> 发送时间: 2014年6月25日 23:20
>> 收件人: address@hidden
>> 抄送: address@hidden; address@hidden;
>> address@hidden; address@hidden; address@hidden;
>> address@hidden; address@hidden; address@hidden
>> 主题: [Qemu-devel] [RFC PATCH v5 10/13] gdbstub: allow reverse execution in
>> gdb stub.
>>
>> From: KONRAD Frederic <address@hidden>
>>
>> This allows gdb to reverse step QEMU: reverse-stepi and reverse-cont
>> commands are allowed.
>>
>> When step_backward is called, QEMU restores a snapshot before the actual
>> instruction and stops (with a debug exit) when the previous instruction is
>> reached.
>>
>> Signed-off-by: KONRAD Frederic <address@hidden>
>> ---
>>  gdbstub.c | 31 ++++++++++++++++++++++++++++++-
>>  1 file changed, 30 insertions(+), 1 deletion(-)
>>
>> diff --git a/gdbstub.c b/gdbstub.c
>> index 8afe0b7..99769af 100644
>> --- a/gdbstub.c
>> +++ b/gdbstub.c
>> @@ -33,6 +33,7 @@
>>  #include "sysemu/char.h"
>>  #include "sysemu/sysemu.h"
>>  #include "exec/gdbstub.h"
>> +#include "reverse-execution.h"
>>  #endif
>>
>>  #define MAX_PACKET_LENGTH 4096
>> @@ -1113,6 +1114,17 @@ static int gdb_handle_packet(GDBState *s, const
>> char *line_buf)
>>              if (cc->gdb_core_xml_file != NULL) {
>>                  pstrcat(buf, sizeof(buf), ";qXfer:features:read+");
>>              }
>> +
>> +            #ifndef CONFIG_USER_ONLY
>> +            /*
>> +             * When reverse execution is enabled those additional
>> features must
>> +             * be set so GDB allows reverse-stepi and reverse-continue
>> command.
>> +             */
>> +            if (cexe_is_enabled()) {
>> +                pstrcat(buf, sizeof(buf),
>> ";ReverseStep+;ReverseContinue+");
>> +            }
>> +            #endif /* !CONFIG_USER_ONLY */
>> +
>>              put_packet(s, buf);
>>              break;
>>          }
>> @@ -1161,7 +1173,23 @@ static int gdb_handle_packet(GDBState *s, const
>> char *line_buf)
>>          }
>>          /* Unrecognised 'q' command.  */
>>          goto unknown_command;
>> -
>> +    #ifndef CONFIG_USER_ONLY
>> +    case 'b':
>> +        /* Reverse execution. */
>> +        switch (*p) {
>> +        case 's':
>> +            cexe_step_backward(s->c_cpu, 1);
>> +            break;
>> +        case 'c':
>> +            cexe_continue_backward(s->c_cpu);
>> +            break;
>> +        default:
>> +            buf[0] = '\0';
>> +            put_packet(s, buf);
>> +            break;
>> +        }
>> +        break;
>> +    #endif /* !CONFIG_USER_ONLY */
>>      default:
>>      unknown_command:
>>          /* put empty packet */
>> @@ -1221,6 +1249,7 @@ static void gdb_vm_state_change(void *opaque, int
>> running, RunState state)
>>          ret = GDB_SIGNAL_TRAP;
>>          break;
>>      case RUN_STATE_PAUSED:
>> +        cexe_stop_reverse_continue();
>>          ret = GDB_SIGNAL_INT;
>>          break;
>>      case RUN_STATE_SHUTDOWN:
>> --
>> 1.9.0
>>




reply via email to

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