Subject: [alpine-aports] [PATCH 1/2] testing/avarice: New aport

From: Marian Buschsieweke <[email-masked]>
Date: Tue, 10 Jul 2018 09:56:20 +0200

AVaRICE interfaces with GDB and allows debugging of AVR MCUs
http://avarice.sourceforge.net/
---
 testing/avarice/APKBUILD              | 38 +++++++++++++++++++++++++++
 testing/avarice/fix_return_type.patch | 11 ++++++++
 testing/avarice/pragma_gcc6.patch     | 38 +++++++++++++++++++++++++++
 3 files changed, 87 insertions(+)
 create mode 100644 testing/avarice/APKBUILD
 create mode 100644 testing/avarice/fix_return_type.patch
 create mode 100644 testing/avarice/pragma_gcc6.patch

diff --git a/testing/avarice/APKBUILD b/testing/avarice/APKBUILD
new file mode 100644
index 0000000000..1e3816b397
--- /dev/null
+++ b/testing/avarice/APKBUILD
@@ -0,0 +1,38 @@
+# Maintainer: Marian Buschsieweke <[email-masked]>
+pkgname=avarice
+pkgver=2.13
+pkgrel=0
+pkgdesc="AVaRICE interfaces with GDB and allows debugging of AVR MCUs"
+url="http://avarice.sourceforge.net/"
+arch="all"
+license="GPL2"
+makedepends="binutils-dev"
+depends="gdb-avr"
+subpackages="$pkgname-doc"
+source="http://downloads.sourceforge.net/$pkgname/$pkgname-$pkgver.tar.bz2
+        pragma_gcc6.patch
+        fix_return_type.patch"
+builddir="$srcdir/$pkgname-$pkgver"
+
+build() {
+	cd "$builddir"
+	./configure \
+		--build=$CBUILD \
+		--host=$CHOST \
+		--prefix=/usr
+	make
+}
+
+check() {
+	cd "$builddir"
+	make check
+}
+
+package() {
+	cd "$builddir"
+	make DESTDIR="$pkgdir" install
+}
+
+sha512sums="fa67e46061e32ec9db10bed961484ee050b219e92c2e9900ad35861b3c45161cc6ea6f2a9e63b0303242ef9992193cd963ac5871583db434409c10995b420b5f  avarice-2.13.tar.bz2
+20ea177e6d6e476e0b46e4a827271ffb54658499ad0e80ce1462aaaaeebfe2dc1de0ae5b4d919296e34f361361322e93095a31e57b46cae36d9793b163e0780c  pragma_gcc6.patch
+976bcdd80bebe3e3f68e1f22f6cdc683a6daff3d4486f8be2c567ce4349001ec30bcddde1279aba06cccfe7a602a003a393e34dd68cd70d6889911da119181e8  fix_return_type.patch"
diff --git a/testing/avarice/fix_return_type.patch b/testing/avarice/fix_return_type.patch
new file mode 100644
index 0000000000..389e5b88fd
--- /dev/null
+++ b/testing/avarice/fix_return_type.patch
@@ -0,0 +1,11 @@
+--- a/src/jtagrw.cc
++++ b/src/jtagrw.cc
+@@ -131,7 +131,7 @@
+ 	else
+ 	    numLocations = (numBytes + 1) / 2;
+ 	if (numLocations > 256)
+-	    return false;
++	    return NULL;
+ 
+ 	command[1] = whichSpace;
+ 	command[2] = numLocations - 1;
diff --git a/testing/avarice/pragma_gcc6.patch b/testing/avarice/pragma_gcc6.patch
new file mode 100644
index 0000000000..3f4cb3da99
--- /dev/null
+++ b/testing/avarice/pragma_gcc6.patch
@@ -0,0 +1,38 @@
+--- a/src/pragma.h
++++ b/src/pragma.h
+@@ -26,32 +26,8 @@
+ /*
+  * Evaluate which diagnostic pragmas can be used.
+  */
+-#if defined(__GNUC__)
+-#  if __GNUC__ > 4
+-#      define PRAGMA_DIAG_PUSH       _Pragma(GCC diagnostic push)
+-#      define PRAGMA_DIAG_POP        _Pragma(GCC diagnostic pop)
+-#      define PRAGMA_DIAG_IGNORED(x) _Pragma(GCC diagnostic ignored x)
+-#  elif __GNUC__ == 4
+-#    if __GNUC_MINOR__ >= 6
+-#      define PRAGMA_DIAG_PUSH       _Pragma("GCC diagnostic push")
+-#      define PRAGMA_DIAG_POP        _Pragma("GCC diagnostic pop")
+-#      define PRAGMA_(x)             _Pragma(#x)
+-#      define PRAGMA_DIAG_IGNORED(x) PRAGMA_(GCC diagnostic ignored x)
+-#    else
+-#      define PRAGMA_DIAG_PUSH
+-#      define PRAGMA_DIAG_POP
+-#      define PRAGMA_(x)             _Pragma(#x)
+-#      define PRAGMA_DIAG_IGNORED(x) PRAGMA_(GCC diagnostic ignored x)
+-#    endif  /* GCC 4.x */
+-#  else /* too old */
+-#      define PRAGMA_DIAG_PUSH
+-#      define PRAGMA_DIAG_POP
+-#      define PRAGMA_DIAG_IGNORED(x)
+-#  endif
+-#else /* not GCC */
+-#  define PRAGMA_DIAG_PUSH
+-#  define PRAGMA_DIAG_POP
+-#  define PRAGMA_DIAG_IGNORED(x)
+-#endif
++#define PRAGMA_DIAG_PUSH
++#define PRAGMA_DIAG_POP
++#define PRAGMA_DIAG_IGNORED(x)
+ 
+ #endif
-- 
2.18.0

---
Unsubscribe:  [email-masked]
Help:         [email-masked]
---

---

From: Marian Buschsieweke <[email-masked]>
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
@@ -0,0 +1,90 @@
+# Maintainer: Marian Buschsieweke <[email-masked]>
+_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
@@ -0,0 +1,93 @@
+--- a/gdb/nat/ppc-linux.h
++++ b/gdb/nat/ppc-linux.h
+@@ -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
@@ -0,0 +1,10 @@
+--- a/gdb/gdbserver/linux-ppc-low.c
++++ b/gdb/gdbserver/linux-ppc-low.c
+@@ -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
@@ -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
+@@ -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);
+@@ -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
+@@ -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
+@@ -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)
+@@ -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.  */
+@@ -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);
+@@ -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
+@@ -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);
+@@ -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);
+@@ -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
+@@ -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

---

---

From: Carlo Landmeter <[email-masked]>
Date: Tue, 10 Jul 2018 14:55:37 +0200

Hi

> Provides gdb-avr and gdb-arm-none-eabi as subpackages.

Why is this set to 6?

> +       zlib-dev autoconf automake libtool linux-headers perl"

Why is this disabled? If there are no checks mention it.

> +               cd "$srcdir/build/$target"

define local variables in functions

> +                       --htmldir=/deleteme/html"

Why not define a -doc subpkg?

> +               [ "$CBUILD" = "$CHOST" ] && _config="$_config

You test twice for the same thing?

> +               #(cd opcodes && ./configure $_config) || return 1

cleanup if not needed.

> +               make || return 1

It is no longer needed to explicitly return 1.

> +       mkdir -p "$pkgdir"

Your main package does nothing?
Options are, 1 install all subpkgs, 2 make one subpkg primary and depend on
it.

-carlo