]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
nios2: Call _bfd_elf_maybe_set_textrel to set DF_TEXTREL
authorH.J. Lu <hjl.tools@gmail.com>
Wed, 3 Jun 2020 16:25:51 +0000 (09:25 -0700)
committerH.J. Lu <hjl.tools@gmail.com>
Wed, 3 Jun 2020 16:25:51 +0000 (09:25 -0700)
Call _bfd_elf_maybe_set_textrel to set DF_TEXTREL by scanning dynamic
relocations in read-only section.

PR ld/26066
* elf32-nios2.c (nios2_elf32_size_dynamic_sections): Call
_bfd_elf_maybe_set_textrel to set DF_TEXTREL.

bfd/ChangeLog
bfd/elf32-nios2.c

index 08f8a50eede80f9391ba0d24418690b6b382bbb1..c9f46d6d67dd18e0d35524f5f76c49d591a9cd33 100644 (file)
@@ -1,3 +1,9 @@
+2020-06-03  H.J. Lu  <hongjiu.lu@intel.com>
+
+       PR ld/26066
+       * elf32-nios2.c (nios2_elf32_size_dynamic_sections): Call
+       _bfd_elf_maybe_set_textrel to set DF_TEXTREL.
+
 2020-06-03  H.J. Lu  <hongjiu.lu@intel.com>
 
        PR ld/26066
index 453b7cf5a3de86d3ab01eae39f5fd1e9baa3a37e..71200da9b57b05468df2c0c886a379c64f890a50 100644 (file)
@@ -5761,8 +5761,6 @@ nios2_elf32_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED,
                {
                  srel = elf_section_data (p->sec)->sreloc;
                  srel->size += p->count * sizeof (Elf32_External_Rela);
-                 if ((p->sec->output_section->flags & SEC_READONLY) != 0)
-                   info->flags |= DF_TEXTREL;
                }
            }
        }
@@ -5911,17 +5909,24 @@ nios2_elf32_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED,
              || !add_dynamic_entry (DT_JMPREL, 0)))
        return FALSE;
 
-      if (relocs
-         && (!add_dynamic_entry (DT_RELA, 0)
+      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;
+             || !add_dynamic_entry (DT_RELAENT,
+                                    sizeof (Elf32_External_Rela)))
+           return FALSE;
 
-      if (!bfd_link_pic (info) && !add_dynamic_entry (DT_NIOS2_GP, 0))
-       return FALSE;
+         if ((info->flags & DF_TEXTREL) == 0)
+           elf_link_hash_traverse (&htab->root,
+                                   _bfd_elf_maybe_set_textrel, info);
 
-      if ((info->flags & DF_TEXTREL) != 0
-         && !add_dynamic_entry (DT_TEXTREL, 0))
+         if ((info->flags & DF_TEXTREL) != 0
+             && !add_dynamic_entry (DT_TEXTREL, 0))
+           return FALSE;
+       }
+
+      if (!bfd_link_pic (info) && !add_dynamic_entry (DT_NIOS2_GP, 0))
        return FALSE;
     }
 #undef add_dynamic_entry