Mail archive
alpine-aports

[alpine-aports] [PATCH 2/7] main/gdb: add s390x support

From: Tuan M. Hoang <tmhoang_at_flatglobe.org>
Date: Fri, 17 Mar 2017 07:02:46 -0400

---
 main/gdb/APKBUILD                           |   8 +-
 main/gdb/s390x-use-elf-gdb_fpregset_t.patch | 156 ++++++++++++++++++++++++++++
 2 files changed, 160 insertions(+), 4 deletions(-)
 create mode 100644 main/gdb/s390x-use-elf-gdb_fpregset_t.patch
diff --git a/main/gdb/APKBUILD b/main/gdb/APKBUILD
index 8b0b8f5d31..cce676fa8e 100644
--- a/main/gdb/APKBUILD
+++ b/main/gdb/APKBUILD
_at_@ -10,7 +10,8 @@ depends=
 makedepends="ncurses-dev expat-dev texinfo readline-dev python2-dev
 	zlib-dev autoconf automake libtool linux-headers perl"
 subpackages="$pkgname-doc"
-source="https://ftp.gnu.org/gnu/$pkgname/$pkgname-$pkgver.tar.xz"
+source="https://ftp.gnu.org/gnu/$pkgname/$pkgname-$pkgver.tar.xz
+	s390x-use-elf-gdb_fpregset_t.patch"
 builddir="$srcdir"/$pkgname-$pkgver
 
 build () {
_at_@ -53,6 +54,5 @@ package() {
 	rm -rf "$pkgdir"/usr/lib
 }
 
-md5sums="193453347ddced7acb6b1cd2ee8f2e4b  gdb-7.12.1.tar.xz"
-sha256sums="4607680b973d3ec92c30ad029f1b7dbde3876869e6b3a117d8a7e90081113186  gdb-7.12.1.tar.xz"
-sha512sums="0ac8d0a495103611ef41167a08313a010dce6ca4c6d827cbe8558a0c1a1a8a6bfa53f1b7704251289cababbfaaf9e075550cdf741a54d6cd9ca3433d910efcd8  gdb-7.12.1.tar.xz"
+sha512sums="0ac8d0a495103611ef41167a08313a010dce6ca4c6d827cbe8558a0c1a1a8a6bfa53f1b7704251289cababbfaaf9e075550cdf741a54d6cd9ca3433d910efcd8  gdb-7.12.1.tar.xz
+c3872eb51b3a42c5a33f8b7542c37fab7b0548560202e5eda740a2176cdfadff9bf73c6d26bceb225829dcb509c823acae2ccc796237ac97ebe552b82582bdf5  s390x-use-elf-gdb_fpregset_t.patch"
diff --git a/main/gdb/s390x-use-elf-gdb_fpregset_t.patch b/main/gdb/s390x-use-elf-gdb_fpregset_t.patch
new file mode 100644
index 0000000000..2b3f318da7
--- /dev/null
+++ b/main/gdb/s390x-use-elf-gdb_fpregset_t.patch
_at_@ -0,0 +1,156 @@
+The s390 versions of fill_gregset / supply_gregset and fill_fpregset /
+supply_fpregset declare the data structure to be filled or supplied from
+as gregset_t and fpregset_t, respectively, instead of gdb_gregset_t and
+gdb_fpregset_t.  This is incompatible with the declaration of these
+functions in gregset.h.
+gdb/ChangeLog:
+
+	* s390-linux-nat.c (supply_gregset, fill_gregset, fetch_regs)
+	(store_regs): Replace gregset_t by gdb_gregset_t.
+	(supply_fpregset, fill_fpregset, fetch_fpregs, store_fpregs):
+	Replace fpregset_t by gdb_fpregset_t.
+Credit to Andreas Arnez at IBM
+
+---
+ gdb/s390-linux-nat.c | 34 ++++++++++++++++++----------------
+ 1 file changed, 18 insertions(+), 16 deletions(-)
+
+diff --git a/gdb/s390-linux-nat.c b/gdb/s390-linux-nat.c
+index 55a3899..84c304f 100644
+--- a/gdb/s390-linux-nat.c
++++ b/gdb/s390-linux-nat.c
+_at_@ -100,7 +100,7 @@ static const struct regset s390_64_gregset =
+    make them look like 32-bit registers.  */
+ 
+ void
+-supply_gregset (struct regcache *regcache, const gregset_t *regp)
++supply_gregset (struct regcache *regcache, const gdb_gregset_t *regp)
+ {
+ #ifdef __s390x__
+   struct gdbarch *gdbarch = get_regcache_arch (regcache);
+_at_@ -111,7 +111,7 @@ supply_gregset (struct regcache *regcache, const gregset_t *regp)
+       gdb_byte buf[4];
+ 
+       regcache_supply_regset (&s390_64_gregset, regcache, -1,
+-			      regp, sizeof (gregset_t));
++			      regp, sizeof (gdb_gregset_t));
+       pswm = extract_unsigned_integer ((const gdb_byte *) regp
+ 				       + S390_PSWM_OFFSET, 8, byte_order);
+       pswa = extract_unsigned_integer ((const gdb_byte *) regp
+_at_@ -126,7 +126,7 @@ supply_gregset (struct regcache *regcache, const gregset_t *regp)
+ #endif
+ 
+   regcache_supply_regset (&s390_gregset, regcache, -1, regp,
+-			  sizeof (gregset_t));
++			  sizeof (gdb_gregset_t));
+ }
+ 
+ /* Fill register REGNO (if it is a general-purpose register) in
+_at_@ -134,14 +134,15 @@ supply_gregset (struct regcache *regcache, const gregset_t *regp)
+    do this for all registers.  */
+ 
+ void
+-fill_gregset (const struct regcache *regcache, gregset_t *regp, int regno)
++fill_gregset (const struct regcache *regcache, gdb_gregset_t *regp,
++	      int regno)
+ {
+ #ifdef __s390x__
+   struct gdbarch *gdbarch = get_regcache_arch (regcache);
+   if (gdbarch_ptr_bit (gdbarch) == 32)
+     {
+       regcache_collect_regset (&s390_64_gregset, regcache, regno,
+-			       regp, sizeof (gregset_t));
++			       regp, sizeof (gdb_gregset_t));
+ 
+       if (regno == -1
+ 	  || regno == S390_PSWM_REGNUM || regno == S390_PSWA_REGNUM)
+_at_@ -178,26 +179,27 @@ fill_gregset (const struct regcache *regcache, gregset_t *regp, int regno)
+ #endif
+ 
+   regcache_collect_regset (&s390_gregset, regcache, regno, regp,
+-			   sizeof (gregset_t));
++			   sizeof (gdb_gregset_t));
+ }
+ 
+ /* Fill GDB's register array with the floating-point register values
+    in *REGP.  */
+ void
+-supply_fpregset (struct regcache *regcache, const fpregset_t *regp)
++supply_fpregset (struct regcache *regcache, const gdb_fpregset_t *regp)
+ {
+   regcache_supply_regset (&s390_fpregset, regcache, -1, regp,
+-			  sizeof (fpregset_t));
++			  sizeof (gdb_fpregset_t));
+ }
+ 
+ /* Fill register REGNO (if it is a general-purpose register) in
+    *REGP with the value in GDB's register array.  If REGNO is -1,
+    do this for all registers.  */
+ void
+-fill_fpregset (const struct regcache *regcache, fpregset_t *regp, int regno)
++fill_fpregset (const struct regcache *regcache, gdb_fpregset_t *regp,
++	       int regno)
+ {
+   regcache_collect_regset (&s390_fpregset, regcache, regno, regp,
+-			   sizeof (fpregset_t));
++			   sizeof (gdb_fpregset_t));
+ }
+ 
+ /* Find the TID for the current inferior thread to use with ptrace.  */
+_at_@ -217,7 +219,7 @@ s390_inferior_tid (void)
+ static void
+ fetch_regs (struct regcache *regcache, int tid)
+ {
+-  gregset_t regs;
++  gdb_gregset_t regs;
+   ptrace_area parea;
+ 
+   parea.len = sizeof (regs);
+_at_@ -226,7 +228,7 @@ fetch_regs (struct regcache *regcache, int tid)
+   if (ptrace (PTRACE_PEEKUSR_AREA, tid, (long) &parea, 0) < 0)
+     perror_with_name (_("Couldn't get registers"));
+ 
+-  supply_gregset (regcache, (const gregset_t *) &regs);
++  supply_gregset (regcache, (const gdb_gregset_t *) &regs);
+ }
+ 
+ /* Store all valid general-purpose registers in GDB's register cache
+_at_@ -234,7 +236,7 @@ fetch_regs (struct regcache *regcache, int tid)
+ static void
+ store_regs (const struct regcache *regcache, int tid, int regnum)
+ {
+-  gregset_t regs;
++  gdb_gregset_t regs;
+   ptrace_area parea;
+ 
+   parea.len = sizeof (regs);
+_at_@ -254,7 +256,7 @@ store_regs (const struct regcache *regcache, int tid, int regnum)
+ static void
+ fetch_fpregs (struct regcache *regcache, int tid)
+ {
+-  fpregset_t fpregs;
++  gdb_fpregset_t fpregs;
+   ptrace_area parea;
+ 
+   parea.len = sizeof (fpregs);
+_at_@ -263,7 +265,7 @@ fetch_fpregs (struct regcache *regcache, int tid)
+   if (ptrace (PTRACE_PEEKUSR_AREA, tid, (long) &parea, 0) < 0)
+     perror_with_name (_("Couldn't get floating point status"));
+ 
+-  supply_fpregset (regcache, (const fpregset_t *) &fpregs);
++  supply_fpregset (regcache, (const gdb_fpregset_t *) &fpregs);
+ }
+ 
+ /* Store all valid floating-point registers in GDB's register cache
+_at_@ -271,7 +273,7 @@ fetch_fpregs (struct regcache *regcache, int tid)
+ static void
+ store_fpregs (const struct regcache *regcache, int tid, int regnum)
+ {
+-  fpregset_t fpregs;
++  gdb_fpregset_t fpregs;
+   ptrace_area parea;
+ 
+   parea.len = sizeof (fpregs);
+-- 
+1.8.5.6
+
-- 
2.11.1
---
Unsubscribe:  alpine-aports+unsubscribe_at_lists.alpinelinux.org
Help:         alpine-aports+help_at_lists.alpinelinux.org
---
Received on Fri Mar 17 2017 - 07:02:46 GMT