X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=bfd%2Felf32-m32r.c;h=2f182e782d266e22bbb4c55fe1cd49e320728fa8;hb=217d2eaa69c2a5d58cdfd11619c4f2e41c986826;hp=2801f0443acce9f3b53c99b52207199f5135bbcc;hpb=2dcf00ce6c001c42c89e6f6baace708b706994f2;p=external%2Fbinutils.git diff --git a/bfd/elf32-m32r.c b/bfd/elf32-m32r.c index 2801f04..2f182e7 100644 --- a/bfd/elf32-m32r.c +++ b/bfd/elf32-m32r.c @@ -1,5 +1,5 @@ /* M32R-specific support for 32-bit ELF. - Copyright (C) 1996-2018 Free Software Foundation, Inc. + Copyright (C) 1996-2019 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. @@ -1272,7 +1272,7 @@ bfd_elf32_bfd_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED, /* Set the howto pointer for an M32R ELF reloc. */ -static void +static bfd_boolean m32r_info_to_howto_rel (bfd *abfd ATTRIBUTE_UNUSED, arelent *cache_ptr, Elf_Internal_Rela *dst) @@ -1283,21 +1283,34 @@ m32r_info_to_howto_rel (bfd *abfd ATTRIBUTE_UNUSED, if (r_type > (unsigned int) R_M32R_GNU_VTENTRY) { /* xgettext:c-format */ - _bfd_error_handler (_("%pB: invalid M32R reloc number: %d"), abfd, r_type); - r_type = 0; + _bfd_error_handler (_("%pB: unsupported relocation type %#x"), + abfd, r_type); + bfd_set_error (bfd_error_bad_value); + return FALSE; } cache_ptr->howto = &m32r_elf_howto_table[r_type]; + return TRUE; } -static void +static bfd_boolean m32r_info_to_howto (bfd *abfd ATTRIBUTE_UNUSED, arelent *cache_ptr, Elf_Internal_Rela *dst) { - BFD_ASSERT ((ELF32_R_TYPE(dst->r_info) == (unsigned int) R_M32R_NONE) - || ((ELF32_R_TYPE(dst->r_info) > (unsigned int) R_M32R_GNU_VTENTRY) - && (ELF32_R_TYPE(dst->r_info) < (unsigned int) R_M32R_max))); - cache_ptr->howto = &m32r_elf_howto_table[ELF32_R_TYPE(dst->r_info)]; + unsigned int r_type = ELF32_R_TYPE (dst->r_info); + + if (r_type == (unsigned int) R_M32R_NONE + || ((r_type > (unsigned int) R_M32R_GNU_VTENTRY) + && (r_type < (unsigned int) R_M32R_max))) + { + cache_ptr->howto = &m32r_elf_howto_table[r_type]; + return TRUE; + } + + /* xgettext:c-format */ + _bfd_error_handler (_("%pB: unsupported relocation type %#x"), abfd, r_type); + bfd_set_error (bfd_error_bad_value); + return FALSE; } @@ -2401,7 +2414,7 @@ m32r_elf_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED, if (r_type < 0 || r_type >= (int) R_M32R_max) { /* xgettext:c-format */ - _bfd_error_handler (_("%pB: unknown relocation type %d"), + _bfd_error_handler (_("%pB: unsupported relocation type %#x"), input_bfd, (int) r_type); bfd_set_error (bfd_error_bad_value); ret = FALSE; @@ -2968,7 +2981,8 @@ m32r_elf_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED, { _bfd_error_handler /* xgettext:c-format */ - (_("%pB: The target (%s) of an %s relocation is in the wrong section (%pA)"), + (_("%pB: the target (%s) of an %s relocation" + " is in the wrong section (%pA)"), input_bfd, sym_name, m32r_elf_howto_table[(int) r_type].name, @@ -3389,9 +3403,8 @@ m32r_elf_object_p (bfd *abfd) /* Store the machine number in the flags field. */ -static void -m32r_elf_final_write_processing (bfd *abfd, - bfd_boolean linker ATTRIBUTE_UNUSED) +static bfd_boolean +m32r_elf_final_write_processing (bfd *abfd) { unsigned long val; @@ -3405,6 +3418,7 @@ m32r_elf_final_write_processing (bfd *abfd, elf_elfheader (abfd)->e_flags &=~ EF_M32R_ARCH; elf_elfheader (abfd)->e_flags |= val; + return _bfd_elf_final_write_processing (abfd); } /* Function to keep M32R specific file flags. */ @@ -3470,7 +3484,7 @@ m32r_elf_merge_private_bfd_data (bfd *ibfd, struct bfd_link_info *info) || ((in_flags & EF_M32R_ARCH) == E_M32R2_ARCH)) { _bfd_error_handler - (_("%pB: Instruction set mismatch with previous modules"), ibfd); + (_("%pB: instruction set mismatch with previous modules"), ibfd); bfd_set_error (bfd_error_bad_value); return FALSE; @@ -3793,15 +3807,11 @@ m32r_elf_check_relocs (bfd *abfd, /* This relocation describes which C++ vtable entries are actually used. Record for later use during GC. */ case R_M32R_GNU_VTENTRY: - BFD_ASSERT (h != NULL); - if (h != NULL - && !bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_offset)) + if (!bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_offset)) return FALSE; break; case R_M32R_RELA_GNU_VTENTRY: - BFD_ASSERT (h != NULL); - if (h != NULL - && !bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_addend)) + if (!bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_addend)) return FALSE; break; }