+2000-05-30 H.J. Lu <hjl@gnu.org>
+
+ * elflink.c (_bfd_elf_link_record_dynamic_symbol): Clear the
+ visibility bits if the symbol is undefined. Correctly handle
+ weak undefined symbols with hidden and internal attributes.
+
+ * elflink.h (elf_link_add_object_symbols): Always turn the
+ symbol into local if it has the hidden or internal attribute.
+
2000-05-29 Philip Blundell <philb@gnu.org>
* ppcboot.c: Add packed attribute if compiling with GCC.
(*info->callbacks->undefined_symbol)
(info, name, abfd, bfd_und_section_ptr, 0, true);
+
+ /* We have flaged a fatal error. We now treat this as
+ a normal symbol to avoid further error messages. */
+ h->other ^= ELF_ST_VISIBILITY (h->other);
+ }
+ else if (h->root.type != bfd_link_hash_undefweak)
+ {
+ h->elf_link_hash_flags |= ELF_LINK_FORCED_LOCAL;
+ return true;
}
-
- h->elf_link_hash_flags |= ELF_LINK_FORCED_LOCAL;
- return true;
default:
break;
Elf_External_Sym *esym;
Elf_External_Sym *esymend;
struct elf_backend_data *bed;
- boolean visibility_changed = false;
bed = get_elf_backend_data (abfd);
add_symbol_hook = bed->elf_add_symbol_hook;
unsigned char symvis = ELF_ST_VISIBILITY (sym.st_other);
if (symvis && (hvis > symvis || hvis == 0))
- {
- visibility_changed = true;
- h->other = sym.st_other;
- }
+ h->other = sym.st_other;
/* If neither has visibility, use the st_other of the
definition. This is an arbitrary choice, since the
goto error_return;
}
}
- else if (dynsym && h->dynindx != -1 && visibility_changed)
+ else if (dynsym && h->dynindx != -1)
/* If the symbol already has a dynamic index, but
visibility says it should not be visible, turn it into
a local symbol. */