mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-22 19:09:31 +08:00
From Craig Silverstein: Report output file name with ODR violation
warning message.
This commit is contained in:
@ -186,7 +186,7 @@ queue_middle_tasks(const General_options& options,
|
|||||||
|
|
||||||
// See if any of the input definitions violate the One Definition Rule.
|
// 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.
|
// 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
|
// Define some sections and symbols needed for a dynamic link. This
|
||||||
// handles some cases we want to see before we read the relocs.
|
// handles some cases we want to see before we read the relocs.
|
||||||
|
@ -1852,7 +1852,7 @@ Symbol_table::sized_write_section_symbol(const Output_section* os,
|
|||||||
// but apparently different definitions (different source-file/line-no).
|
// but apparently different definitions (different source-file/line-no).
|
||||||
|
|
||||||
void
|
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();
|
for (Odr_map::const_iterator it = candidate_odr_violations_.begin();
|
||||||
it != candidate_odr_violations_.end();
|
it != candidate_odr_violations_.end();
|
||||||
@ -1881,8 +1881,9 @@ Symbol_table::detect_odr_violations() const
|
|||||||
|
|
||||||
if (line_nums.size() > 1)
|
if (line_nums.size() > 1)
|
||||||
{
|
{
|
||||||
gold_warning(_("symbol %s defined in multiple places "
|
gold_warning(_("while linking %s: symbol %s defined in multiple "
|
||||||
"(possible ODR violation):"), symbol_name);
|
"places (possible ODR violation):"),
|
||||||
|
output_file_name, symbol_name);
|
||||||
for (std::set<std::string>::const_iterator it2 = line_nums.begin();
|
for (std::set<std::string>::const_iterator it2 = line_nums.begin();
|
||||||
it2 != line_nums.end();
|
it2 != line_nums.end();
|
||||||
++it2)
|
++it2)
|
||||||
|
@ -1027,7 +1027,7 @@ class Symbol_table
|
|||||||
// Check candidate_odr_violations_ to find symbols with the same name
|
// Check candidate_odr_violations_ to find symbols with the same name
|
||||||
// but apparently different definitions (different source-file/line-no).
|
// but apparently different definitions (different source-file/line-no).
|
||||||
void
|
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
|
// SYM is defined using a COPY reloc. Return the dynamic object
|
||||||
// where the original definition was found.
|
// where the original definition was found.
|
||||||
|
@ -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 "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 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_violation1.cc:5"
|
||||||
check "odr_violation2.cc:5"
|
check "odr_violation2.cc:5"
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user