Better multiple definition errors.
This commit is contained in:
parent
a0c4fb0ac6
commit
d20222a1e7
|
@ -170,7 +170,8 @@ Symbol_table::resolve(Sized_symbol<size>* to,
|
||||||
}
|
}
|
||||||
|
|
||||||
bool adjust_common_sizes;
|
bool adjust_common_sizes;
|
||||||
if (Symbol_table::should_override(to, frombits, &adjust_common_sizes))
|
if (Symbol_table::should_override(to, frombits, object,
|
||||||
|
&adjust_common_sizes))
|
||||||
{
|
{
|
||||||
typename Sized_symbol<size>::Size_type tosize = to->symsize();
|
typename Sized_symbol<size>::Size_type tosize = to->symsize();
|
||||||
|
|
||||||
|
@ -195,7 +196,7 @@ Symbol_table::resolve(Sized_symbol<size>* to,
|
||||||
|
|
||||||
bool
|
bool
|
||||||
Symbol_table::should_override(const Symbol* to, unsigned int frombits,
|
Symbol_table::should_override(const Symbol* to, unsigned int frombits,
|
||||||
bool* adjust_common_sizes)
|
Object* object, bool* adjust_common_sizes)
|
||||||
{
|
{
|
||||||
*adjust_common_sizes = false;
|
*adjust_common_sizes = false;
|
||||||
|
|
||||||
|
@ -276,8 +277,14 @@ Symbol_table::should_override(const Symbol* to, unsigned int frombits,
|
||||||
{
|
{
|
||||||
case DEF * 16 + DEF:
|
case DEF * 16 + DEF:
|
||||||
// Two definitions of the same symbol.
|
// Two definitions of the same symbol.
|
||||||
// FIXME: Report locations.
|
// FIXME: Do a better job of reporting locations.
|
||||||
gold_error(_("multiple definition of %s"), to->name());
|
gold_error(_("%s: multiple definition of %s"),
|
||||||
|
object != NULL ? object->name().c_str() : _("command line"),
|
||||||
|
to->name());
|
||||||
|
gold_error(_("%s: previous definition here"),
|
||||||
|
(to->source() == Symbol::FROM_OBJECT
|
||||||
|
? to->object()->name().c_str()
|
||||||
|
: _("command line")));
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
case WEAK_DEF * 16 + DEF:
|
case WEAK_DEF * 16 + DEF:
|
||||||
|
@ -573,7 +580,8 @@ Symbol_table::should_override_with_special(const Symbol* to)
|
||||||
{
|
{
|
||||||
bool adjust_common_sizes;
|
bool adjust_common_sizes;
|
||||||
unsigned int frombits = global_flag | regular_flag | def_flag;
|
unsigned int frombits = global_flag | regular_flag | def_flag;
|
||||||
bool ret = Symbol_table::should_override(to, frombits, &adjust_common_sizes);
|
bool ret = Symbol_table::should_override(to, frombits, NULL,
|
||||||
|
&adjust_common_sizes);
|
||||||
gold_assert(!adjust_common_sizes);
|
gold_assert(!adjust_common_sizes);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
|
@ -944,7 +944,7 @@ class Symbol_table
|
||||||
// Whether we should override a symbol, based on flags in
|
// Whether we should override a symbol, based on flags in
|
||||||
// resolve.cc.
|
// resolve.cc.
|
||||||
static bool
|
static bool
|
||||||
should_override(const Symbol*, unsigned int, bool*);
|
should_override(const Symbol*, unsigned int, Object*, bool*);
|
||||||
|
|
||||||
// Whether we should override a symbol with a special symbol which
|
// Whether we should override a symbol with a special symbol which
|
||||||
// is automatically defined by the linker.
|
// is automatically defined by the linker.
|
||||||
|
|
Loading…
Reference in New Issue