* elf-bfd.h (_bfd_elf_merge_symbol): Delete declaration.
authorAlan Modra <amodra@gmail.com>
Sat, 23 Mar 2013 10:25:02 +0000 (10:25 +0000)
committerAlan Modra <amodra@gmail.com>
Sat, 23 Mar 2013 10:25:02 +0000 (10:25 +0000)
* 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.

bfd/ChangeLog
bfd/elf-bfd.h
bfd/elf32-sh-symbian.c
bfd/elflink.c

index 16b2b1ba534f74a170ef142a3c0a94bb626b1912..0aa68e9291983b1f2fb45be31b856bc384ac2f3b 100644 (file)
@@ -1,3 +1,10 @@
+2013-03-23  Alan Modra  <amodra@gmail.com>
+
+       * 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  <amodra@gmail.com>
 
        PR ld/15270
index 3f068bb95e10fd224c464cb077b01608ab532601..dd9ba6bb36e5a00704655e5c139a708b765fcb38 100644 (file)
@@ -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
index e6e0a391879b4ed7504d671da28dfe5fec6e0970..85c26f357f8da7b531855e2a8e67e263c6d60767 100644 (file)
@@ -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.  */
index be53ca3f9dedcc7cad373c8ea427c30d9dc6a645..2da6ac527e07d18e3cc461477b816c87b238ac74 100644 (file)
@@ -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,