bfd/
authorH.J. Lu <hjl.tools@gmail.com>
Wed, 30 Jun 2004 16:19:20 +0000 (16:19 +0000)
committerH.J. Lu <hjl.tools@gmail.com>
Wed, 30 Jun 2004 16:19:20 +0000 (16:19 +0000)
2004-06-30  H.J. Lu  <hongjiu.lu@intel.com>

PR 233
* elflink.c (elf_link_input_bfd): Issue an error for non-debug
local references to discarded sections and report their
locations.

ld/testsuite/

2004-06-30  H.J. Lu  <hongjiu.lu@intel.com>

PR 233
* ld-discard/extern.d: Updated.
* ld-discard/start.d: Likewise.
* ld-discard/static.d: Likewise.

bfd/ChangeLog
bfd/elflink.c
ld/testsuite/ChangeLog
ld/testsuite/ld-discard/extern.d
ld/testsuite/ld-discard/start.d
ld/testsuite/ld-discard/static.d

index 20f0c22..464821d 100644 (file)
@@ -1,3 +1,10 @@
+2004-06-30  H.J. Lu  <hongjiu.lu@intel.com>
+
+       PR 233
+       * elflink.c (elf_link_input_bfd): Issue an error for non-debug
+       local references to discarded sections and report their
+       locations.
+
 2004-06-30  Alan Modra  <amodra@bigpond.net.au>
 
        * elflink.c (elf_section_ignore_discarded_relocs): Don't test
index 354cfbb..e682758 100644 (file)
@@ -6581,8 +6581,7 @@ elf_link_input_bfd (struct elf_final_link_info *finfo, bfd *input_bfd)
                            {
                              BFD_ASSERT (r_symndx != 0);
                              /* Try to preserve debug information.  */
-                             if ((o->flags & SEC_DEBUGGING) != 0
-                                 && sec->kept_section != NULL
+                             if (sec->kept_section != NULL
                                  && sec->size == sec->kept_section->size)
                                h->root.u.def.section
                                  = sec->kept_section;
@@ -6590,13 +6589,20 @@ elf_link_input_bfd (struct elf_final_link_info *finfo, bfd *input_bfd)
                                memset (rel, 0, sizeof (*rel));
                            }
                          else
-                           finfo->info->callbacks->error_handler
-                             (LD_DEFINITION_IN_DISCARDED_SECTION,
-                              _("%T: discarded in section `%s' from %s\n"),
-                              h->root.root.string,
-                              h->root.root.string,
-                              h->root.u.def.section->name,
-                              bfd_archive_filename (h->root.u.def.section->owner));
+                           {
+                             char *r_name
+                               = xstrdup (bfd_archive_filename (o->owner));
+                             finfo->info->callbacks->error_handler
+                               (LD_DEFINITION_IN_DISCARDED_SECTION,
+                                _("`%T' referenced in section `%s' from %s: discarded in section `%s' from %s\n"),
+                                h->root.root.string,
+                                h->root.root.string,
+                                o->name, r_name,
+                                h->root.u.def.section->name,
+                                bfd_archive_filename (h->root.u.def.section->owner));
+                             if (r_name)
+                               free (r_name);
+                           }
                        }
                    }
                  else
@@ -6605,13 +6611,11 @@ elf_link_input_bfd (struct elf_final_link_info *finfo, bfd *input_bfd)
 
                      if (sec != NULL && elf_discarded_section (sec))
                        {
-                         if ((o->flags & SEC_DEBUGGING) != 0
-                             || (sec->flags & SEC_LINK_ONCE) != 0)
+                         if ((o->flags & SEC_DEBUGGING) != 0)
                            {
                              BFD_ASSERT (r_symndx != 0);
                              /* Try to preserve debug information.  */
-                             if ((o->flags & SEC_DEBUGGING) != 0
-                                 && sec->kept_section != NULL
+                             if (sec->kept_section != NULL
                                  && sec->size == sec->kept_section->size)
                                finfo->sections[r_symndx]
                                  = sec->kept_section;
@@ -6633,8 +6637,8 @@ elf_link_input_bfd (struct elf_final_link_info *finfo, bfd *input_bfd)
                                buf = (char *) "local symbol";
                              finfo->info->callbacks->error_handler
                                (LD_DEFINITION_IN_DISCARDED_SECTION,
-                                _("%T: discarded in section `%s' from %s\n"),
-                                buf, buf, sec->name,
+                                _("`%T' referenced in section `%s': discarded in section `%s' from %s\n"),
+                                buf, buf, o->name, sec->name,
                                 bfd_archive_filename (input_bfd));
                              if (ok != -1)
                                free (buf);
index e129ab5..3dacd1c 100644 (file)
@@ -1,3 +1,10 @@
+2004-06-30  H.J. Lu  <hongjiu.lu@intel.com>
+
+       PR 233
+       * ld-discard/extern.d: Updated.
+       * ld-discard/start.d: Likewise.
+       * ld-discard/static.d: Likewise.
+
 2004-06-29  J"orn Rennecke <joern.rennecke@superh.com>
 
        Actually add these files:
index 10fa0f7..df4c7d1 100644 (file)
@@ -1,3 +1,3 @@
 #source: extern.s
 #ld: -T discard.ld
-#error: data: discarded in section `\.data\.exit' from tmpdir/dump0.o
+#error: `data' referenced in section `\.text' from tmpdir/dump0.o: discarded in section `\.data\.exit' from tmpdir/dump0.o
index b8f46ae..f9885d4 100644 (file)
@@ -1,4 +1,4 @@
 #source: start.s
 #source: exit.s
 #ld: -T discard.ld
-#error: data: discarded in section `\.data\.exit' from tmpdir/dump1.o
+#error: `data' referenced in section `\.text' from tmpdir/dump0.o: discarded in section `\.data\.exit' from tmpdir/dump1.o
index 78b89b0..1aa44cd 100644 (file)
@@ -1,3 +1,3 @@
 #source: static.s
 #ld: -T discard.ld
-#error: local symbol 0: discarded in section `\.data\.exit' from tmpdir/dump0.o
+#error: `local symbol 0' referenced in section `\.text': discarded in section `\.data\.exit' from tmpdir/dump0.o