* elf64-ppc.c (ppc64_elf_copy_indirect_symbol): Don't copy is_func
authorAlan Modra <amodra@gmail.com>
Fri, 24 May 2002 04:07:38 +0000 (04:07 +0000)
committerAlan Modra <amodra@gmail.com>
Fri, 24 May 2002 04:07:38 +0000 (04:07 +0000)
and is_func_descriptor.
(func_desc_adjust): Hide function code sym in shared libs unless
there is a matching exported function descriptor sym.

bfd/ChangeLog
bfd/elf64-ppc.c

index 791f2641b14b701d7c63ae1fee526e4053b1b661..4bf712aa502f5bf3aeac2ad4ad62f66bb0b27483 100644 (file)
@@ -1,3 +1,10 @@
+2002-05-24  Alan Modra  <amodra@bigpond.net.au>
+
+       * elf64-ppc.c (ppc64_elf_copy_indirect_symbol): Don't copy is_func
+       and is_func_descriptor.
+       (func_desc_adjust): Hide function code sym in shared libs unless
+       there is a matching exported function descriptor sym.
+
 2002-05-23  Jakub Jelinek  <jakub@redhat.com>
 
        * elf.c (_bfd_elf_make_section_from_shdr): Set SEC_THREAD_LOCAL
 2002-05-15  Nick Clifton  <nickc@cambridge.redhat.com>
 
        * aix5ppc-core.c (xcoff64_core_p): Replace bfd_read with
-        bfd_bread.
-        (xcoff64_core_file_matches_executable_p): Replace bfd_read
-        with bfd_bread.
+       bfd_bread.
+       (xcoff64_core_file_matches_executable_p): Replace bfd_read
+       with bfd_bread.
 
 2002-05-15  Alan Modra  <amodra@bigpond.net.au>
 
 
 2002-05-10  Tom Rix  <trix@redhat.com>
 
-       * coff64-rs6000.c (xcoff64_reloc_type_br): New function for 
+       * coff64-rs6000.c (xcoff64_reloc_type_br): New function for
        xcoff64_ppc_relocate_section.
        * coff-rs6000.c : Extern common xcoff_reloc_type functions.
        * libxcoff.h: Common xcoff_reloc_type function declaration.
 
        * elf32-ppc.c (ppc_elf_create_got): New function.
        (ppc_elf_create_dynamic_sections): Call ppc_elf_create_got before
-       _bfd_elf_create_dynamic_sections.  Correct .plt flags. 
+       _bfd_elf_create_dynamic_sections.  Correct .plt flags.
        (ppc_elf_check_relocs): Use ppc_elf_create_got in place of
        _bfd_elf_create_got_section.
 
        (xcoff_rtype2howto): Renamed from _bfd_xcoff_rtype2howto. Special
        case some 16 bit relocs. Add reloc value to output.
        (xcoff_howto_table): Remove 64 bit R_POS, add 16 bit
-       R_RBR. Improve names. 
+       R_RBR. Improve names.
        (_bfd_xcoff_reloc_type_lookup): Adjust for removal of 64 bit R_POS.
        (bfd_xcoff_backend_data): Update with new reloc swap names.
        (bfd_pmac_xcoff_backend_data) : Same.
        * coff64-rs6000.c: (xcoff64_swap_reloc_in): Moved from coffswap.h.
        (xcoff64_swap_reloc_out): Same.
-       (xcoff64_rtype2howto): Special case some 16 bit relocs and 32 bit 
+       (xcoff64_rtype2howto): Special case some 16 bit relocs and 32 bit
        R_POS. Add reloc value to output.
-       (xcoff64_howto_table): Move 64 bit R_POS to first entry.  Add 16 
-       bit R_RBR. Improve names, masks. 
+       (xcoff64_howto_table): Move 64 bit R_POS to first entry.  Add 16
+       bit R_RBR. Improve names, masks.
        (xcoff64_reloc_type_lookup): Adjust for move of 64 bit R_POS.
        (bfd_xcoff_backend_data): Update with new reloc swap names.
        (bfd_xcoff_aix5_backend_data) : Same.
        (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. 
+       forced_local to true.
 
 2002-05-02  Richard Henderson  <rth@redhat.com>
 
        * elf64-ppc.h (ppc64_elf_set_toc): Delete.
        (ppc64_elf_toc): Declare.
        (ppc64_elf_next_input_section): Update.
-       
+
 2002-05-01  Alan Modra  <amodra@bigpond.net.au>
 
        * syms.c (_bfd_stab_section_find_nearest_line): Don't bomb on NULL
 2002-04-28  Tom Rix  <trix@redhat.com>
 
        * coff-rs6000.c (xcoff_calculate_relocation) : Function table for
-       calulating relocations. 
+       calulating relocations.
        (xcoff_complain_overflow) : Function table for relocation errors.
-       (xcoff_ppc_relocate_section): Use relocation and complain function 
-       tables. 
-       (xcoff_complain_overflow_unsigned_func): New complain function. 
+       (xcoff_ppc_relocate_section): Use relocation and complain function
+       tables.
+       (xcoff_complain_overflow_unsigned_func): New complain function.
        (xcoff_complain_overflow_signed_func): Same.
        (xcoff_complain_overflow_bitfield_func): Same.
        (xcoff_complain_overflow_dont_func): Same.
        (xcoff_reloc_type_noop): Same.
        * libxcoff.h : Declare common parts for xcoff64.
        * coff64-rs6000.c (xcoff64_ppc_relocate_section): Use relocation
-       and complain function tables. 
+       and complain function tables.
 
 2002-04-28  Alan Modra  <amodra@bigpond.net.au>
 
        insert_thumb_branch, record_thumb_to_arm_glue): Suppress
        definition of these functions for ARM_WINCE builds as they are
        not used.
-        (SWAP_IN_RELOC_OFFSET, SWAP_OUT_RELOC_OFFSET): Do not define
+       (SWAP_IN_RELOC_OFFSET, SWAP_OUT_RELOC_OFFSET): Do not define
        for ARM_WINCE builds.
 
 2002-04-18  Nick Clifton  <nickc@cambridge.redhat.com>
 
-       * coff-arm.c (bfd_arm_process_before_allocation): 
+       * coff-arm.c (bfd_arm_process_before_allocation):
 
 2002-04-17  J"orn Rennecke <joern.rennecke@superh.com>
 
 
 2002-03-20  Tom Rix  <trix@redhat.com>
 
-       * coff-rs6000.c (_bfd_xcoff_stat_arch_elt): Renamed from 
+       * coff-rs6000.c (_bfd_xcoff_stat_arch_elt): Renamed from
        _bfd_xcoff_generic_stat_arch_elt.  Fix format check.
-       * coff64-rs6000.c :  Use _bfd_xcoff_stat_arch_elt. 
+       * coff64-rs6000.c :  Use _bfd_xcoff_stat_arch_elt.
 
 2002-03-19  Tom Rix  <trix@redhat.com>
 
-       * xcofflink.c (_bfd_xcoff_bfd_link_add_symbols): Look through all 
+       * xcofflink.c (_bfd_xcoff_bfd_link_add_symbols): Look through all
        dynamic objects in archives.
 
 2002-03-19  Hans-Peter Nilsson  <hp@bitrange.com>
        (xcoff_write_archive_contents_big) : Use do_shared_object_padding,
        do_copy and do_pad.
        * coff64-rs6000.c (xcoff64_write_ojbect_contents) : Use
-       bfd_xcoff_magic_number. 
+       bfd_xcoff_magic_number.
        (xcoff64_bad_format_hook) : New function for _bfd_bad_format_hook
        fop.
        (xcoff_backend_data_r) : Use xcoff64_bad_format_hook.
        (bfd_xcoff_aix5_backend_data) : New Aix 5 backend data.
        (aix5coff64_vec) : New Aix 5 target aix5coff64-rs6000.
        * rs6000-core.c : Update copyright date.
-       * xcofflink.c (bfd_xcoff_size_dynamic_sections): Check for NULL 
+       * xcofflink.c (bfd_xcoff_size_dynamic_sections): Check for NULL
        csectpp.
        * coffcode.h (coff_new_section_hook) : Use new accessor macros.
        (coff_set_arch_mach_hook) : Add Aix 5 U64_TOCMAGIC magic #.
index d027d811599245ce7781e84d50bc5b2a7db934f5..377548203a8b639dbe8986f6e1e2ae734fb359bb 100644 (file)
@@ -2583,8 +2583,11 @@ ppc64_elf_copy_indirect_symbol (dir, ind)
       eind->dyn_relocs = NULL;
     }
 
-  edir->is_func |= eind->is_func;
-  edir->is_func_descriptor |= eind->is_func_descriptor;
+  /* We don't need to copy is_func and is_func_descriptor;  They're
+     never set when copy_indirect_symbol is called for indirect
+     symbols at the add_symbols stage of linking, and they're not
+     relevant when copy_indirect_symbol is called for weakdefs.
+     weakdefs are only held for non-function syms.  */
 
   _bfd_elf_link_hash_copy_indirect (dir, ind);
 }
@@ -3236,8 +3239,14 @@ func_desc_adjust (h, inf)
         been imported from another library.  Function code syms that
         are really in the library we must leave global to prevent the
         linker dragging in a definition from a static library.  */
-      force_local = ((h->elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR) == 0
-                    && info->shared);
+      force_local = (info->shared
+                    && ((h->elf_link_hash_flags
+                         & ELF_LINK_HASH_DEF_REGULAR) == 0
+                        || fdh == NULL
+                        || (fdh->elf_link_hash_flags
+                            & ELF_LINK_HASH_DEF_REGULAR) == 0
+                        || (fdh->elf_link_hash_flags
+                            & ELF_LINK_FORCED_LOCAL) != 0));
       _bfd_elf_link_hash_hide_symbol (info, h, force_local);
     }