aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlan Modra <amodra@gmail.com>2002-05-24 04:07:38 +0000
committerAlan Modra <amodra@gmail.com>2002-05-24 04:07:38 +0000
commitea1e4b0d544568f83197cb4eccb7ec9f86543e73 (patch)
treed97db4f9f8641bc83e34c6696d2730b7c0269377
parent7f7432881e1b8199850d77b69dffa4f2ac1fad91 (diff)
downloadgdb-ea1e4b0d544568f83197cb4eccb7ec9f86543e73.zip
gdb-ea1e4b0d544568f83197cb4eccb7ec9f86543e73.tar.gz
gdb-ea1e4b0d544568f83197cb4eccb7ec9f86543e73.tar.bz2
* 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.
-rw-r--r--bfd/ChangeLog53
-rw-r--r--bfd/elf64-ppc.c17
2 files changed, 43 insertions, 27 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index 791f264..4bf712a 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -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
@@ -151,9 +158,9 @@
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>
@@ -261,7 +268,7 @@
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.
@@ -288,7 +295,7 @@
* 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.
@@ -371,16 +378,16 @@
(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.
@@ -413,7 +420,7 @@
(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>
@@ -460,7 +467,7 @@
* 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
@@ -536,11 +543,11 @@
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.
@@ -555,7 +562,7 @@
(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>
@@ -637,12 +644,12 @@
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>
@@ -1038,13 +1045,13 @@
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>
@@ -1069,14 +1076,14 @@
(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 #.
diff --git a/bfd/elf64-ppc.c b/bfd/elf64-ppc.c
index d027d81..3775482 100644
--- a/bfd/elf64-ppc.c
+++ b/bfd/elf64-ppc.c
@@ -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);
}