Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/external/gpl3/binutils/dist/bfd More detailed error messages...



details:   https://anonhg.NetBSD.org/src/rev/06580b039b53
branches:  trunk
changeset: 818834:06580b039b53
user:      christos <christos%NetBSD.org@localhost>
date:      Thu Nov 03 01:22:59 2016 +0000

description:
More detailed error messages for text relocations on ppc code. Tested by joerg@

diffstat:

 external/gpl3/binutils/dist/bfd/elf32-ppc.c |  21 +++++++++++++++------
 external/gpl3/binutils/dist/bfd/elf64-ppc.c |  21 +++++++++++++++------
 2 files changed, 30 insertions(+), 12 deletions(-)

diffs (132 lines):

diff -r 344286e6d4bb -r 06580b039b53 external/gpl3/binutils/dist/bfd/elf32-ppc.c
--- a/external/gpl3/binutils/dist/bfd/elf32-ppc.c       Thu Nov 03 00:10:49 2016 +0000
+++ b/external/gpl3/binutils/dist/bfd/elf32-ppc.c       Thu Nov 03 01:22:59 2016 +0000
@@ -5557,7 +5557,7 @@
 /* Return true if we have dynamic relocs that apply to read-only sections.  */
 
 static bfd_boolean
-readonly_dynrelocs (struct elf_link_hash_entry *h)
+readonly_dynrelocs (struct elf_link_hash_entry *h, void *inf, bfd_boolean warn)
 {
   struct elf_dyn_relocs *p;
 
@@ -5568,7 +5568,16 @@
       if (s != NULL
          && ((s->flags & (SEC_READONLY | SEC_ALLOC))
              == (SEC_READONLY | SEC_ALLOC)))
-       return TRUE;
+       {
+         struct bfd_link_info *info = (struct bfd_link_info *) inf;
+
+         if (warn && ((info->warn_shared_textrel && bfd_link_pic (info))
+             || info->error_textrel))
+           info->callbacks->einfo (_("%P: %B: warning: relocation against `%s' in readonly section `%A'\n"),
+                                   p->sec->owner, h->root.root.string,
+                                   p->sec);
+         return TRUE;
+       }
     }
   return FALSE;
 }
@@ -5642,7 +5651,7 @@
              && h->type != STT_GNU_IFUNC
              && !htab->is_vxworks
              && !ppc_elf_hash_entry (h)->has_sda_refs
-             && !readonly_dynrelocs (h))
+             && !readonly_dynrelocs (h, info, FALSE))
            {
              h->pointer_equality_needed = 0;
              h->non_got_ref = 0;
@@ -5662,7 +5671,7 @@
                   && h->type != STT_GNU_IFUNC
                   && !htab->is_vxworks
                   && !ppc_elf_hash_entry (h)->has_sda_refs
-                  && !readonly_dynrelocs (h))
+                  && !readonly_dynrelocs (h, info, FALSE))
            h->non_got_ref = 0;
        }
       h->protected_def = 0;
@@ -5739,7 +5748,7 @@
       && !ppc_elf_hash_entry (h)->has_sda_refs
       && !htab->is_vxworks
       && !h->def_regular
-      && !readonly_dynrelocs (h))
+      && !readonly_dynrelocs (h, info, FALSE))
     {
       h->non_got_ref = 0;
       return TRUE;
@@ -6249,7 +6258,7 @@
   if (h->root.type == bfd_link_hash_indirect)
     return TRUE;
 
-  if (readonly_dynrelocs (h))
+  if (readonly_dynrelocs (h, info, TRUE))
     {
       ((struct bfd_link_info *) info)->flags |= DF_TEXTREL;
 
diff -r 344286e6d4bb -r 06580b039b53 external/gpl3/binutils/dist/bfd/elf64-ppc.c
--- a/external/gpl3/binutils/dist/bfd/elf64-ppc.c       Thu Nov 03 00:10:49 2016 +0000
+++ b/external/gpl3/binutils/dist/bfd/elf64-ppc.c       Thu Nov 03 01:22:59 2016 +0000
@@ -7105,7 +7105,7 @@
 /* Return true if we have dynamic relocs that apply to read-only sections.  */
 
 static bfd_boolean
-readonly_dynrelocs (struct elf_link_hash_entry *h)
+readonly_dynrelocs (struct elf_link_hash_entry *h, void *inf, bfd_boolean warn)
 {
   struct ppc_link_hash_entry *eh;
   struct elf_dyn_relocs *p;
@@ -7116,7 +7116,16 @@
       asection *s = p->sec->output_section;
 
       if (s != NULL && (s->flags & SEC_READONLY) != 0)
-       return TRUE;
+       {
+         struct bfd_link_info *info = (struct bfd_link_info *) inf;
+
+         if (warn && ((info->warn_shared_textrel && bfd_link_pic (info))
+             || info->error_textrel))
+           info->callbacks->einfo (_("%P: %B: warning: relocation against `%s' in readonly section `%A'\n"),
+                                   p->sec->owner, h->root.root.string,
+                                   p->sec);
+         return TRUE;
+       }
     }
   return FALSE;
 }
@@ -7168,7 +7177,7 @@
             be used instead.  */
          if (h->pointer_equality_needed
              && h->type != STT_GNU_IFUNC
-             && !readonly_dynrelocs (h))
+             && !readonly_dynrelocs (h, info, FALSE))
            {
              h->pointer_equality_needed = 0;
              h->non_got_ref = 0;
@@ -7186,7 +7195,7 @@
          else if (!h->ref_regular_nonweak
                   && h->non_got_ref
                   && h->type != STT_GNU_IFUNC
-                  && !readonly_dynrelocs (h))
+                  && !readonly_dynrelocs (h, info, FALSE))
            h->non_got_ref = 0;
 
          /* If making a plt entry, then we don't need copy relocs.  */
@@ -7235,7 +7244,7 @@
 
   /* If we didn't find any dynamic relocs in read-only sections, then
      we'll be keeping the dynamic relocs and avoiding the copy reloc.  */
-  if (ELIMINATE_COPY_RELOCS && !readonly_dynrelocs (h))
+  if (ELIMINATE_COPY_RELOCS && !readonly_dynrelocs (h, info, FALSE))
     {
       h->non_got_ref = 0;
       return TRUE;
@@ -9844,7 +9853,7 @@
   if (h->root.type == bfd_link_hash_indirect)
     return TRUE;
 
-  if (readonly_dynrelocs (h))
+  if (readonly_dynrelocs (h, info, TRUE))
     {
       ((struct bfd_link_info *) info)->flags |= DF_TEXTREL;
 



Home | Main Index | Thread Index | Old Index