From 829ff1a6535a2f0ff9a01b7331d8c6d7b2cab2fb Mon Sep 17 00:00:00 2001 From: Kevin Mihelich Date: Mon, 6 Aug 2018 18:06:36 +0000 Subject: [PATCH] core/binutils to 2.31.1-1 --- ...jcopy-segfault-on-fuzzed-COFF-object.patch | 29 -- ...64-Allow-R_AARCH64_ABS16-and-R_AARCH.patch | 174 ----------- ...strip-removes-PT_GNU_RELRO-from-lld-.patch | 145 --------- ...-r-s-doesnt-work-with-g3-using-GCC-7.patch | 233 --------------- ...e-IR-file-provides-symbol-visibility.patch | 275 ------------------ core/binutils/PKGBUILD | 35 +-- 6 files changed, 5 insertions(+), 886 deletions(-) delete mode 100644 core/binutils/0001-PR22741-objcopy-segfault-on-fuzzed-COFF-object.patch delete mode 100644 core/binutils/0001-PR22764-LD-AARCH64-Allow-R_AARCH64_ABS16-and-R_AARCH.patch delete mode 100644 core/binutils/0002-PR22829-objcopy-strip-removes-PT_GNU_RELRO-from-lld-.patch delete mode 100644 core/binutils/0003-PR22836-r-s-doesnt-work-with-g3-using-GCC-7.patch delete mode 100644 core/binutils/0004-PR22868-Fix-case-where-IR-file-provides-symbol-visibility.patch diff --git a/core/binutils/0001-PR22741-objcopy-segfault-on-fuzzed-COFF-object.patch b/core/binutils/0001-PR22741-objcopy-segfault-on-fuzzed-COFF-object.patch deleted file mode 100644 index 24c814ece..000000000 --- a/core/binutils/0001-PR22741-objcopy-segfault-on-fuzzed-COFF-object.patch +++ /dev/null @@ -1,29 +0,0 @@ -From eb77f6a4621795367a39cdd30957903af9dbb815 Mon Sep 17 00:00:00 2001 -From: Alan Modra -Date: Sat, 27 Jan 2018 08:19:33 +1030 -Subject: [PATCH] PR22741, objcopy segfault on fuzzed COFF object - - PR 22741 - * coffgen.c (coff_pointerize_aux): Ensure auxent tagndx is in - range before converting to a symbol table pointer. ---- - bfd/coffgen.c | 3 ++- - 1 file changed, 2 insertions(+), 1 deletion(-) - -diff --git a/bfd/coffgen.c b/bfd/coffgen.c -index b2410873d0..4f90eaddd9 100644 ---- a/bfd/coffgen.c -+++ b/bfd/coffgen.c -@@ -1555,7 +1555,8 @@ coff_pointerize_aux (bfd *abfd, - } - /* A negative tagndx is meaningless, but the SCO 3.2v4 cc can - generate one, so we must be careful to ignore it. */ -- if (auxent->u.auxent.x_sym.x_tagndx.l > 0) -+ if ((unsigned long) auxent->u.auxent.x_sym.x_tagndx.l -+ < obj_raw_syment_count (abfd)) - { - auxent->u.auxent.x_sym.x_tagndx.p = - table_base + auxent->u.auxent.x_sym.x_tagndx.l; --- -2.16.2 - diff --git a/core/binutils/0001-PR22764-LD-AARCH64-Allow-R_AARCH64_ABS16-and-R_AARCH.patch b/core/binutils/0001-PR22764-LD-AARCH64-Allow-R_AARCH64_ABS16-and-R_AARCH.patch deleted file mode 100644 index aa8d4e5dc..000000000 --- a/core/binutils/0001-PR22764-LD-AARCH64-Allow-R_AARCH64_ABS16-and-R_AARCH.patch +++ /dev/null @@ -1,174 +0,0 @@ -From c849ad001d6901825b29ddbe449e01a2e295598c Mon Sep 17 00:00:00 2001 -From: Renlin Li -Date: Sat, 3 Feb 2018 13:18:17 +0000 -Subject: [PATCH] [PR22764][LD][AARCH64]Allow R_AARCH64_ABS16 and - R_AARCH64_ABS32 against absolution symbol or undefine symbol in shared - object. - -backport from mainline - -bfd/ - -2018-02-05 Renlin Li - - PR ld/22764 - * elfnn-aarch64.c (elfNN_aarch64_check_relocs): Relax the - R_AARCH64_ABS32 and R_AARCH64_ABS16 for absolute symbol. Apply the - check for writeable section as well. - -ld/ - -2018-02-05 Renlin Li - - PR ld/22764 - * testsuite/ld-aarch64/emit-relocs-258.s: Define symbol as an address. - * testsuite/ld-aarch64/emit-relocs-259.s: Likewise. - * testsuite/ld-aarch64/aarch64-elf.exp: Run new test. - * testsuite/ld-aarch64/pr22764.s: New. - * testsuite/ld-aarch64/pr22764.d: New. ---- - bfd/ChangeLog | 7 +++++++ - bfd/elfnn-aarch64.c | 15 ++++++++++++--- - ld/ChangeLog | 8 ++++++++ - ld/testsuite/ld-aarch64/aarch64-elf.exp | 1 + - ld/testsuite/ld-aarch64/emit-relocs-258.s | 3 ++- - ld/testsuite/ld-aarch64/emit-relocs-259.s | 3 ++- - ld/testsuite/ld-aarch64/pr22764.d | 18 ++++++++++++++++++ - ld/testsuite/ld-aarch64/pr22764.s | 6 ++++++ - 8 files changed, 56 insertions(+), 5 deletions(-) - create mode 100644 ld/testsuite/ld-aarch64/pr22764.d - create mode 100644 ld/testsuite/ld-aarch64/pr22764.s - -diff --git a/bfd/ChangeLog b/bfd/ChangeLog -index c310da6ed3..9b4cc6fc86 100644 ---- a/bfd/ChangeLog -+++ b/bfd/ChangeLog -@@ -1,3 +1,10 @@ -+2018-02-05 Renlin Li -+ -+ PR ld/22764 -+ * elfnn-aarch64.c (elfNN_aarch64_check_relocs): Relax the -+ R_AARCH64_ABS32 and R_AARCH64_ABS16 for absolute symbol. Apply the -+ check for writeable section as well. -+ - 2018-01-27 Nick Clifton - - This is the 2.30 release: -diff --git a/bfd/elfnn-aarch64.c b/bfd/elfnn-aarch64.c -index d5711e0eb1..973188220b 100644 ---- a/bfd/elfnn-aarch64.c -+++ b/bfd/elfnn-aarch64.c -@@ -7074,10 +7074,19 @@ elfNN_aarch64_check_relocs (bfd *abfd, struct bfd_link_info *info, - #if ARCH_SIZE == 64 - case BFD_RELOC_AARCH64_32: - #endif -- if (bfd_link_pic (info) -- && (sec->flags & SEC_ALLOC) != 0 -- && (sec->flags & SEC_READONLY) != 0) -+ if (bfd_link_pic (info) && (sec->flags & SEC_ALLOC) != 0) - { -+ if (h != NULL -+ /* This is an absolute symbol. It represents a value instead -+ of an address. */ -+ && ((h->root.type == bfd_link_hash_defined -+ && bfd_is_abs_section (h->root.u.def.section)) -+ /* This is an undefined symbol. */ -+ || h->root.type == bfd_link_hash_undefined)) -+ break; -+ -+ /* For local symbols, defined global symbols in a non-ABS section, -+ it is assumed that the value is an address. */ - int howto_index = bfd_r_type - BFD_RELOC_AARCH64_RELOC_START; - _bfd_error_handler - /* xgettext:c-format */ -diff --git a/ld/ChangeLog b/ld/ChangeLog -index 6337cd0cb6..379d8c0e49 100644 ---- a/ld/ChangeLog -+++ b/ld/ChangeLog -@@ -1,3 +1,11 @@ -+2018-02-05 Renlin Li -+ -+ PR ld/22764 -+ * testsuite/ld-aarch64/emit-relocs-258.s: Define symbol as an address. -+ * testsuite/ld-aarch64/emit-relocs-259.s: Likewise. -+ * testsuite/ld-aarch64/pr22764.s: New. -+ * testsuite/ld-aarch64/pr22764.d: New. -+ - 2018-01-27 Nick Clifton - - This is the 2.30 release: -diff --git a/ld/testsuite/ld-aarch64/aarch64-elf.exp b/ld/testsuite/ld-aarch64/aarch64-elf.exp -index f31089361b..d766f3736b 100644 ---- a/ld/testsuite/ld-aarch64/aarch64-elf.exp -+++ b/ld/testsuite/ld-aarch64/aarch64-elf.exp -@@ -275,6 +275,7 @@ run_dump_test "pr17415" - run_dump_test_lp64 "tprel_g2_overflow" - run_dump_test "tprel_add_lo12_overflow" - run_dump_test "protected-data" -+run_dump_test_lp64 "pr22764" - - # ifunc tests - run_dump_test "ifunc-1" -diff --git a/ld/testsuite/ld-aarch64/emit-relocs-258.s b/ld/testsuite/ld-aarch64/emit-relocs-258.s -index f724776243..87bb657c5d 100644 ---- a/ld/testsuite/ld-aarch64/emit-relocs-258.s -+++ b/ld/testsuite/ld-aarch64/emit-relocs-258.s -@@ -1,5 +1,6 @@ -+.global dummy - .text -- -+dummy: - ldr x0, .L1 - - .L1: -diff --git a/ld/testsuite/ld-aarch64/emit-relocs-259.s b/ld/testsuite/ld-aarch64/emit-relocs-259.s -index 7e1ba3ceb4..0977c9d869 100644 ---- a/ld/testsuite/ld-aarch64/emit-relocs-259.s -+++ b/ld/testsuite/ld-aarch64/emit-relocs-259.s -@@ -1,5 +1,6 @@ -+.global dummy - .text -- -+dummy: - ldr x0, .L1 - - .L1: -diff --git a/ld/testsuite/ld-aarch64/pr22764.d b/ld/testsuite/ld-aarch64/pr22764.d -new file mode 100644 -index 0000000000..997519f469 ---- /dev/null -+++ b/ld/testsuite/ld-aarch64/pr22764.d -@@ -0,0 +1,18 @@ -+#source: pr22764.s -+#ld: -shared -T relocs.ld -defsym sym_abs1=0x1 -defsym sym_abs2=0x2 -defsym sym_abs3=0x3 -e0 --emit-relocs -+#notarget: aarch64_be-*-* -+#objdump: -dr -+#... -+ -+Disassembly of section \.text: -+ -+0000000000010000 \<\.text\>: -+ 10000: d503201f nop -+ ... -+ 10004: R_AARCH64_ABS64 sym_abs1 -+ 1000c: 00000002 \.word 0x00000002 -+ 1000c: R_AARCH64_ABS32 sym_abs2 -+ 10010: 0003 \.short 0x0003 -+ 10010: R_AARCH64_ABS16 sym_abs3 -+ 10012: 0000 \.short 0x0000 -+ 10014: d503201f nop -diff --git a/ld/testsuite/ld-aarch64/pr22764.s b/ld/testsuite/ld-aarch64/pr22764.s -new file mode 100644 -index 0000000000..25e36b4a12 ---- /dev/null -+++ b/ld/testsuite/ld-aarch64/pr22764.s -@@ -0,0 +1,6 @@ -+ .text -+ nop -+ .xword sym_abs1 -+ .word sym_abs2 -+ .short sym_abs3 -+ nop --- -2.17.0 - diff --git a/core/binutils/0002-PR22829-objcopy-strip-removes-PT_GNU_RELRO-from-lld-.patch b/core/binutils/0002-PR22829-objcopy-strip-removes-PT_GNU_RELRO-from-lld-.patch deleted file mode 100644 index 3b73a6a3e..000000000 --- a/core/binutils/0002-PR22829-objcopy-strip-removes-PT_GNU_RELRO-from-lld-.patch +++ /dev/null @@ -1,145 +0,0 @@ -From 3b56a1358768563d9cf320559ebdedfb30f122dd Mon Sep 17 00:00:00 2001 -From: Alan Modra -Date: Mon, 12 Feb 2018 13:06:07 +1030 -Subject: [PATCH] PR22829, objcopy/strip removes PT_GNU_RELRO from lld binaries - -lld lays out the relro segment differently to GNU ld, not bothering to -include the first few bytes of .got.plt and padding out to a page at -the end of the segment. This patch teaches binutils to recognize the -different (and somewhat inferior) layout as valid. - -bfd/ - PR 22829 - * elf.c (assign_file_positions_for_non_load_sections): Rewrite - PT_GNU_RELRO setup. -ld/ - * testsuite/ld-x86-64/pr14207.d: Adjust relro p_filesz. - -(cherry picked from commit f2731e0c374e5323ce4cdae2bcc7b7fe22da1a6f) ---- - bfd/elf.c | 78 ++++++++++++++++++++++++++-------------- - ld/testsuite/ld-x86-64/pr14207.d | 2 +- - 2 files changed, 52 insertions(+), 28 deletions(-) - -diff --git a/bfd/elf.c b/bfd/elf.c -index bbaab26918..f5a230cd77 100644 ---- a/bfd/elf.c -+++ b/bfd/elf.c -@@ -5826,50 +5826,74 @@ assign_file_positions_for_non_load_sections (bfd *abfd, - { - if (p->p_type == PT_GNU_RELRO) - { -- const Elf_Internal_Phdr *lp; -- struct elf_segment_map *lm; -+ bfd_vma start, end; - - if (link_info != NULL) - { - /* During linking the range of the RELRO segment is passed -- in link_info. */ -+ in link_info. Note that there may be padding between -+ relro_start and the first RELRO section. */ -+ start = link_info->relro_start; -+ end = link_info->relro_end; -+ } -+ else if (m->count != 0) -+ { -+ if (!m->p_size_valid) -+ abort (); -+ start = m->sections[0]->vma; -+ end = start + m->p_size; -+ } -+ else -+ { -+ start = 0; -+ end = 0; -+ } -+ -+ if (start < end) -+ { -+ struct elf_segment_map *lm; -+ const Elf_Internal_Phdr *lp; -+ unsigned int i; -+ -+ /* Find a LOAD segment containing a section in the RELRO -+ segment. */ - for (lm = elf_seg_map (abfd), lp = phdrs; - lm != NULL; - lm = lm->next, lp++) - { - if (lp->p_type == PT_LOAD -- && lp->p_vaddr < link_info->relro_end - && lm->count != 0 -- && lm->sections[0]->vma >= link_info->relro_start) -+ && lm->sections[lm->count - 1]->vma >= start -+ && lm->sections[0]->vma < end) - break; - } -- - BFD_ASSERT (lm != NULL); -- } -- else -- { -- /* Otherwise we are copying an executable or shared -- library, but we need to use the same linker logic. */ -- for (lp = phdrs; lp < phdrs + count; ++lp) -+ -+ /* Find the section starting the RELRO segment. */ -+ for (i = 0; i < lm->count; i++) - { -- if (lp->p_type == PT_LOAD -- && lp->p_paddr == p->p_paddr) -+ asection *s = lm->sections[i]; -+ if (s->vma >= start -+ && s->vma < end -+ && s->size != 0) - break; - } -- } -+ BFD_ASSERT (i < lm->count); -+ -+ p->p_vaddr = lm->sections[i]->vma; -+ p->p_paddr = lm->sections[i]->lma; -+ p->p_offset = lm->sections[i]->filepos; -+ p->p_memsz = end - p->p_vaddr; -+ p->p_filesz = p->p_memsz; -+ -+ /* The RELRO segment typically ends a few bytes into -+ .got.plt but other layouts are possible. In cases -+ where the end does not match any loaded section (for -+ instance is in file padding), trim p_filesz back to -+ correspond to the end of loaded section contents. */ -+ if (p->p_filesz > lp->p_vaddr + lp->p_filesz - p->p_vaddr) -+ p->p_filesz = lp->p_vaddr + lp->p_filesz - p->p_vaddr; - -- if (lp < phdrs + count) -- { -- p->p_vaddr = lp->p_vaddr; -- p->p_paddr = lp->p_paddr; -- p->p_offset = lp->p_offset; -- if (link_info != NULL) -- p->p_filesz = link_info->relro_end - lp->p_vaddr; -- else if (m->p_size_valid) -- p->p_filesz = m->p_size; -- else -- abort (); -- p->p_memsz = p->p_filesz; - /* Preserve the alignment and flags if they are valid. The - gold linker generates RW/4 for the PT_GNU_RELRO section. - It is better for objcopy/strip to honor these attributes -diff --git a/ld/testsuite/ld-x86-64/pr14207.d b/ld/testsuite/ld-x86-64/pr14207.d -index f6558e7cd7..41f92b8bd8 100644 ---- a/ld/testsuite/ld-x86-64/pr14207.d -+++ b/ld/testsuite/ld-x86-64/pr14207.d -@@ -13,7 +13,7 @@ Program Headers: - LOAD 0x000000 0x0000000000000000 0x0000000000000000 0x0001c8 0x0001c8 R 0x200000 - LOAD 0x000b.8 0x0000000000200b.8 0x0000000000200b.8 0x0004.0 0x000c.8 RW 0x200000 - DYNAMIC 0x000b.0 0x0000000000200b.0 0x0000000000200b.0 0x0001.0 0x0001.0 RW 0x8 -- GNU_RELRO 0x000b.8 0x0000000000200b.8 0x0000000000200b.8 0x0004.8 0x0004.8 R 0x1 -+ GNU_RELRO 0x000b.8 0x0000000000200b.8 0x0000000000200b.8 0x0004.0 0x0004.8 R 0x1 - - Section to Segment mapping: - Segment Sections... --- -2.16.2 - diff --git a/core/binutils/0003-PR22836-r-s-doesnt-work-with-g3-using-GCC-7.patch b/core/binutils/0003-PR22836-r-s-doesnt-work-with-g3-using-GCC-7.patch deleted file mode 100644 index 2f3c65244..000000000 --- a/core/binutils/0003-PR22836-r-s-doesnt-work-with-g3-using-GCC-7.patch +++ /dev/null @@ -1,233 +0,0 @@ -From d957f81cb38d7e82ae546cd03265ee3087ba8a85 Mon Sep 17 00:00:00 2001 -From: Alan Modra -Date: Tue, 13 Feb 2018 14:09:48 +1030 -Subject: [PATCH] PR22836, "-r -s" doesn't work with -g3 using GCC 7 - -This fixes the case where all of a group is removed with ld -r, the -situation in the PR, and failures where part of a group is removed -that contain relocs. - -bfd/ - PR 22836 - * elf.c (_bfd_elf_fixup_group_sections): Account for removed - relocation sections. If size reduces to just the flag word, - remove that too and mark with SEC_EXCLUDE. - * elflink.c (bfd_elf_final_link): Strip empty group sections. -binutils/ - * testsuite/binutils-all/group-7.s, - * testsuite/binutils-all/group-7a.d, - * testsuite/binutils-all/group-7b.d, - * testsuite/binutils-all/group-7c.d: New tests. - * testsuite/binutils-all/objcopy.exp: Run them. -ld/ - * testsuite/ld-elf/pr22836-2.d, - * testsuite/ld-elf/pr22836-2.s: New test. - -(cherry picked from commit 6e5e9d58c1eeef5677c90886578a895cb8c164c5) ---- - bfd/ChangeLog | 11 +++++++++++ - bfd/elf.c | 25 +++++++++++++++++++++---- - bfd/elflink.c | 7 +++++++ - binutils/ChangeLog | 12 ++++++++++++ - binutils/testsuite/binutils-all/group-7.s | 6 ++++++ - binutils/testsuite/binutils-all/group-7a.d | 16 ++++++++++++++++ - binutils/testsuite/binutils-all/group-7b.d | 19 +++++++++++++++++++ - binutils/testsuite/binutils-all/group-7c.d | 8 ++++++++ - binutils/testsuite/binutils-all/objcopy.exp | 3 +++ - ld/ChangeLog | 9 +++++++++ - ld/testsuite/ld-elf/pr22836-2.d | 7 +++++++ - ld/testsuite/ld-elf/pr22836-2.s | 7 +++++++ - 12 files changed, 126 insertions(+), 4 deletions(-) - create mode 100644 binutils/testsuite/binutils-all/group-7.s - create mode 100644 binutils/testsuite/binutils-all/group-7a.d - create mode 100644 binutils/testsuite/binutils-all/group-7b.d - create mode 100644 binutils/testsuite/binutils-all/group-7c.d - create mode 100644 ld/testsuite/ld-elf/pr22836-2.d - create mode 100644 ld/testsuite/ld-elf/pr22836-2.s - -diff --git a/bfd/elf.c b/bfd/elf.c -index 325bdd5..e95c8a9 100644 ---- a/bfd/elf.c -+++ b/bfd/elf.c -@@ -7579,7 +7579,16 @@ _bfd_elf_fixup_group_sections (bfd *ibfd, asection *discarded) - but the SHT_GROUP section is, then adjust its size. */ - else if (s->output_section == discarded - && isec->output_section != discarded) -- removed += 4; -+ { -+ struct bfd_elf_section_data *elf_sec = elf_section_data (s); -+ removed += 4; -+ if (elf_sec->rel.hdr != NULL -+ && (elf_sec->rel.hdr->sh_flags & SHF_GROUP) != 0) -+ removed += 4; -+ if (elf_sec->rela.hdr != NULL -+ && (elf_sec->rela.hdr->sh_flags & SHF_GROUP) != 0) -+ removed += 4; -+ } - s = elf_next_in_group (s); - if (s == first) - break; -@@ -7589,18 +7598,26 @@ _bfd_elf_fixup_group_sections (bfd *ibfd, asection *discarded) - if (discarded != NULL) - { - /* If we've been called for ld -r, then we need to -- adjust the input section size. This function may -- be called multiple times, so save the original -- size. */ -+ adjust the input section size. */ - if (isec->rawsize == 0) - isec->rawsize = isec->size; - isec->size = isec->rawsize - removed; -+ if (isec->size <= 4) -+ { -+ isec->size = 0; -+ isec->flags |= SEC_EXCLUDE; -+ } - } - else - { - /* Adjust the output section size when called from - objcopy. */ - isec->output_section->size -= removed; -+ if (isec->output_section->size <= 4) -+ { -+ isec->output_section->size = 0; -+ isec->output_section->flags |= SEC_EXCLUDE; -+ } - } - } - } -diff --git a/bfd/elflink.c b/bfd/elflink.c -index 72aa3ac..69cb5ab 100644 ---- a/bfd/elflink.c -+++ b/bfd/elflink.c -@@ -11618,6 +11618,13 @@ bfd_elf_final_link (bfd *abfd, struct bfd_link_info *info) - else - o->flags |= SEC_EXCLUDE; - } -+ else if ((o->flags & SEC_GROUP) != 0 && o->size == 0) -+ { -+ /* Remove empty group section from linker output. */ -+ o->flags |= SEC_EXCLUDE; -+ bfd_section_list_remove (abfd, o); -+ abfd->section_count--; -+ } - } - - /* Count up the number of relocations we will output for each output -diff --git a/binutils/testsuite/binutils-all/group-7.s b/binutils/testsuite/binutils-all/group-7.s -new file mode 100644 -index 0000000..5028afc ---- /dev/null -+++ b/binutils/testsuite/binutils-all/group-7.s -@@ -0,0 +1,6 @@ -+ .section .data.foo,"awG",%progbits,foo,comdat -+here: -+ .dc.a here -+ -+ .section .data2.foo,"awG",%progbits,foo,comdat -+ .dc.a 0 -diff --git a/binutils/testsuite/binutils-all/group-7a.d b/binutils/testsuite/binutils-all/group-7a.d -new file mode 100644 -index 0000000..fa8db60 ---- /dev/null -+++ b/binutils/testsuite/binutils-all/group-7a.d -@@ -0,0 +1,16 @@ -+#name: copy removing reloc group member -+#source: group-7.s -+#PROG: objcopy -+#DUMPPROG: readelf -+#objcopy: --remove-section .data.foo -+#readelf: -Sg --wide -+ -+#... -+ \[[ 0-9]+\] \.group[ \t]+GROUP[ \t]+.* -+#... -+ \[[ 0-9]+\] \.data2\.foo[ \t]+PROGBITS[ \t0-9a-f]+WAG.* -+#... -+COMDAT group section \[[ 0-9]+\] `\.group' \[foo\] contains 1 section.* -+ \[Index\] Name -+ \[[ 0-9]+\] \.data2\.foo -+#pass -diff --git a/binutils/testsuite/binutils-all/group-7b.d b/binutils/testsuite/binutils-all/group-7b.d -new file mode 100644 -index 0000000..b674545 ---- /dev/null -+++ b/binutils/testsuite/binutils-all/group-7b.d -@@ -0,0 +1,19 @@ -+#name: copy removing non-reloc group member -+#source: group-7.s -+#PROG: objcopy -+#DUMPPROG: readelf -+#objcopy: --remove-section .data2.foo -+#readelf: -Sg --wide -+ -+#... -+ \[[ 0-9]+\] \.group[ \t]+GROUP[ \t]+.* -+#... -+ \[[ 0-9]+\] \.data\.foo[ \t]+PROGBITS[ \t0-9a-f]+WAG.* -+#... -+ \[[ 0-9]+\] \.rela?\.data\.foo[ \t]+RELA?[ \t0-9a-f]+IG.* -+#... -+COMDAT group section \[[ 0-9]+\] `\.group' \[foo\] contains 2 sections: -+ \[Index\] Name -+ \[[ 0-9]+\] \.data\.foo -+ \[[ 0-9]+\] \.rela?\.data\.foo -+#pass -diff --git a/binutils/testsuite/binutils-all/group-7c.d b/binutils/testsuite/binutils-all/group-7c.d -new file mode 100644 -index 0000000..83e9115 ---- /dev/null -+++ b/binutils/testsuite/binutils-all/group-7c.d -@@ -0,0 +1,8 @@ -+#name: copy removing reloc and non-reloc group member -+#source: group-7.s -+#PROG: objcopy -+#DUMPPROG: readelf -+#objcopy: -R .data.foo -R .data2.foo -+#readelf: -g --wide -+ -+There are no section groups in this file\. -diff --git a/binutils/testsuite/binutils-all/objcopy.exp b/binutils/testsuite/binutils-all/objcopy.exp -index 377f88c..f4a7692 100644 ---- a/binutils/testsuite/binutils-all/objcopy.exp -+++ b/binutils/testsuite/binutils-all/objcopy.exp -@@ -1051,6 +1051,9 @@ if [is_elf_format] { - objcopy_test_readelf "GNU_MBIND section" mbind1.s - run_dump_test "group-5" - run_dump_test "group-6" -+ run_dump_test "group-7a" -+ run_dump_test "group-7b" -+ run_dump_test "group-7c" - run_dump_test "copy-1" - run_dump_test "note-1" - if [is_elf64 tmpdir/bintest.o] { -diff --git a/ld/testsuite/ld-elf/pr22836-2.d b/ld/testsuite/ld-elf/pr22836-2.d -new file mode 100644 -index 0000000..10133e4 ---- /dev/null -+++ b/ld/testsuite/ld-elf/pr22836-2.d -@@ -0,0 +1,7 @@ -+#source: pr22836-2.s -+#ld: -r -S -+#readelf: -g --wide -+ -+group section \[[ 0-9]+\] `\.group' \[foo\] contains 1 section.* -+ \[Index\] Name -+ \[[ 0-9]+\] \.comment -diff --git a/ld/testsuite/ld-elf/pr22836-2.s b/ld/testsuite/ld-elf/pr22836-2.s -new file mode 100644 -index 0000000..77cd83a ---- /dev/null -+++ b/ld/testsuite/ld-elf/pr22836-2.s -@@ -0,0 +1,7 @@ -+ .section .debug_macro,"G",%progbits,foo -+ .long .LASF0 -+.LASF0: -+ .string "__STDC__ 1" -+ -+ .section .comment,"G",%progbits,foo -+ .asciz "hi" --- -2.9.3 - diff --git a/core/binutils/0004-PR22868-Fix-case-where-IR-file-provides-symbol-visibility.patch b/core/binutils/0004-PR22868-Fix-case-where-IR-file-provides-symbol-visibility.patch deleted file mode 100644 index 999260d55..000000000 --- a/core/binutils/0004-PR22868-Fix-case-where-IR-file-provides-symbol-visibility.patch +++ /dev/null @@ -1,275 +0,0 @@ -From 330b90b5ffbbc20c5de6ae6c7f60c40fab2e7a4f Mon Sep 17 00:00:00 2001 -From: Cary Coutant -Date: Fri, 23 Mar 2018 09:03:34 -0700 -Subject: [PATCH] Fix case where IR file provides symbol visibility but - replacement file does not. - -In PR 22868, two IR files provide conflicting visibility for a symbol. -When a def with PROTECTED visibility is seen after a def with DEFAULT -visibility, gold does not override the visibility. Later, if the -replacement object define the symbol with DEFAULT visibility, the symbol -remains DEFAULT. This was caused by a recent change to allow multiply-defined -absolute symbols, combined with the fact that the plugin framework was using -SHN_ABS as the section index for placeholder symbols. The solution is to -use a real (but arbitrary) section index. - -gold/ - PR gold/22868 - * plugin.cc (Sized_pluginobj::do_add_symbols): Use a real section - index instead of SHN_ABS for defined symbols. - * testsuite/Makefile.am (plugin_pr22868): New test case. - * testsuite/Makefile.in: Regenerate - * testsuite/plugin_pr22868.sh: New test script. - * testsuite/plugin_pr22868_a.c: New source file. - * testsuite/plugin_pr22868_b.c: New source file. ---- - gold/plugin.cc | 3 ++- - gold/testsuite/Makefile.am | 21 ++++++++++++++++++ - gold/testsuite/Makefile.in | 28 +++++++++++++++++++++--- - gold/testsuite/plugin_pr22868.sh | 45 +++++++++++++++++++++++++++++++++++++++ - gold/testsuite/plugin_pr22868_a.c | 28 ++++++++++++++++++++++++ - gold/testsuite/plugin_pr22868_b.c | 39 +++++++++++++++++++++++++++++++++ - 6 files changed, 160 insertions(+), 4 deletions(-) - create mode 100755 gold/testsuite/plugin_pr22868.sh - create mode 100644 gold/testsuite/plugin_pr22868_a.c - create mode 100644 gold/testsuite/plugin_pr22868_b.c - -diff --git a/gold/plugin.cc b/gold/plugin.cc -index 02fef25..a59f19d 100644 ---- a/gold/plugin.cc -+++ b/gold/plugin.cc -@@ -1144,7 +1144,8 @@ Sized_pluginobj::do_add_symbols(Symbol_table* symtab, - { - case LDPK_DEF: - case LDPK_WEAKDEF: -- shndx = elfcpp::SHN_ABS; -+ // We use an arbitrary section number for a defined symbol. -+ shndx = 1; - break; - case LDPK_COMMON: - shndx = elfcpp::SHN_COMMON; -diff --git a/gold/testsuite/Makefile.am b/gold/testsuite/Makefile.am -index 16cae80..d086dad 100644 ---- a/gold/testsuite/Makefile.am -+++ b/gold/testsuite/Makefile.am -@@ -2433,6 +2433,27 @@ plugin_section_alignment.so: plugin_section_alignment.o gcctestdir/ld - plugin_section_alignment.o: plugin_section_alignment.cc - $(CXXCOMPILE) -O0 -c -fpic -o $@ $< - -+check_SCRIPTS += plugin_pr22868.sh -+check_DATA += plugin_pr22868.stdout -+MOSTLYCLEANFILES += plugin_pr22868.stdout -+plugin_pr22868.stdout: plugin_pr22868.so -+ $(TEST_READELF) -W --dyn-syms $< >$@ 2>/dev/null -+plugin_pr22868.so: plugin_pr22868_a.o.syms plugin_pr22868_b.o.syms plugin_pr22868_b.o plugin_test.so gcctestdir/ld -+ $(LINK) -Bgcctestdir/ -shared -Wl,--plugin,"./plugin_test.so" plugin_pr22868_a.o.syms plugin_pr22868_b.o.syms -+plugin_pr22868_a.o.syms: plugin_pr22868_a.o -+ $(TEST_READELF) -sW $< >$@ 2>/dev/null -+# Generate the .syms file from an alternate version of the original source -+# file, with a "protected" visibility attribute. We'll link with a -+# "replacement" object that does not have that attribute. -+plugin_pr22868_b.o.syms: plugin_pr22868_b_ir.o -+ $(TEST_READELF) -sW $< >$@ 2>/dev/null -+plugin_pr22868_a.o: plugin_pr22868_a.c -+ $(COMPILE) -c -fpic -o $@ $< -+plugin_pr22868_b_ir.o: plugin_pr22868_b.c -+ $(COMPILE) -c -DIR -fpic -o $@ $< -+plugin_pr22868_b.o: plugin_pr22868_b.c -+ $(COMPILE) -c -fpic -o $@ $< -+ - endif PLUGINS - - check_PROGRAMS += exclude_libs_test -diff --git a/gold/testsuite/Makefile.in b/gold/testsuite/Makefile.in -index bbf8dc1..22940ca 100644 ---- a/gold/testsuite/Makefile.in -+++ b/gold/testsuite/Makefile.in -@@ -591,16 +591,19 @@ check_PROGRAMS = $(am__EXEEXT_1) $(am__EXEEXT_2) $(am__EXEEXT_3) \ - @GCC_TRUE@@NATIVE_LINKER_TRUE@@PLUGINS_TRUE@am__append_52 = unused.c \ - @GCC_TRUE@@NATIVE_LINKER_TRUE@@PLUGINS_TRUE@ plugin_final_layout \ - @GCC_TRUE@@NATIVE_LINKER_TRUE@@PLUGINS_TRUE@ plugin_layout_new_file \ --@GCC_TRUE@@NATIVE_LINKER_TRUE@@PLUGINS_TRUE@ plugin_layout_with_alignment -+@GCC_TRUE@@NATIVE_LINKER_TRUE@@PLUGINS_TRUE@ plugin_layout_with_alignment \ -+@GCC_TRUE@@NATIVE_LINKER_TRUE@@PLUGINS_TRUE@ plugin_pr22868.stdout - @GCC_TRUE@@NATIVE_LINKER_TRUE@@PLUGINS_TRUE@am__append_53 = plugin_final_layout.sh \ --@GCC_TRUE@@NATIVE_LINKER_TRUE@@PLUGINS_TRUE@ plugin_layout_with_alignment.sh -+@GCC_TRUE@@NATIVE_LINKER_TRUE@@PLUGINS_TRUE@ plugin_layout_with_alignment.sh \ -+@GCC_TRUE@@NATIVE_LINKER_TRUE@@PLUGINS_TRUE@ plugin_pr22868.sh - - # Uses the plugin_final_layout.sh script above to avoid duplication - @GCC_TRUE@@NATIVE_LINKER_TRUE@@PLUGINS_TRUE@am__append_54 = plugin_final_layout.stdout \ - @GCC_TRUE@@NATIVE_LINKER_TRUE@@PLUGINS_TRUE@ plugin_final_layout_readelf.stdout \ - @GCC_TRUE@@NATIVE_LINKER_TRUE@@PLUGINS_TRUE@ plugin_layout_new_file.stdout \ - @GCC_TRUE@@NATIVE_LINKER_TRUE@@PLUGINS_TRUE@ plugin_layout_new_file_readelf.stdout \ --@GCC_TRUE@@NATIVE_LINKER_TRUE@@PLUGINS_TRUE@ plugin_layout_with_alignment.stdout -+@GCC_TRUE@@NATIVE_LINKER_TRUE@@PLUGINS_TRUE@ plugin_layout_with_alignment.stdout \ -+@GCC_TRUE@@NATIVE_LINKER_TRUE@@PLUGINS_TRUE@ plugin_pr22868.stdout - @GCC_TRUE@@NATIVE_LINKER_TRUE@am__append_55 = exclude_libs_test \ - @GCC_TRUE@@NATIVE_LINKER_TRUE@ local_labels_test \ - @GCC_TRUE@@NATIVE_LINKER_TRUE@ discard_locals_test -@@ -5299,6 +5302,8 @@ plugin_final_layout.sh.log: plugin_final_layout.sh - @p='plugin_final_layout.sh'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) - plugin_layout_with_alignment.sh.log: plugin_layout_with_alignment.sh - @p='plugin_layout_with_alignment.sh'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) -+plugin_pr22868.sh.log: plugin_pr22868.sh -+ @p='plugin_pr22868.sh'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) - exclude_libs_test.sh.log: exclude_libs_test.sh - @p='exclude_libs_test.sh'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) - discard_locals_test.sh.log: discard_locals_test.sh -@@ -7086,6 +7091,23 @@ uninstall-am: - @GCC_TRUE@@NATIVE_LINKER_TRUE@@PLUGINS_TRUE@ $(CXXLINK) -Bgcctestdir/ -shared plugin_section_alignment.o - @GCC_TRUE@@NATIVE_LINKER_TRUE@@PLUGINS_TRUE@plugin_section_alignment.o: plugin_section_alignment.cc - @GCC_TRUE@@NATIVE_LINKER_TRUE@@PLUGINS_TRUE@ $(CXXCOMPILE) -O0 -c -fpic -o $@ $< -+@GCC_TRUE@@NATIVE_LINKER_TRUE@@PLUGINS_TRUE@plugin_pr22868.stdout: plugin_pr22868.so -+@GCC_TRUE@@NATIVE_LINKER_TRUE@@PLUGINS_TRUE@ $(TEST_READELF) -W --dyn-syms $< >$@ 2>/dev/null -+@GCC_TRUE@@NATIVE_LINKER_TRUE@@PLUGINS_TRUE@plugin_pr22868.so: plugin_pr22868_a.o.syms plugin_pr22868_b.o.syms plugin_pr22868_b.o plugin_test.so gcctestdir/ld -+@GCC_TRUE@@NATIVE_LINKER_TRUE@@PLUGINS_TRUE@ $(LINK) -Bgcctestdir/ -shared -Wl,--plugin,"./plugin_test.so" plugin_pr22868_a.o.syms plugin_pr22868_b.o.syms -+@GCC_TRUE@@NATIVE_LINKER_TRUE@@PLUGINS_TRUE@plugin_pr22868_a.o.syms: plugin_pr22868_a.o -+@GCC_TRUE@@NATIVE_LINKER_TRUE@@PLUGINS_TRUE@ $(TEST_READELF) -sW $< >$@ 2>/dev/null -+# Generate the .syms file from an alternate version of the original source -+# file, with a "protected" visibility attribute. We'll link with a -+# "replacement" object that does not have that attribute. -+@GCC_TRUE@@NATIVE_LINKER_TRUE@@PLUGINS_TRUE@plugin_pr22868_b.o.syms: plugin_pr22868_b_ir.o -+@GCC_TRUE@@NATIVE_LINKER_TRUE@@PLUGINS_TRUE@ $(TEST_READELF) -sW $< >$@ 2>/dev/null -+@GCC_TRUE@@NATIVE_LINKER_TRUE@@PLUGINS_TRUE@plugin_pr22868_a.o: plugin_pr22868_a.c -+@GCC_TRUE@@NATIVE_LINKER_TRUE@@PLUGINS_TRUE@ $(COMPILE) -c -fpic -o $@ $< -+@GCC_TRUE@@NATIVE_LINKER_TRUE@@PLUGINS_TRUE@plugin_pr22868_b_ir.o: plugin_pr22868_b.c -+@GCC_TRUE@@NATIVE_LINKER_TRUE@@PLUGINS_TRUE@ $(COMPILE) -c -DIR -fpic -o $@ $< -+@GCC_TRUE@@NATIVE_LINKER_TRUE@@PLUGINS_TRUE@plugin_pr22868_b.o: plugin_pr22868_b.c -+@GCC_TRUE@@NATIVE_LINKER_TRUE@@PLUGINS_TRUE@ $(COMPILE) -c -fpic -o $@ $< - @GCC_TRUE@@NATIVE_LINKER_TRUE@exclude_libs_test.syms: exclude_libs_test - @GCC_TRUE@@NATIVE_LINKER_TRUE@ $(TEST_READELF) -sW $< >$@ 2>/dev/null - @GCC_TRUE@@NATIVE_LINKER_TRUE@libexclude_libs_test_1.a: exclude_libs_test_1.o -diff --git a/gold/testsuite/plugin_pr22868.sh b/gold/testsuite/plugin_pr22868.sh -new file mode 100755 -index 0000000..72f364b ---- /dev/null -+++ b/gold/testsuite/plugin_pr22868.sh -@@ -0,0 +1,45 @@ -+#!/bin/sh -+ -+# plugin_pr22868.sh -- a test case for the plugin API. -+ -+# Copyright (C) 2018 Free Software Foundation, Inc. -+# Written by Cary Coutant . -+ -+# This file is part of gold. -+ -+# This program is free software; you can redistribute it and/or modify -+# it under the terms of the GNU General Public License as published by -+# the Free Software Foundation; either version 3 of the License, or -+# (at your option) any later version. -+ -+# This program is distributed in the hope that it will be useful, -+# but WITHOUT ANY WARRANTY; without even the implied warranty of -+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+# GNU General Public License for more details. -+ -+# You should have received a copy of the GNU General Public License -+# along with this program; if not, write to the Free Software -+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, -+# MA 02110-1301, USA. -+ -+# This file goes with plugin_pr22868_a.c and plugin_pr22868_b.c, -+# which check that if a symbol is declared PROTECTED in any IR file, -+# it will remain PROTECTED in the output even if the replacement file(s) -+# fail to declare it PROTECTED. -+ -+check() -+{ -+ if ! grep -q "$2" "$1" -+ then -+ echo "Did not find expected output in $1:" -+ echo " $2" -+ echo "" -+ echo "Actual output below:" -+ cat "$1" -+ exit 1 -+ fi -+} -+ -+check plugin_pr22868.stdout "PROTECTED.*foo" -+ -+exit 0 -diff --git a/gold/testsuite/plugin_pr22868_a.c b/gold/testsuite/plugin_pr22868_a.c -new file mode 100644 -index 0000000..86a9843 ---- /dev/null -+++ b/gold/testsuite/plugin_pr22868_a.c -@@ -0,0 +1,28 @@ -+/* plugin_pr22868_a.c -- a test case for the plugin API with GC. -+ -+ Copyright (C) 2018 Free Software Foundation, Inc. -+ Written by Cary Coutant . -+ -+ This file is part of gold. -+ -+ This program is free software; you can redistribute it and/or modify -+ it under the terms of the GNU General Public License as published by -+ the Free Software Foundation; either version 3 of the License, or -+ (at your option) any later version. -+ -+ This program is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ GNU General Public License for more details. -+ -+ You should have received a copy of the GNU General Public License -+ along with this program; if not, write to the Free Software -+ Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, -+ MA 02110-1301, USA. */ -+ -+int foo(int i) __attribute__ (( weak )); -+ -+int foo(int i) -+{ -+ return i + 1; -+} -diff --git a/gold/testsuite/plugin_pr22868_b.c b/gold/testsuite/plugin_pr22868_b.c -new file mode 100644 -index 0000000..92d2145 ---- /dev/null -+++ b/gold/testsuite/plugin_pr22868_b.c -@@ -0,0 +1,39 @@ -+/* plugin_pr22868_b_ir.c -- a test case for the plugin API with GC. -+ -+ Copyright (C) 2018 Free Software Foundation, Inc. -+ Written by Cary Coutant . -+ -+ This file is part of gold. -+ -+ This program is free software; you can redistribute it and/or modify -+ it under the terms of the GNU General Public License as published by -+ the Free Software Foundation; either version 3 of the License, or -+ (at your option) any later version. -+ -+ This program is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ GNU General Public License for more details. -+ -+ You should have received a copy of the GNU General Public License -+ along with this program; if not, write to the Free Software -+ Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, -+ MA 02110-1301, USA. */ -+ -+/* This file is compiled with -DIR to generate the .syms file, -+ and without -DIR for use as the replacement object. -+ The .syms file declares foo with protected visibility, but -+ the replacement file does not. */ -+ -+#ifdef IR -+#define PROTECTED __attribute__ (( visibility ("protected") )) -+#else -+#define PROTECTED -+#endif -+ -+int foo(int i) __attribute__ (( weak )) PROTECTED; -+ -+int foo(int i) -+{ -+ return i + 1; -+} --- -2.9.3 - diff --git a/core/binutils/PKGBUILD b/core/binutils/PKGBUILD index 872219f3a..17bc7e4fd 100644 --- a/core/binutils/PKGBUILD +++ b/core/binutils/PKGBUILD @@ -13,8 +13,8 @@ noautobuild=1 pkgname=binutils -pkgver=2.30 -pkgrel=5 +pkgver=2.31.1 +pkgrel=1 pkgdesc='A set of programs to assemble and manipulate binary and object files' arch=(x86_64) url='http://www.gnu.org/software/binutils/' @@ -23,20 +23,10 @@ groups=(base-devel) depends=(glibc zlib) checkdepends=(dejagnu bc) options=(staticlibs !distcc !ccache) -source=(https://ftp.gnu.org/gnu/binutils/binutils-$pkgver.tar.xz{,.sig} - 0001-PR22741-objcopy-segfault-on-fuzzed-COFF-object.patch - 0002-PR22829-objcopy-strip-removes-PT_GNU_RELRO-from-lld-.patch - 0003-PR22836-r-s-doesnt-work-with-g3-using-GCC-7.patch - 0004-PR22868-Fix-case-where-IR-file-provides-symbol-visibility.patch - 0001-PR22764-LD-AARCH64-Allow-R_AARCH64_ABS16-and-R_AARCH.patch) +source=(https://ftp.gnu.org/gnu/binutils/binutils-$pkgver.tar.xz{,.sig}) validpgpkeys=(3A24BC1E8FB409FA9F14371813FCEF89DD9E3C4F) -md5sums=('ffc476dd46c96f932875d1b2e27e929f' - 'SKIP' - '469164f3c93a0e92a697537b60c9806c' - '0c679b37e90fb23de60a4d28329b956a' - '53b5682e09c0a27e9994c3efdfe01d29' - '0fac94f7fa54a95354454677d3e43994' - '2b1d13379e401e8209e3d05016914d3b') +md5sums=('5b7c9d4ce96f507d95c1b9a255e52418' + 'SKIP') prepare() { mkdir -p binutils-build @@ -46,21 +36,6 @@ prepare() { # hack! - libiberty configure tests for header files using "$CPP $CPPFLAGS" sed -i "/ac_cpp=/s/\$CPPFLAGS/\$CPPFLAGS -O2/" libiberty/configure - - # https://sourceware.org/bugzilla/show_bug.cgi?id=22741 - patch -p1 -i "$srcdir/0001-PR22741-objcopy-segfault-on-fuzzed-COFF-object.patch" - - # https://sourceware.org/bugzilla/show_bug.cgi?id=22829 - patch -p1 -i "$srcdir/0002-PR22829-objcopy-strip-removes-PT_GNU_RELRO-from-lld-.patch" - - # https://sourceware.org/bugzilla/show_bug.cgi?id=22836 - patch -p1 -i "$srcdir/0003-PR22836-r-s-doesnt-work-with-g3-using-GCC-7.patch" - - # https://sourceware.org/bugzilla/show_bug.cgi?id=22868 - patch -p1 -i "$srcdir/0004-PR22868-Fix-case-where-IR-file-provides-symbol-visibility.patch" - - # https://sourceware.org/bugzilla/show_bug.cgi?id=22764 - patch -p1 -i "$srcdir/0001-PR22764-LD-AARCH64-Allow-R_AARCH64_ABS16-and-R_AARCH.patch" } build() {