Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: Simon Marchi <simon.marchi@polymtl.ca>
To: Pedro Alves <palves@redhat.com>
Cc: gdb-patches@sourceware.org, Simon Marchi <simon.marchi@ericsson.com>
Subject: Re: [PATCH 3/3] windows: Use ptid from regcache in register  fetch/store
Date: Mon, 20 Mar 2017 22:22:00 -0000	[thread overview]
Message-ID: <80d736666fe9a1484f57f8c60a1f64df@polymtl.ca> (raw)
In-Reply-To: <41e56d7a-3bf6-71d5-6f5e-03c721ee4ff9@redhat.com>

On 2017-03-20 11:56, Pedro Alves wrote:
> On 03/18/2017 05:08 PM, Simon Marchi wrote:
>> From: Simon Marchi <simon.marchi@ericsson.com>
>> 
>> Use the ptid from the regcache so we don't depend on the current value
>> of the inferior_ptid global.
>> 
>> Also, change how the current thread is passed to sub-functions.  The
>> windows_fetch_inferior_registers function sets current_thread then 
>> calls
>> do_windows_fetch_inferior_registers, which reads current_thread.  This
>> very much looks like passing a parameter through a global variable.  I
>> think it would be more straightforward to pass the thread as a
>> parameter.
>> 
>> gdb/ChangeLog:
>> 
>> 	* windows-nat.c (do_windows_fetch_inferior_registers): Add
>> 	windows_thread_info parameter and use it instead of
>> 	current_thread.
>> 	(windows_fetch_inferior_registers): Don't set current_thread,
>> 	pass the thread to do_windows_fetch_inferior_registers.  Use
>> 	ptid from regcache instead of inferior_ptid.
>> 	(do_windows_store_inferior_registers): Add windows_thread_info
>> 	parameter and use it instead of current_thread.
>> 	(windows_store_inferior_registers): Don't set current_thread,
>> 	pass the thread to do_windows_store_inferior_registers.  Use
>> 	ptid from regcache instead of inferior_ptid.
>> ---
>>  gdb/windows-nat.c | 43 +++++++++++++++++++++----------------------
>>  1 file changed, 21 insertions(+), 22 deletions(-)
>> 
>> diff --git a/gdb/windows-nat.c b/gdb/windows-nat.c
>> index 9cc755f0d4..32a9ee62cf 100644
>> --- a/gdb/windows-nat.c
>> +++ b/gdb/windows-nat.c
>> @@ -460,18 +460,15 @@ windows_delete_thread (ptid_t ptid, DWORD 
>> exit_code)
>>  }
>> 
>>  static void
>> -do_windows_fetch_inferior_registers (struct regcache *regcache, int 
>> r)
>> +do_windows_fetch_inferior_registers (struct regcache *regcache,
>> +				     windows_thread_info *th, int r)
>>  {
>>    char *context_offset = ((char *) &current_thread->context) + 
>> mappings[r];
> 
> Is this reference to "current_thread" still correct?

Oops, I guess it should be th, like the rest:

   char *context_offset = ((char *) th->context) + mappings[r];

Fixed locally.

>> @@ -537,25 +533,26 @@ static void
>>  windows_fetch_inferior_registers (struct target_ops *ops,
>>  				  struct regcache *regcache, int r)
>>  {
>> -  current_thread = thread_rec (ptid_get_tid (inferior_ptid), TRUE);
>> +  DWORD pid = ptid_get_tid (regcache_get_ptid (regcache));
>> +  windows_thread_info *th = thread_rec (pid, TRUE);
>> +
>>    /* Check if current_thread exists.  Windows sometimes uses a 
>> non-existent
>>       thread id in its events.  */
> 
> The comment is out of date now.

Fixed locally.

> Did you look for the history around these comments?  I wonder whether
> these NULL checks still make sense here if we always reference the
> regcache's thread.  The equivalent code in gdbserver doesn't seem to
> have them.

All I know is that this is the patch that introduced them:
https://sourceware.org/ml/gdb-patches/2003-12/msg00479.html

The PR 1048 seems to refer to a pre-bugzilla bug tracking system.  Do we 
still have them somewhere?

 From what I understand, it's the use case where you attach to a process 
whose main thread has already exited.  If the patch introduced these 
NULL checks, I suppose it's because they were necessary back then to 
work around the Windows bug.  I have no idea if they are still 
necessary, or if the Microsoft people fixed it.  In any case, the fact 
of whether the checks are needed is not impacted by the current patch: 
in the end, we call thread_rec with the same pid with which we would 
have called it before, so we should get the same result.

I'll wait for your input on this before sending a new version.

>> @@ -564,11 +561,13 @@ static void
>>  windows_store_inferior_registers (struct target_ops *ops,
>>  				  struct regcache *regcache, int r)
>>  {
>> -  current_thread = thread_rec (ptid_get_tid (inferior_ptid), TRUE);
>> +  DWORD pid = ptid_get_tid (regcache_get_ptid (regcache));
>> +  windows_thread_info *th = thread_rec (pid, TRUE);
>> +
>>    /* Check if current_thread exists.  Windows sometimes uses a 
>> non-existent
>>       thread id in its events.  */
> 
> Ditto.

Fixed locally.

Thanks,

Simon


  reply	other threads:[~2017-03-20 22:22 UTC|newest]

Thread overview: 15+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-03-18 17:08 [PATCH 1/3] Use ptid from regcache in almost all remaining nat files Simon Marchi
2017-03-18 17:08 ` [PATCH 3/3] windows: Use ptid from regcache in register fetch/store Simon Marchi
2017-03-20 15:56   ` Pedro Alves
2017-03-20 22:22     ` Simon Marchi [this message]
2017-03-21 14:27       ` Pedro Alves
2017-03-21 15:24         ` Simon Marchi
2017-03-21 15:39           ` [pushed] " Simon Marchi
2017-03-18 17:08 ` [PATCH 2/3] spu: Use ptid from regcache instead of inferior_ptid Simon Marchi
2017-03-20 15:54   ` Pedro Alves
2017-03-20 21:50     ` Simon Marchi
2017-03-20 21:52     ` [PATCH v2 " Simon Marchi
2017-03-20 22:06       ` Pedro Alves
2017-03-20 22:24         ` Simon Marchi
2017-03-20 15:54 ` [PATCH 1/3] Use ptid from regcache in almost all remaining nat files Pedro Alves
2017-03-20 21:39   ` Simon Marchi

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=80d736666fe9a1484f57f8c60a1f64df@polymtl.ca \
    --to=simon.marchi@polymtl.ca \
    --cc=gdb-patches@sourceware.org \
    --cc=palves@redhat.com \
    --cc=simon.marchi@ericsson.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox