Merge remote-tracking branch 'origin/master' into f26

This commit is contained in:
Jan Kratochvil 2017-10-27 21:10:14 +02:00
commit 623fa7eb8a
9 changed files with 1980 additions and 6 deletions

View File

@ -94,3 +94,14 @@ Index: gdb-7.99.90.20170420/gdb/top.h
/* Perform _initialize initialization. */
extern void gdb_init (char *);
--- gdb-8.0.1/gdb/gcore.in-orig 2017-06-04 17:51:26.000000000 +0200
+++ gdb-8.0.1/gdb/gcore.in 2017-09-28 19:46:49.335407827 +0200
@@ -85,7 +85,7 @@ for pid in $*
do
# `</dev/null' to avoid touching interactive terminal if it is
# available but not accessible as GDB would get stopped on SIGTTIN.
- $binary_path/@GDB_TRANSFORM_NAME@ </dev/null --nx --batch \
+ $binary_path/@GDB_TRANSFORM_NAME@ </dev/null --nx --batch --readnever \
-ex "set pagination off" -ex "set height 0" -ex "set width 0" \
-ex "attach $pid" -ex "gcore $name.$pid" -ex detach -ex quit

View File

@ -0,0 +1,136 @@
commit 06871ae84096ed1672eb76f44cea4d5dbe79ae24
Author: Pedro Alves <palves@redhat.com>
Date: Wed Sep 20 16:12:54 2017 +0100
Make "list ambiguous" show symbol names too
Currently, with an ambiguous "list first,last", we get:
(gdb) list bar,main
Specified first line 'bar' is ambiguous:
file: "src/gdb/testsuite/gdb.cp/overload.cc", line number: 97
file: "src/gdb/testsuite/gdb.cp/overload.cc", line number: 98
This commit makes gdb's output above a bit clearer by printing the
symbol name as well:
(gdb) list bar,main
Specified first line 'bar' is ambiguous:
file: "src/gdb/testsuite/gdb.cp/overload.cc", line number: 97, symbol: "bar(A)"
file: "src/gdb/testsuite/gdb.cp/overload.cc", line number: 98, symbol: "bar(B)"
And while at it, makes gdb print the symbol name when actually listing
multiple locations too. I.e., before (with "set listsize 2"):
(gdb) list bar
file: "src/gdb/testsuite/gdb.cp/overload.cc", line number: 97
96
97 int bar (A) { return 11; }
file: "src/gdb/testsuite/gdb.cp/overload.cc", line number: 98
97 int bar (A) { return 11; }
98 int bar (B) { return 22; }
After:
(gdb) list bar
file: "src/gdb/testsuite/gdb.cp/overload.cc", line number: 97, symbol: "bar(A)"
96
97 int bar (A) { return 11; }
file: "src/gdb/testsuite/gdb.cp/overload.cc", line number: 98, symbol: "bar(B)"
97 int bar (A) { return 11; }
98 int bar (B) { return 22; }
Currently, the result of decoding a linespec loses information about
the original symbol that was found. All we end up with is an address.
This makes it difficult to find the original symbol again to get at
its print name. Fix that by storing a pointer to the symbol in the
sal. We already store the symtab and obj_section, so it feels like a
natural progression to me. This avoids having to do any extra symbol
lookup too.
gdb/ChangeLog:
2017-09-20 Pedro Alves <palves@redhat.com>
* cli/cli-cmds.c (list_command): Use print_sal_location.
(print_sal_location): New function.
(ambiguous_line_spec): Use print_sal_location.
* linespec.c (symbol_to_sal): Record the symbol in the sal.
* symtab.c (find_function_start_sal): Likewise.
* symtab.h (symtab_and_line::symbol): New field.
gdb/testsuite/ChangeLog:
2017-09-20 Pedro Alves <palves@redhat.com>
* gdb.base/list-ambiguous.exp (test_list_ambiguous_symbol): Expect
symbol names in gdb's output.
* gdb.cp/overload.exp ("list all overloads"): Likewise.
### a/gdb/ChangeLog
### b/gdb/ChangeLog
## -1,5 +1,14 @@
2017-09-20 Pedro Alves <palves@redhat.com>
+ * cli/cli-cmds.c (list_command): Use print_sal_location.
+ (print_sal_location): New function.
+ (ambiguous_line_spec): Use print_sal_location.
+ * linespec.c (symbol_to_sal): Record the symbol in the sal.
+ * symtab.c (find_function_start_sal): Likewise.
+ * symtab.h (symtab_and_line::symbol): New field.
+
+2017-09-20 Pedro Alves <palves@redhat.com>
+
* linespec.c (minsym_found): Handle non-text minsyms.
(symbol_to_sal): Record a sal.pc for non-block, non-label symbols.
Index: gdb-8.0.1/gdb/linespec.c
===================================================================
--- gdb-8.0.1.orig/gdb/linespec.c 2017-10-20 21:28:18.444609776 +0200
+++ gdb-8.0.1/gdb/linespec.c 2017-10-20 21:29:12.382094104 +0200
@@ -3864,6 +3864,7 @@
{
init_sal (result);
result->symtab = symbol_symtab (sym);
+ result->symbol = sym;
result->line = SYMBOL_LINE (sym);
result->pc = SYMBOL_VALUE_ADDRESS (sym);
result->pspace = SYMTAB_PSPACE (result->symtab);
@@ -3879,6 +3880,7 @@
/* We know its line number. */
init_sal (result);
result->symtab = symbol_symtab (sym);
+ result->symbol = sym;
result->line = SYMBOL_LINE (sym);
result->pspace = SYMTAB_PSPACE (result->symtab);
return 1;
Index: gdb-8.0.1/gdb/symtab.c
===================================================================
--- gdb-8.0.1.orig/gdb/symtab.c 2017-10-20 21:28:18.446609794 +0200
+++ gdb-8.0.1/gdb/symtab.c 2017-10-20 21:29:51.390444377 +0200
@@ -3478,6 +3478,7 @@
fixup_symbol_section (sym, NULL);
section = SYMBOL_OBJ_SECTION (symbol_objfile (sym), sym);
sal = find_pc_sect_line (BLOCK_START (SYMBOL_BLOCK_VALUE (sym)), section, 0);
+ sal.symbol = sym;
if (funfirstline && sal.symtab != NULL
&& (COMPUNIT_LOCATIONS_VALID (SYMTAB_COMPUNIT (sal.symtab))
@@ -3501,6 +3502,7 @@
sal.pspace = current_program_space;
sal.pc = BLOCK_START (SYMBOL_BLOCK_VALUE (sym));
sal.section = section;
+ sal.symbol = sym;
}
if (funfirstline)
Index: gdb-8.0.1/gdb/symtab.h
===================================================================
--- gdb-8.0.1.orig/gdb/symtab.h 2017-10-20 21:28:21.205634569 +0200
+++ gdb-8.0.1/gdb/symtab.h 2017-10-20 21:28:40.933811716 +0200
@@ -1420,6 +1420,7 @@
struct program_space *pspace;
struct symtab *symtab;
+ struct symbol *symbol = NULL;
struct obj_section *section;
/* Line number. Line numbers start at 1 and proceed through symtab->nlines.
0 is never a valid line number; it is used to indicate that line number

View File

@ -0,0 +1,212 @@
commit 4a27f119f59a44395e0a34b1526cee709e1d3fce
Author: Keith Seitz <keiths@redhat.com>
Date: Fri Oct 27 10:57:23 2017 -0700
Use SaL symbol name when reporting breakpoint locations
Currently, "info break" can show some (perhaps) unexpected results when
setting a breakpoint on an inlined function:
(gdb) list
1 #include <stdio.h>
2
3 static inline void foo()
4 {
5 printf("Hello world\n");
6 }
7
8 int main()
9 {
10 foo();
11 return 0;
12 }
13
(gdb) b foo
Breakpoint 1 at 0x400434: file foo.c, line 5.
(gdb) i b
Num Type Disp Enb Address What
1 breakpoint keep y 0x0000000000400434 in main at foo.c:5
GDB reported that we understood what "foo" was, but we then report that the
breakpoint is actually set in main. While that is literally true, we can
do a little better.
This is accomplished by copying the symbol for which the breakpoint was set
into the bp_location. From there, print_breakpoint_location can use this
information to print out symbol information (if available) instead of calling
find_pc_sect_function.
With the patch installed,
(gdb) i b
Num Type Disp Enb Address What
1 breakpoint keep y 0x0000000000400434 in foo at foo.c:5
gdb/ChangeLog:
* breakpoint.c (print_breakpoint_location): Use the symbol saved
in the bp_location, falling back to find_pc_sect_function when
needed.
(add_location_to_breakpoint): Save sal->symbol.
* breakpoint.h (struct bp_location) <symbol>: New field.
* symtab.c (find_function_start_sal): Save the symbol into the SaL.
* symtab.h (struct symtab_and_line) <symbol>: New field.
gdb/testsuite/ChangeLog:
* gdb.opt/inline-break.exp (break_info_1): New procedure.
Test "info break" for every inlined function breakpoint.
### a/gdb/ChangeLog
### b/gdb/ChangeLog
## -1,3 +1,13 @@
+2017-10-27 Keith Seitz <keiths@redhat.com>
+
+ * breakpoint.c (print_breakpoint_location): Use the symbol saved
+ in the bp_location, falling back to find_pc_sect_function when
+ needed.
+ (add_location_to_breakpoint): Save sal->symbol.
+ * breakpoint.h (struct bp_location) <symbol>: New field.
+ * symtab.c (find_function_start_sal): Save the symbol into the SaL.
+ * symtab.h (struct symtab_and_line) <symbol>: New field.
+
2017-10-26 Patrick Frants <osscontribute@gmail.com>
PR gdb/13669
--- a/gdb/breakpoint.c
+++ b/gdb/breakpoint.c
@@ -5956,8 +5956,11 @@ print_breakpoint_location (struct breakpoint *b,
uiout->field_string ("what", event_location_to_string (b->location.get ()));
else if (loc && loc->symtab)
{
- struct symbol *sym
- = find_pc_sect_function (loc->address, loc->section);
+ const struct symbol *sym = loc->symbol;
+
+ if (sym == NULL)
+ sym = find_pc_sect_function (loc->address, loc->section);
+
if (sym)
{
uiout->text ("in ");
@@ -8743,6 +8746,7 @@ add_location_to_breakpoint (struct breakpoint *b,
loc->gdbarch = loc_gdbarch;
loc->line_number = sal->line;
loc->symtab = sal->symtab;
+ loc->symbol = sal->symbol;
set_breakpoint_location_function (loc,
sal->explicit_pc || sal->explicit_line);
--- a/gdb/breakpoint.h
+++ b/gdb/breakpoint.h
@@ -486,6 +486,11 @@ public:
to find the corresponding source file name. */
struct symtab *symtab;
+
+ /* The symbol found by the location parser, if any. This may be used to
+ ascertain when an event location was set at a different location than
+ the one originally selected by parsing, e.g., inlined symbols. */
+ const struct symbol *symbol = NULL;
};
/* The possible return values for print_bpstat, print_it_normal,
### a/gdb/testsuite/ChangeLog
### b/gdb/testsuite/ChangeLog
## -1,3 +1,8 @@
+2017-10-27 Keith Seitz <keiths@redhat.com>
+
+ * gdb.opt/inline-break.exp (break_info_1): New procedure.
+ Test "info break" for every inlined function breakpoint.
+
2017-10-27 Yao Qi <yao.qi@linaro.org>
* gdb.arch/insn-reloc.c (can_relocate_bl): Mark "x30" clobbered.
--- a/gdb/testsuite/gdb.opt/inline-break.exp
+++ b/gdb/testsuite/gdb.opt/inline-break.exp
@@ -24,6 +24,62 @@ if { [prepare_for_testing "failed to prepare" $testfile $srcfile \
return -1
}
+# Return a string that may be used to match the output of "info break NUM".
+#
+# Optional arguments:
+#
+# source - the name of the source file
+# func - the name of the function
+# disp - the event disposition
+# enabled - enable state
+# locs - number of locations
+# line - source line number (ignored without -source)
+
+proc break_info_1 {num args} {
+ global decimal
+
+ # Column delimiter
+ set c {[\t ]+}
+
+ # Row delimiter
+ set end {[\r\n \t]+}
+
+ # Table header
+ set header "[join [list Num Type Disp Enb Address What] ${c}]"
+
+ # Get/configure any optional parameters.
+ parse_args [list {source ""} {func ".*"} {disp "keep"} \
+ {enabled "y"} {locs 1} [list line $decimal] \
+ {type "breakpoint"}]
+
+ if {$source != ""} {
+ set source "$source:$line"
+ }
+
+ # Result starts with the standard header.
+ set result "$header${end}"
+
+ # Set up for multi-location breakpoint marker.
+ if {$locs == 1} {
+ set multi ".*"
+ } else {
+ set multi "<MULTIPLE>${end}"
+ }
+ append result "[join [list $num $type $disp $enabled $multi] $c]"
+
+ # Add location info.
+ for {set i 1} {$i <= $locs} {incr i} {
+ if {$locs > 1} {
+ append result "[join [list $num.$i $enabled] $c].*"
+ }
+
+ # Add function/source file info.
+ append result "in $func at .*$source${end}"
+ }
+
+ return $result
+}
+
#
# func1 is a static inlined function that is called once.
# The result should be a single-location breakpoint.
@@ -111,3 +167,22 @@ gdb_test "print func1" \
#
gdb_test "print func2" \
"\\\$.* = {int \\(int\\)} .* <func2>"
+
+# Test that "info break" reports the location of the breakpoints "inside"
+# the inlined functions
+
+set results(1) [break_info_1 1 -source $srcfile -func "func1"]
+set results(2) [break_info_1 2 -locs 2 -source $srcfile -func "func2"]
+set results(3) [break_info_1 3 -source $srcfile -func "func3b"]
+set results(4) [break_info_1 4 -locs 2 -source $srcfile -func "func4b"]
+set results(5) [break_info_1 5 -locs 2 -source $srcfile -func "func5b"]
+set results(6) [break_info_1 6 -locs 3 -source $srcfile -func "func6b"]
+set results(7) [break_info_1 7 -locs 2 -source $srcfile -func "func7b"]
+set results(8) [break_info_1 8 -locs 3 -source $srcfile -func "func8b"]
+
+for {set i 1} {$i <= [array size results]} {incr i} {
+ send_log "Expecting: $results($i)\n"
+ gdb_test "info break $i" $results($i)
+}
+
+unset -nocomplain results

46
gdb-rhbz1498758-1of5.patch Executable file
View File

@ -0,0 +1,46 @@
commit 8fe09d7421db51bc13c9228547d63e6315bd6bd0
Author: Andreas Arnez <arnez@linux.vnet.ibm.com>
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 <arnez@linux.vnet.ibm.com>
+
+ * 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 <amodra@gmail.com>
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;

816
gdb-rhbz1498758-2of5.patch Executable file
View File

@ -0,0 +1,816 @@
commit 96235dc1ac3730c4e490d19db2e8287c0a40f307
Author: Andreas Arnez <arnez@linux.vnet.ibm.com>
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 <arnez@linux.vnet.ibm.com>
+
+ * 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 <tom@tromey.com>
* 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 @@
+<?xml version="1.0"?>
+<!-- Copyright (C) 2017 Free Software Foundation, Inc.
+
+ Copying and distribution of this file, with or without modification,
+ are permitted in any medium without royalty provided the copyright
+ notice and this notice are preserved. -->
+
+<!-- S/390 31-bit user-level code on a machine operating
+ in z/Architecture mode. -->
+
+<!DOCTYPE target SYSTEM "gdb-target.dtd">
+<target>
+ <architecture>s390:31-bit</architecture>
+ <xi:include href="s390-core64.xml"/>
+ <xi:include href="s390-acr.xml"/>
+ <xi:include href="s390-fpr.xml"/>
+
+ <feature name="org.gnu.gdb.s390.linux">
+ <reg name="orig_r2" bitsize="32" type="uint32" group="system"/>
+ <reg name="last_break" bitsize="32" type="code_ptr" group="system" save-restore="no"/>
+ <reg name="system_call" bitsize="32" type="uint32" group="system"/>
+ </feature>
+
+ <xi:include href="s390-tdb.xml"/>
+ <xi:include href="s390-vx.xml"/>
+ <xi:include href="s390-gs.xml"/>
+ <xi:include href="s390-gsbc.xml"/>
+</target>
--- /dev/null
+++ b/gdb/features/s390-gs.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0"?>
+<!-- Copyright (C) 2017 Free Software Foundation, Inc.
+
+ Copying and distribution of this file, with or without modification,
+ are permitted in any medium without royalty provided the copyright
+ notice and this notice are preserved. -->
+
+<!DOCTYPE feature SYSTEM "gdb-target.dtd">
+<feature name="org.gnu.gdb.s390.gs">
+ <reg name="gsd" bitsize="64" type="uint64" group="gs"/>
+ <reg name="gssm" bitsize="64" type="uint64" group="gs"/>
+ <reg name="gsepla" bitsize="64" type="data_ptr" group="gs"/>
+</feature>
--- /dev/null
+++ b/gdb/features/s390-gsbc.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0"?>
+<!-- Copyright (C) 2017 Free Software Foundation, Inc.
+
+ Copying and distribution of this file, with or without modification,
+ are permitted in any medium without royalty provided the copyright
+ notice and this notice are preserved. -->
+
+<!DOCTYPE feature SYSTEM "gdb-target.dtd">
+<feature name="org.gnu.gdb.s390.gsbc">
+ <reg name="bc_gsd" bitsize="64" type="uint64" group="gs"/>
+ <reg name="bc_gssm" bitsize="64" type="uint64" group="gs"/>
+ <reg name="bc_gsepla" bitsize="64" type="data_ptr" group="gs"/>
+</feature>
--- /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 @@
+<?xml version="1.0"?>
+<!-- Copyright (C) 2017 Free Software Foundation, Inc.
+
+ Copying and distribution of this file, with or without modification,
+ are permitted in any medium without royalty provided the copyright
+ notice and this notice are preserved. -->
+
+<!-- S/390 64-bit user-level code. -->
+
+<!DOCTYPE target SYSTEM "gdb-target.dtd">
+<target>
+ <architecture>s390:64-bit</architecture>
+ <xi:include href="s390x-core64.xml"/>
+ <xi:include href="s390-acr.xml"/>
+ <xi:include href="s390-fpr.xml"/>
+
+ <feature name="org.gnu.gdb.s390.linux">
+ <reg name="orig_r2" bitsize="64" type="uint64" group="system"/>
+ <reg name="last_break" bitsize="64" type="code_ptr" group="system" save-restore="no"/>
+ <reg name="system_call" bitsize="32" type="uint32" group="system"/>
+ </feature>
+
+ <xi:include href="s390-tdb.xml"/>
+ <xi:include href="s390-vx.xml"/>
+ <xi:include href="s390-gs.xml"/>
+ <xi:include href="s390-gsbc.xml"/>
+</target>
--- /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

385
gdb-rhbz1498758-3of5.patch Executable file
View File

@ -0,0 +1,385 @@
commit 1b63490c9173f8c9770b7885def720516aa9b9f8
Author: Andreas Arnez <arnez@linux.vnet.ibm.com>
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) <have_gs>: 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 <arnez@linux.vnet.ibm.com>
+ * 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) <have_gs>: 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 <arnez@linux.vnet.ibm.com>
+
* 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

275
gdb-rhbz1498758-4of5.patch Executable file
View File

@ -0,0 +1,275 @@
commit ad3396348e0ebb61fdf71cff307bac08175ed366
Author: Andreas Arnez <arnez@linux.vnet.ibm.com>
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) <S390_TDESC_GS>: 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 <arnez@linux.vnet.ibm.com>
+
+ * 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) <S390_TDESC_GS>: 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 <simon.marchi@ericsson.com>
* 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

View File

@ -0,0 +1,63 @@
commit 289e23aa03084b22c73ebdcf18371f1e6666ead0
Author: Andreas Arnez <arnez@linux.vnet.ibm.com>
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 <arnez@linux.vnet.ibm.com>
+ * NEWS: Advertise support for guarded-storage registers on IBM z.
+
+2017-09-25 Andreas Arnez <arnez@linux.vnet.ibm.com>
+
* 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

View File

@ -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: 26%{?dist}
Release: 30%{?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
@ -114,7 +114,7 @@ Recommends: default-yama-scope
%if 0%{?el7:1}
%global librpmver 3
%else
%if 0%{?fedora} >= 27
%if 0%{?fedora} >= 27 || 0%{?rhel} > 7
%global librpmver 8
%else
%global librpmver 7
@ -726,6 +726,17 @@ 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
# Use inlined func name for printing breakpoints (RH BZ 1228556, Keith Seitz).
Patch1261: gdb-rhbz1228556-bpt-inlined-func-name-1of2.patch
Patch1262: gdb-rhbz1228556-bpt-inlined-func-name-2of2.patch
%if 0%{!?rhel:1} || 0%{?rhel} > 6
# RL_STATE_FEDORA_GDB would not be found for:
# Patch642: gdb-readline62-ask-more-rh.patch
@ -762,7 +773,7 @@ BuildRequires: texlive-collection-latexrecommended
%endif
# Permit rebuilding *.[0-9] files even if they are distributed in gdb-*.tar:
BuildRequires: /usr/bin/pod2man
%if 0%{!?rhel:1}
%if 0%{!?rhel:1} || 0%{?rhel} > 7
BuildRequires: libbabeltrace-devel%{buildisa}
BuildRequires: guile-devel%{buildisa}
%endif
@ -834,7 +845,7 @@ BuildRequires: prelink
BuildRequires: libmpx%{bits_local} libmpx%{bits_other}
BuildRequires: opencl-headers ocl-icd-devel%{bits_local} ocl-icd-devel%{bits_other}
%endif
%if 0%{!?rhel:1}
%if 0%{!?rhel:1} || 0%{?rhel} > 7
# Fedora arm+ppc64le do not yet have fpc built.
%ifnarch %{arm} ppc64le
BuildRequires: fpc
@ -1133,6 +1144,13 @@ done
%patch1152 -p1
%patch1153 -p1
%patch1155 -p1
%patch1255 -p1
%patch1256 -p1
%patch1257 -p1
%patch1258 -p1
%patch1259 -p1
%patch1261 -p1
%patch1262 -p1
%patch1075 -p1
%if 0%{?rhel:1} && 0%{?rhel} <= 7
@ -1263,7 +1281,7 @@ export CXXFLAGS="$CFLAGS"
--with-separate-debug-dir=/usr/lib/debug \
--disable-sim \
--disable-rpath \
%if 0%{!?rhel:1}
%if 0%{!?rhel:1} || 0%{?rhel} > 7
--with-babeltrace \
--with-guile \
%else
@ -1596,7 +1614,7 @@ rm -f $RPM_BUILD_ROOT%{_infodir}/stabs*
rm -f $RPM_BUILD_ROOT%{_infodir}/dir
%if 0%{?rhel:1}
%if 0%{?rhel:1} && 0%{?rhel} <= 7
# /usr/share/gdb/guile/ gets installed even --without-guile
# https://sourceware.org/bugzilla/show_bug.cgi?id=17105
rm -rf $RPM_BUILD_ROOT%{_datadir}/gdb/guile
@ -1715,6 +1733,18 @@ then
fi
%changelog
* Fri Oct 27 2017 Jan Kratochvil <jan.kratochvil@redhat.com> - 8.0.1-30.fc26
- Use inlined func name for printing breakpoints (RH BZ 1228556, Keith Seitz).
* Sat Oct 7 2017 Jan Kratochvil <jan.kratochvil@redhat.com> - 8.0.1-29.fc26
- [s390x] Backport arch14 guarded-storage register support (RH BZ 1498758).
* Thu Sep 28 2017 Jan Kratochvil <jan.kratochvil@redhat.com> - 8.0.1-28.fc26
- Performance fix of gcore to use --readnever (for RH BZ 1493675).
* Tue Sep 26 2017 Troy Dawson <tdawson@redhat.com> - 8.0.1-27.fc26
- Cleanup spec file conditionals
* Tue Sep 12 2017 Jan Kratochvil <jan.kratochvil@redhat.com> - 8.0.1-26.fc26
- Rebase to FSF GDB 8.0.1 (8.0 stable branch).