The relsec size is still increased although sec is discarded, which
cause a lot of unused space allocated. Avoid size increased if sec
was discarded.
bfd/ChangeLog:
* bfd/elfnn-loongarch.c: (allocate_dynrelocs): Do not increase
sreloc size when discarded_section.
ld/ChangeLog:
* ld/testsuite/ld-loongarch-elf/ld-loongarch-elf.exp: Add test.
* ld/testsuite/ld-loongarch-elf/pie_discard.d: New test.
* ld/testsuite/ld-loongarch-elf/pie_discard.s: New test.
* ld/testsuite/ld-loongarch-elf/pie_discard.t: New test.
for (p = h->dyn_relocs; p != NULL; p = p->next)
{
+ if (discarded_section (p->sec))
+ continue;
asection *sreloc = elf_section_data (p->sec)->sreloc;
sreloc->size += p->count * sizeof (ElfNN_External_Rela);
}
run_dump_test "underflow_b21"
run_dump_test "underflow_b26"
run_dump_test "underflow_pcrel20"
+run_dump_test "pie_discard"
--- /dev/null
+#source: pie_discard.s
+#ld: -pie -e 0 -T pie_discard.t
+#readelf: -rW
+
+#...
+Relocation section '\.rela\.dyn' .* 1 .*
+#...
+.*R_LARCH_RELATIVE.*
+#pass
+
--- /dev/null
+ .text
+ .global sym
+sym: nop
+
+ .section .data,"aw"
+ .dword sym
+
+ .section .discard,"aw"
+ .dword sym
--- /dev/null
+SECTIONS
+{
+ . = SEGMENT_START("text-segment", 0) + SIZEOF_HEADERS;
+ .rela.dyn : { *(.rela.*) }
+ .text : { *(.text) }
+ . = DATA_SEGMENT_ALIGN (CONSTANT (MAXPAGESIZE), CONSTANT (COMMONPAGESIZE));
+ .data : { *(.data) }
+ /DISCARD/ : { *(.discard) }
+}