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> 1999-08-09 Eli Zaretskii <eliz@is.elta.co.il>
* coffgen.c (coff_find_nearest_line): When looking for file, use * 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 /* If we are marking the symbol as undefined, and there are no
non-weak references to this symbol from a regular object, then 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 because it might not be marked as undefined until the
finish_dynamic_symbol routine gets through with it. */ finish_dynamic_symbol routine gets through with it. */
if (sym.st_shndx == SHN_UNDEF 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) != 0
&& (h->elf_link_hash_flags & ELF_LINK_HASH_REF_REGULAR_NONWEAK) == 0) && (ELF_ST_BIND(sym.st_info) == STB_GLOBAL
sym.st_info = ELF_ST_INFO (STB_WEAK, h->type); || 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 /* 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 there now. We have already know the symbol index. We also fill