This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
Re: [PATCH 2/2] Replace address and aspace with thread in struct step_over_info
- From: Doug Evans <xdje42 at gmail dot com>
- To: Yao Qi <qiyaoltc at gmail dot com>, Pedro Alves <palves at redhat dot com>
- Cc: gdb-patches at sourceware dot org
- Date: Wed, 20 Apr 2016 11:01:14 -0700
- Subject: Re: [PATCH 2/2] Replace address and aspace with thread in struct step_over_info
- Authentication-results: sourceware.org; auth=none
- References: <1460726961-27486-1-git-send-email-yao dot qi at linaro dot org> <1460726961-27486-3-git-send-email-yao dot qi at linaro dot org> <57160BDA dot 4090104 at redhat dot com> <86a8kpk8k1 dot fsf at gmail dot com>
Yao Qi <qiyaoltc@gmail.com> writes:
> Pedro Alves <palves@redhat.com> writes:
>
>> I think this is problematic.
>>
>> While a thread is being stepped past a breakpoint, it's possible that the
>> user sets some other breakpoint, and then we end up in
>> stepping_past_instruction_at
>> deciding whether we can insert that new breakpoint, while the step-over thread
>> is running.
>>
>> As soon as the step-over thread is resumed for the actual step-over, it's
>> regcache is flushed (target_resume -> registers_changed_ptid). From that point
>> and until the thread stops again, trying to fetch its regcache will error out,
>> because you can't read registers from a thread that is running.
>
> OK, that is a good case. I didn't think of it. I withdraw the patch.
A good place for a comment explaining Why Things Are The Way They Are.
Not sure how you want to word this.
2016-04-20 Doug Evans <xdje42@gmail.com>
* infrun.c (set_step_over_info): Add comment.
diff --git a/gdb/infrun.c b/gdb/infrun.c
index 696105d..c7ea5e2 100644
--- a/gdb/infrun.c
+++ b/gdb/infrun.c
@@ -1325,7 +1325,9 @@ struct step_over_info
static struct step_over_info step_over_info;
/* Record the address of the breakpoint/instruction we're currently
- stepping over. */
+ stepping over.
+ N.B. We record the aspace and address now, instead of say just the thread,
+ because when we need the info later the thread may be running. */
static void
set_step_over_info (struct address_space *aspace, CORE_ADDR address,