X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=bfd%2Felf32-bfin.c;h=692875bf256cf05332453a3ef5ece0d351e107b4;hb=feba93770920f91760d6390541221b75ba5c95f3;hp=c8e089b7f0aee298c6ce01be8d520d6e823918c9;hpb=04c3a75556c018feb1f609404c627414a7ef672e;p=platform%2Fupstream%2Fbinutils.git diff --git a/bfd/elf32-bfin.c b/bfd/elf32-bfin.c index c8e089b..692875b 100644 --- a/bfd/elf32-bfin.c +++ b/bfd/elf32-bfin.c @@ -1,6 +1,5 @@ /* ADI Blackfin BFD support for 32-bit ELF. - Copyright 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 - Free Software Foundation, Inc. + Copyright (C) 2005-2014 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. @@ -1187,7 +1186,13 @@ bfin_check_relocs (bfd * abfd, if (r_symndx < symtab_hdr->sh_info) h = NULL; else - h = sym_hashes[r_symndx - symtab_hdr->sh_info]; + { + h = sym_hashes[r_symndx - symtab_hdr->sh_info]; + + /* PR15323, ref flags aren't set for references in the same + object. */ + h->root.non_ir_ref = 1; + } switch (ELF32_R_TYPE (rel->r_info)) { @@ -1301,7 +1306,9 @@ bfin_check_relocs (bfd * abfd, } static enum elf_reloc_type_class -elf32_bfin_reloc_type_class (const Elf_Internal_Rela * rela) +elf32_bfin_reloc_type_class (const struct bfd_link_info *info ATTRIBUTE_UNUSED, + const asection *rel_sec ATTRIBUTE_UNUSED, + const Elf_Internal_Rela * rela) { switch ((int) ELF32_R_TYPE (rela->r_info)) { @@ -1436,12 +1443,12 @@ bfin_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)) @@ -1725,8 +1732,8 @@ bfin_gc_sweep_hook (bfd * abfd, return TRUE; } -extern const bfd_target bfd_elf32_bfinfdpic_vec; -#define IS_FDPIC(bfd) ((bfd)->xvec == &bfd_elf32_bfinfdpic_vec) +extern const bfd_target bfin_elf32_fdpic_vec; +#define IS_FDPIC(bfd) ((bfd)->xvec == &bfin_elf32_fdpic_vec) /* An extension of the elf hash table data structure, containing some additional Blackfin-specific data. */ @@ -1821,7 +1828,7 @@ bfinfdpic_elf_link_hash_table_create (bfd *abfd) struct bfinfdpic_elf_link_hash_table *ret; bfd_size_type amt = sizeof (struct bfinfdpic_elf_link_hash_table); - ret = bfd_zalloc (abfd, amt); + ret = bfd_zmalloc (amt); if (ret == NULL) return NULL; @@ -2654,13 +2661,13 @@ bfinfdpic_relocate_section (bfd * output_bfd, } else { - bfd_boolean warned; + bfd_boolean warned, ignored; bfd_boolean unresolved_reloc; 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); osec = sec; } @@ -4923,45 +4930,6 @@ elf32_bfin_set_private_flags (bfd * abfd, flagword flags) return TRUE; } -/* Copy backend specific data from one object module to another. */ - -static bfd_boolean -bfin_elf_copy_private_bfd_data (bfd *ibfd, bfd *obfd) -{ - if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour - || bfd_get_flavour (obfd) != bfd_target_elf_flavour) - return TRUE; - - BFD_ASSERT (!elf_flags_init (obfd) - || elf_elfheader (obfd)->e_flags == elf_elfheader (ibfd)->e_flags); - - elf_elfheader (obfd)->e_flags = elf_elfheader (ibfd)->e_flags; - elf_flags_init (obfd) = TRUE; - - /* Copy object attributes. */ - _bfd_elf_copy_obj_attributes (ibfd, obfd); - - return TRUE; -} - -static bfd_boolean -elf32_bfinfdpic_copy_private_bfd_data (bfd *ibfd, bfd *obfd) -{ - if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour - || bfd_get_flavour (obfd) != bfd_target_elf_flavour) - return TRUE; - - if (! bfin_elf_copy_private_bfd_data (ibfd, obfd)) - return FALSE; - - if (! elf_tdata (ibfd) || ! elf_tdata (ibfd)->phdr - || ! elf_tdata (obfd) || ! elf_tdata (obfd)->phdr) - return TRUE; - - return TRUE; -} - - /* Display the flags field. */ static bfd_boolean elf32_bfin_print_private_bfd_data (bfd * abfd, void * ptr) @@ -5088,7 +5056,7 @@ bfin_link_hash_table_create (bfd * abfd) struct bfin_link_hash_table *ret; bfd_size_type amt = sizeof (struct bfin_link_hash_table); - ret = bfd_zalloc (abfd, amt); + ret = bfd_zmalloc (amt); if (ret == NULL) return NULL; @@ -5656,7 +5624,7 @@ struct bfd_elf_special_section const elf32_bfin_special_sections[] = }; -#define TARGET_LITTLE_SYM bfd_elf32_bfin_vec +#define TARGET_LITTLE_SYM bfin_elf32_vec #define TARGET_LITTLE_NAME "elf32-bfin" #define ELF_ARCH bfd_arch_bfin #define ELF_TARGET_ID BFIN_ELF_DATA @@ -5718,7 +5686,7 @@ struct bfd_elf_special_section const elf32_bfin_special_sections[] = #include "elf32-target.h" #undef TARGET_LITTLE_SYM -#define TARGET_LITTLE_SYM bfd_elf32_bfinfdpic_vec +#define TARGET_LITTLE_SYM bfin_elf32_fdpic_vec #undef TARGET_LITTLE_NAME #define TARGET_LITTLE_NAME "elf32-bfinfdpic" #undef elf32_bed @@ -5741,9 +5709,6 @@ struct bfd_elf_special_section const elf32_bfin_special_sections[] = #undef elf_backend_always_size_sections #define elf_backend_always_size_sections \ elf32_bfinfdpic_always_size_sections -#undef bfd_elf32_bfd_copy_private_bfd_data -#define bfd_elf32_bfd_copy_private_bfd_data \ - elf32_bfinfdpic_copy_private_bfd_data #undef elf_backend_create_dynamic_sections #define elf_backend_create_dynamic_sections \