Mail archive
alpine-aports

[alpine-aports] [PATCH 2/2] testing/gdb-embedded: New aport

From: Marian Buschsieweke <marian.buschsieweke_at_ovgu.de>
Date: Tue, 10 Jul 2018 09:56:21 +0200

The GNU Debugger for embedded targets
https://www.sourceware.org/gdb/

Provides gdb-avr and gdb-arm-none-eabi as subpackages.
---
 testing/gdb-embedded/APKBUILD                 |  90 ++++++++++
 testing/gdb-embedded/ppc-musl.patch           |  93 +++++++++++
 testing/gdb-embedded/ppc-ptregs.patch         |  10 ++
 .../s390x-use-elf-gdb_fpregset_t.patch        | 156 ++++++++++++++++++
 4 files changed, 349 insertions(+)
 create mode 100644 testing/gdb-embedded/APKBUILD
 create mode 100644 testing/gdb-embedded/ppc-musl.patch
 create mode 100644 testing/gdb-embedded/ppc-ptregs.patch
 create mode 100644 testing/gdb-embedded/s390x-use-elf-gdb_fpregset_t.patch
diff --git a/testing/gdb-embedded/APKBUILD b/testing/gdb-embedded/APKBUILD
new file mode 100644
index 0000000000..0eb3095fe5
--- /dev/null
+++ b/testing/gdb-embedded/APKBUILD
_at_@ -0,0 +1,90 @@
+# Maintainer: Marian Buschsieweke <marian.buschsieweke_at_ovgu.de>
+_targets="arm-none-eabi avr"
+_realname=gdb
+pkgname=$_realname-embedded
+pkgver=8.0.1
+pkgrel=6
+pkgdesc="The GNU Debugger for embedded targets"
+url="https://www.sourceware.org/gdb/"
+arch="all"
+license="GPL-3.0"
+depends="gdb"
+makedepends="ncurses-dev expat-dev texinfo readline-dev python3-dev
+	zlib-dev autoconf automake libtool linux-headers perl"
+options="!check"
+source="https://ftp.gnu.org/gnu/$_realname/$_realname-$pkgver.tar.xz
+	s390x-use-elf-gdb_fpregset_t.patch
+	ppc-musl.patch
+	ppc-ptregs.patch"
+subpackages="gdb-avr:avr gdb-arm-none-eabi:arm"
+builddir="$srcdir"/$_realname-$pkgver
+
+build () {
+	for target in $_targets; do
+		mkdir -p "$srcdir/build/$target"
+		cd "$srcdir/build/$target"
+		_config="
+			--build=$CBUILD
+			--host=$CHOST
+			--prefix=/usr
+			--bindir=/usr/bin
+			--libexecdir=/usr/lib
+			--libdir=/usr/lib
+			--target=$target
+			--with-build-sysroot=$CBUILDROOT
+			--with-python=/usr/bin/python3
+			--datarootdir=/usr/share
+			--disable-nls
+			--disable-werror
+			--with-system-readline
+			--with-system-zlib
+			--mandir=/deleteme/man
+			--infodir=/deleteme/info
+			--pdfdir=/deleteme/pdf
+			--htmldir=/deleteme/html"
+
+		# use system readline if not cross compiling
+		[ "$CBUILD" = "$CHOST" ] && _config="$_config --with-system-readline"
+
+		# use system zlib if not cross compiling
+		[ "$CBUILD" = "$CHOST" ] && _config="$_config --with-system-zlib"
+
+		# avoid generation of mangled and non-mangled objects on ppc64
+		[ "$CARCH" = ppc64le ] && _config="$_config --enable-build-with-cxx=no"
+
+		"$builddir/configure" $_config || return 1
+		#(cd opcodes && ./configure $_config) || return 1
+		make || return 1
+	done
+}
+
+package() {
+	mkdir -p "$pkgdir"
+}
+
+_subpkg() {
+	pkgdesc="The GNU Debugger for $1"
+	cd "$srcdir/build/$1"
+	make DESTDIR="$subpkgdir" install || return 1
+
+	rm -rf "$subpkgdir"/deleteme
+
+	# those are provided by gdb
+	rm -rf "$subpkgdir"/usr/share
+	# those are provided by binutils
+	rm -rf "$subpkgdir"/usr/include
+	rm -rf "$subpkgdir"/usr/lib
+}
+
+arm() {
+	_subpkg arm-none-eabi
+}
+
+avr() {
+	_subpkg avr
+}
+
+sha512sums="5eb328910033f0918058be2f92caebf1e8dfc6caa3c730d99d621627e53de3c1b43761c2f683d53555893253c2f06768cbf56cdea051a3d291ffb6cfae87b5e1  gdb-8.0.1.tar.xz
+c3872eb51b3a42c5a33f8b7542c37fab7b0548560202e5eda740a2176cdfadff9bf73c6d26bceb225829dcb509c823acae2ccc796237ac97ebe552b82582bdf5  s390x-use-elf-gdb_fpregset_t.patch
+04911f87904b62dd7662435f9182b20485afb29ddb3d6398a9d31fef13495f7b70639c77fdae3a40e2775e270d7cd40d0cfd7ddf832372b506808d33c8301e01  ppc-musl.patch
+b75e1c1ee503a1948a7d5b8d90427b5c7d38ded69978056cee0adca222771a5c95ed1ac73127fcae7b795ea94296344eee5fca47e4cd04b418c164a756fb0933  ppc-ptregs.patch"
diff --git a/testing/gdb-embedded/ppc-musl.patch b/testing/gdb-embedded/ppc-musl.patch
new file mode 100644
index 0000000000..70cfa18e47
--- /dev/null
+++ b/testing/gdb-embedded/ppc-musl.patch
_at_@ -0,0 +1,93 @@
+--- a/gdb/nat/ppc-linux.h
++++ b/gdb/nat/ppc-linux.h
+_at_@ -18,7 +18,90 @@
+ #ifndef PPC_LINUX_H
+ #define PPC_LINUX_H 1
+ 
++#if defined(__GLIBC__) || defined(__UCLIBC__)
+ #include <asm/ptrace.h>
++#else // Musl
++// Do not include ptrace.h from Linux headers and since
++// Musl does not define PT_*, define them:
++
++#define PT_R0   0
++#define PT_R1   1
++#define PT_R2   2
++#define PT_R3   3
++#define PT_R4   4
++#define PT_R5   5
++#define PT_R6   6
++#define PT_R7   7
++#define PT_R8   8
++#define PT_R9   9
++#define PT_R10  10
++#define PT_R11  11
++#define PT_R12  12
++#define PT_R13  13
++#define PT_R14  14
++#define PT_R15  15
++#define PT_R16  16
++#define PT_R17  17
++#define PT_R18  18
++#define PT_R19  19
++#define PT_R20  20
++#define PT_R21  21
++#define PT_R22  22
++#define PT_R23  23
++#define PT_R24  24
++#define PT_R25  25
++#define PT_R26  26
++#define PT_R27  27
++#define PT_R28  28
++#define PT_R29  29
++#define PT_R30  30
++#define PT_R31  31
++
++#define PT_NIP  32
++#define PT_MSR  33
++#define PT_ORIG_R3 34
++#define PT_CTR  35
++#define PT_LNK  36
++#define PT_XER  37
++#define PT_CCR  38
++#ifndef __powerpc64__
++#define PT_MQ   39
++#else
++#define PT_SOFTE 39
++#endif
++#define PT_TRAP 40
++#define PT_DAR  41
++#define PT_DSISR 42
++#define PT_RESULT 43
++#define PT_DSCR 44
++#define PT_REGS_COUNT 44
++
++#define PT_FPR0 48      /* each FP reg occupies 2 slots in this space */
++
++#ifndef __powerpc64__
++
++#define PT_FPR31 (PT_FPR0 + 2*31)
++#define PT_FPSCR (PT_FPR0 + 2*32 + 1)
++
++#else /* __powerpc64__ */
++
++#define PT_FPSCR (PT_FPR0 + 32) /* each FP reg occupies 1 slot in 64-bit space */
++
++
++#define PT_VR0 82       /* each Vector reg occupies 2 slots in 64-bit */
++#define PT_VSCR (PT_VR0 + 32*2 + 1)
++#define PT_VRSAVE (PT_VR0 + 33*2)
++
++
++/*
++ * Only store first 32 VSRs here. The second 32 VSRs in VR0-31
++  */
++#define PT_VSR0 150     /* each VSR reg occupies 2 slots in 64-bit */
++#define PT_VSR31 (PT_VSR0 + 2*31)
++#endif /* __powerpc64__ */
++
++#endif // Libc 
++
+ #include <asm/cputable.h>
+ 
+ /* This sometimes isn't defined.  */
diff --git a/testing/gdb-embedded/ppc-ptregs.patch b/testing/gdb-embedded/ppc-ptregs.patch
new file mode 100644
index 0000000000..743bd2e6d2
--- /dev/null
+++ b/testing/gdb-embedded/ppc-ptregs.patch
_at_@ -0,0 +1,10 @@
+--- a/gdb/gdbserver/linux-ppc-low.c
++++ b/gdb/gdbserver/linux-ppc-low.c
+_at_@ -21,7 +21,6 @@
+ #include "linux-low.h"
+ 
+ #include <elf.h>
+-#include <asm/ptrace.h>
+ 
+ #include "nat/ppc-linux.h"
+ #include "linux-ppc-tdesc.h"
diff --git a/testing/gdb-embedded/s390x-use-elf-gdb_fpregset_t.patch b/testing/gdb-embedded/s390x-use-elf-gdb_fpregset_t.patch
new file mode 100644
index 0000000000..2b3f318da7
--- /dev/null
+++ b/testing/gdb-embedded/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.18.0
---
Unsubscribe:  alpine-aports+unsubscribe_at_lists.alpinelinux.org
Help:         alpine-aports+help_at_lists.alpinelinux.org
---
Received on Tue Jul 10 2018 - 09:56:21 GMT