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.
This commit is contained in:
H.J. Lu 2020-12-18 04:24:26 -08:00
parent 3fafa2e26e
commit 04f8967487
6 changed files with 42 additions and 1 deletions

View File

@ -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.

View File

@ -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;

View File

@ -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>

View File

@ -0,0 +1,5 @@
.type _start,"function"
.section .text,"axR",%progbits
.global _start
_start:
.nop

View File

@ -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

View File

@ -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