summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--system/binutils/APKBUILD8
-rw-r--r--system/binutils/ppc64-test-failure.patch12
-rw-r--r--system/binutils/srec.patch127
3 files changed, 131 insertions, 16 deletions
diff --git a/system/binutils/APKBUILD b/system/binutils/APKBUILD
index fb077c41e..47b3609a2 100644
--- a/system/binutils/APKBUILD
+++ b/system/binutils/APKBUILD
@@ -1,7 +1,7 @@
# Maintainer: Adelie Platform Group <adelie-devel@lists.adelielinux.org>
pkgname=binutils
pkgver=2.32
-pkgrel=0
+pkgrel=1
pkgdesc="Tools necessary to build programs"
url="https://www.gnu.org/software/binutils/"
depends=""
@@ -19,10 +19,10 @@ source="https://ftp.gnu.org/gnu/$pkgname/$pkgname-$pkgver.tar.xz
disable-gnu-mbind.patch
disable-ifunc-tests.patch
disable-preinit-array-tests.patch
- ppc64-test-failure.patch
remove-pr2404-tests.patch
remove-pr19719-test.patch
remove-pr19553c-test.patch
+ srec.patch
"
if [ "$CHOST" != "$CTARGET" ]; then
@@ -121,7 +121,7 @@ ecee33b0e435aa704af1c334e560f201638ff79e199aa11ed78a72f7c9b46f85fbb227af5748e735
d378fdf1964f8f2bd0b1e62827ac5884bdf943aa435ec89c29fc84bb045d406b733fffaff8fdd8bd1cba8ddea7701c4cf6ccf3ed76a8a3df9c72b447737575a6 disable-gnu-mbind.patch
474ab24097bbb5b24433620549e5234fe65c547824c1342f693c718ffbc81e2d968259cce2d650b55200dd1ec89da207ea2db10c551cd9941285c4600b4297b2 disable-ifunc-tests.patch
3537752e63cef0b5ef136d003ff7e814ba66b12624d817430112d0f291a792e8960fa69a78036f526af835441b3ee483d6a53d55c7b3dd8ee96f0399682dbcbe disable-preinit-array-tests.patch
-11e5dcb67fa39236e69f2ea0bd5147a188ebddb60972215aad62e40bf2030d8ace85ef13defab87f7b4fa99c118af4eb249d9a58c23f287cf0c043ebecaeb032 ppc64-test-failure.patch
32ab4215669c728648179c124632467573a3d4675e79f0f0d221c22eb2ec1ca5488b79910bd09142f90a1e0d0b81d99ca4846297f4f9561f158db63745facb66 remove-pr2404-tests.patch
a193d1fa7f42d91915960460a15e4d24e0df529d81e23014bcf45d283fae76bb7b300fdcb0d0a9d521cdb9137322efa1dc357112596d6ae7a7fd05988ac359b9 remove-pr19719-test.patch
-39ef9c76dd5db6b15f11ffa8061f7ca844fb79c3fb9879c3b1466eef332a28b833597c87003ab9f260b1b85023fae264659088aee27cad7e5aa77b2d58b9a3f6 remove-pr19553c-test.patch"
+39ef9c76dd5db6b15f11ffa8061f7ca844fb79c3fb9879c3b1466eef332a28b833597c87003ab9f260b1b85023fae264659088aee27cad7e5aa77b2d58b9a3f6 remove-pr19553c-test.patch
+f720b3356b88e366c52941da056e543e4b42bc77f012e5b0290f79e15b0a31d855989ad01920680507a9df0544e5b8e26d0cf8d6f22fbdeb874af31cff4c16d3 srec.patch"
diff --git a/system/binutils/ppc64-test-failure.patch b/system/binutils/ppc64-test-failure.patch
deleted file mode 100644
index f88b20401..000000000
--- a/system/binutils/ppc64-test-failure.patch
+++ /dev/null
@@ -1,12 +0,0 @@
-Upstream bug report: https://sourceware.org/bugzilla/show_bug.cgi?id=24311
-
---- binutils-2.32/ld/testsuite/ld-srec/srec.exp.old 2019-01-19 16:01:34.000000000 +0000
-+++ binutils-2.32/ld/testsuite/ld-srec/srec.exp 2019-03-07 07:19:17.650000000 +0000
-@@ -464,6 +464,7 @@
- setup_xfail "bfin-*-linux-uclibc"
- setup_xfail "tile*-*-*"
- setup_xfail "csky*-*-*"
-+setup_xfail "powerpc64-*-musl"
-
- run_srec_test $test2 "tmpdir/sr3.o"
-
diff --git a/system/binutils/srec.patch b/system/binutils/srec.patch
new file mode 100644
index 000000000..ce3eac10b
--- /dev/null
+++ b/system/binutils/srec.patch
@@ -0,0 +1,127 @@
+X-Git-Url: https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;a=blobdiff_plain;f=bfd%2Fmerge.c;h=632c852390355829f95e149b7d72f0982a1a0b2b;hp=fb7c0858bebb27b5375564054c148b2b68124554;hb=ebd2263ba9a9124d93bbc0ece63d7e0fae89b40e;hpb=65d8004072ccb15441c143c380949d785a8446cd
+
+diff --git a/bfd/merge.c b/bfd/merge.c
+index fb7c085..632c852 100644
+--- a/bfd/merge.c
++++ b/bfd/merge.c
+@@ -621,7 +621,7 @@ is_suffix (const struct sec_merge_hash_entry *A,
+
+ /* This is a helper function for _bfd_merge_sections. It attempts to
+ merge strings matching suffixes of longer strings. */
+-static bfd_boolean
++static struct sec_merge_sec_info *
+ merge_strings (struct sec_merge_info *sinfo)
+ {
+ struct sec_merge_hash_entry **array, **a, *e;
+@@ -633,7 +633,7 @@ merge_strings (struct sec_merge_info *sinfo)
+ amt = sinfo->htab->size * sizeof (struct sec_merge_hash_entry *);
+ array = (struct sec_merge_hash_entry **) bfd_malloc (amt);
+ if (array == NULL)
+- return FALSE;
++ return NULL;
+
+ for (e = sinfo->htab->first, a = array; e; e = e->next)
+ if (e->alignment)
+@@ -703,11 +703,6 @@ merge_strings (struct sec_merge_info *sinfo)
+ }
+ }
+ secinfo->sec->size = size;
+- if (secinfo->sec->alignment_power != 0)
+- {
+- bfd_size_type align = (bfd_size_type) 1 << secinfo->sec->alignment_power;
+- secinfo->sec->size = (secinfo->sec->size + align - 1) & -align;
+- }
+
+ /* And now adjust the rest, removing them from the chain (but not hashtable)
+ at the same time. */
+@@ -724,7 +719,7 @@ merge_strings (struct sec_merge_info *sinfo)
+ e->u.index = e->u.suffix->u.index + (e->u.suffix->len - e->len);
+ }
+ }
+- return TRUE;
++ return secinfo;
+ }
+
+ /* This function is called once after all SEC_MERGE sections are registered
+@@ -740,7 +735,8 @@ _bfd_merge_sections (bfd *abfd,
+
+ for (sinfo = (struct sec_merge_info *) xsinfo; sinfo; sinfo = sinfo->next)
+ {
+- struct sec_merge_sec_info * secinfo;
++ struct sec_merge_sec_info *secinfo;
++ bfd_size_type align;
+
+ if (! sinfo->chain)
+ continue;
+@@ -751,6 +747,7 @@ _bfd_merge_sections (bfd *abfd,
+ secinfo->next = NULL;
+
+ /* Record the sections into the hash table. */
++ align = 1;
+ for (secinfo = sinfo->chain; secinfo; secinfo = secinfo->next)
+ if (secinfo->sec->flags & SEC_EXCLUDE)
+ {
+@@ -758,18 +755,25 @@ _bfd_merge_sections (bfd *abfd,
+ if (remove_hook)
+ (*remove_hook) (abfd, secinfo->sec);
+ }
+- else if (! record_section (sinfo, secinfo))
+- return FALSE;
+-
+- if (secinfo)
+- continue;
++ else
++ {
++ if (!record_section (sinfo, secinfo))
++ return FALSE;
++ if (align)
++ {
++ align = (bfd_size_type) 1 << secinfo->sec->alignment_power;
++ if ((secinfo->sec->size & (align - 1)) != 0)
++ align = 0;
++ }
++ }
+
+ if (sinfo->htab->first == NULL)
+ continue;
+
+ if (sinfo->htab->strings)
+ {
+- if (!merge_strings (sinfo))
++ secinfo = merge_strings (sinfo);
++ if (!secinfo)
+ return FALSE;
+ }
+ else
+@@ -789,8 +793,7 @@ _bfd_merge_sections (bfd *abfd,
+ e->secinfo->first_str = e;
+ size = 0;
+ }
+- size = (size + e->alignment - 1)
+- & ~((bfd_vma) e->alignment - 1);
++ size = (size + e->alignment - 1) & ~((bfd_vma) e->alignment - 1);
+ e->u.index = size;
+ size += e->len;
+ secinfo = e->secinfo;
+@@ -798,11 +801,16 @@ _bfd_merge_sections (bfd *abfd,
+ secinfo->sec->size = size;
+ }
+
+- /* Finally remove all input sections which have not made it into
+- the hash table at all. */
+- for (secinfo = sinfo->chain; secinfo; secinfo = secinfo->next)
+- if (secinfo->first_str == NULL)
+- secinfo->sec->flags |= SEC_EXCLUDE | SEC_KEEP;
++ /* If the input sections were padded according to their alignments,
++ then pad the output too. */
++ if (align)
++ secinfo->sec->size = (secinfo->sec->size + align - 1) & -align;
++
++ /* Finally remove all input sections which have not made it into
++ the hash table at all. */
++ for (secinfo = sinfo->chain; secinfo; secinfo = secinfo->next)
++ if (secinfo->first_str == NULL)
++ secinfo->sec->flags |= SEC_EXCLUDE | SEC_KEEP;
+ }
+
+ return TRUE;