diff options
-rw-r--r-- | system/gdb/APKBUILD | 63 | ||||
-rw-r--r-- | system/gdb/ppc-musl.patch | 93 | ||||
-rw-r--r-- | system/gdb/ppc-ptregs.patch | 10 | ||||
-rw-r--r-- | system/gdb/remove-extraneous-include.patch | 12 | ||||
-rw-r--r-- | system/gdb/s390x-use-elf-gdb_fpregset_t.patch | 156 |
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 *) ®s); ++ supply_gregset (regcache, (const gdb_gregset_t *) ®s); + } + + /* 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 + |