/* 32-bit ELF support for TI C6X
- Copyright 2010, 2011, 2012
- Free Software Foundation, Inc.
+ Copyright 2010-2013 Free Software Foundation, Inc.
Contributed by Joseph Myers <joseph@codesourcery.com>
Bernd Schmidt <bernds@codesourcery.com>
struct elf32_tic6x_link_hash_table *ret;
bfd_size_type amt = sizeof (struct elf32_tic6x_link_hash_table);
- ret = bfd_malloc (amt);
+ ret = bfd_zmalloc (amt);
if (ret == NULL)
return NULL;
return NULL;
}
- ret->sym_cache.abfd = NULL;
ret->obfd = abfd;
ret->elf.is_relocatable_executable = 1;
return TRUE;
}
-/* Destroy a C6X ELF linker hash table. */
-
-static void
-elf32_tic6x_link_hash_table_free (struct bfd_link_hash_table *hash)
-{
- _bfd_generic_link_hash_table_free (hash);
-}
-
/* Called to pass PARAMS to the backend. We store them in the hash table
associated with INFO. */
}
else
{
- bfd_boolean warned;
+ bfd_boolean warned, ignored;
RELOC_FOR_GLOBAL_SYMBOL (info, input_bfd, input_section, rel,
r_symndx, symtab_hdr, sym_hashes,
h, sec, relocation,
- unresolved_reloc, warned);
+ unresolved_reloc, warned, ignored);
}
if (sec != NULL && discarded_section (sec))
while (h->root.type == bfd_link_hash_indirect
|| 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;
}
switch (r_type)
*secp = bfd_make_section_old_way (abfd, ".scommon");
(*secp)->flags |= SEC_IS_COMMON;
*valp = sym->st_size;
- bfd_set_section_alignment (abfd, *secp, bfd_log2 (sym->st_value));
+ (void) bfd_set_section_alignment (abfd, *secp, bfd_log2 (sym->st_value));
break;
}
{
bfd_signed_vma *local_got;
bfd_signed_vma *end_local_got;
- char *local_tls_type;
- bfd_vma *local_tlsdesc_gotent;
bfd_size_type locsymcount;
Elf_Internal_Shdr *symtab_hdr;
asection *srel;
end_local_got = local_got + locsymcount;
s = htab->elf.sgot;
srel = htab->elf.srelgot;
- for (; local_got < end_local_got;
- ++local_got, ++local_tls_type, ++local_tlsdesc_gotent)
+ for (; local_got < end_local_got; ++local_got)
{
if (*local_got > 0)
{
return TRUE;
}
-static void
-elf32_tic6x_set_osabi (bfd *abfd, struct bfd_link_info *link_info)
-{
- if (link_info != NULL && link_info->relocatable)
- return;
- _bfd_elf_set_osabi (abfd, link_info);
-}
-
#define TARGET_LITTLE_SYM bfd_elf32_tic6x_le_vec
#define TARGET_LITTLE_NAME "elf32-tic6x-le"
#define TARGET_BIG_SYM bfd_elf32_tic6x_be_vec
#define bfd_elf32_bfd_merge_private_bfd_data elf32_tic6x_merge_private_bfd_data
#define bfd_elf32_mkobject elf32_tic6x_mkobject
#define bfd_elf32_bfd_link_hash_table_create elf32_tic6x_link_hash_table_create
-#define bfd_elf32_bfd_link_hash_table_free elf32_tic6x_link_hash_table_free
#define bfd_elf32_new_section_hook elf32_tic6x_new_section_hook
#define elf_backend_stack_align 8
#define elf_backend_can_gc_sections 1
#undef ELF_OSABI
#define ELF_OSABI ELFOSABI_C6000_LINUX
-#undef elf_backend_post_process_headers
-#define elf_backend_post_process_headers elf32_tic6x_set_osabi
-
#include "elf32-target.h"
#undef elf32_bed
#undef ELF_OSABI
#define ELF_OSABI ELFOSABI_C6000_ELFABI
-#undef elf_backend_post_process_headers
-#define elf_backend_post_process_headers elf32_tic6x_set_osabi
-
#include "elf32-target.h"