Browse Source

Avoid unused space in .rela.dyn if sec was discarded

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.
master
Jinyang He 3 years ago
committed by liuzhensong
parent
commit
fb266c9083
  1. 2
      bfd/elfnn-loongarch.c
  2. 1
      ld/testsuite/ld-loongarch-elf/ld-loongarch-elf.exp
  3. 10
      ld/testsuite/ld-loongarch-elf/pie_discard.d
  4. 9
      ld/testsuite/ld-loongarch-elf/pie_discard.s
  5. 9
      ld/testsuite/ld-loongarch-elf/pie_discard.t

2
bfd/elfnn-loongarch.c

@ -1368,6 +1368,8 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
for (p = h->dyn_relocs; p != NULL; p = p->next) for (p = h->dyn_relocs; p != NULL; p = p->next)
{ {
if (discarded_section (p->sec))
continue;
asection *sreloc = elf_section_data (p->sec)->sreloc; asection *sreloc = elf_section_data (p->sec)->sreloc;
sreloc->size += p->count * sizeof (ElfNN_External_Rela); sreloc->size += p->count * sizeof (ElfNN_External_Rela);
} }

1
ld/testsuite/ld-loongarch-elf/ld-loongarch-elf.exp

@ -147,3 +147,4 @@ run_dump_test "underflow_b16"
run_dump_test "underflow_b21" run_dump_test "underflow_b21"
run_dump_test "underflow_b26" run_dump_test "underflow_b26"
run_dump_test "underflow_pcrel20" run_dump_test "underflow_pcrel20"
run_dump_test "pie_discard"

10
ld/testsuite/ld-loongarch-elf/pie_discard.d

@ -0,0 +1,10 @@
#source: pie_discard.s
#ld: -pie -e 0 -T pie_discard.t
#readelf: -rW
#...
Relocation section '\.rela\.dyn' .* 1 .*
#...
.*R_LARCH_RELATIVE.*
#pass

9
ld/testsuite/ld-loongarch-elf/pie_discard.s

@ -0,0 +1,9 @@
.text
.global sym
sym: nop
.section .data,"aw"
.dword sym
.section .discard,"aw"
.dword sym

9
ld/testsuite/ld-loongarch-elf/pie_discard.t

@ -0,0 +1,9 @@
SECTIONS
{
. = SEGMENT_START("text-segment", 0) + SIZEOF_HEADERS;
.rela.dyn : { *(.rela.*) }
.text : { *(.text) }
. = DATA_SEGMENT_ALIGN (CONSTANT (MAXPAGESIZE), CONSTANT (COMMONPAGESIZE));
.data : { *(.data) }
/DISCARD/ : { *(.discard) }
}
Loading…
Cancel
Save