+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.
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 };
OPTION_NO_SKIP_BUG,
OPTION_NO_WRAP,
OPTION_ISA_RMW,
- OPTION_LINK_RELAX
+ OPTION_LINK_RELAX,
+ OPTION_NO_LINK_RELAX
};
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 }
};
" -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);
}
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;
}
}
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.
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. */
+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.
# 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*-*-*]
#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-*-*
#name: AVR no DIFF relocs without link relax
-#as: -mmcu=avrxmega2
+#as: -mmcu=avrxmega2 -mno-link-relax
#objdump: -r
#source: relax.s
#target: avr-*-*
+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,
#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-*-*
#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-*-*
#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-*-*
#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-*-*
#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-*-*