From: iant Date: Wed, 14 Nov 2007 18:44:57 +0000 (+0000) Subject: From Craig Silverstein: Report output file name with ODR violation X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=538b3c42ae271927d9b00271504bde9809547fd9;p=pf3gnuchains%2Fpf3gnuchains3x.git From Craig Silverstein: Report output file name with ODR violation warning message. --- diff --git a/gold/gold.cc b/gold/gold.cc index 2f17add312..a4f145efba 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 539bf328c5..caac2a77fb 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::const_iterator it2 = line_nums.begin(); it2 != line_nums.end(); ++it2) diff --git a/gold/symtab.h b/gold/symtab.h index d32112256a..3d3adbcc5a 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 26c8ded960..987aab7d6e 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):${srcdir}/debug_msg.c check "debug_msg.o: in function int testfn(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"