From 155ce8e8fd0b5d85b2847702345f3518603b57c9 Mon Sep 17 00:00:00 2001 From: Ulrich Weigand Date: Fri, 13 Sep 2013 14:17:29 +0000 Subject: gdb/ChangeLog: 2013-09-13 Andreas Arnez * NEWS: Mention TDB support. * features/s390-tdb.xml: New file. * features/s390-te-linux64.xml: New file. * features/s390x-te-linux64.xml: New file. * features/Makefile (WHICH): Add new tdescs above. (s390-te-linux64-expedite): Set. (s390x-te-linux64-expedite): Set. * features/s390-te-linux64.c: New file (generated). * features/s390x-te-linux64.c: New file (generated). * regformats/s390-te-linux64.dat: New file (generated). * regformats/s390x-te-linux64.dat: New file (generated). * s390-tdep.h (HWCAP_S390_HIGH_GPRS): Define. (HWCAP_S390_TE): Likewise. (S390_TDB_DWORD0_REGNUM): Likewise. (S390_TDB_DWORD0_REGNUM): Likewise. (S390_TDB_ABORT_CODE_REGNUM): Likewise. (S390_TDB_CONFLICT_TOKEN_REGNUM): Likewise. (S390_TDB_ATIA_REGNUM): Likewise. (S390_TDB_R0_REGNUM): Likewise. (S390_TDB_R1_REGNUM): Likewise. (S390_TDB_R2_REGNUM): Likewise. (S390_TDB_R3_REGNUM): Likewise. (S390_TDB_R4_REGNUM): Likewise. (S390_TDB_R5_REGNUM): Likewise. (S390_TDB_R6_REGNUM): Likewise. (S390_TDB_R7_REGNUM): Likewise. (S390_TDB_R8_REGNUM): Likewise. (S390_TDB_R9_REGNUM): Likewise. (S390_TDB_R10_REGNUM): Likewise. (S390_TDB_R11_REGNUM): Likewise. (S390_TDB_R12_REGNUM): Likewise. (S390_TDB_R13_REGNUM): Likewise. (S390_TDB_R14_REGNUM): Likewise. (S390_TDB_R15_REGNUM): Likewise. (S390_NUM_REGS): Increase. (S390_IS_TDBREGSET_REGNUM): New macro. (s390_regmap_tdb): Declare. (s390_sizeof_tdbregset): Define. (tdesc_s390_te_linux64): Declare. (tdesc_s390x_te_linux64): Likewise. * s390-tdep.c: Add includes for "auxv.h", , "features/s390-te-linux64.c", and "features/s390x-te-linux64.c". (s390_regmap_tdb): New regmap. (s390_supply_tdb_regset): New function. (s390_tdb_regset): New regset. (s390_linux64v2_regset_sections): Add TDB regset to list. (s390x_linux64v2_regset_sections): Likewise. (s390_regset_from_core_section): Recognize TDB core note section. (s390_core_read_description): If HWCAP indicates TE support, select tdesc_s390_te_linux64 or tdesc_s390_s390x_te_linux64. (s390_gdbarch_init): Handle TDB regset. (_initialize_s390_tdep): Initialize new tdescs. * s390-nat.c (HWCAP_S390_HIGH_GPRS): Remove define. (have_regset_tdb): New variable. (s390_native_supply): Support register invalidation. (fetch_regset): Invalidate registers if ptrace yields ENODATA. (check_regset): Treat ENODATA as "regset exists". (s390_linux_fetch_inferior_registers): Add TDB. (s390_read_description): Check for TDB existence and select appropriate tdesc. * gdbserver/Makefile.in (clean): Add removal of new makefile targets. (s390-te-linux64.c): New makefile target. (s390x-te-linux64.c): Likewise. * gdbserver/configure.srv (srv_regobj): Append new objects s390-te-linux64.o and s390x-te-linux64.o. (srv_xmlfiles): Append new files s390-te-linux64.xml, s390x-te-linux64.xml, and s390-tdb.xml. * gdbserver/linux-s390-low.c (init_registers_s390_te_linux64): New declaration. (tdesc_s390_te_linux64): Likewise. (init_registers_s390x_te_linux64): Likewise. (tdesc_s390x_te_linux64): Likewise. (s390_check_regset): Treat ENODATA as "regset exists". (s390_arch_setup): Add TDB regset support. (initialize_low_arch): Initialize registers for new tdescs. gdb/doc/ChangeLog: 2013-09-13 Andreas Arnez * gdb.texinfo (Decimal Floating Point format): Mention S/390. (Standard Target Features): Add new node to menu. (S/390 and System z Features): New node. gdb/testsuite/ChangeLog: 2013-09-13 Andreas Arnez * gdb.arch/s390-tdbregs.c: New file. * gdb.arch/s390-tdbregs.exp: New file. --- gdb/gdbserver/Makefile.in | 7 +++++++ gdb/gdbserver/configure.srv | 5 +++++ gdb/gdbserver/linux-s390-low.c | 25 +++++++++++++++++++++---- 3 files changed, 33 insertions(+), 4 deletions(-) (limited to 'gdb/gdbserver') diff --git a/gdb/gdbserver/Makefile.in b/gdb/gdbserver/Makefile.in index 1805e5a2191..e42c67f474b 100644 --- a/gdb/gdbserver/Makefile.in +++ b/gdb/gdbserver/Makefile.in @@ -336,6 +336,9 @@ clean: rm -f powerpc-isa205-altivec32l.c powerpc-isa205-vsx32l.c powerpc-isa205-altivec64l.c rm -f powerpc-isa205-vsx64l.c rm -f s390-linux32.c s390-linux64.c s390x-linux64.c + rm -f s390-linux32v1.c s390-linux32v2.c s390-linux64v1.c + rm -f s390-linux64v2.c s390x-linux64v1.c s390x-linux64v2.c + rm -f s390-te-linux32.c s390-te-linux64.c rm -f tic6x-c64xp-linux.c tic6x-c64x-linux.c tic6x-c62x-linux.c rm -f xml-builtin.c stamp-xml rm -f i386-avx.c i386-avx-linux.c @@ -631,12 +634,16 @@ s390-linux64v1.c : $(srcdir)/../regformats/s390-linux64v1.dat $(regdat_sh) $(SHELL) $(regdat_sh) $(srcdir)/../regformats/s390-linux64v1.dat s390-linux64v1.c s390-linux64v2.c : $(srcdir)/../regformats/s390-linux64v2.dat $(regdat_sh) $(SHELL) $(regdat_sh) $(srcdir)/../regformats/s390-linux64v2.dat s390-linux64v2.c +s390-te-linux64.c : $(srcdir)/../regformats/s390-te-linux64.dat $(regdat_sh) + $(SHELL) $(regdat_sh) $(srcdir)/../regformats/s390-te-linux64.dat s390-te-linux64.c s390x-linux64.c : $(srcdir)/../regformats/s390x-linux64.dat $(regdat_sh) $(SHELL) $(regdat_sh) $(srcdir)/../regformats/s390x-linux64.dat s390x-linux64.c s390x-linux64v1.c : $(srcdir)/../regformats/s390x-linux64v1.dat $(regdat_sh) $(SHELL) $(regdat_sh) $(srcdir)/../regformats/s390x-linux64v1.dat s390x-linux64v1.c s390x-linux64v2.c : $(srcdir)/../regformats/s390x-linux64v2.dat $(regdat_sh) $(SHELL) $(regdat_sh) $(srcdir)/../regformats/s390x-linux64v2.dat s390x-linux64v2.c +s390x-te-linux64.c : $(srcdir)/../regformats/s390x-te-linux64.dat $(regdat_sh) + $(SHELL) $(regdat_sh) $(srcdir)/../regformats/s390x-te-linux64.dat s390x-te-linux64.c tic6x-c64xp-linux.c : $(srcdir)/../regformats/tic6x-c64xp-linux.dat $(regdat_sh) $(SHELL) $(regdat_sh) $(srcdir)/../regformats/tic6x-c64xp-linux.dat tic6x-c64xp-linux.c diff --git a/gdb/gdbserver/configure.srv b/gdb/gdbserver/configure.srv index b3c04210fe7..6eb5a8abb89 100644 --- a/gdb/gdbserver/configure.srv +++ b/gdb/gdbserver/configure.srv @@ -259,9 +259,11 @@ case "${target}" in srv_regobj="${srv_regobj} s390-linux64.o" srv_regobj="${srv_regobj} s390-linux64v1.o" srv_regobj="${srv_regobj} s390-linux64v2.o" + srv_regobj="${srv_regobj} s390-te-linux64.o" srv_regobj="${srv_regobj} 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_tgtobj="$srv_linux_obj linux-s390-low.o" srv_xmlfiles="s390-linux32.xml" srv_xmlfiles="${srv_xmlfiles} s390-linux32v1.xml" @@ -269,14 +271,17 @@ case "${target}" in srv_xmlfiles="${srv_xmlfiles} s390-linux64.xml" srv_xmlfiles="${srv_xmlfiles} s390-linux64v1.xml" srv_xmlfiles="${srv_xmlfiles} s390-linux64v2.xml" + srv_xmlfiles="${srv_xmlfiles} s390-te-linux64.xml" srv_xmlfiles="${srv_xmlfiles} 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} s390-core32.xml" srv_xmlfiles="${srv_xmlfiles} s390-core64.xml" srv_xmlfiles="${srv_xmlfiles} s390x-core64.xml" srv_xmlfiles="${srv_xmlfiles} s390-acr.xml" srv_xmlfiles="${srv_xmlfiles} s390-fpr.xml" + srv_xmlfiles="${srv_xmlfiles} s390-tdb.xml" srv_linux_usrregs=yes srv_linux_regsets=yes srv_linux_thread_db=yes diff --git a/gdb/gdbserver/linux-s390-low.c b/gdb/gdbserver/linux-s390-low.c index 18d6370b899..a2df03736cf 100644 --- a/gdb/gdbserver/linux-s390-low.c +++ b/gdb/gdbserver/linux-s390-low.c @@ -64,6 +64,10 @@ extern const struct target_desc *tdesc_s390_linux64v1; void init_registers_s390_linux64v2 (void); extern const struct target_desc *tdesc_s390_linux64v2; +/* Defined in auto-generated file s390-te-linux64.c. */ +void init_registers_s390_te_linux64 (void); +extern const struct target_desc *tdesc_s390_te_linux64; + /* Defined in auto-generated file s390x-linux64.c. */ void init_registers_s390x_linux64 (void); extern const struct target_desc *tdesc_s390x_linux64; @@ -76,6 +80,10 @@ extern const struct target_desc *tdesc_s390x_linux64v1; void init_registers_s390x_linux64v2 (void); extern const struct target_desc *tdesc_s390x_linux64v2; +/* Defined in auto-generated file s390x-te-linux64.c. */ +void init_registers_s390x_te_linux64 (void); +extern const struct target_desc *tdesc_s390x_te_linux64; + #define s390_num_regs 52 static int s390_regmap[] = { @@ -391,10 +399,10 @@ s390_check_regset (int pid, int regset, int regsize) iov.iov_base = buf; iov.iov_len = regsize; - if (ptrace (PTRACE_GETREGSET, pid, (long) regset, (long) &iov) < 0) - return 0; - else + if (ptrace (PTRACE_GETREGSET, pid, (long) regset, (long) &iov) >= 0 + || errno == ENODATA) return 1; + return 0; } #ifdef __s390x__ @@ -415,6 +423,7 @@ s390_arch_setup (void) = s390_check_regset (pid, NT_S390_LAST_BREAK, 8); int have_regset_system_call = s390_check_regset (pid, NT_S390_SYSTEM_CALL, 4); + int have_regset_tdb = s390_check_regset (pid, NT_S390_TDB, 256); /* Update target_regsets according to available register sets. */ for (regset = s390_regsets; regset->fill_function != NULL; regset++) @@ -427,6 +436,8 @@ s390_arch_setup (void) case NT_S390_SYSTEM_CALL: regset->size = have_regset_system_call? 4 : 0; break; + case NT_S390_TDB: + regset->size = have_regset_tdb ? 256 : 0; default: break; } @@ -451,6 +462,8 @@ s390_arch_setup (void) if (pswm & 1) { + if (have_regset_tdb) + tdesc = tdesc_s390x_te_linux64; if (have_regset_system_call) tdesc = tdesc_s390x_linux64v2; else if (have_regset_last_break) @@ -465,7 +478,9 @@ s390_arch_setup (void) { have_hwcap_s390_high_gprs = 1; - if (have_regset_system_call) + if (have_regset_tdb) + tdesc = tdesc_s390_te_linux64; + else if (have_regset_system_call) tdesc = tdesc_s390_linux64v2; else if (have_regset_last_break) tdesc = tdesc_s390_linux64v1; @@ -575,9 +590,11 @@ initialize_low_arch (void) init_registers_s390_linux64 (); init_registers_s390_linux64v1 (); init_registers_s390_linux64v2 (); + init_registers_s390_te_linux64 (); init_registers_s390x_linux64 (); init_registers_s390x_linux64v1 (); init_registers_s390x_linux64v2 (); + init_registers_s390x_te_linux64 (); initialize_regsets_info (&s390_regsets_info); #ifdef __s390x__ -- cgit v1.2.1