summarylogtreecommitdiffstats
path: root/0003-PR22836-r-s-doesnt-work-with-g3-using-GCC-7.patch
diff options
context:
space:
mode:
Diffstat (limited to '0003-PR22836-r-s-doesnt-work-with-g3-using-GCC-7.patch')
-rw-r--r--0003-PR22836-r-s-doesnt-work-with-g3-using-GCC-7.patch233
1 files changed, 0 insertions, 233 deletions
diff --git a/0003-PR22836-r-s-doesnt-work-with-g3-using-GCC-7.patch b/0003-PR22836-r-s-doesnt-work-with-g3-using-GCC-7.patch
deleted file mode 100644
index 2f3c65244bc9..000000000000
--- a/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 <amodra@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
-