This is the mail archive of the
binutils@sourceware.org
mailing list for the binutils project.
Alpha DT_RELA
- From: Alan Modra <amodra at gmail dot com>
- To: Richard Henderson <rth at redhat dot com>
- Cc: binutils at sourceware dot org
- Date: Mon, 20 Feb 2017 21:01:27 +1030
- Subject: Alpha DT_RELA
- Authentication-results: sourceware.org; auth=none
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