From c49bd90bdb03f3013a796ea920830547cacc3c48 Mon Sep 17 00:00:00 2001 From: Andreas Arnez Date: Wed, 21 Mar 2018 17:41:45 +0100 Subject: [PATCH] S390: gdbserver: Don't write guarded storage registers On S390, the guarded storage register set is only valid if guarded storage is active. Reading/writing the register set yields errors if this is not the case. Then gdbserver emits warnings like these: Warning: ptrace(regsets_store_inferior_registers): No data available Apart from confusing the user, this can also lead to test case failures due to unexpected output. To suppress this, make the guarded storage regsets read-only for now. gdb/gdbserver/ChangeLog: * linux-s390-low.c (s390_fill_gs): Remove function. (s390_fill_gsbc): Remove function. (s390_regsets): Set fill functions for the guarded storage regsets to NULL. --- gdb/gdbserver/ChangeLog | 7 +++++++ gdb/gdbserver/linux-s390-low.c | 29 +++++------------------------ 2 files changed, 12 insertions(+), 24 deletions(-) diff --git a/gdb/gdbserver/ChangeLog b/gdb/gdbserver/ChangeLog index 958a6dd..e63d89f 100644 --- a/gdb/gdbserver/ChangeLog +++ b/gdb/gdbserver/ChangeLog @@ -1,5 +1,12 @@ 2018-03-21 Andreas Arnez + * linux-s390-low.c (s390_fill_gs): Remove function. + (s390_fill_gsbc): Remove function. + (s390_regsets): Set fill functions for the guarded storage regsets + to NULL. + +2018-03-21 Andreas Arnez + * linux-s390-low.c (s390_get_hwcap): Replace tdesc parameter by the word size. Add comment. (s390_get_wordsize): New function. diff --git a/gdb/gdbserver/linux-s390-low.c b/gdb/gdbserver/linux-s390-low.c index 203accd..7de70f3 100644 --- a/gdb/gdbserver/linux-s390-low.c +++ b/gdb/gdbserver/linux-s390-low.c @@ -375,16 +375,6 @@ s390_store_vxrs_high (struct regcache *regcache, const void *buf) } static void -s390_fill_gs (struct regcache *regcache, void *buf) -{ - int gsd = find_regno (regcache->tdesc, "gsd"); - int i; - - for (i = 0; i < 3; i++) - collect_register (regcache, gsd + i, (char *) buf + 8 * (i + 1)); -} - -static void s390_store_gs (struct regcache *regcache, const void *buf) { int gsd = find_regno (regcache->tdesc, "gsd"); @@ -395,16 +385,6 @@ s390_store_gs (struct regcache *regcache, const void *buf) } static void -s390_fill_gsbc (struct regcache *regcache, void *buf) -{ - int bc_gsd = find_regno (regcache->tdesc, "bc_gsd"); - int i; - - for (i = 0; i < 3; i++) - collect_register (regcache, bc_gsd + i, (char *) buf + 8 * (i + 1)); -} - -static void s390_store_gsbc (struct regcache *regcache, const void *buf) { int bc_gsd = find_regno (regcache->tdesc, "bc_gsd"); @@ -432,10 +412,11 @@ static struct regset_info s390_regsets[] = { EXTENDED_REGS, s390_fill_vxrs_low, s390_store_vxrs_low }, { PTRACE_GETREGSET, PTRACE_SETREGSET, NT_S390_VXRS_HIGH, 0, EXTENDED_REGS, s390_fill_vxrs_high, s390_store_vxrs_high }, - { PTRACE_GETREGSET, PTRACE_SETREGSET, NT_S390_GS_CB, 0, - EXTENDED_REGS, s390_fill_gs, s390_store_gs }, - { PTRACE_GETREGSET, PTRACE_SETREGSET, NT_S390_GS_BC, 0, - EXTENDED_REGS, s390_fill_gsbc, s390_store_gsbc }, + /* Guarded storage registers are read-only. */ + { PTRACE_GETREGSET, -1, NT_S390_GS_CB, 0, EXTENDED_REGS, + NULL, s390_store_gs }, + { PTRACE_GETREGSET, -1, NT_S390_GS_BC, 0, EXTENDED_REGS, + NULL, s390_store_gsbc }, NULL_REGSET }; -- 2.7.4