aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gas/ChangeLog13
-rw-r--r--gas/config/tc-avr.c24
-rw-r--r--gas/testsuite/ChangeLog7
-rw-r--r--gas/testsuite/gas/all/gas.exp3
-rw-r--r--gas/testsuite/gas/avr/link-relax-elf-flag-clear.d2
-rw-r--r--gas/testsuite/gas/avr/noreloc_withoutrelax.d2
-rw-r--r--ld/testsuite/ChangeLog9
-rw-r--r--ld/testsuite/ld-avr/relax-elf-flags-02.d2
-rw-r--r--ld/testsuite/ld-avr/relax-elf-flags-03.d2
-rw-r--r--ld/testsuite/ld-avr/relax-elf-flags-04.d4
-rw-r--r--ld/testsuite/ld-avr/relax-elf-flags-05.d4
-rw-r--r--ld/testsuite/ld-avr/relax-elf-flags-06.d2
12 files changed, 56 insertions, 18 deletions
diff --git a/gas/ChangeLog b/gas/ChangeLog
index d5c489a..f281160 100644
--- a/gas/ChangeLog
+++ b/gas/ChangeLog
@@ -1,3 +1,16 @@
+2014-12-24 Andrew Burgess <andrew.burgess@embecosm.com>
+
+ * config/tc-avr.c (struct avr_opt_s): Change link_relax to
+ no_link_relax, extend comment.
+ (enum options): Add new OPTION_NO_LINK_RELAX.
+ (md_longopts): Add entry for -mno-link-relax.
+ (md_parse_option): Handle OPTION_NO_LINK_RELAX, and update
+ OPTION_LINK_RELAX.
+ (md_begin): Initialise linkrelax from no_link_relax.
+ (md_show_usage): Include -mno-link-relax option.
+ (relaxable_section): Only allocatable code sections can be
+ relaxed.
+
2014-12-23 Andrew Burgess <andrew.burgess@embecosm.com>
* config/tc-avr.c: Add include for elf/avr.h.
diff --git a/gas/config/tc-avr.c b/gas/config/tc-avr.c
index bda0bd6..79560ac 100644
--- a/gas/config/tc-avr.c
+++ b/gas/config/tc-avr.c
@@ -345,8 +345,8 @@ struct avr_opt_s
int all_opcodes; /* -mall-opcodes: accept all known AVR opcodes. */
int no_skip_bug; /* -mno-skip-bug: no warnings for skipping 2-word insns. */
int no_wrap; /* -mno-wrap: reject rjmp/rcall with 8K wrap-around. */
- int link_relax; /* -mlink-relax: generate relocations for linker
- relaxation. */
+ int no_link_relax; /* -mno-link-relax / -mlink-relax: generate (or not)
+ relocations for linker relaxation. */
};
static struct avr_opt_s avr_opt = { 0, 0, 0, 0 };
@@ -411,7 +411,8 @@ enum options
OPTION_NO_SKIP_BUG,
OPTION_NO_WRAP,
OPTION_ISA_RMW,
- OPTION_LINK_RELAX
+ OPTION_LINK_RELAX,
+ OPTION_NO_LINK_RELAX
};
struct option md_longopts[] =
@@ -422,6 +423,7 @@ struct option md_longopts[] =
{ "mno-wrap", no_argument, NULL, OPTION_NO_WRAP },
{ "mrmw", no_argument, NULL, OPTION_ISA_RMW },
{ "mlink-relax", no_argument, NULL, OPTION_LINK_RELAX },
+ { "mno-link-relax", no_argument, NULL, OPTION_NO_LINK_RELAX },
{ NULL, no_argument, NULL, 0 }
};
@@ -528,8 +530,9 @@ md_show_usage (FILE *stream)
" -mno-wrap reject rjmp/rcall instructions with 8K wrap-around\n"
" (default for avr3, avr5)\n"
" -mrmw accept Read-Modify-Write instructions\n"
- " -mlink-relax generate relocations for linker relaxation\n"
- ));
+ " -mlink-relax generate relocations for linker relaxation (default)\n"
+ " -mno-link-relax don't generate relocations for linker relaxation.\n"
+ ));
show_mcu_list (stream);
}
@@ -600,7 +603,10 @@ md_parse_option (int c, char *arg)
specified_mcu.isa |= AVR_ISA_RMW;
return 1;
case OPTION_LINK_RELAX:
- avr_opt.link_relax = 1;
+ avr_opt.no_link_relax = 0;
+ return 1;
+ case OPTION_NO_LINK_RELAX:
+ avr_opt.no_link_relax = 1;
return 1;
}
@@ -652,7 +658,7 @@ md_begin (void)
}
bfd_set_arch_mach (stdoutput, TARGET_ARCH, avr_mcu->mach);
- linkrelax = avr_opt.link_relax;
+ linkrelax = !avr_opt.no_link_relax;
}
/* Resolve STR as a constant expression and return the result.
@@ -1239,7 +1245,9 @@ md_pcrel_from_section (fixS *fixp, segT sec)
static bfd_boolean
relaxable_section (asection *sec)
{
- return (sec->flags & SEC_DEBUGGING) == 0;
+ return ((sec->flags & SEC_DEBUGGING) == 0
+ && (sec->flags & SEC_CODE) != 0
+ && (sec->flags & SEC_ALLOC) != 0);
}
/* Does whatever the xtensa port does. */
diff --git a/gas/testsuite/ChangeLog b/gas/testsuite/ChangeLog
index d6d6450..772ee7d 100644
--- a/gas/testsuite/ChangeLog
+++ b/gas/testsuite/ChangeLog
@@ -1,3 +1,10 @@
+2014-12-24 Andrew Burgess <andrew.burgess@embecosm.com>
+
+ * gas/all/gas.exp: Test will not pass on AVR due to linker
+ relaxation support.
+ * gas/avr/noreloc_withoutrelax.d: Add -mno-link-relax option.
+ * gas/avr/link-relax-elf-flag-clear.d: Likewise.
+
2014-12-23 Andrew Burgess <andrew.burgess@embecosm.com>
* gas/avr/link-relax-elf-flag-clear.d: New file.
diff --git a/gas/testsuite/gas/all/gas.exp b/gas/testsuite/gas/all/gas.exp
index 8fa89e4..6002def 100644
--- a/gas/testsuite/gas/all/gas.exp
+++ b/gas/testsuite/gas/all/gas.exp
@@ -55,9 +55,10 @@ if { ![istarget cris-*-*] && ![istarget crisv32-*-*]
# The MN10300 port supports link time relaxation which in turn allows
# for link time resolution of the differneces of two symbols which are
# undefined at assembly time. Hence this test will not pass for the
-# MN10300. The same thing is true for the RX port as well.
+# MN10300. The same thing is true for the RX and AVR port as well.
if { ![istarget hppa*-*-*]
&& ![istarget alpha*-*-*vms*]
+ && ![istarget avr-*-*]
&& ![istarget rx-*-*]
&& ![istarget mn10300-*-*]
&& ![istarget msp430*-*-*]
diff --git a/gas/testsuite/gas/avr/link-relax-elf-flag-clear.d b/gas/testsuite/gas/avr/link-relax-elf-flag-clear.d
index 88cd3c9..e7ef22c 100644
--- a/gas/testsuite/gas/avr/link-relax-elf-flag-clear.d
+++ b/gas/testsuite/gas/avr/link-relax-elf-flag-clear.d
@@ -1,5 +1,5 @@
#name: AVR, check elf link-relax header flag is clear.
-#as: -mmcu=avrxmega2
+#as: -mno-link-relax -mmcu=avrxmega2
#readelf: -h
#source: link-relax-elf-flag.s
#target: avr-*-*
diff --git a/gas/testsuite/gas/avr/noreloc_withoutrelax.d b/gas/testsuite/gas/avr/noreloc_withoutrelax.d
index daaaeb2..7ec7d32 100644
--- a/gas/testsuite/gas/avr/noreloc_withoutrelax.d
+++ b/gas/testsuite/gas/avr/noreloc_withoutrelax.d
@@ -1,5 +1,5 @@
#name: AVR no DIFF relocs without link relax
-#as: -mmcu=avrxmega2
+#as: -mmcu=avrxmega2 -mno-link-relax
#objdump: -r
#source: relax.s
#target: avr-*-*
diff --git a/ld/testsuite/ChangeLog b/ld/testsuite/ChangeLog
index 628c906..d987267 100644
--- a/ld/testsuite/ChangeLog
+++ b/ld/testsuite/ChangeLog
@@ -1,3 +1,12 @@
+2014-12-24 Andrew Burgess <andrew.burgess@embecosm.com>
+
+ * ld/testsuite/ld-avr/relax-elf-flags-02.d: Add -mno-link-relax
+ option.
+ * ld/testsuite/ld-avr/relax-elf-flags-03.d: Likewise.
+ * ld/testsuite/ld-avr/relax-elf-flags-04.d: Likewise.
+ * ld/testsuite/ld-avr/relax-elf-flags-05.d: Likewise.
+ * ld/testsuite/ld-avr/relax-elf-flags-06.d: Likewise.
+
2014-12-24 Alan Modra <amodra@gmail.com>
* ld-scripts/defined6.s,
diff --git a/ld/testsuite/ld-avr/relax-elf-flags-02.d b/ld/testsuite/ld-avr/relax-elf-flags-02.d
index 6a008bd..c4d7660 100644
--- a/ld/testsuite/ld-avr/relax-elf-flags-02.d
+++ b/ld/testsuite/ld-avr/relax-elf-flags-02.d
@@ -1,7 +1,7 @@
#name: AVR, check link-relax flag is clear on partial link (first file)
#as: -mmcu=avrxmega2
#ld: -r -mavrxmega2
-#source: relax-elf-flags-a.s
+#source: relax-elf-flags-a.s -mno-link-relax
#source: relax-elf-flags-b.s -mlink-relax
#readelf: -h
#target: avr-*-*
diff --git a/ld/testsuite/ld-avr/relax-elf-flags-03.d b/ld/testsuite/ld-avr/relax-elf-flags-03.d
index 3d2a70d..c75c1df 100644
--- a/ld/testsuite/ld-avr/relax-elf-flags-03.d
+++ b/ld/testsuite/ld-avr/relax-elf-flags-03.d
@@ -2,7 +2,7 @@
#as: -mmcu=avrxmega2
#ld: -r -mavrxmega2
#source: relax-elf-flags-a.s -mlink-relax
-#source: relax-elf-flags-b.s
+#source: relax-elf-flags-b.s -mno-link-relax
#readelf: -h
#target: avr-*-*
diff --git a/ld/testsuite/ld-avr/relax-elf-flags-04.d b/ld/testsuite/ld-avr/relax-elf-flags-04.d
index e2a9bb6..8fa4574 100644
--- a/ld/testsuite/ld-avr/relax-elf-flags-04.d
+++ b/ld/testsuite/ld-avr/relax-elf-flags-04.d
@@ -1,8 +1,8 @@
#name: AVR, check link-relax flag is clear on partial link (both files)
#as: -mmcu=avrxmega2
#ld: -r -mavrxmega2
-#source: relax-elf-flags-a.s
-#source: relax-elf-flags-b.s
+#source: relax-elf-flags-a.s -mno-link-relax
+#source: relax-elf-flags-b.s -mno-link-relax
#readelf: -h
#target: avr-*-*
diff --git a/ld/testsuite/ld-avr/relax-elf-flags-05.d b/ld/testsuite/ld-avr/relax-elf-flags-05.d
index 8c41e8d..de62bbb 100644
--- a/ld/testsuite/ld-avr/relax-elf-flags-05.d
+++ b/ld/testsuite/ld-avr/relax-elf-flags-05.d
@@ -1,8 +1,8 @@
#name: AVR, check link-relax flag is set final link (no inputs relaxable)
#as: -mmcu=avrxmega2
#ld: -relax -mavrxmega2
-#source: relax-elf-flags-a.s
-#source: relax-elf-flags-b.s
+#source: relax-elf-flags-a.s -mno-link-relax
+#source: relax-elf-flags-b.s -mno-link-relax
#readelf: -h
#target: avr-*-*
diff --git a/ld/testsuite/ld-avr/relax-elf-flags-06.d b/ld/testsuite/ld-avr/relax-elf-flags-06.d
index 5d8e3c1..5a8e810 100644
--- a/ld/testsuite/ld-avr/relax-elf-flags-06.d
+++ b/ld/testsuite/ld-avr/relax-elf-flags-06.d
@@ -2,7 +2,7 @@
#as: -mmcu=avrxmega2
#ld: -relax -mavrxmega2
#source: relax-elf-flags-a.s -mlink-relax
-#source: relax-elf-flags-b.s
+#source: relax-elf-flags-b.s -mno-link-relax
#readelf: -h
#target: avr-*-*