summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--system/gdb/APKBUILD63
-rw-r--r--system/gdb/ppc-musl.patch93
-rw-r--r--system/gdb/ppc-ptregs.patch10
-rw-r--r--system/gdb/remove-extraneous-include.patch12
-rw-r--r--system/gdb/s390x-use-elf-gdb_fpregset_t.patch156
5 files changed, 334 insertions, 0 deletions
diff --git a/system/gdb/APKBUILD b/system/gdb/APKBUILD
new file mode 100644
index 000000000..2bf45416d
--- /dev/null
+++ b/system/gdb/APKBUILD
@@ -0,0 +1,63 @@
+# Contributor: Natanael Copa <ncopa@alpinelinux.org>
+# Maintainer: A. Wilcox <awilfox@adelielinux.org>
+pkgname=gdb
+pkgver=8.1
+pkgrel=0
+pkgdesc="The GNU Debugger"
+url="https://www.sourceware.org/gdb/"
+arch="all"
+options="!check" # thousands of test failures
+license="GPL-3.0+"
+depends=
+makedepends="ncurses-dev expat-dev texinfo python3-dev
+ zlib-dev autoconf automake libtool linux-headers perl"
+subpackages="$pkgname-doc $pkgname-lang"
+source="https://ftp.gnu.org/gnu/$pkgname/$pkgname-$pkgver.tar.xz
+ s390x-use-elf-gdb_fpregset_t.patch
+ ppc-musl.patch
+ ppc-ptregs.patch
+ remove-extraneous-include.patch
+ "
+
+build() {
+ cd "$builddir"
+ local _config="
+ --build=$CBUILD
+ --host=$CHOST
+ --prefix=/usr
+ --target=$CTARGET
+ --with-build-sysroot=$CBUILDROOT
+ --with-python=/usr/bin/python3
+ --disable-werror
+ --mandir=/usr/share/man
+ --infodir=/usr/share/info"
+
+ # 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"
+
+ ./configure $_config
+ (cd opcodes && ./configure $_config)
+ make
+}
+
+package() {
+ cd "$builddir"
+ make DESTDIR="$pkgdir" install
+
+ # resolve conflict with binutils-doc
+ rm -f "$pkgdir"/usr/share/info/bfd.info
+ rm -f "$pkgdir"/usr/share/info/dir
+
+ # those are provided by binutils
+ rm -rf "$pkgdir"/usr/include
+ rm -rf "$pkgdir"/usr/lib
+}
+
+sha512sums="ffd82f415d7652d62dad1716c307836f594217a363429609beb7d70239e8bf06b73b393345b0e000796228e56681ed7656ac3c8be05e91d6d652ab0d5b1dc357 gdb-8.1.tar.xz
+986e68275f7692f39b5d8aedeb9f9e88f0e5bebb3f8c7f104933c525d35ca54fc90e18698c1e3e1009e8a188e5e70d6f252cb39e4c75e37db7bf479017e0da32 s390x-use-elf-gdb_fpregset_t.patch
+04911f87904b62dd7662435f9182b20485afb29ddb3d6398a9d31fef13495f7b70639c77fdae3a40e2775e270d7cd40d0cfd7ddf832372b506808d33c8301e01 ppc-musl.patch
+b75e1c1ee503a1948a7d5b8d90427b5c7d38ded69978056cee0adca222771a5c95ed1ac73127fcae7b795ea94296344eee5fca47e4cd04b418c164a756fb0933 ppc-ptregs.patch
+3ff31774ba78c1208415289566b901debd815da8b53acefe4a0785e7b2bbcff39585a556d44ff2f7d8d639ebc047620b96e72573acae376d8f23aa98dd1fe286 remove-extraneous-include.patch"
diff --git a/system/gdb/ppc-musl.patch b/system/gdb/ppc-musl.patch
new file mode 100644
index 000000000..70cfa18e4
--- /dev/null
+++ b/system/gdb/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/system/gdb/ppc-ptregs.patch b/system/gdb/ppc-ptregs.patch
new file mode 100644
index 000000000..743bd2e6d
--- /dev/null
+++ b/system/gdb/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/system/gdb/remove-extraneous-include.patch b/system/gdb/remove-extraneous-include.patch
new file mode 100644
index 000000000..62ed1300f
--- /dev/null
+++ b/system/gdb/remove-extraneous-include.patch
@@ -0,0 +1,12 @@
+--- gdb-8.1/gdb/nat/linux-osdata.c.old 2018-01-04 22:07:23.000000000 -0600
++++ gdb-8.1/gdb/nat/linux-osdata.c 2018-06-22 04:31:42.655497623 -0500
+@@ -23,7 +23,8 @@
+ #include <sys/types.h>
+ #include <sys/sysinfo.h>
+ #include <ctype.h>
+-#include <utmp.h>
++#include <limits.h>
++#define UT_NAMESIZE LOGIN_NAME_MAX
+ #include <time.h>
+ #include <unistd.h>
+ #include <pwd.h>
diff --git a/system/gdb/s390x-use-elf-gdb_fpregset_t.patch b/system/gdb/s390x-use-elf-gdb_fpregset_t.patch
new file mode 100644
index 000000000..b01582c87
--- /dev/null
+++ b/system/gdb/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 = regcache->arch ();
+ 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
+