X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=bfd%2Felf32-msp430.c;h=fe5fd8ff8c109467be5e8b385a89089a4f2faa3b;hb=ed48ec2e6ec5514f01b9b3a810d6ddf39651114b;hp=9f2a3d07b8ec8e4b93381f008eba01d448ea281b;hpb=38f14ab8fcfa4eab8bab417a5a165b7403ef9b0e;p=deliverable%2Fbinutils-gdb.git diff --git a/bfd/elf32-msp430.c b/bfd/elf32-msp430.c index 9f2a3d07b8..fe5fd8ff8c 100644 --- a/bfd/elf32-msp430.c +++ b/bfd/elf32-msp430.c @@ -1,5 +1,5 @@ /* MSP430-specific support for 32-bit ELF - Copyright (C) 2002-2018 Free Software Foundation, Inc. + Copyright (C) 2002-2019 Free Software Foundation, Inc. Contributed by Dmitry Diky This file is part of BFD, the Binary File Descriptor library. @@ -631,7 +631,7 @@ bfd_elf32_bfd_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED, /* Set the howto pointer for an MSP430 ELF reloc. */ -static void +static bfd_boolean msp430_info_to_howto_rela (bfd * abfd, arelent * cache_ptr, Elf_Internal_Rela * dst) @@ -647,20 +647,23 @@ msp430_info_to_howto_rela (bfd * abfd, /* xgettext:c-format */ _bfd_error_handler (_("%pB: unsupported relocation type %#x"), abfd, r_type); - r_type = 0; + bfd_set_error (bfd_error_bad_value); + return FALSE; } cache_ptr->howto = elf_msp430x_howto_table + r_type; - return; } - - if (r_type >= (unsigned int) R_MSP430_max) + else if (r_type >= (unsigned int) R_MSP430_max) { /* xgettext:c-format */ _bfd_error_handler (_("%pB: unsupported relocation type %#x"), abfd, r_type); - r_type = 0; + bfd_set_error (bfd_error_bad_value); + return FALSE; } - cache_ptr->howto = &elf_msp430_howto_table[r_type]; + else + cache_ptr->howto = &elf_msp430_howto_table[r_type]; + + return TRUE; } /* Look through the relocs for a section during the first phase. @@ -1382,9 +1385,8 @@ elf32_msp430_relocate_section (bfd * output_bfd ATTRIBUTE_UNUSED, file. This gets the MSP430 architecture right based on the machine number. */ -static void -bfd_elf_msp430_final_write_processing (bfd * abfd, - bfd_boolean linker ATTRIBUTE_UNUSED) +static bfd_boolean +bfd_elf_msp430_final_write_processing (bfd *abfd) { unsigned long val; @@ -1419,6 +1421,7 @@ bfd_elf_msp430_final_write_processing (bfd * abfd, elf_elfheader (abfd)->e_machine = EM_MSP430; elf_elfheader (abfd)->e_flags &= ~EF_MSP430_MACH; elf_elfheader (abfd)->e_flags |= val; + return _bfd_elf_final_write_processing (abfd); } /* Set the right machine number. */ @@ -2421,6 +2424,12 @@ elf32_msp430_merge_mspabi_attributes (bfd *ibfd, struct bfd_link_info *info) if (ibfd->flags & BFD_LINKER_CREATED) return TRUE; + /* LTO can create temporary files for linking which may not have an attribute + section. */ + if (ibfd->lto_output + && bfd_get_section_by_name (ibfd, ".MSP430.attributes") == NULL) + return TRUE; + /* If this is the first real object just copy the attributes. */ if (!elf_known_obj_attributes_proc (obfd)[0].i) {