From: Andreas Arnez Date: Wed, 21 Mar 2018 16:41:45 +0000 (+0100) Subject: S390: gdbserver: Don't write guarded storage registers X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=c49bd90bdb03f3013a796ea920830547cacc3c48;p=binutils-gdb.git 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. --- diff --git a/gdb/gdbserver/ChangeLog b/gdb/gdbserver/ChangeLog index 958a6dd0eaa..e63d89fb91b 100644 --- a/gdb/gdbserver/ChangeLog +++ b/gdb/gdbserver/ChangeLog @@ -1,3 +1,10 @@ +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 diff --git a/gdb/gdbserver/linux-s390-low.c b/gdb/gdbserver/linux-s390-low.c index 203accdaaa2..7de70f3a389 100644 --- a/gdb/gdbserver/linux-s390-low.c +++ b/gdb/gdbserver/linux-s390-low.c @@ -374,16 +374,6 @@ s390_store_vxrs_high (struct regcache *regcache, const void *buf) supply_register (regcache, v16 + i, (const char *) buf + 16 * i); } -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) { @@ -394,16 +384,6 @@ s390_store_gs (struct regcache *regcache, const void *buf) supply_register (regcache, gsd + i, (const char *) buf + 8 * (i + 1)); } -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) { @@ -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 };