From 9ca16c6728db19d32df3601308181947b0e6a2f9 Mon Sep 17 00:00:00 2001 From: hjl Date: Wed, 7 Dec 2005 14:43:53 +0000 Subject: [PATCH] bfd/ 2005-12-07 Thiemo Seufer H.J. Lu PR ld/1932 * bfd-in.h (bfd_elf_record_link_assignment): Add output_bfd and hidden arguments. * bfd.c (bfd_hide_symbol): Removed. * bfd-in2.h: Regenerated. * elflink.c (bfd_elf_record_link_assignment): Handle hidden symbols which were provided by a linker script. ld/ 2005-12-07 Thiemo Seufer H.J. Lu PR ld/1932 * emultempl/elf32.em (gld${EMULATION_NAME}_find_exp_assignment): Adjust bfd_elf_record_link_assignment call. * ldexp.c (exp_fold_tree_1): Remove call to bfd_hide_symbol. --- bfd/ChangeLog | 14 ++++++++++++++ bfd/bfd-in.h | 3 ++- bfd/bfd-in2.h | 8 ++------ bfd/bfd.c | 26 -------------------------- bfd/elflink.c | 14 ++++++++++++-- ld/ChangeLog | 9 +++++++++ ld/emultempl/elf32.em | 5 +++-- ld/ldexp.c | 2 -- 8 files changed, 42 insertions(+), 39 deletions(-) diff --git a/bfd/ChangeLog b/bfd/ChangeLog index eeae34fc97..e34e2dba24 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,17 @@ +2005-12-07 Thiemo Seufer + H.J. Lu + + PR ld/1932 + * bfd-in.h (bfd_elf_record_link_assignment): Add output_bfd + and hidden arguments. + + * bfd.c (bfd_hide_symbol): Removed. + + * bfd-in2.h: Regenerated. + + * elflink.c (bfd_elf_record_link_assignment): Handle hidden + symbols which were provided by a linker script. + 2005-12-06 Paul Gilliam * cpu-powerpc.c (bfd_powerpc_archs): Add ppc 750. diff --git a/bfd/bfd-in.h b/bfd/bfd-in.h index eaecb92004..74aded86db 100644 --- a/bfd/bfd-in.h +++ b/bfd/bfd-in.h @@ -633,7 +633,8 @@ enum dynamic_lib_link_class { }; extern bfd_boolean bfd_elf_record_link_assignment - (struct bfd_link_info *, const char *, bfd_boolean); + (bfd *, struct bfd_link_info *, const char *, bfd_boolean, + bfd_boolean); extern struct bfd_link_needed_list *bfd_elf_get_needed_list (bfd *, struct bfd_link_info *); extern bfd_boolean bfd_elf_get_bfd_needed_list diff --git a/bfd/bfd-in2.h b/bfd/bfd-in2.h index 81fb66627d..fc02ecf96a 100644 --- a/bfd/bfd-in2.h +++ b/bfd/bfd-in2.h @@ -640,7 +640,8 @@ enum dynamic_lib_link_class { }; extern bfd_boolean bfd_elf_record_link_assignment - (struct bfd_link_info *, const char *, bfd_boolean); + (bfd *, struct bfd_link_info *, const char *, bfd_boolean, + bfd_boolean); extern struct bfd_link_needed_list *bfd_elf_get_needed_list (bfd *, struct bfd_link_info *); extern bfd_boolean bfd_elf_get_bfd_needed_list @@ -4613,11 +4614,6 @@ void bfd_preserve_restore (bfd *, struct bfd_preserve *); void bfd_preserve_finish (bfd *, struct bfd_preserve *); -void bfd_hide_symbol (bfd *, - struct bfd_link_info *, - struct bfd_link_hash_entry *, - bfd_boolean); - /* Extracted from archive.c. */ symindex bfd_get_next_mapent (bfd *abfd, symindex previous, carsym **sym); diff --git a/bfd/bfd.c b/bfd/bfd.c index 3783ccfc39..af1b730d4f 100644 --- a/bfd/bfd.c +++ b/bfd/bfd.c @@ -1511,29 +1511,3 @@ bfd_preserve_finish (bfd *abfd ATTRIBUTE_UNUSED, struct bfd_preserve *preserve) objalloc. */ bfd_hash_table_free (&preserve->section_htab); } - -/* -FUNCTION - bfd_hide_symbol - -SYNOPSIS - void bfd_hide_symbol (bfd *, - struct bfd_link_info *, - struct bfd_link_hash_entry *, - bfd_boolean); - -DESCRIPTION - This function hides a symbol so that it won't be exported. - -*/ - -void -bfd_hide_symbol (bfd *abfd, - struct bfd_link_info *link_info, - struct bfd_link_hash_entry *h, - bfd_boolean force_local) -{ - if (bfd_get_flavour (abfd) == bfd_target_elf_flavour) - (get_elf_backend_data (abfd)->elf_backend_hide_symbol) - (link_info, (struct elf_link_hash_entry *) h, force_local); -} diff --git a/bfd/elflink.c b/bfd/elflink.c index 1fcfce352d..f31c5c1741 100644 --- a/bfd/elflink.c +++ b/bfd/elflink.c @@ -424,9 +424,11 @@ bfd_elf_link_record_dynamic_symbol (struct bfd_link_info *info, this in case some dynamic object refers to this symbol. */ bfd_boolean -bfd_elf_record_link_assignment (struct bfd_link_info *info, +bfd_elf_record_link_assignment (bfd *output_bfd, + struct bfd_link_info *info, const char *name, - bfd_boolean provide) + bfd_boolean provide, + bfd_boolean hidden) { struct elf_link_hash_entry *h; struct elf_link_hash_table *htab; @@ -473,6 +475,14 @@ bfd_elf_record_link_assignment (struct bfd_link_info *info, h->def_regular = 1; + if (provide && hidden) + { + const struct elf_backend_data *bed = get_elf_backend_data (output_bfd); + + h->other = (h->other & ~ELF_ST_VISIBILITY (-1)) | STV_HIDDEN; + (*bed->elf_backend_hide_symbol) (info, h, TRUE); + } + /* STV_HIDDEN and STV_INTERNAL symbols must be STB_LOCAL in shared objects and executables. */ if (!info->relocatable diff --git a/ld/ChangeLog b/ld/ChangeLog index 42b1e6248c..9927ab8304 100644 --- a/ld/ChangeLog +++ b/ld/ChangeLog @@ -1,3 +1,12 @@ +2005-12-07 Thiemo Seufer + H.J. Lu + + PR ld/1932 + * emultempl/elf32.em (gld${EMULATION_NAME}_find_exp_assignment): + Adjust bfd_elf_record_link_assignment call. + + * ldexp.c (exp_fold_tree_1): Remove call to bfd_hide_symbol. + 2005-11-25 Jan Beulich * Makefile.am: Make configdoc.texi writeable before trying diff --git a/ld/emultempl/elf32.em b/ld/emultempl/elf32.em index 55e1663e32..703248a5ce 100644 --- a/ld/emultempl/elf32.em +++ b/ld/emultempl/elf32.em @@ -986,8 +986,9 @@ gld${EMULATION_NAME}_find_exp_assignment (etree_type *exp) will do no harm. */ if (strcmp (exp->assign.dst, ".") != 0) { - if (!bfd_elf_record_link_assignment (&link_info, exp->assign.dst, - provide)) + if (!bfd_elf_record_link_assignment (output_bfd, &link_info, + exp->assign.dst, provide, + exp->assign.hidden)) einfo ("%P%F: failed to record assignment to %s: %E\n", exp->assign.dst); } diff --git a/ld/ldexp.c b/ld/ldexp.c index cee1da5332..c9d707e793 100644 --- a/ld/ldexp.c +++ b/ld/ldexp.c @@ -735,8 +735,6 @@ exp_fold_tree_1 (etree_type *tree) defined by some object. */ break; } - if (tree->assign.hidden) - bfd_hide_symbol (output_bfd, &link_info, h, TRUE); } exp_fold_tree_1 (tree->assign.src); -- 2.11.0