X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=bfd%2Felf32-d10v.c;h=a5e5395163c50cd73d9de576622a07c54ed2a01c;hb=19a6653ce8c6d8a76586a54f3c0396063de5f987;hp=26ae8ceefb76c04086f7859646c5ba54a3b63231;hpb=ab96bf03fd98b6f68cd213ac81f52be3aca9c435;p=deliverable%2Fbinutils-gdb.git diff --git a/bfd/elf32-d10v.c b/bfd/elf32-d10v.c index 26ae8ceefb..a5e5395163 100644 --- a/bfd/elf32-d10v.c +++ b/bfd/elf32-d10v.c @@ -7,7 +7,7 @@ This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or + the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, @@ -20,8 +20,8 @@ Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ -#include "bfd.h" #include "sysdep.h" +#include "bfd.h" #include "libbfd.h" #include "elf-bfd.h" #include "elf/d10v.h" @@ -203,6 +203,22 @@ bfd_elf32_bfd_reloc_type_lookup (bfd *abfd ATTRIBUTE_UNUSED, return NULL; } +static reloc_howto_type * +bfd_elf32_bfd_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED, + const char *r_name) +{ + unsigned int i; + + for (i = 0; + i < sizeof (elf_d10v_howto_table) / sizeof (elf_d10v_howto_table[0]); + i++) + if (elf_d10v_howto_table[i].name != NULL + && strcasecmp (elf_d10v_howto_table[i].name, r_name) == 0) + return &elf_d10v_howto_table[i]; + + return NULL; +} + /* Set the howto pointer for an D10V ELF reloc. */ static void @@ -246,7 +262,7 @@ elf32_d10v_check_relocs (bfd *abfd, const Elf_Internal_Rela *relocs) { Elf_Internal_Shdr *symtab_hdr; - struct elf_link_hash_entry **sym_hashes, **sym_hashes_end; + struct elf_link_hash_entry **sym_hashes; const Elf_Internal_Rela *rel; const Elf_Internal_Rela *rel_end; @@ -255,9 +271,6 @@ elf32_d10v_check_relocs (bfd *abfd, symtab_hdr = &elf_tdata (abfd)->symtab_hdr; sym_hashes = elf_sym_hashes (abfd); - sym_hashes_end = sym_hashes + symtab_hdr->sh_size/sizeof (Elf32_External_Sym); - if (!elf_bad_symtab (abfd)) - sym_hashes_end -= symtab_hdr->sh_info; rel_end = relocs + sec->reloc_count; for (rel = relocs; rel < rel_end; rel++) @@ -288,7 +301,9 @@ elf32_d10v_check_relocs (bfd *abfd, /* This relocation describes which C++ vtable entries are actually used. Record for later use during GC. */ case R_D10V_GNU_VTENTRY: - if (!bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_offset)) + BFD_ASSERT (h != NULL); + if (h != NULL + && !bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_offset)) return FALSE; break; }