Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: Andreas Arnez <arnez@linux.vnet.ibm.com>
To: Pedro Alves <palves@redhat.com>
Cc: gdb-patches@sourceware.org, Ulrich Weigand <uweigand@de.ibm.com>
Subject: Re: [PATCH 2/2] S390: Fix gdbserver support for TDB
Date: Wed, 03 Dec 2014 18:18:00 -0000	[thread overview]
Message-ID: <871togppgg.fsf@br87z6lw.de.ibm.com> (raw)
In-Reply-To: <8761dtq2rx.fsf@br87z6lw.de.ibm.com> (Andreas Arnez's message of	"Tue, 02 Dec 2014 20:18:10 +0100")

On Tue, Dec 02 2014, Andreas Arnez wrote:

> On Tue, Dec 02 2014, Pedro Alves wrote:
>
>> On 12/01/2014 06:15 PM, Andreas Arnez wrote:
>>
>>>  
>>> +  if (buf == NULL)
>>> +    {
>>> +      for (i = 0; i < 22; i++)
>>> +	supply_register (regcache, arm_num_regs + i, NULL);
>>> +      return;
>>> +    }
>>> +
>>
>> It probably doesn't hurt to be explicit, but I should note that
>> registers' are unavailable by default on gdbserver, so a
>> 'if (buf == NULL) return;' probably would do as well:
>>
>> struct regcache *
>> init_register_cache (struct regcache *regcache,
>> 		     const struct target_desc *tdesc,
>> 		     unsigned char *regbuf)
>> ...
>>       regcache->register_status = xcalloc (1, tdesc->num_registers);
>>       gdb_assert (REG_UNAVAILABLE == 0);
>
> In general, if a prior call to fetch_inferior_registers has filled the
> regset already, I'd expect the store function to reset the registers to
> "unavailable" again.  Otherwise we may have stale left-overs from
> before.

Hm, I noticed that this probably deserves some more explanation.

While it is true that the registers are marked unavailable when
initializing a new regcache, the regcache seems to survive without
another initialization between calls to fetch_inferior_registers.  I've
verified this in my tests, and I've also not seen any code that would
perform such a re-initialization.

I wonder why that is the case, and whether we would like to change that.
If so, the patch could avoid touching ARM code, wouldn't need special
treatment of NULL in the TDB store function, and would treat ENODATA
like any other error from ptrace, except that the warning would be
suppressed.  I think this would also improve the behavior of other
errors from ptrace, but maybe there's a good reason for falling back to
the "last known" register values in this case.  Or maybe there's a
performance reason for avoiding the re-initialization?

For illustration, why don't we do something like the (untested) patch
below?

--
diff --git a/gdb/gdbserver/regcache.c b/gdb/gdbserver/regcache.c
index 718ae8c..b0f6a22 100644
--- a/gdb/gdbserver/regcache.c
+++ b/gdb/gdbserver/regcache.c
@@ -52,6 +52,8 @@ get_thread_regcache (struct thread_info *thread, int fetch)
       struct thread_info *saved_thread = current_thread;
 
       current_thread = thread;
+      memset (regcache->register_status, REG_UNAVAILABLE,
+	      regcache->tdesc->num_registers);
       fetch_inferior_registers (regcache, -1);
       current_thread = saved_thread;
       regcache->registers_valid = 1;


  reply	other threads:[~2014-12-03 18:18 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-11-26 11:56 [PATCH 0/2] S390: Fixes for gdbserver on targets with TDB Andreas Arnez
2014-11-26 11:56 ` [PATCH 1/2] S390: Fix 'expedite' for s390-te-linux64 Andreas Arnez
2014-12-01 18:34   ` Ulrich Weigand
2014-11-26 11:56 ` [PATCH 2/2] S390: Fix gdbserver support for TDB Andreas Arnez
2014-12-01 18:15   ` Andreas Arnez
2014-12-01 18:40     ` Ulrich Weigand
2014-12-02 15:21     ` Pedro Alves
2014-12-02 19:18       ` Andreas Arnez
2014-12-03 18:18         ` Andreas Arnez [this message]
2014-12-04 13:33           ` Pedro Alves
2014-12-09 16:10             ` Andreas Arnez
2014-12-04 13:39         ` Pedro Alves

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=871togppgg.fsf@br87z6lw.de.ibm.com \
    --to=arnez@linux.vnet.ibm.com \
    --cc=gdb-patches@sourceware.org \
    --cc=palves@redhat.com \
    --cc=uweigand@de.ibm.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