This is the mail archive of the gdb-patches@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [RFA] let record_resume fail immediately on error


>> 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,
>
>


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]