aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJozef Lawrynowicz <jozef.l@mittosystems.com>2018-11-21 16:21:25 +0000
committerNick Clifton <nickc@redhat.com>2018-11-21 16:21:25 +0000
commitca94519e70c39fca1d6ea93b8604349111522a8b (patch)
tree8cce71581cf14d96f73a219b71b2e9c8adb0bd09
parentb5ffee3181d157a4d964f62344ac827142e37bde (diff)
downloadgdb-ca94519e70c39fca1d6ea93b8604349111522a8b.zip
gdb-ca94519e70c39fca1d6ea93b8604349111522a8b.tar.gz
gdb-ca94519e70c39fca1d6ea93b8604349111522a8b.tar.bz2
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.
-rw-r--r--bfd/ChangeLog6
-rw-r--r--bfd/elf32-msp430.c6
2 files changed, 12 insertions, 0 deletions
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)
{