From mboxrd@z Thu Jan 1 00:00:00 1970 From: "H . J . Lu" To: binutils@sourceware.cygnus.com Subject: PATCH: Fix the mips linker with weak definitions Date: Thu, 30 Aug 2001 14:33:00 -0000 Message-id: <20010830143352.A14533@lucon.org> X-SW-Source: 2001-08/msg00704.html The problem with weak definitions is they may be overridden by strong ones in DSOs later. We have to reserve dynamic relocations for them at the beginning. H.J. ---- 2001-08-30 H.J. Lu * elf32-mips.c (mips_elf_calculate_relocation): Revert the last 2 changes. (_bfd_mips_elf_adjust_dynamic_symbol): Allocate dynamic relocations for weak definitions. --- elf32-mips.c.weak Thu Aug 30 13:08:34 2001 +++ elf32-mips.c Thu Aug 30 14:04:36 2001 @@ -6334,10 +6334,8 @@ mips_elf_calculate_relocation (abfd, if ((info->shared || (elf_hash_table (info)->dynamic_sections_created && h != NULL - && h->root.root.type != bfd_link_hash_undefweak - && (h->root.root.type == bfd_link_hash_defweak - || (h->root.elf_link_hash_flags - & ELF_LINK_HASH_DEF_REGULAR) == 0))) + && ((h->root.elf_link_hash_flags & ELF_LINK_HASH_DEF_DYNAMIC) + != 0))) && (input_section->flags & SEC_ALLOC) != 0) { /* If we're creating a shared library, or this relocation is @@ -8137,7 +8135,9 @@ _bfd_mips_elf_adjust_dynamic_symbol (inf hmips = (struct mips_elf_link_hash_entry *) h; if (! info->relocateable && hmips->possibly_dynamic_relocs != 0 - && (h->elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR) == 0) + && (h->root.type == bfd_link_hash_defweak + || (h->elf_link_hash_flags + & ELF_LINK_HASH_DEF_REGULAR) == 0)) { mips_elf_allocate_dynamic_relocations (dynobj, hmips->possibly_dynamic_relocs);