[binutils-gdb] elf: Copy elf_gnu_osabi_retain only for relocatable link

H.J. Lu hjl@sourceware.org
Fri Dec 18 12:28:16 GMT 2020


https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=04f8967487515179cc6dfc7c828f77eeb75c08d3

commit 04f8967487515179cc6dfc7c828f77eeb75c08d3
Author: H.J. Lu <hjl.tools@gmail.com>
Date:   Fri Dec 18 04:24:26 2020 -0800

    elf: Copy elf_gnu_osabi_retain only for relocatable link
    
    Copy elf_gnu_osabi_retain from input only for relocatable link since
    SHF_GNU_RETAIN has no impact on non-relocatable outputs.
    
    bfd/
    
            PR ld/27091
            * elflink.c (elf_link_input_bfd): Copy elf_gnu_osabi_retain
            from input only for relocatable link.
    
    ld/
    
            PR ld/27091
            * testsuite/ld-elf/retain7.s: New file.
            * testsuite/ld-elf/retain7a.d: Likewise.
            * testsuite/ld-elf/retain7b.d: Likewise.

Diff:
---
 bfd/ChangeLog                  |  6 ++++++
 bfd/elflink.c                  |  4 +++-
 ld/ChangeLog                   |  7 +++++++
 ld/testsuite/ld-elf/retain7.s  |  5 +++++
 ld/testsuite/ld-elf/retain7a.d | 11 +++++++++++
 ld/testsuite/ld-elf/retain7b.d | 10 ++++++++++
 6 files changed, 42 insertions(+), 1 deletion(-)

diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index cb72b1380c1..582add86d20 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -1,3 +1,9 @@
+2020-12-18  H.J. Lu  <hongjiu.lu@intel.com>
+
+	PR ld/27091
+	* elflink.c (elf_link_input_bfd): Copy elf_gnu_osabi_retain
+	from input only for relocatable link.
+
 2020-12-18  Alan Modra  <amodra@gmail.com>
 
 	* elf32-microblaze.c (dbg): Delete unused variable.
diff --git a/bfd/elflink.c b/bfd/elflink.c
index 2489700da76..1b3398126f0 100644
--- a/bfd/elflink.c
+++ b/bfd/elflink.c
@@ -10806,7 +10806,9 @@ elf_link_input_bfd (struct elf_final_link_info *flinfo, bfd *input_bfd)
       || bed->elf_osabi == ELFOSABI_GNU
       || bed->elf_osabi == ELFOSABI_FREEBSD)
     elf_tdata (output_bfd)->has_gnu_osabi
-      |= elf_tdata (input_bfd)->has_gnu_osabi;
+      |= (elf_tdata (input_bfd)->has_gnu_osabi
+	  & (bfd_link_relocatable (flinfo->info)
+	     ? -1 : ~elf_gnu_osabi_retain));
 
   /* Read the local symbols.  */
   isymbuf = (Elf_Internal_Sym *) symtab_hdr->contents;
diff --git a/ld/ChangeLog b/ld/ChangeLog
index 34d58d4fcbb..392165b978a 100644
--- a/ld/ChangeLog
+++ b/ld/ChangeLog
@@ -1,3 +1,10 @@
+2020-12-18  H.J. Lu  <hongjiu.lu@intel.com>
+
+	PR ld/27091
+	* testsuite/ld-elf/retain7.s: New file.
+	* testsuite/ld-elf/retain7a.d: Likewise.
+	* testsuite/ld-elf/retain7b.d: Likewise.
+
 2020-12-16  Howard Chu <hyc@symas.com>
 	    H.J. Lu  <hongjiu.lu@intel.com>
 
diff --git a/ld/testsuite/ld-elf/retain7.s b/ld/testsuite/ld-elf/retain7.s
new file mode 100644
index 00000000000..a6cc86988c2
--- /dev/null
+++ b/ld/testsuite/ld-elf/retain7.s
@@ -0,0 +1,5 @@
+	.type _start,"function"
+	.section .text,"axR",%progbits
+	.global _start
+_start:
+	.nop
diff --git a/ld/testsuite/ld-elf/retain7a.d b/ld/testsuite/ld-elf/retain7a.d
new file mode 100644
index 00000000000..544ff8a1735
--- /dev/null
+++ b/ld/testsuite/ld-elf/retain7a.d
@@ -0,0 +1,11 @@
+#name: SHF_GNU_RETAIN 7a
+#source: retain7.s
+#ld: -e _start --gc-sections
+#notarget: ![supports_gnu_osabi] ![check_gc_sections_available]
+#readelf: -h
+
+#failif
+ELF Header:
+#...
+  OS/ABI:                            UNIX - GNU
+#pass
diff --git a/ld/testsuite/ld-elf/retain7b.d b/ld/testsuite/ld-elf/retain7b.d
new file mode 100644
index 00000000000..0e5b12b335a
--- /dev/null
+++ b/ld/testsuite/ld-elf/retain7b.d
@@ -0,0 +1,10 @@
+#name: SHF_GNU_RETAIN 7a
+#source: retain7.s
+#ld: -r
+#notarget: ![supports_gnu_osabi] ![check_gc_sections_available]
+#readelf: -h
+
+ELF Header:
+#...
+  OS/ABI:                            UNIX - GNU
+#pass


More information about the Binutils-cvs mailing list