aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--bfd/ChangeLog6
-rw-r--r--bfd/elf.c3
-rw-r--r--ld/ChangeLog6
-rw-r--r--ld/testsuite/ld-elf/pr26907.d9
-rw-r--r--ld/testsuite/ld-elf/pr26907.ld7
-rw-r--r--ld/testsuite/ld-elf/pr26907.s9
6 files changed, 39 insertions, 1 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index 1e5e923..83eb645 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -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.
diff --git a/bfd/elf.c b/bfd/elf.c
index 28621da..419c5f4 100644
--- a/bfd/elf.c
+++ b/bfd/elf.c
@@ -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))
{
diff --git a/ld/ChangeLog b/ld/ChangeLog
index fbc2d8a..b6d1aef 100644
--- a/ld/ChangeLog
+++ b/ld/ChangeLog
@@ -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
diff --git a/ld/testsuite/ld-elf/pr26907.d b/ld/testsuite/ld-elf/pr26907.d
new file mode 100644
index 0000000..1efb8cc
--- /dev/null
+++ b/ld/testsuite/ld-elf/pr26907.d
@@ -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+ .*
+#...
diff --git a/ld/testsuite/ld-elf/pr26907.ld b/ld/testsuite/ld-elf/pr26907.ld
new file mode 100644
index 0000000..2cce1ee
--- /dev/null
+++ b/ld/testsuite/ld-elf/pr26907.ld
@@ -0,0 +1,7 @@
+ENTRY (_start)
+SECTIONS
+{
+ .text : { *(.text) }
+ .bss : { . = .; *(.bss) }
+ .data : { *(.data) }
+}
diff --git a/ld/testsuite/ld-elf/pr26907.s b/ld/testsuite/ld-elf/pr26907.s
new file mode 100644
index 0000000..13b3a54
--- /dev/null
+++ b/ld/testsuite/ld-elf/pr26907.s
@@ -0,0 +1,9 @@
+ .text
+ .global _start
+_start:
+ .quad 0
+
+ .data
+ .quad 0
+
+ .section .bss,"aw",%nobits