Date: Saturday, April 21, 2018 @ 18:29:39 Author: bpiotrowski Revision: 322769
archrelease: copy trunk to testing-x86_64 Added: binutils/repos/testing-x86_64/0001-PR22741-objcopy-segfault-on-fuzzed-COFF-object.patch (from rev 322768, binutils/trunk/0001-PR22741-objcopy-segfault-on-fuzzed-COFF-object.patch) binutils/repos/testing-x86_64/0002-PR22829-objcopy-strip-removes-PT_GNU_RELRO-from-lld-.patch (from rev 322768, binutils/trunk/0002-PR22829-objcopy-strip-removes-PT_GNU_RELRO-from-lld-.patch) binutils/repos/testing-x86_64/0003-PR22836-r-s-doesnt-work-with-g3-using-GCC-7.patch (from rev 322768, binutils/trunk/0003-PR22836-r-s-doesnt-work-with-g3-using-GCC-7.patch) binutils/repos/testing-x86_64/PKGBUILD (from rev 322768, binutils/trunk/PKGBUILD) Deleted: binutils/repos/testing-x86_64/0001-PR22741-objcopy-segfault-on-fuzzed-COFF-object.patch binutils/repos/testing-x86_64/0002-PR22829-objcopy-strip-removes-PT_GNU_RELRO-from-lld-.patch binutils/repos/testing-x86_64/PKGBUILD -----------------------------------------------------------------+ 0001-PR22741-objcopy-segfault-on-fuzzed-COFF-object.patch | 58 +- 0002-PR22829-objcopy-strip-removes-PT_GNU_RELRO-from-lld-.patch | 290 +++++----- 0003-PR22836-r-s-doesnt-work-with-g3-using-GCC-7.patch | 233 ++++++++ PKGBUILD | 183 +++--- 4 files changed, 501 insertions(+), 263 deletions(-) Deleted: 0001-PR22741-objcopy-segfault-on-fuzzed-COFF-object.patch =================================================================== --- 0001-PR22741-objcopy-segfault-on-fuzzed-COFF-object.patch 2018-04-21 18:29:19 UTC (rev 322768) +++ 0001-PR22741-objcopy-segfault-on-fuzzed-COFF-object.patch 2018-04-21 18:29:39 UTC (rev 322769) @@ -1,29 +0,0 @@ -From eb77f6a4621795367a39cdd30957903af9dbb815 Mon Sep 17 00:00:00 2001 -From: Alan Modra <amo...@gmail.com> -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 - Copied: binutils/repos/testing-x86_64/0001-PR22741-objcopy-segfault-on-fuzzed-COFF-object.patch (from rev 322768, binutils/trunk/0001-PR22741-objcopy-segfault-on-fuzzed-COFF-object.patch) =================================================================== --- 0001-PR22741-objcopy-segfault-on-fuzzed-COFF-object.patch (rev 0) +++ 0001-PR22741-objcopy-segfault-on-fuzzed-COFF-object.patch 2018-04-21 18:29:39 UTC (rev 322769) @@ -0,0 +1,29 @@ +From eb77f6a4621795367a39cdd30957903af9dbb815 Mon Sep 17 00:00:00 2001 +From: Alan Modra <amo...@gmail.com> +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 + Deleted: 0002-PR22829-objcopy-strip-removes-PT_GNU_RELRO-from-lld-.patch =================================================================== --- 0002-PR22829-objcopy-strip-removes-PT_GNU_RELRO-from-lld-.patch 2018-04-21 18:29:19 UTC (rev 322768) +++ 0002-PR22829-objcopy-strip-removes-PT_GNU_RELRO-from-lld-.patch 2018-04-21 18:29:39 UTC (rev 322769) @@ -1,145 +0,0 @@ -From 3b56a1358768563d9cf320559ebdedfb30f122dd Mon Sep 17 00:00:00 2001 -From: Alan Modra <amo...@gmail.com> -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 - Copied: binutils/repos/testing-x86_64/0002-PR22829-objcopy-strip-removes-PT_GNU_RELRO-from-lld-.patch (from rev 322768, binutils/trunk/0002-PR22829-objcopy-strip-removes-PT_GNU_RELRO-from-lld-.patch) =================================================================== --- 0002-PR22829-objcopy-strip-removes-PT_GNU_RELRO-from-lld-.patch (rev 0) +++ 0002-PR22829-objcopy-strip-removes-PT_GNU_RELRO-from-lld-.patch 2018-04-21 18:29:39 UTC (rev 322769) @@ -0,0 +1,145 @@ +From 3b56a1358768563d9cf320559ebdedfb30f122dd Mon Sep 17 00:00:00 2001 +From: Alan Modra <amo...@gmail.com> +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 + Copied: binutils/repos/testing-x86_64/0003-PR22836-r-s-doesnt-work-with-g3-using-GCC-7.patch (from rev 322768, binutils/trunk/0003-PR22836-r-s-doesnt-work-with-g3-using-GCC-7.patch) =================================================================== --- 0003-PR22836-r-s-doesnt-work-with-g3-using-GCC-7.patch (rev 0) +++ 0003-PR22836-r-s-doesnt-work-with-g3-using-GCC-7.patch 2018-04-21 18:29:39 UTC (rev 322769) @@ -0,0 +1,233 @@ +From d957f81cb38d7e82ae546cd03265ee3087ba8a85 Mon Sep 17 00:00:00 2001 +From: Alan Modra <amo...@gmail.com> +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 + Deleted: PKGBUILD =================================================================== --- PKGBUILD 2018-04-21 18:29:19 UTC (rev 322768) +++ PKGBUILD 2018-04-21 18:29:39 UTC (rev 322769) @@ -1,89 +0,0 @@ -# $Id$ -# Maintainer: Bartłomiej Piotrowski <bpiotrow...@archlinux.org> -# Contributor: Allan McRae <al...@archlinux.org> - -# toolchain build order: linux-api-headers->glibc->binutils->gcc->binutils->glibc - -pkgname=binutils -pkgver=2.30 -pkgrel=2 -pkgdesc='A set of programs to assemble and manipulate binary and object files' -arch=(x86_64) -url='http://www.gnu.org/software/binutils/' -license=(GPL) -groups=(base-devel) -depends=(glibc zlib) -checkdepends=(dejagnu bc) -conflicts=(binutils-multilib) -replaces=(binutils-multilib) -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) -validpgpkeys=(3A24BC1E8FB409FA9F14371813FCEF89DD9E3C4F) -md5sums=('ffc476dd46c96f932875d1b2e27e929f' - 'SKIP' - '469164f3c93a0e92a697537b60c9806c' - '0c679b37e90fb23de60a4d28329b956a') - -prepare() { - mkdir -p binutils-build - - #cd binutils-gdb - cd binutils-$pkgver - - # 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" -} - -build() { - cd binutils-build - - "$srcdir/binutils-$pkgver/configure" \ - --prefix=/usr \ - --with-lib-path=/usr/lib:/usr/local/lib \ - --with-bugurl=https://bugs.archlinux.org/ \ - --enable-deterministic-archives \ - --enable-gold \ - --enable-ld=default \ - --enable-lto \ - --enable-plugins \ - --enable-relro \ - --enable-shared \ - --enable-targets=x86_64-pep \ - --enable-threads \ - --disable-gdb \ - --disable-werror \ - --with-pic \ - --with-system-zlib - - make configure-host - make tooldir=/usr -} - -check() { - cd binutils-build - - # unset LDFLAGS as testsuite makes assumptions about which ones are active - # ignore failures in gold testsuite... - make -k LDFLAGS="" check || true -} - -package() { - cd binutils-build - make prefix="$pkgdir/usr" tooldir="$pkgdir/usr" install - - # Remove unwanted files - rm -f "$pkgdir"/usr/share/man/man1/{dlltool,nlmconv,windres,windmc}* - - # No shared linking to these files outside binutils - rm -f "$pkgdir"/usr/lib/lib{bfd,opcodes}.so - echo 'INPUT( /usr/lib/libbfd.a -liberty -lz -ldl )' > "$pkgdir/usr/lib/libbfd.so" - echo 'INPUT( /usr/lib/libopcodes.a -lbfd )' > "$pkgdir/usr/lib/libopcodes.so" -} Copied: binutils/repos/testing-x86_64/PKGBUILD (from rev 322768, binutils/trunk/PKGBUILD) =================================================================== --- PKGBUILD (rev 0) +++ PKGBUILD 2018-04-21 18:29:39 UTC (rev 322769) @@ -0,0 +1,94 @@ +# $Id$ +# Maintainer: Bartłomiej Piotrowski <bpiotrow...@archlinux.org> +# Contributor: Allan McRae <al...@archlinux.org> + +# toolchain build order: linux-api-headers->glibc->binutils->gcc->binutils->glibc + +pkgname=binutils +pkgver=2.30 +pkgrel=3 +pkgdesc='A set of programs to assemble and manipulate binary and object files' +arch=(x86_64) +url='http://www.gnu.org/software/binutils/' +license=(GPL) +groups=(base-devel) +depends=(glibc zlib) +checkdepends=(dejagnu bc) +conflicts=(binutils-multilib) +replaces=(binutils-multilib) +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) +validpgpkeys=(3A24BC1E8FB409FA9F14371813FCEF89DD9E3C4F) +md5sums=('ffc476dd46c96f932875d1b2e27e929f' + 'SKIP' + '469164f3c93a0e92a697537b60c9806c' + '0c679b37e90fb23de60a4d28329b956a' + '53b5682e09c0a27e9994c3efdfe01d29') + +prepare() { + mkdir -p binutils-build + + #cd binutils-gdb + cd binutils-$pkgver + + # 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" +} + +build() { + cd binutils-build + + "$srcdir/binutils-$pkgver/configure" \ + --prefix=/usr \ + --with-lib-path=/usr/lib:/usr/local/lib \ + --with-bugurl=https://bugs.archlinux.org/ \ + --enable-deterministic-archives \ + --enable-gold \ + --enable-ld=default \ + --enable-lto \ + --enable-plugins \ + --enable-relro \ + --enable-shared \ + --enable-targets=x86_64-pep \ + --enable-threads \ + --disable-gdb \ + --disable-werror \ + --with-pic \ + --with-system-zlib + + make configure-host + make tooldir=/usr +} + +check() { + cd binutils-build + + # unset LDFLAGS as testsuite makes assumptions about which ones are active + # ignore failures in gold testsuite... + make -k LDFLAGS="" check || true +} + +package() { + cd binutils-build + make prefix="$pkgdir/usr" tooldir="$pkgdir/usr" install + + # Remove unwanted files + rm -f "$pkgdir"/usr/share/man/man1/{dlltool,nlmconv,windres,windmc}* + + # No shared linking to these files outside binutils + rm -f "$pkgdir"/usr/lib/lib{bfd,opcodes}.so + echo 'INPUT( /usr/lib/libbfd.a -liberty -lz -ldl )' > "$pkgdir/usr/lib/libbfd.so" + echo 'INPUT( /usr/lib/libopcodes.a -lbfd )' > "$pkgdir/usr/lib/libopcodes.so" +}