diff options
author | Alan Modra <amodra@gmail.com> | 2017-02-20 17:57:43 +1030 |
---|---|---|
committer | Alan Modra <amodra@gmail.com> | 2017-02-21 11:49:37 +1030 |
commit | 24f1a75169e554d418be009d803a02e441584ea7 (patch) | |
tree | e064932f37d7ce5c02b2336698ae638a846b29b8 | |
parent | 262062fffd192fe76a6c59741bbbb1c5ae0bae53 (diff) | |
download | gdb-24f1a75169e554d418be009d803a02e441584ea7.zip gdb-24f1a75169e554d418be009d803a02e441584ea7.tar.gz gdb-24f1a75169e554d418be009d803a02e441584ea7.tar.bz2 |
Alpha DT_RELA
* elf64-alpha.c (elf64_alpha_size_dynamic_sections): Only emit
DT_RELA, DT_RELASZ, and DT_RELAENT when DT_RELASZ is non-zero.
-rw-r--r-- | bfd/ChangeLog | 5 | ||||
-rw-r--r-- | bfd/elf64-alpha.c | 22 |
2 files changed, 19 insertions, 8 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 3e90624..ac3f160 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,8 @@ +2017-02-21 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 |