Improve warnings for relocations referring to discarded sections.
authorCary Coutant <ccoutant@gmail.com>
Thu, 5 Apr 2018 21:51:37 +0000 (14:51 -0700)
committerCary Coutant <ccoutant@gmail.com>
Thu, 5 Apr 2018 21:51:45 +0000 (14:51 -0700)
gold/
* target-reloc.h (relocate_section): Add local symbol index or global
symbol name to warning about relocation that refers to discarded
section.

gold/ChangeLog
gold/target-reloc.h

index 010dad4e18543c5f7b50858ad18e773a17533e8f..97777aaeed30355b5cdd03f7142f5af6999192b7 100644 (file)
@@ -1,3 +1,9 @@
+2018-04-05  Cary Coutant  <ccoutant@gmail.com>
+
+       * target-reloc.h (relocate_section): Add local symbol index or global
+       symbol name to warning about relocation that refers to discarded
+       section.
+
 2018-04-05  James Cowgill  <james.cowgill@mips.com>
 
        Revert previous patch and apply revised patch.
index f52e42f62e038b354cfb52e9b12c08381d5d3c6b..36032fbefbe250818c857c34b11b857e2a814cc1 100644 (file)
@@ -305,6 +305,7 @@ relocate_section(
       const Symbol_value<size> *psymval;
       bool is_defined_in_discarded_section;
       unsigned int shndx;
+      const Symbol* gsym = NULL;
       if (r_sym < local_count
          && (reloc_symbol_changes == NULL
              || (*reloc_symbol_changes)[i] == NULL))
@@ -327,7 +328,6 @@ relocate_section(
        }
       else
        {
-         const Symbol* gsym;
          if (reloc_symbol_changes != NULL
              && (*reloc_symbol_changes)[i] != NULL)
            gsym = (*reloc_symbol_changes)[i];
@@ -383,9 +383,24 @@ relocate_section(
          else
            {
              if (comdat_behavior == CB_WARNING)
-               gold_warning_at_location(relinfo, i, offset,
-                                        _("relocation refers to discarded "
-                                          "section"));
+               {
+                 if (gsym == NULL)
+                   {
+                     gold_warning_at_location(
+                         relinfo, i, offset,
+                         _("relocation refers to local symbol %d "
+                           "defined in discarded section"),
+                         r_sym);
+                   }
+                 else
+                   {
+                     gold_warning_at_location(
+                         relinfo, i, offset,
+                         _("relocation refers to symbol \"%s\" "
+                           "defined in discarded section"),
+                         gsym->demangled_name().c_str());
+                   }
+               }
              symval2.set_output_value(0);
            }
          symval2.set_no_output_symtab_entry();