[binutils-gdb] Fix linking MSP430 files created by gcc's LTO optimizer.

Nick Clifton nickc@sourceware.org
Wed Nov 21 16:22:00 GMT 2018


https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=ca94519e70c39fca1d6ea93b8604349111522a8b

commit ca94519e70c39fca1d6ea93b8604349111522a8b
Author: Jozef Lawrynowicz <jozef.l@mittosystems.com>
Date:   Wed Nov 21 16:21:25 2018 +0000

    Fix linking MSP430 files created by gcc's LTO optimizer.
    
    When invoking GCC with "-g -flto", the compiler will create LTO objects
    with debug information. The objects created are "simple ELF" objects (see
    libiberty/simple-object-elf.c) and do not have target-specific sections.
    
    When the MSP430 linker sees one of these objects without a .MSP430.attributes
    section it errors:
    
    > error: /tmp/cc4LhbEI.ltrans0.ltrans.o uses MSP430X instructions but /tmp/ccynqIwudebugobj uses unknown
    > error: /tmp/cc4LhbEI.ltrans0.ltrans.o uses the small code model whereas /tmp/ccynqIwudebugobj uses the unknown code model
    > error: /tmp/cc4LhbEI.ltrans0.ltrans.o uses the small data model whereas /tmp/ccynqIwudebugobj uses the unknown data model
    > error: /tmp/cc4LhbEI.ltrans0.ltrans.o uses the small code model but /tmp/ccynqIwudebugobj uses the unknown data model
    > failed to merge target specific data of file /tmp/cc4LhbEI.ltrans0.ltrans.o
    
    The following patch allows these debug LTO objects to be linked with other
    MSP430 objects even if they do not have a .MSP430.attributes section.
    
    bfd	* elf32-msp430.c (elf32_msp430_merge_mspabi_attributes): Do not
    	error when .MSP430.attributes section is missing from objects
    	created by LTO.

Diff:
---
 bfd/ChangeLog      | 6 ++++++
 bfd/elf32-msp430.c | 6 ++++++
 2 files changed, 12 insertions(+)

diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index ffde4c9..35f0706 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -1,3 +1,9 @@
+2018-11-21  Jozef Lawrynowicz  <jozef.l@mittosystems.com>
+
+	* elf32-msp430.c (elf32_msp430_merge_mspabi_attributes): Do not
+	error when .MSP430.attributes section is missing from objects
+	created by LTO.
+
 2018-11-13  Jim Wilson  <jimw@sifive.com>
 
 	* elfnn-riscv.c (riscv_float_abi_string): New.
diff --git a/bfd/elf32-msp430.c b/bfd/elf32-msp430.c
index 2d351d3..95dae2e 100644
--- a/bfd/elf32-msp430.c
+++ b/bfd/elf32-msp430.c
@@ -2424,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)
     {



More information about the Binutils-cvs mailing list