summaryrefslogtreecommitdiff
path: root/gas
diff options
context:
space:
mode:
authorAndrew Burgess <andrew.burgess@embecosm.com>2014-11-22 23:19:31 +0000
committerAndrew Burgess <andrew.burgess@embecosm.com>2014-12-23 15:45:11 +0000
commiteac7440d805bec68f583db395aa42c38615daf14 (patch)
treee93db6bdf6f377b7edb83726e1228a73d1ea960e /gas
parentc01feb367543270196672dedf9a8365a2d8d3cff (diff)
downloadbinutils-gdb-eac7440d805bec68f583db395aa42c38615daf14.tar.gz
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.
Diffstat (limited to 'gas')
-rw-r--r--gas/ChangeLog7
-rw-r--r--gas/config/tc-avr.c9
-rw-r--r--gas/config/tc-avr.h3
-rw-r--r--gas/testsuite/ChangeLog6
-rw-r--r--gas/testsuite/gas/avr/link-relax-elf-flag-clear.d10
-rw-r--r--gas/testsuite/gas/avr/link-relax-elf-flag-set.d10
-rw-r--r--gas/testsuite/gas/avr/link-relax-elf-flag.s4
7 files changed, 48 insertions, 1 deletions
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 <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.
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 <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
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