* elflink.h (elf_link_add_object_symbols): Correct conditions
under which type and size change warnings are issued.
This commit is contained in:
parent
78b31b6bb8
commit
ee9f09cd26
|
@ -1,3 +1,8 @@
|
||||||
|
Wed Oct 11 00:49:29 1995 Ian Lance Taylor <ian@cygnus.com>
|
||||||
|
|
||||||
|
* elflink.h (elf_link_add_object_symbols): Correct conditions
|
||||||
|
under which type and size change warnings are issued.
|
||||||
|
|
||||||
Tue Oct 10 18:32:46 1995 Ian Lance Taylor <ian@cygnus.com>
|
Tue Oct 10 18:32:46 1995 Ian Lance Taylor <ian@cygnus.com>
|
||||||
|
|
||||||
* coffgen.c (coff_count_linenumbers): Don't count line numbers for
|
* coffgen.c (coff_count_linenumbers): Don't count line numbers for
|
||||||
|
|
|
@ -555,7 +555,7 @@ elf_link_add_object_symbols (abfd, info)
|
||||||
const char *name;
|
const char *name;
|
||||||
struct elf_link_hash_entry *h;
|
struct elf_link_hash_entry *h;
|
||||||
boolean definition;
|
boolean definition;
|
||||||
boolean wasweak;
|
boolean size_change_ok, type_change_ok;
|
||||||
boolean new_weakdef;
|
boolean new_weakdef;
|
||||||
|
|
||||||
elf_swap_symbol_in (abfd, esym, &sym);
|
elf_swap_symbol_in (abfd, esym, &sym);
|
||||||
|
@ -642,7 +642,8 @@ elf_link_add_object_symbols (abfd, info)
|
||||||
else
|
else
|
||||||
definition = true;
|
definition = true;
|
||||||
|
|
||||||
wasweak = false;
|
size_change_ok = false;
|
||||||
|
type_change_ok = false;
|
||||||
if (info->hash->creator->flavour == bfd_target_elf_flavour)
|
if (info->hash->creator->flavour == bfd_target_elf_flavour)
|
||||||
{
|
{
|
||||||
/* We need to look up the symbol now in order to get some of
|
/* We need to look up the symbol now in order to get some of
|
||||||
|
@ -659,9 +660,17 @@ elf_link_add_object_symbols (abfd, info)
|
||||||
|| h->root.type == bfd_link_hash_warning)
|
|| h->root.type == bfd_link_hash_warning)
|
||||||
h = (struct elf_link_hash_entry *) h->root.u.i.link;
|
h = (struct elf_link_hash_entry *) h->root.u.i.link;
|
||||||
|
|
||||||
/* Remember whether this used to be a weak definition. */
|
/* It's OK to change the type if it used to be a weak
|
||||||
wasweak = (h->root.type == bfd_link_hash_defweak
|
definition. */
|
||||||
|| h->root.type == bfd_link_hash_undefweak);
|
type_change_ok = (h->root.type == bfd_link_hash_defweak
|
||||||
|
|| h->root.type == bfd_link_hash_undefweak);
|
||||||
|
|
||||||
|
/* It's OK to change the size if it used to be a weak
|
||||||
|
definition, or if it used to be undefined, or if we will
|
||||||
|
be overriding an old definition.
|
||||||
|
*/
|
||||||
|
size_change_ok = (type_change_ok
|
||||||
|
|| h->root.type == bfd_link_hash_undefined);
|
||||||
|
|
||||||
/* If we are looking at a dynamic object, and this is a
|
/* If we are looking at a dynamic object, and this is a
|
||||||
definition, we need to see if it has already been defined
|
definition, we need to see if it has already been defined
|
||||||
|
@ -678,6 +687,7 @@ elf_link_add_object_symbols (abfd, info)
|
||||||
{
|
{
|
||||||
sec = bfd_und_section_ptr;
|
sec = bfd_und_section_ptr;
|
||||||
definition = false;
|
definition = false;
|
||||||
|
size_change_ok = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -702,6 +712,7 @@ elf_link_add_object_symbols (abfd, info)
|
||||||
with the new definition. */
|
with the new definition. */
|
||||||
h->root.type = bfd_link_hash_undefined;
|
h->root.type = bfd_link_hash_undefined;
|
||||||
h->root.u.undef.abfd = h->root.u.def.section->owner;
|
h->root.u.undef.abfd = h->root.u.def.section->owner;
|
||||||
|
size_change_ok = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -756,7 +767,7 @@ elf_link_add_object_symbols (abfd, info)
|
||||||
if (sym.st_size != 0
|
if (sym.st_size != 0
|
||||||
&& (definition || h->size == 0))
|
&& (definition || h->size == 0))
|
||||||
{
|
{
|
||||||
if (h->size != 0 && h->size != sym.st_size && ! wasweak)
|
if (h->size != 0 && h->size != sym.st_size && ! size_change_ok)
|
||||||
(*_bfd_error_handler)
|
(*_bfd_error_handler)
|
||||||
("Warning: size of symbol `%s' changed from %lu to %lu in %s",
|
("Warning: size of symbol `%s' changed from %lu to %lu in %s",
|
||||||
name, (unsigned long) h->size, (unsigned long) sym.st_size,
|
name, (unsigned long) h->size, (unsigned long) sym.st_size,
|
||||||
|
@ -769,7 +780,7 @@ elf_link_add_object_symbols (abfd, info)
|
||||||
{
|
{
|
||||||
if (h->type != STT_NOTYPE
|
if (h->type != STT_NOTYPE
|
||||||
&& h->type != ELF_ST_TYPE (sym.st_info)
|
&& h->type != ELF_ST_TYPE (sym.st_info)
|
||||||
&& ! wasweak)
|
&& ! type_change_ok)
|
||||||
(*_bfd_error_handler)
|
(*_bfd_error_handler)
|
||||||
("Warning: type of symbol `%s' changed from %d to %d in %s",
|
("Warning: type of symbol `%s' changed from %d to %d in %s",
|
||||||
name, h->type, ELF_ST_TYPE (sym.st_info),
|
name, h->type, ELF_ST_TYPE (sym.st_info),
|
||||||
|
|
Loading…
Reference in New Issue