X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=bfd%2Felf32-mcore.c;h=79c0da606ac7b75aeb8ed0241303cae09c7989ab;hb=ffc2605c41d026cf5710704848b7c3b1cdbdcf49;hp=903d37966aa65aaef69f095274b67fb88f37e866;hpb=6d00b590316c0b08de21a264893b0fd627c54686;p=binutils-gdb.git diff --git a/bfd/elf32-mcore.c b/bfd/elf32-mcore.c index 903d37966aa..79c0da606ac 100644 --- a/bfd/elf32-mcore.c +++ b/bfd/elf32-mcore.c @@ -1,5 +1,5 @@ /* Motorola MCore specific support for 32-bit ELF - Copyright (C) 1994-2014 Free Software Foundation, Inc. + Copyright (C) 1994-2017 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. @@ -49,13 +49,14 @@ mcore_elf_set_private_flags (bfd * abfd, flagword flags) object file when linking. */ static bfd_boolean -mcore_elf_merge_private_bfd_data (bfd * ibfd, bfd * obfd) +mcore_elf_merge_private_bfd_data (bfd *ibfd, struct bfd_link_info *info) { + bfd *obfd = info->output_bfd; flagword old_flags; flagword new_flags; /* Check if we have the same endianness. */ - if (! _bfd_generic_verify_endian_match (ibfd, obfd)) + if (! _bfd_generic_verify_endian_match (ibfd, info)) return FALSE; if ( bfd_get_flavour (ibfd) != bfd_target_elf_flavour @@ -95,6 +96,7 @@ mcore_elf_unsupported_reloc (bfd * abfd, { BFD_ASSERT (reloc_entry->howto != (reloc_howto_type *)0); + /* xgettext:c-format */ _bfd_error_handler (_("%B: Relocation %s (%d) is not currently supported.\n"), abfd, reloc_entry->howto->name, @@ -110,11 +112,11 @@ static reloc_howto_type mcore_elf_howto_raw[] = /* This reloc does nothing. */ HOWTO (R_MCORE_NONE, /* type */ 0, /* rightshift */ - 2, /* size (0 = byte, 1 = short, 2 = long) */ - 32, /* bitsize */ + 3, /* size (0 = byte, 1 = short, 2 = long) */ + 0, /* bitsize */ FALSE, /* pc_relative */ 0, /* bitpos */ - complain_overflow_bitfield, /* complain_on_overflow */ + complain_overflow_dont, /* complain_on_overflow */ NULL, /* special_function */ "R_MCORE_NONE", /* name */ FALSE, /* partial_inplace */ @@ -340,13 +342,23 @@ mcore_elf_info_to_howto (bfd * abfd ATTRIBUTE_UNUSED, arelent * cache_ptr, Elf_Internal_Rela * dst) { + unsigned int r_type; + if (! mcore_elf_howto_table [R_MCORE_PCRELIMM8BY4]) /* Initialize howto table if needed. */ mcore_elf_howto_init (); - BFD_ASSERT (ELF32_R_TYPE (dst->r_info) < (unsigned int) R_MCORE_max); + r_type = ELF32_R_TYPE (dst->r_info); + if (r_type >= R_MCORE_max) + { + /* xgettext:c-format */ + _bfd_error_handler (_("%B: unrecognised MCore reloc number: %d"), + abfd, r_type); + bfd_set_error (bfd_error_bad_value); + r_type = R_MCORE_NONE; + } - cache_ptr->howto = mcore_elf_howto_table [ELF32_R_TYPE (dst->r_info)]; + cache_ptr->howto = mcore_elf_howto_table [r_type]; } /* The RELOCATE_SECTION function is called by the ELF backend linker @@ -400,7 +412,7 @@ mcore_elf_relocate_section (bfd * output_bfd, input_bfd, input_section, (long) input_section->reloc_count, - (info->relocatable) ? " (relocatable)" : ""); + (bfd_link_relocatable (info)) ? " (relocatable)" : ""); #endif if (! mcore_elf_howto_table [R_MCORE_PCRELIMM8BY4]) /* Initialize howto table if needed */ @@ -424,6 +436,7 @@ mcore_elf_relocate_section (bfd * output_bfd, if ((unsigned) r_type >= (unsigned) R_MCORE_max || ! mcore_elf_howto_table [(int)r_type]) { + /* xgettext:c-format */ _bfd_error_handler (_("%B: Unknown relocation type %d\n"), input_bfd, (int) r_type); @@ -438,6 +451,7 @@ mcore_elf_relocate_section (bfd * output_bfd, /* Complain about known relocation that are not yet supported. */ if (howto->special_function == mcore_elf_unsupported_reloc) { + /* xgettext:c-format */ _bfd_error_handler (_("%B: Relocation %s (%d) is not currently supported.\n"), input_bfd, howto->name, @@ -469,7 +483,7 @@ mcore_elf_relocate_section (bfd * output_bfd, RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section, rel, 1, relend, howto, 0, contents); - if (info->relocatable) + if (bfd_link_relocatable (info)) continue; switch (r_type) @@ -589,7 +603,7 @@ mcore_elf_check_relocs (bfd * abfd, const Elf_Internal_Rela * rel; const Elf_Internal_Rela * rel_end; - if (info->relocatable) + if (bfd_link_relocatable (info)) return TRUE; symtab_hdr = & elf_tdata (abfd)->symtab_hdr;