ELF: Don't warn an empty PT_LOAD with the program headers

When rewriting the program headers, don't warn an empty PT_LOAD with the
program headers.

bfd/

	PR binutils/30508
	* elf.c (rewrite_elf_program_header): Don't warn if an empty
	PT_LOAD contains the program headers.

ld/

	PR binutils/30508
	* testsuite/ld-elf/pr30508.d: New file.
	* testsuite/ld-elf/pr30508.s: Likewise.
This commit is contained in:
H.J. Lu
2023-06-02 11:54:21 -07:00
parent baab375361
commit 3f60b98298
3 changed files with 29 additions and 0 deletions

View File

@@ -7210,10 +7210,12 @@ rewrite_elf_program_header (bfd *ibfd, bfd *obfd, bfd_vma maxpagesize)
no sections, but ordinary, loadable segments should contain
something. They are allowed by the ELF spec however, so only
a warning is produced.
Don't warn if an empty PT_LOAD contains the program headers.
There is however the valid use case of embedded systems which
have segments with p_filesz of 0 and a p_memsz > 0 to initialize
flash memory with zeros. No warning is shown for that case. */
if (segment->p_type == PT_LOAD
&& !map->includes_phdrs
&& (segment->p_filesz > 0 || segment->p_memsz == 0))
/* xgettext:c-format */
_bfd_error_handler

View File

@@ -0,0 +1,13 @@
#ld: -z separate-code
#objcopy_linked_file: -R .foo
#readelf: -lW
#target: *-*-linux-gnu *-*-gnu* *-*-nacl* arm*-*-uclinuxfdpiceabi
#xfail: h8300-*-* mips*-*-* rx-*-linux*
#...
Section to Segment mapping:
Segment Sections...
#...
0.
#...
0. .text

View File

@@ -0,0 +1,14 @@
.text
.global start /* Used by SH targets. */
start:
.global _start
_start:
.global __start
__start:
.global main /* Used by HPPA targets. */
main:
.globl _main /* Used by LynxOS targets. */
_main:
.dc.a 0
.section .foo,"ax",%progbits
.dc.a 0