From c86ad51492bb4a4c70c540643a163970ae0f7944 Mon Sep 17 00:00:00 2001 From: Andreas Schwab Date: Mon, 7 Sep 2009 16:29:34 +0000 Subject: [PATCH] * elf32-m68k.c (rtype_to_howto): If the reloc index is out of range call the bfd error hander and use R_68K_NONE instead. --- bfd/ChangeLog | 5 +++++ bfd/elf32-m68k.c | 16 ++++++++++------ 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 4a5d23562ec..3fd72b41f2e 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,8 @@ +2009-09-07 Andreas Schwab + + * elf32-m68k.c (rtype_to_howto): If the reloc index is out of + range call the bfd error hander and use R_68K_NONE instead. + 2009-09-07 Tristan Gingold * po/SRC-POTFILES.in: Regenerate. diff --git a/bfd/elf32-m68k.c b/bfd/elf32-m68k.c index f85aba00c7e..12379351c4d 100644 --- a/bfd/elf32-m68k.c +++ b/bfd/elf32-m68k.c @@ -374,13 +374,17 @@ static reloc_howto_type howto_table[] = { }; static void -rtype_to_howto (abfd, cache_ptr, dst) - bfd *abfd ATTRIBUTE_UNUSED; - arelent *cache_ptr; - Elf_Internal_Rela *dst; +rtype_to_howto (bfd *abfd, arelent *cache_ptr, Elf_Internal_Rela *dst) { - BFD_ASSERT (ELF32_R_TYPE(dst->r_info) < (unsigned int) R_68K_max); - cache_ptr->howto = &howto_table[ELF32_R_TYPE(dst->r_info)]; + unsigned int indx = ELF32_R_TYPE (dst->r_info); + + if (indx >= (unsigned int) R_68K_max) + { + (*_bfd_error_handler) (_("%B: invalid relocation type %d"), + abfd, (int) indx); + indx = R_68K_NONE; + } + cache_ptr->howto = &howto_table[indx]; } #define elf_info_to_howto rtype_to_howto