Tidy ld use of bfd_section userdata.
[deliverable/binutils-gdb.git] / bfd / elf32-tic6x.c
index fb30e923a52c68b69cf1d5cd3671a00d1adce73d..fe82c8ffb9e013b4ce8fd25766749627402de744 100644 (file)
@@ -1,6 +1,5 @@
 /* 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>
 
@@ -1570,7 +1569,7 @@ elf32_tic6x_link_hash_table_create (bfd *abfd)
   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;
 
@@ -1583,7 +1582,6 @@ elf32_tic6x_link_hash_table_create (bfd *abfd)
       return NULL;
     }
 
-  ret->sym_cache.abfd = NULL;
   ret->obfd = abfd;
   ret->elf.is_relocatable_executable = 1;
 
@@ -1615,14 +1613,6 @@ elf32_tic6x_final_link (bfd *abfd, struct bfd_link_info *info)
   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.  */
 
@@ -2319,12 +2309,12 @@ elf32_tic6x_relocate_section (bfd *output_bfd,
        }
       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))
@@ -2841,6 +2831,10 @@ elf32_tic6x_check_relocs (bfd *abfd, struct bfd_link_info *info,
          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)
@@ -3043,7 +3037,7 @@ elf32_tic6x_add_symbol_hook (bfd *abfd,
       *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;
     }
 
@@ -3319,8 +3313,6 @@ elf32_tic6x_size_dynamic_sections (bfd *output_bfd, struct bfd_link_info *info)
     {
       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;
@@ -3361,8 +3353,7 @@ elf32_tic6x_size_dynamic_sections (bfd *output_bfd, struct bfd_link_info *info)
       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)
            {
@@ -4354,14 +4345,6 @@ elf32_tic6x_write_section (bfd *output_bfd,
   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
@@ -4375,7 +4358,6 @@ elf32_tic6x_set_osabi (bfd *abfd, struct bfd_link_info *link_info)
 #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
@@ -4444,9 +4426,6 @@ elf32_tic6x_set_osabi (bfd *abfd, struct bfd_link_info *link_info)
 #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
@@ -4463,7 +4442,4 @@ elf32_tic6x_set_osabi (bfd *abfd, struct bfd_link_info *link_info)
 #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"
This page took 0.024999 seconds and 4 git commands to generate.