ELF: Don't warn an empty PT_LOAD with the program headers
authorH.J. Lu <hjl.tools@gmail.com>
Fri, 2 Jun 2023 18:54:21 +0000 (11:54 -0700)
committerH.J. Lu <hjl.tools@gmail.com>
Mon, 5 Jun 2023 15:21:21 +0000 (08:21 -0700)
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.

bfd/elf.c
ld/testsuite/ld-elf/pr30508.d [new file with mode: 0644]
ld/testsuite/ld-elf/pr30508.s [new file with mode: 0644]

index 94954a8fbb99a98456757b18332c39ebcefde60f..81eb3ef71fa952cbd387bf7b26aea76166aaf795 100644 (file)
--- 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 (file)
index 0000000..35f6615
--- /dev/null
@@ -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 (file)
index 0000000..5a2778c
--- /dev/null
@@ -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