aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--bfd/ChangeLog7
-rw-r--r--bfd/elflink.c34
-rw-r--r--ld/testsuite/ChangeLog7
-rw-r--r--ld/testsuite/ld-discard/extern.d2
-rw-r--r--ld/testsuite/ld-discard/start.d2
-rw-r--r--ld/testsuite/ld-discard/static.d2
6 files changed, 36 insertions, 18 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index 20f0c22..464821d 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -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
diff --git a/bfd/elflink.c b/bfd/elflink.c
index 354cfbb..e682758 100644
--- a/bfd/elflink.c
+++ b/bfd/elflink.c
@@ -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);
diff --git a/ld/testsuite/ChangeLog b/ld/testsuite/ChangeLog
index e129ab5..3dacd1c 100644
--- a/ld/testsuite/ChangeLog
+++ b/ld/testsuite/ChangeLog
@@ -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:
diff --git a/ld/testsuite/ld-discard/extern.d b/ld/testsuite/ld-discard/extern.d
index 10fa0f7..df4c7d1 100644
--- a/ld/testsuite/ld-discard/extern.d
+++ b/ld/testsuite/ld-discard/extern.d
@@ -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
diff --git a/ld/testsuite/ld-discard/start.d b/ld/testsuite/ld-discard/start.d
index b8f46ae..f9885d4 100644
--- a/ld/testsuite/ld-discard/start.d
+++ b/ld/testsuite/ld-discard/start.d
@@ -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
diff --git a/ld/testsuite/ld-discard/static.d b/ld/testsuite/ld-discard/static.d
index 78b89b0..1aa44cd 100644
--- a/ld/testsuite/ld-discard/static.d
+++ b/ld/testsuite/ld-discard/static.d
@@ -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