diff options
Diffstat (limited to 'binutils-2.25/bfd/elfnn-ia64.c')
-rw-r--r-- | binutils-2.25/bfd/elfnn-ia64.c | 95 |
1 files changed, 47 insertions, 48 deletions
diff --git a/binutils-2.25/bfd/elfnn-ia64.c b/binutils-2.25/bfd/elfnn-ia64.c index 117b4c8c..a8d8d0bc 100644 --- a/binutils-2.25/bfd/elfnn-ia64.c +++ b/binutils-2.25/bfd/elfnn-ia64.c @@ -1,5 +1,5 @@ /* IA-64 support for 64-bit ELF - Copyright 1998-2013 Free Software Foundation, Inc. + Copyright (C) 1998-2014 Free Software Foundation, Inc. Contributed by David Mosberger-Tang <davidm@hpl.hp.com> This file is part of BFD, the Binary File Descriptor library. @@ -1369,40 +1369,6 @@ elfNN_ia64_local_htab_eq (const void *ptr1, const void *ptr2) return entry1->id == entry2->id && entry1->r_sym == entry2->r_sym; } -/* Create the derived linker hash table. The IA-64 ELF port uses this - derived hash table to keep information specific to the IA-64 ElF - linker (without using static variables). */ - -static struct bfd_link_hash_table * -elfNN_ia64_hash_table_create (bfd *abfd) -{ - struct elfNN_ia64_link_hash_table *ret; - - ret = bfd_zmalloc ((bfd_size_type) sizeof (*ret)); - if (!ret) - return NULL; - - if (!_bfd_elf_link_hash_table_init (&ret->root, abfd, - elfNN_ia64_new_elf_hash_entry, - sizeof (struct elfNN_ia64_link_hash_entry), - IA64_ELF_DATA)) - { - free (ret); - return NULL; - } - - ret->loc_hash_table = htab_try_create (1024, elfNN_ia64_local_htab_hash, - elfNN_ia64_local_htab_eq, NULL); - ret->loc_hash_memory = objalloc_create (); - if (!ret->loc_hash_table || !ret->loc_hash_memory) - { - free (ret); - return NULL; - } - - return &ret->root.root; -} - /* Free the global elfNN_ia64_dyn_sym_info array. */ static bfd_boolean @@ -1448,10 +1414,10 @@ elfNN_ia64_local_dyn_info_free (void **slot, /* Destroy IA-64 linker hash table. */ static void -elfNN_ia64_hash_table_free (struct bfd_link_hash_table *hash) +elfNN_ia64_link_hash_table_free (bfd *obfd) { struct elfNN_ia64_link_hash_table *ia64_info - = (struct elfNN_ia64_link_hash_table *) hash; + = (struct elfNN_ia64_link_hash_table *) obfd->link.hash; if (ia64_info->loc_hash_table) { htab_traverse (ia64_info->loc_hash_table, @@ -1462,7 +1428,42 @@ elfNN_ia64_hash_table_free (struct bfd_link_hash_table *hash) objalloc_free ((struct objalloc *) ia64_info->loc_hash_memory); elf_link_hash_traverse (&ia64_info->root, elfNN_ia64_global_dyn_info_free, NULL); - _bfd_elf_link_hash_table_free (hash); + _bfd_elf_link_hash_table_free (obfd); +} + +/* Create the derived linker hash table. The IA-64 ELF port uses this + derived hash table to keep information specific to the IA-64 ElF + linker (without using static variables). */ + +static struct bfd_link_hash_table * +elfNN_ia64_hash_table_create (bfd *abfd) +{ + struct elfNN_ia64_link_hash_table *ret; + + ret = bfd_zmalloc ((bfd_size_type) sizeof (*ret)); + if (!ret) + return NULL; + + if (!_bfd_elf_link_hash_table_init (&ret->root, abfd, + elfNN_ia64_new_elf_hash_entry, + sizeof (struct elfNN_ia64_link_hash_entry), + IA64_ELF_DATA)) + { + free (ret); + return NULL; + } + + ret->loc_hash_table = htab_try_create (1024, elfNN_ia64_local_htab_hash, + elfNN_ia64_local_htab_eq, NULL); + ret->loc_hash_memory = objalloc_create (); + if (!ret->loc_hash_table || !ret->loc_hash_memory) + { + elfNN_ia64_link_hash_table_free (abfd); + return NULL; + } + ret->root.root.hash_table_free = elfNN_ia64_link_hash_table_free; + + return &ret->root.root; } /* Traverse both local and global hash tables. */ @@ -3902,17 +3903,17 @@ elfNN_ia64_relocate_section (bfd *output_bfd, else { bfd_boolean unresolved_reloc; - bfd_boolean warned; + bfd_boolean warned, ignored; struct elf_link_hash_entry **sym_hashes = elf_sym_hashes (input_bfd); RELOC_FOR_GLOBAL_SYMBOL (info, input_bfd, input_section, rel, r_symndx, symtab_hdr, sym_hashes, h, sym_sec, value, - unresolved_reloc, warned); + unresolved_reloc, warned, ignored); if (h->root.type == bfd_link_hash_undefweak) undef_weak_ref = TRUE; - else if (warned) + else if (warned || (ignored && info->executable)) continue; } @@ -4936,8 +4937,8 @@ elfNN_ia64_object_p (bfd *abfd) static bfd_boolean elfNN_ia64_hpux_vec (const bfd_target *vec) { - extern const bfd_target bfd_elfNN_ia64_hpux_big_vec; - return (vec == & bfd_elfNN_ia64_hpux_big_vec); + extern const bfd_target ia64_elfNN_hpux_be_vec; + return (vec == &ia64_elfNN_hpux_be_vec); } static void @@ -4978,9 +4979,9 @@ elfNN_hpux_backend_symbol_processing (bfd *abfd ATTRIBUTE_UNUSED, } } -#define TARGET_LITTLE_SYM bfd_elfNN_ia64_little_vec +#define TARGET_LITTLE_SYM ia64_elfNN_le_vec #define TARGET_LITTLE_NAME "elfNN-ia64-little" -#define TARGET_BIG_SYM bfd_elfNN_ia64_big_vec +#define TARGET_BIG_SYM ia64_elfNN_be_vec #define TARGET_BIG_NAME "elfNN-ia64-big" #define ELF_ARCH bfd_arch_ia64 #define ELF_TARGET_ID IA64_ELF_DATA @@ -5024,8 +5025,6 @@ elfNN_hpux_backend_symbol_processing (bfd *abfd ATTRIBUTE_UNUSED, /* Stuff for the BFD linker: */ #define bfd_elfNN_bfd_link_hash_table_create \ elfNN_ia64_hash_table_create -#define bfd_elfNN_bfd_link_hash_table_free \ - elfNN_ia64_hash_table_free #define elf_backend_create_dynamic_sections \ elfNN_ia64_create_dynamic_sections #define elf_backend_check_relocs \ @@ -5083,7 +5082,7 @@ elfNN_hpux_backend_symbol_processing (bfd *abfd ATTRIBUTE_UNUSED, #undef TARGET_LITTLE_SYM #undef TARGET_LITTLE_NAME #undef TARGET_BIG_SYM -#define TARGET_BIG_SYM bfd_elfNN_ia64_hpux_big_vec +#define TARGET_BIG_SYM ia64_elfNN_hpux_be_vec #undef TARGET_BIG_NAME #define TARGET_BIG_NAME "elfNN-ia64-hpux-big" |