diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 4bb379bf4cf..8e6fa094722 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,8 @@ +2014-12-23 Andrew Burgess + + * elf32-avr.c (bfd_elf_avr_final_write_processing): Don't set + EF_AVR_LINKRELAX_PREPARED unconditionally. + 2014-12-23 Alan Modra * elflink.c (_bfd_elf_define_linkage_sym): Set linker_def. diff --git a/bfd/elf32-avr.c b/bfd/elf32-avr.c index 3d52940adc9..633385511cc 100644 --- a/bfd/elf32-avr.c +++ b/bfd/elf32-avr.c @@ -1522,7 +1522,6 @@ bfd_elf_avr_final_write_processing (bfd *abfd, elf_elfheader (abfd)->e_machine = EM_AVR; elf_elfheader (abfd)->e_flags &= ~ EF_AVR_MACH; elf_elfheader (abfd)->e_flags |= val; - elf_elfheader (abfd)->e_flags |= EF_AVR_LINKRELAX_PREPARED; } /* Set the right machine number. */ diff --git a/gas/ChangeLog b/gas/ChangeLog index 0df23d9f330..d5c489a533d 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,3 +1,10 @@ +2014-12-23 Andrew Burgess + + * config/tc-avr.c: Add include for elf/avr.h. + (avr_elf_final_processing): New function. + * config/tc-avr.h (elf_tc_final_processing): Define. + (avr_elf_final_processing): Declare + 2014-12-18 Xingxing Pan * gas/config/tc-arm.c (arm_cpus): Add core marvell-whitney. diff --git a/gas/config/tc-avr.c b/gas/config/tc-avr.c index dfe66c68a72..bda0bd63698 100644 --- a/gas/config/tc-avr.c +++ b/gas/config/tc-avr.c @@ -25,7 +25,7 @@ #include "subsegs.h" #include "dwarf2dbg.h" #include "dw2gencfi.h" - +#include "elf/avr.h" struct avr_opcodes_s { @@ -1848,3 +1848,10 @@ avr_allow_local_subtract (expressionS * left, them. */ return FALSE; } + +void +avr_elf_final_processing (void) +{ + if (linkrelax) + elf_elfheader (stdoutput)->e_flags |= EF_AVR_LINKRELAX_PREPARED; +} diff --git a/gas/config/tc-avr.h b/gas/config/tc-avr.h index fb596add90d..81ba0fc0551 100644 --- a/gas/config/tc-avr.h +++ b/gas/config/tc-avr.h @@ -213,3 +213,6 @@ extern void tc_cfi_frame_initial_instructions (void); relaxation, so do not resolve such expressions in the assembler. */ #define md_allow_local_subtract(l,r,s) avr_allow_local_subtract (l, r, s) extern bfd_boolean avr_allow_local_subtract (expressionS *, expressionS *, segT); + +#define elf_tc_final_processing avr_elf_final_processing +extern void avr_elf_final_processing (void); diff --git a/gas/testsuite/ChangeLog b/gas/testsuite/ChangeLog index 7c76bbcbc21..d6d64506bdd 100644 --- a/gas/testsuite/ChangeLog +++ b/gas/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2014-12-23 Andrew Burgess + + * gas/avr/link-relax-elf-flag-clear.d: New file. + * gas/avr/link-relax-elf-flag-set.d: New file. + * gas/avr/link-relax-elf-flag.s: New file. + 2014-12-19 Matthew Fortune * gas/mips/r6-64.s: Remove .align directives from LDPC diff --git a/gas/testsuite/gas/avr/link-relax-elf-flag-clear.d b/gas/testsuite/gas/avr/link-relax-elf-flag-clear.d new file mode 100644 index 00000000000..88cd3c9d4b9 --- /dev/null +++ b/gas/testsuite/gas/avr/link-relax-elf-flag-clear.d @@ -0,0 +1,10 @@ +#name: AVR, check elf link-relax header flag is clear. +#as: -mmcu=avrxmega2 +#readelf: -h +#source: link-relax-elf-flag.s +#target: avr-*-* + +ELF Header: +#... + Flags: 0x66, avr:102 +#... \ No newline at end of file diff --git a/gas/testsuite/gas/avr/link-relax-elf-flag-set.d b/gas/testsuite/gas/avr/link-relax-elf-flag-set.d new file mode 100644 index 00000000000..5614d3f313f --- /dev/null +++ b/gas/testsuite/gas/avr/link-relax-elf-flag-set.d @@ -0,0 +1,10 @@ +#name: AVR, check elf link-relax header flag is set. +#as: -mlink-relax -mmcu=avrxmega2 +#readelf: -h +#source: link-relax-elf-flag.s +#target: avr-*-* + +ELF Header: +#... + Flags: 0xe6, avr:102, link-relax +#... \ No newline at end of file diff --git a/gas/testsuite/gas/avr/link-relax-elf-flag.s b/gas/testsuite/gas/avr/link-relax-elf-flag.s new file mode 100644 index 00000000000..af543e18707 --- /dev/null +++ b/gas/testsuite/gas/avr/link-relax-elf-flag.s @@ -0,0 +1,4 @@ + .text + .global _start +_start: + nop