public inbox for binutils@sourceware.org
 help / color / mirror / Atom feed
* [PATCH] Avoid unused space in .rela.dyn if sec was discarded
@ 2023-09-15  3:52 Jinyang He
  0 siblings, 0 replies; only message in thread
From: Jinyang He @ 2023-09-15  3:52 UTC (permalink / raw)
  To: Chenghua Xu, Zhensong Liu, mengqinggang
  Cc: WANG Xuerui, Xi Ruoyao, binutils, Xing Li, Jinyang He

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.
---
 bfd/elfnn-loongarch.c                              |  2 ++
 ld/testsuite/ld-loongarch-elf/ld-loongarch-elf.exp |  2 ++
 ld/testsuite/ld-loongarch-elf/pie_discard.d        | 10 ++++++++++
 ld/testsuite/ld-loongarch-elf/pie_discard.s        |  9 +++++++++
 ld/testsuite/ld-loongarch-elf/pie_discard.t        |  9 +++++++++
 5 files changed, 32 insertions(+)
 create mode 100644 ld/testsuite/ld-loongarch-elf/pie_discard.d
 create mode 100644 ld/testsuite/ld-loongarch-elf/pie_discard.s
 create mode 100644 ld/testsuite/ld-loongarch-elf/pie_discard.t

diff --git a/bfd/elfnn-loongarch.c b/bfd/elfnn-loongarch.c
index 70a666283af..5d10fee3560 100644
--- a/bfd/elfnn-loongarch.c
+++ b/bfd/elfnn-loongarch.c
@@ -1228,6 +1228,8 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
 
   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);
     }
diff --git a/ld/testsuite/ld-loongarch-elf/ld-loongarch-elf.exp b/ld/testsuite/ld-loongarch-elf/ld-loongarch-elf.exp
index b95cc53e597..637e4c3fcff 100644
--- a/ld/testsuite/ld-loongarch-elf/ld-loongarch-elf.exp
+++ b/ld/testsuite/ld-loongarch-elf/ld-loongarch-elf.exp
@@ -56,3 +56,5 @@ if [istarget "loongarch64-*-*"] {
 	  ] \
       ]
 }
+
+run_dump_test "pie_discard"
diff --git a/ld/testsuite/ld-loongarch-elf/pie_discard.d b/ld/testsuite/ld-loongarch-elf/pie_discard.d
new file mode 100644
index 00000000000..7b8630912b5
--- /dev/null
+++ b/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
+
diff --git a/ld/testsuite/ld-loongarch-elf/pie_discard.s b/ld/testsuite/ld-loongarch-elf/pie_discard.s
new file mode 100644
index 00000000000..82b88fc1e48
--- /dev/null
+++ b/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
diff --git a/ld/testsuite/ld-loongarch-elf/pie_discard.t b/ld/testsuite/ld-loongarch-elf/pie_discard.t
new file mode 100644
index 00000000000..49e52cdb4b1
--- /dev/null
+++ b/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) }
+}
-- 
2.41.0


^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2023-09-15  3:52 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-09-15  3:52 [PATCH] Avoid unused space in .rela.dyn if sec was discarded Jinyang He

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).