diff options
author | Jozef Lawrynowicz <jozef.l@mittosystems.com> | 2018-11-21 16:21:25 +0000 |
---|---|---|
committer | Nick Clifton <nickc@redhat.com> | 2018-11-21 16:21:25 +0000 |
commit | ca94519e70c39fca1d6ea93b8604349111522a8b (patch) | |
tree | 8cce71581cf14d96f73a219b71b2e9c8adb0bd09 /bfd/elf32-msp430.c | |
parent | b5ffee3181d157a4d964f62344ac827142e37bde (diff) | |
download | gdb-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.
Diffstat (limited to 'bfd/elf32-msp430.c')
-rw-r--r-- | bfd/elf32-msp430.c | 6 |
1 files changed, 6 insertions, 0 deletions
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) { |