public inbox for gdb-patches@sourceware.org
 help / color / mirror / Atom feed
* [PATCH 0/4] S390: Guarded storage register set support
@ 2017-09-21 16:41 Andreas Arnez
  2017-09-21 16:41 ` [PATCH 1/4] S390: Add guarded-storage register definitions and tdescs Andreas Arnez
                   ` (4 more replies)
  0 siblings, 5 replies; 9+ messages in thread
From: Andreas Arnez @ 2017-09-21 16:41 UTC (permalink / raw)
  To: gdb-patches

This adds GDB support for the guarded storage register sets available on
z14 platforms with a new Linux kernel.  The kernel presents two register
sets, one of them representing actual hardware registers and the other one
being software-based.

Andreas Arnez (4):
  S390: Add guarded-storage register definitions and tdescs
  S390: Add guarded-storage register support to GDB
  S390: Add guarded-storage register support to gdbserver
  S390: Document guarded-storage register support

 gdb/NEWS                            |   3 +
 gdb/doc/gdb.texinfo                 |   8 ++
 gdb/features/Makefile               |   5 +
 gdb/features/s390-gs-linux64.c      | 198 ++++++++++++++++++++++++++++++++++++
 gdb/features/s390-gs-linux64.xml    |  28 +++++
 gdb/features/s390-gs.xml            |  13 +++
 gdb/features/s390-gsbc.xml          |  13 +++
 gdb/features/s390x-gs-linux64.c     | 182 +++++++++++++++++++++++++++++++++
 gdb/features/s390x-gs-linux64.xml   |  27 +++++
 gdb/gdbserver/configure.srv         |   8 ++
 gdb/gdbserver/linux-s390-low.c      |  68 ++++++++++++-
 gdb/gdbserver/linux-s390-tdesc.h    |   9 ++
 gdb/regformats/s390-gs-linux64.dat  | 133 ++++++++++++++++++++++++
 gdb/regformats/s390x-gs-linux64.dat | 117 +++++++++++++++++++++
 gdb/s390-linux-nat.c                |  22 +++-
 gdb/s390-linux-tdep.c               |  94 ++++++++++++++++-
 gdb/s390-linux-tdep.h               |  16 ++-
 17 files changed, 936 insertions(+), 8 deletions(-)
 create mode 100644 gdb/features/s390-gs-linux64.c
 create mode 100644 gdb/features/s390-gs-linux64.xml
 create mode 100644 gdb/features/s390-gs.xml
 create mode 100644 gdb/features/s390-gsbc.xml
 create mode 100644 gdb/features/s390x-gs-linux64.c
 create mode 100644 gdb/features/s390x-gs-linux64.xml
 create mode 100644 gdb/regformats/s390-gs-linux64.dat
 create mode 100644 gdb/regformats/s390x-gs-linux64.dat

-- 
2.5.0

^ permalink raw reply	[flat|nested] 9+ messages in thread

* [PATCH 1/4] S390: Add guarded-storage register definitions and tdescs
  2017-09-21 16:41 [PATCH 0/4] S390: Guarded storage register set support Andreas Arnez
@ 2017-09-21 16:41 ` Andreas Arnez
  2017-09-21 16:42 ` [PATCH 2/4] S390: Add guarded-storage register support to GDB Andreas Arnez
                   ` (3 subsequent siblings)
  4 siblings, 0 replies; 9+ messages in thread
From: Andreas Arnez @ 2017-09-21 16:41 UTC (permalink / raw)
  To: gdb-patches

Newer Linux kernel versions offer two new register sets in support of the
z/Architecture's guarded storage facility.  This patch adds XML
descriptions and the respective autogenerated .c and .dat files for
s390/s390x targets with this feature.

gdb/ChangeLog:

	* features/s390-gs-linux64.xml: New file.
	* features/s390-gs.xml: New file.
	* features/s390-gsbc.xml: New file.
	* features/s390x-gs-linux64.xml: New file.
	* features/Makefile (WHICH): Add s390-gs-linux64 and
	s390x-gs-linux64.
	(s390-gs-linux64-expedite, s390x-gs-linux64-expedite): New macros.
	(XMLTOC): Add s390-gs-linux64.xml and s390x-linux64.xml.
	* features/s390-gs-linux64.c: New generated file.
	* features/s390x-gs-linux64.c: New file.
	* regformats/s390-gs-linux64.dat: New file.
	* regformats/s390x-gs-linux64.dat: New file.
---
 gdb/features/Makefile               |   5 +
 gdb/features/s390-gs-linux64.c      | 198 ++++++++++++++++++++++++++++++++++++
 gdb/features/s390-gs-linux64.xml    |  28 +++++
 gdb/features/s390-gs.xml            |  13 +++
 gdb/features/s390-gsbc.xml          |  13 +++
 gdb/features/s390x-gs-linux64.c     | 182 +++++++++++++++++++++++++++++++++
 gdb/features/s390x-gs-linux64.xml   |  27 +++++
 gdb/regformats/s390-gs-linux64.dat  | 133 ++++++++++++++++++++++++
 gdb/regformats/s390x-gs-linux64.dat | 117 +++++++++++++++++++++
 9 files changed, 716 insertions(+)
 create mode 100644 gdb/features/s390-gs-linux64.c
 create mode 100644 gdb/features/s390-gs-linux64.xml
 create mode 100644 gdb/features/s390-gs.xml
 create mode 100644 gdb/features/s390-gsbc.xml
 create mode 100644 gdb/features/s390x-gs-linux64.c
 create mode 100644 gdb/features/s390x-gs-linux64.xml
 create mode 100644 gdb/regformats/s390-gs-linux64.dat
 create mode 100644 gdb/regformats/s390x-gs-linux64.dat

diff --git a/gdb/features/Makefile b/gdb/features/Makefile
index 0a9066c..8a7f377 100644
--- a/gdb/features/Makefile
+++ b/gdb/features/Makefile
@@ -78,6 +78,7 @@ WHICH = aarch64 \
 	s390-linux32v2 s390-linux64v2 s390x-linux64v2 \
 	s390-te-linux64 s390x-te-linux64 s390-vx-linux64 s390x-vx-linux64 \
 	s390-tevx-linux64 s390x-tevx-linux64 \
+	s390-gs-linux64 s390x-gs-linux64 \
 	tic6x-c64xp tic6x-c64x tic6x-c62x \
 	tic6x-c64xp-linux tic6x-c64x-linux tic6x-c62x-linux
 
@@ -105,12 +106,14 @@ s390-linux64v2-expedite = r14l,r15l,pswa
 s390-te-linux64-expedite = r14l,r15l,pswa
 s390-vx-linux64-expedite = r14l,r15l,pswa
 s390-tevx-linux64-expedite = r14l,r15l,pswa
+s390-gs-linux64-expedite = r14,r15,pswa
 s390x-linux64-expedite = r14,r15,pswa
 s390x-linux64v1-expedite = r14,r15,pswa
 s390x-linux64v2-expedite = r14,r15,pswa
 s390x-te-linux64-expedite = r14,r15,pswa
 s390x-vx-linux64-expedite = r14,r15,pswa
 s390x-tevx-linux64-expedite = r14,r15,pswa
+s390x-gs-linux64-expedite = r14,r15,pswa
 tic6x-c64xp-expedite = A15,PC
 tic6x-c64x-expedite = A15,PC
 tic6x-c62x-expedite = A15,PC
@@ -196,6 +199,8 @@ XMLTOC = \
 	s390-vx-linux64.xml \
 	s390x-tevx-linux64.xml \
 	s390x-vx-linux64.xml \
+	s390-gs-linux64.xml \
+	s390x-gs-linux64.xml \
 	tic6x-c62x-linux.xml \
 	tic6x-c62x.xml \
 	tic6x-c64x-linux.xml \
diff --git a/gdb/features/s390-gs-linux64.c b/gdb/features/s390-gs-linux64.c
new file mode 100644
index 0000000..ce24799
--- /dev/null
+++ b/gdb/features/s390-gs-linux64.c
@@ -0,0 +1,198 @@
+/* THIS FILE IS GENERATED.  -*- buffer-read-only: t -*- vi:set ro:
+  Original: s390-gs-linux64.xml */
+
+#include "defs.h"
+#include "osabi.h"
+#include "target-descriptions.h"
+
+struct target_desc *tdesc_s390_gs_linux64;
+static void
+initialize_tdesc_s390_gs_linux64 (void)
+{
+  struct target_desc *result = allocate_target_description ();
+  struct tdesc_feature *feature;
+  struct tdesc_type *field_type;
+  struct tdesc_type *type;
+
+  set_tdesc_architecture (result, bfd_scan_arch ("s390:31-bit"));
+
+  feature = tdesc_create_feature (result, "org.gnu.gdb.s390.core");
+  tdesc_create_reg (feature, "pswm", 0, 1, "psw", 32, "uint32");
+  tdesc_create_reg (feature, "pswa", 1, 1, "psw", 32, "uint32");
+  tdesc_create_reg (feature, "r0h", 2, 1, "upper", 32, "uint32");
+  tdesc_create_reg (feature, "r0l", 3, 1, "lower", 32, "uint32");
+  tdesc_create_reg (feature, "r1h", 4, 1, "upper", 32, "uint32");
+  tdesc_create_reg (feature, "r1l", 5, 1, "lower", 32, "uint32");
+  tdesc_create_reg (feature, "r2h", 6, 1, "upper", 32, "uint32");
+  tdesc_create_reg (feature, "r2l", 7, 1, "lower", 32, "uint32");
+  tdesc_create_reg (feature, "r3h", 8, 1, "upper", 32, "uint32");
+  tdesc_create_reg (feature, "r3l", 9, 1, "lower", 32, "uint32");
+  tdesc_create_reg (feature, "r4h", 10, 1, "upper", 32, "uint32");
+  tdesc_create_reg (feature, "r4l", 11, 1, "lower", 32, "uint32");
+  tdesc_create_reg (feature, "r5h", 12, 1, "upper", 32, "uint32");
+  tdesc_create_reg (feature, "r5l", 13, 1, "lower", 32, "uint32");
+  tdesc_create_reg (feature, "r6h", 14, 1, "upper", 32, "uint32");
+  tdesc_create_reg (feature, "r6l", 15, 1, "lower", 32, "uint32");
+  tdesc_create_reg (feature, "r7h", 16, 1, "upper", 32, "uint32");
+  tdesc_create_reg (feature, "r7l", 17, 1, "lower", 32, "uint32");
+  tdesc_create_reg (feature, "r8h", 18, 1, "upper", 32, "uint32");
+  tdesc_create_reg (feature, "r8l", 19, 1, "lower", 32, "uint32");
+  tdesc_create_reg (feature, "r9h", 20, 1, "upper", 32, "uint32");
+  tdesc_create_reg (feature, "r9l", 21, 1, "lower", 32, "uint32");
+  tdesc_create_reg (feature, "r10h", 22, 1, "upper", 32, "uint32");
+  tdesc_create_reg (feature, "r10l", 23, 1, "lower", 32, "uint32");
+  tdesc_create_reg (feature, "r11h", 24, 1, "upper", 32, "uint32");
+  tdesc_create_reg (feature, "r11l", 25, 1, "lower", 32, "uint32");
+  tdesc_create_reg (feature, "r12h", 26, 1, "upper", 32, "uint32");
+  tdesc_create_reg (feature, "r12l", 27, 1, "lower", 32, "uint32");
+  tdesc_create_reg (feature, "r13h", 28, 1, "upper", 32, "uint32");
+  tdesc_create_reg (feature, "r13l", 29, 1, "lower", 32, "uint32");
+  tdesc_create_reg (feature, "r14h", 30, 1, "upper", 32, "uint32");
+  tdesc_create_reg (feature, "r14l", 31, 1, "lower", 32, "uint32");
+  tdesc_create_reg (feature, "r15h", 32, 1, "upper", 32, "uint32");
+  tdesc_create_reg (feature, "r15l", 33, 1, "lower", 32, "uint32");
+
+  feature = tdesc_create_feature (result, "org.gnu.gdb.s390.acr");
+  tdesc_create_reg (feature, "acr0", 34, 1, "access", 32, "uint32");
+  tdesc_create_reg (feature, "acr1", 35, 1, "access", 32, "uint32");
+  tdesc_create_reg (feature, "acr2", 36, 1, "access", 32, "uint32");
+  tdesc_create_reg (feature, "acr3", 37, 1, "access", 32, "uint32");
+  tdesc_create_reg (feature, "acr4", 38, 1, "access", 32, "uint32");
+  tdesc_create_reg (feature, "acr5", 39, 1, "access", 32, "uint32");
+  tdesc_create_reg (feature, "acr6", 40, 1, "access", 32, "uint32");
+  tdesc_create_reg (feature, "acr7", 41, 1, "access", 32, "uint32");
+  tdesc_create_reg (feature, "acr8", 42, 1, "access", 32, "uint32");
+  tdesc_create_reg (feature, "acr9", 43, 1, "access", 32, "uint32");
+  tdesc_create_reg (feature, "acr10", 44, 1, "access", 32, "uint32");
+  tdesc_create_reg (feature, "acr11", 45, 1, "access", 32, "uint32");
+  tdesc_create_reg (feature, "acr12", 46, 1, "access", 32, "uint32");
+  tdesc_create_reg (feature, "acr13", 47, 1, "access", 32, "uint32");
+  tdesc_create_reg (feature, "acr14", 48, 1, "access", 32, "uint32");
+  tdesc_create_reg (feature, "acr15", 49, 1, "access", 32, "uint32");
+
+  feature = tdesc_create_feature (result, "org.gnu.gdb.s390.fpr");
+  tdesc_create_reg (feature, "fpc", 50, 1, "float", 32, "uint32");
+  tdesc_create_reg (feature, "f0", 51, 1, "float", 64, "ieee_double");
+  tdesc_create_reg (feature, "f1", 52, 1, "float", 64, "ieee_double");
+  tdesc_create_reg (feature, "f2", 53, 1, "float", 64, "ieee_double");
+  tdesc_create_reg (feature, "f3", 54, 1, "float", 64, "ieee_double");
+  tdesc_create_reg (feature, "f4", 55, 1, "float", 64, "ieee_double");
+  tdesc_create_reg (feature, "f5", 56, 1, "float", 64, "ieee_double");
+  tdesc_create_reg (feature, "f6", 57, 1, "float", 64, "ieee_double");
+  tdesc_create_reg (feature, "f7", 58, 1, "float", 64, "ieee_double");
+  tdesc_create_reg (feature, "f8", 59, 1, "float", 64, "ieee_double");
+  tdesc_create_reg (feature, "f9", 60, 1, "float", 64, "ieee_double");
+  tdesc_create_reg (feature, "f10", 61, 1, "float", 64, "ieee_double");
+  tdesc_create_reg (feature, "f11", 62, 1, "float", 64, "ieee_double");
+  tdesc_create_reg (feature, "f12", 63, 1, "float", 64, "ieee_double");
+  tdesc_create_reg (feature, "f13", 64, 1, "float", 64, "ieee_double");
+  tdesc_create_reg (feature, "f14", 65, 1, "float", 64, "ieee_double");
+  tdesc_create_reg (feature, "f15", 66, 1, "float", 64, "ieee_double");
+
+  feature = tdesc_create_feature (result, "org.gnu.gdb.s390.linux");
+  tdesc_create_reg (feature, "orig_r2", 67, 1, "system", 32, "uint32");
+  tdesc_create_reg (feature, "last_break", 68, 0, "system", 32, "code_ptr");
+  tdesc_create_reg (feature, "system_call", 69, 1, "system", 32, "uint32");
+
+  feature = tdesc_create_feature (result, "org.gnu.gdb.s390.tdb");
+  tdesc_create_reg (feature, "tdb0", 70, 1, "tdb", 64, "uint64");
+  tdesc_create_reg (feature, "tac", 71, 1, "tdb", 64, "uint64");
+  tdesc_create_reg (feature, "tct", 72, 1, "tdb", 64, "uint64");
+  tdesc_create_reg (feature, "atia", 73, 1, "tdb", 64, "uint64");
+  tdesc_create_reg (feature, "tr0", 74, 1, "tdb", 64, "uint64");
+  tdesc_create_reg (feature, "tr1", 75, 1, "tdb", 64, "uint64");
+  tdesc_create_reg (feature, "tr2", 76, 1, "tdb", 64, "uint64");
+  tdesc_create_reg (feature, "tr3", 77, 1, "tdb", 64, "uint64");
+  tdesc_create_reg (feature, "tr4", 78, 1, "tdb", 64, "uint64");
+  tdesc_create_reg (feature, "tr5", 79, 1, "tdb", 64, "uint64");
+  tdesc_create_reg (feature, "tr6", 80, 1, "tdb", 64, "uint64");
+  tdesc_create_reg (feature, "tr7", 81, 1, "tdb", 64, "uint64");
+  tdesc_create_reg (feature, "tr8", 82, 1, "tdb", 64, "uint64");
+  tdesc_create_reg (feature, "tr9", 83, 1, "tdb", 64, "uint64");
+  tdesc_create_reg (feature, "tr10", 84, 1, "tdb", 64, "uint64");
+  tdesc_create_reg (feature, "tr11", 85, 1, "tdb", 64, "uint64");
+  tdesc_create_reg (feature, "tr12", 86, 1, "tdb", 64, "uint64");
+  tdesc_create_reg (feature, "tr13", 87, 1, "tdb", 64, "uint64");
+  tdesc_create_reg (feature, "tr14", 88, 1, "tdb", 64, "uint64");
+  tdesc_create_reg (feature, "tr15", 89, 1, "tdb", 64, "uint64");
+
+  feature = tdesc_create_feature (result, "org.gnu.gdb.s390.vx");
+  field_type = tdesc_named_type (feature, "ieee_single");
+  tdesc_create_vector (feature, "v4f", field_type, 4);
+
+  field_type = tdesc_named_type (feature, "ieee_double");
+  tdesc_create_vector (feature, "v2d", field_type, 2);
+
+  field_type = tdesc_named_type (feature, "int8");
+  tdesc_create_vector (feature, "v16i8", field_type, 16);
+
+  field_type = tdesc_named_type (feature, "int16");
+  tdesc_create_vector (feature, "v8i16", field_type, 8);
+
+  field_type = tdesc_named_type (feature, "int32");
+  tdesc_create_vector (feature, "v4i32", field_type, 4);
+
+  field_type = tdesc_named_type (feature, "int64");
+  tdesc_create_vector (feature, "v2i64", field_type, 2);
+
+  type = tdesc_create_union (feature, "vec128");
+  field_type = tdesc_named_type (feature, "v4f");
+  tdesc_add_field (type, "v4_float", field_type);
+  field_type = tdesc_named_type (feature, "v2d");
+  tdesc_add_field (type, "v2_double", field_type);
+  field_type = tdesc_named_type (feature, "v16i8");
+  tdesc_add_field (type, "v16_int8", field_type);
+  field_type = tdesc_named_type (feature, "v8i16");
+  tdesc_add_field (type, "v8_int16", field_type);
+  field_type = tdesc_named_type (feature, "v4i32");
+  tdesc_add_field (type, "v4_int32", field_type);
+  field_type = tdesc_named_type (feature, "v2i64");
+  tdesc_add_field (type, "v2_int64", field_type);
+  field_type = tdesc_named_type (feature, "uint128");
+  tdesc_add_field (type, "uint128", field_type);
+
+  tdesc_create_reg (feature, "v0l", 90, 1, NULL, 64, "uint64");
+  tdesc_create_reg (feature, "v1l", 91, 1, NULL, 64, "uint64");
+  tdesc_create_reg (feature, "v2l", 92, 1, NULL, 64, "uint64");
+  tdesc_create_reg (feature, "v3l", 93, 1, NULL, 64, "uint64");
+  tdesc_create_reg (feature, "v4l", 94, 1, NULL, 64, "uint64");
+  tdesc_create_reg (feature, "v5l", 95, 1, NULL, 64, "uint64");
+  tdesc_create_reg (feature, "v6l", 96, 1, NULL, 64, "uint64");
+  tdesc_create_reg (feature, "v7l", 97, 1, NULL, 64, "uint64");
+  tdesc_create_reg (feature, "v8l", 98, 1, NULL, 64, "uint64");
+  tdesc_create_reg (feature, "v9l", 99, 1, NULL, 64, "uint64");
+  tdesc_create_reg (feature, "v10l", 100, 1, NULL, 64, "uint64");
+  tdesc_create_reg (feature, "v11l", 101, 1, NULL, 64, "uint64");
+  tdesc_create_reg (feature, "v12l", 102, 1, NULL, 64, "uint64");
+  tdesc_create_reg (feature, "v13l", 103, 1, NULL, 64, "uint64");
+  tdesc_create_reg (feature, "v14l", 104, 1, NULL, 64, "uint64");
+  tdesc_create_reg (feature, "v15l", 105, 1, NULL, 64, "uint64");
+  tdesc_create_reg (feature, "v16", 106, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "v17", 107, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "v18", 108, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "v19", 109, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "v20", 110, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "v21", 111, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "v22", 112, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "v23", 113, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "v24", 114, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "v25", 115, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "v26", 116, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "v27", 117, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "v28", 118, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "v29", 119, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "v30", 120, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "v31", 121, 1, NULL, 128, "vec128");
+
+  feature = tdesc_create_feature (result, "org.gnu.gdb.s390.gs");
+  tdesc_create_reg (feature, "gsd", 122, 1, "gs", 64, "uint64");
+  tdesc_create_reg (feature, "gssm", 123, 1, "gs", 64, "uint64");
+  tdesc_create_reg (feature, "gsepla", 124, 1, "gs", 64, "data_ptr");
+
+  feature = tdesc_create_feature (result, "org.gnu.gdb.s390.gsbc");
+  tdesc_create_reg (feature, "bc_gsd", 125, 1, "gs", 64, "uint64");
+  tdesc_create_reg (feature, "bc_gssm", 126, 1, "gs", 64, "uint64");
+  tdesc_create_reg (feature, "bc_gsepla", 127, 1, "gs", 64, "data_ptr");
+
+  tdesc_s390_gs_linux64 = result;
+}
diff --git a/gdb/features/s390-gs-linux64.xml b/gdb/features/s390-gs-linux64.xml
new file mode 100644
index 0000000..6dc39ee
--- /dev/null
+++ b/gdb/features/s390-gs-linux64.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0"?>
+<!-- Copyright (C) 2017 Free Software Foundation, Inc.
+
+     Copying and distribution of this file, with or without modification,
+     are permitted in any medium without royalty provided the copyright
+     notice and this notice are preserved.  -->
+
+<!-- S/390 31-bit user-level code on a machine operating
+     in z/Architecture mode.  -->
+
+<!DOCTYPE target SYSTEM "gdb-target.dtd">
+<target>
+  <architecture>s390:31-bit</architecture>
+  <xi:include href="s390-core64.xml"/>
+  <xi:include href="s390-acr.xml"/>
+  <xi:include href="s390-fpr.xml"/>
+
+  <feature name="org.gnu.gdb.s390.linux">
+    <reg name="orig_r2" bitsize="32" type="uint32" group="system"/>
+    <reg name="last_break" bitsize="32" type="code_ptr" group="system" save-restore="no"/>
+    <reg name="system_call" bitsize="32" type="uint32" group="system"/>
+  </feature>
+
+  <xi:include href="s390-tdb.xml"/>
+  <xi:include href="s390-vx.xml"/>
+  <xi:include href="s390-gs.xml"/>
+  <xi:include href="s390-gsbc.xml"/>
+</target>
diff --git a/gdb/features/s390-gs.xml b/gdb/features/s390-gs.xml
new file mode 100644
index 0000000..46aa1d7
--- /dev/null
+++ b/gdb/features/s390-gs.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0"?>
+<!-- Copyright (C) 2017 Free Software Foundation, Inc.
+
+     Copying and distribution of this file, with or without modification,
+     are permitted in any medium without royalty provided the copyright
+     notice and this notice are preserved.  -->
+
+<!DOCTYPE feature SYSTEM "gdb-target.dtd">
+<feature name="org.gnu.gdb.s390.gs">
+  <reg name="gsd" bitsize="64" type="uint64" group="gs"/>
+  <reg name="gssm" bitsize="64" type="uint64" group="gs"/>
+  <reg name="gsepla" bitsize="64" type="data_ptr" group="gs"/>
+</feature>
diff --git a/gdb/features/s390-gsbc.xml b/gdb/features/s390-gsbc.xml
new file mode 100644
index 0000000..ee09187
--- /dev/null
+++ b/gdb/features/s390-gsbc.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0"?>
+<!-- Copyright (C) 2017 Free Software Foundation, Inc.
+
+     Copying and distribution of this file, with or without modification,
+     are permitted in any medium without royalty provided the copyright
+     notice and this notice are preserved.  -->
+
+<!DOCTYPE feature SYSTEM "gdb-target.dtd">
+<feature name="org.gnu.gdb.s390.gsbc">
+  <reg name="bc_gsd" bitsize="64" type="uint64" group="gs"/>
+  <reg name="bc_gssm" bitsize="64" type="uint64" group="gs"/>
+  <reg name="bc_gsepla" bitsize="64" type="data_ptr" group="gs"/>
+</feature>
diff --git a/gdb/features/s390x-gs-linux64.c b/gdb/features/s390x-gs-linux64.c
new file mode 100644
index 0000000..c101fd8
--- /dev/null
+++ b/gdb/features/s390x-gs-linux64.c
@@ -0,0 +1,182 @@
+/* THIS FILE IS GENERATED.  -*- buffer-read-only: t -*- vi:set ro:
+  Original: s390x-gs-linux64.xml */
+
+#include "defs.h"
+#include "osabi.h"
+#include "target-descriptions.h"
+
+struct target_desc *tdesc_s390x_gs_linux64;
+static void
+initialize_tdesc_s390x_gs_linux64 (void)
+{
+  struct target_desc *result = allocate_target_description ();
+  struct tdesc_feature *feature;
+  struct tdesc_type *field_type;
+  struct tdesc_type *type;
+
+  set_tdesc_architecture (result, bfd_scan_arch ("s390:64-bit"));
+
+  feature = tdesc_create_feature (result, "org.gnu.gdb.s390.core");
+  tdesc_create_reg (feature, "pswm", 0, 1, "psw", 64, "uint64");
+  tdesc_create_reg (feature, "pswa", 1, 1, "psw", 64, "uint64");
+  tdesc_create_reg (feature, "r0", 2, 1, "general", 64, "uint64");
+  tdesc_create_reg (feature, "r1", 3, 1, "general", 64, "uint64");
+  tdesc_create_reg (feature, "r2", 4, 1, "general", 64, "uint64");
+  tdesc_create_reg (feature, "r3", 5, 1, "general", 64, "uint64");
+  tdesc_create_reg (feature, "r4", 6, 1, "general", 64, "uint64");
+  tdesc_create_reg (feature, "r5", 7, 1, "general", 64, "uint64");
+  tdesc_create_reg (feature, "r6", 8, 1, "general", 64, "uint64");
+  tdesc_create_reg (feature, "r7", 9, 1, "general", 64, "uint64");
+  tdesc_create_reg (feature, "r8", 10, 1, "general", 64, "uint64");
+  tdesc_create_reg (feature, "r9", 11, 1, "general", 64, "uint64");
+  tdesc_create_reg (feature, "r10", 12, 1, "general", 64, "uint64");
+  tdesc_create_reg (feature, "r11", 13, 1, "general", 64, "uint64");
+  tdesc_create_reg (feature, "r12", 14, 1, "general", 64, "uint64");
+  tdesc_create_reg (feature, "r13", 15, 1, "general", 64, "uint64");
+  tdesc_create_reg (feature, "r14", 16, 1, "general", 64, "uint64");
+  tdesc_create_reg (feature, "r15", 17, 1, "general", 64, "uint64");
+
+  feature = tdesc_create_feature (result, "org.gnu.gdb.s390.acr");
+  tdesc_create_reg (feature, "acr0", 18, 1, "access", 32, "uint32");
+  tdesc_create_reg (feature, "acr1", 19, 1, "access", 32, "uint32");
+  tdesc_create_reg (feature, "acr2", 20, 1, "access", 32, "uint32");
+  tdesc_create_reg (feature, "acr3", 21, 1, "access", 32, "uint32");
+  tdesc_create_reg (feature, "acr4", 22, 1, "access", 32, "uint32");
+  tdesc_create_reg (feature, "acr5", 23, 1, "access", 32, "uint32");
+  tdesc_create_reg (feature, "acr6", 24, 1, "access", 32, "uint32");
+  tdesc_create_reg (feature, "acr7", 25, 1, "access", 32, "uint32");
+  tdesc_create_reg (feature, "acr8", 26, 1, "access", 32, "uint32");
+  tdesc_create_reg (feature, "acr9", 27, 1, "access", 32, "uint32");
+  tdesc_create_reg (feature, "acr10", 28, 1, "access", 32, "uint32");
+  tdesc_create_reg (feature, "acr11", 29, 1, "access", 32, "uint32");
+  tdesc_create_reg (feature, "acr12", 30, 1, "access", 32, "uint32");
+  tdesc_create_reg (feature, "acr13", 31, 1, "access", 32, "uint32");
+  tdesc_create_reg (feature, "acr14", 32, 1, "access", 32, "uint32");
+  tdesc_create_reg (feature, "acr15", 33, 1, "access", 32, "uint32");
+
+  feature = tdesc_create_feature (result, "org.gnu.gdb.s390.fpr");
+  tdesc_create_reg (feature, "fpc", 34, 1, "float", 32, "uint32");
+  tdesc_create_reg (feature, "f0", 35, 1, "float", 64, "ieee_double");
+  tdesc_create_reg (feature, "f1", 36, 1, "float", 64, "ieee_double");
+  tdesc_create_reg (feature, "f2", 37, 1, "float", 64, "ieee_double");
+  tdesc_create_reg (feature, "f3", 38, 1, "float", 64, "ieee_double");
+  tdesc_create_reg (feature, "f4", 39, 1, "float", 64, "ieee_double");
+  tdesc_create_reg (feature, "f5", 40, 1, "float", 64, "ieee_double");
+  tdesc_create_reg (feature, "f6", 41, 1, "float", 64, "ieee_double");
+  tdesc_create_reg (feature, "f7", 42, 1, "float", 64, "ieee_double");
+  tdesc_create_reg (feature, "f8", 43, 1, "float", 64, "ieee_double");
+  tdesc_create_reg (feature, "f9", 44, 1, "float", 64, "ieee_double");
+  tdesc_create_reg (feature, "f10", 45, 1, "float", 64, "ieee_double");
+  tdesc_create_reg (feature, "f11", 46, 1, "float", 64, "ieee_double");
+  tdesc_create_reg (feature, "f12", 47, 1, "float", 64, "ieee_double");
+  tdesc_create_reg (feature, "f13", 48, 1, "float", 64, "ieee_double");
+  tdesc_create_reg (feature, "f14", 49, 1, "float", 64, "ieee_double");
+  tdesc_create_reg (feature, "f15", 50, 1, "float", 64, "ieee_double");
+
+  feature = tdesc_create_feature (result, "org.gnu.gdb.s390.linux");
+  tdesc_create_reg (feature, "orig_r2", 51, 1, "system", 64, "uint64");
+  tdesc_create_reg (feature, "last_break", 52, 0, "system", 64, "code_ptr");
+  tdesc_create_reg (feature, "system_call", 53, 1, "system", 32, "uint32");
+
+  feature = tdesc_create_feature (result, "org.gnu.gdb.s390.tdb");
+  tdesc_create_reg (feature, "tdb0", 54, 1, "tdb", 64, "uint64");
+  tdesc_create_reg (feature, "tac", 55, 1, "tdb", 64, "uint64");
+  tdesc_create_reg (feature, "tct", 56, 1, "tdb", 64, "uint64");
+  tdesc_create_reg (feature, "atia", 57, 1, "tdb", 64, "uint64");
+  tdesc_create_reg (feature, "tr0", 58, 1, "tdb", 64, "uint64");
+  tdesc_create_reg (feature, "tr1", 59, 1, "tdb", 64, "uint64");
+  tdesc_create_reg (feature, "tr2", 60, 1, "tdb", 64, "uint64");
+  tdesc_create_reg (feature, "tr3", 61, 1, "tdb", 64, "uint64");
+  tdesc_create_reg (feature, "tr4", 62, 1, "tdb", 64, "uint64");
+  tdesc_create_reg (feature, "tr5", 63, 1, "tdb", 64, "uint64");
+  tdesc_create_reg (feature, "tr6", 64, 1, "tdb", 64, "uint64");
+  tdesc_create_reg (feature, "tr7", 65, 1, "tdb", 64, "uint64");
+  tdesc_create_reg (feature, "tr8", 66, 1, "tdb", 64, "uint64");
+  tdesc_create_reg (feature, "tr9", 67, 1, "tdb", 64, "uint64");
+  tdesc_create_reg (feature, "tr10", 68, 1, "tdb", 64, "uint64");
+  tdesc_create_reg (feature, "tr11", 69, 1, "tdb", 64, "uint64");
+  tdesc_create_reg (feature, "tr12", 70, 1, "tdb", 64, "uint64");
+  tdesc_create_reg (feature, "tr13", 71, 1, "tdb", 64, "uint64");
+  tdesc_create_reg (feature, "tr14", 72, 1, "tdb", 64, "uint64");
+  tdesc_create_reg (feature, "tr15", 73, 1, "tdb", 64, "uint64");
+
+  feature = tdesc_create_feature (result, "org.gnu.gdb.s390.vx");
+  field_type = tdesc_named_type (feature, "ieee_single");
+  tdesc_create_vector (feature, "v4f", field_type, 4);
+
+  field_type = tdesc_named_type (feature, "ieee_double");
+  tdesc_create_vector (feature, "v2d", field_type, 2);
+
+  field_type = tdesc_named_type (feature, "int8");
+  tdesc_create_vector (feature, "v16i8", field_type, 16);
+
+  field_type = tdesc_named_type (feature, "int16");
+  tdesc_create_vector (feature, "v8i16", field_type, 8);
+
+  field_type = tdesc_named_type (feature, "int32");
+  tdesc_create_vector (feature, "v4i32", field_type, 4);
+
+  field_type = tdesc_named_type (feature, "int64");
+  tdesc_create_vector (feature, "v2i64", field_type, 2);
+
+  type = tdesc_create_union (feature, "vec128");
+  field_type = tdesc_named_type (feature, "v4f");
+  tdesc_add_field (type, "v4_float", field_type);
+  field_type = tdesc_named_type (feature, "v2d");
+  tdesc_add_field (type, "v2_double", field_type);
+  field_type = tdesc_named_type (feature, "v16i8");
+  tdesc_add_field (type, "v16_int8", field_type);
+  field_type = tdesc_named_type (feature, "v8i16");
+  tdesc_add_field (type, "v8_int16", field_type);
+  field_type = tdesc_named_type (feature, "v4i32");
+  tdesc_add_field (type, "v4_int32", field_type);
+  field_type = tdesc_named_type (feature, "v2i64");
+  tdesc_add_field (type, "v2_int64", field_type);
+  field_type = tdesc_named_type (feature, "uint128");
+  tdesc_add_field (type, "uint128", field_type);
+
+  tdesc_create_reg (feature, "v0l", 74, 1, NULL, 64, "uint64");
+  tdesc_create_reg (feature, "v1l", 75, 1, NULL, 64, "uint64");
+  tdesc_create_reg (feature, "v2l", 76, 1, NULL, 64, "uint64");
+  tdesc_create_reg (feature, "v3l", 77, 1, NULL, 64, "uint64");
+  tdesc_create_reg (feature, "v4l", 78, 1, NULL, 64, "uint64");
+  tdesc_create_reg (feature, "v5l", 79, 1, NULL, 64, "uint64");
+  tdesc_create_reg (feature, "v6l", 80, 1, NULL, 64, "uint64");
+  tdesc_create_reg (feature, "v7l", 81, 1, NULL, 64, "uint64");
+  tdesc_create_reg (feature, "v8l", 82, 1, NULL, 64, "uint64");
+  tdesc_create_reg (feature, "v9l", 83, 1, NULL, 64, "uint64");
+  tdesc_create_reg (feature, "v10l", 84, 1, NULL, 64, "uint64");
+  tdesc_create_reg (feature, "v11l", 85, 1, NULL, 64, "uint64");
+  tdesc_create_reg (feature, "v12l", 86, 1, NULL, 64, "uint64");
+  tdesc_create_reg (feature, "v13l", 87, 1, NULL, 64, "uint64");
+  tdesc_create_reg (feature, "v14l", 88, 1, NULL, 64, "uint64");
+  tdesc_create_reg (feature, "v15l", 89, 1, NULL, 64, "uint64");
+  tdesc_create_reg (feature, "v16", 90, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "v17", 91, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "v18", 92, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "v19", 93, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "v20", 94, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "v21", 95, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "v22", 96, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "v23", 97, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "v24", 98, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "v25", 99, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "v26", 100, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "v27", 101, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "v28", 102, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "v29", 103, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "v30", 104, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "v31", 105, 1, NULL, 128, "vec128");
+
+  feature = tdesc_create_feature (result, "org.gnu.gdb.s390.gs");
+  tdesc_create_reg (feature, "gsd", 106, 1, "gs", 64, "uint64");
+  tdesc_create_reg (feature, "gssm", 107, 1, "gs", 64, "uint64");
+  tdesc_create_reg (feature, "gsepla", 108, 1, "gs", 64, "data_ptr");
+
+  feature = tdesc_create_feature (result, "org.gnu.gdb.s390.gsbc");
+  tdesc_create_reg (feature, "bc_gsd", 109, 1, "gs", 64, "uint64");
+  tdesc_create_reg (feature, "bc_gssm", 110, 1, "gs", 64, "uint64");
+  tdesc_create_reg (feature, "bc_gsepla", 111, 1, "gs", 64, "data_ptr");
+
+  tdesc_s390x_gs_linux64 = result;
+}
diff --git a/gdb/features/s390x-gs-linux64.xml b/gdb/features/s390x-gs-linux64.xml
new file mode 100644
index 0000000..f71010f
--- /dev/null
+++ b/gdb/features/s390x-gs-linux64.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0"?>
+<!-- Copyright (C) 2017 Free Software Foundation, Inc.
+
+     Copying and distribution of this file, with or without modification,
+     are permitted in any medium without royalty provided the copyright
+     notice and this notice are preserved.  -->
+
+<!-- S/390 64-bit user-level code.  -->
+
+<!DOCTYPE target SYSTEM "gdb-target.dtd">
+<target>
+  <architecture>s390:64-bit</architecture>
+  <xi:include href="s390x-core64.xml"/>
+  <xi:include href="s390-acr.xml"/>
+  <xi:include href="s390-fpr.xml"/>
+
+  <feature name="org.gnu.gdb.s390.linux">
+    <reg name="orig_r2" bitsize="64" type="uint64" group="system"/>
+    <reg name="last_break" bitsize="64" type="code_ptr" group="system" save-restore="no"/>
+    <reg name="system_call" bitsize="32" type="uint32" group="system"/>
+  </feature>
+
+  <xi:include href="s390-tdb.xml"/>
+  <xi:include href="s390-vx.xml"/>
+  <xi:include href="s390-gs.xml"/>
+  <xi:include href="s390-gsbc.xml"/>
+</target>
diff --git a/gdb/regformats/s390-gs-linux64.dat b/gdb/regformats/s390-gs-linux64.dat
new file mode 100644
index 0000000..130c8ec
--- /dev/null
+++ b/gdb/regformats/s390-gs-linux64.dat
@@ -0,0 +1,133 @@
+# THIS FILE IS GENERATED.  -*- buffer-read-only: t -*- vi :set ro:
+# Generated from: s390-gs-linux64.xml
+name:s390_gs_linux64
+xmltarget:s390-gs-linux64.xml
+expedite:r14,r15,pswa
+32:pswm
+32:pswa
+32:r0h
+32:r0l
+32:r1h
+32:r1l
+32:r2h
+32:r2l
+32:r3h
+32:r3l
+32:r4h
+32:r4l
+32:r5h
+32:r5l
+32:r6h
+32:r6l
+32:r7h
+32:r7l
+32:r8h
+32:r8l
+32:r9h
+32:r9l
+32:r10h
+32:r10l
+32:r11h
+32:r11l
+32:r12h
+32:r12l
+32:r13h
+32:r13l
+32:r14h
+32:r14l
+32:r15h
+32:r15l
+32:acr0
+32:acr1
+32:acr2
+32:acr3
+32:acr4
+32:acr5
+32:acr6
+32:acr7
+32:acr8
+32:acr9
+32:acr10
+32:acr11
+32:acr12
+32:acr13
+32:acr14
+32:acr15
+32:fpc
+64:f0
+64:f1
+64:f2
+64:f3
+64:f4
+64:f5
+64:f6
+64:f7
+64:f8
+64:f9
+64:f10
+64:f11
+64:f12
+64:f13
+64:f14
+64:f15
+32:orig_r2
+32:last_break
+32:system_call
+64:tdb0
+64:tac
+64:tct
+64:atia
+64:tr0
+64:tr1
+64:tr2
+64:tr3
+64:tr4
+64:tr5
+64:tr6
+64:tr7
+64:tr8
+64:tr9
+64:tr10
+64:tr11
+64:tr12
+64:tr13
+64:tr14
+64:tr15
+64:v0l
+64:v1l
+64:v2l
+64:v3l
+64:v4l
+64:v5l
+64:v6l
+64:v7l
+64:v8l
+64:v9l
+64:v10l
+64:v11l
+64:v12l
+64:v13l
+64:v14l
+64:v15l
+128:v16
+128:v17
+128:v18
+128:v19
+128:v20
+128:v21
+128:v22
+128:v23
+128:v24
+128:v25
+128:v26
+128:v27
+128:v28
+128:v29
+128:v30
+128:v31
+64:gsd
+64:gssm
+64:gsepla
+64:bc_gsd
+64:bc_gssm
+64:bc_gsepla
diff --git a/gdb/regformats/s390x-gs-linux64.dat b/gdb/regformats/s390x-gs-linux64.dat
new file mode 100644
index 0000000..8cd5751
--- /dev/null
+++ b/gdb/regformats/s390x-gs-linux64.dat
@@ -0,0 +1,117 @@
+# THIS FILE IS GENERATED.  -*- buffer-read-only: t -*- vi :set ro:
+# Generated from: s390x-gs-linux64.xml
+name:s390x_gs_linux64
+xmltarget:s390x-gs-linux64.xml
+expedite:r14,r15,pswa
+64:pswm
+64:pswa
+64:r0
+64:r1
+64:r2
+64:r3
+64:r4
+64:r5
+64:r6
+64:r7
+64:r8
+64:r9
+64:r10
+64:r11
+64:r12
+64:r13
+64:r14
+64:r15
+32:acr0
+32:acr1
+32:acr2
+32:acr3
+32:acr4
+32:acr5
+32:acr6
+32:acr7
+32:acr8
+32:acr9
+32:acr10
+32:acr11
+32:acr12
+32:acr13
+32:acr14
+32:acr15
+32:fpc
+64:f0
+64:f1
+64:f2
+64:f3
+64:f4
+64:f5
+64:f6
+64:f7
+64:f8
+64:f9
+64:f10
+64:f11
+64:f12
+64:f13
+64:f14
+64:f15
+64:orig_r2
+64:last_break
+32:system_call
+64:tdb0
+64:tac
+64:tct
+64:atia
+64:tr0
+64:tr1
+64:tr2
+64:tr3
+64:tr4
+64:tr5
+64:tr6
+64:tr7
+64:tr8
+64:tr9
+64:tr10
+64:tr11
+64:tr12
+64:tr13
+64:tr14
+64:tr15
+64:v0l
+64:v1l
+64:v2l
+64:v3l
+64:v4l
+64:v5l
+64:v6l
+64:v7l
+64:v8l
+64:v9l
+64:v10l
+64:v11l
+64:v12l
+64:v13l
+64:v14l
+64:v15l
+128:v16
+128:v17
+128:v18
+128:v19
+128:v20
+128:v21
+128:v22
+128:v23
+128:v24
+128:v25
+128:v26
+128:v27
+128:v28
+128:v29
+128:v30
+128:v31
+64:gsd
+64:gssm
+64:gsepla
+64:bc_gsd
+64:bc_gssm
+64:bc_gsepla
-- 
2.5.0

^ permalink raw reply	[flat|nested] 9+ messages in thread

* [PATCH 2/4] S390: Add guarded-storage register support to GDB
  2017-09-21 16:41 [PATCH 0/4] S390: Guarded storage register set support Andreas Arnez
  2017-09-21 16:41 ` [PATCH 1/4] S390: Add guarded-storage register definitions and tdescs Andreas Arnez
@ 2017-09-21 16:42 ` Andreas Arnez
  2017-09-21 16:43 ` [PATCH 3/4] S390: Add guarded-storage register support to gdbserver Andreas Arnez
                   ` (2 subsequent siblings)
  4 siblings, 0 replies; 9+ messages in thread
From: Andreas Arnez @ 2017-09-21 16:42 UTC (permalink / raw)
  To: gdb-patches

Recognize targets with the new guarded-storage feature and then present
the guarded-storage registers and the Linux-specific guarded-storage
broadcast control block appropriately.
---
 gdb/s390-linux-nat.c  | 22 ++++++++++--
 gdb/s390-linux-tdep.c | 94 +++++++++++++++++++++++++++++++++++++++++++++++++--
 gdb/s390-linux-tdep.h | 16 ++++++++-
 3 files changed, 126 insertions(+), 6 deletions(-)

diff --git a/gdb/s390-linux-nat.c b/gdb/s390-linux-nat.c
index b395529..720e3d6 100644
--- a/gdb/s390-linux-nat.c
+++ b/gdb/s390-linux-nat.c
@@ -54,6 +54,7 @@ static int have_regset_last_break = 0;
 static int have_regset_system_call = 0;
 static int have_regset_tdb = 0;
 static int have_regset_vxrs = 0;
+static int have_regset_gs = 0;
 
 /* Register map for 32-bit executables running under a 64-bit
    kernel.  */
@@ -406,6 +407,18 @@ s390_linux_fetch_inferior_registers (struct target_ops *ops,
 	fetch_regset (regcache, tid, NT_S390_VXRS_HIGH, 16 * 16,
 		      &s390_vxrs_high_regset);
     }
+
+  if (have_regset_gs)
+    {
+      if (regnum == -1 || (regnum >= S390_GSD_REGNUM
+			   && regnum <= S390_GSEPLA_REGNUM))
+	fetch_regset (regcache, tid, NT_S390_GS_CB, 4 * 8,
+		      &s390_gs_regset);
+      if (regnum == -1 || (regnum >= S390_BC_GSD_REGNUM
+			   && regnum <= S390_BC_GSEPLA_REGNUM))
+	fetch_regset (regcache, tid, NT_S390_GS_BC, 4 * 8,
+		      &s390_gsbc_regset);
+    }
 }
 
 /* Store register REGNUM back into the child process.  If REGNUM is
@@ -974,8 +987,12 @@ s390_read_description (struct target_ops *ops)
       && check_regset (tid, NT_S390_VXRS_LOW, 16 * 8)
       && check_regset (tid, NT_S390_VXRS_HIGH, 16 * 16);
 
+    have_regset_gs = (check_regset (tid, NT_S390_GS_CB, 4 * 8)
+		      && check_regset (tid, NT_S390_GS_BC, 4 * 8));
+
     if (s390_target_wordsize () == 8)
-      return (have_regset_vxrs ?
+      return (have_regset_gs ? tdesc_s390x_gs_linux64 :
+	      have_regset_vxrs ?
 	      (have_regset_tdb ? tdesc_s390x_tevx_linux64 :
 	       tdesc_s390x_vx_linux64) :
 	      have_regset_tdb ? tdesc_s390x_te_linux64 :
@@ -984,7 +1001,8 @@ s390_read_description (struct target_ops *ops)
 	      tdesc_s390x_linux64);
 
     if (hwcap & HWCAP_S390_HIGH_GPRS)
-      return (have_regset_vxrs ?
+      return (have_regset_gs ? tdesc_s390_gs_linux64 :
+	      have_regset_vxrs ?
 	      (have_regset_tdb ? tdesc_s390_tevx_linux64 :
 	       tdesc_s390_vx_linux64) :
 	      have_regset_tdb ? tdesc_s390_te_linux64 :
diff --git a/gdb/s390-linux-tdep.c b/gdb/s390-linux-tdep.c
index a6882fb..a6a6d5d 100644
--- a/gdb/s390-linux-tdep.c
+++ b/gdb/s390-linux-tdep.c
@@ -69,12 +69,14 @@
 #include "features/s390-te-linux64.c"
 #include "features/s390-vx-linux64.c"
 #include "features/s390-tevx-linux64.c"
+#include "features/s390-gs-linux64.c"
 #include "features/s390x-linux64.c"
 #include "features/s390x-linux64v1.c"
 #include "features/s390x-linux64v2.c"
 #include "features/s390x-te-linux64.c"
 #include "features/s390x-vx-linux64.c"
 #include "features/s390x-tevx-linux64.c"
+#include "features/s390x-gs-linux64.c"
 
 #define XML_SYSCALL_FILENAME_S390 "syscalls/s390-linux.xml"
 #define XML_SYSCALL_FILENAME_S390X "syscalls/s390x-linux.xml"
@@ -113,6 +115,7 @@ struct gdbarch_tdep
   int have_linux_v1;
   int have_linux_v2;
   int have_tdb;
+  bool have_gs;
 };
 
 
@@ -834,6 +837,24 @@ static const struct regcache_map_entry s390_regmap_vxrs_high[] =
     { 0 }
   };
 
+static const struct regcache_map_entry s390_regmap_gs[] =
+  {
+    { 1, REGCACHE_MAP_SKIP, 8 },
+    { 1, S390_GSD_REGNUM, 8 },
+    { 1, S390_GSSM_REGNUM, 8 },
+    { 1, S390_GSEPLA_REGNUM, 8 },
+    { 0 }
+  };
+
+static const struct regcache_map_entry s390_regmap_gsbc[] =
+  {
+    { 1, REGCACHE_MAP_SKIP, 8 },
+    { 1, S390_BC_GSD_REGNUM, 8 },
+    { 1, S390_BC_GSSM_REGNUM, 8 },
+    { 1, S390_BC_GSEPLA_REGNUM, 8 },
+    { 0 }
+  };
+
 
 /* Supply the TDB regset.  Like regcache_supply_regset, but invalidate
    the TDB registers unless the TDB format field is valid.  */
@@ -905,6 +926,18 @@ const struct regset s390_vxrs_high_regset = {
   regcache_collect_regset
 };
 
+const struct regset s390_gs_regset = {
+  s390_regmap_gs,
+  regcache_supply_regset,
+  regcache_collect_regset
+};
+
+const struct regset s390_gsbc_regset = {
+  s390_regmap_gsbc,
+  regcache_supply_regset,
+  regcache_collect_regset
+};
+
 /* Iterate over supported core file register note sections. */
 
 static void
@@ -951,6 +984,23 @@ s390_iterate_over_regset_sections (struct gdbarch *gdbarch,
       cb (".reg-s390-vxrs-high", 16 * 16, &s390_vxrs_high_regset,
 	  "s390 vector registers 16-31", cb_data);
     }
+
+  /* Iterate over the guarded-storage regsets if in "read" mode, or if
+     their registers are available.  */
+  if (tdep->have_gs)
+    {
+      if (regcache == NULL
+	  || REG_VALID == regcache_register_status (regcache,
+						    S390_GSD_REGNUM))
+	cb (".reg-s390-gs-cb", 4 * 8, &s390_gs_regset,
+	    "s390 guarded-storage registers", cb_data);
+
+      if (regcache == NULL
+	  || REG_VALID == regcache_register_status (regcache,
+						    S390_BC_GSD_REGNUM))
+	cb (".reg-s390-gs-bc", 4 * 8, &s390_gsbc_regset,
+	    "s390 guarded-storage broadcast control", cb_data);
+    }
 }
 
 static const struct target_desc *
@@ -959,7 +1009,7 @@ s390_core_read_description (struct gdbarch *gdbarch,
 {
   asection *section = bfd_get_section_by_name (abfd, ".reg");
   CORE_ADDR hwcap = 0;
-  int high_gprs, v1, v2, te, vx;
+  bool high_gprs, v1, v2, te, vx, gs;
 
   target_auxv_search (target, AT_HWCAP, &hwcap);
   if (!section)
@@ -971,12 +1021,14 @@ s390_core_read_description (struct gdbarch *gdbarch,
   v2 = (bfd_get_section_by_name (abfd, ".reg-s390-system-call") != NULL);
   vx = (hwcap & HWCAP_S390_VX);
   te = (hwcap & HWCAP_S390_TE);
+  gs = (hwcap & HWCAP_S390_GS);
 
   switch (bfd_section_size (abfd, section))
     {
     case s390_sizeof_gregset:
       if (high_gprs)
-	return (te && vx ? tdesc_s390_tevx_linux64 :
+	return (gs ? tdesc_s390_gs_linux64 :
+		te && vx ? tdesc_s390_tevx_linux64 :
 		vx ? tdesc_s390_vx_linux64 :
 		te ? tdesc_s390_te_linux64 :
 		v2 ? tdesc_s390_linux64v2 :
@@ -986,7 +1038,8 @@ s390_core_read_description (struct gdbarch *gdbarch,
 		v1 ? tdesc_s390_linux32v1 : tdesc_s390_linux32);
 
     case s390x_sizeof_gregset:
-      return (te && vx ? tdesc_s390x_tevx_linux64 :
+      return (gs ? tdesc_s390x_gs_linux64 :
+	      te && vx ? tdesc_s390x_tevx_linux64 :
 	      vx ? tdesc_s390x_vx_linux64 :
 	      te ? tdesc_s390x_te_linux64 :
 	      v2 ? tdesc_s390x_linux64v2 :
@@ -7767,6 +7820,7 @@ s390_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
   int have_linux_v2 = 0;
   int have_tdb = 0;
   int have_vx = 0;
+  int have_gs = 0;
   int first_pseudo_reg, last_pseudo_reg;
   static const char *const stap_register_prefixes[] = { "%", NULL };
   static const char *const stap_register_indirection_prefixes[] = { "(",
@@ -7834,6 +7888,12 @@ s390_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
 	"v16", "v17", "v18", "v19", "v20", "v21", "v22", "v23", "v24",
 	"v25", "v26", "v27", "v28", "v29", "v30", "v31",
       };
+      static const char *const gs_cb[] = {
+	"gsd", "gssm", "gsepla",
+      };
+      static const char *const gs_bc[] = {
+	"bc_gsd", "bc_gssm", "bc_gsepla",
+      };
       const struct tdesc_feature *feature;
       int i, valid_p = 1;
 
@@ -7937,6 +7997,29 @@ s390_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
 	  have_vx = 1;
 	}
 
+      /* Guarded-storage registers.  */
+      feature = tdesc_find_feature (tdesc, "org.gnu.gdb.s390.gs");
+      if (feature)
+	{
+	  for (i = 0; i < 3; i++)
+	    valid_p &= tdesc_numbered_register (feature, tdesc_data,
+						S390_GSD_REGNUM + i,
+						gs_cb[i]);
+	  have_gs = 1;
+	}
+
+      /* Guarded-storage broadcast control.  */
+      feature = tdesc_find_feature (tdesc, "org.gnu.gdb.s390.gsbc");
+      if (feature)
+	{
+	  valid_p &= have_gs;
+
+	  for (i = 0; i < 3; i++)
+	    valid_p &= tdesc_numbered_register (feature, tdesc_data,
+						S390_BC_GSD_REGNUM + i,
+						gs_bc[i]);
+	}
+
       if (!valid_p)
 	{
 	  tdesc_data_cleanup (tdesc_data);
@@ -7970,6 +8053,8 @@ s390_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
 	continue;
       if ((tdep->gpr_full_regnum != -1) != have_upper)
 	continue;
+      if (tdep->have_gs != have_gs)
+	continue;
       if (tdesc_data != NULL)
 	tdesc_data_cleanup (tdesc_data);
       return arches->gdbarch;
@@ -7982,6 +8067,7 @@ s390_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
   tdep->have_linux_v1 = have_linux_v1;
   tdep->have_linux_v2 = have_linux_v2;
   tdep->have_tdb = have_tdb;
+  tdep->have_gs = have_gs;
   gdbarch = gdbarch_alloc (&info, tdep);
 
   set_gdbarch_believe_pcc_promotion (gdbarch, 0);
@@ -8157,10 +8243,12 @@ _initialize_s390_tdep (void)
   initialize_tdesc_s390_te_linux64 ();
   initialize_tdesc_s390_vx_linux64 ();
   initialize_tdesc_s390_tevx_linux64 ();
+  initialize_tdesc_s390_gs_linux64 ();
   initialize_tdesc_s390x_linux64 ();
   initialize_tdesc_s390x_linux64v1 ();
   initialize_tdesc_s390x_linux64v2 ();
   initialize_tdesc_s390x_te_linux64 ();
   initialize_tdesc_s390x_vx_linux64 ();
   initialize_tdesc_s390x_tevx_linux64 ();
+  initialize_tdesc_s390x_gs_linux64 ();
 }
diff --git a/gdb/s390-linux-tdep.h b/gdb/s390-linux-tdep.h
index 4f818b4..e895530 100644
--- a/gdb/s390-linux-tdep.h
+++ b/gdb/s390-linux-tdep.h
@@ -33,6 +33,10 @@
 #define HWCAP_S390_VX 2048
 #endif
 
+#ifndef HWCAP_S390_GS
+#define HWCAP_S390_GS 16384
+#endif
+
 /* Register information.  */
 
 /* Program Status Word.  */
@@ -166,8 +170,14 @@
 #define S390_V29_REGNUM 119
 #define S390_V30_REGNUM 120
 #define S390_V31_REGNUM 121
+#define S390_GSD_REGNUM 122
+#define S390_GSSM_REGNUM 123
+#define S390_GSEPLA_REGNUM 124
+#define S390_BC_GSD_REGNUM 125
+#define S390_BC_GSSM_REGNUM 126
+#define S390_BC_GSEPLA_REGNUM 127
 /* Total.  */
-#define S390_NUM_REGS 122
+#define S390_NUM_REGS 128
 
 /* Special register usage.  */
 #define S390_SP_REGNUM S390_R15_REGNUM
@@ -198,6 +208,8 @@ extern const struct regset s390_tdb_regset;
 #define s390_sizeof_tdbregset 0x100
 extern const struct regset s390_vxrs_low_regset;
 extern const struct regset s390_vxrs_high_regset;
+extern const struct regset s390_gs_regset;
+extern const struct regset s390_gsbc_regset;
 
 /* GNU/Linux target descriptions.  */
 extern struct target_desc *tdesc_s390_linux32;
@@ -209,11 +221,13 @@ extern struct target_desc *tdesc_s390_linux64v2;
 extern struct target_desc *tdesc_s390_te_linux64;
 extern struct target_desc *tdesc_s390_vx_linux64;
 extern struct target_desc *tdesc_s390_tevx_linux64;
+extern struct target_desc *tdesc_s390_gs_linux64;
 extern struct target_desc *tdesc_s390x_linux64;
 extern struct target_desc *tdesc_s390x_linux64v1;
 extern struct target_desc *tdesc_s390x_linux64v2;
 extern struct target_desc *tdesc_s390x_te_linux64;
 extern struct target_desc *tdesc_s390x_vx_linux64;
 extern struct target_desc *tdesc_s390x_tevx_linux64;
+extern struct target_desc *tdesc_s390x_gs_linux64;
 
 #endif
-- 
2.5.0

^ permalink raw reply	[flat|nested] 9+ messages in thread

* [PATCH 3/4] S390: Add guarded-storage register support to gdbserver
  2017-09-21 16:41 [PATCH 0/4] S390: Guarded storage register set support Andreas Arnez
  2017-09-21 16:41 ` [PATCH 1/4] S390: Add guarded-storage register definitions and tdescs Andreas Arnez
  2017-09-21 16:42 ` [PATCH 2/4] S390: Add guarded-storage register support to GDB Andreas Arnez
@ 2017-09-21 16:43 ` Andreas Arnez
  2017-09-21 16:44 ` [PATCH 4/4] S390: Document guarded-storage register support Andreas Arnez
  2017-10-05 16:38 ` [PATCH 0/4] S390: Guarded storage register set support Kevin Buettner
  4 siblings, 0 replies; 9+ messages in thread
From: Andreas Arnez @ 2017-09-21 16:43 UTC (permalink / raw)
  To: gdb-patches

---
 gdb/gdbserver/configure.srv      |  8 +++++
 gdb/gdbserver/linux-s390-low.c   | 68 ++++++++++++++++++++++++++++++++++++++--
 gdb/gdbserver/linux-s390-tdesc.h |  9 ++++++
 3 files changed, 83 insertions(+), 2 deletions(-)

diff --git a/gdb/gdbserver/configure.srv b/gdb/gdbserver/configure.srv
index 2a0c2b2..80b4b37 100644
--- a/gdb/gdbserver/configure.srv
+++ b/gdb/gdbserver/configure.srv
@@ -285,12 +285,14 @@ case "${target}" in
 			srv_regobj="${srv_regobj} s390-te-linux64.o"
 			srv_regobj="${srv_regobj} s390-vx-linux64.o"
 			srv_regobj="${srv_regobj} s390-tevx-linux64.o"
+			srv_regobj="${srv_regobj} s390-gs-linux64.o"
 			srv_regobj="${srv_regobj} s390x-linux64.o"
 			srv_regobj="${srv_regobj} s390x-linux64v1.o"
 			srv_regobj="${srv_regobj} s390x-linux64v2.o"
 			srv_regobj="${srv_regobj} s390x-te-linux64.o"
 			srv_regobj="${srv_regobj} s390x-vx-linux64.o"
 			srv_regobj="${srv_regobj} s390x-tevx-linux64.o"
+			srv_regobj="${srv_regobj} s390x-gs-linux64.o"
 			srv_tgtobj="$srv_linux_obj linux-s390-low.o"
 			srv_xmlfiles="s390-linux32.xml"
 			srv_xmlfiles="${srv_xmlfiles} s390-linux32v1.xml"
@@ -301,12 +303,14 @@ case "${target}" in
 			srv_xmlfiles="${srv_xmlfiles} s390-te-linux64.xml"
 			srv_xmlfiles="${srv_xmlfiles} s390-vx-linux64.xml"
 			srv_xmlfiles="${srv_xmlfiles} s390-tevx-linux64.xml"
+			srv_xmlfiles="${srv_xmlfiles} s390-gs-linux64.xml"
 			srv_xmlfiles="${srv_xmlfiles} s390x-linux64.xml"
 			srv_xmlfiles="${srv_xmlfiles} s390x-linux64v1.xml"
 			srv_xmlfiles="${srv_xmlfiles} s390x-linux64v2.xml"
 			srv_xmlfiles="${srv_xmlfiles} s390x-te-linux64.xml"
 			srv_xmlfiles="${srv_xmlfiles} s390x-vx-linux64.xml"
 			srv_xmlfiles="${srv_xmlfiles} s390x-tevx-linux64.xml"
+			srv_xmlfiles="${srv_xmlfiles} s390x-gs-linux64.xml"
 			srv_xmlfiles="${srv_xmlfiles} s390-core32.xml"
 			srv_xmlfiles="${srv_xmlfiles} s390-core64.xml"
 			srv_xmlfiles="${srv_xmlfiles} s390x-core64.xml"
@@ -314,6 +318,8 @@ case "${target}" in
 			srv_xmlfiles="${srv_xmlfiles} s390-fpr.xml"
 			srv_xmlfiles="${srv_xmlfiles} s390-tdb.xml"
 			srv_xmlfiles="${srv_xmlfiles} s390-vx.xml"
+			srv_xmlfiles="${srv_xmlfiles} s390-gs.xml"
+			srv_xmlfiles="${srv_xmlfiles} s390-gsbc.xml"
 			srv_linux_usrregs=yes
 			srv_linux_regsets=yes
 			srv_linux_thread_db=yes
@@ -327,12 +333,14 @@ case "${target}" in
 			ipa_obj="${ipa_obj} s390-vx-linux64-ipa.o"
 			ipa_obj="${ipa_obj} s390-te-linux64-ipa.o"
 			ipa_obj="${ipa_obj} s390-tevx-linux64-ipa.o"
+			ipa_obj="${ipa_obj} s390-gs-linux64-ipa.o"
 			ipa_obj="${ipa_obj} s390x-linux64-ipa.o"
 			ipa_obj="${ipa_obj} s390x-linux64v1-ipa.o"
 			ipa_obj="${ipa_obj} s390x-linux64v2-ipa.o"
 			ipa_obj="${ipa_obj} s390x-vx-linux64-ipa.o"
 			ipa_obj="${ipa_obj} s390x-te-linux64-ipa.o"
 			ipa_obj="${ipa_obj} s390x-tevx-linux64-ipa.o"
+			ipa_obj="${ipa_obj} s390x-gs-linux64-ipa.o"
 			;;
   sh*-*-linux*)		srv_regobj=reg-sh.o
 			srv_tgtobj="$srv_linux_obj linux-sh-low.o"
diff --git a/gdb/gdbserver/linux-s390-low.c b/gdb/gdbserver/linux-s390-low.c
index f02c2d3..d7aa31c 100644
--- a/gdb/gdbserver/linux-s390-low.c
+++ b/gdb/gdbserver/linux-s390-low.c
@@ -45,6 +45,10 @@
 #define HWCAP_S390_VX 2048
 #endif
 
+#ifndef HWCAP_S390_GS
+#define HWCAP_S390_GS 16384
+#endif
+
 #define s390_num_regs 52
 
 static int s390_regmap[] = {
@@ -370,6 +374,46 @@ 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)
+{
+  int gsd = find_regno (regcache->tdesc, "gsd");
+  int i;
+
+  for (i = 0; i < 3; i++)
+    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)
+{
+  int bc_gsd = find_regno (regcache->tdesc, "bc_gsd");
+  int i;
+
+  for (i = 0; i < 3; i++)
+    supply_register (regcache, bc_gsd + i, (const char *) buf + 8 * (i + 1));
+}
+
 static struct regset_info s390_regsets[] = {
   { 0, 0, 0, 0, GENERAL_REGS, s390_fill_gregset, NULL },
 #ifndef __s390x__
@@ -388,6 +432,10 @@ 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 },
   NULL_REGSET
 };
 
@@ -501,6 +549,8 @@ s390_arch_setup (void)
   int have_regset_tdb = s390_check_regset (pid, NT_S390_TDB, 256);
   int have_regset_vxrs = s390_check_regset (pid, NT_S390_VXRS_LOW, 128)
     && s390_check_regset (pid, NT_S390_VXRS_HIGH, 256);
+  int have_regset_gs = s390_check_regset (pid, NT_S390_GS_CB, 32)
+    && s390_check_regset (pid, NT_S390_GS_BC, 32);
 
   /* Assume 31-bit inferior process.  */
   if (have_regset_system_call)
@@ -529,8 +579,13 @@ s390_arch_setup (void)
 	if (have_regset_vxrs)
 	  have_regset_vxrs =
 	    (s390_get_hwcap (tdesc_s390x_linux64v2) & HWCAP_S390_VX) != 0;
+	if (have_regset_gs)
+	  have_regset_gs =
+	    (s390_get_hwcap (tdesc_s390x_linux64v2) & HWCAP_S390_GS) != 0;
 
-	if (have_regset_vxrs)
+	if (have_regset_gs)
+	  tdesc = tdesc_s390x_gs_linux64;
+	else if (have_regset_vxrs)
 	  tdesc = (have_regset_tdb ? tdesc_s390x_tevx_linux64 :
 		   tdesc_s390x_vx_linux64);
 	else if (have_regset_tdb)
@@ -554,8 +609,12 @@ s390_arch_setup (void)
 	  have_regset_tdb = (s390_get_hwcap (tdesc) & HWCAP_S390_TE) != 0;
 	if (have_regset_vxrs)
 	  have_regset_vxrs = (s390_get_hwcap (tdesc) & HWCAP_S390_VX) != 0;
+	if (have_regset_gs)
+	  have_regset_gs = (s390_get_hwcap (tdesc) & HWCAP_S390_GS) != 0;
 
-	if (have_regset_vxrs)
+	if (have_regset_gs)
+	  tdesc = tdesc_s390_gs_linux64;
+	else if (have_regset_vxrs)
 	  tdesc = (have_regset_tdb ? tdesc_s390_tevx_linux64 :
 		   tdesc_s390_vx_linux64);
 	else if (have_regset_tdb)
@@ -596,6 +655,9 @@ s390_arch_setup (void)
 	case NT_S390_VXRS_HIGH:
 	  regset->size = have_regset_vxrs ? 256 : 0;
 	  break;
+	case NT_S390_GS_CB:
+	case NT_S390_GS_BC:
+	  regset->size = have_regset_gs ? 32 : 0;
 	default:
 	  break;
 	}
@@ -2797,6 +2859,7 @@ initialize_low_arch (void)
   init_registers_s390_te_linux64 ();
   init_registers_s390_vx_linux64 ();
   init_registers_s390_tevx_linux64 ();
+  init_registers_s390_gs_linux64 ();
 #ifdef __s390x__
   init_registers_s390x_linux64 ();
   init_registers_s390x_linux64v1 ();
@@ -2804,6 +2867,7 @@ initialize_low_arch (void)
   init_registers_s390x_te_linux64 ();
   init_registers_s390x_vx_linux64 ();
   init_registers_s390x_tevx_linux64 ();
+  init_registers_s390x_gs_linux64 ();
 #endif
 
   initialize_regsets_info (&s390_regsets_info);
diff --git a/gdb/gdbserver/linux-s390-tdesc.h b/gdb/gdbserver/linux-s390-tdesc.h
index 6dc3899..170ab8a 100644
--- a/gdb/gdbserver/linux-s390-tdesc.h
+++ b/gdb/gdbserver/linux-s390-tdesc.h
@@ -31,6 +31,7 @@ enum s390_linux_tdesc {
   S390_TDESC_TE,
   S390_TDESC_VX,
   S390_TDESC_TEVX,
+  S390_TDESC_GS,
 };
 
 #ifdef __s390x__
@@ -59,6 +60,10 @@ extern const struct target_desc *tdesc_s390x_vx_linux64;
 void init_registers_s390x_tevx_linux64 (void);
 extern const struct target_desc *tdesc_s390x_tevx_linux64;
 
+/* Defined in auto-generated file s390x-gs-linux64.c.  */
+void init_registers_s390x_gs_linux64 (void);
+extern const struct target_desc *tdesc_s390x_gs_linux64;
+
 #endif
 
 #if !defined __s390x__ || !defined IN_PROCESS_AGENT
@@ -99,4 +104,8 @@ extern const struct target_desc *tdesc_s390_vx_linux64;
 void init_registers_s390_tevx_linux64 (void);
 extern const struct target_desc *tdesc_s390_tevx_linux64;
 
+/* Defined in auto-generated file s390-gs-linux64.c.  */
+void init_registers_s390_gs_linux64 (void);
+extern const struct target_desc *tdesc_s390_gs_linux64;
+
 #endif
-- 
2.5.0

^ permalink raw reply	[flat|nested] 9+ messages in thread

* [PATCH 4/4] S390: Document guarded-storage register support
  2017-09-21 16:41 [PATCH 0/4] S390: Guarded storage register set support Andreas Arnez
                   ` (2 preceding siblings ...)
  2017-09-21 16:43 ` [PATCH 3/4] S390: Add guarded-storage register support to gdbserver Andreas Arnez
@ 2017-09-21 16:44 ` Andreas Arnez
  2017-09-21 17:01   ` Eli Zaretskii
  2017-10-05 16:38 ` [PATCH 0/4] S390: Guarded storage register set support Kevin Buettner
  4 siblings, 1 reply; 9+ messages in thread
From: Andreas Arnez @ 2017-09-21 16:44 UTC (permalink / raw)
  To: gdb-patches

This documents the newly added support for guarded-storage registers on
IBM z.
---
 gdb/NEWS            | 3 +++
 gdb/doc/gdb.texinfo | 8 ++++++++
 2 files changed, 11 insertions(+)

diff --git a/gdb/NEWS b/gdb/NEWS
index 549f511..9246659 100644
--- a/gdb/NEWS
+++ b/gdb/NEWS
@@ -3,6 +3,9 @@
 
 *** Changes since GDB 8.0
 
+* GDB now supports access to the guarded-storage-control registers and the
+  software-based guarded-storage broadcast control registers on IBM z14.
+
 * On Unix systems, GDB now supports transmitting environment variables
   that are to be set or unset to GDBserver.  These variables will
   affect the environment to be passed to the remote inferior.
diff --git a/gdb/doc/gdb.texinfo b/gdb/doc/gdb.texinfo
index d50a1fd..0bfaf61 100644
--- a/gdb/doc/gdb.texinfo
+++ b/gdb/doc/gdb.texinfo
@@ -41855,6 +41855,14 @@ through @samp{f15} to present the 128-bit wide vector registers
 contain the 128-bit wide vector registers @samp{v16} through
 @samp{v31}.
 
+The @samp{org.gnu.gdb.s390.gs} feature is optional.  It should contain
+the 64-bit wide guarded-storage-control registers @samp{gsd},
+@samp{gssm}, and @samp{gsepla}.
+
+The @samp{org.gnu.gdb.s390.gsbc} feature is optional.  It should contain
+the 64-bit wide guarded-storage broadcast control registers
+@samp{bc_gsd}, @samp{bc_gssm}, and @samp{bc_gsepla}.
+
 @node Sparc Features
 @subsection Sparc Features
 @cindex target descriptions, sparc32 features
-- 
2.5.0

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH 4/4] S390: Document guarded-storage register support
  2017-09-21 16:44 ` [PATCH 4/4] S390: Document guarded-storage register support Andreas Arnez
@ 2017-09-21 17:01   ` Eli Zaretskii
  2017-09-21 18:19     ` Andreas Arnez
  0 siblings, 1 reply; 9+ messages in thread
From: Eli Zaretskii @ 2017-09-21 17:01 UTC (permalink / raw)
  To: Andreas Arnez; +Cc: gdb-patches

> From: Andreas Arnez <arnez@linux.vnet.ibm.com>
> Date: Thu, 21 Sep 2017 18:40:16 +0200
> 
> This documents the newly added support for guarded-storage registers on
> IBM z.
> ---
>  gdb/NEWS            | 3 +++
>  gdb/doc/gdb.texinfo | 8 ++++++++
>  2 files changed, 11 insertions(+)

This is OK, but please also include the ChangeLog changes which
reflect these.  (Actually, I see that you didn't include ChangeLog
entries for any of your changes.)

Thanks.

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH 4/4] S390: Document guarded-storage register support
  2017-09-21 17:01   ` Eli Zaretskii
@ 2017-09-21 18:19     ` Andreas Arnez
  2017-09-25 14:10       ` Andreas Arnez
  0 siblings, 1 reply; 9+ messages in thread
From: Andreas Arnez @ 2017-09-21 18:19 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: gdb-patches

On Thu, Sep 21 2017, Eli Zaretskii wrote:

>> From: Andreas Arnez <arnez@linux.vnet.ibm.com>
>> Date: Thu, 21 Sep 2017 18:40:16 +0200
>> 
>> This documents the newly added support for guarded-storage registers on
>> IBM z.
>> ---
>>  gdb/NEWS            | 3 +++
>>  gdb/doc/gdb.texinfo | 8 ++++++++
>>  2 files changed, 11 insertions(+)
>
> This is OK, but please also include the ChangeLog changes which
> reflect these.  (Actually, I see that you didn't include ChangeLog
> entries for any of your changes.)

Oops.  For some reason I only included ChangeLog entries for the first
patch.  Right, I'll add the missing ones.

Thanks for reviewing the doc part.

--
Andreas

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH 4/4] S390: Document guarded-storage register support
  2017-09-21 18:19     ` Andreas Arnez
@ 2017-09-25 14:10       ` Andreas Arnez
  0 siblings, 0 replies; 9+ messages in thread
From: Andreas Arnez @ 2017-09-25 14:10 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: gdb-patches

On Thu, Sep 21 2017, Andreas Arnez wrote:

> On Thu, Sep 21 2017, Eli Zaretskii wrote:
>
>>> From: Andreas Arnez <arnez@linux.vnet.ibm.com>
>>> Date: Thu, 21 Sep 2017 18:40:16 +0200
>>> 
>>> This documents the newly added support for guarded-storage registers on
>>> IBM z.
>>> ---
>>>  gdb/NEWS            | 3 +++
>>>  gdb/doc/gdb.texinfo | 8 ++++++++
>>>  2 files changed, 11 insertions(+)
>>
>> This is OK, but please also include the ChangeLog changes which
>> reflect these.  (Actually, I see that you didn't include ChangeLog
>> entries for any of your changes.)
>
> Oops.  For some reason I only included ChangeLog entries for the first
> patch.  Right, I'll add the missing ones.

OK, I pushed the series after adding the missing ChangeLog entries:

  https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;a=commit;h=96235dc1ac3730c4e490d19db2e8287c0a40f307
  https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;a=commit;h=1b63490c9173f8c9770b7885def720516aa9b9f8
  https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;a=commit;h=ad3396348e0ebb61fdf71cff307bac08175ed366
  https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;a=commit;h=289e23aa03084b22c73ebdcf18371f1e6666ead0

--
Andreas

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH 0/4] S390: Guarded storage register set support
  2017-09-21 16:41 [PATCH 0/4] S390: Guarded storage register set support Andreas Arnez
                   ` (3 preceding siblings ...)
  2017-09-21 16:44 ` [PATCH 4/4] S390: Document guarded-storage register support Andreas Arnez
@ 2017-10-05 16:38 ` Kevin Buettner
  4 siblings, 0 replies; 9+ messages in thread
From: Kevin Buettner @ 2017-10-05 16:38 UTC (permalink / raw)
  To: gdb-patches

On Thu, 21 Sep 2017 18:40:12 +0200
Andreas Arnez <arnez@linux.vnet.ibm.com> wrote:

> This adds GDB support for the guarded storage register sets available on
> z14 platforms with a new Linux kernel.  The kernel presents two register
> sets, one of them representing actual hardware registers and the other one
> being software-based.
> 
> Andreas Arnez (4):
>   S390: Add guarded-storage register definitions and tdescs
>   S390: Add guarded-storage register support to GDB
>   S390: Add guarded-storage register support to gdbserver
>   S390: Document guarded-storage register support

FWIW (since I see that you've pushed it now anyway), I've looked
over the patches in this series and they look good to me.  (I'm not
an expert on S390 though.)

Kevin

^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2017-10-05 16:38 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-09-21 16:41 [PATCH 0/4] S390: Guarded storage register set support Andreas Arnez
2017-09-21 16:41 ` [PATCH 1/4] S390: Add guarded-storage register definitions and tdescs Andreas Arnez
2017-09-21 16:42 ` [PATCH 2/4] S390: Add guarded-storage register support to GDB Andreas Arnez
2017-09-21 16:43 ` [PATCH 3/4] S390: Add guarded-storage register support to gdbserver Andreas Arnez
2017-09-21 16:44 ` [PATCH 4/4] S390: Document guarded-storage register support Andreas Arnez
2017-09-21 17:01   ` Eli Zaretskii
2017-09-21 18:19     ` Andreas Arnez
2017-09-25 14:10       ` Andreas Arnez
2017-10-05 16:38 ` [PATCH 0/4] S390: Guarded storage register set support Kevin Buettner

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).