AVR: Only set link-relax elf flag when appropriate.

The AVR target uses a bit in the elf header flags to indicate if the
object was assembled ready for linker relaxation.  Previously this flag
was always set, even when the object was not assembled ready for linker
relaxation.

This patch moves setting of the flag into the assembler, and sets it
only when the assembler is preparing the file for linker relaxation.

bfd/ChangeLog:

	* elf32-avr.c (bfd_elf_avr_final_write_processing): Don't set
	EF_AVR_LINKRELAX_PREPARED unconditionally.

gas/ChangeLog:

	* 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

gas/testsuite/ChangeLog:

	* 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.
This commit is contained in:
Andrew Burgess 2014-11-22 23:19:31 +00:00
parent c01feb3675
commit eac7440d80
9 changed files with 53 additions and 2 deletions

View File

@ -1,3 +1,8 @@
2014-12-23 Andrew Burgess <andrew.burgess@embecosm.com>
* elf32-avr.c (bfd_elf_avr_final_write_processing): Don't set
EF_AVR_LINKRELAX_PREPARED unconditionally.
2014-12-23 Alan Modra <amodra@gmail.com>
* elflink.c (_bfd_elf_define_linkage_sym): Set linker_def.

View File

@ -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. */

View File

@ -1,3 +1,10 @@
2014-12-23 Andrew Burgess <andrew.burgess@embecosm.com>
* 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 <xxingpan@marvell.com>
* gas/config/tc-arm.c (arm_cpus): Add core marvell-whitney.

View File

@ -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;
}

View File

@ -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);

View File

@ -1,3 +1,9 @@
2014-12-23 Andrew Burgess <andrew.burgess@embecosm.com>
* 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 <matthew.fortune@imgtec.com>
* gas/mips/r6-64.s: Remove .align directives from LDPC

View File

@ -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
#...

View File

@ -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
#...

View File

@ -0,0 +1,4 @@
.text
.global _start
_start:
nop