From fe8adf5fddfa30d47920a651158e11e18f7ccff2d03d8e356b38046650d543ed Mon Sep 17 00:00:00 2001 From: Michael Matz Date: Fri, 10 Jul 2015 14:22:52 +0000 Subject: [PATCH] - Rebase to gdb version 7.9.1: fixes PR python/18299, python/18285. - Add gdb-s390-reorder-arch.diff [bnc #936050] - Added patches for fate#318039, s390 z13 support: 0001-S390-Add-target-descriptions-for-vector-register-set.patch 0002-S390-Add-vector-register-support-to-gdb.patch 0003-S390-Add-vector-register-support-to-gdbserver.patch 0004-S390-Vector-register-test-case.patch 0005-S390-Name-invisible-registers-with-the-empty-string-.patch OBS-URL: https://build.opensuse.org/package/show/devel:gcc/gdb?expand=0&rev=124 --- ...descriptions-for-vector-register-set.patch | 1471 +++++++++++++++++ ...0-Add-vector-register-support-to-gdb.patch | 744 +++++++++ ...vector-register-support-to-gdbserver.patch | 293 ++++ 0004-S390-Vector-register-test-case.patch | 334 ++++ ...ble-registers-with-the-empty-string-.patch | 47 + gdb-6.6-buildid-locate-rpm-suse.patch | 17 +- gdb-6.6-buildid-locate-rpm.patch | 5 +- gdb-7.9.1.tar.bz2 | 3 + gdb-7.9.tar.bz2 | 3 - gdb-s390-reorder-arch.diff | 106 ++ gdb.changes | 13 + gdb.spec | 18 +- patchlist.pl | 2 +- 13 files changed, 3042 insertions(+), 14 deletions(-) create mode 100644 0001-S390-Add-target-descriptions-for-vector-register-set.patch create mode 100644 0002-S390-Add-vector-register-support-to-gdb.patch create mode 100644 0003-S390-Add-vector-register-support-to-gdbserver.patch create mode 100644 0004-S390-Vector-register-test-case.patch create mode 100644 0005-S390-Name-invisible-registers-with-the-empty-string-.patch create mode 100644 gdb-7.9.1.tar.bz2 delete mode 100644 gdb-7.9.tar.bz2 create mode 100644 gdb-s390-reorder-arch.diff diff --git a/0001-S390-Add-target-descriptions-for-vector-register-set.patch b/0001-S390-Add-target-descriptions-for-vector-register-set.patch new file mode 100644 index 0000000..a4499b8 --- /dev/null +++ b/0001-S390-Add-target-descriptions-for-vector-register-set.patch @@ -0,0 +1,1471 @@ +Part of fate#318039 + +From 446899e472025a04017064f5172105cec70eb357 Mon Sep 17 00:00:00 2001 +From: Andreas Arnez +Date: Mon, 2 Mar 2015 10:57:39 +0100 +Subject: [PATCH] S390: Add target descriptions for vector register sets + +The IBM z13 has new vector registers v0-v31 which are presented by the +Linux kernel as two additional register sets. This patch adds XML +descriptions and the respective autogenerated .c and .dat files for +S390 targets with this feature. Note that supported combinations +include targets with and without a transactional execution facility. + +gdb/ChangeLog: + + * features/s390-tevx-linux64.xml: New file. + * features/s390-vx-linux64.xml: New file. + * features/s390-vx.xml: New file. + * features/s390x-tevx-linux64.xml: New file. + * features/s390x-vx-linux64.xml: New file. + * features/Makefile (WHICH): Add s390-vx-linux64, + s390x-vx-linux64, s390-tevx-linux64, and s390x-tevx-linux64. + (s390-vx-linux64-expedite, s390-tevx-linux64-expedite) + (s390x-vx-linux64-expedite, s390x-tevx-linux64-expedite): New + macros. + * features/s390-tevx-linux64.c: New generated file. + * features/s390-vx-linux64.c: Likewise. + * features/s390x-tevx-linux64.c: Likewise. + * features/s390x-vx-linux64.c: Likewise. + * regformats/s390-tevx-linux64.dat: Likewise. + * regformats/s390-vx-linux64.dat: Likewise. + * regformats/s390x-tevx-linux64.dat: Likewise. + * regformats/s390x-vx-linux64.dat: Likewise. + +gdb/doc/ChangeLog: + + * gdb.texinfo (S/390 and System z Features): Describe new feature + "org.gnu.gdb.s390.vx". +--- + gdb/ChangeLog | 21 ++++ + gdb/doc/ChangeLog | 5 + + gdb/doc/gdb.texinfo | 8 ++ + gdb/features/Makefile | 7 +- + gdb/features/s390-tevx-linux64.c | 188 ++++++++++++++++++++++++++++++++++ + gdb/features/s390-tevx-linux64.xml | 26 +++++ + gdb/features/s390-vx-linux64.c | 166 ++++++++++++++++++++++++++++++ + gdb/features/s390-vx-linux64.xml | 25 +++++ + gdb/features/s390-vx.xml | 59 +++++++++++ + gdb/features/s390x-tevx-linux64.c | 172 +++++++++++++++++++++++++++++++ + gdb/features/s390x-tevx-linux64.xml | 25 +++++ + gdb/features/s390x-vx-linux64.c | 150 +++++++++++++++++++++++++++ + gdb/features/s390x-vx-linux64.xml | 24 +++++ + gdb/regformats/s390-tevx-linux64.dat | 127 +++++++++++++++++++++++ + gdb/regformats/s390-vx-linux64.dat | 107 +++++++++++++++++++ + gdb/regformats/s390x-tevx-linux64.dat | 111 ++++++++++++++++++++ + gdb/regformats/s390x-vx-linux64.dat | 91 ++++++++++++++++ + 17 files changed, 1311 insertions(+), 1 deletion(-) + create mode 100644 gdb/features/s390-tevx-linux64.c + create mode 100644 gdb/features/s390-tevx-linux64.xml + create mode 100644 gdb/features/s390-vx-linux64.c + create mode 100644 gdb/features/s390-vx-linux64.xml + create mode 100644 gdb/features/s390-vx.xml + create mode 100644 gdb/features/s390x-tevx-linux64.c + create mode 100644 gdb/features/s390x-tevx-linux64.xml + create mode 100644 gdb/features/s390x-vx-linux64.c + create mode 100644 gdb/features/s390x-vx-linux64.xml + create mode 100644 gdb/regformats/s390-tevx-linux64.dat + create mode 100644 gdb/regformats/s390-vx-linux64.dat + create mode 100644 gdb/regformats/s390x-tevx-linux64.dat + create mode 100644 gdb/regformats/s390x-vx-linux64.dat + +diff --git a/gdb/doc/gdb.texinfo b/gdb/doc/gdb.texinfo +index e84a251..19df52f 100644 +--- a/gdb/doc/gdb.texinfo ++++ b/gdb/doc/gdb.texinfo +@@ -39933,6 +39933,14 @@ The @samp{org.gnu.gdb.s390.tdb} feature is optional. It should + contain the 64-bit registers @samp{tdb0}, @samp{tac}, @samp{tct}, + @samp{atia}, and @samp{tr0} through @samp{tr15}. + ++The @samp{org.gnu.gdb.s390.vx} feature is optional. It should contain ++64-bit wide registers @samp{v0l} through @samp{v15l}, which will be ++combined by @value{GDBN} with the floating point registers @samp{f0} ++through @samp{f15} to present the 128-bit wide vector registers ++@samp{v0} through @samp{v15}. In addition, this feature should ++contain the 128-bit wide vector registers @samp{v16} through ++@samp{v31}. ++ + @node TIC6x Features + @subsection TMS320C6x Features + @cindex target descriptions, TIC6x features +diff --git a/gdb/features/Makefile b/gdb/features/Makefile +index 07cd2cb..74006e2 100644 +--- a/gdb/features/Makefile ++++ b/gdb/features/Makefile +@@ -68,7 +68,8 @@ WHICH = aarch64 \ + s390-linux32 s390-linux64 s390x-linux64 \ + s390-linux32v1 s390-linux64v1 s390x-linux64v1 \ + s390-linux32v2 s390-linux64v2 s390x-linux64v2 \ +- s390-te-linux64 s390x-te-linux64 \ ++ s390-te-linux64 s390x-te-linux64 s390-vx-linux64 s390x-vx-linux64 \ ++ s390-tevx-linux64 s390x-tevx-linux64 \ + tic6x-c64xp tic6x-c64x tic6x-c62x \ + tic6x-c64xp-linux tic6x-c64x-linux tic6x-c62x-linux + +@@ -115,10 +116,14 @@ s390-linux64-expedite = r14l,r15l,pswa + s390-linux64v1-expedite = r14l,r15l,pswa + 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 + 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 + tic6x-c64xp-expedite = A15,PC + tic6x-c64x-expedite = A15,PC + tic6x-c62x-expedite = A15,PC +diff --git a/gdb/features/s390-tevx-linux64.c b/gdb/features/s390-tevx-linux64.c +new file mode 100644 +index 0000000..5bc3eec +--- /dev/null ++++ b/gdb/features/s390-tevx-linux64.c +@@ -0,0 +1,188 @@ ++/* THIS FILE IS GENERATED. -*- buffer-read-only: t -*- vi:set ro: ++ Original: s390-tevx-linux64.xml */ ++ ++#include "defs.h" ++#include "osabi.h" ++#include "target-descriptions.h" ++ ++struct target_desc *tdesc_s390_tevx_linux64; ++static void ++initialize_tdesc_s390_tevx_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"); ++ ++ tdesc_s390_tevx_linux64 = result; ++} +diff --git a/gdb/features/s390-tevx-linux64.xml b/gdb/features/s390-tevx-linux64.xml +new file mode 100644 +index 0000000..9da1f6d +--- /dev/null ++++ b/gdb/features/s390-tevx-linux64.xml +@@ -0,0 +1,26 @@ ++ ++ ++ ++ ++ ++ ++ ++ s390:31-bit ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ +diff --git a/gdb/features/s390-vx-linux64.c b/gdb/features/s390-vx-linux64.c +new file mode 100644 +index 0000000..c3ffa16 +--- /dev/null ++++ b/gdb/features/s390-vx-linux64.c +@@ -0,0 +1,166 @@ ++/* THIS FILE IS GENERATED. -*- buffer-read-only: t -*- vi:set ro: ++ Original: s390-vx-linux64.xml */ ++ ++#include "defs.h" ++#include "osabi.h" ++#include "target-descriptions.h" ++ ++struct target_desc *tdesc_s390_vx_linux64; ++static void ++initialize_tdesc_s390_vx_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.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", 70, 1, NULL, 64, "uint64"); ++ tdesc_create_reg (feature, "v1l", 71, 1, NULL, 64, "uint64"); ++ tdesc_create_reg (feature, "v2l", 72, 1, NULL, 64, "uint64"); ++ tdesc_create_reg (feature, "v3l", 73, 1, NULL, 64, "uint64"); ++ tdesc_create_reg (feature, "v4l", 74, 1, NULL, 64, "uint64"); ++ tdesc_create_reg (feature, "v5l", 75, 1, NULL, 64, "uint64"); ++ tdesc_create_reg (feature, "v6l", 76, 1, NULL, 64, "uint64"); ++ tdesc_create_reg (feature, "v7l", 77, 1, NULL, 64, "uint64"); ++ tdesc_create_reg (feature, "v8l", 78, 1, NULL, 64, "uint64"); ++ tdesc_create_reg (feature, "v9l", 79, 1, NULL, 64, "uint64"); ++ tdesc_create_reg (feature, "v10l", 80, 1, NULL, 64, "uint64"); ++ tdesc_create_reg (feature, "v11l", 81, 1, NULL, 64, "uint64"); ++ tdesc_create_reg (feature, "v12l", 82, 1, NULL, 64, "uint64"); ++ tdesc_create_reg (feature, "v13l", 83, 1, NULL, 64, "uint64"); ++ tdesc_create_reg (feature, "v14l", 84, 1, NULL, 64, "uint64"); ++ tdesc_create_reg (feature, "v15l", 85, 1, NULL, 64, "uint64"); ++ tdesc_create_reg (feature, "v16", 86, 1, NULL, 128, "vec128"); ++ tdesc_create_reg (feature, "v17", 87, 1, NULL, 128, "vec128"); ++ tdesc_create_reg (feature, "v18", 88, 1, NULL, 128, "vec128"); ++ tdesc_create_reg (feature, "v19", 89, 1, NULL, 128, "vec128"); ++ tdesc_create_reg (feature, "v20", 90, 1, NULL, 128, "vec128"); ++ tdesc_create_reg (feature, "v21", 91, 1, NULL, 128, "vec128"); ++ tdesc_create_reg (feature, "v22", 92, 1, NULL, 128, "vec128"); ++ tdesc_create_reg (feature, "v23", 93, 1, NULL, 128, "vec128"); ++ tdesc_create_reg (feature, "v24", 94, 1, NULL, 128, "vec128"); ++ tdesc_create_reg (feature, "v25", 95, 1, NULL, 128, "vec128"); ++ tdesc_create_reg (feature, "v26", 96, 1, NULL, 128, "vec128"); ++ tdesc_create_reg (feature, "v27", 97, 1, NULL, 128, "vec128"); ++ tdesc_create_reg (feature, "v28", 98, 1, NULL, 128, "vec128"); ++ tdesc_create_reg (feature, "v29", 99, 1, NULL, 128, "vec128"); ++ tdesc_create_reg (feature, "v30", 100, 1, NULL, 128, "vec128"); ++ tdesc_create_reg (feature, "v31", 101, 1, NULL, 128, "vec128"); ++ ++ tdesc_s390_vx_linux64 = result; ++} +diff --git a/gdb/features/s390-vx-linux64.xml b/gdb/features/s390-vx-linux64.xml +new file mode 100644 +index 0000000..ef8ebc0 +--- /dev/null ++++ b/gdb/features/s390-vx-linux64.xml +@@ -0,0 +1,25 @@ ++ ++ ++ ++ ++ ++ ++ ++ s390:31-bit ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ +diff --git a/gdb/features/s390-vx.xml b/gdb/features/s390-vx.xml +new file mode 100644 +index 0000000..bfae8a1 +--- /dev/null ++++ b/gdb/features/s390-vx.xml +@@ -0,0 +1,59 @@ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ +diff --git a/gdb/features/s390x-tevx-linux64.c b/gdb/features/s390x-tevx-linux64.c +new file mode 100644 +index 0000000..327cd23 +--- /dev/null ++++ b/gdb/features/s390x-tevx-linux64.c +@@ -0,0 +1,172 @@ ++/* THIS FILE IS GENERATED. -*- buffer-read-only: t -*- vi:set ro: ++ Original: s390x-tevx-linux64.xml */ ++ ++#include "defs.h" ++#include "osabi.h" ++#include "target-descriptions.h" ++ ++struct target_desc *tdesc_s390x_tevx_linux64; ++static void ++initialize_tdesc_s390x_tevx_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"); ++ ++ tdesc_s390x_tevx_linux64 = result; ++} +diff --git a/gdb/features/s390x-tevx-linux64.xml b/gdb/features/s390x-tevx-linux64.xml +new file mode 100644 +index 0000000..974992b +--- /dev/null ++++ b/gdb/features/s390x-tevx-linux64.xml +@@ -0,0 +1,25 @@ ++ ++ ++ ++ ++ ++ ++ ++ s390:64-bit ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ +diff --git a/gdb/features/s390x-vx-linux64.c b/gdb/features/s390x-vx-linux64.c +new file mode 100644 +index 0000000..e66da70 +--- /dev/null ++++ b/gdb/features/s390x-vx-linux64.c +@@ -0,0 +1,150 @@ ++/* THIS FILE IS GENERATED. -*- buffer-read-only: t -*- vi:set ro: ++ Original: s390x-vx-linux64.xml */ ++ ++#include "defs.h" ++#include "osabi.h" ++#include "target-descriptions.h" ++ ++struct target_desc *tdesc_s390x_vx_linux64; ++static void ++initialize_tdesc_s390x_vx_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.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", 54, 1, NULL, 64, "uint64"); ++ tdesc_create_reg (feature, "v1l", 55, 1, NULL, 64, "uint64"); ++ tdesc_create_reg (feature, "v2l", 56, 1, NULL, 64, "uint64"); ++ tdesc_create_reg (feature, "v3l", 57, 1, NULL, 64, "uint64"); ++ tdesc_create_reg (feature, "v4l", 58, 1, NULL, 64, "uint64"); ++ tdesc_create_reg (feature, "v5l", 59, 1, NULL, 64, "uint64"); ++ tdesc_create_reg (feature, "v6l", 60, 1, NULL, 64, "uint64"); ++ tdesc_create_reg (feature, "v7l", 61, 1, NULL, 64, "uint64"); ++ tdesc_create_reg (feature, "v8l", 62, 1, NULL, 64, "uint64"); ++ tdesc_create_reg (feature, "v9l", 63, 1, NULL, 64, "uint64"); ++ tdesc_create_reg (feature, "v10l", 64, 1, NULL, 64, "uint64"); ++ tdesc_create_reg (feature, "v11l", 65, 1, NULL, 64, "uint64"); ++ tdesc_create_reg (feature, "v12l", 66, 1, NULL, 64, "uint64"); ++ tdesc_create_reg (feature, "v13l", 67, 1, NULL, 64, "uint64"); ++ tdesc_create_reg (feature, "v14l", 68, 1, NULL, 64, "uint64"); ++ tdesc_create_reg (feature, "v15l", 69, 1, NULL, 64, "uint64"); ++ tdesc_create_reg (feature, "v16", 70, 1, NULL, 128, "vec128"); ++ tdesc_create_reg (feature, "v17", 71, 1, NULL, 128, "vec128"); ++ tdesc_create_reg (feature, "v18", 72, 1, NULL, 128, "vec128"); ++ tdesc_create_reg (feature, "v19", 73, 1, NULL, 128, "vec128"); ++ tdesc_create_reg (feature, "v20", 74, 1, NULL, 128, "vec128"); ++ tdesc_create_reg (feature, "v21", 75, 1, NULL, 128, "vec128"); ++ tdesc_create_reg (feature, "v22", 76, 1, NULL, 128, "vec128"); ++ tdesc_create_reg (feature, "v23", 77, 1, NULL, 128, "vec128"); ++ tdesc_create_reg (feature, "v24", 78, 1, NULL, 128, "vec128"); ++ tdesc_create_reg (feature, "v25", 79, 1, NULL, 128, "vec128"); ++ tdesc_create_reg (feature, "v26", 80, 1, NULL, 128, "vec128"); ++ tdesc_create_reg (feature, "v27", 81, 1, NULL, 128, "vec128"); ++ tdesc_create_reg (feature, "v28", 82, 1, NULL, 128, "vec128"); ++ tdesc_create_reg (feature, "v29", 83, 1, NULL, 128, "vec128"); ++ tdesc_create_reg (feature, "v30", 84, 1, NULL, 128, "vec128"); ++ tdesc_create_reg (feature, "v31", 85, 1, NULL, 128, "vec128"); ++ ++ tdesc_s390x_vx_linux64 = result; ++} +diff --git a/gdb/features/s390x-vx-linux64.xml b/gdb/features/s390x-vx-linux64.xml +new file mode 100644 +index 0000000..fd2f42e +--- /dev/null ++++ b/gdb/features/s390x-vx-linux64.xml +@@ -0,0 +1,24 @@ ++ ++ ++ ++ ++ ++ ++ ++ s390:64-bit ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ +diff --git a/gdb/regformats/s390-tevx-linux64.dat b/gdb/regformats/s390-tevx-linux64.dat +new file mode 100644 +index 0000000..3db7a91 +--- /dev/null ++++ b/gdb/regformats/s390-tevx-linux64.dat +@@ -0,0 +1,127 @@ ++# THIS FILE IS GENERATED. -*- buffer-read-only: t -*- vi :set ro: ++# Generated from: s390-tevx-linux64.xml ++name:s390_tevx_linux64 ++xmltarget:s390-tevx-linux64.xml ++expedite:r14l,r15l,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 +diff --git a/gdb/regformats/s390-vx-linux64.dat b/gdb/regformats/s390-vx-linux64.dat +new file mode 100644 +index 0000000..6a821fd +--- /dev/null ++++ b/gdb/regformats/s390-vx-linux64.dat +@@ -0,0 +1,107 @@ ++# THIS FILE IS GENERATED. -*- buffer-read-only: t -*- vi :set ro: ++# Generated from: s390-vx-linux64.xml ++name:s390_vx_linux64 ++xmltarget:s390-vx-linux64.xml ++expedite:r14l,r15l,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: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 +diff --git a/gdb/regformats/s390x-tevx-linux64.dat b/gdb/regformats/s390x-tevx-linux64.dat +new file mode 100644 +index 0000000..2df31e6 +--- /dev/null ++++ b/gdb/regformats/s390x-tevx-linux64.dat +@@ -0,0 +1,111 @@ ++# THIS FILE IS GENERATED. -*- buffer-read-only: t -*- vi :set ro: ++# Generated from: s390x-tevx-linux64.xml ++name:s390x_tevx_linux64 ++xmltarget:s390x-tevx-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 +diff --git a/gdb/regformats/s390x-vx-linux64.dat b/gdb/regformats/s390x-vx-linux64.dat +new file mode 100644 +index 0000000..1d8f2b6 +--- /dev/null ++++ b/gdb/regformats/s390x-vx-linux64.dat +@@ -0,0 +1,91 @@ ++# THIS FILE IS GENERATED. -*- buffer-read-only: t -*- vi :set ro: ++# Generated from: s390x-vx-linux64.xml ++name:s390x_vx_linux64 ++xmltarget:s390x-vx-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: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 +-- +1.8.1.4 + diff --git a/0002-S390-Add-vector-register-support-to-gdb.patch b/0002-S390-Add-vector-register-support-to-gdb.patch new file mode 100644 index 0000000..8f0a731 --- /dev/null +++ b/0002-S390-Add-vector-register-support-to-gdb.patch @@ -0,0 +1,744 @@ +Part of fate#318039 + +From 550bdf96cae94bc3e6c0f7e7e9a6793399dd8fe6 Mon Sep 17 00:00:00 2001 +From: Andreas Arnez +Date: Mon, 2 Mar 2015 10:57:39 +0100 +Subject: [PATCH] S390: Add vector register support to gdb + +Recognize S/390 targets with the new vector feature and present their +vector registers appropriately: as 32 new 128-bit wide registers +v0-v31, where the first 16 embed the floating point registers f0-f15. +Each of the full registers v0-v15 is modelled as a pseudo register. + +gdb/ChangeLog: + + * s390-linux-nat.c (have_regset_vxrs): New static variable. + (s390_linux_fetch_inferior_registers): Handle vector registers, if + present. + (s390_linux_store_inferior_registers): Likewise. + (s390_get_hwcap): Remove function. Embed its logic... + (s390_read_description): ...here. Yield a target description with + vector registers if applicable. + * s390-linux-tdep.c: Include "features/s390-vx-linux64.c", + "features/s390-tevx-linux64.c", "features/s390x-vx-linux64.c", and + "features/s390x-tevx-linux64.c". + (struct gdbarch_tdep) : New field. + (s390_dwarf_regmap): Add vector registers. Remove bogus entries + for "GNU/Linux-specific registers". + (s390_dwarf_reg_r0l): New enum value. + (s390_dwarf_reg_to_regnum): Support vector registers. + (s390_adjust_frame_regnum): Adjust pseudo DWARF register numbers + of GPR lower halves. + (regnum_is_vxr_full): New function. + (s390_register_name): New function. + (s390_pseudo_register_name): Handle v0-v15, which are composed of + f0-f15 and v0l-v15l. + (s390_pseudo_register_type): Likewise. + (s390_pseudo_register_read): Likewise. + (s390_pseudo_register_write): Likewise. + (s390_value_from_register): Account for the fact that values are + placed left-justified in vector registers. + (s390_pseudo_register_reggroup_p): Add pseudo registers v0-v15 to + the vector reggroup and omit them from the general reggroup. + (s390_regmap_vxrs_low, s390_regmap_vxrs_high): New register maps. + (s390_vxrs_low_regset, s390_vxrs_high_regset): New regsets. + (s390_iterate_over_regset_sections): Add iterations for the two + new vector regsets. + (s390_core_read_description): Yield a target description with + vector registers if applicable. + (s390_gdbarch_init): Handle target descriptions with vector + registers. Add "register_name" gdbarch method. + (_initialize_s390_tdep): Call new tdesc initialization functions. + * s390-linux-tdep.h (HWCAP_S390_VX): New macro. + (S390_V0_LOWER_REGNUM, S390_V1_LOWER_REGNUM, S390_V2_LOWER_REGNUM) + (S390_V3_LOWER_REGNUM, S390_V4_LOWER_REGNUM, S390_V5_LOWER_REGNUM) + (S390_V6_LOWER_REGNUM, S390_V7_LOWER_REGNUM, S390_V8_LOWER_REGNUM) + (S390_V9_LOWER_REGNUM, S390_V10_LOWER_REGNUM) + (S390_V11_LOWER_REGNUM, S390_V12_LOWER_REGNUM) + (S390_V13_LOWER_REGNUM, S390_V14_LOWER_REGNUM) + (S390_V15_LOWER_REGNUM, S390_V16_REGNUM, S390_V17_REGNUM) + (S390_V18_REGNUM, S390_V19_REGNUM, S390_V20_REGNUM) + (S390_V21_REGNUM, S390_V22_REGNUM, S390_V23_REGNUM) + (S390_V24_REGNUM, S390_V25_REGNUM, S390_V26_REGNUM) + (S390_V27_REGNUM, S390_V28_REGNUM, S390_V29_REGNUM) + (S390_V30_REGNUM, S390_V31_REGNUM): New macros. + (S390_NUM_REGS): Adjust value. + (s390_vxrs_low_regset, s390_vxrs_high_regset): Declare. + (tdesc_s390_vx_linux64, tdesc_s390_tevx_linux64) + (tdesc_s390x_vx_linux64, tdesc_s390x_tevx_linux64): Likewise. + * NEWS: Announce S/390 vector register support. +--- + gdb/ChangeLog | 58 +++++++++++++ + gdb/NEWS | 3 + + gdb/s390-linux-nat.c | 84 +++++++++++------- + gdb/s390-linux-tdep.c | 229 +++++++++++++++++++++++++++++++++++++++++++------- + gdb/s390-linux-tdep.h | 45 +++++++++- + 5 files changed, 359 insertions(+), 60 deletions(-) + +Index: gdb-7.9.1/gdb/NEWS +=================================================================== +--- gdb-7.9.1.orig/gdb/NEWS 2015-07-10 16:18:29.000000000 +0200 ++++ gdb-7.9.1/gdb/NEWS 2015-07-10 16:18:36.000000000 +0200 +@@ -7,6 +7,9 @@ + + ** Xmethods can now specify a result type. + ++* GDB now supports access to vector registers on S/390 GNU/Linux ++ targets. ++ + *** Changes in GDB 7.9 + + * GDB now supports hardware watchpoints on x86 GNU Hurd. +Index: gdb-7.9.1/gdb/s390-linux-nat.c +=================================================================== +--- gdb-7.9.1.orig/gdb/s390-linux-nat.c 2015-07-10 16:18:29.000000000 +0200 ++++ gdb-7.9.1/gdb/s390-linux-nat.c 2015-07-10 16:18:36.000000000 +0200 +@@ -49,6 +49,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; + + /* Register map for 32-bit executables running under a 64-bit + kernel. */ +@@ -367,6 +368,18 @@ s390_linux_fetch_inferior_registers (str + if (regnum == -1 || S390_IS_TDBREGSET_REGNUM (regnum)) + fetch_regset (regcache, tid, NT_S390_TDB, s390_sizeof_tdbregset, + &s390_tdb_regset); ++ ++ if (have_regset_vxrs) ++ { ++ if (regnum == -1 || (regnum >= S390_V0_LOWER_REGNUM ++ && regnum <= S390_V15_LOWER_REGNUM)) ++ fetch_regset (regcache, tid, NT_S390_VXRS_LOW, 16 * 8, ++ &s390_vxrs_low_regset); ++ if (regnum == -1 || (regnum >= S390_V16_REGNUM ++ && regnum <= S390_V31_REGNUM)) ++ fetch_regset (regcache, tid, NT_S390_VXRS_HIGH, 16 * 16, ++ &s390_vxrs_high_regset); ++ } + } + + /* Store register REGNUM back into the child process. If REGNUM is +@@ -389,6 +402,18 @@ s390_linux_store_inferior_registers (str + if (regnum == -1 || regnum == S390_SYSTEM_CALL_REGNUM) + store_regset (regcache, tid, NT_S390_SYSTEM_CALL, 4, + &s390_system_call_regset); ++ ++ if (have_regset_vxrs) ++ { ++ if (regnum == -1 || (regnum >= S390_V0_LOWER_REGNUM ++ && regnum <= S390_V15_LOWER_REGNUM)) ++ store_regset (regcache, tid, NT_S390_VXRS_LOW, 16 * 8, ++ &s390_vxrs_low_regset); ++ if (regnum == -1 || (regnum >= S390_V16_REGNUM ++ && regnum <= S390_V31_REGNUM)) ++ store_regset (regcache, tid, NT_S390_VXRS_HIGH, 16 * 16, ++ &s390_vxrs_high_regset); ++ } + } + + +@@ -591,19 +616,6 @@ s390_auxv_parse (struct target_ops *ops, + return 1; + } + +-#ifdef __s390x__ +-static unsigned long +-s390_get_hwcap (void) +-{ +- CORE_ADDR field; +- +- if (target_auxv_search (¤t_target, AT_HWCAP, &field)) +- return (unsigned long) field; +- +- return 0; +-} +-#endif +- + static const struct target_desc * + s390_read_description (struct target_ops *ops) + { +@@ -614,27 +626,41 @@ s390_read_description (struct target_ops + have_regset_system_call + = check_regset (tid, NT_S390_SYSTEM_CALL, 4); + +-#ifdef __s390x__ + /* If GDB itself is compiled as 64-bit, we are running on a machine in + z/Architecture mode. If the target is running in 64-bit addressing + mode, report s390x architecture. If the target is running in 31-bit + addressing mode, but the kernel supports using 64-bit registers in + that mode, report s390 architecture with 64-bit GPRs. */ ++#ifdef __s390x__ ++ { ++ CORE_ADDR hwcap = 0; + +- have_regset_tdb = (s390_get_hwcap () & HWCAP_S390_TE) ? +- check_regset (tid, NT_S390_TDB, s390_sizeof_tdbregset) : 0; +- +- if (s390_target_wordsize () == 8) +- return (have_regset_tdb ? tdesc_s390x_te_linux64 : +- have_regset_system_call? tdesc_s390x_linux64v2 : +- have_regset_last_break? tdesc_s390x_linux64v1 : +- tdesc_s390x_linux64); +- +- if (s390_get_hwcap () & HWCAP_S390_HIGH_GPRS) +- return (have_regset_tdb ? tdesc_s390_te_linux64 : +- have_regset_system_call? tdesc_s390_linux64v2 : +- have_regset_last_break? tdesc_s390_linux64v1 : +- tdesc_s390_linux64); ++ target_auxv_search (¤t_target, AT_HWCAP, &hwcap); ++ have_regset_tdb = (hwcap & HWCAP_S390_TE) ++ && check_regset (tid, NT_S390_TDB, s390_sizeof_tdbregset); ++ ++ have_regset_vxrs = (hwcap & HWCAP_S390_VX) ++ && check_regset (tid, NT_S390_VXRS_LOW, 16 * 8) ++ && check_regset (tid, NT_S390_VXRS_HIGH, 16 * 16); ++ ++ if (s390_target_wordsize () == 8) ++ return (have_regset_vxrs ? ++ (have_regset_tdb ? tdesc_s390x_tevx_linux64 : ++ tdesc_s390x_vx_linux64) : ++ have_regset_tdb ? tdesc_s390x_te_linux64 : ++ have_regset_system_call ? tdesc_s390x_linux64v2 : ++ have_regset_last_break ? tdesc_s390x_linux64v1 : ++ tdesc_s390x_linux64); ++ ++ if (hwcap & HWCAP_S390_HIGH_GPRS) ++ return (have_regset_vxrs ? ++ (have_regset_tdb ? tdesc_s390_tevx_linux64 : ++ tdesc_s390_vx_linux64) : ++ have_regset_tdb ? tdesc_s390_te_linux64 : ++ have_regset_system_call ? tdesc_s390_linux64v2 : ++ have_regset_last_break ? tdesc_s390_linux64v1 : ++ tdesc_s390_linux64); ++ } + #endif + + /* If GDB itself is compiled as 31-bit, or if we're running a 31-bit inferior +Index: gdb-7.9.1/gdb/s390-linux-tdep.c +=================================================================== +--- gdb-7.9.1.orig/gdb/s390-linux-tdep.c 2015-07-10 16:18:29.000000000 +0200 ++++ gdb-7.9.1/gdb/s390-linux-tdep.c 2015-07-10 16:18:36.000000000 +0200 +@@ -62,10 +62,14 @@ + #include "features/s390-linux64v1.c" + #include "features/s390-linux64v2.c" + #include "features/s390-te-linux64.c" ++#include "features/s390-vx-linux64.c" ++#include "features/s390-tevx-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" + + #define XML_SYSCALL_FILENAME_S390 "syscalls/s390-linux.xml" + #define XML_SYSCALL_FILENAME_S390X "syscalls/s390x-linux.xml" +@@ -81,6 +85,7 @@ struct gdbarch_tdep + int gpr_full_regnum; + int pc_regnum; + int cc_regnum; ++ int v0_full_regnum; + + int have_linux_v1; + int have_linux_v2; +@@ -148,61 +153,83 @@ s390_write_pc (struct regcache *regcache + + static const short s390_dwarf_regmap[] = + { +- /* General Purpose Registers. */ ++ /* 0-15: General Purpose Registers. */ + S390_R0_REGNUM, S390_R1_REGNUM, S390_R2_REGNUM, S390_R3_REGNUM, + S390_R4_REGNUM, S390_R5_REGNUM, S390_R6_REGNUM, S390_R7_REGNUM, + S390_R8_REGNUM, S390_R9_REGNUM, S390_R10_REGNUM, S390_R11_REGNUM, + S390_R12_REGNUM, S390_R13_REGNUM, S390_R14_REGNUM, S390_R15_REGNUM, + +- /* Floating Point Registers. */ ++ /* 16-31: Floating Point Registers / Vector Registers 0-15. */ + S390_F0_REGNUM, S390_F2_REGNUM, S390_F4_REGNUM, S390_F6_REGNUM, + S390_F1_REGNUM, S390_F3_REGNUM, S390_F5_REGNUM, S390_F7_REGNUM, + S390_F8_REGNUM, S390_F10_REGNUM, S390_F12_REGNUM, S390_F14_REGNUM, + S390_F9_REGNUM, S390_F11_REGNUM, S390_F13_REGNUM, S390_F15_REGNUM, + +- /* Control Registers (not mapped). */ ++ /* 32-47: Control Registers (not mapped). */ + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + +- /* Access Registers. */ ++ /* 48-63: Access Registers. */ + S390_A0_REGNUM, S390_A1_REGNUM, S390_A2_REGNUM, S390_A3_REGNUM, + S390_A4_REGNUM, S390_A5_REGNUM, S390_A6_REGNUM, S390_A7_REGNUM, + S390_A8_REGNUM, S390_A9_REGNUM, S390_A10_REGNUM, S390_A11_REGNUM, + S390_A12_REGNUM, S390_A13_REGNUM, S390_A14_REGNUM, S390_A15_REGNUM, + +- /* Program Status Word. */ ++ /* 64-65: Program Status Word. */ + S390_PSWM_REGNUM, + S390_PSWA_REGNUM, + ++ /* 66-67: Reserved. */ ++ -1, -1, ++ ++ /* 68-83: Vector Registers 16-31. */ ++ S390_V16_REGNUM, S390_V18_REGNUM, S390_V20_REGNUM, S390_V22_REGNUM, ++ S390_V17_REGNUM, S390_V19_REGNUM, S390_V21_REGNUM, S390_V23_REGNUM, ++ S390_V24_REGNUM, S390_V26_REGNUM, S390_V28_REGNUM, S390_V30_REGNUM, ++ S390_V25_REGNUM, S390_V27_REGNUM, S390_V29_REGNUM, S390_V31_REGNUM, ++ ++ /* End of "official" DWARF registers. The remainder of the map is ++ for GDB internal use only. */ ++ + /* GPR Lower Half Access. */ + S390_R0_REGNUM, S390_R1_REGNUM, S390_R2_REGNUM, S390_R3_REGNUM, + S390_R4_REGNUM, S390_R5_REGNUM, S390_R6_REGNUM, S390_R7_REGNUM, + S390_R8_REGNUM, S390_R9_REGNUM, S390_R10_REGNUM, S390_R11_REGNUM, + S390_R12_REGNUM, S390_R13_REGNUM, S390_R14_REGNUM, S390_R15_REGNUM, +- +- /* GNU/Linux-specific registers (not mapped). */ +- -1, -1, -1, + }; + ++enum { s390_dwarf_reg_r0l = ARRAY_SIZE (s390_dwarf_regmap) - 16 }; ++ + /* Convert DWARF register number REG to the appropriate register + number used by GDB. */ + static int + s390_dwarf_reg_to_regnum (struct gdbarch *gdbarch, int reg) + { + struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch); ++ int gdb_reg = -1; + +- /* In a 32-on-64 debug scenario, debug info refers to the full 64-bit +- GPRs. Note that call frame information still refers to the 32-bit +- lower halves, because s390_adjust_frame_regnum uses register numbers +- 66 .. 81 to access GPRs. */ ++ /* In a 32-on-64 debug scenario, debug info refers to the full ++ 64-bit GPRs. Note that call frame information still refers to ++ the 32-bit lower halves, because s390_adjust_frame_regnum uses ++ special register numbers to access GPRs. */ + if (tdep->gpr_full_regnum != -1 && reg >= 0 && reg < 16) + return tdep->gpr_full_regnum + reg; + + if (reg >= 0 && reg < ARRAY_SIZE (s390_dwarf_regmap)) +- return s390_dwarf_regmap[reg]; ++ gdb_reg = s390_dwarf_regmap[reg]; ++ ++ if (tdep->v0_full_regnum == -1) ++ { ++ if (gdb_reg >= S390_V16_REGNUM && gdb_reg <= S390_V31_REGNUM) ++ gdb_reg = -1; ++ } ++ else ++ { ++ if (gdb_reg >= S390_F0_REGNUM && gdb_reg <= S390_F15_REGNUM) ++ gdb_reg = gdb_reg - S390_F0_REGNUM + tdep->v0_full_regnum; ++ } + +- warning (_("Unmapped DWARF Register #%d encountered."), reg); +- return -1; ++ return gdb_reg; + } + + /* Translate a .eh_frame register to DWARF register, or adjust a +@@ -211,7 +238,7 @@ static int + s390_adjust_frame_regnum (struct gdbarch *gdbarch, int num, int eh_frame_p) + { + /* See s390_dwarf_reg_to_regnum for comments. */ +- return (num >= 0 && num < 16)? num + 66 : num; ++ return (num >= 0 && num < 16) ? num + s390_dwarf_reg_r0l : num; + } + + +@@ -225,6 +252,29 @@ regnum_is_gpr_full (struct gdbarch_tdep + && regnum <= tdep->gpr_full_regnum + 15); + } + ++/* Check whether REGNUM indicates a full vector register (v0-v15). ++ These pseudo-registers are composed of f0-f15 and v0l-v15l. */ ++ ++static int ++regnum_is_vxr_full (struct gdbarch_tdep *tdep, int regnum) ++{ ++ return (tdep->v0_full_regnum != -1 ++ && regnum >= tdep->v0_full_regnum ++ && regnum <= tdep->v0_full_regnum + 15); ++} ++ ++/* Return the name of register REGNO. Return NULL for registers that ++ shouldn't be visible. */ ++ ++static const char * ++s390_register_name (struct gdbarch *gdbarch, int regnum) ++{ ++ if (regnum >= S390_V0_LOWER_REGNUM ++ && regnum <= S390_V15_LOWER_REGNUM) ++ return NULL; ++ return tdesc_register_name (gdbarch, regnum); ++} ++ + static const char * + s390_pseudo_register_name (struct gdbarch *gdbarch, int regnum) + { +@@ -245,6 +295,15 @@ s390_pseudo_register_name (struct gdbarc + return full_name[regnum - tdep->gpr_full_regnum]; + } + ++ if (regnum_is_vxr_full (tdep, regnum)) ++ { ++ static const char *full_name[] = { ++ "v0", "v1", "v2", "v3", "v4", "v5", "v6", "v7", ++ "v8", "v9", "v10", "v11", "v12", "v13", "v14", "v15" ++ }; ++ return full_name[regnum - tdep->v0_full_regnum]; ++ } ++ + internal_error (__FILE__, __LINE__, _("invalid regnum")); + } + +@@ -262,6 +321,9 @@ s390_pseudo_register_type (struct gdbarc + if (regnum_is_gpr_full (tdep, regnum)) + return builtin_type (gdbarch)->builtin_uint64; + ++ if (regnum_is_vxr_full (tdep, regnum)) ++ return tdesc_find_type (gdbarch, "vec128"); ++ + internal_error (__FILE__, __LINE__, _("invalid regnum")); + } + +@@ -323,6 +385,19 @@ s390_pseudo_register_read (struct gdbarc + return status; + } + ++ if (regnum_is_vxr_full (tdep, regnum)) ++ { ++ enum register_status status; ++ ++ regnum -= tdep->v0_full_regnum; ++ ++ status = regcache_raw_read (regcache, S390_F0_REGNUM + regnum, buf); ++ if (status == REG_VALID) ++ status = regcache_raw_read (regcache, ++ S390_V0_LOWER_REGNUM + regnum, buf + 8); ++ return status; ++ } ++ + internal_error (__FILE__, __LINE__, _("invalid regnum")); + } + +@@ -370,22 +445,34 @@ s390_pseudo_register_write (struct gdbar + return; + } + ++ if (regnum_is_vxr_full (tdep, regnum)) ++ { ++ regnum -= tdep->v0_full_regnum; ++ regcache_raw_write (regcache, S390_F0_REGNUM + regnum, buf); ++ regcache_raw_write (regcache, S390_V0_LOWER_REGNUM + regnum, buf + 8); ++ return; ++ } ++ + internal_error (__FILE__, __LINE__, _("invalid regnum")); + } + + /* 'float' values are stored in the upper half of floating-point +- registers, even though we are otherwise a big-endian platform. */ ++ registers, even though we are otherwise a big-endian platform. The ++ same applies to a 'float' value within a vector. */ + + static struct value * + s390_value_from_register (struct gdbarch *gdbarch, struct type *type, + int regnum, struct frame_id frame_id) + { ++ struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch); + struct value *value = default_value_from_register (gdbarch, type, + regnum, frame_id); + check_typedef (type); + +- if (regnum >= S390_F0_REGNUM && regnum <= S390_F15_REGNUM +- && TYPE_LENGTH (type) < 8) ++ if ((regnum >= S390_F0_REGNUM && regnum <= S390_F15_REGNUM ++ && TYPE_LENGTH (type) < 8) ++ || regnum_is_vxr_full (tdep, regnum) ++ || (regnum >= S390_V16_REGNUM && regnum <= S390_V31_REGNUM)) + set_value_offset (value, 0); + + return value; +@@ -410,6 +497,12 @@ s390_pseudo_register_reggroup_p (struct + if (group == save_reggroup || group == restore_reggroup) + return regnum == tdep->pc_regnum || regnum == tdep->cc_regnum; + ++ if (group == vector_reggroup) ++ return regnum_is_vxr_full (tdep, regnum); ++ ++ if (group == general_reggroup && regnum_is_vxr_full (tdep, regnum)) ++ return 0; ++ + return default_register_reggroup_p (gdbarch, regnum, group); + } + +@@ -469,6 +562,18 @@ static const struct regcache_map_entry s + { 0 } + }; + ++static const struct regcache_map_entry s390_regmap_vxrs_low[] = ++ { ++ { 16, S390_V0_LOWER_REGNUM, 8 }, ++ { 0 } ++ }; ++ ++static const struct regcache_map_entry s390_regmap_vxrs_high[] = ++ { ++ { 16, S390_V16_REGNUM, 16 }, ++ { 0 } ++ }; ++ + + /* Supply the TDB regset. Like regcache_supply_regset, but invalidate + the TDB registers unless the TDB format field is valid. */ +@@ -529,6 +634,18 @@ const struct regset s390_tdb_regset = { + regcache_collect_regset + }; + ++const struct regset s390_vxrs_low_regset = { ++ s390_regmap_vxrs_low, ++ regcache_supply_regset, ++ regcache_collect_regset ++}; ++ ++const struct regset s390_vxrs_high_regset = { ++ s390_regmap_vxrs_high, ++ regcache_supply_regset, ++ regcache_collect_regset ++}; ++ + /* Iterate over supported core file register note sections. */ + + static void +@@ -567,37 +684,54 @@ s390_iterate_over_regset_sections (struc + S390_TDB_DWORD0_REGNUM))) + cb (".reg-s390-tdb", s390_sizeof_tdbregset, &s390_tdb_regset, + "s390 TDB", cb_data); ++ ++ if (tdep->v0_full_regnum != -1) ++ { ++ cb (".reg-s390-vxrs-low", 16 * 8, &s390_vxrs_low_regset, ++ "s390 vector registers 0-15 lower half", cb_data); ++ cb (".reg-s390-vxrs-high", 16 * 16, &s390_vxrs_high_regset, ++ "s390 vector registers 16-31", cb_data); ++ } + } + + static const struct target_desc * + s390_core_read_description (struct gdbarch *gdbarch, + struct target_ops *target, bfd *abfd) + { +- asection *high_gprs = bfd_get_section_by_name (abfd, ".reg-s390-high-gprs"); +- asection *v1 = bfd_get_section_by_name (abfd, ".reg-s390-last-break"); +- asection *v2 = bfd_get_section_by_name (abfd, ".reg-s390-system-call"); + asection *section = bfd_get_section_by_name (abfd, ".reg"); + CORE_ADDR hwcap = 0; ++ int high_gprs, v1, v2, te, vx; + + target_auxv_search (target, AT_HWCAP, &hwcap); + if (!section) + return NULL; + ++ high_gprs = (bfd_get_section_by_name (abfd, ".reg-s390-high-gprs") ++ != NULL); ++ v1 = (bfd_get_section_by_name (abfd, ".reg-s390-last-break") != NULL); ++ v2 = (bfd_get_section_by_name (abfd, ".reg-s390-system-call") != NULL); ++ vx = (hwcap & HWCAP_S390_VX); ++ te = (hwcap & HWCAP_S390_TE); ++ + switch (bfd_section_size (abfd, section)) + { + case s390_sizeof_gregset: + if (high_gprs) +- return ((hwcap & HWCAP_S390_TE) ? tdesc_s390_te_linux64 : +- v2? tdesc_s390_linux64v2 : +- v1? tdesc_s390_linux64v1 : tdesc_s390_linux64); ++ return (te && vx ? tdesc_s390_tevx_linux64 : ++ vx ? tdesc_s390_vx_linux64 : ++ te ? tdesc_s390_te_linux64 : ++ v2 ? tdesc_s390_linux64v2 : ++ v1 ? tdesc_s390_linux64v1 : tdesc_s390_linux64); + else +- return (v2? tdesc_s390_linux32v2 : +- v1? tdesc_s390_linux32v1 : tdesc_s390_linux32); ++ return (v2 ? tdesc_s390_linux32v2 : ++ v1 ? tdesc_s390_linux32v1 : tdesc_s390_linux32); + + case s390x_sizeof_gregset: +- return ((hwcap & HWCAP_S390_TE) ? tdesc_s390x_te_linux64 : +- v2? tdesc_s390x_linux64v2 : +- v1? tdesc_s390x_linux64v1 : tdesc_s390x_linux64); ++ return (te && vx ? tdesc_s390x_tevx_linux64 : ++ vx ? tdesc_s390x_vx_linux64 : ++ te ? tdesc_s390x_te_linux64 : ++ v2 ? tdesc_s390x_linux64v2 : ++ v1 ? tdesc_s390x_linux64v1 : tdesc_s390x_linux64); + + default: + return NULL; +@@ -2842,6 +2976,7 @@ s390_gdbarch_init (struct gdbarch_info i + int have_linux_v1 = 0; + int have_linux_v2 = 0; + int have_tdb = 0; ++ int have_vx = 0; + int first_pseudo_reg, last_pseudo_reg; + static const char *const stap_register_prefixes[] = { "%", NULL }; + static const char *const stap_register_indirection_prefixes[] = { "(", +@@ -2901,6 +3036,14 @@ s390_gdbarch_init (struct gdbarch_info i + "tr0", "tr1", "tr2", "tr3", "tr4", "tr5", "tr6", "tr7", + "tr8", "tr9", "tr10", "tr11", "tr12", "tr13", "tr14", "tr15" + }; ++ static const char *const vxrs_low[] = { ++ "v0l", "v1l", "v2l", "v3l", "v4l", "v5l", "v6l", "v7l", "v8l", ++ "v9l", "v10l", "v11l", "v12l", "v13l", "v14l", "v15l", ++ }; ++ static const char *const vxrs_high[] = { ++ "v16", "v17", "v18", "v19", "v20", "v21", "v22", "v23", "v24", ++ "v25", "v26", "v27", "v28", "v29", "v30", "v31", ++ }; + const struct tdesc_feature *feature; + int i, valid_p = 1; + +@@ -2989,6 +3132,21 @@ s390_gdbarch_init (struct gdbarch_info i + have_tdb = 1; + } + ++ /* Vector registers. */ ++ feature = tdesc_find_feature (tdesc, "org.gnu.gdb.s390.vx"); ++ if (feature) ++ { ++ for (i = 0; i < 16; i++) ++ valid_p &= tdesc_numbered_register (feature, tdesc_data, ++ S390_V0_LOWER_REGNUM + i, ++ vxrs_low[i]); ++ for (i = 0; i < 16; i++) ++ valid_p &= tdesc_numbered_register (feature, tdesc_data, ++ S390_V16_REGNUM + i, ++ vxrs_high[i]); ++ have_vx = 1; ++ } ++ + if (!valid_p) + { + tdesc_data_cleanup (tdesc_data); +@@ -3058,6 +3216,7 @@ s390_gdbarch_init (struct gdbarch_info i + set_tdesc_pseudo_register_reggroup_p (gdbarch, + s390_pseudo_register_reggroup_p); + tdesc_use_registers (gdbarch, tdesc, tdesc_data); ++ set_gdbarch_register_name (gdbarch, s390_register_name); + + /* Assign pseudo register numbers. */ + first_pseudo_reg = gdbarch_num_regs (gdbarch); +@@ -3068,6 +3227,12 @@ s390_gdbarch_init (struct gdbarch_info i + tdep->gpr_full_regnum = last_pseudo_reg; + last_pseudo_reg += 16; + } ++ tdep->v0_full_regnum = -1; ++ if (have_vx) ++ { ++ tdep->v0_full_regnum = last_pseudo_reg; ++ last_pseudo_reg += 16; ++ } + tdep->pc_regnum = last_pseudo_reg++; + tdep->cc_regnum = last_pseudo_reg++; + set_gdbarch_pc_regnum (gdbarch, tdep->pc_regnum); +@@ -3173,8 +3338,12 @@ _initialize_s390_tdep (void) + initialize_tdesc_s390_linux64v1 (); + initialize_tdesc_s390_linux64v2 (); + initialize_tdesc_s390_te_linux64 (); ++ initialize_tdesc_s390_vx_linux64 (); ++ initialize_tdesc_s390_tevx_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 (); + } +Index: gdb-7.9.1/gdb/s390-linux-tdep.h +=================================================================== +--- gdb-7.9.1.orig/gdb/s390-linux-tdep.h 2015-07-10 16:18:29.000000000 +0200 ++++ gdb-7.9.1/gdb/s390-linux-tdep.h 2015-07-10 16:18:36.000000000 +0200 +@@ -29,6 +29,10 @@ + #define HWCAP_S390_TE 1024 + #endif + ++#ifndef HWCAP_S390_VX ++#define HWCAP_S390_VX 2048 ++#endif ++ + /* Register information. */ + + /* Program Status Word. */ +@@ -129,8 +133,41 @@ + #define S390_TDB_R13_REGNUM 87 + #define S390_TDB_R14_REGNUM 88 + #define S390_TDB_R15_REGNUM 89 ++/* Vector registers. */ ++#define S390_V0_LOWER_REGNUM 90 ++#define S390_V1_LOWER_REGNUM 91 ++#define S390_V2_LOWER_REGNUM 92 ++#define S390_V3_LOWER_REGNUM 93 ++#define S390_V4_LOWER_REGNUM 94 ++#define S390_V5_LOWER_REGNUM 95 ++#define S390_V6_LOWER_REGNUM 96 ++#define S390_V7_LOWER_REGNUM 97 ++#define S390_V8_LOWER_REGNUM 98 ++#define S390_V9_LOWER_REGNUM 99 ++#define S390_V10_LOWER_REGNUM 100 ++#define S390_V11_LOWER_REGNUM 101 ++#define S390_V12_LOWER_REGNUM 102 ++#define S390_V13_LOWER_REGNUM 103 ++#define S390_V14_LOWER_REGNUM 104 ++#define S390_V15_LOWER_REGNUM 105 ++#define S390_V16_REGNUM 106 ++#define S390_V17_REGNUM 107 ++#define S390_V18_REGNUM 108 ++#define S390_V19_REGNUM 109 ++#define S390_V20_REGNUM 110 ++#define S390_V21_REGNUM 111 ++#define S390_V22_REGNUM 112 ++#define S390_V23_REGNUM 113 ++#define S390_V24_REGNUM 114 ++#define S390_V25_REGNUM 115 ++#define S390_V26_REGNUM 116 ++#define S390_V27_REGNUM 117 ++#define S390_V28_REGNUM 118 ++#define S390_V29_REGNUM 119 ++#define S390_V30_REGNUM 120 ++#define S390_V31_REGNUM 121 + /* Total. */ +-#define S390_NUM_REGS 90 ++#define S390_NUM_REGS 122 + + /* Special register usage. */ + #define S390_SP_REGNUM S390_R15_REGNUM +@@ -159,6 +196,8 @@ extern const struct regset s390x_last_br + extern const struct regset s390_system_call_regset; + 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; + + /* GNU/Linux target descriptions. */ + extern struct target_desc *tdesc_s390_linux32; +@@ -168,9 +207,13 @@ extern struct target_desc *tdesc_s390_li + extern struct target_desc *tdesc_s390_linux64v1; + 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_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; + + #endif diff --git a/0003-S390-Add-vector-register-support-to-gdbserver.patch b/0003-S390-Add-vector-register-support-to-gdbserver.patch new file mode 100644 index 0000000..fcbc11f --- /dev/null +++ b/0003-S390-Add-vector-register-support-to-gdbserver.patch @@ -0,0 +1,293 @@ +Part of fate#318039 + +From bf2d68ab8c9da89a7caec2abdd2cc27c607f4a04 Mon Sep 17 00:00:00 2001 +From: Andreas Arnez +Date: Mon, 2 Mar 2015 10:57:40 +0100 +Subject: [PATCH] S390: Add vector register support to gdbserver + +On S/390 targets with vector registers, enable gdbserver to advertise +and handle the feature "org.gnu.gdb.s390.vx". + +gdb/gdbserver/ChangeLog: + + * Makefile.in (s390-vx-linux64.c, s390-tevx-linux64.c) + (s390x-vx-linux64.c, s390x-tevx-linux64.c): New rules. + (clean): Add "rm -f" for above C files. + * configure.srv (srv_regobj): Add s390-vx-linux64.o, + s390-tevx-linux64.o, s390x-vx-linux64.o, and s390x-tevx-linux64.o. + (srv_xmlfiles): Add s390-vx-linux64.xml, s390-tevx-linux64.xml, + s390x-vx-linux64.xml, s390x-tevx-linux64.xml, and s390-vx.xml. + * linux-s390-low.c (HWCAP_S390_VX): New macro. + (init_registers_s390_vx_linux64, init_registers_s390_tevx_linux64) + (init_registers_s390x_vx_linux64) + (init_registers_s390x_tevx_linux64) + (tdesc_s390_vx_linux64, tdesc_s390_tevx_linux64) + (tdesc_s390x_vx_linux64, tdesc_s390x_tevx_linux64): New extern + declarations. + (s390_fill_vxrs_low, s390_store_vxrs_low, s390_fill_vxrs_high) + (s390_store_vxrs_high): New functions. + (s390_regsets): Add entries for NT_S390_VXRS_LOW and + NT_S390_VXRS_HIGH. + (s390_arch_setup): Add logic for selecting one of the new target + descriptions. Activate the new vector regsets if applicable. + (initialize_low_arch): Also invoke init_registers_s390_vx_linux64, + init_registers_s390_tevx_linux64, init_registers_s390x_vx_linux64, + and init_registers_s390x_tevx_linux64. +--- + gdb/gdbserver/ChangeLog | 26 ++++++++++++ + gdb/gdbserver/Makefile.in | 12 +++++- + gdb/gdbserver/configure.srv | 9 ++++ + gdb/gdbserver/linux-s390-low.c | 94 ++++++++++++++++++++++++++++++++++++++++-- + 4 files changed, 137 insertions(+), 4 deletions(-) + +Index: gdb-7.9.1/gdb/gdbserver/Makefile.in +=================================================================== +--- gdb-7.9.1.orig/gdb/gdbserver/Makefile.in 2015-07-10 16:18:29.000000000 +0200 ++++ gdb-7.9.1/gdb/gdbserver/Makefile.in 2015-07-10 16:19:13.000000000 +0200 +@@ -356,7 +356,9 @@ clean: + rm -f s390-linux32.c s390-linux64.c s390x-linux64.c + rm -f s390-linux32v1.c s390-linux32v2.c s390-linux64v1.c + rm -f s390-linux64v2.c s390x-linux64v1.c s390x-linux64v2.c +- rm -f s390-te-linux32.c s390-te-linux64.c ++ rm -f s390-te-linux64.c s390x-te-linux64.c ++ rm -f s390-vx-linux64.c s390x-vx-linux64.c ++ rm -f s390-tevx-linux64.c s390x-tevx-linux64.c + rm -f tic6x-c64xp-linux.c tic6x-c64x-linux.c tic6x-c62x-linux.c + rm -f xml-builtin.c stamp-xml + rm -f i386-avx.c i386-avx-linux.c +@@ -684,6 +686,10 @@ s390-linux64v2.c : $(srcdir)/../regforma + $(SHELL) $(regdat_sh) $(srcdir)/../regformats/s390-linux64v2.dat s390-linux64v2.c + s390-te-linux64.c : $(srcdir)/../regformats/s390-te-linux64.dat $(regdat_sh) + $(SHELL) $(regdat_sh) $(srcdir)/../regformats/s390-te-linux64.dat s390-te-linux64.c ++s390-vx-linux64.c : $(srcdir)/../regformats/s390-vx-linux64.dat $(regdat_sh) ++ $(SHELL) $(regdat_sh) $(srcdir)/../regformats/s390-vx-linux64.dat s390-vx-linux64.c ++s390-tevx-linux64.c : $(srcdir)/../regformats/s390-tevx-linux64.dat $(regdat_sh) ++ $(SHELL) $(regdat_sh) $(srcdir)/../regformats/s390-tevx-linux64.dat s390-tevx-linux64.c + s390x-linux64.c : $(srcdir)/../regformats/s390x-linux64.dat $(regdat_sh) + $(SHELL) $(regdat_sh) $(srcdir)/../regformats/s390x-linux64.dat s390x-linux64.c + s390x-linux64v1.c : $(srcdir)/../regformats/s390x-linux64v1.dat $(regdat_sh) +@@ -692,6 +698,10 @@ s390x-linux64v2.c : $(srcdir)/../regform + $(SHELL) $(regdat_sh) $(srcdir)/../regformats/s390x-linux64v2.dat s390x-linux64v2.c + s390x-te-linux64.c : $(srcdir)/../regformats/s390x-te-linux64.dat $(regdat_sh) + $(SHELL) $(regdat_sh) $(srcdir)/../regformats/s390x-te-linux64.dat s390x-te-linux64.c ++s390x-vx-linux64.c : $(srcdir)/../regformats/s390x-vx-linux64.dat $(regdat_sh) ++ $(SHELL) $(regdat_sh) $(srcdir)/../regformats/s390x-vx-linux64.dat s390x-vx-linux64.c ++s390x-tevx-linux64.c : $(srcdir)/../regformats/s390x-tevx-linux64.dat $(regdat_sh) ++ $(SHELL) $(regdat_sh) $(srcdir)/../regformats/s390x-tevx-linux64.dat s390x-tevx-linux64.c + + tic6x-c64xp-linux.c : $(srcdir)/../regformats/tic6x-c64xp-linux.dat $(regdat_sh) + $(SHELL) $(regdat_sh) $(srcdir)/../regformats/tic6x-c64xp-linux.dat tic6x-c64xp-linux.c +Index: gdb-7.9.1/gdb/gdbserver/configure.srv +=================================================================== +--- gdb-7.9.1.orig/gdb/gdbserver/configure.srv 2015-07-10 16:18:29.000000000 +0200 ++++ gdb-7.9.1/gdb/gdbserver/configure.srv 2015-07-10 16:19:13.000000000 +0200 +@@ -260,10 +260,14 @@ case "${target}" in + srv_regobj="${srv_regobj} s390-linux64v1.o" + srv_regobj="${srv_regobj} s390-linux64v2.o" + 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} 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_tgtobj="$srv_linux_obj linux-s390-low.o" + srv_xmlfiles="s390-linux32.xml" + srv_xmlfiles="${srv_xmlfiles} s390-linux32v1.xml" +@@ -272,16 +276,21 @@ case "${target}" in + srv_xmlfiles="${srv_xmlfiles} s390-linux64v1.xml" + srv_xmlfiles="${srv_xmlfiles} s390-linux64v2.xml" + 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} 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} s390-core32.xml" + srv_xmlfiles="${srv_xmlfiles} s390-core64.xml" + srv_xmlfiles="${srv_xmlfiles} s390x-core64.xml" + srv_xmlfiles="${srv_xmlfiles} s390-acr.xml" + srv_xmlfiles="${srv_xmlfiles} s390-fpr.xml" + srv_xmlfiles="${srv_xmlfiles} s390-tdb.xml" ++ srv_xmlfiles="${srv_xmlfiles} s390-vx.xml" + srv_linux_usrregs=yes + srv_linux_regsets=yes + srv_linux_thread_db=yes +Index: gdb-7.9.1/gdb/gdbserver/linux-s390-low.c +=================================================================== +--- gdb-7.9.1.orig/gdb/gdbserver/linux-s390-low.c 2015-07-10 16:18:29.000000000 +0200 ++++ gdb-7.9.1/gdb/gdbserver/linux-s390-low.c 2015-07-10 16:19:13.000000000 +0200 +@@ -36,6 +36,10 @@ + #define HWCAP_S390_TE 1024 + #endif + ++#ifndef HWCAP_S390_VX ++#define HWCAP_S390_VX 2048 ++#endif ++ + #ifndef PTRACE_GETREGSET + #define PTRACE_GETREGSET 0x4204 + #endif +@@ -72,6 +76,14 @@ extern const struct target_desc *tdesc_s + void init_registers_s390_te_linux64 (void); + extern const struct target_desc *tdesc_s390_te_linux64; + ++/* Defined in auto-generated file s390-vx-linux64.c. */ ++void init_registers_s390_vx_linux64 (void); ++extern const struct target_desc *tdesc_s390_vx_linux64; ++ ++/* Defined in auto-generated file s390-tevx-linux64.c. */ ++void init_registers_s390_tevx_linux64 (void); ++extern const struct target_desc *tdesc_s390_tevx_linux64; ++ + /* Defined in auto-generated file s390x-linux64.c. */ + void init_registers_s390x_linux64 (void); + extern const struct target_desc *tdesc_s390x_linux64; +@@ -88,6 +100,14 @@ extern const struct target_desc *tdesc_s + void init_registers_s390x_te_linux64 (void); + extern const struct target_desc *tdesc_s390x_te_linux64; + ++/* Defined in auto-generated file s390x-vx-linux64.c. */ ++void init_registers_s390x_vx_linux64 (void); ++extern const struct target_desc *tdesc_s390x_vx_linux64; ++ ++/* Defined in auto-generated file s390x-tevx-linux64.c. */ ++void init_registers_s390x_tevx_linux64 (void); ++extern const struct target_desc *tdesc_s390x_tevx_linux64; ++ + #define s390_num_regs 52 + + static int s390_regmap[] = { +@@ -324,6 +344,46 @@ s390_store_tdb (struct regcache *regcach + supply_register (regcache, tr0 + i, (const char *) buf + 8 * (16 + i)); + } + ++static void ++s390_fill_vxrs_low (struct regcache *regcache, void *buf) ++{ ++ int v0 = find_regno (regcache->tdesc, "v0l"); ++ int i; ++ ++ for (i = 0; i < 16; i++) ++ collect_register (regcache, v0 + i, (char *) buf + 8 * i); ++} ++ ++static void ++s390_store_vxrs_low (struct regcache *regcache, const void *buf) ++{ ++ int v0 = find_regno (regcache->tdesc, "v0l"); ++ int i; ++ ++ for (i = 0; i < 16; i++) ++ supply_register (regcache, v0 + i, (const char *) buf + 8 * i); ++} ++ ++static void ++s390_fill_vxrs_high (struct regcache *regcache, void *buf) ++{ ++ int v16 = find_regno (regcache->tdesc, "v16"); ++ int i; ++ ++ for (i = 0; i < 16; i++) ++ collect_register (regcache, v16 + i, (char *) buf + 16 * i); ++} ++ ++static void ++s390_store_vxrs_high (struct regcache *regcache, const void *buf) ++{ ++ int v16 = find_regno (regcache->tdesc, "v16"); ++ int i; ++ ++ for (i = 0; i < 16; i++) ++ supply_register (regcache, v16 + i, (const char *) buf + 16 * i); ++} ++ + static struct regset_info s390_regsets[] = { + { 0, 0, 0, 0, GENERAL_REGS, s390_fill_gregset, NULL }, + /* Last break address is read-only; no fill function. */ +@@ -334,6 +394,10 @@ static struct regset_info s390_regsets[] + /* TDB is read-only. */ + { PTRACE_GETREGSET, -1, NT_S390_TDB, 0, EXTENDED_REGS, + NULL, s390_store_tdb }, ++ { PTRACE_GETREGSET, PTRACE_SETREGSET, NT_S390_VXRS_LOW, 0, ++ 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 }, + { 0, 0, 0, -1, -1, NULL, NULL } + }; + +@@ -439,6 +503,8 @@ s390_arch_setup (void) + int have_regset_system_call + = s390_check_regset (pid, NT_S390_SYSTEM_CALL, 4); + 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); + + /* Assume 31-bit inferior process. */ + if (have_regset_system_call) +@@ -464,8 +530,14 @@ s390_arch_setup (void) + if (have_regset_tdb) + have_regset_tdb = + (s390_get_hwcap (tdesc_s390x_linux64v2) & HWCAP_S390_TE) != 0; +- +- if (have_regset_tdb) ++ if (have_regset_vxrs) ++ have_regset_vxrs = ++ (s390_get_hwcap (tdesc_s390x_linux64v2) & HWCAP_S390_VX) != 0; ++ ++ if (have_regset_vxrs) ++ tdesc = (have_regset_tdb ? tdesc_s390x_tevx_linux64 : ++ tdesc_s390x_vx_linux64); ++ else if (have_regset_tdb) + tdesc = tdesc_s390x_te_linux64; + else if (have_regset_system_call) + tdesc = tdesc_s390x_linux64v2; +@@ -482,8 +554,13 @@ s390_arch_setup (void) + have_hwcap_s390_high_gprs = 1; + if (have_regset_tdb) + 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_tdb) ++ if (have_regset_vxrs) ++ tdesc = (have_regset_tdb ? tdesc_s390_tevx_linux64 : ++ tdesc_s390_vx_linux64); ++ else if (have_regset_tdb) + tdesc = tdesc_s390_te_linux64; + else if (have_regset_system_call) + tdesc = tdesc_s390_linux64v2; +@@ -508,6 +585,13 @@ s390_arch_setup (void) + break; + case NT_S390_TDB: + regset->size = have_regset_tdb ? 256 : 0; ++ break; ++ case NT_S390_VXRS_LOW: ++ regset->size = have_regset_vxrs ? 128 : 0; ++ break; ++ case NT_S390_VXRS_HIGH: ++ regset->size = have_regset_vxrs ? 256 : 0; ++ break; + default: + break; + } +@@ -615,10 +699,14 @@ initialize_low_arch (void) + init_registers_s390_linux64v1 (); + init_registers_s390_linux64v2 (); + init_registers_s390_te_linux64 (); ++ init_registers_s390_vx_linux64 (); ++ init_registers_s390_tevx_linux64 (); + init_registers_s390x_linux64 (); + init_registers_s390x_linux64v1 (); + init_registers_s390x_linux64v2 (); + init_registers_s390x_te_linux64 (); ++ init_registers_s390x_vx_linux64 (); ++ init_registers_s390x_tevx_linux64 (); + + initialize_regsets_info (&s390_regsets_info); + #ifdef __s390x__ diff --git a/0004-S390-Vector-register-test-case.patch b/0004-S390-Vector-register-test-case.patch new file mode 100644 index 0000000..cbd6bcd --- /dev/null +++ b/0004-S390-Vector-register-test-case.patch @@ -0,0 +1,334 @@ +Part of fate#318039 + +From 4fa5d7b436815f58688ec9245f24fc83263364b9 Mon Sep 17 00:00:00 2001 +From: Andreas Arnez +Date: Mon, 2 Mar 2015 10:57:40 +0100 +Subject: [PATCH] S390: Vector register test case + +Add a test case for S/390 vector registers support. + +gdb/testsuite/ChangeLog: + + * gdb.arch/s390-vregs.exp: New test. + * gdb.arch/s390-vregs.S: New file. +--- + gdb/testsuite/ChangeLog | 5 + + gdb/testsuite/gdb.arch/s390-vregs.S | 96 ++++++++++++++++ + gdb/testsuite/gdb.arch/s390-vregs.exp | 202 ++++++++++++++++++++++++++++++++++ + 3 files changed, 303 insertions(+) + create mode 100644 gdb/testsuite/gdb.arch/s390-vregs.S + create mode 100644 gdb/testsuite/gdb.arch/s390-vregs.exp + +diff --git a/gdb/testsuite/gdb.arch/s390-vregs.S b/gdb/testsuite/gdb.arch/s390-vregs.S +new file mode 100644 +index 0000000..4b48a83 +--- /dev/null ++++ b/gdb/testsuite/gdb.arch/s390-vregs.S +@@ -0,0 +1,96 @@ ++/* Copyright 2015 Free Software Foundation, Inc. ++ ++ This file is part of GDB. ++ ++ This program is free software; you can redistribute it and/or modify ++ it under the terms of the GNU General Public License as published by ++ the Free Software Foundation; either version 3 of the License, or ++ (at your option) any later version. ++ ++ This program is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ GNU General Public License for more details. ++ ++ You should have received a copy of the GNU General Public License ++ along with this program. If not, see . */ ++ ++ .text ++ ++ /* 'check_vx': Yield SIGILL unless vector support is ++ available. Have a "pit stop" breakpoint here. */ ++ ++ .align 8 ++ .type check_vx, @function ++check_vx: ++ .cfi_startproc ++ /* vlr %v0,%v0 */ ++ .byte 0xe7,0x00,0x00,0x00,0x00,0x56 ++ br %r14 ++ .cfi_endproc ++ .size check_vx, .-check_vx ++ ++ ++ /* 'store_vrs': Store vector registers in save_area. */ ++ ++ .align 8 ++ .type store_vrs, @function ++store_vrs: ++ .cfi_startproc ++ larl %r1,save_area ++ /* vstm %v0,%v15,0(%r1) */ ++ .byte 0xe7,0x0f,0x10,0x00,0x00,0x3e ++ /* vstm %v16,%v31,256(%r1) */ ++ .byte 0xe7,0x0f,0x11,0x00,0x0c,0x3e ++ br %r14 ++ .cfi_endproc ++ .size store_vrs, .-store_vrs ++ ++ ++ /* 'change_vrs': Manipulate vector registers according to a ++ simple algorithm. */ ++ ++ .align 8 ++ .type change_vrs, @function ++change_vrs: ++ .cfi_startproc ++ lghi %r1,16 ++ lghi %r3,0xff ++1: exrl %r3,2f ++ exrl %r3,1f ++ aghi %r3,-0x11 ++ brctg %r1,1b ++ br %r14 ++ .cfi_endproc ++ /* vmlf %v0,%v0,%v0 */ ++1: .byte 0xe7,0x00,0x00,0x00,0x20,0xa2 ++ /* vmlf %v16,%v16,%v0 */ ++2: .byte 0xe7,0x00,0x00,0x00,0x2c,0xa2 ++ ++ ++ /* 'main': Perform actions according to test case logic. ++ Invoke check_vx whenever a pit stop is required. */ ++ ++ .section .text.startup,"ax",@progbits ++ .align 8 ++.globl main ++ .type main, @function ++main: ++ .cfi_startproc ++ stmg %r14,%r15,112(%r15) ++ aghi %r15,-160 ++ bras %r14,check_vx ++ bras %r14,store_vrs ++ bras %r14,check_vx ++ bras %r14,change_vrs ++ bras %r14,check_vx ++ lmg %r14,%r15,272(%r15) ++ lghi %r2,0 ++ br %r14 ++ .cfi_endproc ++ .size main, .-main ++ ++ .local save_area ++ .comm save_area,512,16 ++ ++ .section .note.GNU-stack,"",@progbits +diff --git a/gdb/testsuite/gdb.arch/s390-vregs.exp b/gdb/testsuite/gdb.arch/s390-vregs.exp +new file mode 100644 +index 0000000..8333c32 +--- /dev/null ++++ b/gdb/testsuite/gdb.arch/s390-vregs.exp +@@ -0,0 +1,202 @@ ++# Copyright 2015 Free Software Foundation, Inc. ++ ++# This program is free software; you can redistribute it and/or modify ++# it under the terms of the GNU General Public License as published by ++# the Free Software Foundation; either version 3 of the License, or ++# (at your option) any later version. ++# ++# This program is distributed in the hope that it will be useful, ++# but WITHOUT ANY WARRANTY; without even the implied warranty of ++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++# GNU General Public License for more details. ++# ++# You should have received a copy of the GNU General Public License ++# along with this program. If not, see . ++ ++# Test vector register access for s390 platforms. ++ ++if { ![istarget s390-*-*] && ![istarget s390x-*-* ] } { ++ verbose "Skipping s390 vector register tests." ++ return ++} ++ ++standard_testfile .S ++ ++if [isnative] { ++ # Create a temporary directory, to take a core dump there later. ++ set coredir [standard_output_file ${testfile}.d] ++ remote_exec build "rm -rf $coredir" ++ remote_exec build "mkdir $coredir" ++} ++ ++if { [prepare_for_testing ${testfile}.exp $testfile $srcfile] } { ++ return -1 ++} ++ ++if ![runto_main] { ++ untested "could not run to main" ++ return -1 ++} ++ ++# Run to the first vector instruction and step it. If the inferior ++# doesn't crash, we have vector support. ++ ++gdb_breakpoint "check_vx" ++gdb_continue_to_breakpoint "first vector insn" ++set before_pc 0 ++gdb_test_multiple "x/i \$pc" "get PC at vector insn" { ++ -re "(0x\\S+)\\s+\\S+\\s+vlr\\s+.*$gdb_prompt $" { ++ set before_pc $expect_out(1,string) ++ } ++} ++ ++gdb_test_multiple "stepi" "check for vector support" { ++ -re "Program received signal SIGILL,.*\r\n$gdb_prompt $" { ++ unsupported "no vector support." ++ return ++ } ++ -re "\[0-9\]+.*\r\n$gdb_prompt $" { ++ pass "vector support available" ++ } ++ -re "$gdb_prompt $" { ++ fail "no vector support (unknown error)" ++ return ++ } ++} ++ ++# Has the PC advanced by the expected amount? The kernel may do ++# something special for the first vector insn in the process. ++ ++set after_pc 0 ++gdb_test_multiple "x/i \$pc" "get PC after vector insn" { ++ -re "(0x\\S+)\\s+.*$gdb_prompt $" { ++ set after_pc $expect_out(1,string) ++ } ++} ++ ++if [expr $before_pc + 6 != $after_pc] { ++ fail "stepping first vector insn" ++} ++ ++# Lift the core file limit, if possible, and change into the temporary ++# directory. ++ ++if { $coredir != "" } { ++ gdb_test {print setrlimit (4, &(unsigned long [2]){~0UL, ~0UL})} \ ++ " = .*" "setrlimit" ++ gdb_test "print chdir (\"${coredir}\")" " = 0" "chdir" ++} ++ ++# Initialize all vector registers with GDB "set" commands, using ++# distinct values. Handle left and right halves separately, in ++# pseudo-random order. ++ ++set a_high 1 ++set a_low 2 ++set b_high 3 ++set b_low 5 ++ ++set a [expr ($a_high << 32) | $a_low] ++set b [expr ($b_high << 32) | $b_low] ++ ++for {set j 0} {$j < 32} {incr j 1} { ++ set i [expr 17 * $j % 32] ++ gdb_test_no_output \ ++ "set \$v$i.v2_int64\[0\] = [expr $a * ($i + 1)]" \ ++ "set v$i left" ++ set i [expr 19 * (31 - $j) % 32] ++ gdb_test_no_output \ ++ "set \$v$i.v2_int64\[1\] = [expr $b * (32 - $i)]" \ ++ "set v$i right" ++} ++ ++# Verify a vector register's union members. ++ ++gdb_test "info register v0 v31" \ ++ "v4_float .* v2_double .* v16_int8 .* v8_int16 .* v4_int32 .* v2_int64 .* uint128\ ++ .*v4_float .* v2_double .* v16_int8 .* v8_int16 .* v4_int32 .* v2_int64 .* uint128 .*" ++ ++# Let the inferior store all vector registers in a buffer, then dump ++# the buffer and check it. ++ ++gdb_continue_to_breakpoint "store vrs" ++set vregs [capture_command_output "x/64xg &save_area" ""] ++ ++set i 0 ++foreach {- left right} [regexp -all -inline -line {^.*:\s+(\w+)\s+(\w+)} $vregs] { ++ if [expr $left != $a * ($i + 1) || $right != $b * (32 - $i)] { ++ fail "verify \$v$i after set" ++ } ++ if { $i < 16 } { ++ # Check that the FP register was updated accordingly. ++ gdb_test "info register f$i" "raw ${left}.*" ++ } ++ incr i 1 ++} ++ ++if { $i != 32 } { ++ fail "dump save area (bad output)" ++} ++ ++# Let the inferior change all VRs according to a simple algorithm, ++# then print all VRs and compare their values with our result of the ++# same algorithm. ++ ++gdb_continue_to_breakpoint "change vrs" ++set vregs [capture_command_output "info registers vector" ""] ++ ++set j 1 ++foreach {- r i val} [regexp -all -inline -line \ ++ {^(\D*)(\d+)\s+.*?uint128 = 0x([0-9a-f]+?)} $vregs] { ++ if { $r ne "v" } { ++ fail "info registers vector: bad line $j" ++ } elseif { $val ne [format %08x%08x%08x%08x \ ++ [expr $a_high * ($i + 1) * $a_high ] \ ++ [expr $a_low * ($i + 1) * $a_low ] \ ++ [expr $b_high * (32 - $i) * $b_high * 32] \ ++ [expr $b_low * (32 - $i) * $b_low * 32] ] } { ++ fail "compare \$v$i" ++ } ++ incr j 1 ++} ++ ++if { $j != 33 } { ++ fail "info registers vector" ++} ++ ++if { $coredir == "" } { ++ return ++} ++ ++# Take a core dump. ++ ++gdb_test "signal SIGABRT" "Program terminated with signal SIGABRT, .*" ++gdb_exit ++ ++# Find the core file and rename it (avoid accumulating core files). ++ ++set cores [glob -nocomplain -directory $coredir *core*] ++if {[llength $cores] != 1} { ++ untested "core file not found" ++ remote_exec build "rm -rf $coredir" ++ return -1 ++} ++set destcore [standard_output_file ${testfile}.core] ++remote_exec build "mv [file join $coredir [lindex $cores 0]] $destcore" ++remote_exec build "rm -rf $coredir" ++ ++# Restart gdb and load the core file. Compare the VRs. ++ ++clean_restart ${testfile} ++ ++with_test_prefix "core" { ++ set core_loaded [gdb_core_cmd $destcore "load"] ++ if { $core_loaded != -1 } { ++ set vregs_from_core [capture_command_output "info registers vector" ""] ++ if { $vregs_from_core eq $vregs } { ++ pass "compare vector registers" ++ } else { ++ fail "vector registers mismatch" ++ } ++ } ++} +-- +1.8.1.4 + diff --git a/0005-S390-Name-invisible-registers-with-the-empty-string-.patch b/0005-S390-Name-invisible-registers-with-the-empty-string-.patch new file mode 100644 index 0000000..f2f2cb1 --- /dev/null +++ b/0005-S390-Name-invisible-registers-with-the-empty-string-.patch @@ -0,0 +1,47 @@ +Part of fate#318039 + +From 87de11c05253566abb04479a4842cc934d0c822e Mon Sep 17 00:00:00 2001 +From: Andreas Arnez +Date: Wed, 4 Mar 2015 10:40:41 +0100 +Subject: [PATCH] S390: Name "invisible" registers with the empty string + instead of NULL + +When adding vector register support to GDB, s390_register_name() was +added to suppress the right halves of the first 16 vector registers. +However, that function returned NULL instead of an empty string in such +a case. This leads to an incomplete list of registers returned by +"complete info registers ", because completion stops at the first NULL +return value from user_reg_map_regnum_to_name(). + +gdb/ChangeLog: + + * s390-linux-tdep.c (s390_register_name): Return empty string + instead of NULL for registers that shouldn't be visible. +--- + gdb/ChangeLog | 5 +++++ + gdb/s390-linux-tdep.c | 6 +++--- + 2 files changed, 8 insertions(+), 3 deletions(-) + +Index: gdb-7.9.1/gdb/s390-linux-tdep.c +=================================================================== +--- gdb-7.9.1.orig/gdb/s390-linux-tdep.c 2015-07-10 16:18:36.000000000 +0200 ++++ gdb-7.9.1/gdb/s390-linux-tdep.c 2015-07-10 16:19:20.000000000 +0200 +@@ -263,15 +263,15 @@ regnum_is_vxr_full (struct gdbarch_tdep + && regnum <= tdep->v0_full_regnum + 15); + } + +-/* Return the name of register REGNO. Return NULL for registers that +- shouldn't be visible. */ ++/* Return the name of register REGNO. Return the empty string for ++ registers that shouldn't be visible. */ + + static const char * + s390_register_name (struct gdbarch *gdbarch, int regnum) + { + if (regnum >= S390_V0_LOWER_REGNUM + && regnum <= S390_V15_LOWER_REGNUM) +- return NULL; ++ return ""; + return tdesc_register_name (gdbarch, regnum); + } + diff --git a/gdb-6.6-buildid-locate-rpm-suse.patch b/gdb-6.6-buildid-locate-rpm-suse.patch index f81c95d..8f5d559 100644 --- a/gdb-6.6-buildid-locate-rpm-suse.patch +++ b/gdb-6.6-buildid-locate-rpm-suse.patch @@ -1,8 +1,8 @@ -Index: gdb-7.7/gdb/build-id.c +Index: gdb-7.9.1/gdb/build-id.c =================================================================== ---- gdb-7.7.orig/gdb/build-id.c 2014-02-09 17:47:19.091979560 +0100 -+++ gdb-7.7/gdb/build-id.c 2014-02-09 17:50:48.936211228 +0100 -@@ -828,9 +828,9 @@ missing_rpm_enlist (const char *filename +--- gdb-7.9.1.orig/gdb/build-id.c 2015-07-10 15:24:05.000000000 +0200 ++++ gdb-7.9.1/gdb/build-id.c 2015-07-10 15:24:51.000000000 +0200 +@@ -827,9 +827,9 @@ missing_rpm_enlist (const char *filename if (h == NULL) break; @@ -15,7 +15,7 @@ Index: gdb-7.7/gdb/build-id.c &err); if (!debuginfo) { -@@ -838,60 +838,19 @@ missing_rpm_enlist (const char *filename +@@ -837,60 +837,19 @@ missing_rpm_enlist (const char *filename err); continue; } @@ -78,16 +78,19 @@ Index: gdb-7.7/gdb/build-id.c /* Base package name for `debuginfo-install'. We do not use the `yum' command directly as the line yum --enablerepo='*debug*' install NAME-debuginfo.ARCH -@@ -976,7 +935,7 @@ missing_rpm_list_print (void) +@@ -975,10 +934,7 @@ missing_rpm_list_print (void) (int (*) (const void *, const void *)) missing_rpm_list_compar); printf_unfiltered (_("Missing separate debuginfos, use: %s"), +-#ifdef DNF_DEBUGINFO_INSTALL +- "dnf " +-#endif - "debuginfo-install"); + "zypper install"); for (array_iter = array; array_iter < array + missing_rpm_list_entries; array_iter++) { -@@ -1189,8 +1148,12 @@ debug_print_missing (const char *binary, +@@ -1191,8 +1147,12 @@ debug_print_missing (const char *binary, fprintf_unfiltered (gdb_stdlog, _("Missing separate debuginfo for %s\n"), binary); if (debug != NULL) diff --git a/gdb-6.6-buildid-locate-rpm.patch b/gdb-6.6-buildid-locate-rpm.patch index 544ed4d..161ad1e 100644 --- a/gdb-6.6-buildid-locate-rpm.patch +++ b/gdb-6.6-buildid-locate-rpm.patch @@ -1109,7 +1109,7 @@ Index: gdb-7.8.50.20141228/gdb/build-id.c #define BUILD_ID_VERBOSE_NONE 0 #define BUILD_ID_VERBOSE_FILENAMES 1 -@@ -664,8 +665,360 @@ build_id_to_filename (const struct elf_b +@@ -664,8 +665,363 @@ build_id_to_filename (const struct elf_b return result; } @@ -1409,6 +1409,9 @@ Index: gdb-7.8.50.20141228/gdb/build-id.c + (int (*) (const void *, const void *)) missing_rpm_list_compar); + + printf_unfiltered (_("Missing separate debuginfos, use: %s"), ++#ifdef DNF_DEBUGINFO_INSTALL ++ "dnf " ++#endif + "debuginfo-install"); + for (array_iter = array; array_iter < array + missing_rpm_list_entries; + array_iter++) diff --git a/gdb-7.9.1.tar.bz2 b/gdb-7.9.1.tar.bz2 new file mode 100644 index 0000000..6f4b796 --- /dev/null +++ b/gdb-7.9.1.tar.bz2 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6cb109cbbfb64a407863a15bc2a775a6bab52e5a6956a4ef3616b70cc4685b83 +size 25684304 diff --git a/gdb-7.9.tar.bz2 b/gdb-7.9.tar.bz2 deleted file mode 100644 index 3de3980..0000000 --- a/gdb-7.9.tar.bz2 +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:d04003a1438c8a0716db4070bc3f2b28ee15fb4aea279d409acf7bf722174e4a -size 25696983 diff --git a/gdb-s390-reorder-arch.diff b/gdb-s390-reorder-arch.diff new file mode 100644 index 0000000..385cc83 --- /dev/null +++ b/gdb-s390-reorder-arch.diff @@ -0,0 +1,106 @@ +Fix for bnc #936050. + +From 48cfb913ac0ad24b978514270886b807d6f2495e Mon Sep 17 00:00:00 2001 +From: Andreas Arnez +Date: Wed, 4 Mar 2015 10:40:39 +0100 +Subject: [PATCH 05/25] S390: Place "s390:31-bit" after default arch in 64-bit + arch list + +On 64-bit platforms GDB did not include "s390:31-bit" in its list of +architecture names. This patch fixes that. + +To determine the list of architecture names for S390, +gdbarch_printable_names() walks through the linked list of BFD arches +starting with the default S390 arch, which is "s390:64-bit" on 64-bit +platforms. But since "s390:64-bit" was at the end of that list, the +31-bit architecture was not reached. The patch swaps the elements of +that list on 64-bit platforms. + +bfd/ChangeLog: + + * cpu-s390.c (N): New macro. + (bfd_s390_31_arch): New. Define only if default target word size + is 64 bits. Otherwise define... + (bfd_390_64_arch): ...this. Make static. + (bfd_s390_arch): Define according to the default target word size. + Let the 'next' field point to the alternate arch. +--- + bfd/cpu-s390.c | 61 +++++++++++++++++++++++----------------------------------- + 1 file changed, 24 insertions(+), 37 deletions(-) + +diff --git a/bfd/cpu-s390.c b/bfd/cpu-s390.c +index 5fd3271..dbdec4a 100644 +--- a/bfd/cpu-s390.c ++++ b/bfd/cpu-s390.c +@@ -23,44 +23,31 @@ + #include "bfd.h" + #include "libbfd.h" + +-const bfd_arch_info_type bfd_s390_64_arch = +-{ +- 64, /* bits in a word */ +- 64, /* bits in an address */ +- 8, /* bits in a byte */ +- bfd_arch_s390, +- bfd_mach_s390_64, +- "s390", +- "s390:64-bit", +- 3, /* section alignment power */ +-#if BFD_DEFAULT_TARGET_SIZE == 64 +- TRUE, /* the default */ +-#else +- FALSE, /* the default */ +-#endif +- bfd_default_compatible, +- bfd_default_scan, +- bfd_arch_default_fill, +- NULL +-}; ++#define N(bits, number, print, is_default, next) \ ++ { \ ++ bits, /* bits in a word */ \ ++ bits, /* bits in an address */ \ ++ 8, /* bits in a byte */ \ ++ bfd_arch_s390, \ ++ number, \ ++ "s390", \ ++ print, \ ++ 3, /* section alignment power */ \ ++ is_default, \ ++ bfd_default_compatible, \ ++ bfd_default_scan, \ ++ bfd_arch_default_fill, \ ++ next \ ++ } + +-const bfd_arch_info_type bfd_s390_arch = +-{ +- 32, /* bits in a word */ +- 32, /* bits in an address */ +- 8, /* bits in a byte */ +- bfd_arch_s390, +- bfd_mach_s390_31, +- "s390", +- "s390:31-bit", +- 3, /* section alignment power */ + #if BFD_DEFAULT_TARGET_SIZE == 64 +- FALSE, /* the default */ ++static const bfd_arch_info_type bfd_s390_31_arch = ++ N (32, bfd_mach_s390_31, "s390:31-bit", FALSE, NULL); ++const bfd_arch_info_type bfd_s390_arch = ++ N (64, bfd_mach_s390_64, "s390:64-bit", TRUE, &bfd_s390_31_arch); + #else +- TRUE, /* the default */ ++static const bfd_arch_info_type bfd_s390_64_arch = ++ N (64, bfd_mach_s390_64, "s390:64-bit", FALSE, NULL); ++const bfd_arch_info_type bfd_s390_arch = ++ N (32, bfd_mach_s390_31, "s390:31-bit", TRUE, &bfd_s390_64_arch); + #endif +- bfd_default_compatible, +- bfd_default_scan, +- bfd_arch_default_fill, +- &bfd_s390_64_arch +-}; +-- +1.9.3 + diff --git a/gdb.changes b/gdb.changes index 3626981..ef279d7 100644 --- a/gdb.changes +++ b/gdb.changes @@ -1,3 +1,16 @@ +------------------------------------------------------------------- +Fri Jul 10 13:49:28 UTC 2015 - matz@suse.de + +- Rebase to gdb version 7.9.1: + fixes PR python/18299, python/18285. +- Add gdb-s390-reorder-arch.diff [bnc #936050] +- Added patches for fate#318039, s390 z13 support: + 0001-S390-Add-target-descriptions-for-vector-register-set.patch + 0002-S390-Add-vector-register-support-to-gdb.patch + 0003-S390-Add-vector-register-support-to-gdbserver.patch + 0004-S390-Vector-register-test-case.patch + 0005-S390-Name-invisible-registers-with-the-empty-string-.patch + ------------------------------------------------------------------- Thu Jul 2 13:26:29 UTC 2015 - rguenther@suse.com diff --git a/gdb.spec b/gdb.spec index 48e1f40..7d8ee6b 100644 --- a/gdb.spec +++ b/gdb.spec @@ -1,7 +1,7 @@ # # spec file for package gdb # -# Copyright (c) 2015 SUSE LINUX GmbH, Nuernberg, Germany. +# Copyright (c) 2015 SUSE LINUX Products GmbH, Nuernberg, Germany. # Copyright (c) 2012 RedHat # # All modifications and additions to the file contributed by third parties @@ -27,7 +27,7 @@ Name: gdb %global snap 20130731 # See timestamp of source gnulib installed into gdb/gnulib/ . %global snapgnulib 20121213 -Version: 7.9 +Version: 7.9.1 Release: 0 # The release always contains a leading reserved number, start it at 1. @@ -212,6 +212,14 @@ Patch117: gdb-rhel5-compat.patch # Upstream patch to fix gcc -Werror Patch1002: gdb-6.6-buildid-locate-rpm-suse.patch +# Upstream patch for reordering "s390:31-bit" (bnc#936050) +Patch1003: gdb-s390-reorder-arch.diff +# fate#318039 +Patch1004: 0001-S390-Add-target-descriptions-for-vector-register-set.patch +Patch1005: 0002-S390-Add-vector-register-support-to-gdb.patch +Patch1006: 0003-S390-Add-vector-register-support-to-gdbserver.patch +Patch1007: 0004-S390-Vector-register-test-case.patch +Patch1008: 0005-S390-Name-invisible-registers-with-the-empty-string-.patch BuildRequires: bison BuildRequires: flex @@ -473,6 +481,12 @@ find -name "*.info*"|xargs rm -f #Fedora patching end %patch1002 -p1 +%patch1003 -p1 +%patch1004 -p1 +%patch1005 -p1 +%patch1006 -p1 +%patch1007 -p1 +%patch1008 -p1 find -name "*.orig" | xargs rm -f ! find -name "*.rej" # Should not happen. diff --git a/patchlist.pl b/patchlist.pl index 45c5e6a..d3e2edb 100644 --- a/patchlist.pl +++ b/patchlist.pl @@ -29,7 +29,7 @@ foreach my $line (@patchliste) { } else { $count = $count + 1; - push @patchdeklarationen, "Patch$count: $patchname\n"; + push @patchdeklarationen, "Patch$count: ". (($count < 10) ? " " : (($count < 100) ? " " : "")) ."$patchname\n"; push @patchstatements, "%patch$count -p1\n"; $seenpatches{$patchname} = $count; push @patchcopy, $patchname;