From: H.J. Lu Date: Fri, 2 Jun 2023 18:54:21 +0000 (-0700) Subject: ELF: Don't warn an empty PT_LOAD with the program headers X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=3f60b98298fd77dec3a9182797c9dd6d7796bcaf;p=binutils-gdb.git 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. --- diff --git a/bfd/elf.c b/bfd/elf.c index 94954a8fbb9..81eb3ef71fa 100644 --- a/bfd/elf.c +++ b/bfd/elf.c @@ -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 diff --git a/ld/testsuite/ld-elf/pr30508.d b/ld/testsuite/ld-elf/pr30508.d new file mode 100644 index 00000000000..35f66159283 --- /dev/null +++ b/ld/testsuite/ld-elf/pr30508.d @@ -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 diff --git a/ld/testsuite/ld-elf/pr30508.s b/ld/testsuite/ld-elf/pr30508.s new file mode 100644 index 00000000000..5a2778c9bff --- /dev/null +++ b/ld/testsuite/ld-elf/pr30508.s @@ -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