AVR: Only set link-relax elf flag when appropriate.
authorAndrew Burgess <andrew.burgess@embecosm.com>
Sat, 22 Nov 2014 23:19:31 +0000 (23:19 +0000)
committerAndrew Burgess <andrew.burgess@embecosm.com>
Tue, 23 Dec 2014 15:45:11 +0000 (15:45 +0000)
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.

bfd/ChangeLog
bfd/elf32-avr.c
gas/ChangeLog
gas/config/tc-avr.c
gas/config/tc-avr.h
gas/testsuite/ChangeLog
gas/testsuite/gas/avr/link-relax-elf-flag-clear.d [new file with mode: 0644]
gas/testsuite/gas/avr/link-relax-elf-flag-set.d [new file with mode: 0644]
gas/testsuite/gas/avr/link-relax-elf-flag.s [new file with mode: 0644]

index 4bb379bf4cf44975bf2f2535b7f6063bde105895..8e6fa09472249d376c32efc415cd5347129b9d82 100644 (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.
index 3d52940adc935fad51032108b561a0d3661b8c0b..633385511ccfaa2b6b1e6fd84babdaf4d998259e 100644 (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.  */
index 0df23d9f330eb823229acff94271fbdb6a1c9521..d5c489a533d6e28ea00f42f9b8ad32e48d4b1819 100644 (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.
index dfe66c68a72cd342b2c0ec3a53695df3251198af..bda0bd636988969742024470bdac9134d3345dad 100644 (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;
+}
index fb596add90dad72fcd414356b49d5a3091cf09ec..81ba0fc0551396464373711038f13a9c97e86ae4 100644 (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);
index 7c76bbcbc210e62dd5bfc2cf25b6887ad49e22d1..d6d64506bdd3e2e386321fe0729064169ad4b2d6 100644 (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
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 (file)
index 0000000..88cd3c9
--- /dev/null
@@ -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 (file)
index 0000000..5614d3f
--- /dev/null
@@ -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 (file)
index 0000000..af543e1
--- /dev/null
@@ -0,0 +1,4 @@
+        .text
+        .global _start
+_start:
+        nop
This page took 0.031206 seconds and 4 git commands to generate.