From: Andreas Arnez <arnez@linux.vnet.ibm.com>
To: gdb-patches@sourceware.org
Subject: [PATCH v4 3/4] gdbserver: Support read-only regsets in linux-low.c
Date: Fri, 12 Dec 2014 10:18:00 -0000 [thread overview]
Message-ID: <1418379431-14407-4-git-send-email-arnez@linux.vnet.ibm.com> (raw)
In-Reply-To: <1418379431-14407-1-git-send-email-arnez@linux.vnet.ibm.com>
For GNU/Linux targets using the regsets interface, this change
supports regsets that can be read but not written. The S390 "last
break" regset is an example. So far it had been defined with
regset->set_request == PTRACE_GETREGSET, such that the respective
ptrace call does not cause any harm. Now we just skip the whole
read/modify/write sequence for regsets that do not define a
fill_function.
gdb/gdbserver/ChangeLog:
* linux-low.c (regsets_store_inferior_registers): Skip regsets
without a fill_function.
* linux-s390-low.c (s390_fill_last_break): Remove.
(s390_regsets): Set fill_function to NULL for NT_S390_LAST_BREAK.
(s390_arch_setup): Use regset's size instead of fill_function for
loop end condition.
---
gdb/gdbserver/linux-low.c | 3 ++-
gdb/gdbserver/linux-s390-low.c | 14 ++++----------
2 files changed, 6 insertions(+), 11 deletions(-)
diff --git a/gdb/gdbserver/linux-low.c b/gdb/gdbserver/linux-low.c
index c1b53ff..5f62010 100644
--- a/gdb/gdbserver/linux-low.c
+++ b/gdb/gdbserver/linux-low.c
@@ -4293,7 +4293,8 @@ regsets_store_inferior_registers (struct regsets_info *regsets_info,
void *buf, *data;
int nt_type, res;
- if (regset->size == 0 || regset_disabled (regsets_info, regset))
+ if (regset->size == 0 || regset_disabled (regsets_info, regset)
+ || regset->fill_function == NULL)
continue;
buf = xmalloc (regset->size);
diff --git a/gdb/gdbserver/linux-s390-low.c b/gdb/gdbserver/linux-s390-low.c
index 79fa6c0..9f77f30 100644
--- a/gdb/gdbserver/linux-s390-low.c
+++ b/gdb/gdbserver/linux-s390-low.c
@@ -290,12 +290,6 @@ s390_fill_gregset (struct regcache *regcache, void *buf)
/* Fill and store functions for extended register sets. */
static void
-s390_fill_last_break (struct regcache *regcache, void *buf)
-{
- /* Last break address is read-only. */
-}
-
-static void
s390_store_last_break (struct regcache *regcache, const void *buf)
{
const char *p;
@@ -318,9 +312,9 @@ s390_store_system_call (struct regcache *regcache, const void *buf)
static struct regset_info s390_regsets[] = {
{ 0, 0, 0, 0, GENERAL_REGS, s390_fill_gregset, NULL },
- /* Last break address is read-only; do not attempt PTRACE_SETREGSET. */
- { PTRACE_GETREGSET, PTRACE_GETREGSET, NT_S390_LAST_BREAK, 0,
- EXTENDED_REGS, s390_fill_last_break, s390_store_last_break },
+ /* Last break address is read-only; no fill function. */
+ { PTRACE_GETREGSET, -1, NT_S390_LAST_BREAK, 0, EXTENDED_REGS,
+ NULL, s390_store_last_break },
{ PTRACE_GETREGSET, PTRACE_SETREGSET, NT_S390_SYSTEM_CALL, 0,
EXTENDED_REGS, s390_fill_system_call, s390_store_system_call },
{ 0, 0, 0, -1, -1, NULL, NULL }
@@ -485,7 +479,7 @@ s390_arch_setup (void)
#endif
/* Update target_regsets according to available register sets. */
- for (regset = s390_regsets; regset->fill_function != NULL; regset++)
+ for (regset = s390_regsets; regset->size >= 0; regset++)
if (regset->get_request == PTRACE_GETREGSET)
switch (regset->nt_type)
{
--
1.8.4.2
next prev parent reply other threads:[~2014-12-12 10:18 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-12-12 10:17 [PATCH v4 0/4] gdbserver: Fix support for S390 TDB Andreas Arnez
2014-12-12 10:17 ` [PATCH v4 1/4] gdbserver: Rephrase loops in regsets_fetch/store_inferior_registers Andreas Arnez
2014-12-12 12:04 ` Pedro Alves
2014-12-12 10:18 ` Andreas Arnez [this message]
2014-12-12 12:21 ` [PATCH v4 3/4] gdbserver: Support read-only regsets in linux-low.c Pedro Alves
2014-12-12 10:18 ` [PATCH v4 2/4] gdbserver: Prevent stale/random values in register cache Andreas Arnez
2014-12-12 12:14 ` Pedro Alves
2014-12-12 10:19 ` [PATCH v4 4/4] S390: Fix gdbserver support for TDB Andreas Arnez
2014-12-12 12:23 ` 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=1418379431-14407-4-git-send-email-arnez@linux.vnet.ibm.com \
--to=arnez@linux.vnet.ibm.com \
--cc=gdb-patches@sourceware.org \
/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