alpha: Warn DT_TEXTREL with -M
authorH.J. Lu <hjl.tools@gmail.com>
Tue, 21 Apr 2020 12:20:11 +0000 (05:20 -0700)
committerH.J. Lu <hjl.tools@gmail.com>
Tue, 21 Apr 2020 12:20:23 +0000 (05:20 -0700)
This fixes:

FAIL: DT_TEXTREL map file warning

* elf64-alpha.c (alpha_elf_reloc_entry): Replace reltext with
sec.
(elf64_alpha_check_relocs): Set sec instead of reltext.  Warn
DT_TEXTREL with -M.
(elf64_alpha_calc_dynrel_sizes): Warn DT_TEXTREL with -M.

bfd/ChangeLog
bfd/elf64-alpha.c

index 1b174f308227955b1006325ff48d719606ccddfa..a15a0f377577d33419fd422053fd08494951dd7b 100644 (file)
@@ -1,3 +1,11 @@
+2020-04-21  H.J. Lu  <hongjiu.lu@intel.com>
+
+       * elf64-alpha.c (alpha_elf_reloc_entry): Replace reltext with
+       sec.
+       (elf64_alpha_check_relocs): Set sec instead of reltext.  Warn
+       DT_TEXTREL with -M.
+       (elf64_alpha_calc_dynrel_sizes): Warn DT_TEXTREL with -M.
+
 2020-04-21  Nick Clifton  <nickc@redhat.com>
 
        * po/sr.po: Updated Serbian translation.
index ca15944e608da0138e36e6713422c5a6d09ac344..9f79d8e3fba8f73abd99442f8eef861368185795 100644 (file)
@@ -144,14 +144,14 @@ struct alpha_elf_reloc_entry
   /* Which .reloc section? */
   asection *srel;
 
-  /* What kind of relocation? */
-  unsigned int rtype;
-
-  /* Is this against read-only section? */
-  unsigned int reltext : 1;
+  /* Which section this relocation is against? */
+  asection *sec;
 
   /* How many did we find?  */
   unsigned long count;
+
+  /* What kind of relocation? */
+  unsigned int rtype;
 };
 
 struct alpha_elf_link_hash_entry
@@ -1998,9 +1998,9 @@ elf64_alpha_check_relocs (bfd *abfd, struct bfd_link_info *info,
                    return FALSE;
 
                  rent->srel = sreloc;
+                 rent->sec = sec;
                  rent->rtype = r_type;
                  rent->count = 1;
-                 rent->reltext = (sec->flags & SEC_READONLY) != 0;
 
                  rent->next = h->reloc_entries;
                  h->reloc_entries = rent;
@@ -2014,7 +2014,13 @@ elf64_alpha_check_relocs (bfd *abfd, struct bfd_link_info *info,
                 loaded into memory, we need a RELATIVE reloc.  */
              sreloc->size += sizeof (Elf64_External_Rela);
              if (sec->flags & SEC_READONLY)
-               info->flags |= DF_TEXTREL;
+               {
+                 info->flags |= DF_TEXTREL;
+                 info->callbacks->minfo
+                   (_("%pB: dynamic relocation against `%pT' in "
+                      "read-only section `%pA'\n"),
+                    sec->owner, h->root.root.root.string, sec);
+               }
            }
        }
     }
@@ -2699,10 +2705,17 @@ elf64_alpha_calc_dynrel_sizes (struct alpha_elf_link_hash_entry *h,
                                                 bfd_link_pie (info));
       if (entries)
        {
+         asection *sec = relent->sec;
          relent->srel->size +=
            entries * sizeof (Elf64_External_Rela) * relent->count;
-         if (relent->reltext)
-           info->flags |= DT_TEXTREL;
+         if ((sec->flags & SEC_READONLY) != 0)
+           {
+             info->flags |= DT_TEXTREL;
+             info->callbacks->minfo
+               (_("%pB: dynamic relocation against `%pT' in "
+                  "read-only section `%pA'\n"),
+                sec->owner, h->root.root.root.string, sec);
+           }
        }
     }