PR26907, segment contains empty SHT_NOBITS section

Section ordering is important for _bfd_elf_map_sections_to_segments
and assign_file_positions_for_load_sections, which are only prepared
to handle sections in increasing LMA order.  When zero size sections
are involved it is possible to have multiple sections at the same LMA.
In that case the zero size sections must sort before any non-zero size
sections regardless of their types.

bfd/
	PR 26907
	* elf.c (elf_sort_sections): Don't sort zero size !load sections
	after load sections.
ld/
	* testsuite/ld-elf/pr26907.ld,
	* testsuite/ld-elf/pr26907.s,
	* testsuite/ld-elf/pr26907.d: New test.
This commit is contained in:
Alan Modra 2020-11-28 08:45:02 +10:30
parent ed5e05a2cf
commit 8d748d1dc5
6 changed files with 39 additions and 1 deletions

View File

@ -1,3 +1,9 @@
2020-11-28 Alan Modra <amodra@gmail.com>
PR 26907
* elf.c (elf_sort_sections): Don't sort zero size !load sections
after load sections.
2020-11-27 Jozef Lawrynowicz <jozef.l@mittosystems.com>
* elf.c (special_sections_g): Add .gnu.linkonce.n and .gnu.linkonce.p.

View File

@ -5257,7 +5257,8 @@ elf_sort_sections (const void *arg1, const void *arg2)
/* Put !SEC_LOAD sections after SEC_LOAD ones. */
#define TOEND(x) (((x)->flags & (SEC_LOAD | SEC_THREAD_LOCAL)) == 0)
#define TOEND(x) (((x)->flags & (SEC_LOAD | SEC_THREAD_LOCAL)) == 0 \
&& (x)->size != 0)
if (TOEND (sec1))
{

View File

@ -1,3 +1,9 @@
2020-11-28 Alan Modra <amodra@gmail.com>
* testsuite/ld-elf/pr26907.ld,
* testsuite/ld-elf/pr26907.s,
* testsuite/ld-elf/pr26907.d: New test.
2020-11-27 Jozef Lawrynowicz <jozef.l@mittosystems.com>
* emulparams/armelf.sh (OTHER_SECTIONS): Remove .noinit section

View File

@ -0,0 +1,9 @@
#ld: -T pr26907.ld
#readelf: -lW
#xfail: dlx-*-* ft32-*-* h8300-*-* ip2k-*-* m32r*-*-elf* m32r*-*-rtems*
#xfail: moxie-*-* msp430-*-* mt-*-* pru*-*-* visium-*-*
#failif
#...
+LOAD +0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ 0x0+ 0x0+ .*
#...

View File

@ -0,0 +1,7 @@
ENTRY (_start)
SECTIONS
{
.text : { *(.text) }
.bss : { . = .; *(.bss) }
.data : { *(.data) }
}

View File

@ -0,0 +1,9 @@
.text
.global _start
_start:
.quad 0
.data
.quad 0
.section .bss,"aw",%nobits