1999-08-09 Geoff Keating <geoffk@cygnus.com>

* elflink.h (elf_link_output_extsym): Don't output a weak
	reference to an undefined symbol just because it was defined weak
	in a shared object.
This commit is contained in:
Ian Lance Taylor 1999-08-09 05:42:31 +00:00
parent 75cd796a72
commit 91d3970e7d
2 changed files with 19 additions and 4 deletions

View File

@ -1,3 +1,9 @@
1999-08-09 Geoff Keating <geoffk@cygnus.com>
* elflink.h (elf_link_output_extsym): Don't output a weak
reference to an undefined symbol just because it was defined weak
in a shared object.
1999-08-09 Eli Zaretskii <eliz@is.elta.co.il>
* coffgen.c (coff_find_nearest_line): When looking for file, use

View File

@ -4840,14 +4840,23 @@ elf_link_output_extsym (h, data)
/* If we are marking the symbol as undefined, and there are no
non-weak references to this symbol from a regular object, then
mark the symbol as weak undefined. We can't do this earlier,
mark the symbol as weak undefined; if there are non-weak
references, mark the symbol as strong. We can't do this earlier,
because it might not be marked as undefined until the
finish_dynamic_symbol routine gets through with it. */
if (sym.st_shndx == SHN_UNDEF
&& sym.st_info == ELF_ST_INFO (STB_GLOBAL, h->type)
&& (h->elf_link_hash_flags & ELF_LINK_HASH_REF_REGULAR) != 0
&& (h->elf_link_hash_flags & ELF_LINK_HASH_REF_REGULAR_NONWEAK) == 0)
sym.st_info = ELF_ST_INFO (STB_WEAK, h->type);
&& (ELF_ST_BIND(sym.st_info) == STB_GLOBAL
|| ELF_ST_BIND(sym.st_info) == STB_WEAK))
{
int bindtype;
if ((h->elf_link_hash_flags & ELF_LINK_HASH_REF_REGULAR_NONWEAK) != 0)
bindtype = STB_GLOBAL;
else
bindtype = STB_WEAK;
sym.st_info = ELF_ST_INFO (bindtype, ELF_ST_TYPE (sym.st_info));
}
/* If this symbol should be put in the .dynsym section, then put it
there now. We have already know the symbol index. We also fill