aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIan Lance Taylor <iant@google.com>2007-11-14 18:44:58 +0000
committerIan Lance Taylor <iant@google.com>2007-11-14 18:44:58 +0000
commit78f156961e3ba5ed89e28c0c82ca3c891cfdc017 (patch)
tree2200e6193feec909770ed91559c0f0749ce3d1ab
parenteb01e199fdf149d5e17945ebe6a413c07d278620 (diff)
downloadfsf-binutils-gdb-78f156961e3ba5ed89e28c0c82ca3c891cfdc017.zip
fsf-binutils-gdb-78f156961e3ba5ed89e28c0c82ca3c891cfdc017.tar.gz
fsf-binutils-gdb-78f156961e3ba5ed89e28c0c82ca3c891cfdc017.tar.bz2
From Craig Silverstein: Report output file name with ODR violation
warning message.
-rw-r--r--gold/gold.cc2
-rw-r--r--gold/symtab.cc7
-rw-r--r--gold/symtab.h2
-rwxr-xr-xgold/testsuite/debug_msg.sh2
4 files changed, 7 insertions, 6 deletions
diff --git a/gold/gold.cc b/gold/gold.cc
index 2f17add..a4f145e 100644
--- a/gold/gold.cc
+++ b/gold/gold.cc
@@ -186,7 +186,7 @@ queue_middle_tasks(const General_options& options,
// See if any of the input definitions violate the One Definition Rule.
// TODO: if this is too slow, do this as a task, rather than inline.
- symtab->detect_odr_violations();
+ symtab->detect_odr_violations(options.output_file_name());
// Define some sections and symbols needed for a dynamic link. This
// handles some cases we want to see before we read the relocs.
diff --git a/gold/symtab.cc b/gold/symtab.cc
index 539bf32..caac2a7 100644
--- a/gold/symtab.cc
+++ b/gold/symtab.cc
@@ -1852,7 +1852,7 @@ Symbol_table::sized_write_section_symbol(const Output_section* os,
// but apparently different definitions (different source-file/line-no).
void
-Symbol_table::detect_odr_violations() const
+Symbol_table::detect_odr_violations(const char* output_file_name) const
{
for (Odr_map::const_iterator it = candidate_odr_violations_.begin();
it != candidate_odr_violations_.end();
@@ -1881,8 +1881,9 @@ Symbol_table::detect_odr_violations() const
if (line_nums.size() > 1)
{
- gold_warning(_("symbol %s defined in multiple places "
- "(possible ODR violation):"), symbol_name);
+ gold_warning(_("while linking %s: symbol %s defined in multiple "
+ "places (possible ODR violation):"),
+ output_file_name, symbol_name);
for (std::set<std::string>::const_iterator it2 = line_nums.begin();
it2 != line_nums.end();
++it2)
diff --git a/gold/symtab.h b/gold/symtab.h
index d321122..3d3adbc 100644
--- a/gold/symtab.h
+++ b/gold/symtab.h
@@ -1027,7 +1027,7 @@ class Symbol_table
// Check candidate_odr_violations_ to find symbols with the same name
// but apparently different definitions (different source-file/line-no).
void
- detect_odr_violations() const;
+ detect_odr_violations(const char* output_file_name) const;
// SYM is defined using a COPY reloc. Return the dynamic object
// where the original definition was found.
diff --git a/gold/testsuite/debug_msg.sh b/gold/testsuite/debug_msg.sh
index 26c8ded..987aab7 100755
--- a/gold/testsuite/debug_msg.sh
+++ b/gold/testsuite/debug_msg.sh
@@ -56,7 +56,7 @@ check "debug_msg.o: in function int testfn<double>(double):${srcdir}/debug_msg.c
check "debug_msg.o: in function int testfn<double>(double):${srcdir}/debug_msg.cc:45: undefined reference to 'undef_int'"
# Check we detected the ODR (One Definition Rule) violation.
-check "warning: symbol Ordering::operator()(int, int) *defined in multiple places (possible ODR violation):"
+check ": symbol Ordering::operator()(int, int) *defined in multiple places (possible ODR violation):"
check "odr_violation1.cc:5"
check "odr_violation2.cc:5"