From: Daniel Jacobowitz Date: Sat, 11 May 2002 18:05:35 +0000 (+0000) Subject: 2002-05-11 Daniel Jacobowitz X-Git-Tag: binutils-2_12_1~10 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=1d348d0ec3062644bd751fa710cc3bbf64eab5a7;p=thirdparty%2Fbinutils-gdb.git 2002-05-11 Daniel Jacobowitz Merge from mainline (to elf32-mips.c): 2002-05-03 H.J. Lu (hjl@gnu.org) * elfxx-mips.c (mips_elf_link_hash_entry): Add forced_local. (mips_elf_link_hash_newfunc): Initialize forced_local to false. (mips_elf_record_global_got_symbol): Call _bfd_mips_elf_hide_symbol to hide a global symbol. (_bfd_mips_elf_hide_symbol): Return if forced_local is true. Set forced_local to true. --- diff --git a/bfd/ChangeLog b/bfd/ChangeLog index eb836c3b2e3..b8201568129 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,5 +1,17 @@ +2002-05-11 Daniel Jacobowitz + + Merge from mainline (to elf32-mips.c): + 2002-05-03 H.J. Lu (hjl@gnu.org) + + * elfxx-mips.c (mips_elf_link_hash_entry): Add forced_local. + (mips_elf_link_hash_newfunc): Initialize forced_local to false. + (mips_elf_record_global_got_symbol): Call _bfd_mips_elf_hide_symbol + to hide a global symbol. + (_bfd_mips_elf_hide_symbol): Return if forced_local is true. Set + forced_local to true. + 2002-05-11 Ralf Corsepius - Daniel Jacobowitz + Daniel Jacobowitz * coff-sh.c (sh_reloc_map): Map to R_SH_IMM32 for non-PE. Don't map BFD_RELOC_RVA. diff --git a/bfd/elf32-mips.c b/bfd/elf32-mips.c index e7b47014695..ddfe4a0e730 100644 --- a/bfd/elf32-mips.c +++ b/bfd/elf32-mips.c @@ -105,6 +105,9 @@ struct mips_elf_link_hash_entry /* This is like the call_stub field, but it is used if the function being called returns a floating point value. */ asection *call_fp_stub; + + /* Are we forced local? .*/ + boolean forced_local; }; static bfd_reloc_status_type mips32_64bit_reloc @@ -4528,6 +4531,7 @@ mips_elf_link_hash_newfunc (entry, table, string) ret->need_fn_stub = false; ret->call_stub = NULL; ret->call_fp_stub = NULL; + ret->forced_local = false; } return (struct bfd_hash_entry *) ret; @@ -4543,7 +4547,12 @@ _bfd_mips_elf_hide_symbol (info, entry, force_local) asection *got; struct mips_got_info *g; struct mips_elf_link_hash_entry *h; + h = (struct mips_elf_link_hash_entry *) entry; + if (h->forced_local) + return; + h->forced_local = true; + dynobj = elf_hash_table (info)->dynobj; got = bfd_get_section_by_name (dynobj, ".got"); g = (struct mips_got_info *) elf_section_data (got)->tdata; @@ -6047,9 +6056,18 @@ mips_elf_record_global_got_symbol (h, info, g) { /* A global symbol in the GOT must also be in the dynamic symbol table. */ - if (h->dynindx == -1 - && !bfd_elf32_link_record_dynamic_symbol (info, h)) - return false; + if (h->dynindx == -1) + { + switch (ELF_ST_VISIBILITY (h->other)) + { + case STV_INTERNAL: + case STV_HIDDEN: + _bfd_mips_elf_hide_symbol (info, h, true); + break; + } + if (!bfd_elf32_link_record_dynamic_symbol (info, h)) + return false; + } /* If we've already marked this entry as needing GOT space, we don't need to do it again. */