X-Git-Url: http://drtracing.org/?a=blobdiff_plain;ds=sidebyside;f=bfd%2Felf32-cr16c.c;h=6547ec142e39c62efc3b791013c5afc87fc61ef3;hb=64d2901806c171c0d949f8fb1b29b4e5ba8cf04d;hp=5016c6e66a924a19b344895130cccd0859586e6e;hpb=c7e2358a8849d7540212543e1a2acbac648cb973;p=deliverable%2Fbinutils-gdb.git diff --git a/bfd/elf32-cr16c.c b/bfd/elf32-cr16c.c index 5016c6e66a..6547ec142e 100644 --- a/bfd/elf32-cr16c.c +++ b/bfd/elf32-cr16c.c @@ -1,6 +1,5 @@ /* BFD back-end for National Semiconductor's CR16C ELF - Copyright 2004, 2005, 2006, 2007, 2009, 2010 - Free Software Foundation, Inc. + Copyright (C) 2004-2015 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. @@ -29,14 +28,14 @@ #define USE_REL 1 /* CR16C uses REL relocations instead of RELA. */ -/* The following definition is based on EMPTY_HOWTO macro, +/* The following definition is based on EMPTY_HOWTO macro, but also initiates the "name" field in HOWTO struct. */ #define ONLY_NAME_HOWTO(C) \ HOWTO ((C), 0, 0, 0, FALSE, 0, complain_overflow_dont, NULL, \ STRINGX(C), FALSE, 0, 0, FALSE) /* reloc_map_index array maps CRASM relocation type into a BFD - relocation enum. The array's indices are synchronized with + relocation enum. The array's indices are synchronized with RINDEX_16C_* indices, created in include/elf/cr16c.h. The array is used in: 1. elf32-cr16c.c : elf_cr16c_reloc_type_lookup(). @@ -181,7 +180,11 @@ elf_cr16c_info_to_howto_rel (bfd *abfd ATTRIBUTE_UNUSED, { unsigned int r_type = ELF32_R_TYPE (dst->r_info); - BFD_ASSERT (r_type < (unsigned int) RINDEX_16C_MAX); + if (r_type >= RINDEX_16C_MAX) + { + _bfd_error_handler (_("%B: invalid CR16C reloc number: %d"), abfd, r_type); + r_type = 0; + } cache_ptr->howto = &elf_howto_table[r_type]; } @@ -715,24 +718,17 @@ elf32_cr16c_relocate_section (bfd *output_bfd, } else { - bfd_boolean unresolved_reloc, warned; + bfd_boolean unresolved_reloc, 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 && elf_discarded_section (sec)) - { - /* For relocs against symbols from removed linkonce sections, - or sections discarded by a linker script, we just want the - section contents zeroed. Avoid any special processing. */ - _bfd_clear_contents (howto, input_bfd, contents + rel->r_offset); - rel->r_info = 0; - rel->r_addend = 0; - continue; - } + if (sec != NULL && discarded_section (sec)) + RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section, + rel, 1, relend, howto, 0, contents); if (info->relocatable) { @@ -947,7 +943,7 @@ elf32_cr16c_link_output_symbol_hook (struct bfd_link_info *info ATTRIBUTE_UNUSED } /* Definitions for setting CR16C target vector. */ -#define TARGET_LITTLE_SYM bfd_elf32_cr16c_vec +#define TARGET_LITTLE_SYM cr16c_elf32_vec #define TARGET_LITTLE_NAME "elf32-cr16c" #define ELF_ARCH bfd_arch_cr16c #define ELF_MACHINE_CODE EM_CR