aboutsummaryrefslogtreecommitdiff
path: root/devel/avr-gcc
diff options
context:
space:
mode:
authorJoerg Wunsch <joerg@FreeBSD.org>2010-03-08 19:53:44 +0000
committerJoerg Wunsch <joerg@FreeBSD.org>2010-03-08 19:53:44 +0000
commit39ccf57d02b2971677c431e83c05bbd9c28b6ef0 (patch)
treead1649b99fd2eff9fc55d4eaf027d03ea06efe90 /devel/avr-gcc
parent43e2a7d3728143d2fd91940c5aaa2fbcd6762849 (diff)
downloadports-39ccf57d02b2971677c431e83c05bbd9c28b6ef0.tar.gz
ports-39ccf57d02b2971677c431e83c05bbd9c28b6ef0.zip
Upgrade to GCC 4.3.4, as well as to the patches from WinAVR 20100110
Notes
Notes: svn path=/head/; revision=250707
Diffstat (limited to 'devel/avr-gcc')
-rw-r--r--devel/avr-gcc/Makefile4
-rw-r--r--devel/avr-gcc/distinfo12
-rw-r--r--devel/avr-gcc/files/patch-avr-libgcc.S422
-rw-r--r--devel/avr-gcc/files/patch-bug11259107
-rw-r--r--devel/avr-gcc/files/patch-bug18145186
-rw-r--r--devel/avr-gcc/files/patch-bug19636-24894-31644-3178645
-rw-r--r--devel/avr-gcc/files/patch-bug3501326
-rw-r--r--devel/avr-gcc/files/patch-builtins581
-rw-r--r--devel/avr-gcc/files/patch-disable-ssp22
-rw-r--r--devel/avr-gcc/files/patch-libiberty-Makefile.in12
-rw-r--r--devel/avr-gcc/files/patch-newdevices674
-rw-r--r--devel/avr-gcc/files/patch-param-inline-call-cost20
-rw-r--r--devel/avr-gcc/files/patch-xmega258
-rw-r--r--devel/avr-gcc/files/patch-xx-os_main121
-rw-r--r--devel/avr-gcc/pkg-plist160
15 files changed, 1915 insertions, 735 deletions
diff --git a/devel/avr-gcc/Makefile b/devel/avr-gcc/Makefile
index 4a37609a41a1..5eedcfe62327 100644
--- a/devel/avr-gcc/Makefile
+++ b/devel/avr-gcc/Makefile
@@ -6,8 +6,7 @@
#
PORTNAME= gcc
-PORTVERSION= 4.3.2
-PORTREVISION= 2
+PORTVERSION= 4.3.4
CATEGORIES= devel
MASTER_SITES= ${MASTER_SITE_GCC}
MASTER_SITES+= http://people.freebsd.org/~joerg/:local
@@ -34,7 +33,6 @@ BUILD_WRKSRC= ${WRKDIR}/build
CONFIGURE_WRKSRC= ${BUILD_WRKSRC}
INSTALL_WRKSRC= ${BUILD_WRKSRC}
CONFIGURE_SCRIPT= ../gcc-${PORTVERSION}/configure
-NO_LATEST_LINK= Use devel/avr-gcc for a stable version.
USE_PERL5_BUILD= yes
USE_BZIP2= yes
diff --git a/devel/avr-gcc/distinfo b/devel/avr-gcc/distinfo
index b07494eb15e2..db0c8673e8f0 100644
--- a/devel/avr-gcc/distinfo
+++ b/devel/avr-gcc/distinfo
@@ -1,6 +1,6 @@
-MD5 (gcc-core-4.3.2.tar.bz2) = dd8048b43d3d4e5595bcade47b9144c6
-SHA256 (gcc-core-4.3.2.tar.bz2) = 0687e7279d78eb963ac34a3b06a0a6a1d1e9a26807ef4939cf4a2ad5f062e75a
-SIZE (gcc-core-4.3.2.tar.bz2) = 23830073
-MD5 (gcc-g++-4.3.2.tar.bz2) = bfdf8d19e1b85f522f8b8d48d25e7aaa
-SHA256 (gcc-g++-4.3.2.tar.bz2) = 254e2bc95ca397579634b2277c4dbe84ee47cb86d0aad6bfff8586107085bb80
-SIZE (gcc-g++-4.3.2.tar.bz2) = 5667106
+MD5 (gcc-core-4.3.4.tar.bz2) = 575b3220bb8e7060939c429fc8608d22
+SHA256 (gcc-core-4.3.4.tar.bz2) = 3189838f5047be4ff54711c84db17c76ecfcc79bf4f4d110bf7323eeb90568fa
+SIZE (gcc-core-4.3.4.tar.bz2) = 24329359
+MD5 (gcc-g++-4.3.4.tar.bz2) = d526e34eec101b8c69254ed5215b6d41
+SHA256 (gcc-g++-4.3.4.tar.bz2) = f8d27b4d2c8fa492a1f8b7af46a39192c28dda1e863ae28a80b7fec4caf41735
+SIZE (gcc-g++-4.3.4.tar.bz2) = 5623014
diff --git a/devel/avr-gcc/files/patch-avr-libgcc.S b/devel/avr-gcc/files/patch-avr-libgcc.S
index 63979797d3a2..5683fd2535e7 100644
--- a/devel/avr-gcc/files/patch-avr-libgcc.S
+++ b/devel/avr-gcc/files/patch-avr-libgcc.S
@@ -1,177 +1,6 @@
-Note: this patch is misnamed. It actually adds support for
-ATmega256x. I'll stick with the name since CVS is poor at
-renaming files. -- Joerg
-
-Index: gcc/config/avr/libgcc.S
-===================================================================
---- gcc/config/avr/libgcc.S (revision 132252)
-+++ gcc/config/avr/libgcc.S (working copy)
-@@ -594,7 +594,12 @@
- out __SP_H__,r29
- out __SREG__,__tmp_reg__
- out __SP_L__,r28
-+#if defined (__AVR_HAVE_EIJMP_EICALL__)
-+ eijmp
-+#else
- ijmp
-+#endif
-+
- .endfunc
- #endif /* defined (L_prologue) */
-
-@@ -674,13 +679,22 @@
- lpm __tmp_reg__, Z+
- lpm r31, Z
- mov r30, __tmp_reg__
-+
-+#if defined (__AVR_HAVE_EIJMP_EICALL__)
-+ eijmp
-+#else
- ijmp
-+#endif
-+
- #else
- lpm
- adiw r30, 1
- push r0
- lpm
- push r0
-+#if defined (__AVR_HAVE_EIJMP_EICALL__)
-+ push __zero_reg__
-+#endif
- ret
- #endif
- .endfunc
-Index: gcc/config/avr/avr.md
-===================================================================
---- gcc/config/avr/avr.md (revision 132252)
-+++ gcc/config/avr/avr.md (working copy)
-@@ -32,6 +32,7 @@
- ;; p POST_INC or PRE_DEC address as a pointer (X, Y, Z)
- ;; r POST_INC or PRE_DEC address as a register (r26, r28, r30)
- ;; ~ Output 'r' if not AVR_MEGA.
-+;; ! Output 'e' if AVR_HAVE_EIJMP_EICALL.
-
- ;; UNSPEC usage:
- ;; 0 Length of a string, see "strlenhi".
-@@ -2301,22 +2302,22 @@
- "(register_operand (operands[0], HImode) || CONSTANT_P (operands[0]))"
- "*{
- if (which_alternative==0)
-- return \"icall\";
-+ return \"%!icall\";
- else if (which_alternative==1)
- {
- if (AVR_HAVE_MOVW)
- return (AS2 (movw, r30, %0) CR_TAB
-- \"icall\");
-+ \"%!icall\");
- else
- return (AS2 (mov, r30, %A0) CR_TAB
- AS2 (mov, r31, %B0) CR_TAB
-- \"icall\");
-+ \"%!icall\");
- }
- else if (which_alternative==2)
- return AS1(%~call,%c0);
- return (AS2 (ldi,r30,lo8(%0)) CR_TAB
- AS2 (ldi,r31,hi8(%0)) CR_TAB
-- \"icall\");
-+ \"%!icall\");
- }"
- [(set_attr "cc" "clobber,clobber,clobber,clobber")
- (set_attr_alternative "length"
-@@ -2338,22 +2339,22 @@
- "(register_operand (operands[0], VOIDmode) || CONSTANT_P (operands[0]))"
- "*{
- if (which_alternative==0)
-- return \"icall\";
-+ return \"%!icall\";
- else if (which_alternative==1)
- {
- if (AVR_HAVE_MOVW)
- return (AS2 (movw, r30, %1) CR_TAB
-- \"icall\");
-+ \"%!icall\");
- else
- return (AS2 (mov, r30, %A1) CR_TAB
- AS2 (mov, r31, %B1) CR_TAB
-- \"icall\");
-+ \"%!icall\");
- }
- else if (which_alternative==2)
- return AS1(%~call,%c1);
- return (AS2 (ldi, r30, lo8(%1)) CR_TAB
- AS2 (ldi, r31, hi8(%1)) CR_TAB
-- \"icall\");
-+ \"%!icall\");
- }"
- [(set_attr "cc" "clobber,clobber,clobber,clobber")
- (set_attr_alternative "length"
-@@ -2376,13 +2377,20 @@
- ; indirect jump
- (define_insn "indirect_jump"
- [(set (pc) (match_operand:HI 0 "register_operand" "!z,*r"))]
-- ""
-+ "!AVR_HAVE_EIJMP_EICALL"
- "@
- ijmp
- push %A0\;push %B0\;ret"
- [(set_attr "length" "1,3")
- (set_attr "cc" "none,none")])
-
-+(define_insn "*indirect_jump_avr6"
-+ [(set (pc) (match_operand:HI 0 "register_operand" "z"))]
-+ "AVR_HAVE_EIJMP_EICALL"
-+ "eijmp"
-+ [(set_attr "length" "1")
-+ (set_attr "cc" "none")])
-+
- ;; table jump
-
- ;; Table made from "rjmp" instructions for <=8K devices.
-@@ -2391,7 +2399,7 @@
- UNSPEC_INDEX_JMP))
- (use (label_ref (match_operand 1 "" "")))
- (clobber (match_dup 0))]
-- "!AVR_MEGA"
-+ "(!AVR_MEGA) && (!AVR_HAVE_EIJMP_EICALL)"
- "@
- ijmp
- push %A0\;push %B0\;ret"
-@@ -2420,7 +2428,7 @@
- lpm __tmp_reg__,Z+
- lpm r31,Z
- mov r30,__tmp_reg__
-- ijmp"
-+ %!ijmp"
- [(set_attr "length" "6")
- (set_attr "cc" "clobber")])
-
-@@ -2429,7 +2437,7 @@
- UNSPEC_INDEX_JMP))
- (use (label_ref (match_operand 1 "" "")))
- (clobber (match_dup 0))]
-- "AVR_MEGA"
-+ "AVR_MEGA && !AVR_HAVE_EIJMP_EICALL"
- "lsl r30
- rol r31
- lpm
-@@ -2764,8 +2764,8 @@
- (use (reg:HI REG_X))
- (clobber (reg:HI REG_Z))]
- ""
-- "ldi r30,pm_lo8(1f)
-- ldi r31,pm_hi8(1f)
-+ "ldi r30,lo8(gs(1f))
-+ ldi r31,hi8(gs(1f))
- %~jmp __prologue_saves__+((18 - %0) * 2)
- 1:"
- [(set_attr_alternative "length"
-Index: gcc/config/avr/avr.c
-===================================================================
---- gcc/config/avr/avr.c (revision 132252)
-+++ gcc/config/avr/avr.c (working copy)
+diff -ur ../gcc-4.3.4.orig/gcc/config/avr/avr.c ./gcc/config/avr/avr.c
+--- ../gcc-4.3.4.orig/gcc/config/avr/avr.c 2008-06-15 23:32:29.000000000 +0200
++++ ./gcc/config/avr/avr.c 2009-10-02 14:27:56.000000000 +0200
@@ -127,7 +127,8 @@
{ 0, 0, 1, 1, 0, 0, 0, 0, "__AVR_ARCH__=35" },
{ 0, 1, 0, 1, 0, 0, 0, 0, "__AVR_ARCH__=4" },
@@ -203,7 +32,7 @@ Index: gcc/config/avr/avr.c
/* Assembler only. */
{ "avr1", ARCH_AVR1, NULL },
{ "at90s1200", ARCH_AVR1, "__AVR_AT90S1200__" },
-@@ -511,9 +517,10 @@
+@@ -513,9 +519,10 @@
else
{
int offset = frame_pointer_needed ? 2 : 0;
@@ -215,7 +44,7 @@ Index: gcc/config/avr/avr.c
}
}
-@@ -682,7 +694,9 @@
+@@ -662,7 +669,9 @@
/* Prevent any attempt to delete the setting of ZERO_REG! */
emit_insn (gen_rtx_USE (VOIDmode, zero_reg_rtx));
}
@@ -226,7 +55,7 @@ Index: gcc/config/avr/avr.c
{
insn = emit_move_insn (gen_rtx_REG (HImode, REG_X),
gen_int_mode (size, HImode));
-@@ -1119,7 +1126,7 @@
+@@ -1121,7 +1130,7 @@
&& ((GET_CODE (addr) == SYMBOL_REF && SYMBOL_REF_FUNCTION_P (addr))
|| GET_CODE (addr) == LABEL_REF))
{
@@ -235,7 +64,7 @@ Index: gcc/config/avr/avr.c
output_addr_const (file,addr);
fprintf (file ,")");
}
-@@ -1144,6 +1151,11 @@
+@@ -1146,6 +1155,11 @@
if (!AVR_MEGA)
fputc ('r', file);
}
@@ -247,7 +76,7 @@ Index: gcc/config/avr/avr.c
else if (REG_P (x))
{
if (x == zero_reg_rtx)
-@@ -4468,7 +4480,7 @@
+@@ -4470,7 +4484,7 @@
&& ((GET_CODE (x) == SYMBOL_REF && SYMBOL_REF_FUNCTION_P (x))
|| GET_CODE (x) == LABEL_REF))
{
@@ -256,7 +85,7 @@ Index: gcc/config/avr/avr.c
output_addr_const (asm_out_file, x);
fputs (")\n", asm_out_file);
return true;
-@@ -5815,7 +5827,7 @@
+@@ -5817,7 +5831,7 @@
{
switch_to_section (progmem_section);
if (AVR_MEGA)
@@ -265,36 +94,10 @@ Index: gcc/config/avr/avr.c
else
fprintf (stream, "\trjmp .L%d\n", value);
}
-Index: gcc/config/avr/t-avr
-===================================================================
---- gcc/config/avr/t-avr (revision 132252)
-+++ gcc/config/avr/t-avr (working copy)
-@@ -37,8 +37,8 @@
-
- FPBIT = fp-bit.c
-
--MULTILIB_OPTIONS = mmcu=avr2/mmcu=avr25/mmcu=avr3/mmcu=avr31/mmcu=avr35/mmcu=avr4/mmcu=avr5/mmcu=avr51
--MULTILIB_DIRNAMES = avr2 avr25 avr3 avr31 avr35 avr4 avr5 avr51
-+MULTILIB_OPTIONS = mmcu=avr2/mmcu=avr25/mmcu=avr3/mmcu=avr31/mmcu=avr35/mmcu=avr4/mmcu=avr5/mmcu=avr51/mmcu=avr6
-+MULTILIB_DIRNAMES = avr2 avr25 avr3 avr31 avr35 avr4 avr5 avr51 avr6
-
- # The many avr2 matches are not listed here - this is the default.
- MULTILIB_MATCHES = \
-@@ -123,7 +123,9 @@
- mmcu?avr51=mmcu?atmega1284p \
- mmcu?avr51=mmcu?at90can128 \
- mmcu?avr51=mmcu?at90usb1286 \
-- mmcu?avr51=mmcu?at90usb1287
-+ mmcu?avr51=mmcu?at90usb1287 \
-+ mmcu?avr6=mmcu?atmega2560 \
-+ mmcu?avr6=mmcu?atmega2561
-
- MULTILIB_EXCEPTIONS =
-
-Index: gcc/config/avr/avr.h
-===================================================================
---- gcc/config/avr/avr.h (revision 132252)
-+++ gcc/config/avr/avr.h (working copy)
+Only in ./gcc/config/avr: avr.c.orig
+diff -ur ../gcc-4.3.4.orig/gcc/config/avr/avr.h ./gcc/config/avr/avr.h
+--- ../gcc-4.3.4.orig/gcc/config/avr/avr.h 2008-06-15 23:32:29.000000000 +0200
++++ ./gcc/config/avr/avr.h 2009-10-02 14:27:56.000000000 +0200
@@ -80,6 +80,12 @@
builtin_define ("__AVR_MEGA__"); \
if (avr_current_arch->have_jmp_call) \
@@ -321,7 +124,7 @@ Index: gcc/config/avr/avr.h
#define TARGET_VERSION fprintf (stderr, " (GNU assembler syntax)");
-@@ -671,7 +678,7 @@
+@@ -681,7 +688,7 @@
#define PRINT_OPERAND(STREAM, X, CODE) print_operand (STREAM, X, CODE)
@@ -330,7 +133,7 @@ Index: gcc/config/avr/avr.h
#define PRINT_OPERAND_ADDRESS(STREAM, X) print_operand_address(STREAM, X)
-@@ -828,6 +835,7 @@
+@@ -838,6 +845,7 @@
mmcu=at90usb64*|\
mmcu=at90usb128*|\
mmcu=at94k: -m avr5}\
@@ -338,7 +141,7 @@ Index: gcc/config/avr/avr.h
%{mmcu=atmega324*|\
mmcu=atmega325*|\
mmcu=atmega328p|\
-@@ -856,7 +864,8 @@
+@@ -866,7 +874,8 @@
mmcu=at90usb*: -Tdata 0x800100}\
%{mmcu=atmega640|\
mmcu=atmega1280|\
@@ -348,7 +151,7 @@ Index: gcc/config/avr/avr.h
#define LIB_SPEC \
"%{!mmcu=at90s1*:%{!mmcu=attiny11:%{!mmcu=attiny12:%{!mmcu=attiny15:%{!mmcu=attiny28: -lc }}}}}"
-@@ -968,6 +977,8 @@
+@@ -978,6 +987,8 @@
%{mmcu=atmega1280:crtm1280.o%s} \
%{mmcu=atmega1281:crtm1281.o%s} \
%{mmcu=atmega1284p:crtm1284p.o%s} \
@@ -357,3 +160,194 @@ Index: gcc/config/avr/avr.h
%{mmcu=at90can128:crtcan128.o%s} \
%{mmcu=at90usb1286:crtusb1286.o%s} \
%{mmcu=at90usb1287:crtusb1287.o%s}"
+Only in ./gcc/config/avr: avr.h.orig
+diff -ur ../gcc-4.3.4.orig/gcc/config/avr/avr.md ./gcc/config/avr/avr.md
+--- ../gcc-4.3.4.orig/gcc/config/avr/avr.md 2009-03-09 21:49:28.000000000 +0100
++++ ./gcc/config/avr/avr.md 2009-10-02 14:27:56.000000000 +0200
+@@ -32,6 +32,7 @@
+ ;; p POST_INC or PRE_DEC address as a pointer (X, Y, Z)
+ ;; r POST_INC or PRE_DEC address as a register (r26, r28, r30)
+ ;; ~ Output 'r' if not AVR_MEGA.
++;; ! Output 'e' if AVR_HAVE_EIJMP_EICALL.
+
+ ;; UNSPEC usage:
+ ;; 0 Length of a string, see "strlenhi".
+@@ -2290,22 +2291,22 @@
+ "(register_operand (operands[0], HImode) || CONSTANT_P (operands[0]))"
+ "*{
+ if (which_alternative==0)
+- return \"icall\";
++ return \"%!icall\";
+ else if (which_alternative==1)
+ {
+ if (AVR_HAVE_MOVW)
+ return (AS2 (movw, r30, %0) CR_TAB
+- \"icall\");
++ \"%!icall\");
+ else
+ return (AS2 (mov, r30, %A0) CR_TAB
+ AS2 (mov, r31, %B0) CR_TAB
+- \"icall\");
++ \"%!icall\");
+ }
+ else if (which_alternative==2)
+ return AS1(%~call,%c0);
+ return (AS2 (ldi,r30,lo8(%0)) CR_TAB
+ AS2 (ldi,r31,hi8(%0)) CR_TAB
+- \"icall\");
++ \"%!icall\");
+ }"
+ [(set_attr "cc" "clobber,clobber,clobber,clobber")
+ (set_attr_alternative "length"
+@@ -2327,22 +2328,22 @@
+ "(register_operand (operands[0], VOIDmode) || CONSTANT_P (operands[0]))"
+ "*{
+ if (which_alternative==0)
+- return \"icall\";
++ return \"%!icall\";
+ else if (which_alternative==1)
+ {
+ if (AVR_HAVE_MOVW)
+ return (AS2 (movw, r30, %1) CR_TAB
+- \"icall\");
++ \"%!icall\");
+ else
+ return (AS2 (mov, r30, %A1) CR_TAB
+ AS2 (mov, r31, %B1) CR_TAB
+- \"icall\");
++ \"%!icall\");
+ }
+ else if (which_alternative==2)
+ return AS1(%~call,%c1);
+ return (AS2 (ldi, r30, lo8(%1)) CR_TAB
+ AS2 (ldi, r31, hi8(%1)) CR_TAB
+- \"icall\");
++ \"%!icall\");
+ }"
+ [(set_attr "cc" "clobber,clobber,clobber,clobber")
+ (set_attr_alternative "length"
+@@ -2365,13 +2366,20 @@
+ ; indirect jump
+ (define_insn "indirect_jump"
+ [(set (pc) (match_operand:HI 0 "register_operand" "!z,*r"))]
+- ""
++ "!AVR_HAVE_EIJMP_EICALL"
+ "@
+ ijmp
+ push %A0\;push %B0\;ret"
+ [(set_attr "length" "1,3")
+ (set_attr "cc" "none,none")])
+
++(define_insn "*indirect_jump_avr6"
++ [(set (pc) (match_operand:HI 0 "register_operand" "z"))]
++ "AVR_HAVE_EIJMP_EICALL"
++ "eijmp"
++ [(set_attr "length" "1")
++ (set_attr "cc" "none")])
++
+ ;; table jump
+
+ ;; Table made from "rjmp" instructions for <=8K devices.
+@@ -2380,7 +2388,7 @@
+ UNSPEC_INDEX_JMP))
+ (use (label_ref (match_operand 1 "" "")))
+ (clobber (match_dup 0))]
+- "!AVR_MEGA"
++ "(!AVR_MEGA) && (!AVR_HAVE_EIJMP_EICALL)"
+ "@
+ ijmp
+ push %A0\;push %B0\;ret"
+@@ -2409,7 +2417,7 @@
+ lpm __tmp_reg__,Z+
+ lpm r31,Z
+ mov r30,__tmp_reg__
+- ijmp"
++ %!ijmp"
+ [(set_attr "length" "6")
+ (set_attr "cc" "clobber")])
+
+@@ -2418,7 +2426,7 @@
+ UNSPEC_INDEX_JMP))
+ (use (label_ref (match_operand 1 "" "")))
+ (clobber (match_dup 0))]
+- "AVR_MEGA"
++ "AVR_MEGA && !AVR_HAVE_EIJMP_EICALL"
+ "lsl r30
+ rol r31
+ lpm
+@@ -2758,8 +2766,8 @@
+ (use (reg:HI REG_X))
+ (clobber (reg:HI REG_Z))]
+ ""
+- "ldi r30,pm_lo8(1f)
+- ldi r31,pm_hi8(1f)
++ "ldi r30,lo8(gs(1f))
++ ldi r31,hi8(gs(1f))
+ %~jmp __prologue_saves__+((18 - %0) * 2)
+ 1:"
+ [(set_attr_alternative "length"
+Only in ./gcc/config/avr: avr.md.orig
+diff -ur ../gcc-4.3.4.orig/gcc/config/avr/libgcc.S ./gcc/config/avr/libgcc.S
+--- ../gcc-4.3.4.orig/gcc/config/avr/libgcc.S 2008-01-19 13:15:02.000000000 +0100
++++ ./gcc/config/avr/libgcc.S 2009-10-02 14:27:56.000000000 +0200
+@@ -594,7 +594,12 @@
+ out __SP_H__,r29
+ out __SREG__,__tmp_reg__
+ out __SP_L__,r28
++#if defined (__AVR_HAVE_EIJMP_EICALL__)
++ eijmp
++#else
+ ijmp
++#endif
++
+ .endfunc
+ #endif /* defined (L_prologue) */
+
+@@ -674,13 +679,22 @@
+ lpm __tmp_reg__, Z+
+ lpm r31, Z
+ mov r30, __tmp_reg__
++
++#if defined (__AVR_HAVE_EIJMP_EICALL__)
++ eijmp
++#else
+ ijmp
++#endif
++
+ #else
+ lpm
+ adiw r30, 1
+ push r0
+ lpm
+ push r0
++#if defined (__AVR_HAVE_EIJMP_EICALL__)
++ push __zero_reg__
++#endif
+ ret
+ #endif
+ .endfunc
+diff -ur ../gcc-4.3.4.orig/gcc/config/avr/t-avr ./gcc/config/avr/t-avr
+--- ../gcc-4.3.4.orig/gcc/config/avr/t-avr 2008-01-23 16:07:09.000000000 +0100
++++ ./gcc/config/avr/t-avr 2009-10-02 14:27:56.000000000 +0200
+@@ -37,8 +37,8 @@
+
+ FPBIT = fp-bit.c
+
+-MULTILIB_OPTIONS = mmcu=avr2/mmcu=avr25/mmcu=avr3/mmcu=avr31/mmcu=avr35/mmcu=avr4/mmcu=avr5/mmcu=avr51
+-MULTILIB_DIRNAMES = avr2 avr25 avr3 avr31 avr35 avr4 avr5 avr51
++MULTILIB_OPTIONS = mmcu=avr2/mmcu=avr25/mmcu=avr3/mmcu=avr31/mmcu=avr35/mmcu=avr4/mmcu=avr5/mmcu=avr51/mmcu=avr6
++MULTILIB_DIRNAMES = avr2 avr25 avr3 avr31 avr35 avr4 avr5 avr51 avr6
+
+ # The many avr2 matches are not listed here - this is the default.
+ MULTILIB_MATCHES = \
+@@ -123,7 +123,9 @@
+ mmcu?avr51=mmcu?atmega1284p \
+ mmcu?avr51=mmcu?at90can128 \
+ mmcu?avr51=mmcu?at90usb1286 \
+- mmcu?avr51=mmcu?at90usb1287
++ mmcu?avr51=mmcu?at90usb1287 \
++ mmcu?avr6=mmcu?atmega2560 \
++ mmcu?avr6=mmcu?atmega2561
+
+ MULTILIB_EXCEPTIONS =
+
diff --git a/devel/avr-gcc/files/patch-bug11259 b/devel/avr-gcc/files/patch-bug11259
index 9f98ee5437fc..aaf7a37c59b3 100644
--- a/devel/avr-gcc/files/patch-bug11259
+++ b/devel/avr-gcc/files/patch-bug11259
@@ -1,16 +1,7 @@
-Index: gcc/config/avr/avr.md
-===================================================================
---- gcc/config/avr/avr.md (revision 129892)
-+++ gcc/config/avr/avr.md (working copy)
-@@ -45,21 +45,22 @@
- (REG_SP 32)
- (TMP_REGNO 0) ; temporary register r0
- (ZERO_REGNO 1) ; zero register r1
-
- (SREG_ADDR 0x5F)
- (RAMPZ_ADDR 0x5B)
-
- (UNSPEC_STRLEN 0)
+diff -ur ../gcc-4.3.4.orig/gcc/config/avr/avr.md ./gcc/config/avr/avr.md
+--- ../gcc-4.3.4.orig/gcc/config/avr/avr.md 2009-10-02 15:08:58.000000000 +0200
++++ ./gcc/config/avr/avr.md 2009-10-02 15:09:26.000000000 +0200
+@@ -54,6 +54,7 @@
(UNSPEC_INDEX_JMP 1)
(UNSPEC_SEI 2)
(UNSPEC_CLI 3)
@@ -18,23 +9,9 @@ Index: gcc/config/avr/avr.md
(UNSPECV_PROLOGUE_SAVES 0)
(UNSPECV_EPILOGUE_RESTORES 1)])
-
- (include "predicates.md")
- (include "constraints.md")
-
- ;; Condition code settings.
- (define_attr "cc" "none,set_czn,set_zn,set_n,compare,clobber"
- (const_string "none"))
-@@ -1185,20 +1186,33 @@
- return (AS2 (andi, %A0,lo8(%2)) CR_TAB
- AS2 (andi, %B0,hi8(%2)) CR_TAB
- AS2 (andi, %C0,hlo8(%2)) CR_TAB
- AS2 (andi, %D0,hhi8(%2)));
- }
- return \"bug\";
- }"
+@@ -1183,6 +1184,19 @@
[(set_attr "length" "4,4")
- (set_attr "cc" "set_n,set_n")])
+ (set_attr "cc" "set_n,clobber")])
+(define_peephole2 ; andi
+ [(set (match_operand:QI 0 "d_register_operand" "")
@@ -52,21 +29,7 @@ Index: gcc/config/avr/avr.md
;;|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
;; ior
- (define_insn "iorqi3"
- [(set (match_operand:QI 0 "register_operand" "=r,d")
- (ior:QI (match_operand:QI 1 "register_operand" "%0,0")
- (match_operand:QI 2 "nonmemory_operand" "r,i")))]
- ""
- "@
- or %0,%2
-@@ -1313,24 +1327,71 @@
- (xor:SI (match_operand:SI 1 "register_operand" "%0")
- (match_operand:SI 2 "register_operand" "r")))]
- ""
- "eor %0,%2
- eor %B0,%B2
- eor %C0,%C2
- eor %D0,%D2"
+@@ -1311,10 +1325,57 @@
[(set_attr "length" "4")
(set_attr "cc" "set_n")])
@@ -125,21 +88,7 @@ Index: gcc/config/avr/avr.md
[(set (match_operand:QI 0 "register_operand" "=r,r,r,r,!d,r,r")
(ashift:QI (match_operand:QI 1 "register_operand" "0,0,0,0,0,0,0")
(match_operand:QI 2 "general_operand" "r,L,P,K,n,n,Qm")))]
- ""
- "* return ashlqi3_out (insn, operands, NULL);"
- [(set_attr "length" "5,0,1,2,4,6,9")
- (set_attr "cc" "clobber,none,set_czn,set_czn,set_czn,set_czn,clobber")])
-
- (define_insn "ashlhi3"
- [(set (match_operand:HI 0 "register_operand" "=r,r,r,r,r,r,r")
-@@ -1346,20 +1407,61 @@
- (ashift:SI (match_operand:SI 1 "register_operand" "0,0,0,r,0,0,0")
- (match_operand:QI 2 "general_operand" "r,L,P,O,K,n,Qm")))]
- ""
- "* return ashlsi3_out (insn, operands, NULL);"
- [(set_attr "length" "8,0,4,4,8,10,12")
- (set_attr "cc" "clobber,none,set_n,clobber,set_n,clobber,clobber")])
-
+@@ -1344,6 +1405,47 @@
;; Optimize if a scratch register from LD_REGS happens to be available.
(define_peephole2
@@ -187,21 +136,7 @@ Index: gcc/config/avr/avr.md
[(match_scratch:QI 3 "d")
(set (match_operand:HI 0 "register_operand" "")
(ashift:HI (match_operand:HI 1 "register_operand" "")
- (match_operand:QI 2 "const_int_operand" "")))]
- ""
- [(parallel [(set (match_dup 0) (ashift:HI (match_dup 1) (match_dup 2)))
- (clobber (match_dup 3))])]
- "if (!avr_peep2_scratch_safe (operands[3]))
- FAIL;")
-
-@@ -1464,21 +1566,63 @@
- (match_operand:QI 2 "const_int_operand" "L,P,O,n")))
- (clobber (match_scratch:QI 3 "=X,X,X,&d"))]
- "reload_completed"
- "* return ashrsi3_out (insn, operands, NULL);"
- [(set_attr "length" "0,4,4,10")
- (set_attr "cc" "none,clobber,set_n,clobber")])
-
+@@ -1462,7 +1564,49 @@
;; >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >>
;; logical shift right
@@ -252,21 +187,7 @@ Index: gcc/config/avr/avr.md
[(set (match_operand:QI 0 "register_operand" "=r,r,r,r,!d,r,r")
(lshiftrt:QI (match_operand:QI 1 "register_operand" "0,0,0,0,0,0,0")
(match_operand:QI 2 "general_operand" "r,L,P,K,n,n,Qm")))]
- ""
- "* return lshrqi3_out (insn, operands, NULL);"
- [(set_attr "length" "5,0,1,2,4,6,9")
- (set_attr "cc" "clobber,none,set_czn,set_czn,set_czn,set_czn,clobber")])
-
- (define_insn "lshrhi3"
- [(set (match_operand:HI 0 "register_operand" "=r,r,r,r,r,r,r")
-@@ -1494,20 +1638,61 @@
- (lshiftrt:SI (match_operand:SI 1 "register_operand" "0,0,0,r,0,0,0")
- (match_operand:QI 2 "general_operand" "r,L,P,O,K,n,Qm")))]
- ""
- "* return lshrsi3_out (insn, operands, NULL);"
- [(set_attr "length" "8,0,4,4,8,10,12")
- (set_attr "cc" "clobber,none,clobber,clobber,clobber,clobber,clobber")])
-
+@@ -1492,6 +1636,47 @@
;; Optimize if a scratch register from LD_REGS happens to be available.
(define_peephole2
@@ -314,10 +235,4 @@ Index: gcc/config/avr/avr.md
[(match_scratch:QI 3 "d")
(set (match_operand:HI 0 "register_operand" "")
(lshiftrt:HI (match_operand:HI 1 "register_operand" "")
- (match_operand:QI 2 "const_int_operand" "")))]
- ""
- [(parallel [(set (match_dup 0) (lshiftrt:HI (match_dup 1) (match_dup 2)))
- (clobber (match_dup 3))])]
- "if (!avr_peep2_scratch_safe (operands[3]))
- FAIL;")
-
+Only in ./gcc/config/avr: avr.md.orig
diff --git a/devel/avr-gcc/files/patch-bug18145 b/devel/avr-gcc/files/patch-bug18145
new file mode 100644
index 000000000000..3fe6a377030e
--- /dev/null
+++ b/devel/avr-gcc/files/patch-bug18145
@@ -0,0 +1,186 @@
+--- ./gcc/config/avr/avr.c.orig 2010-03-05 15:10:10.000000000 +0100
++++ ./gcc/config/avr/avr.c 2010-03-05 15:20:53.000000000 +0100
+@@ -72,6 +72,12 @@
+ static void avr_insert_attributes (tree, tree *);
+ static void avr_asm_init_sections (void);
+ static unsigned int avr_section_type_flags (tree, const char *, int);
++static void avr_asm_named_section (const char *name, unsigned int flags, tree decl);
++/* Track if code will use .bss and/or .data */
++static int avr_need_clear_bss_p = 0;
++static int avr_need_copy_data_p = 0;
++static void avr_output_data_section_asm_op (const void*);
++static void avr_output_bss_section_asm_op (const void*);
+
+ static void avr_reorg (void);
+ static void avr_asm_out_ctor (rtx, int);
+@@ -4782,6 +4788,54 @@
+ fprintf (asm_out_file, "\t.p2align 1\n");
+ }
+
++/* ASM_OUTPUT_COMMON */
++/* Track need of __do_clear_bss */
++
++void
++avr_asm_output_common (FILE *stream, const char *name,
++ unsigned HOST_WIDE_INT size,
++ unsigned HOST_WIDE_INT rounded ATTRIBUTE_UNUSED)
++{
++ avr_need_clear_bss_p = 1;
++ fputs ("\t.comm ", stream);
++ assemble_name (stream, name);
++ fprintf (stream, ",%lu,1\n", (unsigned long) size);
++}
++
++/* ASM_OUTPUT_LOCAL */
++/* Track need of __do_clear_bss */
++
++void
++avr_asm_output_local (FILE *stream, const char *name,
++ unsigned HOST_WIDE_INT size,
++ unsigned HOST_WIDE_INT rounded ATTRIBUTE_UNUSED)
++{
++ avr_need_clear_bss_p = 1;
++ fputs ("\t.lcomm ", stream);
++ assemble_name (stream, name);
++ fprintf (stream, ",%d\n", (int) size);
++}
++
++/* Unnamed section callback to track need of __do_copy_data */
++
++static void
++avr_output_data_section_asm_op (const void *data)
++{
++ avr_need_copy_data_p = 1;
++ /* Dispatch to default */
++ output_section_asm_op (data);
++}
++
++/* Unnamed section callback to track need of __do_clear_bss */
++
++static void
++avr_output_bss_section_asm_op (const void *data)
++{
++ avr_need_clear_bss_p = 1;
++ /* Dispatch to default */
++ output_section_asm_op (data);
++}
++
+ /* Implement TARGET_ASM_INIT_SECTIONS. */
+
+ static void
+@@ -4791,6 +4845,27 @@
+ avr_output_progmem_section_asm_op,
+ NULL);
+ readonly_data_section = data_section;
++
++ data_section->unnamed.callback = avr_output_data_section_asm_op;
++ bss_section->unnamed.callback = avr_output_bss_section_asm_op;
++}
++
++/* TARGET_ASM_NAMED_SECTION */
++/* Track need of __do_clear_bss, __do_copy_data for named sections */
++
++static void
++avr_asm_named_section (const char *name, unsigned int flags, tree decl)
++{
++ if (!avr_need_copy_data_p)
++ avr_need_copy_data_p =
++ (0 == strncmp (name, ".data", 5)
++ || 0 == strncmp (name, ".rodata", 7)
++ || 0 == strncmp (name, ".gnu.linkonce.", 14));
++
++ if (!avr_need_clear_bss_p)
++ avr_need_clear_bss_p = (0 == strncmp (name, ".bss", 4));
++
++ default_elf_asm_named_section (name, flags, decl);
+ }
+
+ static unsigned int
+@@ -4829,12 +4904,6 @@
+
+ fputs ("__tmp_reg__ = 0\n"
+ "__zero_reg__ = 1\n", asm_out_file);
+-
+- /* FIXME: output these only if there is anything in the .data / .bss
+- sections - some code size could be saved by not linking in the
+- initialization code from libgcc if one or both sections are empty. */
+- fputs ("\t.global __do_copy_data\n", asm_out_file);
+- fputs ("\t.global __do_clear_bss\n", asm_out_file);
+ }
+
+ /* Outputs to the stdio stream FILE some
+@@ -4843,6 +4912,16 @@
+ static void
+ avr_file_end (void)
+ {
++ /* Output these only if there is anything in the
++ .data* / .rodata* / .gnu.linkonce.* resp. .bss*
++ input section(s) - some code size can be saved by not
++ linking in the initialization code from libgcc if resp.
++ sections are empty. */
++ if (avr_need_copy_data_p)
++ fputs (".global __do_copy_data\n", asm_out_file);
++
++ if (avr_need_clear_bss_p)
++ fputs (".global __do_clear_bss\n", asm_out_file);
+ }
+
+ /* Choose the order in which to allocate hard registers for
+--- ./gcc/config/avr/avr.h.orig 2010-03-05 15:10:10.000000000 +0100
++++ ./gcc/config/avr/avr.h 2010-03-05 15:20:53.000000000 +0100
+@@ -533,29 +533,21 @@
+ #define ASM_APP_OFF "/* #NOAPP */\n"
+
+ /* Switch into a generic section. */
+-#define TARGET_ASM_NAMED_SECTION default_elf_asm_named_section
++#define TARGET_ASM_NAMED_SECTION avr_asm_named_section
+ #define TARGET_ASM_INIT_SECTIONS avr_asm_init_sections
+
+ #define ASM_OUTPUT_ASCII(FILE, P, SIZE) gas_output_ascii (FILE,P,SIZE)
+
+ #define IS_ASM_LOGICAL_LINE_SEPARATOR(C, STR) ((C) == '\n' || ((C) == '$'))
+
+-#define ASM_OUTPUT_COMMON(STREAM, NAME, SIZE, ROUNDED) \
+-do { \
+- fputs ("\t.comm ", (STREAM)); \
+- assemble_name ((STREAM), (NAME)); \
+- fprintf ((STREAM), ",%lu,1\n", (unsigned long)(SIZE)); \
+-} while (0)
++#define ASM_OUTPUT_COMMON(STREAM, NAME, SIZE, ROUNDED) \
++ avr_asm_output_common (STREAM, NAME, SIZE, ROUNDED)
+
+-#define ASM_OUTPUT_BSS(FILE, DECL, NAME, SIZE, ROUNDED) \
+- asm_output_bss ((FILE), (DECL), (NAME), (SIZE), (ROUNDED))
++#define ASM_OUTPUT_BSS(FILE, DECL, NAME, SIZE, ROUNDED) \
++ asm_output_bss ((FILE), (DECL), (NAME), (SIZE), (ROUNDED))
+
+-#define ASM_OUTPUT_LOCAL(STREAM, NAME, SIZE, ROUNDED) \
+-do { \
+- fputs ("\t.lcomm ", (STREAM)); \
+- assemble_name ((STREAM), (NAME)); \
+- fprintf ((STREAM), ",%d\n", (int)(SIZE)); \
+-} while (0)
++#define ASM_OUTPUT_LOCAL(STREAM, NAME, SIZE, ROUNDED) \
++ avr_asm_output_local (STREAM, NAME, SIZE, ROUNDED)
+
+ #undef TYPE_ASM_OP
+ #undef SIZE_ASM_OP
+--- ./gcc/config/avr/avr-protos.h.orig 2008-06-15 23:32:29.000000000 +0200
++++ ./gcc/config/avr/avr-protos.h 2010-03-05 15:20:53.000000000 +0100
+@@ -38,6 +38,8 @@
+ extern void gas_output_limited_string (FILE *file, const char *str);
+ extern void gas_output_ascii (FILE *file, const char *str, size_t length);
+ extern int avr_hard_regno_rename_ok (unsigned int, unsigned int);
++extern void avr_asm_output_common (FILE *stream, const char *name, unsigned HOST_WIDE_INT size, unsigned HOST_WIDE_INT rounded);
++extern void avr_asm_output_local (FILE *stream, const char *name, unsigned HOST_WIDE_INT size, unsigned HOST_WIDE_INT rounded);
+
+ #ifdef TREE_CODE
+ extern void asm_output_external (FILE *file, tree decl, char *name);
+@@ -123,6 +125,7 @@
+ extern int compare_eq_p (rtx insn);
+ extern void out_shift_with_cnt (const char *template, rtx insn,
+ rtx operands[], int *len, int t_len);
++extern rtx avr_return_addr_rtx (int count, rtx tem);
+ extern int avr_io_address_p (rtx x, int size);
+ extern int avr_peep2_scratch_safe (rtx reg_rtx);
+ #endif /* RTX_CODE */
diff --git a/devel/avr-gcc/files/patch-bug19636-24894-31644-31786 b/devel/avr-gcc/files/patch-bug19636-24894-31644-31786
index c940107ff673..f22597f1d1a6 100644
--- a/devel/avr-gcc/files/patch-bug19636-24894-31644-31786
+++ b/devel/avr-gcc/files/patch-bug19636-24894-31644-31786
@@ -1,14 +1,19 @@
-Fix for GCC bugs:
-#19636
-#24894
-#31644
-#31786
-
-Index: avr.c
-===================================================================
---- gcc/config/avr/avr.c (revision 132380)
-+++ gcc/config/avr/avr.c (working copy)
-@@ -976,6 +976,8 @@
+--- gcc/config/avr/avr.h.orig 2010-03-05 15:20:53.000000000 +0100
++++ gcc/config/avr/avr.h 2010-03-05 15:22:53.000000000 +0100
+@@ -470,10 +470,6 @@
+ OPNUM, TYPE); \
+ goto WIN; \
+ } \
+- push_reload (XEXP (X, 0), NULL_RTX, &XEXP (X, 0), NULL, \
+- BASE_POINTER_REGS, GET_MODE (X), VOIDmode, 0, 0, \
+- OPNUM, TYPE); \
+- goto WIN; \
+ } \
+ else if (! (frame_pointer_needed && XEXP (X,0) == frame_pointer_rtx)) \
+ { \
+--- gcc/config/avr/avr.c.orig 2010-03-05 15:20:53.000000000 +0100
++++ gcc/config/avr/avr.c 2010-03-05 15:22:53.000000000 +0100
+@@ -993,6 +993,8 @@
true_regnum (XEXP (x, 0)));
debug_rtx (x);
}
@@ -17,7 +22,7 @@ Index: avr.c
if (REG_P (x) && (strict ? REG_OK_FOR_BASE_STRICT_P (x)
: REG_OK_FOR_BASE_NOSTRICT_P (x)))
r = POINTER_REGS;
-@@ -990,6 +992,7 @@
+@@ -1007,6 +1009,7 @@
if (fit)
{
if (! strict
@@ -25,19 +30,3 @@ Index: avr.c
|| REGNO (XEXP (x,0)) == REG_Y
|| REGNO (XEXP (x,0)) == REG_Z)
r = BASE_POINTER_REGS;
-Index: avr.h
-===================================================================
---- gcc/config/avr/avr.h (revision 132380)
-+++ gcc/config/avr/avr.h (working copy)
-@@ -483,10 +483,6 @@
- OPNUM, TYPE); \
- goto WIN; \
- } \
-- push_reload (XEXP (X, 0), NULL_RTX, &XEXP (X, 0), NULL, \
-- BASE_POINTER_REGS, GET_MODE (X), VOIDmode, 0, 0, \
-- OPNUM, TYPE); \
-- goto WIN; \
- } \
- else if (! (frame_pointer_needed && XEXP (X,0) == frame_pointer_rtx)) \
- { \
-
diff --git a/devel/avr-gcc/files/patch-bug35013 b/devel/avr-gcc/files/patch-bug35013
index 595d92974255..db8e09e616cf 100644
--- a/devel/avr-gcc/files/patch-bug35013
+++ b/devel/avr-gcc/files/patch-bug35013
@@ -1,10 +1,6 @@
-Patch to fix GCC bug #35013.
-
-Index: avr-protos.h
-===================================================================
---- gcc/config/avr/avr-protos.h (revision 132369)
-+++ gcc/config/avr/avr-protos.h (working copy)
-@@ -111,6 +111,7 @@
+--- ./gcc/config/avr/avr-protos.h.orig 2010-03-05 15:20:53.000000000 +0100
++++ ./gcc/config/avr/avr-protos.h 2010-03-05 15:24:52.000000000 +0100
+@@ -114,6 +114,7 @@
extern int _reg_unused_after (rtx insn, rtx reg);
extern int avr_jump_mode (rtx x, rtx insn);
extern int byte_immediate_operand (rtx op, enum machine_mode mode);
@@ -12,11 +8,9 @@ Index: avr-protos.h
extern int test_hard_reg_class (enum reg_class class, rtx x);
extern int jump_over_one_insn_p (rtx insn, rtx dest);
-Index: avr.c
-===================================================================
---- gcc/config/avr/avr.c (revision 132366)
-+++ gcc/config/avr/avr.c (working copy)
-@@ -1116,8 +1116,7 @@
+--- ./gcc/config/avr/avr.c.orig 2010-03-05 15:22:53.000000000 +0100
++++ ./gcc/config/avr/avr.c 2010-03-05 15:24:52.000000000 +0100
+@@ -1136,8 +1136,7 @@
default:
if (CONSTANT_ADDRESS_P (addr)
@@ -24,9 +18,9 @@ Index: avr.c
- || GET_CODE (addr) == LABEL_REF))
+ && text_segment_operand (addr, VOIDmode))
{
- fprintf (file, "pm(");
+ fprintf (file, "gs(");
output_addr_const (file,addr);
-@@ -1428,6 +1427,26 @@
+@@ -1453,6 +1452,26 @@
&& INTVAL (op) <= 0xff && INTVAL (op) >= 0);
}
@@ -53,7 +47,7 @@ Index: avr.c
/* Output all insn addresses and their sizes into the assembly language
output file. This is helpful for debugging whether the length attributes
in the md file are correct.
-@@ -4465,8 +4484,7 @@
+@@ -4490,8 +4509,7 @@
avr_assemble_integer (rtx x, unsigned int size, int aligned_p)
{
if (size == POINTER_SIZE / BITS_PER_UNIT && aligned_p
@@ -61,5 +55,5 @@ Index: avr.c
- || GET_CODE (x) == LABEL_REF))
+ && text_segment_operand (x, VOIDmode) )
{
- fputs ("\t.word\tpm(", asm_out_file);
+ fputs ("\t.word\tgs(", asm_out_file);
output_addr_const (asm_out_file, x);
diff --git a/devel/avr-gcc/files/patch-builtins b/devel/avr-gcc/files/patch-builtins
new file mode 100644
index 000000000000..c5f6fa6311d2
--- /dev/null
+++ b/devel/avr-gcc/files/patch-builtins
@@ -0,0 +1,581 @@
+--- ./gcc/config/avr/predicates.md.orig 2007-08-02 12:49:31.000000000 +0200
++++ ./gcc/config/avr/predicates.md 2010-03-05 15:25:53.000000000 +0100
+@@ -27,6 +27,11 @@
+ (and (match_code "reg")
+ (match_test "REGNO (op) >= 16 && REGNO (op) <= 31")))
+
++;; Registers from r16 to 24.
++(define_predicate "a_register_operand"
++ (and (match_code "reg")
++ (match_test "REGNO (op) >= 16 && REGNO (op) <= 24")))
++
+ (define_predicate "even_register_operand"
+ (and (match_code "reg")
+ (and (match_test "REGNO (op) <= 31")
+--- ./gcc/config/avr/avr.md.orig 2010-03-05 15:20:25.000000000 +0100
++++ ./gcc/config/avr/avr.md 2010-03-05 15:25:53.000000000 +0100
+@@ -52,12 +52,26 @@
+
+ (UNSPEC_STRLEN 0)
+ (UNSPEC_INDEX_JMP 1)
+- (UNSPEC_SEI 2)
+- (UNSPEC_CLI 3)
+- (UNSPEC_SWAP 4)
+-
++ (UNSPEC_SWAP 2)
++ (UNSPEC_FMUL 3)
++ (UNSPEC_FMULS 4)
++ (UNSPEC_FMULSU 5)
++
+ (UNSPECV_PROLOGUE_SAVES 0)
+- (UNSPECV_EPILOGUE_RESTORES 1)])
++ (UNSPECV_EPILOGUE_RESTORES 1)
++ (UNSPECV_SEI 2)
++ (UNSPECV_CLI 3)
++ (UNSPECV_NOP 4)
++ (UNSPECV_NOP2 5)
++ (UNSPECV_SLEEP 6)
++ (UNSPECV_WDR 7)
++
++ (UNSPECV_DELAY_CYCLES 100)
++ (UNSPECV_DELAY_CYCLES_1 101)
++ (UNSPECV_DELAY_CYCLES_2 102)
++ (UNSPECV_DELAY_CYCLES_3 103)
++ (UNSPECV_DELAY_CYCLES_4 104)])
++
+
+ (include "predicates.md")
+ (include "constraints.md")
+@@ -2541,13 +2555,6 @@
+ (const_int 1))
+ (const_int 3)])])
+
+-(define_insn "nop"
+- [(const_int 0)]
+- ""
+- "nop"
+- [(set_attr "cc" "none")
+- (set_attr "length" "1")])
+-
+ ; indirect jump
+ (define_insn "indirect_jump"
+ [(set (pc) (match_operand:HI 0 "register_operand" "!z,*r"))]
+@@ -2925,7 +2932,7 @@
+
+ ;; Enable Interrupts
+ (define_insn "enable_interrupt"
+- [(unspec [(const_int 0)] UNSPEC_SEI)]
++ [(unspec_volatile [(const_int 0)] UNSPECV_SEI)]
+ ""
+ "sei"
+ [(set_attr "length" "1")
+@@ -2934,7 +2941,7 @@
+
+ ;; Disable Interrupts
+ (define_insn "disable_interrupt"
+- [(unspec [(const_int 0)] UNSPEC_CLI)]
++ [(unspec_volatile [(const_int 0)] UNSPECV_CLI)]
+ ""
+ "cli"
+ [(set_attr "length" "1")
+@@ -3034,3 +3041,219 @@
+ expand_epilogue ();
+ DONE;
+ }")
++
++;;delay_cycles_delay_cycles_delay_cycles_delay_cycles_delay_cycles_delay
++;; delay_cycles
++
++(define_expand "delay_cycles"
++ [(unspec_volatile [(match_operand:SI 0 "const_int_operand" "i")]
++ UNSPECV_DELAY_CYCLES)]
++ ""
++ "
++ rtx loop_reg;
++ unsigned int cycles = INTVAL (operands[0]);
++ if (IN_RANGE(cycles, 83886082, 0xFFFFFFFF))
++ {
++ unsigned int loop_count = ((cycles - 9) / 6) + 1;
++ unsigned int cycles_used = (((loop_count - 1) * 6) + 9);
++ emit_insn (gen_delay_cycles_4 (gen_int_mode (loop_count, SImode)));
++ cycles -= cycles_used;
++ }
++ if (IN_RANGE(cycles, 262145, 83886081))
++ {
++ unsigned int loop_count = ((cycles - 7) / 5) + 1;
++ if (loop_count > 0xFFFFFF)
++ loop_count = 0xFFFFFF;
++ unsigned int cycles_used = (((loop_count - 1) * 5) + 7);
++ emit_insn (gen_delay_cycles_3 (gen_int_mode (loop_count, SImode)));
++ cycles -= cycles_used;
++ }
++ if (IN_RANGE(cycles, 768, 262144))
++ {
++ unsigned int loop_count = ((cycles - 5) / 4) + 1;
++ if (loop_count > 0xFFFF)
++ loop_count = 0xFFFF;
++ unsigned int cycles_used = (((loop_count - 1) * 4) + 5);
++ emit_insn (gen_delay_cycles_2 (gen_int_mode (loop_count, HImode)));
++ cycles -= cycles_used;
++ }
++ if (IN_RANGE(cycles, 6, 767))
++ {
++ unsigned int loop_count = (cycles/ 3);
++ if (loop_count > 255)
++ loop_count = 255;
++ unsigned int cycles_used = (loop_count * 3);
++ emit_insn (gen_delay_cycles_1 (gen_int_mode (loop_count, QImode)));
++ cycles -= cycles_used;
++ }
++ while (cycles >= 2)
++ {
++ emit_insn (gen_nop2 ());
++ cycles -= 2;
++ }
++ if (cycles == 1)
++ {
++ emit_insn (gen_nop ());
++ cycles--;
++ }
++ DONE;
++ ")
++
++(define_insn "delay_cycles_1"
++[(unspec_volatile [(const_int 0)] UNSPECV_DELAY_CYCLES_1)
++ (match_operand:QI 0 "immediate_operand" "")
++ (clobber (match_scratch:QI 1 "=&d"))]
++ ""
++ " ldi %1,lo8(%0)
++ 1:dec %1
++ brne 1b"
++ [(set_attr "length" "3")
++ (set_attr "cc" "clobber")])
++
++(define_insn "delay_cycles_2"
++ [(unspec_volatile [(const_int 0)] UNSPECV_DELAY_CYCLES_2)
++ (match_operand:HI 0 "immediate_operand" "")
++ (clobber (match_scratch:HI 1 "=&w"))]
++ ""
++ " ldi %A1,lo8(%0)
++ ldi %B1,hi8(%0)
++ 1:sbiw %A1,1
++ brne 1b"
++ [(set_attr "length" "4")
++ (set_attr "cc" "clobber")])
++
++(define_insn "delay_cycles_3"
++ [(unspec_volatile [(const_int 0)] UNSPECV_DELAY_CYCLES_3)
++ (match_operand:SI 0 "immediate_operand" "")
++ (clobber (match_scratch:SI 1 "=&d"))]
++ ""
++ " ldi %A1,lo8(%0)
++ ldi %B1,hi8(%0)
++ ldi %C1,hlo8(%0)
++ 1:subi %A1,1
++ sbci %B1,0
++ sbci %C1,0
++ brne 1b"
++ [(set_attr "length" "7")
++ (set_attr "cc" "clobber")])
++
++(define_insn "delay_cycles_4"
++ [(unspec_volatile [(const_int 0)] UNSPECV_DELAY_CYCLES_4)
++ (match_operand:SI 0 "immediate_operand" "")
++ (clobber (match_scratch:SI 1 "=&d"))]
++ ""
++ " ldi %A1,lo8(%0)
++ ldi %B1,hi8(%0)
++ ldi %C1,hlo8(%0)
++ ldi %D1,hhi8(%0)
++ 1:subi %A1,1
++ sbci %B1,0
++ sbci %C1,0
++ sbci %D1,0
++ brne 1b"
++ [(set_attr "length" "9")
++ (set_attr "cc" "clobber")])
++
++;; CPU instructions
++
++;; NOP
++(define_insn "nop"
++ [(unspec_volatile [(const_int 0)] UNSPECV_NOP)]
++ ""
++ "nop"
++ [(set_attr "length" "1")
++ (set_attr "cc" "none")])
++
++;; NOP2
++(define_insn "nop2"
++ [(unspec_volatile [(const_int 0)] UNSPECV_NOP2)]
++ ""
++ "rjmp ."
++ [(set_attr "length" "1")
++ (set_attr "cc" "none")])
++
++;; SEI, Enable Interrupts
++;(define_insn "sei"
++; [(unspec_volatile [(const_int 0)] UNSPECV_SEI)]
++; ""
++; "sei"
++; [(set_attr "length" "1")
++; (set_attr "cc" "none")
++; ])
++
++;; CLI, Disable Interrupts
++;(define_insn "cli"
++; [(unspec_volatile [(const_int 0)] UNSPECV_CLI)]
++; ""
++; "cli"
++; [(set_attr "length" "1")
++; (set_attr "cc" "none")
++; ])
++
++;; SLEEP
++(define_insn "sleep"
++ [(unspec_volatile [(const_int 0)] UNSPECV_SLEEP)]
++ ""
++ "sleep"
++ [(set_attr "length" "1")
++ (set_attr "cc" "none")
++ ])
++
++;; WDR
++(define_insn "wdr"
++ [(unspec_volatile [(const_int 0)] UNSPECV_WDR)]
++ ""
++ "wdr"
++ [(set_attr "length" "1")
++ (set_attr "cc" "none")
++ ])
++
++;; SWAP
++(define_insn "swap"
++ [(set (match_operand:QI 0 "register_operand" "=r")
++ (unspec:QI [(match_operand:QI 1 "register_operand" "0")]
++ UNSPEC_SWAP))]
++ ""
++ "swap %0"
++ [(set_attr "length" "1")
++ (set_attr "cc" "none")])
++
++;; FMUL
++(define_insn "fmul"
++ [(set (match_operand:HI 0 "a_register_operand" "=r")
++ (unspec:HI [(match_operand:QI 1 "a_register_operand" "r")
++ (match_operand:QI 2 "a_register_operand" "r")]
++ UNSPEC_FMUL))]
++ "AVR_HAVE_MUL"
++ "fmul %1,%2
++ movw %0,r0
++ clr r1"
++ [(set_attr "length" "3")
++ (set_attr "cc" "clobber")])
++
++;; FMULS
++(define_insn "fmuls"
++ [(set (match_operand:HI 0 "a_register_operand" "=r")
++ (unspec:HI [(match_operand:QI 1 "a_register_operand" "r")
++ (match_operand:QI 2 "a_register_operand" "r")]
++ UNSPEC_FMULS))]
++ "AVR_HAVE_MUL"
++ "fmuls %1,%2
++ movw %0,r0
++ clr r1"
++ [(set_attr "length" "3")
++ (set_attr "cc" "clobber")])
++
++;; FMULSU
++(define_insn "fmulsu"
++ [(set (match_operand:HI 0 "a_register_operand" "=r")
++ (unspec:HI [(match_operand:QI 1 "a_register_operand" "r")
++ (match_operand:QI 2 "a_register_operand" "r")]
++ UNSPEC_FMULSU))]
++ "AVR_HAVE_MUL"
++ "fmulsu %1,%2
++ movw %0,r0
++ clr r1"
++ [(set_attr "length" "3")
++ (set_attr "cc" "clobber")])
++
+--- ./gcc/config/avr/avr.c.orig 2010-03-05 15:24:52.000000000 +0100
++++ ./gcc/config/avr/avr.c 2010-03-05 15:25:53.000000000 +0100
+@@ -30,6 +30,7 @@
+ #include "insn-config.h"
+ #include "conditions.h"
+ #include "insn-attr.h"
++#include "insn-codes.h"
+ #include "flags.h"
+ #include "reload.h"
+ #include "tree.h"
+@@ -39,7 +40,9 @@
+ #include "obstack.h"
+ #include "function.h"
+ #include "recog.h"
++#include "optabs.h"
+ #include "ggc.h"
++#include "langhooks.h"
+ #include "tm_p.h"
+ #include "target.h"
+ #include "target-def.h"
+@@ -87,6 +90,9 @@
+ static int avr_address_cost (rtx);
+ static bool avr_return_in_memory (const_tree, const_tree);
+ static struct machine_function * avr_init_machine_status (void);
++static void avr_init_builtins (void);
++static rtx avr_expand_builtin (tree, rtx, rtx, enum machine_mode, int);
++
+ /* Allocate registers from r25 to r8 for parameters for function calls. */
+ #define FIRST_CUM_REG 26
+
+@@ -340,6 +346,12 @@
+ #undef TARGET_STRICT_ARGUMENT_NAMING
+ #define TARGET_STRICT_ARGUMENT_NAMING hook_bool_CUMULATIVE_ARGS_true
+
++#undef TARGET_INIT_BUILTINS
++#define TARGET_INIT_BUILTINS avr_init_builtins
++
++#undef TARGET_EXPAND_BUILTIN
++#define TARGET_EXPAND_BUILTIN avr_expand_builtin
++
+ struct gcc_target targetm = TARGET_INITIALIZER;
+
+ void
+@@ -6079,4 +6091,237 @@
+ return false;
+ }
+
++/* Codes for all the AVR builtins. */
++
++enum avr_builtins
++{
++ AVR_BUILTIN_SEI,
++ AVR_BUILTIN_CLI,
++ AVR_BUILTIN_WDR,
++ AVR_BUILTIN_SLEEP,
++ AVR_BUILTIN_SWAP,
++ AVR_BUILTIN_FMUL,
++ AVR_BUILTIN_FMULS,
++ AVR_BUILTIN_FMULSU,
++ AVR_BUILTIN_DELAY_CYCLES
++};
++
++#define def_builtin(NAME, TYPE, CODE) \
++do { \
++ add_builtin_function ((NAME), (TYPE), (CODE), BUILT_IN_MD, \
++ NULL, NULL_TREE); \
++} while (0)
++
++/* Set up all builtin functions for this target. */
++
++static void
++avr_init_builtins (void)
++{
++ tree void_ftype_void
++ = build_function_type (void_type_node, void_list_node);
++ tree uchar_ftype_uchar
++ = build_function_type_list (unsigned_char_type_node,
++ unsigned_char_type_node,
++ NULL_TREE);
++ tree uint_ftype_uchar_uchar
++ = build_function_type_list (unsigned_type_node,
++ unsigned_char_type_node,
++ unsigned_char_type_node,
++ NULL_TREE);
++ tree int_ftype_char_char
++ = build_function_type_list (integer_type_node,
++ char_type_node,
++ char_type_node,
++ NULL_TREE);
++ tree int_ftype_char_uchar
++ = build_function_type_list (integer_type_node,
++ char_type_node,
++ unsigned_char_type_node,
++ NULL_TREE);
++ tree void_ftype_ulong
++ = build_function_type_list (void_type_node,
++ long_unsigned_type_node,
++ NULL_TREE);
++
++ def_builtin ("__builtin_avr_sei", void_ftype_void, AVR_BUILTIN_SEI);
++ def_builtin ("__builtin_avr_cli", void_ftype_void, AVR_BUILTIN_CLI);
++ def_builtin ("__builtin_avr_wdr", void_ftype_void, AVR_BUILTIN_WDR);
++ def_builtin ("__builtin_avr_sleep", void_ftype_void, AVR_BUILTIN_SLEEP);
++
++ if (AVR_HAVE_MUL)
++ {
++ def_builtin ("__builtin_avr_fmul", uint_ftype_uchar_uchar,
++ AVR_BUILTIN_FMUL);
++ def_builtin ("__builtin_avr_fmuls", int_ftype_char_char,
++ AVR_BUILTIN_FMULS);
++ def_builtin ("__builtin_avr_fmulsu", int_ftype_char_uchar,
++ AVR_BUILTIN_FMULSU);
++ }
++
++ def_builtin ("__builtin_avr_swap", uchar_ftype_uchar, AVR_BUILTIN_SWAP);
++ def_builtin ("__builtin_avr_delay_cycles", void_ftype_ulong,
++ AVR_BUILTIN_DELAY_CYCLES);
++}
++
++struct builtin_description
++{
++ const enum insn_code icode;
++ const char *const name;
++ const enum avr_builtins code;
++};
++
++static const struct builtin_description bdesc_1arg[] =
++{
++ { CODE_FOR_swap, "__builtin_avr_swap", AVR_BUILTIN_SWAP }
++};
++
++static const struct builtin_description bdesc_2arg[] =
++{
++ { CODE_FOR_fmul, "__builtin_avr_fmul", AVR_BUILTIN_FMUL },
++ { CODE_FOR_fmuls, "__builtin_avr_fmuls", AVR_BUILTIN_FMULS },
++ { CODE_FOR_fmulsu, "__builtin_avr_fmulsu", AVR_BUILTIN_FMULSU }
++};
++
++/* Subroutine of avr_expand_builtin to take care of unop insns. */
++
++static rtx
++avr_expand_unop_builtin (enum insn_code icode, tree exp,
++ rtx target)
++{
++ rtx pat;
++ tree arg0 = CALL_EXPR_ARG (exp, 0);
++ rtx op0 = expand_expr (arg0, NULL_RTX, VOIDmode, 0);
++ enum machine_mode op0mode = GET_MODE (op0);
++ enum machine_mode tmode = insn_data[icode].operand[0].mode;
++ enum machine_mode mode0 = insn_data[icode].operand[1].mode;
++
++ if (! target
++ || GET_MODE (target) != tmode
++ || ! (*insn_data[icode].operand[0].predicate) (target, tmode))
++ target = gen_reg_rtx (tmode);
++
++ if (op0mode == SImode && mode0 == HImode)
++ {
++ op0mode = HImode;
++ op0 = gen_lowpart (HImode, op0);
++ }
++ gcc_assert (op0mode == mode0 || op0mode == VOIDmode);
++
++ if (! (*insn_data[icode].operand[1].predicate) (op0, mode0))
++ op0 = copy_to_mode_reg (mode0, op0);
++
++ pat = GEN_FCN (icode) (target, op0);
++ if (! pat)
++ return 0;
++ emit_insn (pat);
++ return target;
++}
++
++/* Subroutine of avr_expand_builtin to take care of binop insns. */
++
++static rtx
++avr_expand_binop_builtin (enum insn_code icode, tree exp, rtx target)
++{
++ rtx pat;
++ tree arg0 = CALL_EXPR_ARG (exp, 0);
++ tree arg1 = CALL_EXPR_ARG (exp, 1);
++ rtx op0 = expand_expr (arg0, NULL_RTX, VOIDmode, 0);
++ rtx op1 = expand_expr (arg1, NULL_RTX, VOIDmode, 0);
++ enum machine_mode op0mode = GET_MODE (op0);
++ enum machine_mode op1mode = GET_MODE (op1);
++ enum machine_mode tmode = insn_data[icode].operand[0].mode;
++ enum machine_mode mode0 = insn_data[icode].operand[1].mode;
++ enum machine_mode mode1 = insn_data[icode].operand[2].mode;
++
++ if (! target
++ || GET_MODE (target) != tmode
++ || ! (*insn_data[icode].operand[0].predicate) (target, tmode))
++ target = gen_reg_rtx (tmode);
++
++ if ((op0mode == SImode || op0mode == VOIDmode) && mode0 == HImode)
++ {
++ op0mode = HImode;
++ op0 = gen_lowpart (HImode, op0);
++ }
++ if ((op1mode == SImode || op1mode == VOIDmode) && mode1 == HImode)
++ {
++ op1mode = HImode;
++ op1 = gen_lowpart (HImode, op1);
++ }
++ /* In case the insn wants input operands in modes different from
++ the result, abort. */
++ gcc_assert ((op0mode == mode0 || op0mode == VOIDmode)
++ && (op1mode == mode1 || op1mode == VOIDmode));
++
++ if (! (*insn_data[icode].operand[1].predicate) (op0, mode0))
++ op0 = copy_to_mode_reg (mode0, op0);
++ if (! (*insn_data[icode].operand[2].predicate) (op1, mode1))
++ op1 = copy_to_mode_reg (mode1, op1);
++
++ pat = GEN_FCN (icode) (target, op0, op1);
++ if (! pat)
++ return 0;
++
++ emit_insn (pat);
++ return target;
++}
++
++/* Expand an expression EXP that calls a built-in function,
++ with result going to TARGET if that's convenient
++ (and in mode MODE if that's convenient).
++ SUBTARGET may be used as the target for computing one of EXP's operands.
++ IGNORE is nonzero if the value is to be ignored. */
++
++static rtx
++avr_expand_builtin (tree exp, rtx target,
++ rtx subtarget ATTRIBUTE_UNUSED,
++ enum machine_mode mode ATTRIBUTE_UNUSED,
++ int ignore ATTRIBUTE_UNUSED)
++{
++ size_t i;
++ const struct builtin_description *d;
++ tree fndecl = TREE_OPERAND (CALL_EXPR_FN (exp), 0);
++ unsigned int fcode = DECL_FUNCTION_CODE (fndecl);
++ rtx pat;
++ tree arg0;
++ rtx op0;
++
++ switch (fcode)
++ {
++ case AVR_BUILTIN_SEI:
++ emit_insn (gen_enable_interrupt ());
++ return 0;
++ case AVR_BUILTIN_CLI:
++ emit_insn (gen_disable_interrupt ());
++ return 0;
++ case AVR_BUILTIN_WDR:
++ emit_insn (gen_wdr ());
++ return 0;
++ case AVR_BUILTIN_SLEEP:
++ emit_insn (gen_sleep ());
++ return 0;
++ case AVR_BUILTIN_DELAY_CYCLES:
++ {
++ arg0 = CALL_EXPR_ARG (exp, 0);
++ op0 = expand_expr (arg0, NULL_RTX, VOIDmode, 0);
++
++ if (!CONSTANT_P (op0))
++ error ("__builtin_avr_delay_cycles expects an integer constant.");
++
++ emit_insn (gen_delay_cycles (op0));
++ return 0;
++ }
++ }
++
++ for (i = 0, d = bdesc_1arg; i < ARRAY_SIZE (bdesc_1arg); i++, d++)
++ if (d->code == fcode)
++ return avr_expand_unop_builtin (d->icode, exp, target);
++
++ for (i = 0, d = bdesc_1arg; i < ARRAY_SIZE (bdesc_2arg); i++, d++)
++ if (d->code == fcode)
++ return avr_expand_binop_builtin (d->icode, exp, target);
++
++ gcc_unreachable ();
++}
++
+ #include "gt-avr.h"
diff --git a/devel/avr-gcc/files/patch-disable-ssp b/devel/avr-gcc/files/patch-disable-ssp
new file mode 100644
index 000000000000..5d56ac62c6ff
--- /dev/null
+++ b/devel/avr-gcc/files/patch-disable-ssp
@@ -0,0 +1,22 @@
+--- configure.orig 2009-04-25 07:55:24.000000000 +0200
++++ configure 2010-03-05 15:28:10.000000000 +0100
+@@ -2277,7 +2277,7 @@
+ noconfigdirs="$noconfigdirs ld target-libgloss ${libgcj}"
+ ;;
+ avr-*-*)
+- noconfigdirs="$noconfigdirs target-libiberty target-libstdc++-v3 ${libgcj}"
++ noconfigdirs="$noconfigdirs target-libiberty target-libstdc++-v3 ${libgcj} target-libssp"
+ ;;
+ bfin-*-*)
+ noconfigdirs="$noconfigdirs gdb"
+--- configure.ac.orig 2009-04-25 07:55:24.000000000 +0200
++++ configure.ac 2010-03-05 15:28:10.000000000 +0100
+@@ -554,7 +554,7 @@
+ noconfigdirs="$noconfigdirs ld target-libgloss ${libgcj}"
+ ;;
+ avr-*-*)
+- noconfigdirs="$noconfigdirs target-libiberty target-libstdc++-v3 ${libgcj}"
++ noconfigdirs="$noconfigdirs target-libiberty target-libstdc++-v3 ${libgcj} target-libssp"
+ ;;
+ bfin-*-*)
+ noconfigdirs="$noconfigdirs gdb"
diff --git a/devel/avr-gcc/files/patch-libiberty-Makefile.in b/devel/avr-gcc/files/patch-libiberty-Makefile.in
index 0e0b3ce31173..4d29719dd492 100644
--- a/devel/avr-gcc/files/patch-libiberty-Makefile.in
+++ b/devel/avr-gcc/files/patch-libiberty-Makefile.in
@@ -1,6 +1,7 @@
---- libiberty/Makefile.in.orig Mon Sep 26 22:55:10 2005
-+++ libiberty/Makefile.in Wed Mar 22 22:13:44 2006
-@@ -275,7 +275,8 @@
+diff -ur ../gcc-4.3.4.orig/libiberty/Makefile.in ./libiberty/Makefile.in
+--- ../gcc-4.3.4.orig/libiberty/Makefile.in 2007-07-25 08:26:45.000000000 +0200
++++ ./libiberty/Makefile.in 2009-10-02 15:20:13.000000000 +0200
+@@ -344,7 +344,8 @@
@MAINT@ echo stamp > stamp-functions
INSTALL_DEST = @INSTALL_DEST@
@@ -8,5 +9,6 @@
+#install: install_to_$(INSTALL_DEST) install-subdir
+install:
- install_to_libdir: all
- ${mkinstalldirs} $(DESTDIR)$(libdir)$(MULTISUBDIR)
+ # This is tricky. Even though CC in the Makefile contains
+ # multilib-specific flags, it's overridden by FLAGS_TO_PASS from the
+Only in ./libiberty: Makefile.in.orig
diff --git a/devel/avr-gcc/files/patch-newdevices b/devel/avr-gcc/files/patch-newdevices
index bab67dec9027..c97db661c24d 100644
--- a/devel/avr-gcc/files/patch-newdevices
+++ b/devel/avr-gcc/files/patch-newdevices
@@ -1,31 +1,59 @@
---- gcc/config/avr/avr.c.orig Sat Sep 1 17:28:30 2007
-+++ gcc/config/avr/avr.c Wed Dec 19 14:02:11 2007
-@@ -173,6 +174,7 @@
+--- ./gcc/config/avr/avr.c~ 2010-03-05 17:16:20.000000000 +0100
++++ ./gcc/config/avr/avr.c 2010-03-05 17:19:30.000000000 +0100
+@@ -193,18 +193,28 @@
+ { "at90s8535", ARCH_AVR2, "__AVR_AT90S8535__" },
/* Classic + MOVW, <= 8K. */
{ "avr25", ARCH_AVR25, NULL },
++ { "ata6289", ARCH_AVR25, "__AVR_ATA6289__" },
{ "attiny13", ARCH_AVR25, "__AVR_ATtiny13__" },
+ { "attiny13a", ARCH_AVR25, "__AVR_ATtiny13A__" },
{ "attiny2313", ARCH_AVR25, "__AVR_ATtiny2313__" },
++ { "attiny2313a", ARCH_AVR25, "__AVR_ATtiny2313A__" },
{ "attiny24", ARCH_AVR25, "__AVR_ATtiny24__" },
++ { "attiny24a", ARCH_AVR25, "__AVR_ATtiny24A__" },
++ { "attiny4313", ARCH_AVR25, "__AVR_ATtiny4313__" },
{ "attiny44", ARCH_AVR25, "__AVR_ATtiny44__" },
-@@ -188,6 +188,7 @@
++ { "attiny44a", ARCH_AVR25, "__AVR_ATtiny44A__" },
+ { "attiny84", ARCH_AVR25, "__AVR_ATtiny84__" },
+ { "attiny25", ARCH_AVR25, "__AVR_ATtiny25__" },
+ { "attiny45", ARCH_AVR25, "__AVR_ATtiny45__" },
+ { "attiny85", ARCH_AVR25, "__AVR_ATtiny85__" },
+ { "attiny261", ARCH_AVR25, "__AVR_ATtiny261__" },
++ { "attiny261a", ARCH_AVR25, "__AVR_ATtiny261A__" },
{ "attiny461", ARCH_AVR25, "__AVR_ATtiny461__" },
++ { "attiny461a", ARCH_AVR25, "__AVR_ATtiny461A__" },
{ "attiny861", ARCH_AVR25, "__AVR_ATtiny861__" },
++ { "attiny861a", ARCH_AVR25, "__AVR_ATtiny861A__" },
{ "attiny43u", ARCH_AVR25, "__AVR_ATtiny43U__" },
+ { "attiny87", ARCH_AVR25, "__AVR_ATtiny87__" },
{ "attiny48", ARCH_AVR25, "__AVR_ATtiny48__" },
{ "attiny88", ARCH_AVR25, "__AVR_ATtiny88__" },
{ "at86rf401", ARCH_AVR25, "__AVR_AT86RF401__" },
-@@ -224,6 +224,8 @@ static const struct mcu_type_s avr_mcu_t
+@@ -220,61 +230,104 @@
{ "avr35", ARCH_AVR35, NULL },
{ "at90usb82", ARCH_AVR35, "__AVR_AT90USB82__" },
{ "at90usb162", ARCH_AVR35, "__AVR_AT90USB162__" },
++ { "atmega8u2", ARCH_AVR35, "__AVR_ATmega8U2__" },
++ { "atmega16u2", ARCH_AVR35, "__AVR_ATmega16U2__" },
++ { "atmega32u2", ARCH_AVR35, "__AVR_ATmega32U2__" },
+ { "attiny167", ARCH_AVR35, "__AVR_ATtiny167__" },
-+ { "attiny327", ARCH_AVR35, "__AVR_ATtiny327__" },
/* Enhanced, <= 8K. */
{ "avr4", ARCH_AVR4, NULL },
{ "atmega8", ARCH_AVR4, "__AVR_ATmega8__" },
-@@ -221,6 +223,7 @@
+ { "atmega48", ARCH_AVR4, "__AVR_ATmega48__" },
++ { "atmega48a", ARCH_AVR4, "__AVR_ATmega48A__" },
+ { "atmega48p", ARCH_AVR4, "__AVR_ATmega48P__" },
+ { "atmega88", ARCH_AVR4, "__AVR_ATmega88__" },
++ { "atmega88a", ARCH_AVR4, "__AVR_ATmega88A__" },
+ { "atmega88p", ARCH_AVR4, "__AVR_ATmega88P__" },
++ { "atmega88pa", ARCH_AVR4, "__AVR_ATmega88PA__" },
+ { "atmega8515", ARCH_AVR4, "__AVR_ATmega8515__" },
+ { "atmega8535", ARCH_AVR4, "__AVR_ATmega8535__" },
+ { "atmega8hva", ARCH_AVR4, "__AVR_ATmega8HVA__" },
++ { "atmega4hvd", ARCH_AVR4, "__AVR_ATmega4HVD__" },
++ { "atmega8hvd", ARCH_AVR4, "__AVR_ATmega8HVD__" },
+ { "at90pwm1", ARCH_AVR4, "__AVR_AT90PWM1__" },
+ { "at90pwm2", ARCH_AVR4, "__AVR_AT90PWM2__" },
{ "at90pwm2b", ARCH_AVR4, "__AVR_AT90PWM2B__" },
{ "at90pwm3", ARCH_AVR4, "__AVR_AT90PWM3__" },
{ "at90pwm3b", ARCH_AVR4, "__AVR_AT90PWM3B__" },
@@ -33,23 +61,81 @@
/* Enhanced, > 8K, <= 64K. */
{ "avr5", ARCH_AVR5, NULL },
{ "atmega16", ARCH_AVR5, "__AVR_ATmega16__" },
-@@ -278,6 +278,15 @@ static const struct mcu_type_s avr_mcu_t
- { "at90can64", ARCH_AVR5, "__AVR_AT90CAN64__" },
- { "at90pwm216", ARCH_AVR5, "__AVR_AT90PWM216__" },
- { "at90pwm316", ARCH_AVR5, "__AVR_AT90PWM316__" },
-+ { "atmega32c1", ARCH_AVR5, "__AVR_ATmega32C1__" },
-+ { "atmega64c1", ARCH_AVR5, "__AVR_ATmega64C1__" },
++ { "atmega16a", ARCH_AVR5, "__AVR_ATmega16A__" },
+ { "atmega161", ARCH_AVR5, "__AVR_ATmega161__" },
+ { "atmega162", ARCH_AVR5, "__AVR_ATmega162__" },
+ { "atmega163", ARCH_AVR5, "__AVR_ATmega163__" },
++ { "atmega164a", ARCH_AVR5, "__AVR_ATmega164A__" },
+ { "atmega164p", ARCH_AVR5, "__AVR_ATmega164P__" },
+ { "atmega165", ARCH_AVR5, "__AVR_ATmega165__" },
++ { "atmega165a", ARCH_AVR5, "__AVR_ATmega165A__" },
+ { "atmega165p", ARCH_AVR5, "__AVR_ATmega165P__" },
+ { "atmega168", ARCH_AVR5, "__AVR_ATmega168__" },
++ { "atmega168a", ARCH_AVR5, "__AVR_ATmega168A__" },
+ { "atmega168p", ARCH_AVR5, "__AVR_ATmega168P__" },
+ { "atmega169", ARCH_AVR5, "__AVR_ATmega169__" },
++ { "atmega169a", ARCH_AVR5, "__AVR_ATmega169A__" },
+ { "atmega169p", ARCH_AVR5, "__AVR_ATmega169P__" },
++ { "atmega169pa", ARCH_AVR5, "__AVR_ATmega169PA__" },
++ { "atmega16c1", ARCH_AVR5, "__AVR_ATmega16C1__" },
++ { "atmega16hva", ARCH_AVR5, "__AVR_ATmega16HVA__" },
++ { "atmega16hva2", ARCH_AVR5, "__AVR_ATmega16HVA2__" },
++ { "atmega16hvb", ARCH_AVR5, "__AVR_ATmega16HVB__" },
+ { "atmega16m1", ARCH_AVR5, "__AVR_ATmega16M1__" },
-+ { "atmega32m1", ARCH_AVR5, "__AVR_ATmega32M1__" },
-+ { "atmega64m1", ARCH_AVR5, "__AVR_ATmega64M1__" },
+ { "atmega16u4", ARCH_AVR5, "__AVR_ATmega16U4__" },
+ { "atmega32", ARCH_AVR5, "__AVR_ATmega32__" },
+ { "atmega323", ARCH_AVR5, "__AVR_ATmega323__" },
++ { "atmega324a", ARCH_AVR5, "__AVR_ATmega324A__" },
+ { "atmega324p", ARCH_AVR5, "__AVR_ATmega324P__" },
++ { "atmega324pa", ARCH_AVR5, "__AVR_ATmega324PA__" },
+ { "atmega325", ARCH_AVR5, "__AVR_ATmega325__" },
+ { "atmega325p", ARCH_AVR5, "__AVR_ATmega325P__" },
+ { "atmega3250", ARCH_AVR5, "__AVR_ATmega3250__" },
+ { "atmega3250p", ARCH_AVR5, "__AVR_ATmega3250P__" },
++ { "atmega328", ARCH_AVR5, "__AVR_ATmega328__" },
+ { "atmega328p", ARCH_AVR5, "__AVR_ATmega328P__" },
+ { "atmega329", ARCH_AVR5, "__AVR_ATmega329__" },
+ { "atmega329p", ARCH_AVR5, "__AVR_ATmega329P__" },
++ { "atmega329pa", ARCH_AVR5, "__AVR_ATmega329PA__" },
+ { "atmega3290", ARCH_AVR5, "__AVR_ATmega3290__" },
+ { "atmega3290p", ARCH_AVR5, "__AVR_ATmega3290P__" },
++ { "atmega32c1", ARCH_AVR5, "__AVR_ATmega32C1__" },
+ { "atmega32hvb", ARCH_AVR5, "__AVR_ATmega32HVB__" },
++ { "atmega32m1", ARCH_AVR5, "__AVR_ATmega32M1__" },
+ { "atmega32u4", ARCH_AVR5, "__AVR_ATmega32U4__" },
+ { "atmega32u6", ARCH_AVR5, "__AVR_ATmega32U6__" },
+ { "atmega406", ARCH_AVR5, "__AVR_ATmega406__" },
+ { "atmega64", ARCH_AVR5, "__AVR_ATmega64__" },
+ { "atmega640", ARCH_AVR5, "__AVR_ATmega640__" },
+ { "atmega644", ARCH_AVR5, "__AVR_ATmega644__" },
++ { "atmega644a", ARCH_AVR5, "__AVR_ATmega644A__" },
+ { "atmega644p", ARCH_AVR5, "__AVR_ATmega644P__" },
++ { "atmega644pa", ARCH_AVR5, "__AVR_ATmega644PA__" },
+ { "atmega645", ARCH_AVR5, "__AVR_ATmega645__" },
++ { "atmega645a", ARCH_AVR5, "__AVR_ATmega645A__" },
++ { "atmega645p", ARCH_AVR5, "__AVR_ATmega645P__" },
+ { "atmega6450", ARCH_AVR5, "__AVR_ATmega6450__" },
++ { "atmega6450a", ARCH_AVR5, "__AVR_ATmega6450A__" },
++ { "atmega6450p", ARCH_AVR5, "__AVR_ATmega6450P__" },
+ { "atmega649", ARCH_AVR5, "__AVR_ATmega649__" },
++ { "atmega649a", ARCH_AVR5, "__AVR_ATmega649A__" },
++ { "atmega649p", ARCH_AVR5, "__AVR_ATmega649P__" },
+ { "atmega6490", ARCH_AVR5, "__AVR_ATmega6490__" },
+- { "atmega16hva", ARCH_AVR5, "__AVR_ATmega16HVA__" },
++ { "atmega6490a", ARCH_AVR5, "__AVR_ATmega6490A__" },
++ { "atmega6490p", ARCH_AVR5, "__AVR_ATmega6490P__" },
++ { "atmega64c1", ARCH_AVR5, "__AVR_ATmega64C1__" },
++ { "atmega64m1", ARCH_AVR5, "__AVR_ATmega64M1__" },
++ { "atmega64hve", ARCH_AVR5, "__AVR_ATmega64HVE__" },
+ { "at90can32", ARCH_AVR5, "__AVR_AT90CAN32__" },
+ { "at90can64", ARCH_AVR5, "__AVR_AT90CAN64__" },
+ { "at90pwm216", ARCH_AVR5, "__AVR_AT90PWM216__" },
+ { "at90pwm316", ARCH_AVR5, "__AVR_AT90PWM316__" },
+ { "at90scr100", ARCH_AVR5, "__AVR_AT90SCR100__" },
{ "at90usb646", ARCH_AVR5, "__AVR_AT90USB646__" },
{ "at90usb647", ARCH_AVR5, "__AVR_AT90USB647__" },
{ "at94k", ARCH_AVR5, "__AVR_AT94K__" },
-@@ -278,9 +283,13 @@
+@@ -284,9 +337,13 @@
{ "atmega1280", ARCH_AVR51, "__AVR_ATmega1280__" },
{ "atmega1281", ARCH_AVR51, "__AVR_ATmega1281__" },
{ "atmega1284p", ARCH_AVR51, "__AVR_ATmega1284P__" },
@@ -63,106 +149,149 @@
/* 3-Byte PC. */
{ "avr6", ARCH_AVR6, NULL },
{ "atmega2560", ARCH_AVR6, "__AVR_ATmega2560__" },
---- gcc/config/avr/t-avr.orig Fri Apr 27 22:53:57 2007
-+++ gcc/config/avr/t-avr Wed Dec 19 14:01:08 2007
-@@ -43,6 +43,7 @@ MULTILIB_DIRNAMES = avr2 avr25 avr3 avr3
- # The many avr2 matches are not listed here - this is the default.
- MULTILIB_MATCHES = \
- mmcu?avr25=mmcu?attiny13 \
-+ mmcu?avr25=mmcu?attiny13a \
- mmcu?avr25=mmcu?attiny2313 \
- mmcu?avr25=mmcu?attiny24 \
- mmcu?avr25=mmcu?attiny44 \
-@@ -55,6 +55,7 @@
- mmcu?avr25=mmcu?attiny461 \
- mmcu?avr25=mmcu?attiny861 \
- mmcu?avr25=mmcu?attiny43u \
-+ mmcu?avr25=mmcu?attiny87 \
- mmcu?avr25=mmcu?attiny48 \
- mmcu?avr25=mmcu?attiny88 \
- mmcu?avr25=mmcu?at86rf401 \
-@@ -63,6 +63,8 @@ MULTILIB_MATCHES = \
- mmcu?avr31=mmcu?atmega103 \
- mmcu?avr35=mmcu?at90usb82 \
- mmcu?avr35=mmcu?at90usb162 \
-+ mmcu?avr35=mmcu?attiny167 \
-+ mmcu?avr35=mmcu?attiny327 \
- mmcu?avr4=mmcu?atmega48 \
- mmcu?avr4=mmcu?atmega48p \
- mmcu?avr4=mmcu?atmega8 \
-@@ -80,6 +82,7 @@
- mmcu?avr4=mmcu?at90pwm2b \
- mmcu?avr4=mmcu?at90pwm3 \
- mmcu?avr4=mmcu?at90pwm3b \
-+ mmcu?avr4=mmcu?at90pwm81 \
- mmcu?avr5=mmcu?atmega16 \
- mmcu?avr5=mmcu?atmega161 \
- mmcu?avr5=mmcu?atmega162 \
-@@ -114,6 +114,15 @@ MULTILIB_MATCHES = \
- mmcu?avr5=mmcu?at90can64 \
- mmcu?avr5=mmcu?at90pwm216 \
- mmcu?avr5=mmcu?at90pwm316 \
-+ mmcu?avr5=mmcu?atmega32c1 \
-+ mmcu?avr5=mmcu?atmega64c1 \
-+ mmcu?avr5=mmcu?atmega16m1 \
-+ mmcu?avr5=mmcu?atmega32m1 \
-+ mmcu?avr5=mmcu?atmega64m1 \
-+ mmcu?avr5=mmcu?atmega16u4 \
-+ mmcu?avr5=mmcu?atmega32u4 \
-+ mmcu?avr5=mmcu?atmega32u6 \
-+ mmcu?avr5=mmcu?at90scr100 \
- mmcu?avr5=mmcu?at90usb646 \
- mmcu?avr5=mmcu?at90usb647 \
- mmcu?avr5=mmcu?at94k \
-@@ -133,9 +138,13 @@
- mmcu?avr51=mmcu?atmega1280 \
- mmcu?avr51=mmcu?atmega1281 \
- mmcu?avr51=mmcu?atmega1284p \
-+ mmcu?avr51=mmcu?atmega128rfa1 \
- mmcu?avr51=mmcu?at90can128 \
- mmcu?avr51=mmcu?at90usb1286 \
- mmcu?avr51=mmcu?at90usb1287 \
-+ mmcu?avr51=mmcu?m3000f \
-+ mmcu?avr51=mmcu?m3000s \
-+ mmcu?avr51=mmcu?m3001b \
- mmcu?avr6=mmcu?atmega2560 \
- mmcu?avr6=mmcu?atmega2561
-
---- gcc/config/avr/avr.h.orig 2009-01-26 17:37:33.000000000 +0100
-+++ gcc/config/avr/avr.h 2009-01-26 17:47:48.000000000 +0100
-@@ -811,7 +811,7 @@
+--- ./gcc/config/avr/avr.h~ 2010-03-05 17:15:55.000000000 +0100
++++ ./gcc/config/avr/avr.h 2010-03-05 17:19:53.000000000 +0100
+@@ -803,67 +803,221 @@
mmcu=at90s8*|\
mmcu=at90c8*|\
mmcu=at86rf401|\
- mmcu=attiny13|\
++ mmcu=ata6289|\
+ mmcu=attiny13*|\
mmcu=attiny2313|\
++ mmcu=attiny2313a|\
mmcu=attiny24|\
++ mmcu=attiny24a|\
mmcu=attiny25|\
-@@ -822,14 +822,17 @@
- mmcu=at43*|\
- mmcu=at76*|\
+ mmcu=attiny261|\
+- mmcu=attiny4*|\
+- mmcu=attiny8*: -m avr2}\
++ mmcu=attiny261a|\
++ mmcu=attiny4313|\
++ mmcu=attiny43u|\
++ mmcu=attiny44|\
++ mmcu=attiny44a|\
++ mmcu=attiny45|\
++ mmcu=attiny461|\
++ mmcu=attiny461a|\
++ mmcu=attiny48|\
++ mmcu=attiny84|\
++ mmcu=attiny85|\
++ mmcu=attiny861|\
++ mmcu=attiny861a|\
++ mmcu=attiny87|\
++ mmcu=attiny88: -m avr2}\
+ %{mmcu=atmega103|\
+- mmcu=at43*|\
+- mmcu=at76*|\
++ mmcu=at43usb320|\
++ mmcu=at43usb355|\
++ mmcu=at76c711|\
mmcu=at90usb82|\
- mmcu=at90usb162: -m avr3}\
+-%{mmcu=atmega8*|\
+- mmcu=atmega48*|\
+ mmcu=at90usb162|\
-+ mmcu=attiny16*|\
-+ mmcu=attiny32*: -m avr3}\
- %{mmcu=atmega8*|\
- mmcu=atmega48*|\
++ mmcu=atmega8u2|\
++ mmcu=atmega16u2|\
++ mmcu=atmega32u2|\
++ mmcu=attiny167: -m avr3}\
++%{mmcu=atmega8|\
++ mmcu=atmega88|\
++ mmcu=atmega88a|\
++ mmcu=atmega88p|\
++ mmcu=atmega88pa|\
++ mmcu=atmega8515|\
++ mmcu=atmega8535|\
++ mmcu=atmega8hva|\
++ mmcu=atmega8hvd|\
++ mmcu=atmega48|\
++ mmcu=atmega48a|\
++ mmcu=atmega48p|\
++ mmcu=atmega4hvd|\
mmcu=at90pwm1|\
mmcu=at90pwm2|\
mmcu=at90pwm2b|\
mmcu=at90pwm3|\
- mmcu=at90pwm3b: -m avr4}\
+-%{mmcu=atmega16*|\
+- mmcu=atmega32*|\
+ mmcu=at90pwm3b|\
+ mmcu=at90pwm81: -m avr4}\
- %{mmcu=atmega16*|\
- mmcu=atmega32*|\
++%{mmcu=atmega16|\
++ mmcu=atmega16a|\
++ mmcu=atmega161|\
++ mmcu=atmega162|\
++ mmcu=atmega163|\
++ mmcu=atmega164a|\
++ mmcu=atmega164p|\
++ mmcu=atmega165|\
++ mmcu=atmega165a|\
++ mmcu=atmega165p|\
++ mmcu=atmega168|\
++ mmcu=atmega168a|\
++ mmcu=atmega168p|\
++ mmcu=atmega169|\
++ mmcu=atmega169a|\
++ mmcu=atmega169p|\
++ mmcu=atmega169pa|\
++ mmcu=atmega16c1|\
++ mmcu=atmega16hva|\
++ mmcu=atmega16hva2|\
++ mmcu=atmega16hvb|\
++ mmcu=atmega16m1|\
++ mmcu=atmega16u4|\
++ mmcu=atmega32|\
++ mmcu=atmega323|\
++ mmcu=atmega324a|\
++ mmcu=atmega324p|\
++ mmcu=atmega324pa|\
++ mmcu=atmega325|\
++ mmcu=atmega325p|\
++ mmcu=atmega3250|\
++ mmcu=atmega3250p|\
++ mmcu=atmega328|\
++ mmcu=atmega328p|\
++ mmcu=atmega329|\
++ mmcu=atmega329p|\
++ mmcu=atmega329pa|\
++ mmcu=atmega3290|\
++ mmcu=atmega3290p|\
++ mmcu=atmega32c1|\
++ mmcu=atmega32hvb|\
++ mmcu=atmega32m1|\
++ mmcu=atmega32u4|\
++ mmcu=atmega32u6|\
mmcu=atmega406|\
-@@ -838,9 +841,12 @@
+- mmcu=atmega64*|\
++ mmcu=atmega64|\
++ mmcu=atmega640|\
++ mmcu=atmega644|\
++ mmcu=atmega644a|\
++ mmcu=atmega644p|\
++ mmcu=atmega644pa|\
++ mmcu=atmega645|\
++ mmcu=atmega645a|\
++ mmcu=atmega645p|\
++ mmcu=atmega6450|\
++ mmcu=atmega6450a|\
++ mmcu=atmega6450p|\
++ mmcu=atmega649|\
++ mmcu=atmega649a|\
++ mmcu=atmega649p|\
++ mmcu=atmega6490|\
++ mmcu=atmega6490a|\
++ mmcu=atmega6490p|\
++ mmcu=atmega64c1|\
++ mmcu=atmega64m1|\
++ mmcu=atmega64hve|\
+ mmcu=atmega128*|\
mmcu=at90can*|\
mmcu=at90pwm216|\
mmcu=at90pwm316|\
++ mmcu=atmega32c1|\
++ mmcu=atmega32m1|\
++ mmcu=atmega32u4|\
+ mmcu=at90scr100|\
mmcu=at90usb64*|\
mmcu=at90usb128*|\
@@ -171,96 +300,246 @@
+ mmcu=m3000*|\
+ mmcu=m3001*: -m avr5}\
%{mmcu=atmega256*:-m avr6}\
- %{mmcu=atmega324*|\
+-%{mmcu=atmega324*|\
++%{mmcu=atmega324a|\
++ mmcu=atmega324p|\
++ mmcu=atmega324pa|\
mmcu=atmega325*|\
-@@ -865,13 +871,26 @@
- mmcu=atmega32hvb|\
++ mmcu=atmega328|\
+ mmcu=atmega328p|\
+- mmcu=atmega329*|\
++ mmcu=atmega329|\
++ mmcu=atmega329p|\
++ mmcu=atmega329pa|\
++ mmcu=atmega3290|\
++ mmcu=atmega3290p|\
+ mmcu=atmega406|\
+- mmcu=atmega48*|\
+- mmcu=atmega88*|\
++ mmcu=atmega48|\
++ mmcu=atmega48a|\
++ mmcu=atmega48p|\
++ mmcu=atmega88|\
++ mmcu=atmega88a|\
++ mmcu=atmega88p|\
++ mmcu=atmega88pa|\
+ mmcu=atmega64|\
+- mmcu=atmega644*|\
+- mmcu=atmega645*|\
+- mmcu=atmega649*|\
++ mmcu=atmega644|\
++ mmcu=atmega644a|\
++ mmcu=atmega644p|\
++ mmcu=atmega644pa|\
++ mmcu=atmega645|\
++ mmcu=atmega645p|\
++ mmcu=atmega645a|\
++ mmcu=atmega6450|\
++ mmcu=atmega6450a|\
++ mmcu=atmega6450p|\
++ mmcu=atmega649|\
++ mmcu=atmega649a|\
++ mmcu=atmega649p|\
++ mmcu=atmega6490|\
++ mmcu=atmega6490a|\
++ mmcu=atmega6490p|\
+ mmcu=atmega128|\
+ mmcu=atmega1284p|\
+ mmcu=atmega162|\
+- mmcu=atmega164*|\
+- mmcu=atmega165*|\
+- mmcu=atmega168*|\
+- mmcu=atmega169*|\
+- mmcu=atmega8hva|\
+- mmcu=atmega16hva|\
+- mmcu=atmega32hvb|\
++ mmcu=atmega164a|\
++ mmcu=atmega164p|\
++ mmcu=atmega165|\
++ mmcu=atmega165a|\
++ mmcu=atmega165p|\
++ mmcu=atmega168|\
++ mmcu=atmega168a|\
++ mmcu=atmega168p|\
++ mmcu=atmega169|\
++ mmcu=atmega169a|\
++ mmcu=atmega169p|\
++ mmcu=atmega169pa|\
++ mmcu=atmega4hv*|\
++ mmcu=atmega8hv*|\
++ mmcu=atmega16hv*|\
++ mmcu=atmega32hv*|\
mmcu=attiny48|\
mmcu=attiny88|\
+ mmcu=attiny87|\
+ mmcu=attiny167|\
-+ mmcu=attiny327|\
mmcu=at90can*|\
mmcu=at90pwm*|\
-+ mmcu=atmega32c1|\
-+ mmcu=atmega64c1|\
++ mmcu=atmega16c1|\
+ mmcu=atmega16m1|\
++ mmcu=atmega32c1|\
+ mmcu=atmega32m1|\
++ mmcu=atmega64c1|\
++ mmcu=atmega64m1|\
+ mmcu=atmega16u4|\
+ mmcu=atmega32u*|\
+ mmcu=at90scr100|\
++ mmcu=ata6289|\
++ mmcu=atmega64hve|\
++ mmcu=atmega8u2|\
++ mmcu=atmega16u2|\
++ mmcu=atmega32u2|\
mmcu=at90usb*: -Tdata 0x800100}\
%{mmcu=atmega640|\
mmcu=atmega1280|\
mmcu=atmega1281|\
- mmcu=atmega256*: -Tdata 0x800200} "
-+ mmcu=atmega256*|\
-+ mmcu=atmega128rfa1: -Tdata 0x800200}\
++ mmcu=atmega128rfa1|\
++ mmcu=atmega256*: -Tdata 0x800200}\
+%{mmcu=m3000*|\
+ mmcu=m3001*: -Tdata 0x801000}"
#define LIB_SPEC \
"%{!mmcu=at90s1*:%{!mmcu=attiny11:%{!mmcu=attiny12:%{!mmcu=attiny15:%{!mmcu=attiny28: -lc }}}}}"
-@@ -906,6 +925,7 @@
+@@ -898,30 +1052,47 @@
%{mmcu=at90s8535:crts8535.o%s} \
%{mmcu=at86rf401:crt86401.o%s} \
%{mmcu=attiny13:crttn13.o%s} \
+%{mmcu=attiny13a:crttn13a.o%s} \
%{mmcu=attiny2313|mmcu=avr25:crttn2313.o%s} \
++%{mmcu=attiny2313a:crttn2313a.o%s} \
%{mmcu=attiny24:crttn24.o%s} \
++%{mmcu=attiny24a:crttn24a.o%s} \
++%{mmcu=attiny4313:crttn4313.o%s} \
%{mmcu=attiny44:crttn44.o%s} \
-@@ -917,14 +937,17 @@
++%{mmcu=attiny44a:crttn44a.o%s} \
+ %{mmcu=attiny84:crttn84.o%s} \
+ %{mmcu=attiny25:crttn25.o%s} \
+ %{mmcu=attiny45:crttn45.o%s} \
+ %{mmcu=attiny85:crttn85.o%s} \
+ %{mmcu=attiny261:crttn261.o%s} \
++%{mmcu=attiny261a:crttn261a.o%s} \
%{mmcu=attiny461:crttn461.o%s} \
++%{mmcu=attiny461a:crttn461a.o%s} \
%{mmcu=attiny861:crttn861.o%s} \
++%{mmcu=attiny861a:crttn861a.o%s} \
%{mmcu=attiny43u:crttn43u.o%s} \
-+%{mmcu=attiny87:crttn87.o%s} \
%{mmcu=attiny48:crttn48.o%s} \
%{mmcu=attiny88:crttn88.o%s} \
--%{mmcu=at43usb320|mmcu=avr3:crt43320.o%s} \
--%{mmcu=at43usb355:crt43355.o%s} \
-+%{mmcu=at43usb355|mmcu=avr3:crt43355.o%s} \
++%{mmcu=attiny87:crttn87.o%s} \
++%{mmcu=ata6289:crta6289.o%s} \
+ %{mmcu=at43usb320|mmcu=avr3:crt43320.o%s} \
+ %{mmcu=at43usb355:crt43355.o%s} \
%{mmcu=at76c711:crt76711.o%s} \
%{mmcu=atmega103|mmcu=avr31:crtm103.o%s} \
-+%{mmcu=at43usb320:crt43320.o%s} \
%{mmcu=at90usb162|mmcu=avr35:crtusb162.o%s} \
%{mmcu=at90usb82:crtusb82.o%s} \
++%{mmcu=atmega8u2:crtm8u2.o%s} \
++%{mmcu=atmega16u2:crtm16u2.o%s} \
++%{mmcu=atmega32u2:crtm32u2.o%s} \
+%{mmcu=attiny167:crttn167.o%s} \
-+%{mmcu=attiny327:crttn327.o%s} \
%{mmcu=atmega8|mmcu=avr4:crtm8.o%s} \
%{mmcu=atmega48:crtm48.o%s} \
++%{mmcu=atmega48a:crtm48a.o%s} \
%{mmcu=atmega48p:crtm48p.o%s} \
-@@ -937,6 +960,7 @@
+ %{mmcu=atmega88:crtm88.o%s} \
++%{mmcu=atmega88a:crtm88a.o%s} \
+ %{mmcu=atmega88p:crtm88p.o%s} \
++%{mmcu=atmega88pa:crtm88pa.o%s} \
+ %{mmcu=atmega8515:crtm8515.o%s} \
+ %{mmcu=atmega8535:crtm8535.o%s} \
+ %{mmcu=at90pwm1:crt90pwm1.o%s} \
+@@ -929,45 +1100,81 @@
%{mmcu=at90pwm2b:crt90pwm2b.o%s} \
%{mmcu=at90pwm3:crt90pwm3.o%s} \
%{mmcu=at90pwm3b:crt90pwm3b.o%s} \
+%{mmcu=at90pwm81:crt90pwm81.o%s} \
%{mmcu=atmega16:crtm16.o%s} \
++%{mmcu=atmega16a:crtm16a.o%s} \
%{mmcu=atmega161|mmcu=avr5:crtm161.o%s} \
%{mmcu=atmega162:crtm162.o%s} \
-@@ -976,6 +1000,15 @@
+ %{mmcu=atmega163:crtm163.o%s} \
++%{mmcu=atmega164a:crtm164a.o%s} \
+ %{mmcu=atmega164p:crtm164p.o%s} \
+ %{mmcu=atmega165:crtm165.o%s} \
++%{mmcu=atmega165a:crtm165a.o%s} \
+ %{mmcu=atmega165p:crtm165p.o%s} \
+ %{mmcu=atmega168:crtm168.o%s} \
++%{mmcu=atmega168a:crtm168a.o%s} \
+ %{mmcu=atmega168p:crtm168p.o%s} \
+ %{mmcu=atmega169:crtm169.o%s} \
++%{mmcu=atmega169a:crtm169a.o%s} \
+ %{mmcu=atmega169p:crtm169p.o%s} \
++%{mmcu=atmega169pa:crtm169pa.o%s} \
+ %{mmcu=atmega32:crtm32.o%s} \
+ %{mmcu=atmega323:crtm323.o%s} \
++%{mmcu=atmega324a:crtm324a.o%s} \
+ %{mmcu=atmega324p:crtm324p.o%s} \
++%{mmcu=atmega324pa:crtm324pa.o%s} \
+ %{mmcu=atmega325:crtm325.o%s} \
+ %{mmcu=atmega325p:crtm325p.o%s} \
+ %{mmcu=atmega3250:crtm3250.o%s} \
+ %{mmcu=atmega3250p:crtm3250p.o%s} \
++%{mmcu=atmega328:crtm328.o%s} \
+ %{mmcu=atmega328p:crtm328p.o%s} \
+ %{mmcu=atmega329:crtm329.o%s} \
+ %{mmcu=atmega329p:crtm329p.o%s} \
++%{mmcu=atmega329pa:crtm329pa.o%s} \
+ %{mmcu=atmega3290:crtm3290.o%s} \
+ %{mmcu=atmega3290p:crtm3290p.o%s} \
+-%{mmcu=atmega32hvb:crtm32hvb.o%s} \
+ %{mmcu=atmega406:crtm406.o%s} \
+ %{mmcu=atmega64:crtm64.o%s} \
+ %{mmcu=atmega640:crtm640.o%s} \
+ %{mmcu=atmega644:crtm644.o%s} \
++%{mmcu=atmega644a:crtm644a.o%s} \
+ %{mmcu=atmega644p:crtm644p.o%s} \
++%{mmcu=atmega644pa:crtm644pa.o%s} \
+ %{mmcu=atmega645:crtm645.o%s} \
++%{mmcu=atmega645a:crtm645a.o%s} \
++%{mmcu=atmega645p:crtm645p.o%s} \
+ %{mmcu=atmega6450:crtm6450.o%s} \
++%{mmcu=atmega6450a:crtm6450a.o%s} \
++%{mmcu=atmega6450p:crtm6450p.o%s} \
+ %{mmcu=atmega649:crtm649.o%s} \
++%{mmcu=atmega649a:crtm649a.o%s} \
++%{mmcu=atmega649p:crtm649p.o%s} \
+ %{mmcu=atmega6490:crtm6490.o%s} \
++%{mmcu=atmega6490a:crtm6490a.o%s} \
++%{mmcu=atmega6490p:crtm6490p.o%s} \
++%{mmcu=atmega64hve:crtm64hve.o%s} \
+ %{mmcu=atmega8hva:crtm8hva.o%s} \
+ %{mmcu=atmega16hva:crtm16hva.o%s} \
++%{mmcu=atmega16hva2:crtm16hva2.o%s} \
++%{mmcu=atmega16hvb:crtm16hvb.o%s} \
++%{mmcu=atmega32hvb:crtm32hvb.o%s} \
++%{mmcu=atmega4hvd:crtm4hvd.o%s} \
++%{mmcu=atmega8hvd:crtm8hvd.o%s} \
+ %{mmcu=at90can32:crtcan32.o%s} \
%{mmcu=at90can64:crtcan64.o%s} \
%{mmcu=at90pwm216:crt90pwm216.o%s} \
%{mmcu=at90pwm316:crt90pwm316.o%s} \
-+%{mmcu=atmega32c1:crtm32c1.o%s} \
-+%{mmcu=atmega64c1:crtm64c1.o%s} \
++%{mmcu=atmega16c1:crtm16c1.o%s} \
+%{mmcu=atmega16m1:crtm16m1.o%s} \
-+%{mmcu=atmega32m1:crtm32m1.o%s} \
-+%{mmcu=atmega64m1:crtm64m1.o%s} \
+%{mmcu=atmega16u4:crtm16u4.o%s} \
++%{mmcu=atmega32c1:crtm32c1.o%s} \
++%{mmcu=atmega32m1:crtm32m1.o%s} \
+%{mmcu=atmega32u4:crtm32u4.o%s} \
+%{mmcu=atmega32u6:crtm32u6.o%s} \
++%{mmcu=atmega64c1:crtm64c1.o%s} \
++%{mmcu=atmega64m1:crtm64m1.o%s} \
+%{mmcu=at90scr100:crt90scr100.o%s} \
%{mmcu=at90usb646:crtusb646.o%s} \
%{mmcu=at90usb647:crtusb647.o%s} \
%{mmcu=at94k:crtat94k.o%s} \
-@@ -983,11 +1016,15 @@
+@@ -975,11 +1182,15 @@
%{mmcu=atmega1280:crtm1280.o%s} \
%{mmcu=atmega1281:crtm1281.o%s} \
%{mmcu=atmega1284p:crtm1284p.o%s} \
-%{mmcu=atmega2560:crtm2560.o%s} \
-%{mmcu=atmega2561:crtm2561.o%s} \
- %{mmcu=at90can128:crtcan128.o%s} \
+%{mmcu=atmega128rfa1:crtm128rfa1.o%s} \
+ %{mmcu=at90can128:crtcan128.o%s} \
%{mmcu=at90usb1286:crtusb1286.o%s} \
-%{mmcu=at90usb1287:crtusb1287.o%s}"
+%{mmcu=at90usb1287:crtusb1287.o%s} \
@@ -272,3 +551,162 @@
#define EXTRA_SPECS {"crt_binutils", CRT_BINUTILS_SPECS},
+--- ./gcc/config/avr/t-avr~ 2010-03-05 17:15:38.000000000 +0100
++++ ./gcc/config/avr/t-avr 2010-03-05 17:20:12.000000000 +0100
+@@ -42,19 +42,29 @@
+
+ # The many avr2 matches are not listed here - this is the default.
+ MULTILIB_MATCHES = \
++ mmcu?avr25=mmcu?ata6289 \
+ mmcu?avr25=mmcu?attiny13 \
++ mmcu?avr25=mmcu?attiny13a \
+ mmcu?avr25=mmcu?attiny2313 \
++ mmcu?avr25=mmcu?attiny2313a \
+ mmcu?avr25=mmcu?attiny24 \
+- mmcu?avr25=mmcu?attiny44 \
+- mmcu?avr25=mmcu?attiny84 \
++ mmcu?avr25=mmcu?attiny24a \
+ mmcu?avr25=mmcu?attiny25 \
+- mmcu?avr25=mmcu?attiny45 \
+- mmcu?avr25=mmcu?attiny85 \
+ mmcu?avr25=mmcu?attiny261 \
+- mmcu?avr25=mmcu?attiny461 \
+- mmcu?avr25=mmcu?attiny861 \
++ mmcu?avr25=mmcu?attiny261a \
++ mmcu?avr25=mmcu?attiny4313 \
+ mmcu?avr25=mmcu?attiny43u \
++ mmcu?avr25=mmcu?attiny44 \
++ mmcu?avr25=mmcu?attiny44a \
++ mmcu?avr25=mmcu?attiny45 \
++ mmcu?avr25=mmcu?attiny461 \
++ mmcu?avr25=mmcu?attiny461a \
+ mmcu?avr25=mmcu?attiny48 \
++ mmcu?avr25=mmcu?attiny84 \
++ mmcu?avr25=mmcu?attiny85 \
++ mmcu?avr25=mmcu?attiny861 \
++ mmcu?avr25=mmcu?attiny861a \
++ mmcu?avr25=mmcu?attiny87 \
+ mmcu?avr25=mmcu?attiny88 \
+ mmcu?avr25=mmcu?at86rf401 \
+ mmcu?avr3=mmcu?at43usb320 \
+@@ -63,57 +73,100 @@
+ mmcu?avr31=mmcu?atmega103 \
+ mmcu?avr35=mmcu?at90usb82 \
+ mmcu?avr35=mmcu?at90usb162 \
++ mmcu?avr35=mmcu?atmega8u2 \
++ mmcu?avr35=mmcu?atmega16u2 \
++ mmcu?avr35=mmcu?atmega32u2 \
++ mmcu?avr35=mmcu?attiny167 \
+ mmcu?avr4=mmcu?atmega48 \
++ mmcu?avr4=mmcu?atmega48a \
+ mmcu?avr4=mmcu?atmega48p \
+ mmcu?avr4=mmcu?atmega8 \
+ mmcu?avr4=mmcu?atmega8515 \
+ mmcu?avr4=mmcu?atmega8535 \
+ mmcu?avr4=mmcu?atmega88 \
++ mmcu?avr4=mmcu?atmega88a \
+ mmcu?avr4=mmcu?atmega88p \
++ mmcu?avr4=mmcu?atmega88pa \
+ mmcu?avr4=mmcu?atmega8hva \
++ mmcu?avr4=mmcu?atmega4hvd \
++ mmcu?avr4=mmcu?atmega8hvd \
+ mmcu?avr4=mmcu?at90pwm1 \
+ mmcu?avr4=mmcu?at90pwm2 \
+ mmcu?avr4=mmcu?at90pwm2b \
+ mmcu?avr4=mmcu?at90pwm3 \
+ mmcu?avr4=mmcu?at90pwm3b \
++ mmcu?avr4=mmcu?at90pwm81 \
+ mmcu?avr5=mmcu?atmega16 \
++ mmcu?avr5=mmcu?atmega16a \
+ mmcu?avr5=mmcu?atmega161 \
+ mmcu?avr5=mmcu?atmega162 \
+ mmcu?avr5=mmcu?atmega163 \
++ mmcu?avr5=mmcu?atmega164a \
+ mmcu?avr5=mmcu?atmega164p \
+ mmcu?avr5=mmcu?atmega165 \
++ mmcu?avr5=mmcu?atmega165a \
+ mmcu?avr5=mmcu?atmega165p \
+ mmcu?avr5=mmcu?atmega168 \
++ mmcu?avr5=mmcu?atmega168a \
+ mmcu?avr5=mmcu?atmega168p \
+ mmcu?avr5=mmcu?atmega169 \
++ mmcu?avr5=mmcu?atmega169a \
+ mmcu?avr5=mmcu?atmega169p \
++ mmcu?avr5=mmcu?atmega169pa \
+ mmcu?avr5=mmcu?atmega32 \
+ mmcu?avr5=mmcu?atmega323 \
++ mmcu?avr5=mmcu?atmega324a \
+ mmcu?avr5=mmcu?atmega324p \
++ mmcu?avr5=mmcu?atmega324pa \
+ mmcu?avr5=mmcu?atmega325 \
+ mmcu?avr5=mmcu?atmega325p \
+ mmcu?avr5=mmcu?atmega3250 \
+ mmcu?avr5=mmcu?atmega3250p \
++ mmcu?avr5=mmcu?atmega328 \
+ mmcu?avr5=mmcu?atmega328p \
+ mmcu?avr5=mmcu?atmega329 \
+ mmcu?avr5=mmcu?atmega329p \
++ mmcu?avr5=mmcu?atmega329pa \
+ mmcu?avr5=mmcu?atmega3290 \
+ mmcu?avr5=mmcu?atmega3290p \
+- mmcu?avr5=mmcu?atmega32hvb \
+ mmcu?avr5=mmcu?atmega406 \
+ mmcu?avr5=mmcu?atmega64 \
+ mmcu?avr5=mmcu?atmega640 \
+ mmcu?avr5=mmcu?atmega644 \
++ mmcu?avr5=mmcu?atmega644a \
+ mmcu?avr5=mmcu?atmega644p \
++ mmcu?avr5=mmcu?atmega644pa \
+ mmcu?avr5=mmcu?atmega645 \
++ mmcu?avr5=mmcu?atmega645a \
++ mmcu?avr5=mmcu?atmega645p \
+ mmcu?avr5=mmcu?atmega6450 \
++ mmcu?avr5=mmcu?atmega6450a \
++ mmcu?avr5=mmcu?atmega6450p \
+ mmcu?avr5=mmcu?atmega649 \
++ mmcu?avr5=mmcu?atmega649a \
++ mmcu?avr5=mmcu?atmega649p \
+ mmcu?avr5=mmcu?atmega6490 \
++ mmcu?avr5=mmcu?atmega6490a \
++ mmcu?avr5=mmcu?atmega6490p \
+ mmcu?avr5=mmcu?atmega16hva \
++ mmcu?avr5=mmcu?atmega16hva2 \
++ mmcu?avr5=mmcu?atmega16hvb \
++ mmcu?avr5=mmcu?atmega32hvb \
+ mmcu?avr5=mmcu?at90can32 \
+ mmcu?avr5=mmcu?at90can64 \
+ mmcu?avr5=mmcu?at90pwm216 \
+ mmcu?avr5=mmcu?at90pwm316 \
++ mmcu?avr5=mmcu?atmega16c1 \
++ mmcu?avr5=mmcu?atmega16m1 \
++ mmcu?avr5=mmcu?atmega16u4 \
++ mmcu?avr5=mmcu?atmega32c1 \
++ mmcu?avr5=mmcu?atmega32m1 \
++ mmcu?avr5=mmcu?atmega32u4 \
++ mmcu?avr5=mmcu?atmega32u6 \
++ mmcu?avr5=mmcu?atmega64c1 \
++ mmcu?avr5=mmcu?atmega64m1 \
++ mmcu?avr5=mmcu?atmega64hve \
++ mmcu?avr5=mmcu?at90scr100 \
+ mmcu?avr5=mmcu?at90usb646 \
+ mmcu?avr5=mmcu?at90usb647 \
+ mmcu?avr5=mmcu?at94k \
+@@ -121,12 +174,15 @@
+ mmcu?avr51=mmcu?atmega1280 \
+ mmcu?avr51=mmcu?atmega1281 \
+ mmcu?avr51=mmcu?atmega1284p \
++ mmcu?avr51=mmcu?atmega128rfa1 \
+ mmcu?avr51=mmcu?at90can128 \
+ mmcu?avr51=mmcu?at90usb1286 \
+ mmcu?avr51=mmcu?at90usb1287 \
+- mmcu?avr6=mmcu?atmega2560 \
+- mmcu?avr6=mmcu?atmega2561
+-
++ mmcu?avr51=mmcu?m3000f \
++ mmcu?avr51=mmcu?m3000s \
++ mmcu?avr51=mmcu?m3001b \
++ mmcu?avr6=mmcu?atmega2560 \
++ mmcu?avr6=mmcu?atmega2561
+ MULTILIB_EXCEPTIONS =
+
+ LIBGCC = stmp-multilib
diff --git a/devel/avr-gcc/files/patch-param-inline-call-cost b/devel/avr-gcc/files/patch-param-inline-call-cost
new file mode 100644
index 000000000000..257e3a3d4f53
--- /dev/null
+++ b/devel/avr-gcc/files/patch-param-inline-call-cost
@@ -0,0 +1,20 @@
+--- gcc/config/avr/avr.c.orig 2010-03-05 17:21:19.000000000 +0100
++++ gcc/config/avr/avr.c 2010-03-05 17:22:02.000000000 +0100
+@@ -46,6 +46,7 @@
+ #include "tm_p.h"
+ #include "target.h"
+ #include "target-def.h"
++#include "params.h"
+ #include "df.h"
+
+ /* Maximal allowed offset for an address in the LD command */
+@@ -419,6 +420,9 @@
+
+ flag_delete_null_pointer_checks = 0;
+
++ if (!PARAM_SET_P (PARAM_INLINE_CALL_COST))
++ set_param_value ("inline-call-cost", 5);
++
+ for (t = avr_mcu_types; t->name; t++)
+ if (strcmp (t->name, avr_mcu_name) == 0)
+ break;
diff --git a/devel/avr-gcc/files/patch-xmega b/devel/avr-gcc/files/patch-xmega
index dea2f61001c6..2a9af30fdfdc 100644
--- a/devel/avr-gcc/files/patch-xmega
+++ b/devel/avr-gcc/files/patch-xmega
@@ -1,7 +1,6 @@
-diff -ur ../gcc-4.3.2.orig/gcc/config/avr/avr.c ./gcc/config/avr/avr.c
---- ../gcc-4.3.2.orig/gcc/config/avr/avr.c 2009-08-11 14:17:06.000000000 +0200
-+++ ./gcc/config/avr/avr.c 2009-08-11 14:38:44.000000000 +0200
-@@ -51,6 +51,7 @@
+--- ./gcc/config/avr/avr.c.orig 2010-03-08 12:55:13.000000000 +0100
++++ ./gcc/config/avr/avr.c 2010-03-08 12:55:36.000000000 +0100
+@@ -55,6 +55,7 @@
static int avr_naked_function_p (tree);
static int interrupt_function_p (tree);
static int signal_function_p (tree);
@@ -9,7 +8,7 @@ diff -ur ../gcc-4.3.2.orig/gcc/config/avr/avr.c ./gcc/config/avr/avr.c
static int avr_OS_task_function_p (tree);
static int avr_regs_to_save (HARD_REG_SET *);
static int sequent_regs_live (void);
-@@ -118,17 +119,24 @@
+@@ -131,17 +132,24 @@
int avr_have_movw_lpmx_p = 0;
static const struct base_arch_s avr_arch_types[] = {
@@ -45,7 +44,7 @@ diff -ur ../gcc-4.3.2.orig/gcc/config/avr/avr.c ./gcc/config/avr/avr.c
};
/* These names are used as the index into the avr_arch_types[] table
-@@ -146,7 +154,14 @@
+@@ -159,7 +167,14 @@
ARCH_AVR4,
ARCH_AVR5,
ARCH_AVR51,
@@ -61,34 +60,43 @@ diff -ur ../gcc-4.3.2.orig/gcc/config/avr/avr.c ./gcc/config/avr/avr.c
};
struct mcu_type_s {
-@@ -297,6 +312,26 @@
+@@ -349,6 +364,35 @@
{ "avr6", ARCH_AVR6, NULL },
{ "atmega2560", ARCH_AVR6, "__AVR_ATmega2560__" },
{ "atmega2561", ARCH_AVR6, "__AVR_ATmega2561__" },
+ /* Enhanced, == 256K. */
+ /* Xmega, <= 8K FLASH. */
+ /* Xmega, > 8K, <= 64K FLASH, <= 64K RAM. */
++ { "avrxmega2", ARCH_AVRXMEGA2, NULL },
++ { "atxmega16a4", ARCH_AVRXMEGA2, "__AVR_ATxmega16A4__" },
++ { "atxmega16d4", ARCH_AVRXMEGA2, "__AVR_ATxmega16D4__" },
++ { "atxmega32d4", ARCH_AVRXMEGA2, "__AVR_ATxmega32D4__" },
+ /* Xmega, > 8K, <= 64K FLASH, > 64K RAM. */
+ { "avrxmega3", ARCH_AVRXMEGA3, NULL },
+ { "atxmega32a4", ARCH_AVRXMEGA3, "__AVR_ATxmega32A4__" },
+ /* Xmega, > 64K, <= 128K FLASH, <= 64K RAM. */
+ { "avrxmega4", ARCH_AVRXMEGA4, NULL },
+ { "atxmega64a3", ARCH_AVRXMEGA4, "__AVR_ATxmega64A3__" },
++ { "atxmega64d3", ARCH_AVRXMEGA4, "__AVR_ATxmega64D3__" },
+ /* Xmega, > 64K, <= 128K FLASH, > 64K RAM. */
+ { "avrxmega5", ARCH_AVRXMEGA5, NULL },
+ { "atxmega64a1", ARCH_AVRXMEGA5, "__AVR_ATxmega64A1__" },
+ /* Xmega, > 128K, <= 256K FLASH, <= 64K RAM. */
+ { "avrxmega6", ARCH_AVRXMEGA6, NULL },
+ { "atxmega128a3", ARCH_AVRXMEGA6, "__AVR_ATxmega128A3__" },
++ { "atxmega128d3", ARCH_AVRXMEGA6, "__AVR_ATxmega128D3__" },
++ { "atxmega192a3", ARCH_AVRXMEGA6, "__AVR_ATxmega192A3__" },
++ { "atxmega192d3", ARCH_AVRXMEGA6, "__AVR_ATxmega192D3__" },
+ { "atxmega256a3", ARCH_AVRXMEGA6, "__AVR_ATxmega256A3__" },
+ { "atxmega256a3b",ARCH_AVRXMEGA6, "__AVR_ATxmega256A3B__" },
++ { "atxmega256d3", ARCH_AVRXMEGA6, "__AVR_ATxmega256D3__" },
+ /* Xmega, > 128K, <= 256K FLASH, > 64K RAM. */
+ { "avrxmega7", ARCH_AVRXMEGA7, NULL },
+ { "atxmega128a1", ARCH_AVRXMEGA7, "__AVR_ATxmega128A1__" },
/* Assembler only. */
{ "avr1", ARCH_AVR1, NULL },
{ "at90s1200", ARCH_AVR1, "__AVR_AT90S1200__" },
-@@ -470,6 +505,21 @@
+@@ -531,6 +575,21 @@
return a != NULL_TREE;
}
@@ -110,7 +118,7 @@ diff -ur ../gcc-4.3.2.orig/gcc/config/avr/avr.c ./gcc/config/avr/avr.c
/* Return nonzero if FUNC is a OS_task function. */
static int
-@@ -629,6 +679,7 @@
+@@ -690,6 +749,7 @@
cfun->machine->is_naked = avr_naked_function_p (current_function_decl);
cfun->machine->is_interrupt = interrupt_function_p (current_function_decl);
cfun->machine->is_signal = signal_function_p (current_function_decl);
@@ -118,7 +126,7 @@ diff -ur ../gcc-4.3.2.orig/gcc/config/avr/avr.c ./gcc/config/avr/avr.c
cfun->machine->is_OS_task = avr_OS_task_function_p (current_function_decl);
/* Prologue: naked. */
-@@ -664,20 +715,78 @@
+@@ -725,17 +785,48 @@
/* Push SREG. */
insn = emit_move_insn (tmp_reg_rtx,
@@ -138,11 +146,6 @@ diff -ur ../gcc-4.3.2.orig/gcc/config/avr/avr.c ./gcc/config/avr/avr.c
+ insn = emit_move_insn (pushbyte, tmp_reg_rtx);
+ RTX_FRAME_RELATED_P (insn) = 1;
+
-+ /* Set RAMPD to 0. */
-+ insn = emit_move_insn (gen_rtx_MEM (QImode, GEN_INT (AVR_RAMPD_ADDR)),
-+ const0_rtx);
-+ RTX_FRAME_RELATED_P (insn) = 1;
-+
+ /* Push RAMPX. */
+ if (TEST_HARD_REG_BIT (set, REG_X) && TEST_HARD_REG_BIT (set, REG_X + 1))
+ {
@@ -151,11 +154,6 @@ diff -ur ../gcc-4.3.2.orig/gcc/config/avr/avr.c ./gcc/config/avr/avr.c
+ RTX_FRAME_RELATED_P (insn) = 1;
+ insn = emit_move_insn (pushbyte, tmp_reg_rtx);
+ RTX_FRAME_RELATED_P (insn) = 1;
-+
-+ /* Set RAMPX to 0. */
-+ insn = emit_move_insn (gen_rtx_MEM (QImode, GEN_INT (AVR_RAMPX_ADDR)),
-+ const0_rtx);
-+ RTX_FRAME_RELATED_P (insn) = 1;
+ }
+
+ /* Push RAMPY. */
@@ -166,11 +164,6 @@ diff -ur ../gcc-4.3.2.orig/gcc/config/avr/avr.c ./gcc/config/avr/avr.c
+ RTX_FRAME_RELATED_P (insn) = 1;
+ insn = emit_move_insn (pushbyte, tmp_reg_rtx);
+ RTX_FRAME_RELATED_P (insn) = 1;
-+
-+ /* Set RAMPY to 0. */
-+ insn = emit_move_insn (gen_rtx_MEM (QImode, GEN_INT (AVR_RAMPY_ADDR)),
-+ const0_rtx);
-+ RTX_FRAME_RELATED_P (insn) = 1;
+ }
+ }
+
@@ -184,22 +177,55 @@ diff -ur ../gcc-4.3.2.orig/gcc/config/avr/avr.c ./gcc/config/avr/avr.c
RTX_FRAME_RELATED_P (insn) = 1;
insn = emit_move_insn (pushbyte, tmp_reg_rtx);
RTX_FRAME_RELATED_P (insn) = 1;
+@@ -744,9 +835,46 @@
+ /* Clear zero reg. */
+ insn = emit_move_insn (zero_reg_rtx, const0_rtx);
+ RTX_FRAME_RELATED_P (insn) = 1;
+-
++
+ /* Prevent any attempt to delete the setting of ZERO_REG! */
+ emit_insn (gen_rtx_USE (VOIDmode, zero_reg_rtx));
+
-+ /*
-+ Clearing the RAMPZ register is needed only if it is used for data
-+ space access.
-+ */
-+ if (AVR_HAVE_RAMPX_Y_D)
++ /*
++ Clear RAMP? registers if used for data access in the interrupt/signal
++ context. Do this after the zero register has been explictly cleared.
++ */
++ if (AVR_HAVE_RAMPX_Y_D)
++ {
++ /* Set RAMPD to 0. */
++ insn = emit_move_insn (gen_rtx_MEM (QImode, GEN_INT (AVR_RAMPD_ADDR)),
++ const0_rtx);
++ RTX_FRAME_RELATED_P (insn) = 1;
++
++ if (TEST_HARD_REG_BIT (set, REG_X) && TEST_HARD_REG_BIT (set, REG_X + 1))
++ {
++ /* Set RAMPX to 0. */
++ insn = emit_move_insn (gen_rtx_MEM (QImode, GEN_INT (AVR_RAMPX_ADDR)),
++ const0_rtx);
++ RTX_FRAME_RELATED_P (insn) = 1;
++ }
++
++ if (TEST_HARD_REG_BIT (set, REG_Y) && TEST_HARD_REG_BIT (set, REG_Y + 1))
++ {
++ /* Set RAMPY to 0. */
++ insn = emit_move_insn (gen_rtx_MEM (QImode, GEN_INT (AVR_RAMPY_ADDR)),
++ const0_rtx);
++ RTX_FRAME_RELATED_P (insn) = 1;
++ }
++
++ if(AVR_HAVE_RAMPZ
++ && (TEST_HARD_REG_BIT (set, REG_Z) && TEST_HARD_REG_BIT (set, REG_Z + 1)))
+ {
+ /* Set RAMPZ to 0. */
+ insn = emit_move_insn (gen_rtx_MEM (QImode, GEN_INT (AVR_RAMPZ_ADDR)),
-+ const0_rtx);
++ const0_rtx);
+ RTX_FRAME_RELATED_P (insn) = 1;
+ }
- }
-
- /* Clear zero reg. */
-@@ -949,14 +1058,39 @@
++ }
+ }
+ if (minimize && (frame_pointer_needed
+ || (AVR_2_BYTE_PC && live_seq > 6)
+@@ -1010,14 +1138,39 @@
&& (TEST_HARD_REG_BIT (set, REG_Z) && TEST_HARD_REG_BIT (set, REG_Z + 1)))
{
emit_insn (gen_popqi (tmp_reg_rtx));
@@ -241,7 +267,7 @@ diff -ur ../gcc-4.3.2.orig/gcc/config/avr/avr.c ./gcc/config/avr/avr.c
tmp_reg_rtx);
/* Restore tmp REG. */
-@@ -1725,8 +1859,9 @@
+@@ -1786,8 +1939,9 @@
}
/* Use simple load of stack pointer if no interrupts are used
or inside main or signal function prologue where they disabled. */
@@ -253,7 +279,7 @@ diff -ur ../gcc-4.3.2.orig/gcc/config/avr/avr.c ./gcc/config/avr/avr.c
&& cfun->machine->is_signal
&& prologue_epilogue_contains (insn)))
{
-@@ -1735,7 +1870,8 @@
+@@ -1796,7 +1950,8 @@
AS2 (out,__SP_L__,%A1));
}
/* In interrupt prolog we know interrupts are enabled. */
@@ -263,7 +289,7 @@ diff -ur ../gcc-4.3.2.orig/gcc/config/avr/avr.c ./gcc/config/avr/avr.c
&& cfun->machine->is_interrupt
&& prologue_epilogue_contains (insn))
{
-@@ -1745,12 +1881,21 @@
+@@ -1806,12 +1961,21 @@
"sei" CR_TAB
AS2 (out,__SP_L__,%A1));
}
@@ -291,7 +317,7 @@ diff -ur ../gcc-4.3.2.orig/gcc/config/avr/avr.c ./gcc/config/avr/avr.c
}
else if (test_hard_reg_class (STACK_REG, src))
{
-@@ -1885,7 +2030,7 @@
+@@ -1946,7 +2110,7 @@
if (CONSTANT_ADDRESS_P (x))
{
@@ -300,7 +326,7 @@ diff -ur ../gcc-4.3.2.orig/gcc/config/avr/avr.c ./gcc/config/avr/avr.c
{
*l = 1;
return AS2 (in,%0,__SREG__);
-@@ -1893,7 +2038,8 @@
+@@ -1954,7 +2118,8 @@
if (avr_io_address_p (x, 1))
{
*l = 1;
@@ -310,7 +336,7 @@ diff -ur ../gcc-4.3.2.orig/gcc/config/avr/avr.c ./gcc/config/avr/avr.c
}
*l = 2;
return AS2 (lds,%0,%1);
-@@ -2081,8 +2227,9 @@
+@@ -2142,8 +2307,9 @@
if (avr_io_address_p (base, 2))
{
*l = 2;
@@ -322,7 +348,7 @@ diff -ur ../gcc-4.3.2.orig/gcc/config/avr/avr.c ./gcc/config/avr/avr.c
}
*l = 4;
return (AS2 (lds,%A0,%A1) CR_TAB
-@@ -2573,7 +2720,7 @@
+@@ -2634,7 +2800,7 @@
if (CONSTANT_ADDRESS_P (x))
{
@@ -331,7 +357,7 @@ diff -ur ../gcc-4.3.2.orig/gcc/config/avr/avr.c ./gcc/config/avr/avr.c
{
*l = 1;
return AS2 (out,__SREG__,%1);
-@@ -2581,7 +2728,8 @@
+@@ -2642,7 +2808,8 @@
if (avr_io_address_p (x, 1))
{
*l = 1;
@@ -341,7 +367,7 @@ diff -ur ../gcc-4.3.2.orig/gcc/config/avr/avr.c ./gcc/config/avr/avr.c
}
*l = 2;
return AS2 (sts,%0,%1);
-@@ -2660,11 +2808,20 @@
+@@ -2721,11 +2888,20 @@
if (avr_io_address_p (base, 2))
{
*l = 2;
@@ -366,7 +392,7 @@ diff -ur ../gcc-4.3.2.orig/gcc/config/avr/avr.c ./gcc/config/avr/avr.c
}
if (reg_base > 0)
{
-@@ -2679,11 +2836,20 @@
+@@ -2740,11 +2916,20 @@
AS2 (adiw,r26,1) CR_TAB
AS2 (st,X,__tmp_reg__));
else
@@ -392,7 +418,7 @@ diff -ur ../gcc-4.3.2.orig/gcc/config/avr/avr.c ./gcc/config/avr/avr.c
}
else
{
-@@ -2691,14 +2857,27 @@
+@@ -2752,14 +2937,27 @@
return *l=2, (AS2 (st,X+,%A1) CR_TAB
AS2 (st,X,%B1));
else
@@ -425,7 +451,7 @@ diff -ur ../gcc-4.3.2.orig/gcc/config/avr/avr.c ./gcc/config/avr/avr.c
}
else if (GET_CODE (base) == PLUS)
{
-@@ -2709,48 +2888,104 @@
+@@ -2770,48 +2968,104 @@
if (reg_base != REG_Y)
fatal_insn ("incorrect insn:",insn);
@@ -559,7 +585,7 @@ diff -ur ../gcc-4.3.2.orig/gcc/config/avr/avr.c ./gcc/config/avr/avr.c
{
if (REGNO (XEXP (base, 0)) == REG_X)
{
-@@ -2771,7 +3006,7 @@
+@@ -2832,7 +3086,7 @@
*l = 2;
return (AS2 (st,%0,%A1) CR_TAB
@@ -568,7 +594,7 @@ diff -ur ../gcc-4.3.2.orig/gcc/config/avr/avr.c ./gcc/config/avr/avr.c
}
fatal_insn ("unknown move insn:",insn);
return "";
-@@ -4651,6 +4886,7 @@
+@@ -4712,6 +4966,7 @@
{ "progmem", 0, 0, false, false, false, avr_handle_progmem_attribute },
{ "signal", 0, 0, true, false, false, avr_handle_fndecl_attribute },
{ "interrupt", 0, 0, true, false, false, avr_handle_fndecl_attribute },
@@ -576,7 +602,7 @@ diff -ur ../gcc-4.3.2.orig/gcc/config/avr/avr.c ./gcc/config/avr/avr.c
{ "naked", 0, 0, false, true, true, avr_handle_fntype_attribute },
{ "OS_task", 0, 0, false, true, true, avr_handle_fntype_attribute },
{ NULL, 0, 0, false, false, false, NULL }
-@@ -4739,6 +4975,14 @@
+@@ -4800,6 +5055,14 @@
func_name);
}
}
@@ -591,7 +617,7 @@ diff -ur ../gcc-4.3.2.orig/gcc/config/avr/avr.c ./gcc/config/avr/avr.c
}
return NULL_TREE;
-@@ -4864,7 +5108,8 @@
+@@ -4994,7 +5257,8 @@
/* fprintf (asm_out_file, "\t.arch %s\n", avr_mcu_name);*/
fputs ("__SREG__ = 0x3f\n"
"__SP_H__ = 0x3e\n"
@@ -601,7 +627,7 @@ diff -ur ../gcc-4.3.2.orig/gcc/config/avr/avr.c ./gcc/config/avr/avr.c
fputs ("__tmp_reg__ = 0\n"
"__zero_reg__ = 1\n", asm_out_file);
-@@ -5754,15 +5999,18 @@
+@@ -5888,15 +6152,18 @@
return !(regno & 1);
}
@@ -625,7 +651,7 @@ diff -ur ../gcc-4.3.2.orig/gcc/config/avr/avr.c ./gcc/config/avr/avr.c
}
const char *
-@@ -5940,16 +6188,17 @@
+@@ -6074,16 +6341,17 @@
if (GET_CODE (operands[1]) == CONST_INT)
{
@@ -647,9 +673,8 @@ diff -ur ../gcc-4.3.2.orig/gcc/config/avr/avr.c ./gcc/config/avr/avr.c
if (comp == EQ)
output_asm_insn (AS2 (sbrs,__tmp_reg__,%2), operands);
else
-diff -ur ../gcc-4.3.2.orig/gcc/config/avr/avr.h ./gcc/config/avr/avr.h
---- ../gcc-4.3.2.orig/gcc/config/avr/avr.h 2009-08-11 14:17:06.000000000 +0200
-+++ ./gcc/config/avr/avr.h 2009-08-11 14:40:01.000000000 +0200
+--- ./gcc/config/avr/avr.h.orig 2010-03-08 12:55:09.000000000 +0100
++++ ./gcc/config/avr/avr.h 2010-03-08 12:55:36.000000000 +0100
@@ -44,8 +44,11 @@
/* Core have 'EICALL' and 'EIJMP' instructions. */
int have_eijmp_eicall;
@@ -716,37 +741,52 @@ diff -ur ../gcc-4.3.2.orig/gcc/config/avr/avr.h ./gcc/config/avr/avr.h
#define TARGET_VERSION fprintf (stderr, " (GNU assembler syntax)");
#define OVERRIDE_OPTIONS avr_override_options ()
-@@ -848,6 +878,12 @@
+@@ -935,6 +965,20 @@
mmcu=m3000*|\
mmcu=m3001*: -m avr5}\
%{mmcu=atmega256*:-m avr6}\
++%{mmcu=atxmega16a4|\
++ mmcu=atxmega16d4|\
++ mmcu=atxmega32d4:-m avrxmega2}\
+%{mmcu=atxmega32a4:-m avrxmega3} \
-+%{mmcu=atxmega64a3:-m avrxmega4} \
++%{mmcu=atxmega64a3|\
++ mmcu=atxmega64d3:-m avrxmega4} \
+%{mmcu=atxmega64a1:-m avrxmega5} \
-+%{mmcu=atxmega128a3| \
-+ mmcu=atxmega256a3*:-m avrxmega6} \
++%{mmcu=atxmega128a3|\
++ mmcu=atxmega128d3|\
++ mmcu=atxmega192a3|\
++ mmcu=atxmega192d3|\
++ mmcu=atxmega256a3*|\
++ mmcu=atxmega256d3:-m avrxmega6} \
+%{mmcu=atxmega128a1:-m avrxmega7} \
- %{mmcu=atmega324*|\
- mmcu=atmega325*|\
- mmcu=atmega328p|\
-@@ -1024,7 +1060,15 @@
+ %{mmcu=atmega324a|\
+ mmcu=atmega324p|\
+ mmcu=atmega324pa|\
+@@ -1190,7 +1234,22 @@
%{mmcu=m3000s:crtm3000s.o%s} \
%{mmcu=m3001b:crtm3001b.o%s} \
%{mmcu=atmega2560|mmcu=avr6:crtm2560.o%s} \
-%{mmcu=atmega2561:crtm2561.o%s}"
+%{mmcu=atmega2561:crtm2561.o%s} \
++%{mmcu=avrxmega2|mmcu=atxmega32d4:crtx32d4.o%s} \
++%{mmcu=atxmega16a4:crtx16a4.o%s} \
++%{mmcu=atxmega16d4:crtx16d4.o%s} \
+%{mmcu=atxmega3|mmcu=atxmega32a4:crtx32a4.o%s} \
+%{mmcu=atxmega4|mmcu=atxmega64a3:crtx64a3.o%s} \
++%{mmcu=atxmega64d3:crtx64d3.o%s} \
+%{mmcu=atxmega5|mmcu=atxmega64a1:crtx64a1.o%s} \
+%{mmcu=atxmega6|mmcu=atxmega128a3:crtx128a3.o%s} \
++%{mmcu=atxmega128d3:crtx128d3.o%s}\
++%{mmcu=atxmega192a3:crtx192a3.o%s}\
++%{mmcu=atxmega192d3:crtx192d3.o%s}\
+%{mmcu=atxmega256a3:crtx256a3.o%s} \
+%{mmcu=atxmega256a3b:crtx256a3b.o%s} \
++%{mmcu=atxmega256d3:crtx256d3.o%s} \
+%{mmcu=atxmega7|mmcu=atxmega128a1:crtx128a1.o%s}"
-+
#define EXTRA_SPECS {"crt_binutils", CRT_BINUTILS_SPECS},
-@@ -1086,8 +1130,12 @@
+@@ -1252,8 +1311,12 @@
/* 'true' - if current function is a signal function
as specified by the "signal" attribute. */
int is_signal;
@@ -760,9 +800,45 @@ diff -ur ../gcc-4.3.2.orig/gcc/config/avr/avr.h ./gcc/config/avr/avr.h
as specified by the "OS_task" attribute. */
int is_OS_task;
};
-diff -ur ../gcc-4.3.2.orig/gcc/config/avr/avr.md ./gcc/config/avr/avr.md
---- ../gcc-4.3.2.orig/gcc/config/avr/avr.md 2009-08-11 14:16:22.000000000 +0200
-+++ ./gcc/config/avr/avr.md 2009-08-11 14:34:10.000000000 +0200
+--- ./gcc/config/avr/t-avr.orig 2010-03-08 12:55:09.000000000 +0100
++++ ./gcc/config/avr/t-avr 2010-03-08 12:55:36.000000000 +0100
+@@ -37,8 +37,8 @@
+
+ FPBIT = fp-bit.c
+
+-MULTILIB_OPTIONS = mmcu=avr2/mmcu=avr25/mmcu=avr3/mmcu=avr31/mmcu=avr35/mmcu=avr4/mmcu=avr5/mmcu=avr51/mmcu=avr6
+-MULTILIB_DIRNAMES = avr2 avr25 avr3 avr31 avr35 avr4 avr5 avr51 avr6
++MULTILIB_OPTIONS = mmcu=avr2/mmcu=avr25/mmcu=avr3/mmcu=avr31/mmcu=avr35/mmcu=avr4/mmcu=avr5/mmcu=avr51/mmcu=avr6/mmcu=avrxmega2/mmcu=avrxmega3/mmcu=avrxmega4/mmcu=avrxmega5/mmcu=avrxmega6/mmcu=avrxmega7
++MULTILIB_DIRNAMES = avr2 avr25 avr3 avr31 avr35 avr4 avr5 avr51 avr6 avrxmega2 avrxmega3 avrxmega4 avrxmega5 avrxmega6 avrxmega7
+
+ # The many avr2 matches are not listed here - this is the default.
+ MULTILIB_MATCHES = \
+@@ -182,7 +182,22 @@
+ mmcu?avr51=mmcu?m3000s \
+ mmcu?avr51=mmcu?m3001b \
+ mmcu?avr6=mmcu?atmega2560 \
+- mmcu?avr6=mmcu?atmega2561
++ mmcu?avr6=mmcu?atmega2561 \
++ mmcu?avrxmega2=mmcu?atxmega16a4 \
++ mmcu?avrxmega2=mmcu?atxmega16d4 \
++ mmcu?avrxmega2=mmcu?atxmega32d4 \
++ mmcu?avrxmega3=mmcu?atxmega32a4 \
++ mmcu?avrxmega4=mmcu?atxmega64a3 \
++ mmcu?avrxmega4=mmcu?atxmega64d3 \
++ mmcu?avrxmega5=mmcu?atxmega64a1 \
++ mmcu?avrxmega6=mmcu?atxmega128a3 \
++ mmcu?avrxmega6=mmcu?atxmega128d3 \
++ mmcu?avrxmega6=mmcu?atxmega192a3 \
++ mmcu?avrxmega6=mmcu?atxmega192d3 \
++ mmcu?avrxmega6=mmcu?atxmega256a3 \
++ mmcu?avrxmega6=mmcu?atxmega256a3b \
++ mmcu?avrxmega6=mmcu?atxmega256d3 \
++ mmcu?avrxmega7=mmcu?atxmega128a1
+ MULTILIB_EXCEPTIONS =
+
+ LIBGCC = stmp-multilib
+--- ./gcc/config/avr/avr.md.orig 2010-03-08 12:54:57.000000000 +0100
++++ ./gcc/config/avr/avr.md 2010-03-08 12:55:36.000000000 +0100
@@ -47,9 +47,6 @@
(TMP_REGNO 0) ; temporary register r0
(ZERO_REGNO 1) ; zero register r1
@@ -772,8 +848,8 @@ diff -ur ../gcc-4.3.2.orig/gcc/config/avr/avr.md ./gcc/config/avr/avr.md
-
(UNSPEC_STRLEN 0)
(UNSPEC_INDEX_JMP 1)
- (UNSPEC_SEI 2)
-@@ -2669,7 +2666,8 @@
+ (UNSPEC_SWAP 2)
+@@ -2677,7 +2674,8 @@
"(optimize > 0)"
{
operands[2] = GEN_INT (exact_log2 (~INTVAL (operands[1]) & 0xff));
@@ -783,7 +859,7 @@ diff -ur ../gcc-4.3.2.orig/gcc/config/avr/avr.md ./gcc/config/avr/avr.md
}
[(set_attr "length" "1")
(set_attr "cc" "none")])
-@@ -2681,7 +2679,8 @@
+@@ -2689,7 +2687,8 @@
"(optimize > 0)"
{
operands[2] = GEN_INT (exact_log2 (INTVAL (operands[1]) & 0xff));
@@ -793,10 +869,9 @@ diff -ur ../gcc-4.3.2.orig/gcc/config/avr/avr.md ./gcc/config/avr/avr.md
}
[(set_attr "length" "1")
(set_attr "cc" "none")])
-diff -ur ../gcc-4.3.2.orig/gcc/config/avr/predicates.md ./gcc/config/avr/predicates.md
---- ../gcc-4.3.2.orig/gcc/config/avr/predicates.md 2007-08-02 12:49:31.000000000 +0200
-+++ ./gcc/config/avr/predicates.md 2009-08-11 14:34:10.000000000 +0200
-@@ -45,12 +45,16 @@
+--- ./gcc/config/avr/predicates.md.orig 2010-03-08 12:54:57.000000000 +0100
++++ ./gcc/config/avr/predicates.md 2010-03-08 12:55:36.000000000 +0100
+@@ -50,12 +50,16 @@
;; Return true if OP is a valid address for lower half of I/O space.
(define_predicate "low_io_address_operand"
(and (match_code "const_int")
@@ -815,34 +890,3 @@ diff -ur ../gcc-4.3.2.orig/gcc/config/avr/predicates.md ./gcc/config/avr/predica
;; Return 1 if OP is the zero constant for MODE.
(define_predicate "const0_operand"
-diff -ur ../gcc-4.3.2.orig/gcc/config/avr/t-avr ./gcc/config/avr/t-avr
---- ../gcc-4.3.2.orig/gcc/config/avr/t-avr 2009-08-11 14:17:06.000000000 +0200
-+++ ./gcc/config/avr/t-avr 2009-08-11 14:39:16.000000000 +0200
-@@ -37,8 +37,8 @@
-
- FPBIT = fp-bit.c
-
--MULTILIB_OPTIONS = mmcu=avr2/mmcu=avr25/mmcu=avr3/mmcu=avr31/mmcu=avr35/mmcu=avr4/mmcu=avr5/mmcu=avr51/mmcu=avr6
--MULTILIB_DIRNAMES = avr2 avr25 avr3 avr31 avr35 avr4 avr5 avr51 avr6
-+MULTILIB_OPTIONS = mmcu=avr2/mmcu=avr25/mmcu=avr3/mmcu=avr31/mmcu=avr35/mmcu=avr4/mmcu=avr5/mmcu=avr51/mmcu=avr6/mmcu=avrxmega3/mmcu=avrxmega4/mmcu=avrxmega5/mmcu=avrxmega6/mmcu=avrxmega7
-+MULTILIB_DIRNAMES = avr2 avr25 avr3 avr31 avr35 avr4 avr5 avr51 avr6 avrxmega3 avrxmega4 avrxmega5 avrxmega6 avrxmega7
-
- # The many avr2 matches are not listed here - this is the default.
- MULTILIB_MATCHES = \
-@@ -143,7 +143,15 @@
- mmcu?avr51=mmcu?m3000s \
- mmcu?avr51=mmcu?m3001b \
- mmcu?avr6=mmcu?atmega2560 \
-- mmcu?avr6=mmcu?atmega2561
-+ mmcu?avr6=mmcu?atmega2561 \
-+ mmcu?avrxmega3=mmcu?atxmega32a4 \
-+ mmcu?avrxmega4=mmcu?atxmega64a3 \
-+ mmcu?avrxmega5=mmcu?atxmega64a1 \
-+ mmcu?avrxmega6=mmcu?atxmega128a3 \
-+ mmcu?avrxmega6=mmcu?atxmega256a3 \
-+ mmcu?avrxmega6=mmcu?atxmega256a3b \
-+ mmcu?avrxmega7=mmcu?atxmega128a1
-+
-
- MULTILIB_EXCEPTIONS =
-
diff --git a/devel/avr-gcc/files/patch-xx-os_main b/devel/avr-gcc/files/patch-xx-os_main
index 599661469682..8b69a3c18c69 100644
--- a/devel/avr-gcc/files/patch-xx-os_main
+++ b/devel/avr-gcc/files/patch-xx-os_main
@@ -1,61 +1,14 @@
-Not committed
-Adds OS_main attribute feature.
-Written by Anatoly Sokolov.
-Apply patch after XMEGA patch.
---------------------------------------------------------------------------------
-Index: gcc/function.c
-===================================================================
---- gcc/function.c (revision 133747)
-+++ gcc/function.c (working copy)
-@@ -4756,6 +4756,14 @@
- }
-
- int
-+prologue_contains (const_rtx insn)
-+{
-+ if (contains (insn, &prologue))
-+ return 1;
-+ return 0;
-+}
-+
-+int
- prologue_epilogue_contains (const_rtx insn)
- {
- if (contains (insn, &prologue))
-Index: gcc/rtl.h
-===================================================================
---- gcc/rtl.h (revision 133747)
-+++ gcc/rtl.h (working copy)
-@@ -2128,6 +2128,7 @@
-
- /* In function.c */
- extern void reposition_prologue_and_epilogue_notes (void);
-+extern int prologue_contains (const_rtx);
- extern int prologue_epilogue_contains (const_rtx);
- extern int sibcall_epilogue_contains (const_rtx);
- extern void mark_temp_addr_taken (rtx);
---- gcc/config/avr/avr.h.orig 2008-03-31 16:48:03.477537900 -0600
-+++ gcc/config/avr/avr.h 2008-03-31 17:07:51.442457900 -0600
-@@ -1095,4 +1095,8 @@ struct machine_function GTY(())
- /* 'true' - if current function is a task function
- as specified by the "OS_task" attribute. */
- int is_OS_task;
-+
-+ /* 'true' - if current function is a 'main' function
-+ as specified by the "OS_main" attribute. */
-+ int is_OS_main;
- };
---- gcc/config/avr/avr.c.orig Mon Mar 31 19:47:54 2008
-+++ gcc/config/avr/avr.c Mon Mar 31 20:50:08 2008
-@@ -53,6 +53,7 @@ static int interrupt_function_p (tree);
+--- ./gcc/config/avr/avr.c.orig 2010-03-05 18:01:20.000000000 +0100
++++ ./gcc/config/avr/avr.c 2010-03-05 18:01:51.000000000 +0100
+@@ -57,6 +57,7 @@
static int signal_function_p (tree);
static int nmi_function_p (tree);
static int avr_OS_task_function_p (tree);
+static int avr_OS_main_function_p (tree);
static int avr_regs_to_save (HARD_REG_SET *);
- static void avr_args (HARD_REG_SET *);
- static int sequent_regs_live (HARD_REG_SET *);
-@@ -509,6 +513,19 @@ avr_OS_task_function_p (tree func)
+ static int sequent_regs_live (void);
+ static const char *ptrreg_to_str (int);
+@@ -603,6 +604,19 @@
return a != NULL_TREE;
}
@@ -75,7 +28,7 @@ Index: gcc/rtl.h
/* Return the number of hard registers to push/pop in the prologue/epilogue
of the current function, and optionally store these registers in SET. */
-@@ -527,9 +544,10 @@ avr_regs_to_save (HARD_REG_SET *set)
+@@ -621,9 +635,10 @@
count = 0;
/* No need to save any registers if the function never returns or
@@ -88,7 +41,7 @@ Index: gcc/rtl.h
return 0;
for (reg = 0; reg < 32; reg++)
-@@ -646,6 +664,8 @@ expand_prologue (void)
+@@ -742,6 +757,8 @@
rtx pushword = gen_rtx_MEM (HImode,
gen_rtx_POST_DEC (HImode, stack_pointer_rtx));
rtx insn;
@@ -97,7 +50,7 @@ Index: gcc/rtl.h
last_insn_address = 0;
-@@ -655,6 +675,7 @@ expand_prologue (void)
+@@ -751,6 +768,7 @@
cfun->machine->is_signal = signal_function_p (current_function_decl);
cfun->machine->is_nmi = nmi_function_p (current_function_decl);
cfun->machine->is_OS_task = avr_OS_task_function_p (current_function_decl);
@@ -105,7 +58,7 @@ Index: gcc/rtl.h
/* Prologue: naked. */
if (cfun->machine->is_naked)
-@@ -669,6 +690,7 @@ expand_prologue (void)
+@@ -764,6 +782,7 @@
&& !cfun->machine->is_interrupt
&& !cfun->machine->is_signal
&& !cfun->machine->is_OS_task
@@ -113,7 +66,7 @@ Index: gcc/rtl.h
&& live_seq);
if (cfun->machine->is_interrupt || cfun->machine->is_signal)
-@@ -738,7 +760,7 @@ expand_prologue (void)
+@@ -903,7 +922,7 @@
}
if (frame_pointer_needed)
{
@@ -122,7 +75,7 @@ Index: gcc/rtl.h
{
/* Push frame pointer. */
insn = emit_move_insn (pushword, frame_pointer_rtx);
-@@ -768,7 +790,7 @@ expand_prologue (void)
+@@ -933,7 +952,7 @@
if (TARGET_TINY_STACK)
{
if (size < -63 || size > 63)
@@ -131,7 +84,7 @@ Index: gcc/rtl.h
/* The high byte (r29) doesn't change - prefer 'subi' (1 cycle)
over 'sbiw' (2 cycles, same size). */
-@@ -780,7 +802,6 @@ expand_prologue (void)
+@@ -945,7 +964,6 @@
myfp = frame_pointer_rtx;
}
/* Calculate length. */
@@ -139,7 +92,7 @@ Index: gcc/rtl.h
method1_length =
get_attr_length (gen_move_insn (frame_pointer_rtx, stack_pointer_rtx));
method1_length +=
-@@ -878,6 +899,7 @@ expand_epilogue (void)
+@@ -1043,6 +1061,7 @@
HARD_REG_SET set;
int minimize;
HOST_WIDE_INT size = get_frame_size();
@@ -147,7 +100,7 @@ Index: gcc/rtl.h
/* epilogue: naked */
if (cfun->machine->is_naked)
-@@ -893,6 +915,7 @@ expand_epilogue (void)
+@@ -1057,6 +1076,7 @@
&& !cfun->machine->is_interrupt
&& !cfun->machine->is_signal
&& !cfun->machine->is_OS_task
@@ -155,7 +108,7 @@ Index: gcc/rtl.h
&& live_seq);
if (minimize && (frame_pointer_needed || live_seq > 4))
-@@ -955,7 +978,7 @@ expand_epilogue (void)
+@@ -1119,7 +1139,7 @@
emit_move_insn (stack_pointer_rtx, frame_pointer_rtx);
}
}
@@ -164,7 +117,7 @@ Index: gcc/rtl.h
{
/* Restore previous frame_pointer. */
emit_insn (gen_pophi (frame_pointer_rtx));
-@@ -1787,10 +1810,18 @@ output_movhi (rtx insn, rtx operands[],
+@@ -1939,10 +1959,18 @@
}
/* Use simple load of stack pointer if no interrupts are used
or inside main or signal function prologue where they disabled. */
@@ -185,7 +138,7 @@ Index: gcc/rtl.h
&& prologue_epilogue_contains (insn)))
{
*l = 2;
-@@ -4821,6 +4852,7 @@ const struct attribute_spec avr_attribut
+@@ -4969,6 +4997,7 @@
{ "nmi", 0, 0, true, false, false, avr_handle_fndecl_attribute },
{ "naked", 0, 0, false, true, true, avr_handle_fntype_attribute },
{ "OS_task", 0, 0, false, true, true, avr_handle_fntype_attribute },
@@ -193,3 +146,41 @@ Index: gcc/rtl.h
{ NULL, 0, 0, false, false, false, NULL }
};
+--- ./gcc/config/avr/avr.h.orig 2010-03-05 18:01:20.000000000 +0100
++++ ./gcc/config/avr/avr.h 2010-03-05 18:01:51.000000000 +0100
+@@ -1320,4 +1320,8 @@
+ /* 'true' - if current function is a task function
+ as specified by the "OS_task" attribute. */
+ int is_OS_task;
++
++ /* 'true' - if current function is a 'main' function
++ as specified by the "OS_main" attribute. */
++ int is_OS_main;
+ };
+--- ./gcc/function.c.orig 2009-06-19 23:44:24.000000000 +0200
++++ ./gcc/function.c 2010-03-05 18:01:51.000000000 +0100
+@@ -4757,6 +4757,14 @@
+ }
+
+ int
++prologue_contains (const_rtx insn)
++{
++ if (contains (insn, &prologue))
++ return 1;
++ return 0;
++}
++
++int
+ prologue_epilogue_contains (const_rtx insn)
+ {
+ if (contains (insn, &prologue))
+--- ./gcc/rtl.h.orig 2009-07-14 11:32:55.000000000 +0200
++++ ./gcc/rtl.h 2010-03-05 18:01:51.000000000 +0100
+@@ -2145,6 +2145,7 @@
+
+ /* In function.c */
+ extern void reposition_prologue_and_epilogue_notes (void);
++extern int prologue_contains (const_rtx);
+ extern int prologue_epilogue_contains (const_rtx);
+ extern int sibcall_epilogue_contains (const_rtx);
+ extern void mark_temp_addr_taken (rtx);
diff --git a/devel/avr-gcc/pkg-plist b/devel/avr-gcc/pkg-plist
index c04f4cbf69e5..0a2b9f2ad4f9 100644
--- a/devel/avr-gcc/pkg-plist
+++ b/devel/avr-gcc/pkg-plist
@@ -5,64 +5,66 @@ bin/avr-c++
bin/avr-cpp
bin/avr-g++
bin/avr-gcc
-bin/avr-gcc-4.3.2
+bin/avr-gcc-4.3.4
bin/avr-gccbug
-lib/gcc/avr/4.3.2/avr25/libgcc.a
-lib/gcc/avr/4.3.2/avr25/libgcov.a
-lib/gcc/avr/4.3.2/avr3/libgcc.a
-lib/gcc/avr/4.3.2/avr3/libgcov.a
-lib/gcc/avr/4.3.2/avr31/libgcc.a
-lib/gcc/avr/4.3.2/avr31/libgcov.a
-lib/gcc/avr/4.3.2/avr35/libgcc.a
-lib/gcc/avr/4.3.2/avr35/libgcov.a
-lib/gcc/avr/4.3.2/avr4/libgcc.a
-lib/gcc/avr/4.3.2/avr4/libgcov.a
-lib/gcc/avr/4.3.2/avr5/libgcc.a
-lib/gcc/avr/4.3.2/avr5/libgcov.a
-lib/gcc/avr/4.3.2/avr51/libgcc.a
-lib/gcc/avr/4.3.2/avr51/libgcov.a
-lib/gcc/avr/4.3.2/avr6/libgcc.a
-lib/gcc/avr/4.3.2/avr6/libgcov.a
-lib/gcc/avr/4.3.2/avrxmega3/libgcc.a
-lib/gcc/avr/4.3.2/avrxmega3/libgcov.a
-lib/gcc/avr/4.3.2/avrxmega4/libgcc.a
-lib/gcc/avr/4.3.2/avrxmega4/libgcov.a
-lib/gcc/avr/4.3.2/avrxmega5/libgcc.a
-lib/gcc/avr/4.3.2/avrxmega5/libgcov.a
-lib/gcc/avr/4.3.2/avrxmega6/libgcc.a
-lib/gcc/avr/4.3.2/avrxmega6/libgcov.a
-lib/gcc/avr/4.3.2/avrxmega7/libgcc.a
-lib/gcc/avr/4.3.2/avrxmega7/libgcov.a
-lib/gcc/avr/4.3.2/include-fixed/README
-lib/gcc/avr/4.3.2/include-fixed/fixed
-lib/gcc/avr/4.3.2/include-fixed/limits.h
-lib/gcc/avr/4.3.2/include-fixed/syslimits.h
-lib/gcc/avr/4.3.2/include/float.h
-lib/gcc/avr/4.3.2/include/iso646.h
-lib/gcc/avr/4.3.2/include/stdarg.h
-lib/gcc/avr/4.3.2/include/stdbool.h
-lib/gcc/avr/4.3.2/include/stddef.h
-lib/gcc/avr/4.3.2/include/stdfix.h
-lib/gcc/avr/4.3.2/include/tgmath.h
-lib/gcc/avr/4.3.2/include/unwind.h
-lib/gcc/avr/4.3.2/include/varargs.h
-lib/gcc/avr/4.3.2/install-tools/fixinc_list
-lib/gcc/avr/4.3.2/install-tools/gsyslimits.h
-lib/gcc/avr/4.3.2/install-tools/include/README
-lib/gcc/avr/4.3.2/install-tools/include/limits.h
-lib/gcc/avr/4.3.2/install-tools/macro_list
-lib/gcc/avr/4.3.2/install-tools/mkheaders.conf
-lib/gcc/avr/4.3.2/libgcc.a
-lib/gcc/avr/4.3.2/libgcov.a
-libexec/gcc/avr/4.3.2/cc1
-libexec/gcc/avr/4.3.2/cc1plus
-libexec/gcc/avr/4.3.2/collect2
-libexec/gcc/avr/4.3.2/install-tools/fix-header
-libexec/gcc/avr/4.3.2/install-tools/fixinc.sh
-libexec/gcc/avr/4.3.2/install-tools/fixincl
-libexec/gcc/avr/4.3.2/install-tools/fixproto
-libexec/gcc/avr/4.3.2/install-tools/mkheaders
-libexec/gcc/avr/4.3.2/install-tools/mkinstalldirs
+lib/gcc/avr/4.3.4/avr25/libgcc.a
+lib/gcc/avr/4.3.4/avr25/libgcov.a
+lib/gcc/avr/4.3.4/avr3/libgcc.a
+lib/gcc/avr/4.3.4/avr3/libgcov.a
+lib/gcc/avr/4.3.4/avr31/libgcc.a
+lib/gcc/avr/4.3.4/avr31/libgcov.a
+lib/gcc/avr/4.3.4/avr35/libgcc.a
+lib/gcc/avr/4.3.4/avr35/libgcov.a
+lib/gcc/avr/4.3.4/avr4/libgcc.a
+lib/gcc/avr/4.3.4/avr4/libgcov.a
+lib/gcc/avr/4.3.4/avr5/libgcc.a
+lib/gcc/avr/4.3.4/avr5/libgcov.a
+lib/gcc/avr/4.3.4/avr51/libgcc.a
+lib/gcc/avr/4.3.4/avr51/libgcov.a
+lib/gcc/avr/4.3.4/avr6/libgcc.a
+lib/gcc/avr/4.3.4/avr6/libgcov.a
+lib/gcc/avr/4.3.4/avrxmega2/libgcc.a
+lib/gcc/avr/4.3.4/avrxmega2/libgcov.a
+lib/gcc/avr/4.3.4/avrxmega3/libgcc.a
+lib/gcc/avr/4.3.4/avrxmega3/libgcov.a
+lib/gcc/avr/4.3.4/avrxmega4/libgcc.a
+lib/gcc/avr/4.3.4/avrxmega4/libgcov.a
+lib/gcc/avr/4.3.4/avrxmega5/libgcc.a
+lib/gcc/avr/4.3.4/avrxmega5/libgcov.a
+lib/gcc/avr/4.3.4/avrxmega6/libgcc.a
+lib/gcc/avr/4.3.4/avrxmega6/libgcov.a
+lib/gcc/avr/4.3.4/avrxmega7/libgcc.a
+lib/gcc/avr/4.3.4/avrxmega7/libgcov.a
+lib/gcc/avr/4.3.4/include-fixed/README
+lib/gcc/avr/4.3.4/include-fixed/fixed
+lib/gcc/avr/4.3.4/include-fixed/limits.h
+lib/gcc/avr/4.3.4/include-fixed/syslimits.h
+lib/gcc/avr/4.3.4/include/float.h
+lib/gcc/avr/4.3.4/include/iso646.h
+lib/gcc/avr/4.3.4/include/stdarg.h
+lib/gcc/avr/4.3.4/include/stdbool.h
+lib/gcc/avr/4.3.4/include/stddef.h
+lib/gcc/avr/4.3.4/include/stdfix.h
+lib/gcc/avr/4.3.4/include/tgmath.h
+lib/gcc/avr/4.3.4/include/unwind.h
+lib/gcc/avr/4.3.4/include/varargs.h
+lib/gcc/avr/4.3.4/install-tools/fixinc_list
+lib/gcc/avr/4.3.4/install-tools/gsyslimits.h
+lib/gcc/avr/4.3.4/install-tools/include/README
+lib/gcc/avr/4.3.4/install-tools/include/limits.h
+lib/gcc/avr/4.3.4/install-tools/macro_list
+lib/gcc/avr/4.3.4/install-tools/mkheaders.conf
+lib/gcc/avr/4.3.4/libgcc.a
+lib/gcc/avr/4.3.4/libgcov.a
+libexec/gcc/avr/4.3.4/cc1
+libexec/gcc/avr/4.3.4/cc1plus
+libexec/gcc/avr/4.3.4/collect2
+libexec/gcc/avr/4.3.4/install-tools/fix-header
+libexec/gcc/avr/4.3.4/install-tools/fixinc.sh
+libexec/gcc/avr/4.3.4/install-tools/fixincl
+libexec/gcc/avr/4.3.4/install-tools/fixproto
+libexec/gcc/avr/4.3.4/install-tools/mkheaders
+libexec/gcc/avr/4.3.4/install-tools/mkinstalldirs
share/locale/be/LC_MESSAGES/cpplib.mo
share/locale/be/LC_MESSAGES/gcc.mo
share/locale/ca/LC_MESSAGES/cpplib.mo
@@ -74,8 +76,11 @@ share/locale/el/LC_MESSAGES/cpplib.mo
share/locale/el/LC_MESSAGES/gcc.mo
share/locale/es/LC_MESSAGES/cpplib.mo
share/locale/es/LC_MESSAGES/gcc.mo
+share/locale/fi/LC_MESSAGES/gcc.mo
share/locale/fr/LC_MESSAGES/cpplib.mo
share/locale/fr/LC_MESSAGES/gcc.mo
+share/locale/id/LC_MESSAGES/cpplib.mo
+share/locale/id/LC_MESSAGES/gcc.mo
share/locale/ja/LC_MESSAGES/cpplib.mo
share/locale/ja/LC_MESSAGES/gcc.mo
share/locale/nl/LC_MESSAGES/cpplib.mo
@@ -92,28 +97,29 @@ share/locale/zh_CN/LC_MESSAGES/cpplib.mo
share/locale/zh_CN/LC_MESSAGES/gcc.mo
share/locale/zh_TW/LC_MESSAGES/cpplib.mo
share/locale/zh_TW/LC_MESSAGES/gcc.mo
-@dirrm lib/gcc/avr/4.3.2/avr25
-@dirrm lib/gcc/avr/4.3.2/avr3
-@dirrm lib/gcc/avr/4.3.2/avr31
-@dirrm lib/gcc/avr/4.3.2/avr35
-@dirrm lib/gcc/avr/4.3.2/avr4
-@dirrm lib/gcc/avr/4.3.2/avr5
-@dirrm lib/gcc/avr/4.3.2/avr51
-@dirrm lib/gcc/avr/4.3.2/avr6
-@dirrm lib/gcc/avr/4.3.2/avrxmega3
-@dirrm lib/gcc/avr/4.3.2/avrxmega4
-@dirrm lib/gcc/avr/4.3.2/avrxmega5
-@dirrm lib/gcc/avr/4.3.2/avrxmega6
-@dirrm lib/gcc/avr/4.3.2/avrxmega7
-@dirrm lib/gcc/avr/4.3.2/include
-@dirrm lib/gcc/avr/4.3.2/include-fixed
-@dirrm lib/gcc/avr/4.3.2/install-tools/include
-@dirrm lib/gcc/avr/4.3.2/install-tools
-@dirrm lib/gcc/avr/4.3.2
+@dirrm lib/gcc/avr/4.3.4/avr25
+@dirrm lib/gcc/avr/4.3.4/avr3
+@dirrm lib/gcc/avr/4.3.4/avr31
+@dirrm lib/gcc/avr/4.3.4/avr35
+@dirrm lib/gcc/avr/4.3.4/avr4
+@dirrm lib/gcc/avr/4.3.4/avr5
+@dirrm lib/gcc/avr/4.3.4/avr51
+@dirrm lib/gcc/avr/4.3.4/avr6
+@dirrm lib/gcc/avr/4.3.4/avrxmega2
+@dirrm lib/gcc/avr/4.3.4/avrxmega3
+@dirrm lib/gcc/avr/4.3.4/avrxmega4
+@dirrm lib/gcc/avr/4.3.4/avrxmega5
+@dirrm lib/gcc/avr/4.3.4/avrxmega6
+@dirrm lib/gcc/avr/4.3.4/avrxmega7
+@dirrm lib/gcc/avr/4.3.4/include
+@dirrm lib/gcc/avr/4.3.4/include-fixed
+@dirrm lib/gcc/avr/4.3.4/install-tools/include
+@dirrm lib/gcc/avr/4.3.4/install-tools
+@dirrm lib/gcc/avr/4.3.4
@dirrm lib/gcc/avr
@dirrm lib/gcc
-@dirrm libexec/gcc/avr/4.3.2/install-tools
-@dirrm libexec/gcc/avr/4.3.2
+@dirrm libexec/gcc/avr/4.3.4/install-tools
+@dirrm libexec/gcc/avr/4.3.4
@dirrm libexec/gcc/avr
@dirrm libexec/gcc
@dirrm avr/bin