This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
Re: [RFA] let record_resume fail immediately on error
- From: Hui Zhu <teawater at gmail dot com>
- To: Michael Snyder <msnyder at vmware dot com>
- Cc: Joel Brobecker <brobecker at adacore dot com>, "gdb-patches at sourceware dot org" <gdb-patches at sourceware dot org>
- Date: Wed, 4 Nov 2009 13:15:03 +0800
- Subject: Re: [RFA] let record_resume fail immediately on error
- References: <20090928160728.GB9003@adacore.com> <20091015045834.GY5272@adacore.com> <daef60380910150016o2a47894fpbf5ac4657be716d6@mail.gmail.com> <20091015162326.GA5272@adacore.com> <4AD75806.9070705@vmware.com> <daef60380910152036t1fdfc3edqc8f95980b466266d@mail.gmail.com> <daef60380910192017x67a5f208ma06424cc386880d8@mail.gmail.com> <daef60380910230029v4e794c0s112b50858de3a22@mail.gmail.com> <daef60380911021817g4ff471echd087ef05e9f94c19@mail.gmail.com> <4AF07CF2.1050902@vmware.com>
>> Now we have a lot of patch in running.
>> Could you please help me review this patch first?
>
> OK, could you help me understand it?
>
> You have an error-handler routine called do_record_message,
> which calls record_message by way of catch_errors. ?You call
> do_record_message from two places, record_wait and record_resume.
>
> But now you want to bypass the error-handler routine when
> you call record_message from record_resume, but keep it in
> place for record_wait. ?Now you have two different ways of
> calling record_message. ?Seems inconsistant. ?No explanation,
> no comments explaining the difference.
>
OK. I will try to talk clear about it.
I make do_record_message because in before, call a error in
record_resume and record_wait will make inferior cannot keep running.
Now, I found that call error in record_resume will not affect
anything. So I change do_record_message to record_message in
record_resume.
But in record_wait, call error still make inferior cannot keep
running, so I keep do_record_message.
Thanks,
Hui
>
>
>> 2009-11-03 ?Hui Zhu ?<teawater@gmail.com>
>>
>> ? ? ? ?* record.c (record_resume_error): Deleted.
>> ? ? ? ?(record_resume): Call record_message.
>> ? ? ? ?(record_wait): Deleted record_resume_error.
>> ? ? ? ?Set status when do_record_message need stop the inferior.
>>
>> ---
>> ?record.c | ? 29 ++++++++++-------------------
>> ?1 file changed, 10 insertions(+), 19 deletions(-)
>>
>> --- a/record.c
>> +++ b/record.c
>> @@ -954,7 +954,6 @@ record_close (int quitting)
>> ?}
>>
>> ?static int record_resume_step = 0;
>> -static int record_resume_error;
>>
>> ?/* "to_resume" target method. ?Resume the process record target. ?*/
>>
>> @@ -966,15 +965,11 @@ record_resume (struct target_ops *ops, p
>>
>> ? if (!RECORD_IS_REPLAY)
>> ? ? {
>> - ? ? ?if (do_record_message (get_current_regcache (), signal))
>> - ? ? ? ?{
>> - ? ? ? ? ?record_resume_error = 0;
>> - ? ? ? ?}
>> - ? ? ?else
>> - ? ? ? ?{
>> - ? ? ? ? ?record_resume_error = 1;
>> - ? ? ? ? ?return;
>> - ? ? ? ?}
>> + ? ? ?struct record_message_args args;
>> +
>> + ? ? ?args.regcache = get_current_regcache ();
>> + ? ? ?args.signal = signal;
>> + ? ? ?record_message (&args);
>> ? ? ? record_beneath_to_resume (record_beneath_to_resume_ops, ptid, 1,
>> ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? signal);
>> ? ? }
>> @@ -1038,14 +1033,6 @@ record_wait (struct target_ops *ops,
>>
>> ? if (!RECORD_IS_REPLAY && ops != &record_core_ops)
>> ? ? {
>> - ? ? ?if (record_resume_error)
>> - ? ? ? {
>> - ? ? ? ? /* If record_resume get error, return directly. ?*/
>> - ? ? ? ? status->kind = TARGET_WAITKIND_STOPPED;
>> - ? ? ? ? status->value.sig = TARGET_SIGNAL_ABRT;
>> - ? ? ? ? return inferior_ptid;
>> - ? ? ? }
>> -
>> ? ? ? if (record_resume_step)
>> ? ? ? ?{
>> ? ? ? ? ?/* This is a single step. ?*/
>> @@ -1091,7 +1078,11 @@ record_wait (struct target_ops *ops,
>> ? ? ? ? ? ? ? ? ? ? ? ? Therefore we will not return to gdb.
>> ? ? ? ? ? ? ? ? ? ? ? ? Record the insn and resume. ?*/
>> ? ? ? ? ? ? ? ? ? ? ?if (!do_record_message (regcache, TARGET_SIGNAL_0))
>> - ? ? ? ? ? ? ? ? ? ? ? break;
>> + ? ? ? ? ? ? ? ? ? ? ? {
>> + ? ? ? ? ? ? ? ? ? ? ? ? ? status->kind = TARGET_WAITKIND_STOPPED;
>> + ? ? ? ? ? ? ? ? ? ? ? ? ? status->value.sig = TARGET_SIGNAL_0;
>> + ? ? ? ? ? ? ? ? ? ? ? ? ? break;
>> + ? ? ? ? ? ? ? ? ? ? ? }
>>
>> ? ? ? ? ? ? ? ? ? ? ?record_beneath_to_resume
>> (record_beneath_to_resume_ops,
>> ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?ptid, 1,
>
>