From d614670f9dfdb4d0e077a15703308af6448a1bbd Mon Sep 17 00:00:00 2001 From: Jan Kratochvil Date: Oct 07 2017 14:14:55 +0000 Subject: [s390x] Backport arch14 guarded-storage register support (RH BZ 1498758). --- diff --git a/gdb-rhbz1498758-1of5.patch b/gdb-rhbz1498758-1of5.patch new file mode 100755 index 0000000..5bfff73 --- /dev/null +++ b/gdb-rhbz1498758-1of5.patch @@ -0,0 +1,46 @@ +commit 8fe09d7421db51bc13c9228547d63e6315bd6bd0 +Author: Andreas Arnez +Date: Thu Sep 21 17:45:18 2017 +0200 + + S/390: Fix Elf note swap s390_gs_bc vs. s390_gs_cb + + Fix two typos that resulted in swapping the BFD names for the core note + register sections NT_S390_GS_CB and NT_S390_GS_BC. + + bfd/ChangeLog: + + * elf.c (elfcore_grok_note): For the cases NT_S390_GS_CB and + NT_S390_GS_BC, correct the previously swapped invocations of + elfcore_grok_s390_gs_bc and elfcore_grok_s390_gs_cb. + +### a/bfd/ChangeLog +### b/bfd/ChangeLog +## -1,3 +1,9 @@ ++2017-09-21 Andreas Arnez ++ ++ * elf.c (elfcore_grok_note): For the cases NT_S390_GS_CB and ++ NT_S390_GS_BC, correct the previously swapped invocations of ++ elfcore_grok_s390_gs_bc and elfcore_grok_s390_gs_cb. ++ + 2017-09-19 Alan Modra + + PR 21441 +--- a/bfd/elf.c ++++ b/bfd/elf.c +@@ -9698,14 +9698,14 @@ elfcore_grok_note (bfd *abfd, Elf_Internal_Note *note) + case NT_S390_GS_CB: + if (note->namesz == 6 + && strcmp (note->namedata, "LINUX") == 0) +- return elfcore_grok_s390_gs_bc (abfd, note); ++ return elfcore_grok_s390_gs_cb (abfd, note); + else + return TRUE; + + case NT_S390_GS_BC: + if (note->namesz == 6 + && strcmp (note->namedata, "LINUX") == 0) +- return elfcore_grok_s390_gs_cb (abfd, note); ++ return elfcore_grok_s390_gs_bc (abfd, note); + else + return TRUE; + diff --git a/gdb-rhbz1498758-2of5.patch b/gdb-rhbz1498758-2of5.patch new file mode 100755 index 0000000..0e71e05 --- /dev/null +++ b/gdb-rhbz1498758-2of5.patch @@ -0,0 +1,816 @@ +commit 96235dc1ac3730c4e490d19db2e8287c0a40f307 +Author: Andreas Arnez +Date: Mon Sep 25 16:02:23 2017 +0200 + + S390: Add guarded-storage register definitions and tdescs + + Newer Linux kernel versions offer two new register sets in support of the + z/Architecture's guarded storage facility. This patch adds XML + descriptions and the respective autogenerated .c and .dat files for + s390/s390x targets with this feature. + + gdb/ChangeLog: + + * features/s390-gs-linux64.xml: New file. + * features/s390-gs.xml: New file. + * features/s390-gsbc.xml: New file. + * features/s390x-gs-linux64.xml: New file. + * features/Makefile (WHICH): Add s390-gs-linux64 and + s390x-gs-linux64. + (s390-gs-linux64-expedite, s390x-gs-linux64-expedite): New macros. + (XMLTOC): Add s390-gs-linux64.xml and s390x-linux64.xml. + * features/s390-gs-linux64.c: New generated file. + * features/s390x-gs-linux64.c: New file. + * regformats/s390-gs-linux64.dat: New file. + * regformats/s390x-gs-linux64.dat: New file. + +### a/gdb/ChangeLog +### b/gdb/ChangeLog +## -1,3 +1,18 @@ ++2017-09-25 Andreas Arnez ++ ++ * features/s390-gs-linux64.xml: New file. ++ * features/s390-gs.xml: New file. ++ * features/s390-gsbc.xml: New file. ++ * features/s390x-gs-linux64.xml: New file. ++ * features/Makefile (WHICH): Add s390-gs-linux64 and ++ s390x-gs-linux64. ++ (s390-gs-linux64-expedite, s390x-gs-linux64-expedite): New macros. ++ (XMLTOC): Add s390-gs-linux64.xml and s390x-linux64.xml. ++ * features/s390-gs-linux64.c: New generated file. ++ * features/s390x-gs-linux64.c: New file. ++ * regformats/s390-gs-linux64.dat: New file. ++ * regformats/s390x-gs-linux64.dat: New file. ++ + 2017-09-23 Tom Tromey + + * defs.h (make_cleanup_override_quit_handler): Don't declare. +--- a/gdb/features/Makefile ++++ b/gdb/features/Makefile +@@ -78,6 +78,7 @@ WHICH = aarch64 \ + s390-linux32v2 s390-linux64v2 s390x-linux64v2 \ + s390-te-linux64 s390x-te-linux64 s390-vx-linux64 s390x-vx-linux64 \ + s390-tevx-linux64 s390x-tevx-linux64 \ ++ s390-gs-linux64 s390x-gs-linux64 \ + tic6x-c64xp tic6x-c64x tic6x-c62x \ + tic6x-c64xp-linux tic6x-c64x-linux tic6x-c62x-linux + +@@ -105,12 +106,14 @@ s390-linux64v2-expedite = r14l,r15l,pswa + s390-te-linux64-expedite = r14l,r15l,pswa + s390-vx-linux64-expedite = r14l,r15l,pswa + s390-tevx-linux64-expedite = r14l,r15l,pswa ++s390-gs-linux64-expedite = r14,r15,pswa + s390x-linux64-expedite = r14,r15,pswa + s390x-linux64v1-expedite = r14,r15,pswa + s390x-linux64v2-expedite = r14,r15,pswa + s390x-te-linux64-expedite = r14,r15,pswa + s390x-vx-linux64-expedite = r14,r15,pswa + s390x-tevx-linux64-expedite = r14,r15,pswa ++s390x-gs-linux64-expedite = r14,r15,pswa + tic6x-c64xp-expedite = A15,PC + tic6x-c64x-expedite = A15,PC + tic6x-c62x-expedite = A15,PC +@@ -196,6 +199,8 @@ XMLTOC = \ + s390-vx-linux64.xml \ + s390x-tevx-linux64.xml \ + s390x-vx-linux64.xml \ ++ s390-gs-linux64.xml \ ++ s390x-gs-linux64.xml \ + tic6x-c62x-linux.xml \ + tic6x-c62x.xml \ + tic6x-c64x-linux.xml \ +--- /dev/null ++++ b/gdb/features/s390-gs-linux64.c +@@ -0,0 +1,198 @@ ++/* THIS FILE IS GENERATED. -*- buffer-read-only: t -*- vi:set ro: ++ Original: s390-gs-linux64.xml */ ++ ++#include "defs.h" ++#include "osabi.h" ++#include "target-descriptions.h" ++ ++struct target_desc *tdesc_s390_gs_linux64; ++static void ++initialize_tdesc_s390_gs_linux64 (void) ++{ ++ struct target_desc *result = allocate_target_description (); ++ struct tdesc_feature *feature; ++ struct tdesc_type *field_type; ++ struct tdesc_type *type; ++ ++ set_tdesc_architecture (result, bfd_scan_arch ("s390:31-bit")); ++ ++ feature = tdesc_create_feature (result, "org.gnu.gdb.s390.core"); ++ tdesc_create_reg (feature, "pswm", 0, 1, "psw", 32, "uint32"); ++ tdesc_create_reg (feature, "pswa", 1, 1, "psw", 32, "uint32"); ++ tdesc_create_reg (feature, "r0h", 2, 1, "upper", 32, "uint32"); ++ tdesc_create_reg (feature, "r0l", 3, 1, "lower", 32, "uint32"); ++ tdesc_create_reg (feature, "r1h", 4, 1, "upper", 32, "uint32"); ++ tdesc_create_reg (feature, "r1l", 5, 1, "lower", 32, "uint32"); ++ tdesc_create_reg (feature, "r2h", 6, 1, "upper", 32, "uint32"); ++ tdesc_create_reg (feature, "r2l", 7, 1, "lower", 32, "uint32"); ++ tdesc_create_reg (feature, "r3h", 8, 1, "upper", 32, "uint32"); ++ tdesc_create_reg (feature, "r3l", 9, 1, "lower", 32, "uint32"); ++ tdesc_create_reg (feature, "r4h", 10, 1, "upper", 32, "uint32"); ++ tdesc_create_reg (feature, "r4l", 11, 1, "lower", 32, "uint32"); ++ tdesc_create_reg (feature, "r5h", 12, 1, "upper", 32, "uint32"); ++ tdesc_create_reg (feature, "r5l", 13, 1, "lower", 32, "uint32"); ++ tdesc_create_reg (feature, "r6h", 14, 1, "upper", 32, "uint32"); ++ tdesc_create_reg (feature, "r6l", 15, 1, "lower", 32, "uint32"); ++ tdesc_create_reg (feature, "r7h", 16, 1, "upper", 32, "uint32"); ++ tdesc_create_reg (feature, "r7l", 17, 1, "lower", 32, "uint32"); ++ tdesc_create_reg (feature, "r8h", 18, 1, "upper", 32, "uint32"); ++ tdesc_create_reg (feature, "r8l", 19, 1, "lower", 32, "uint32"); ++ tdesc_create_reg (feature, "r9h", 20, 1, "upper", 32, "uint32"); ++ tdesc_create_reg (feature, "r9l", 21, 1, "lower", 32, "uint32"); ++ tdesc_create_reg (feature, "r10h", 22, 1, "upper", 32, "uint32"); ++ tdesc_create_reg (feature, "r10l", 23, 1, "lower", 32, "uint32"); ++ tdesc_create_reg (feature, "r11h", 24, 1, "upper", 32, "uint32"); ++ tdesc_create_reg (feature, "r11l", 25, 1, "lower", 32, "uint32"); ++ tdesc_create_reg (feature, "r12h", 26, 1, "upper", 32, "uint32"); ++ tdesc_create_reg (feature, "r12l", 27, 1, "lower", 32, "uint32"); ++ tdesc_create_reg (feature, "r13h", 28, 1, "upper", 32, "uint32"); ++ tdesc_create_reg (feature, "r13l", 29, 1, "lower", 32, "uint32"); ++ tdesc_create_reg (feature, "r14h", 30, 1, "upper", 32, "uint32"); ++ tdesc_create_reg (feature, "r14l", 31, 1, "lower", 32, "uint32"); ++ tdesc_create_reg (feature, "r15h", 32, 1, "upper", 32, "uint32"); ++ tdesc_create_reg (feature, "r15l", 33, 1, "lower", 32, "uint32"); ++ ++ feature = tdesc_create_feature (result, "org.gnu.gdb.s390.acr"); ++ tdesc_create_reg (feature, "acr0", 34, 1, "access", 32, "uint32"); ++ tdesc_create_reg (feature, "acr1", 35, 1, "access", 32, "uint32"); ++ tdesc_create_reg (feature, "acr2", 36, 1, "access", 32, "uint32"); ++ tdesc_create_reg (feature, "acr3", 37, 1, "access", 32, "uint32"); ++ tdesc_create_reg (feature, "acr4", 38, 1, "access", 32, "uint32"); ++ tdesc_create_reg (feature, "acr5", 39, 1, "access", 32, "uint32"); ++ tdesc_create_reg (feature, "acr6", 40, 1, "access", 32, "uint32"); ++ tdesc_create_reg (feature, "acr7", 41, 1, "access", 32, "uint32"); ++ tdesc_create_reg (feature, "acr8", 42, 1, "access", 32, "uint32"); ++ tdesc_create_reg (feature, "acr9", 43, 1, "access", 32, "uint32"); ++ tdesc_create_reg (feature, "acr10", 44, 1, "access", 32, "uint32"); ++ tdesc_create_reg (feature, "acr11", 45, 1, "access", 32, "uint32"); ++ tdesc_create_reg (feature, "acr12", 46, 1, "access", 32, "uint32"); ++ tdesc_create_reg (feature, "acr13", 47, 1, "access", 32, "uint32"); ++ tdesc_create_reg (feature, "acr14", 48, 1, "access", 32, "uint32"); ++ tdesc_create_reg (feature, "acr15", 49, 1, "access", 32, "uint32"); ++ ++ feature = tdesc_create_feature (result, "org.gnu.gdb.s390.fpr"); ++ tdesc_create_reg (feature, "fpc", 50, 1, "float", 32, "uint32"); ++ tdesc_create_reg (feature, "f0", 51, 1, "float", 64, "ieee_double"); ++ tdesc_create_reg (feature, "f1", 52, 1, "float", 64, "ieee_double"); ++ tdesc_create_reg (feature, "f2", 53, 1, "float", 64, "ieee_double"); ++ tdesc_create_reg (feature, "f3", 54, 1, "float", 64, "ieee_double"); ++ tdesc_create_reg (feature, "f4", 55, 1, "float", 64, "ieee_double"); ++ tdesc_create_reg (feature, "f5", 56, 1, "float", 64, "ieee_double"); ++ tdesc_create_reg (feature, "f6", 57, 1, "float", 64, "ieee_double"); ++ tdesc_create_reg (feature, "f7", 58, 1, "float", 64, "ieee_double"); ++ tdesc_create_reg (feature, "f8", 59, 1, "float", 64, "ieee_double"); ++ tdesc_create_reg (feature, "f9", 60, 1, "float", 64, "ieee_double"); ++ tdesc_create_reg (feature, "f10", 61, 1, "float", 64, "ieee_double"); ++ tdesc_create_reg (feature, "f11", 62, 1, "float", 64, "ieee_double"); ++ tdesc_create_reg (feature, "f12", 63, 1, "float", 64, "ieee_double"); ++ tdesc_create_reg (feature, "f13", 64, 1, "float", 64, "ieee_double"); ++ tdesc_create_reg (feature, "f14", 65, 1, "float", 64, "ieee_double"); ++ tdesc_create_reg (feature, "f15", 66, 1, "float", 64, "ieee_double"); ++ ++ feature = tdesc_create_feature (result, "org.gnu.gdb.s390.linux"); ++ tdesc_create_reg (feature, "orig_r2", 67, 1, "system", 32, "uint32"); ++ tdesc_create_reg (feature, "last_break", 68, 0, "system", 32, "code_ptr"); ++ tdesc_create_reg (feature, "system_call", 69, 1, "system", 32, "uint32"); ++ ++ feature = tdesc_create_feature (result, "org.gnu.gdb.s390.tdb"); ++ tdesc_create_reg (feature, "tdb0", 70, 1, "tdb", 64, "uint64"); ++ tdesc_create_reg (feature, "tac", 71, 1, "tdb", 64, "uint64"); ++ tdesc_create_reg (feature, "tct", 72, 1, "tdb", 64, "uint64"); ++ tdesc_create_reg (feature, "atia", 73, 1, "tdb", 64, "uint64"); ++ tdesc_create_reg (feature, "tr0", 74, 1, "tdb", 64, "uint64"); ++ tdesc_create_reg (feature, "tr1", 75, 1, "tdb", 64, "uint64"); ++ tdesc_create_reg (feature, "tr2", 76, 1, "tdb", 64, "uint64"); ++ tdesc_create_reg (feature, "tr3", 77, 1, "tdb", 64, "uint64"); ++ tdesc_create_reg (feature, "tr4", 78, 1, "tdb", 64, "uint64"); ++ tdesc_create_reg (feature, "tr5", 79, 1, "tdb", 64, "uint64"); ++ tdesc_create_reg (feature, "tr6", 80, 1, "tdb", 64, "uint64"); ++ tdesc_create_reg (feature, "tr7", 81, 1, "tdb", 64, "uint64"); ++ tdesc_create_reg (feature, "tr8", 82, 1, "tdb", 64, "uint64"); ++ tdesc_create_reg (feature, "tr9", 83, 1, "tdb", 64, "uint64"); ++ tdesc_create_reg (feature, "tr10", 84, 1, "tdb", 64, "uint64"); ++ tdesc_create_reg (feature, "tr11", 85, 1, "tdb", 64, "uint64"); ++ tdesc_create_reg (feature, "tr12", 86, 1, "tdb", 64, "uint64"); ++ tdesc_create_reg (feature, "tr13", 87, 1, "tdb", 64, "uint64"); ++ tdesc_create_reg (feature, "tr14", 88, 1, "tdb", 64, "uint64"); ++ tdesc_create_reg (feature, "tr15", 89, 1, "tdb", 64, "uint64"); ++ ++ feature = tdesc_create_feature (result, "org.gnu.gdb.s390.vx"); ++ field_type = tdesc_named_type (feature, "ieee_single"); ++ tdesc_create_vector (feature, "v4f", field_type, 4); ++ ++ field_type = tdesc_named_type (feature, "ieee_double"); ++ tdesc_create_vector (feature, "v2d", field_type, 2); ++ ++ field_type = tdesc_named_type (feature, "int8"); ++ tdesc_create_vector (feature, "v16i8", field_type, 16); ++ ++ field_type = tdesc_named_type (feature, "int16"); ++ tdesc_create_vector (feature, "v8i16", field_type, 8); ++ ++ field_type = tdesc_named_type (feature, "int32"); ++ tdesc_create_vector (feature, "v4i32", field_type, 4); ++ ++ field_type = tdesc_named_type (feature, "int64"); ++ tdesc_create_vector (feature, "v2i64", field_type, 2); ++ ++ type = tdesc_create_union (feature, "vec128"); ++ field_type = tdesc_named_type (feature, "v4f"); ++ tdesc_add_field (type, "v4_float", field_type); ++ field_type = tdesc_named_type (feature, "v2d"); ++ tdesc_add_field (type, "v2_double", field_type); ++ field_type = tdesc_named_type (feature, "v16i8"); ++ tdesc_add_field (type, "v16_int8", field_type); ++ field_type = tdesc_named_type (feature, "v8i16"); ++ tdesc_add_field (type, "v8_int16", field_type); ++ field_type = tdesc_named_type (feature, "v4i32"); ++ tdesc_add_field (type, "v4_int32", field_type); ++ field_type = tdesc_named_type (feature, "v2i64"); ++ tdesc_add_field (type, "v2_int64", field_type); ++ field_type = tdesc_named_type (feature, "uint128"); ++ tdesc_add_field (type, "uint128", field_type); ++ ++ tdesc_create_reg (feature, "v0l", 90, 1, NULL, 64, "uint64"); ++ tdesc_create_reg (feature, "v1l", 91, 1, NULL, 64, "uint64"); ++ tdesc_create_reg (feature, "v2l", 92, 1, NULL, 64, "uint64"); ++ tdesc_create_reg (feature, "v3l", 93, 1, NULL, 64, "uint64"); ++ tdesc_create_reg (feature, "v4l", 94, 1, NULL, 64, "uint64"); ++ tdesc_create_reg (feature, "v5l", 95, 1, NULL, 64, "uint64"); ++ tdesc_create_reg (feature, "v6l", 96, 1, NULL, 64, "uint64"); ++ tdesc_create_reg (feature, "v7l", 97, 1, NULL, 64, "uint64"); ++ tdesc_create_reg (feature, "v8l", 98, 1, NULL, 64, "uint64"); ++ tdesc_create_reg (feature, "v9l", 99, 1, NULL, 64, "uint64"); ++ tdesc_create_reg (feature, "v10l", 100, 1, NULL, 64, "uint64"); ++ tdesc_create_reg (feature, "v11l", 101, 1, NULL, 64, "uint64"); ++ tdesc_create_reg (feature, "v12l", 102, 1, NULL, 64, "uint64"); ++ tdesc_create_reg (feature, "v13l", 103, 1, NULL, 64, "uint64"); ++ tdesc_create_reg (feature, "v14l", 104, 1, NULL, 64, "uint64"); ++ tdesc_create_reg (feature, "v15l", 105, 1, NULL, 64, "uint64"); ++ tdesc_create_reg (feature, "v16", 106, 1, NULL, 128, "vec128"); ++ tdesc_create_reg (feature, "v17", 107, 1, NULL, 128, "vec128"); ++ tdesc_create_reg (feature, "v18", 108, 1, NULL, 128, "vec128"); ++ tdesc_create_reg (feature, "v19", 109, 1, NULL, 128, "vec128"); ++ tdesc_create_reg (feature, "v20", 110, 1, NULL, 128, "vec128"); ++ tdesc_create_reg (feature, "v21", 111, 1, NULL, 128, "vec128"); ++ tdesc_create_reg (feature, "v22", 112, 1, NULL, 128, "vec128"); ++ tdesc_create_reg (feature, "v23", 113, 1, NULL, 128, "vec128"); ++ tdesc_create_reg (feature, "v24", 114, 1, NULL, 128, "vec128"); ++ tdesc_create_reg (feature, "v25", 115, 1, NULL, 128, "vec128"); ++ tdesc_create_reg (feature, "v26", 116, 1, NULL, 128, "vec128"); ++ tdesc_create_reg (feature, "v27", 117, 1, NULL, 128, "vec128"); ++ tdesc_create_reg (feature, "v28", 118, 1, NULL, 128, "vec128"); ++ tdesc_create_reg (feature, "v29", 119, 1, NULL, 128, "vec128"); ++ tdesc_create_reg (feature, "v30", 120, 1, NULL, 128, "vec128"); ++ tdesc_create_reg (feature, "v31", 121, 1, NULL, 128, "vec128"); ++ ++ feature = tdesc_create_feature (result, "org.gnu.gdb.s390.gs"); ++ tdesc_create_reg (feature, "gsd", 122, 1, "gs", 64, "uint64"); ++ tdesc_create_reg (feature, "gssm", 123, 1, "gs", 64, "uint64"); ++ tdesc_create_reg (feature, "gsepla", 124, 1, "gs", 64, "data_ptr"); ++ ++ feature = tdesc_create_feature (result, "org.gnu.gdb.s390.gsbc"); ++ tdesc_create_reg (feature, "bc_gsd", 125, 1, "gs", 64, "uint64"); ++ tdesc_create_reg (feature, "bc_gssm", 126, 1, "gs", 64, "uint64"); ++ tdesc_create_reg (feature, "bc_gsepla", 127, 1, "gs", 64, "data_ptr"); ++ ++ tdesc_s390_gs_linux64 = result; ++} +--- /dev/null ++++ b/gdb/features/s390-gs-linux64.xml +@@ -0,0 +1,28 @@ ++ ++ ++ ++ ++ ++ ++ ++ s390:31-bit ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ +--- /dev/null ++++ b/gdb/features/s390-gs.xml +@@ -0,0 +1,13 @@ ++ ++ ++ ++ ++ ++ ++ ++ ++ +--- /dev/null ++++ b/gdb/features/s390-gsbc.xml +@@ -0,0 +1,13 @@ ++ ++ ++ ++ ++ ++ ++ ++ ++ +--- /dev/null ++++ b/gdb/features/s390x-gs-linux64.c +@@ -0,0 +1,182 @@ ++/* THIS FILE IS GENERATED. -*- buffer-read-only: t -*- vi:set ro: ++ Original: s390x-gs-linux64.xml */ ++ ++#include "defs.h" ++#include "osabi.h" ++#include "target-descriptions.h" ++ ++struct target_desc *tdesc_s390x_gs_linux64; ++static void ++initialize_tdesc_s390x_gs_linux64 (void) ++{ ++ struct target_desc *result = allocate_target_description (); ++ struct tdesc_feature *feature; ++ struct tdesc_type *field_type; ++ struct tdesc_type *type; ++ ++ set_tdesc_architecture (result, bfd_scan_arch ("s390:64-bit")); ++ ++ feature = tdesc_create_feature (result, "org.gnu.gdb.s390.core"); ++ tdesc_create_reg (feature, "pswm", 0, 1, "psw", 64, "uint64"); ++ tdesc_create_reg (feature, "pswa", 1, 1, "psw", 64, "uint64"); ++ tdesc_create_reg (feature, "r0", 2, 1, "general", 64, "uint64"); ++ tdesc_create_reg (feature, "r1", 3, 1, "general", 64, "uint64"); ++ tdesc_create_reg (feature, "r2", 4, 1, "general", 64, "uint64"); ++ tdesc_create_reg (feature, "r3", 5, 1, "general", 64, "uint64"); ++ tdesc_create_reg (feature, "r4", 6, 1, "general", 64, "uint64"); ++ tdesc_create_reg (feature, "r5", 7, 1, "general", 64, "uint64"); ++ tdesc_create_reg (feature, "r6", 8, 1, "general", 64, "uint64"); ++ tdesc_create_reg (feature, "r7", 9, 1, "general", 64, "uint64"); ++ tdesc_create_reg (feature, "r8", 10, 1, "general", 64, "uint64"); ++ tdesc_create_reg (feature, "r9", 11, 1, "general", 64, "uint64"); ++ tdesc_create_reg (feature, "r10", 12, 1, "general", 64, "uint64"); ++ tdesc_create_reg (feature, "r11", 13, 1, "general", 64, "uint64"); ++ tdesc_create_reg (feature, "r12", 14, 1, "general", 64, "uint64"); ++ tdesc_create_reg (feature, "r13", 15, 1, "general", 64, "uint64"); ++ tdesc_create_reg (feature, "r14", 16, 1, "general", 64, "uint64"); ++ tdesc_create_reg (feature, "r15", 17, 1, "general", 64, "uint64"); ++ ++ feature = tdesc_create_feature (result, "org.gnu.gdb.s390.acr"); ++ tdesc_create_reg (feature, "acr0", 18, 1, "access", 32, "uint32"); ++ tdesc_create_reg (feature, "acr1", 19, 1, "access", 32, "uint32"); ++ tdesc_create_reg (feature, "acr2", 20, 1, "access", 32, "uint32"); ++ tdesc_create_reg (feature, "acr3", 21, 1, "access", 32, "uint32"); ++ tdesc_create_reg (feature, "acr4", 22, 1, "access", 32, "uint32"); ++ tdesc_create_reg (feature, "acr5", 23, 1, "access", 32, "uint32"); ++ tdesc_create_reg (feature, "acr6", 24, 1, "access", 32, "uint32"); ++ tdesc_create_reg (feature, "acr7", 25, 1, "access", 32, "uint32"); ++ tdesc_create_reg (feature, "acr8", 26, 1, "access", 32, "uint32"); ++ tdesc_create_reg (feature, "acr9", 27, 1, "access", 32, "uint32"); ++ tdesc_create_reg (feature, "acr10", 28, 1, "access", 32, "uint32"); ++ tdesc_create_reg (feature, "acr11", 29, 1, "access", 32, "uint32"); ++ tdesc_create_reg (feature, "acr12", 30, 1, "access", 32, "uint32"); ++ tdesc_create_reg (feature, "acr13", 31, 1, "access", 32, "uint32"); ++ tdesc_create_reg (feature, "acr14", 32, 1, "access", 32, "uint32"); ++ tdesc_create_reg (feature, "acr15", 33, 1, "access", 32, "uint32"); ++ ++ feature = tdesc_create_feature (result, "org.gnu.gdb.s390.fpr"); ++ tdesc_create_reg (feature, "fpc", 34, 1, "float", 32, "uint32"); ++ tdesc_create_reg (feature, "f0", 35, 1, "float", 64, "ieee_double"); ++ tdesc_create_reg (feature, "f1", 36, 1, "float", 64, "ieee_double"); ++ tdesc_create_reg (feature, "f2", 37, 1, "float", 64, "ieee_double"); ++ tdesc_create_reg (feature, "f3", 38, 1, "float", 64, "ieee_double"); ++ tdesc_create_reg (feature, "f4", 39, 1, "float", 64, "ieee_double"); ++ tdesc_create_reg (feature, "f5", 40, 1, "float", 64, "ieee_double"); ++ tdesc_create_reg (feature, "f6", 41, 1, "float", 64, "ieee_double"); ++ tdesc_create_reg (feature, "f7", 42, 1, "float", 64, "ieee_double"); ++ tdesc_create_reg (feature, "f8", 43, 1, "float", 64, "ieee_double"); ++ tdesc_create_reg (feature, "f9", 44, 1, "float", 64, "ieee_double"); ++ tdesc_create_reg (feature, "f10", 45, 1, "float", 64, "ieee_double"); ++ tdesc_create_reg (feature, "f11", 46, 1, "float", 64, "ieee_double"); ++ tdesc_create_reg (feature, "f12", 47, 1, "float", 64, "ieee_double"); ++ tdesc_create_reg (feature, "f13", 48, 1, "float", 64, "ieee_double"); ++ tdesc_create_reg (feature, "f14", 49, 1, "float", 64, "ieee_double"); ++ tdesc_create_reg (feature, "f15", 50, 1, "float", 64, "ieee_double"); ++ ++ feature = tdesc_create_feature (result, "org.gnu.gdb.s390.linux"); ++ tdesc_create_reg (feature, "orig_r2", 51, 1, "system", 64, "uint64"); ++ tdesc_create_reg (feature, "last_break", 52, 0, "system", 64, "code_ptr"); ++ tdesc_create_reg (feature, "system_call", 53, 1, "system", 32, "uint32"); ++ ++ feature = tdesc_create_feature (result, "org.gnu.gdb.s390.tdb"); ++ tdesc_create_reg (feature, "tdb0", 54, 1, "tdb", 64, "uint64"); ++ tdesc_create_reg (feature, "tac", 55, 1, "tdb", 64, "uint64"); ++ tdesc_create_reg (feature, "tct", 56, 1, "tdb", 64, "uint64"); ++ tdesc_create_reg (feature, "atia", 57, 1, "tdb", 64, "uint64"); ++ tdesc_create_reg (feature, "tr0", 58, 1, "tdb", 64, "uint64"); ++ tdesc_create_reg (feature, "tr1", 59, 1, "tdb", 64, "uint64"); ++ tdesc_create_reg (feature, "tr2", 60, 1, "tdb", 64, "uint64"); ++ tdesc_create_reg (feature, "tr3", 61, 1, "tdb", 64, "uint64"); ++ tdesc_create_reg (feature, "tr4", 62, 1, "tdb", 64, "uint64"); ++ tdesc_create_reg (feature, "tr5", 63, 1, "tdb", 64, "uint64"); ++ tdesc_create_reg (feature, "tr6", 64, 1, "tdb", 64, "uint64"); ++ tdesc_create_reg (feature, "tr7", 65, 1, "tdb", 64, "uint64"); ++ tdesc_create_reg (feature, "tr8", 66, 1, "tdb", 64, "uint64"); ++ tdesc_create_reg (feature, "tr9", 67, 1, "tdb", 64, "uint64"); ++ tdesc_create_reg (feature, "tr10", 68, 1, "tdb", 64, "uint64"); ++ tdesc_create_reg (feature, "tr11", 69, 1, "tdb", 64, "uint64"); ++ tdesc_create_reg (feature, "tr12", 70, 1, "tdb", 64, "uint64"); ++ tdesc_create_reg (feature, "tr13", 71, 1, "tdb", 64, "uint64"); ++ tdesc_create_reg (feature, "tr14", 72, 1, "tdb", 64, "uint64"); ++ tdesc_create_reg (feature, "tr15", 73, 1, "tdb", 64, "uint64"); ++ ++ feature = tdesc_create_feature (result, "org.gnu.gdb.s390.vx"); ++ field_type = tdesc_named_type (feature, "ieee_single"); ++ tdesc_create_vector (feature, "v4f", field_type, 4); ++ ++ field_type = tdesc_named_type (feature, "ieee_double"); ++ tdesc_create_vector (feature, "v2d", field_type, 2); ++ ++ field_type = tdesc_named_type (feature, "int8"); ++ tdesc_create_vector (feature, "v16i8", field_type, 16); ++ ++ field_type = tdesc_named_type (feature, "int16"); ++ tdesc_create_vector (feature, "v8i16", field_type, 8); ++ ++ field_type = tdesc_named_type (feature, "int32"); ++ tdesc_create_vector (feature, "v4i32", field_type, 4); ++ ++ field_type = tdesc_named_type (feature, "int64"); ++ tdesc_create_vector (feature, "v2i64", field_type, 2); ++ ++ type = tdesc_create_union (feature, "vec128"); ++ field_type = tdesc_named_type (feature, "v4f"); ++ tdesc_add_field (type, "v4_float", field_type); ++ field_type = tdesc_named_type (feature, "v2d"); ++ tdesc_add_field (type, "v2_double", field_type); ++ field_type = tdesc_named_type (feature, "v16i8"); ++ tdesc_add_field (type, "v16_int8", field_type); ++ field_type = tdesc_named_type (feature, "v8i16"); ++ tdesc_add_field (type, "v8_int16", field_type); ++ field_type = tdesc_named_type (feature, "v4i32"); ++ tdesc_add_field (type, "v4_int32", field_type); ++ field_type = tdesc_named_type (feature, "v2i64"); ++ tdesc_add_field (type, "v2_int64", field_type); ++ field_type = tdesc_named_type (feature, "uint128"); ++ tdesc_add_field (type, "uint128", field_type); ++ ++ tdesc_create_reg (feature, "v0l", 74, 1, NULL, 64, "uint64"); ++ tdesc_create_reg (feature, "v1l", 75, 1, NULL, 64, "uint64"); ++ tdesc_create_reg (feature, "v2l", 76, 1, NULL, 64, "uint64"); ++ tdesc_create_reg (feature, "v3l", 77, 1, NULL, 64, "uint64"); ++ tdesc_create_reg (feature, "v4l", 78, 1, NULL, 64, "uint64"); ++ tdesc_create_reg (feature, "v5l", 79, 1, NULL, 64, "uint64"); ++ tdesc_create_reg (feature, "v6l", 80, 1, NULL, 64, "uint64"); ++ tdesc_create_reg (feature, "v7l", 81, 1, NULL, 64, "uint64"); ++ tdesc_create_reg (feature, "v8l", 82, 1, NULL, 64, "uint64"); ++ tdesc_create_reg (feature, "v9l", 83, 1, NULL, 64, "uint64"); ++ tdesc_create_reg (feature, "v10l", 84, 1, NULL, 64, "uint64"); ++ tdesc_create_reg (feature, "v11l", 85, 1, NULL, 64, "uint64"); ++ tdesc_create_reg (feature, "v12l", 86, 1, NULL, 64, "uint64"); ++ tdesc_create_reg (feature, "v13l", 87, 1, NULL, 64, "uint64"); ++ tdesc_create_reg (feature, "v14l", 88, 1, NULL, 64, "uint64"); ++ tdesc_create_reg (feature, "v15l", 89, 1, NULL, 64, "uint64"); ++ tdesc_create_reg (feature, "v16", 90, 1, NULL, 128, "vec128"); ++ tdesc_create_reg (feature, "v17", 91, 1, NULL, 128, "vec128"); ++ tdesc_create_reg (feature, "v18", 92, 1, NULL, 128, "vec128"); ++ tdesc_create_reg (feature, "v19", 93, 1, NULL, 128, "vec128"); ++ tdesc_create_reg (feature, "v20", 94, 1, NULL, 128, "vec128"); ++ tdesc_create_reg (feature, "v21", 95, 1, NULL, 128, "vec128"); ++ tdesc_create_reg (feature, "v22", 96, 1, NULL, 128, "vec128"); ++ tdesc_create_reg (feature, "v23", 97, 1, NULL, 128, "vec128"); ++ tdesc_create_reg (feature, "v24", 98, 1, NULL, 128, "vec128"); ++ tdesc_create_reg (feature, "v25", 99, 1, NULL, 128, "vec128"); ++ tdesc_create_reg (feature, "v26", 100, 1, NULL, 128, "vec128"); ++ tdesc_create_reg (feature, "v27", 101, 1, NULL, 128, "vec128"); ++ tdesc_create_reg (feature, "v28", 102, 1, NULL, 128, "vec128"); ++ tdesc_create_reg (feature, "v29", 103, 1, NULL, 128, "vec128"); ++ tdesc_create_reg (feature, "v30", 104, 1, NULL, 128, "vec128"); ++ tdesc_create_reg (feature, "v31", 105, 1, NULL, 128, "vec128"); ++ ++ feature = tdesc_create_feature (result, "org.gnu.gdb.s390.gs"); ++ tdesc_create_reg (feature, "gsd", 106, 1, "gs", 64, "uint64"); ++ tdesc_create_reg (feature, "gssm", 107, 1, "gs", 64, "uint64"); ++ tdesc_create_reg (feature, "gsepla", 108, 1, "gs", 64, "data_ptr"); ++ ++ feature = tdesc_create_feature (result, "org.gnu.gdb.s390.gsbc"); ++ tdesc_create_reg (feature, "bc_gsd", 109, 1, "gs", 64, "uint64"); ++ tdesc_create_reg (feature, "bc_gssm", 110, 1, "gs", 64, "uint64"); ++ tdesc_create_reg (feature, "bc_gsepla", 111, 1, "gs", 64, "data_ptr"); ++ ++ tdesc_s390x_gs_linux64 = result; ++} +--- /dev/null ++++ b/gdb/features/s390x-gs-linux64.xml +@@ -0,0 +1,27 @@ ++ ++ ++ ++ ++ ++ ++ ++ s390:64-bit ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ +--- /dev/null ++++ b/gdb/regformats/s390-gs-linux64.dat +@@ -0,0 +1,133 @@ ++# THIS FILE IS GENERATED. -*- buffer-read-only: t -*- vi :set ro: ++# Generated from: s390-gs-linux64.xml ++name:s390_gs_linux64 ++xmltarget:s390-gs-linux64.xml ++expedite:r14,r15,pswa ++32:pswm ++32:pswa ++32:r0h ++32:r0l ++32:r1h ++32:r1l ++32:r2h ++32:r2l ++32:r3h ++32:r3l ++32:r4h ++32:r4l ++32:r5h ++32:r5l ++32:r6h ++32:r6l ++32:r7h ++32:r7l ++32:r8h ++32:r8l ++32:r9h ++32:r9l ++32:r10h ++32:r10l ++32:r11h ++32:r11l ++32:r12h ++32:r12l ++32:r13h ++32:r13l ++32:r14h ++32:r14l ++32:r15h ++32:r15l ++32:acr0 ++32:acr1 ++32:acr2 ++32:acr3 ++32:acr4 ++32:acr5 ++32:acr6 ++32:acr7 ++32:acr8 ++32:acr9 ++32:acr10 ++32:acr11 ++32:acr12 ++32:acr13 ++32:acr14 ++32:acr15 ++32:fpc ++64:f0 ++64:f1 ++64:f2 ++64:f3 ++64:f4 ++64:f5 ++64:f6 ++64:f7 ++64:f8 ++64:f9 ++64:f10 ++64:f11 ++64:f12 ++64:f13 ++64:f14 ++64:f15 ++32:orig_r2 ++32:last_break ++32:system_call ++64:tdb0 ++64:tac ++64:tct ++64:atia ++64:tr0 ++64:tr1 ++64:tr2 ++64:tr3 ++64:tr4 ++64:tr5 ++64:tr6 ++64:tr7 ++64:tr8 ++64:tr9 ++64:tr10 ++64:tr11 ++64:tr12 ++64:tr13 ++64:tr14 ++64:tr15 ++64:v0l ++64:v1l ++64:v2l ++64:v3l ++64:v4l ++64:v5l ++64:v6l ++64:v7l ++64:v8l ++64:v9l ++64:v10l ++64:v11l ++64:v12l ++64:v13l ++64:v14l ++64:v15l ++128:v16 ++128:v17 ++128:v18 ++128:v19 ++128:v20 ++128:v21 ++128:v22 ++128:v23 ++128:v24 ++128:v25 ++128:v26 ++128:v27 ++128:v28 ++128:v29 ++128:v30 ++128:v31 ++64:gsd ++64:gssm ++64:gsepla ++64:bc_gsd ++64:bc_gssm ++64:bc_gsepla +--- /dev/null ++++ b/gdb/regformats/s390x-gs-linux64.dat +@@ -0,0 +1,117 @@ ++# THIS FILE IS GENERATED. -*- buffer-read-only: t -*- vi :set ro: ++# Generated from: s390x-gs-linux64.xml ++name:s390x_gs_linux64 ++xmltarget:s390x-gs-linux64.xml ++expedite:r14,r15,pswa ++64:pswm ++64:pswa ++64:r0 ++64:r1 ++64:r2 ++64:r3 ++64:r4 ++64:r5 ++64:r6 ++64:r7 ++64:r8 ++64:r9 ++64:r10 ++64:r11 ++64:r12 ++64:r13 ++64:r14 ++64:r15 ++32:acr0 ++32:acr1 ++32:acr2 ++32:acr3 ++32:acr4 ++32:acr5 ++32:acr6 ++32:acr7 ++32:acr8 ++32:acr9 ++32:acr10 ++32:acr11 ++32:acr12 ++32:acr13 ++32:acr14 ++32:acr15 ++32:fpc ++64:f0 ++64:f1 ++64:f2 ++64:f3 ++64:f4 ++64:f5 ++64:f6 ++64:f7 ++64:f8 ++64:f9 ++64:f10 ++64:f11 ++64:f12 ++64:f13 ++64:f14 ++64:f15 ++64:orig_r2 ++64:last_break ++32:system_call ++64:tdb0 ++64:tac ++64:tct ++64:atia ++64:tr0 ++64:tr1 ++64:tr2 ++64:tr3 ++64:tr4 ++64:tr5 ++64:tr6 ++64:tr7 ++64:tr8 ++64:tr9 ++64:tr10 ++64:tr11 ++64:tr12 ++64:tr13 ++64:tr14 ++64:tr15 ++64:v0l ++64:v1l ++64:v2l ++64:v3l ++64:v4l ++64:v5l ++64:v6l ++64:v7l ++64:v8l ++64:v9l ++64:v10l ++64:v11l ++64:v12l ++64:v13l ++64:v14l ++64:v15l ++128:v16 ++128:v17 ++128:v18 ++128:v19 ++128:v20 ++128:v21 ++128:v22 ++128:v23 ++128:v24 ++128:v25 ++128:v26 ++128:v27 ++128:v28 ++128:v29 ++128:v30 ++128:v31 ++64:gsd ++64:gssm ++64:gsepla ++64:bc_gsd ++64:bc_gssm ++64:bc_gsepla diff --git a/gdb-rhbz1498758-3of5.patch b/gdb-rhbz1498758-3of5.patch new file mode 100755 index 0000000..bcd76a7 --- /dev/null +++ b/gdb-rhbz1498758-3of5.patch @@ -0,0 +1,385 @@ +commit 1b63490c9173f8c9770b7885def720516aa9b9f8 +Author: Andreas Arnez +Date: Mon Sep 25 16:02:23 2017 +0200 + + S390: Add guarded-storage register support to GDB + + Recognize targets with the new guarded-storage feature and then present + the guarded-storage registers and the Linux-specific guarded-storage + broadcast control block appropriately. + + gdb/ChangeLog: + + * s390-linux-nat.c (have_regset_gs): New static variable. + (s390_linux_fetch_inferior_registers): Handle guarded-storage + control block and guarded-storage broadcast control regsets. + (s390_read_description): Detect whether the target has + guarded-storage support, return appropriate tdesc. + * s390-linux-tdep.c (features/s390-gs-linux64.c): New include. + (features/s390x-gs-linux64.c): Likewise. + (struct gdbarch_tdep) : New field. + (s390_regmap_gs, s390_regmap_gsbc, s390_gs_regset) + (s390_gsbc_regset): New variables. + (s390_iterate_over_regset_sections): Iterate over s390_gs_regset + and s390_gsbc_regset, if applicable. + (s390_core_read_description): Check whether core file was from a + target with guarded-storage support; include appropriate regsets. + (s390_gdbarch_init): Add registers for guarded-storage support. + (_initialize_s390_tdep): Initialize new target descriptions that + include registers for guarded-storage support. + * s390-linux-tdep.h (HWCAP_S390_GS, S390_GSD_REGNUM) + (S390_GSSM_REGNUM, S390_GSEPLA_REGNUM) + (S390_BC_GSD_REGNUM, S390_BC_GSSM_REGNUM): New defines. + (S390_NUM_REGS): Adjust macro definition. + (s390_gs_regset, s390_gsbc_regset, tdesc_s390_gs_linux64) + (tdesc_s390x_gs_linux64): New declarations. + +### a/gdb/ChangeLog +### b/gdb/ChangeLog +## -1,5 +1,31 @@ + 2017-09-25 Andreas Arnez + ++ * s390-linux-nat.c (have_regset_gs): New static variable. ++ (s390_linux_fetch_inferior_registers): Handle guarded-storage ++ control block and guarded-storage broadcast control regsets. ++ (s390_read_description): Detect whether the target has ++ guarded-storage support, return appropriate tdesc. ++ * s390-linux-tdep.c (features/s390-gs-linux64.c): New include. ++ (features/s390x-gs-linux64.c): Likewise. ++ (struct gdbarch_tdep) : New field. ++ (s390_regmap_gs, s390_regmap_gsbc, s390_gs_regset) ++ (s390_gsbc_regset): New variables. ++ (s390_iterate_over_regset_sections): Iterate over s390_gs_regset ++ and s390_gsbc_regset, if applicable. ++ (s390_core_read_description): Check whether core file was from a ++ target with guarded-storage support; include appropriate regsets. ++ (s390_gdbarch_init): Add registers for guarded-storage support. ++ (_initialize_s390_tdep): Initialize new target descriptions that ++ include registers for guarded-storage support. ++ * s390-linux-tdep.h (HWCAP_S390_GS, S390_GSD_REGNUM) ++ (S390_GSSM_REGNUM, S390_GSEPLA_REGNUM) ++ (S390_BC_GSD_REGNUM, S390_BC_GSSM_REGNUM): New defines. ++ (S390_NUM_REGS): Adjust macro definition. ++ (s390_gs_regset, s390_gsbc_regset, tdesc_s390_gs_linux64) ++ (tdesc_s390x_gs_linux64): New declarations. ++ ++2017-09-25 Andreas Arnez ++ + * features/s390-gs-linux64.xml: New file. + * features/s390-gs.xml: New file. + * features/s390-gsbc.xml: New file. +--- a/gdb/s390-linux-nat.c ++++ b/gdb/s390-linux-nat.c +@@ -54,6 +54,7 @@ static int have_regset_last_break = 0; + static int have_regset_system_call = 0; + static int have_regset_tdb = 0; + static int have_regset_vxrs = 0; ++static int have_regset_gs = 0; + + /* Register map for 32-bit executables running under a 64-bit + kernel. */ +@@ -406,6 +407,18 @@ s390_linux_fetch_inferior_registers (struct target_ops *ops, + fetch_regset (regcache, tid, NT_S390_VXRS_HIGH, 16 * 16, + &s390_vxrs_high_regset); + } ++ ++ if (have_regset_gs) ++ { ++ if (regnum == -1 || (regnum >= S390_GSD_REGNUM ++ && regnum <= S390_GSEPLA_REGNUM)) ++ fetch_regset (regcache, tid, NT_S390_GS_CB, 4 * 8, ++ &s390_gs_regset); ++ if (regnum == -1 || (regnum >= S390_BC_GSD_REGNUM ++ && regnum <= S390_BC_GSEPLA_REGNUM)) ++ fetch_regset (regcache, tid, NT_S390_GS_BC, 4 * 8, ++ &s390_gsbc_regset); ++ } + } + + /* Store register REGNUM back into the child process. If REGNUM is +@@ -974,8 +987,13 @@ s390_read_description (struct target_ops *ops) + && check_regset (tid, NT_S390_VXRS_LOW, 16 * 8) + && check_regset (tid, NT_S390_VXRS_HIGH, 16 * 16); + ++ have_regset_gs = (hwcap & HWCAP_S390_GS) ++ && check_regset (tid, NT_S390_GS_CB, 4 * 8) ++ && check_regset (tid, NT_S390_GS_BC, 4 * 8); ++ + if (s390_target_wordsize () == 8) +- return (have_regset_vxrs ? ++ return (have_regset_gs ? tdesc_s390x_gs_linux64 : ++ have_regset_vxrs ? + (have_regset_tdb ? tdesc_s390x_tevx_linux64 : + tdesc_s390x_vx_linux64) : + have_regset_tdb ? tdesc_s390x_te_linux64 : +@@ -984,7 +1002,8 @@ s390_read_description (struct target_ops *ops) + tdesc_s390x_linux64); + + if (hwcap & HWCAP_S390_HIGH_GPRS) +- return (have_regset_vxrs ? ++ return (have_regset_gs ? tdesc_s390_gs_linux64 : ++ have_regset_vxrs ? + (have_regset_tdb ? tdesc_s390_tevx_linux64 : + tdesc_s390_vx_linux64) : + have_regset_tdb ? tdesc_s390_te_linux64 : +--- a/gdb/s390-linux-tdep.c ++++ b/gdb/s390-linux-tdep.c +@@ -69,12 +69,14 @@ + #include "features/s390-te-linux64.c" + #include "features/s390-vx-linux64.c" + #include "features/s390-tevx-linux64.c" ++#include "features/s390-gs-linux64.c" + #include "features/s390x-linux64.c" + #include "features/s390x-linux64v1.c" + #include "features/s390x-linux64v2.c" + #include "features/s390x-te-linux64.c" + #include "features/s390x-vx-linux64.c" + #include "features/s390x-tevx-linux64.c" ++#include "features/s390x-gs-linux64.c" + + #define XML_SYSCALL_FILENAME_S390 "syscalls/s390-linux.xml" + #define XML_SYSCALL_FILENAME_S390X "syscalls/s390x-linux.xml" +@@ -113,6 +115,7 @@ struct gdbarch_tdep + int have_linux_v1; + int have_linux_v2; + int have_tdb; ++ bool have_gs; + }; + + +@@ -834,6 +837,24 @@ static const struct regcache_map_entry s390_regmap_vxrs_high[] = + { 0 } + }; + ++static const struct regcache_map_entry s390_regmap_gs[] = ++ { ++ { 1, REGCACHE_MAP_SKIP, 8 }, ++ { 1, S390_GSD_REGNUM, 8 }, ++ { 1, S390_GSSM_REGNUM, 8 }, ++ { 1, S390_GSEPLA_REGNUM, 8 }, ++ { 0 } ++ }; ++ ++static const struct regcache_map_entry s390_regmap_gsbc[] = ++ { ++ { 1, REGCACHE_MAP_SKIP, 8 }, ++ { 1, S390_BC_GSD_REGNUM, 8 }, ++ { 1, S390_BC_GSSM_REGNUM, 8 }, ++ { 1, S390_BC_GSEPLA_REGNUM, 8 }, ++ { 0 } ++ }; ++ + + /* Supply the TDB regset. Like regcache_supply_regset, but invalidate + the TDB registers unless the TDB format field is valid. */ +@@ -905,6 +926,18 @@ const struct regset s390_vxrs_high_regset = { + regcache_collect_regset + }; + ++const struct regset s390_gs_regset = { ++ s390_regmap_gs, ++ regcache_supply_regset, ++ regcache_collect_regset ++}; ++ ++const struct regset s390_gsbc_regset = { ++ s390_regmap_gsbc, ++ regcache_supply_regset, ++ regcache_collect_regset ++}; ++ + /* Iterate over supported core file register note sections. */ + + static void +@@ -951,6 +984,23 @@ s390_iterate_over_regset_sections (struct gdbarch *gdbarch, + cb (".reg-s390-vxrs-high", 16 * 16, &s390_vxrs_high_regset, + "s390 vector registers 16-31", cb_data); + } ++ ++ /* Iterate over the guarded-storage regsets if in "read" mode, or if ++ their registers are available. */ ++ if (tdep->have_gs) ++ { ++ if (regcache == NULL ++ || REG_VALID == regcache_register_status (regcache, ++ S390_GSD_REGNUM)) ++ cb (".reg-s390-gs-cb", 4 * 8, &s390_gs_regset, ++ "s390 guarded-storage registers", cb_data); ++ ++ if (regcache == NULL ++ || REG_VALID == regcache_register_status (regcache, ++ S390_BC_GSD_REGNUM)) ++ cb (".reg-s390-gs-bc", 4 * 8, &s390_gsbc_regset, ++ "s390 guarded-storage broadcast control", cb_data); ++ } + } + + static const struct target_desc * +@@ -959,7 +1009,7 @@ s390_core_read_description (struct gdbarch *gdbarch, + { + asection *section = bfd_get_section_by_name (abfd, ".reg"); + CORE_ADDR hwcap = 0; +- int high_gprs, v1, v2, te, vx; ++ bool high_gprs, v1, v2, te, vx, gs; + + target_auxv_search (target, AT_HWCAP, &hwcap); + if (!section) +@@ -971,12 +1021,14 @@ s390_core_read_description (struct gdbarch *gdbarch, + v2 = (bfd_get_section_by_name (abfd, ".reg-s390-system-call") != NULL); + vx = (hwcap & HWCAP_S390_VX); + te = (hwcap & HWCAP_S390_TE); ++ gs = (hwcap & HWCAP_S390_GS); + + switch (bfd_section_size (abfd, section)) + { + case s390_sizeof_gregset: + if (high_gprs) +- return (te && vx ? tdesc_s390_tevx_linux64 : ++ return (gs ? tdesc_s390_gs_linux64 : ++ te && vx ? tdesc_s390_tevx_linux64 : + vx ? tdesc_s390_vx_linux64 : + te ? tdesc_s390_te_linux64 : + v2 ? tdesc_s390_linux64v2 : +@@ -986,7 +1038,8 @@ s390_core_read_description (struct gdbarch *gdbarch, + v1 ? tdesc_s390_linux32v1 : tdesc_s390_linux32); + + case s390x_sizeof_gregset: +- return (te && vx ? tdesc_s390x_tevx_linux64 : ++ return (gs ? tdesc_s390x_gs_linux64 : ++ te && vx ? tdesc_s390x_tevx_linux64 : + vx ? tdesc_s390x_vx_linux64 : + te ? tdesc_s390x_te_linux64 : + v2 ? tdesc_s390x_linux64v2 : +@@ -7767,6 +7820,7 @@ s390_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches) + int have_linux_v2 = 0; + int have_tdb = 0; + int have_vx = 0; ++ int have_gs = 0; + int first_pseudo_reg, last_pseudo_reg; + static const char *const stap_register_prefixes[] = { "%", NULL }; + static const char *const stap_register_indirection_prefixes[] = { "(", +@@ -7834,6 +7888,12 @@ s390_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches) + "v16", "v17", "v18", "v19", "v20", "v21", "v22", "v23", "v24", + "v25", "v26", "v27", "v28", "v29", "v30", "v31", + }; ++ static const char *const gs_cb[] = { ++ "gsd", "gssm", "gsepla", ++ }; ++ static const char *const gs_bc[] = { ++ "bc_gsd", "bc_gssm", "bc_gsepla", ++ }; + const struct tdesc_feature *feature; + int i, valid_p = 1; + +@@ -7937,6 +7997,29 @@ s390_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches) + have_vx = 1; + } + ++ /* Guarded-storage registers. */ ++ feature = tdesc_find_feature (tdesc, "org.gnu.gdb.s390.gs"); ++ if (feature) ++ { ++ for (i = 0; i < 3; i++) ++ valid_p &= tdesc_numbered_register (feature, tdesc_data, ++ S390_GSD_REGNUM + i, ++ gs_cb[i]); ++ have_gs = 1; ++ } ++ ++ /* Guarded-storage broadcast control. */ ++ feature = tdesc_find_feature (tdesc, "org.gnu.gdb.s390.gsbc"); ++ if (feature) ++ { ++ valid_p &= have_gs; ++ ++ for (i = 0; i < 3; i++) ++ valid_p &= tdesc_numbered_register (feature, tdesc_data, ++ S390_BC_GSD_REGNUM + i, ++ gs_bc[i]); ++ } ++ + if (!valid_p) + { + tdesc_data_cleanup (tdesc_data); +@@ -7970,6 +8053,8 @@ s390_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches) + continue; + if ((tdep->gpr_full_regnum != -1) != have_upper) + continue; ++ if (tdep->have_gs != have_gs) ++ continue; + if (tdesc_data != NULL) + tdesc_data_cleanup (tdesc_data); + return arches->gdbarch; +@@ -7982,6 +8067,7 @@ s390_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches) + tdep->have_linux_v1 = have_linux_v1; + tdep->have_linux_v2 = have_linux_v2; + tdep->have_tdb = have_tdb; ++ tdep->have_gs = have_gs; + gdbarch = gdbarch_alloc (&info, tdep); + + set_gdbarch_believe_pcc_promotion (gdbarch, 0); +@@ -8157,10 +8243,12 @@ _initialize_s390_tdep (void) + initialize_tdesc_s390_te_linux64 (); + initialize_tdesc_s390_vx_linux64 (); + initialize_tdesc_s390_tevx_linux64 (); ++ initialize_tdesc_s390_gs_linux64 (); + initialize_tdesc_s390x_linux64 (); + initialize_tdesc_s390x_linux64v1 (); + initialize_tdesc_s390x_linux64v2 (); + initialize_tdesc_s390x_te_linux64 (); + initialize_tdesc_s390x_vx_linux64 (); + initialize_tdesc_s390x_tevx_linux64 (); ++ initialize_tdesc_s390x_gs_linux64 (); + } +--- a/gdb/s390-linux-tdep.h ++++ b/gdb/s390-linux-tdep.h +@@ -33,6 +33,10 @@ + #define HWCAP_S390_VX 2048 + #endif + ++#ifndef HWCAP_S390_GS ++#define HWCAP_S390_GS 16384 ++#endif ++ + /* Register information. */ + + /* Program Status Word. */ +@@ -166,8 +170,14 @@ + #define S390_V29_REGNUM 119 + #define S390_V30_REGNUM 120 + #define S390_V31_REGNUM 121 ++#define S390_GSD_REGNUM 122 ++#define S390_GSSM_REGNUM 123 ++#define S390_GSEPLA_REGNUM 124 ++#define S390_BC_GSD_REGNUM 125 ++#define S390_BC_GSSM_REGNUM 126 ++#define S390_BC_GSEPLA_REGNUM 127 + /* Total. */ +-#define S390_NUM_REGS 122 ++#define S390_NUM_REGS 128 + + /* Special register usage. */ + #define S390_SP_REGNUM S390_R15_REGNUM +@@ -198,6 +208,8 @@ extern const struct regset s390_tdb_regset; + #define s390_sizeof_tdbregset 0x100 + extern const struct regset s390_vxrs_low_regset; + extern const struct regset s390_vxrs_high_regset; ++extern const struct regset s390_gs_regset; ++extern const struct regset s390_gsbc_regset; + + /* GNU/Linux target descriptions. */ + extern struct target_desc *tdesc_s390_linux32; +@@ -209,11 +221,13 @@ extern struct target_desc *tdesc_s390_linux64v2; + extern struct target_desc *tdesc_s390_te_linux64; + extern struct target_desc *tdesc_s390_vx_linux64; + extern struct target_desc *tdesc_s390_tevx_linux64; ++extern struct target_desc *tdesc_s390_gs_linux64; + extern struct target_desc *tdesc_s390x_linux64; + extern struct target_desc *tdesc_s390x_linux64v1; + extern struct target_desc *tdesc_s390x_linux64v2; + extern struct target_desc *tdesc_s390x_te_linux64; + extern struct target_desc *tdesc_s390x_vx_linux64; + extern struct target_desc *tdesc_s390x_tevx_linux64; ++extern struct target_desc *tdesc_s390x_gs_linux64; + + #endif diff --git a/gdb-rhbz1498758-4of5.patch b/gdb-rhbz1498758-4of5.patch new file mode 100755 index 0000000..ec698bc --- /dev/null +++ b/gdb-rhbz1498758-4of5.patch @@ -0,0 +1,275 @@ +commit ad3396348e0ebb61fdf71cff307bac08175ed366 +Author: Andreas Arnez +Date: Mon Sep 25 16:02:23 2017 +0200 + + S390: Add guarded-storage register support to gdbserver + + Enable gdbserver to deal with the new guarded-storage register sets. + + gdb/gdbserver/ChangeLog: + + * configure.srv (s390*-*-linux*): Add s390-gs-linux64.o and + s390x-gs-linux64.o to srv_regobj. Add s390-gs-linux64.xml, + s390x-gs-linux64.xml, s390-gs.xml, and s390-gsbc.xml to + srv_xmlfiles. Add s390-gs-linux64-ipa.o and + s390x-gs-linux64-ipa.o to ipa_obj. + * linux-s390-low.c (HWCAP_S390_GS): New define. + (s390_fill_gs, s390_store_gs, s390_fill_gsbc, s390_store_gsbc): + New functions. + (s390_regsets): Add regsets for NT_S390_GS_CB and NT_S390_GS_BC. + (s390_arch_setup): Check for guarded-storage support and choose + appropriate tdesc. + (initialize_low_arch): Invoke init_registers_s390_gs_linux64 and + init_registers_s390x_gs_linux64. + * linux-s390-tdesc.h (enum s390_linux_tdesc) : New + enum value. + (init_registers_s390x_gs_linux64, tdesc_s390x_gs_linux64) + (init_registers_s390_gs_linux64, tdesc_s390_gs_linux64): Declare. + +### a/gdb/gdbserver/ChangeLog +### b/gdb/gdbserver/ChangeLog +## -1,3 +1,23 @@ ++2017-09-25 Andreas Arnez ++ ++ * configure.srv (s390*-*-linux*): Add s390-gs-linux64.o and ++ s390x-gs-linux64.o to srv_regobj. Add s390-gs-linux64.xml, ++ s390x-gs-linux64.xml, s390-gs.xml, and s390-gsbc.xml to ++ srv_xmlfiles. Add s390-gs-linux64-ipa.o and ++ s390x-gs-linux64-ipa.o to ipa_obj. ++ * linux-s390-low.c (HWCAP_S390_GS): New define. ++ (s390_fill_gs, s390_store_gs, s390_fill_gsbc, s390_store_gsbc): ++ New functions. ++ (s390_regsets): Add regsets for NT_S390_GS_CB and NT_S390_GS_BC. ++ (s390_arch_setup): Check for guarded-storage support and choose ++ appropriate tdesc. ++ (initialize_low_arch): Invoke init_registers_s390_gs_linux64 and ++ init_registers_s390x_gs_linux64. ++ * linux-s390-tdesc.h (enum s390_linux_tdesc) : New ++ enum value. ++ (init_registers_s390x_gs_linux64, tdesc_s390x_gs_linux64) ++ (init_registers_s390_gs_linux64, tdesc_s390_gs_linux64): Declare. ++ + 2017-09-22 Simon Marchi + + * win32-i386-low.c (i386_arch_setup): Call init_target_desc. +--- a/gdb/gdbserver/configure.srv ++++ b/gdb/gdbserver/configure.srv +@@ -285,12 +285,14 @@ case "${target}" in + srv_regobj="${srv_regobj} s390-te-linux64.o" + srv_regobj="${srv_regobj} s390-vx-linux64.o" + srv_regobj="${srv_regobj} s390-tevx-linux64.o" ++ srv_regobj="${srv_regobj} s390-gs-linux64.o" + srv_regobj="${srv_regobj} s390x-linux64.o" + srv_regobj="${srv_regobj} s390x-linux64v1.o" + srv_regobj="${srv_regobj} s390x-linux64v2.o" + srv_regobj="${srv_regobj} s390x-te-linux64.o" + srv_regobj="${srv_regobj} s390x-vx-linux64.o" + srv_regobj="${srv_regobj} s390x-tevx-linux64.o" ++ srv_regobj="${srv_regobj} s390x-gs-linux64.o" + srv_tgtobj="$srv_linux_obj linux-s390-low.o" + srv_xmlfiles="s390-linux32.xml" + srv_xmlfiles="${srv_xmlfiles} s390-linux32v1.xml" +@@ -301,12 +303,14 @@ case "${target}" in + srv_xmlfiles="${srv_xmlfiles} s390-te-linux64.xml" + srv_xmlfiles="${srv_xmlfiles} s390-vx-linux64.xml" + srv_xmlfiles="${srv_xmlfiles} s390-tevx-linux64.xml" ++ srv_xmlfiles="${srv_xmlfiles} s390-gs-linux64.xml" + srv_xmlfiles="${srv_xmlfiles} s390x-linux64.xml" + srv_xmlfiles="${srv_xmlfiles} s390x-linux64v1.xml" + srv_xmlfiles="${srv_xmlfiles} s390x-linux64v2.xml" + srv_xmlfiles="${srv_xmlfiles} s390x-te-linux64.xml" + srv_xmlfiles="${srv_xmlfiles} s390x-vx-linux64.xml" + srv_xmlfiles="${srv_xmlfiles} s390x-tevx-linux64.xml" ++ srv_xmlfiles="${srv_xmlfiles} s390x-gs-linux64.xml" + srv_xmlfiles="${srv_xmlfiles} s390-core32.xml" + srv_xmlfiles="${srv_xmlfiles} s390-core64.xml" + srv_xmlfiles="${srv_xmlfiles} s390x-core64.xml" +@@ -314,6 +318,8 @@ case "${target}" in + srv_xmlfiles="${srv_xmlfiles} s390-fpr.xml" + srv_xmlfiles="${srv_xmlfiles} s390-tdb.xml" + srv_xmlfiles="${srv_xmlfiles} s390-vx.xml" ++ srv_xmlfiles="${srv_xmlfiles} s390-gs.xml" ++ srv_xmlfiles="${srv_xmlfiles} s390-gsbc.xml" + srv_linux_usrregs=yes + srv_linux_regsets=yes + srv_linux_thread_db=yes +@@ -327,12 +333,14 @@ case "${target}" in + ipa_obj="${ipa_obj} s390-vx-linux64-ipa.o" + ipa_obj="${ipa_obj} s390-te-linux64-ipa.o" + ipa_obj="${ipa_obj} s390-tevx-linux64-ipa.o" ++ ipa_obj="${ipa_obj} s390-gs-linux64-ipa.o" + ipa_obj="${ipa_obj} s390x-linux64-ipa.o" + ipa_obj="${ipa_obj} s390x-linux64v1-ipa.o" + ipa_obj="${ipa_obj} s390x-linux64v2-ipa.o" + ipa_obj="${ipa_obj} s390x-vx-linux64-ipa.o" + ipa_obj="${ipa_obj} s390x-te-linux64-ipa.o" + ipa_obj="${ipa_obj} s390x-tevx-linux64-ipa.o" ++ ipa_obj="${ipa_obj} s390x-gs-linux64-ipa.o" + ;; + sh*-*-linux*) srv_regobj=reg-sh.o + srv_tgtobj="$srv_linux_obj linux-sh-low.o" +--- a/gdb/gdbserver/linux-s390-low.c ++++ b/gdb/gdbserver/linux-s390-low.c +@@ -45,6 +45,10 @@ + #define HWCAP_S390_VX 2048 + #endif + ++#ifndef HWCAP_S390_GS ++#define HWCAP_S390_GS 16384 ++#endif ++ + #define s390_num_regs 52 + + static int s390_regmap[] = { +@@ -370,6 +374,46 @@ s390_store_vxrs_high (struct regcache *regcache, const void *buf) + supply_register (regcache, v16 + i, (const char *) buf + 16 * i); + } + ++static void ++s390_fill_gs (struct regcache *regcache, void *buf) ++{ ++ int gsd = find_regno (regcache->tdesc, "gsd"); ++ int i; ++ ++ for (i = 0; i < 3; i++) ++ collect_register (regcache, gsd + i, (char *) buf + 8 * (i + 1)); ++} ++ ++static void ++s390_store_gs (struct regcache *regcache, const void *buf) ++{ ++ int gsd = find_regno (regcache->tdesc, "gsd"); ++ int i; ++ ++ for (i = 0; i < 3; i++) ++ supply_register (regcache, gsd + i, (const char *) buf + 8 * (i + 1)); ++} ++ ++static void ++s390_fill_gsbc (struct regcache *regcache, void *buf) ++{ ++ int bc_gsd = find_regno (regcache->tdesc, "bc_gsd"); ++ int i; ++ ++ for (i = 0; i < 3; i++) ++ collect_register (regcache, bc_gsd + i, (char *) buf + 8 * (i + 1)); ++} ++ ++static void ++s390_store_gsbc (struct regcache *regcache, const void *buf) ++{ ++ int bc_gsd = find_regno (regcache->tdesc, "bc_gsd"); ++ int i; ++ ++ for (i = 0; i < 3; i++) ++ supply_register (regcache, bc_gsd + i, (const char *) buf + 8 * (i + 1)); ++} ++ + static struct regset_info s390_regsets[] = { + { 0, 0, 0, 0, GENERAL_REGS, s390_fill_gregset, NULL }, + #ifndef __s390x__ +@@ -388,6 +432,10 @@ static struct regset_info s390_regsets[] = { + EXTENDED_REGS, s390_fill_vxrs_low, s390_store_vxrs_low }, + { PTRACE_GETREGSET, PTRACE_SETREGSET, NT_S390_VXRS_HIGH, 0, + EXTENDED_REGS, s390_fill_vxrs_high, s390_store_vxrs_high }, ++ { PTRACE_GETREGSET, PTRACE_SETREGSET, NT_S390_GS_CB, 0, ++ EXTENDED_REGS, s390_fill_gs, s390_store_gs }, ++ { PTRACE_GETREGSET, PTRACE_SETREGSET, NT_S390_GS_BC, 0, ++ EXTENDED_REGS, s390_fill_gsbc, s390_store_gsbc }, + NULL_REGSET + }; + +@@ -501,6 +549,8 @@ s390_arch_setup (void) + int have_regset_tdb = s390_check_regset (pid, NT_S390_TDB, 256); + int have_regset_vxrs = s390_check_regset (pid, NT_S390_VXRS_LOW, 128) + && s390_check_regset (pid, NT_S390_VXRS_HIGH, 256); ++ int have_regset_gs = s390_check_regset (pid, NT_S390_GS_CB, 32) ++ && s390_check_regset (pid, NT_S390_GS_BC, 32); + + /* Assume 31-bit inferior process. */ + if (have_regset_system_call) +@@ -529,8 +579,13 @@ s390_arch_setup (void) + if (have_regset_vxrs) + have_regset_vxrs = + (s390_get_hwcap (tdesc_s390x_linux64v2) & HWCAP_S390_VX) != 0; ++ if (have_regset_gs) ++ have_regset_gs = ++ (s390_get_hwcap (tdesc_s390x_linux64v2) & HWCAP_S390_GS) != 0; + +- if (have_regset_vxrs) ++ if (have_regset_gs) ++ tdesc = tdesc_s390x_gs_linux64; ++ else if (have_regset_vxrs) + tdesc = (have_regset_tdb ? tdesc_s390x_tevx_linux64 : + tdesc_s390x_vx_linux64); + else if (have_regset_tdb) +@@ -554,8 +609,12 @@ s390_arch_setup (void) + have_regset_tdb = (s390_get_hwcap (tdesc) & HWCAP_S390_TE) != 0; + if (have_regset_vxrs) + have_regset_vxrs = (s390_get_hwcap (tdesc) & HWCAP_S390_VX) != 0; ++ if (have_regset_gs) ++ have_regset_gs = (s390_get_hwcap (tdesc) & HWCAP_S390_GS) != 0; + +- if (have_regset_vxrs) ++ if (have_regset_gs) ++ tdesc = tdesc_s390_gs_linux64; ++ else if (have_regset_vxrs) + tdesc = (have_regset_tdb ? tdesc_s390_tevx_linux64 : + tdesc_s390_vx_linux64); + else if (have_regset_tdb) +@@ -596,6 +655,9 @@ s390_arch_setup (void) + case NT_S390_VXRS_HIGH: + regset->size = have_regset_vxrs ? 256 : 0; + break; ++ case NT_S390_GS_CB: ++ case NT_S390_GS_BC: ++ regset->size = have_regset_gs ? 32 : 0; + default: + break; + } +@@ -2797,6 +2859,7 @@ initialize_low_arch (void) + init_registers_s390_te_linux64 (); + init_registers_s390_vx_linux64 (); + init_registers_s390_tevx_linux64 (); ++ init_registers_s390_gs_linux64 (); + #ifdef __s390x__ + init_registers_s390x_linux64 (); + init_registers_s390x_linux64v1 (); +@@ -2804,6 +2867,7 @@ initialize_low_arch (void) + init_registers_s390x_te_linux64 (); + init_registers_s390x_vx_linux64 (); + init_registers_s390x_tevx_linux64 (); ++ init_registers_s390x_gs_linux64 (); + #endif + + initialize_regsets_info (&s390_regsets_info); +--- a/gdb/gdbserver/linux-s390-tdesc.h ++++ b/gdb/gdbserver/linux-s390-tdesc.h +@@ -31,6 +31,7 @@ enum s390_linux_tdesc { + S390_TDESC_TE, + S390_TDESC_VX, + S390_TDESC_TEVX, ++ S390_TDESC_GS, + }; + + #ifdef __s390x__ +@@ -59,6 +60,10 @@ extern const struct target_desc *tdesc_s390x_vx_linux64; + void init_registers_s390x_tevx_linux64 (void); + extern const struct target_desc *tdesc_s390x_tevx_linux64; + ++/* Defined in auto-generated file s390x-gs-linux64.c. */ ++void init_registers_s390x_gs_linux64 (void); ++extern const struct target_desc *tdesc_s390x_gs_linux64; ++ + #endif + + #if !defined __s390x__ || !defined IN_PROCESS_AGENT +@@ -99,4 +104,8 @@ extern const struct target_desc *tdesc_s390_vx_linux64; + void init_registers_s390_tevx_linux64 (void); + extern const struct target_desc *tdesc_s390_tevx_linux64; + ++/* Defined in auto-generated file s390-gs-linux64.c. */ ++void init_registers_s390_gs_linux64 (void); ++extern const struct target_desc *tdesc_s390_gs_linux64; ++ + #endif diff --git a/gdb-rhbz1498758-5of5.patch b/gdb-rhbz1498758-5of5.patch new file mode 100644 index 0000000..1b59121 --- /dev/null +++ b/gdb-rhbz1498758-5of5.patch @@ -0,0 +1,63 @@ +commit 289e23aa03084b22c73ebdcf18371f1e6666ead0 +Author: Andreas Arnez +Date: Mon Sep 25 16:02:24 2017 +0200 + + S390: Document guarded-storage register support + + This documents the newly added support for guarded-storage registers on + IBM z. + + gdb/ChangeLog: + + * NEWS: Advertise support for guarded-storage registers on IBM z. + + gdb/doc/ChangeLog: + + * gdb.texinfo (S/390 and System z Features): Document the new + features org.gnu.gdb.s390.gs and org.gnu.gdb.s390.gsbc. + +### a/gdb/ChangeLog +### b/gdb/ChangeLog +## -1,5 +1,9 @@ + 2017-09-25 Andreas Arnez + ++ * NEWS: Advertise support for guarded-storage registers on IBM z. ++ ++2017-09-25 Andreas Arnez ++ + * s390-linux-nat.c (have_regset_gs): New static variable. + (s390_linux_fetch_inferior_registers): Handle guarded-storage + control block and guarded-storage broadcast control regsets. +Index: gdb-8.0.1/gdb/NEWS +=================================================================== +--- gdb-8.0.1.orig/gdb/NEWS 2017-10-07 15:54:48.649165644 +0200 ++++ gdb-8.0.1/gdb/NEWS 2017-10-07 15:55:01.006264129 +0200 +@@ -3,6 +3,9 @@ + + * Fortran: Support pointers to dynamic types. + ++* GDB now supports access to the guarded-storage-control registers and the ++ software-based guarded-storage broadcast control registers on IBM z14. ++ + *** Changes in GDB 8.0 + + * GDB now supports access to the PKU register on GNU/Linux. The register is +Index: gdb-8.0.1/gdb/doc/gdb.texinfo +=================================================================== +--- gdb-8.0.1.orig/gdb/doc/gdb.texinfo 2017-10-07 15:54:44.891135692 +0200 ++++ gdb-8.0.1/gdb/doc/gdb.texinfo 2017-10-07 15:54:48.660165731 +0200 +@@ -41512,6 +41512,14 @@ + contain the 128-bit wide vector registers @samp{v16} through + @samp{v31}. + ++The @samp{org.gnu.gdb.s390.gs} feature is optional. It should contain ++the 64-bit wide guarded-storage-control registers @samp{gsd}, ++@samp{gssm}, and @samp{gsepla}. ++ ++The @samp{org.gnu.gdb.s390.gsbc} feature is optional. It should contain ++the 64-bit wide guarded-storage broadcast control registers ++@samp{bc_gsd}, @samp{bc_gssm}, and @samp{bc_gsepla}. ++ + @node Sparc Features + @subsection Sparc Features + @cindex target descriptions, sparc32 features diff --git a/gdb.spec b/gdb.spec index ddd183b..466e8c5 100644 --- a/gdb.spec +++ b/gdb.spec @@ -26,7 +26,7 @@ Version: 8.0.1 # The release always contains a leading reserved number, start it at 1. # `upstream' is not a part of `name' to stay fully rpm dependencies compatible for the testing. -Release: 28%{?dist} +Release: 29%{?dist} License: GPLv3+ and GPLv3+ with exceptions and GPLv2+ and GPLv2+ with exceptions and GPL+ and LGPLv2+ and LGPLv3+ and BSD and Public Domain and GFDL Group: Development/Debuggers @@ -726,6 +726,13 @@ Patch1242: gdb-rhbz1420304-s390x-33of35.patch Patch1243: gdb-rhbz1420304-s390x-34of35.patch Patch1244: gdb-rhbz1420304-s390x-35of35.patch +# [s390x] Backport arch14 guarded-storage register support (RH BZ 1498758). +Patch1255: gdb-rhbz1498758-1of5.patch +Patch1256: gdb-rhbz1498758-2of5.patch +Patch1257: gdb-rhbz1498758-3of5.patch +Patch1258: gdb-rhbz1498758-4of5.patch +Patch1259: gdb-rhbz1498758-5of5.patch + %if 0%{!?rhel:1} || 0%{?rhel} > 6 # RL_STATE_FEDORA_GDB would not be found for: # Patch642: gdb-readline62-ask-more-rh.patch @@ -1133,6 +1140,11 @@ done %patch1152 -p1 %patch1153 -p1 %patch1155 -p1 +%patch1255 -p1 +%patch1256 -p1 +%patch1257 -p1 +%patch1258 -p1 +%patch1259 -p1 %patch1075 -p1 %if 0%{?rhel:1} && 0%{?rhel} <= 7 @@ -1715,6 +1727,9 @@ then fi %changelog +* Sat Oct 7 2017 Jan Kratochvil - 8.0.1-29.fc26 +- [s390x] Backport arch14 guarded-storage register support (RH BZ 1498758). + * Thu Sep 28 2017 Jan Kratochvil - 8.0.1-28.fc26 - Performance fix of gcore to use --readnever (for RH BZ 1493675).