public inbox for binutils@sourceware.org
 help / color / mirror / Atom feed
* Alpha DT_RELA
@ 2017-02-20 10:31 Alan Modra
  2017-02-20 20:19 ` Richard Henderson
  0 siblings, 1 reply; 2+ messages in thread
From: Alan Modra @ 2017-02-20 10:31 UTC (permalink / raw)
  To: Richard Henderson; +Cc: binutils

Hi Richard,
Most modern targets supported by binutils do not emit DT_RELA when
DT_RELASZ is zero, ie. you have .rela.plt relocs but no .rela.dyn
relocs.  This brings Alpha into line with the rest.  The ELF spec is
arguable regarding this practice so you might not see this as a
desirable change (but see PR21181).  OK?

diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index 3e90624..b58ed37 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -1,3 +1,8 @@
+2017-02-17  Alan Modra  <amodra@gmail.com>
+
+	* elf64-alpha.c (elf64_alpha_size_dynamic_sections): Only emit
+	DT_RELA, DT_RELASZ, and DT_RELAENT when DT_RELASZ is non-zero.
+
 2017-02-20  Alan Modra  <amodra@gmail.com>
 
 	PR 21181
diff --git a/bfd/elf64-alpha.c b/bfd/elf64-alpha.c
index b4a50f4..43c6ed8 100644
--- a/bfd/elf64-alpha.c
+++ b/bfd/elf64-alpha.c
@@ -2879,7 +2879,7 @@ elf64_alpha_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED,
 {
   bfd *dynobj;
   asection *s;
-  bfd_boolean relplt;
+  bfd_boolean relplt, relocs;
   struct alpha_elf_link_hash_table * htab;
 
   htab = alpha_elf_hash_table (info);
@@ -2916,6 +2916,7 @@ elf64_alpha_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED,
      determined the sizes of the various dynamic sections.  Allocate
      memory for them.  */
   relplt = FALSE;
+  relocs = FALSE;
   for (s = dynobj->sections; s != NULL; s = s->next)
     {
       const char *name;
@@ -2933,6 +2934,8 @@ elf64_alpha_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED,
 	    {
 	      if (strcmp (name, ".rela.plt") == 0)
 		relplt = TRUE;
+	      else
+		relocs = TRUE;
 
 	      /* We use the reloc_count field as a counter if we need
 		 to copy relocs into the output file.  */
@@ -2997,15 +3000,18 @@ elf64_alpha_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED,
 	    return FALSE;
 	}
 
-      if (!add_dynamic_entry (DT_RELA, 0)
-	  || !add_dynamic_entry (DT_RELASZ, 0)
-	  || !add_dynamic_entry (DT_RELAENT, sizeof (Elf64_External_Rela)))
-	return FALSE;
-
-      if (info->flags & DF_TEXTREL)
+      if (relocs)
 	{
-	  if (!add_dynamic_entry (DT_TEXTREL, 0))
+	  if (!add_dynamic_entry (DT_RELA, 0)
+	      || !add_dynamic_entry (DT_RELASZ, 0)
+	      || !add_dynamic_entry (DT_RELAENT, sizeof (Elf64_External_Rela)))
 	    return FALSE;
+
+	  if (info->flags & DF_TEXTREL)
+	    {
+	      if (!add_dynamic_entry (DT_TEXTREL, 0))
+		return FALSE;
+	    }
 	}
     }
 #undef add_dynamic_entry

-- 
Alan Modra
Australia Development Lab, IBM

^ permalink raw reply	[flat|nested] 2+ messages in thread

* Re: Alpha DT_RELA
  2017-02-20 10:31 Alpha DT_RELA Alan Modra
@ 2017-02-20 20:19 ` Richard Henderson
  0 siblings, 0 replies; 2+ messages in thread
From: Richard Henderson @ 2017-02-20 20:19 UTC (permalink / raw)
  To: Alan Modra; +Cc: binutils

On 02/20/2017 09:31 PM, Alan Modra wrote:
> Hi Richard,
> Most modern targets supported by binutils do not emit DT_RELA when
> DT_RELASZ is zero, ie. you have .rela.plt relocs but no .rela.dyn
> relocs.  This brings Alpha into line with the rest.  The ELF spec is
> arguable regarding this practice so you might not see this as a
> desirable change (but see PR21181).  OK?
>
> diff --git a/bfd/ChangeLog b/bfd/ChangeLog
> index 3e90624..b58ed37 100644
> --- a/bfd/ChangeLog
> +++ b/bfd/ChangeLog
> @@ -1,3 +1,8 @@
> +2017-02-17  Alan Modra  <amodra@gmail.com>
> +
> +	* elf64-alpha.c (elf64_alpha_size_dynamic_sections): Only emit
> +	DT_RELA, DT_RELASZ, and DT_RELAENT when DT_RELASZ is non-zero.
> +
>  2017-02-20  Alan Modra  <amodra@gmail.com>
>

Looks good.  Thanks for fixing this up.


r~

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2017-02-20 20:19 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-02-20 10:31 Alpha DT_RELA Alan Modra
2017-02-20 20:19 ` Richard Henderson

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).