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:
parent
75cd796a72
commit
91d3970e7d
2 changed files with 19 additions and 4 deletions
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue