| Index: bfd/elf64-ia64-vms.c
|
| diff --git a/bfd/elf64-ia64-vms.c b/bfd/elf64-ia64-vms.c
|
| index ef7837409bec86af9c5bddf33d8d899b8ac1b392..58a05af845b2852ed0aaf43f0a792ae4f8f93d4f 100644
|
| --- a/bfd/elf64-ia64-vms.c
|
| +++ b/bfd/elf64-ia64-vms.c
|
| @@ -539,7 +539,7 @@ elf64_ia64_relax_section (bfd *abfd, asection *sec,
|
| .plt section. After the first relaxation pass, linker may
|
| increase the gap between the .plt and .text sections up
|
| to 32byte. We assume linker will always insert 32byte
|
| - between the .plt and .text sections after the the first
|
| + between the .plt and .text sections after the first
|
| relaxation pass. */
|
| if (tsec == ia64_info->root.splt)
|
| offset = -0x1000000 + 32;
|
| @@ -1072,7 +1072,7 @@ elf64_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,
|
| elf64_ia64_global_dyn_info_free, NULL);
|
| - _bfd_generic_link_hash_table_free (hash);
|
| + _bfd_elf_link_hash_table_free (hash);
|
| }
|
|
|
| /* Traverse both local and global hash tables. */
|
| @@ -2095,6 +2095,9 @@ elf64_ia64_check_relocs (bfd *abfd, struct bfd_link_info *info,
|
| || h->root.type == bfd_link_hash_warning)
|
| h = (struct elf_link_hash_entry *) h->root.u.i.link;
|
|
|
| + /* PR15323, ref flags aren't set for references in the same
|
| + object. */
|
| + h->root.non_ir_ref = 1;
|
| h->ref_regular = 1;
|
| }
|
| else
|
| @@ -3492,13 +3495,13 @@ elf64_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;
|
| @@ -4030,7 +4033,7 @@ elf64_ia64_finish_dynamic_symbol (bfd *output_bfd,
|
| }
|
|
|
| /* Mark some specially defined symbols as absolute. */
|
| - if (strcmp (h->root.root.string, "_DYNAMIC") == 0
|
| + if (h == ia64_info->root.hdynamic
|
| || h == ia64_info->root.hgot
|
| || h == ia64_info->root.hplt)
|
| sym->st_shndx = SHN_ABS;
|
| @@ -4310,7 +4313,9 @@ elf64_ia64_print_private_bfd_data (bfd *abfd, void * ptr)
|
| }
|
|
|
| static enum elf_reloc_type_class
|
| -elf64_ia64_reloc_type_class (const Elf_Internal_Rela *rela)
|
| +elf64_ia64_reloc_type_class (const struct bfd_link_info *info ATTRIBUTE_UNUSED,
|
| + const asection *rel_sec ATTRIBUTE_UNUSED,
|
| + const Elf_Internal_Rela *rela)
|
| {
|
| switch ((int) ELF64_R_TYPE (rela->r_info))
|
| {
|
| @@ -5046,7 +5051,8 @@ error_free_dyn:
|
| h = (struct elf_link_hash_entry *) h->root.u.i.link;
|
|
|
| *sym_hash = h;
|
| - h->unique_global = (flags & BSF_GNU_UNIQUE) != 0;
|
| + if (definition)
|
| + h->unique_global = (flags & BSF_GNU_UNIQUE) != 0;
|
|
|
| /* Set the alignment of a common symbol. */
|
| if ((common || bfd_is_com_section (sec))
|
|
|