From: Alan Modra Date: Sat, 23 Mar 2013 10:25:02 +0000 (+0000) Subject: * elf-bfd.h (_bfd_elf_merge_symbol): Delete declaration. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=8a56bd02519985bc5f86fbe7bff927018d5880e6;p=binutils-gdb.git * elf-bfd.h (_bfd_elf_merge_symbol): Delete declaration. * elflink.c (_bfd_elf_merge_symbol): Make static. * elf32-sh-symbian.c (sh_symbian_relocate_section): Don't call _bfd_elf_merge_symbol, call _bfd_generic_link_add_one_symbol. --- diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 16b2b1ba534..0aa68e92919 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,10 @@ +2013-03-23 Alan Modra + + * elf-bfd.h (_bfd_elf_merge_symbol): Delete declaration. + * elflink.c (_bfd_elf_merge_symbol): Make static. + * elf32-sh-symbian.c (sh_symbian_relocate_section): Don't call + _bfd_elf_merge_symbol, call _bfd_generic_link_add_one_symbol. + 2013-03-23 Alan Modra PR ld/15270 diff --git a/bfd/elf-bfd.h b/bfd/elf-bfd.h index 3f068bb95e1..dd9ba6bb36e 100644 --- a/bfd/elf-bfd.h +++ b/bfd/elf-bfd.h @@ -1993,12 +1993,6 @@ extern bfd_boolean _bfd_elf_eh_frame_present extern bfd_boolean _bfd_elf_maybe_strip_eh_frame_hdr (struct bfd_link_info *); -extern bfd_boolean _bfd_elf_merge_symbol - (bfd *, struct bfd_link_info *, const char *, Elf_Internal_Sym *, - asection **, bfd_vma *, bfd_boolean *, unsigned int *, - struct elf_link_hash_entry **, bfd_boolean *, - bfd_boolean *, bfd_boolean *, bfd_boolean *); - extern bfd_boolean _bfd_elf_hash_symbol (struct elf_link_hash_entry *); extern long _bfd_elf_link_lookup_local_dynindx diff --git a/bfd/elf32-sh-symbian.c b/bfd/elf32-sh-symbian.c index e6e0a391879..85c26f357f8 100644 --- a/bfd/elf32-sh-symbian.c +++ b/bfd/elf32-sh-symbian.c @@ -470,51 +470,36 @@ sh_symbian_relocate_section (bfd * output_bfd, continue; } - new_hash = elf_link_hash_lookup (hash_table, ptr->new_name, FALSE, FALSE, TRUE); - + new_hash = elf_link_hash_lookup (hash_table, ptr->new_name, + FALSE, FALSE, TRUE); /* If we could not find the symbol then it is a new, undefined symbol. Symbian want this behaviour - ie they want to be able to rename the reference in a reloc from one undefined symbol to another, new and undefined symbol. So we create that symbol here. */ if (new_hash == NULL) { - asection * psec = bfd_und_section_ptr; - Elf_Internal_Sym new_sym; - bfd_vma new_value = 0; - bfd_boolean skip; - bfd_boolean override; - bfd_boolean type_change_ok; - bfd_boolean size_change_ok; - - new_sym.st_value = 0; - new_sym.st_size = 0; - new_sym.st_name = -1; - new_sym.st_info = ELF_ST_INFO (STB_GLOBAL, STT_FUNC); - new_sym.st_other = ELF_ST_VISIBILITY (STV_DEFAULT); - new_sym.st_shndx = SHN_UNDEF; - new_sym.st_target_internal = 0; - - if (! _bfd_elf_merge_symbol (input_bfd, info, - ptr->new_name, & new_sym, - & psec, & new_value, NULL, - NULL, & new_hash, & skip, - & override, & type_change_ok, - & size_change_ok)) + struct bfd_link_hash_entry *bh = NULL; + bfd_boolean collect = get_elf_backend_data (input_bfd)->collect; + if (_bfd_generic_link_add_one_symbol (info, input_bfd, + ptr->new_name, BSF_GLOBAL, + bfd_und_section_ptr, 0, + NULL, FALSE, collect, + &bh)) { - _bfd_error_handler (_("%B: Failed to add renamed symbol %s"), - input_bfd, ptr->new_name); - continue; - } - /* XXX - should we check psec, skip, override etc ? */ + new_hash = (struct elf_link_hash_entry *) bh; + new_hash->type = STT_FUNC; + new_hash->non_elf = 0; - new_hash->root.type = bfd_link_hash_undefined; - - /* Allow the symbol to become local if necessary. */ - if (new_hash->dynindx == -1) - new_hash->def_regular = 1; + if (SYMBIAN_DEBUG) + fprintf (stderr, "Created new symbol %s\n", ptr->new_name); + } + } - if (SYMBIAN_DEBUG) - fprintf (stderr, "Created new symbol %s\n", ptr->new_name); + if (new_hash == NULL) + { + _bfd_error_handler (_("%B: Failed to add renamed symbol %s"), + input_bfd, ptr->new_name); + continue; } /* Convert the new_hash value into a index into the table of symbol hashes. */ diff --git a/bfd/elflink.c b/bfd/elflink.c index be53ca3f9de..2da6ac527e0 100644 --- a/bfd/elflink.c +++ b/bfd/elflink.c @@ -907,7 +907,7 @@ elf_merge_st_other (bfd *abfd, struct elf_link_hash_entry *h, change. We set POLD_ALIGNMENT if an old common symbol in a dynamic object is overridden by a regular object. */ -bfd_boolean +static bfd_boolean _bfd_elf_merge_symbol (bfd *abfd, struct bfd_link_info *info, const char *name,