csky: Don't generate unnecessary dynamic tags

Message ID 20200623121439.212935-1-hjl.tools@gmail.com
State New
Headers show
Series
  • csky: Don't generate unnecessary dynamic tags
Related show

Commit Message

Alan Modra via Binutils June 23, 2020, 12:14 p.m.
Dynamic tags, DT_JMPREL, PLTREL and PLTRELSZ, are needed only if there
are relocation entries for PLT.  Don't generate them if there are no
relocation entries for PLT.

bfd/

	PR ld/26083
	* elf32-csky.c (csky_elf_size_dynamic_sections): Call
	_bfd_elf_add_dynamic_tags.

ld/

	PR ld/26083
	* testsuite/ld-csky/tls-ie-v1.d: Updated.
	* testsuite/ld-csky/tls-ie.d: Likewise.
---
 bfd/elf32-csky.c                 | 45 ++------------------------------
 ld/testsuite/ld-csky/tls-ie-v1.d |  5 +---
 ld/testsuite/ld-csky/tls-ie.d    |  5 +---
 3 files changed, 4 insertions(+), 51 deletions(-)

-- 
2.26.2

Comments

Lifang Xia June 24, 2020, 12:56 p.m. | #1
在 2020/6/23 20:14, H.J. Lu 写道:
> Dynamic tags, DT_JMPREL, PLTREL and PLTRELSZ, are needed only if there

> are relocation entries for PLT.  Don't generate them if there are no

> relocation entries for PLT.


That's OK for me. Thanks.

Best regards

Lifang Xia

Patch

diff --git a/bfd/elf32-csky.c b/bfd/elf32-csky.c
index 43828beed0..ea58e14c00 100644
--- a/bfd/elf32-csky.c
+++ b/bfd/elf32-csky.c
@@ -2093,49 +2093,8 @@  csky_elf_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED,
     }
 
   if (htab->elf.dynamic_sections_created)
-    {
-      /* Add some entries to the .dynamic section.  We fill in the
-	 values later, in csky_elf_finish_dynamic_sections, but we
-	 must add the entries now so that we get the correct size for
-	 the .dynamic section.  The DT_DEBUG entry is filled in by the
-	 dynamic linker and used by the debugger.  */
-#define add_dynamic_entry(TAG, VAL) \
-  _bfd_elf_add_dynamic_entry (info, TAG, VAL)
-
-      if (bfd_link_executable (info) && !add_dynamic_entry (DT_DEBUG, 0))
-	return FALSE;
-
-      if (htab->elf.sgot->size != 0 || htab->elf.splt->size)
-	{
-	  if (!add_dynamic_entry (DT_PLTGOT, 0)
-	      || !add_dynamic_entry (DT_PLTRELSZ, 0)
-	      || !add_dynamic_entry (DT_PLTREL, DT_RELA)
-	      || !add_dynamic_entry (DT_JMPREL, 0))
-	    return FALSE;
-	}
-
-      if (relocs)
-	{
-	  if (!add_dynamic_entry (DT_RELA, 0)
-	      || !add_dynamic_entry (DT_RELASZ, 0)
-	      || !add_dynamic_entry (DT_RELAENT,
-				     sizeof (Elf32_External_Rela)))
-	    return FALSE;
-
-	  /* If any dynamic relocs apply to a read-only section,
-	     then we need a DT_TEXTREL entry.  */
-	  if ((info->flags & DF_TEXTREL) == 0)
-	    elf_link_hash_traverse (&htab->elf,
-				    _bfd_elf_maybe_set_textrel, info);
-
-	  if ((info->flags & DF_TEXTREL) != 0
-	      && !add_dynamic_entry (DT_TEXTREL, 0))
-	    return FALSE;
-	}
-    }
-#undef add_dynamic_entry
-
-  return TRUE;
+    htab->elf.dt_pltgot_required = htab->elf.sgot->size != 0;
+  return _bfd_elf_add_dynamic_tags (output_bfd, info, relocs);
 }
 
 /* Finish up dynamic symbol handling.  We set the contents of various
diff --git a/ld/testsuite/ld-csky/tls-ie-v1.d b/ld/testsuite/ld-csky/tls-ie-v1.d
index 1f5f446e78..af1858c3b8 100644
--- a/ld/testsuite/ld-csky/tls-ie-v1.d
+++ b/ld/testsuite/ld-csky/tls-ie-v1.d
@@ -4,7 +4,7 @@ 
 #ld: -shared --hash-style=sysv
 #readelf: -d -r
 
-Dynamic section at offset 0x[0-9a-f]+ contains 13 entries:
+Dynamic section at offset 0x[0-9a-f]+ contains 10 entries:
   Tag        Type                         Name/Value
  0x00000004 \(HASH\)                       .*
  0x00000005 \(STRTAB\)                     .*
@@ -12,9 +12,6 @@  Dynamic section at offset 0x[0-9a-f]+ contains 13 entries:
  0x0000000a \(STRSZ\)                      .* \(bytes\)
  0x0000000b \(SYMENT\)                     .* \(bytes\)
  0x00000003 \(PLTGOT\)                     0x[0-9a-f]+
- 0x00000002 \(PLTRELSZ\)                   0 \(bytes\)
- 0x00000014 \(PLTREL\)                     RELA
- 0x00000017 \(JMPREL\)                     0x[0-9a-f]+
  0x00000007 \(RELA\)                       0x[0-9a-f]+
  0x00000008 \(RELASZ\)                     12 \(bytes\)
  0x00000009 \(RELAENT\)                    12 \(bytes\)
diff --git a/ld/testsuite/ld-csky/tls-ie.d b/ld/testsuite/ld-csky/tls-ie.d
index 45a8a1184a..38c2a911de 100644
--- a/ld/testsuite/ld-csky/tls-ie.d
+++ b/ld/testsuite/ld-csky/tls-ie.d
@@ -3,7 +3,7 @@ 
 #ld: -shared --hash-style=sysv
 #readelf: -d -r
 
-Dynamic section at offset 0x[0-9a-f]+ contains 13 entries:
+Dynamic section at offset 0x[0-9a-f]+ contains 10 entries:
   Tag        Type                         Name/Value
  0x00000004 \(HASH\)                       .*
  0x00000005 \(STRTAB\)                     .*
@@ -11,9 +11,6 @@  Dynamic section at offset 0x[0-9a-f]+ contains 13 entries:
  0x0000000a \(STRSZ\)                      .* \(bytes\)
  0x0000000b \(SYMENT\)                     .* \(bytes\)
  0x00000003 \(PLTGOT\)                     0x[0-9a-f]+
- 0x00000002 \(PLTRELSZ\)                   0 \(bytes\)
- 0x00000014 \(PLTREL\)                     RELA
- 0x00000017 \(JMPREL\)                     0x[0-9a-f]+
  0x00000007 \(RELA\)                       0x[0-9a-f]+
  0x00000008 \(RELASZ\)                     12 \(bytes\)
  0x00000009 \(RELAENT\)                    12 \(bytes\)