diff --git a/toolchain/gcc/patches/4.3.5/930-avr32_support.patch b/toolchain/gcc/patches/4.3.5/930-avr32_support.patch
index 29d749f7aa04469de24bd5161dc41029dd82e1c1..0613f3fea7918e92d0cefb596365e05bcd841b1c 100644
--- a/toolchain/gcc/patches/4.3.5/930-avr32_support.patch
+++ b/toolchain/gcc/patches/4.3.5/930-avr32_support.patch
@@ -22,7 +22,7 @@
  	 must do it earlier where we know the signedness of the arg.  */
 --- /dev/null
 +++ b/gcc/config/avr32/avr32.c
-@@ -0,0 +1,7858 @@
+@@ -0,0 +1,7869 @@
 +/*
 +   Target hooks and helper functions for AVR32.
 +   Copyright 2003-2006 Atmel Corporation.
@@ -6526,12 +6526,23 @@
 +                        continue;
 +
 +		      set = single_set (scan);
-+		      if (set && rtx_equal_p (src_reg, SET_DEST (set)))
-+			{
-+			  link = scan;
-+			  break;
-+			}
-+
++                      // Fix for bug #11763 : the following if condition
++                      // has been modified and else part is included to 
++                      // set the link to NULL_RTX. 
++                      // if (set && rtx_equal_p (src_reg, SET_DEST (set)))
++                      if (set && (REGNO(src_reg) == REGNO(SET_DEST(set))))
++                       {
++                         if (rtx_equal_p (src_reg, SET_DEST (set)))
++			  {
++			    link = scan;
++			    break;
++                          }
++                         else
++                          {
++                            link = NULL_RTX;
++                            break;
++                          }
++                       }
 +                    }
 +
 +
@@ -17204,7 +17215,7 @@
 +   (set_attr "cc" "none")])
 --- /dev/null
 +++ b/gcc/config/avr32/lib1funcs.S
-@@ -0,0 +1,2874 @@
+@@ -0,0 +1,2902 @@
 +/* Macro for moving immediate value to register. */	
 +.macro mov_imm	reg, imm
 +.if	(((\imm & 0xfffff) == \imm) || ((\imm | 0xfff00000) == \imm))
@@ -18243,6 +18254,7 @@
 +        brne    __avr32_f64_add_return_nan
 +        mov     r10, 0  /* Generate Inf in r11, r10 */
 +	mov_imm r11, 0x7ff00000
++        or      r11, r12 /* Put sign bit back */
 +        ldm     sp++, r5, r6, r7, pc/* opL Inf, return Inf */
 +__avr32_f64_add_return_nan:     
 +        mov     r10, -1 /* Generate NaN in r11, r10 */
@@ -18595,25 +18607,30 @@
 +#endif  
 + 
 +        /* compare magnitude of op1 and op2 */
++        st.w    --sp, lr
++        st.w    --sp, r7
 +        lsl     r11,1                   /* Remove sign bit of op1 */
 +        srcs    r12                     /* Sign op1 to lsb of r12*/
-+	subfeq	r10, 0
-+	breq	3f			/* op1 zero */
 +        lsl     r9,1                    /* Remove sign bit of op2 */
++        srcs    r7
 +        rol     r12                     /* Sign op2 to lsb of lr, sign bit op1 bit 1 of r12*/
 +	
 + 
 +        /* Check for Nan */
-+	pushm	lr
-+	mov_imm	lr, 0xffe00000
++        mov_imm lr, 0xffe00000
 +        cp.w    r10,0
 +        cpc     r11,lr
 +        brhi    0f      /* We have NaN */
 +        cp.w    r8,0
 +        cpc     r9,lr
 +        brhi    0f      /* We have NaN */
-+	popm	lr
-+ 
++
++        cp.w    r11, 0
++        subfeq  r10, 0
++        breq    3f			/* op1 zero */
++        ld.w    r7, sp++
++        ld.w    lr, sp++
++
 +        cp.w    r12,3                   /* both operands negative ?*/    
 +        breq    1f
 + 
@@ -18659,18 +18676,22 @@
 +#endif
 +
 +0:      
++        ld.w    r7, sp++
 +        popm    pc, r12=0
 +#endif
 + 
 +3:
-+        lsl     r9,1                   /* Remove sign bit of op1 */
++        cp.w    r7, 1          /* Check sign bit from r9 */
 +#ifdef L_avr32_f64_cmp_ge
-+        srcs    r12		       /* If op2 is negative then op1 >= op2. */	
++        sreq    r12		       /* If op2 is negative then op1 >= op2. */	
 +#endif
 +#ifdef L_avr32_f64_cmp_lt
-+        srcc    r12		       /* If op2 is positve then op1 <= op2. */
++        srne    r12		       /* If op2 is positve then op1 <= op2. */
 +#endif
-+	subfeq	r8, 0		       
++        cp.w    r9, 0
++        subfeq  r8, 0
++        ld.w    r7, sp++
++        ld.w    lr, sp++
 +#ifdef L_avr32_f64_cmp_ge
 +	reteq	1		       /* Both operands are zero. Return true. */
 +#endif
@@ -18930,7 +18951,7 @@
 +        brne    16f     /* Return NaN if op1 is NaN */
 +        /* Op1 is inf check op2 */
 +        lsr     r6, r9, 20 /* Extract exponent */
-+        cbr     r6, 8       /* Clear sign bit */
++        cbr     r6, 11      /* Clear sign bit */
 +        cp      r6, 0x7ff
 +        brne    17f     /* Inf/number gives inf, return inf */
 +        rjmp    16f     /* The rest gives NaN*/
@@ -19046,10 +19067,14 @@
 +	 
 +16:     /* Return NaN. */
 +        mov     r11, -1
-+        mov     r10, -1
++        mov     r10, 0
 +        ldm     sp++, r0, r1, r2, r3, r4, r5, r6, r7,pc
 +        
-+17:     /* Return INF. */
++17:     
++        /* Check if op1 is zero. */
++        or      r4, r10, r11
++        breq    __avr32_f64_div_op1_zero
++        /* Return INF. */
 +        mov     r11, lr /*Get correct sign*/
 +        andh    r11, 0x8000, COH
 +        orh     r11, 0x7ff0
@@ -19463,10 +19488,13 @@
 + 
 +        /* Unpack */
 +        lsl     r12,1
-+        reteq   0                       /* Return zero if op1 is zero */
 +        lsl     r11,1
 +        breq    4f                      /* Check op2 for zero */
-+        
++
++        tst     r12, r12
++        moveq   r9, 0
++        breq    12f
++
 +        /* Unpack op1*/ 
 +        /* exp: r9 */
 +        /* sf:  r12 */
@@ -19485,9 +19513,14 @@
 +        breq    13f /*If number is subnormal*/
 +        cp      r10, 0xff
 +        brhs    3f  /* Check op2 for NaN or Inf */      
-+        
 +        lsl     r11,7
 +        sbr     r11, 31 /*Implicit bit*/
++
++        cp.w    r9, 0
++        subfeq  r12, 0
++        reteq   0                       /* op1 is zero and op2 is not zero */
++                                        /* or NaN so return zero */
++
 +14:     
 + 
 +        /* For UC3, store with predecrement is faster than stm */
@@ -19656,9 +19689,14 @@
 +        reteq   0       /* Return zero if number/inf*/
 +        ret     -1      /* Return NaN*/
 +4:
-+        /* Op2 is zero ? */
++        /* Op1 is zero ? */
 +        tst     r12,r12
 +        reteq   -1      /* 0.0/0.0 is NaN */
++        /* Op1 is Nan? */
++        lsr     r9, r12, 24
++        breq    11f /*If number is subnormal*/
++        cp      r9, 0xff
++        brhs    2b  /* Check op1 for NaN or Inf */
 +        /* Nonzero/0.0 is Inf. Sign bit will be shifted in before returning*/
 +	mov_imm	r12, 0xff000000
 +        rjmp    __divsf_return_op1
@@ -20007,6 +20045,7 @@
 +        lsl     r11,8                   /* check mantissa */
 +        movne   r11, -1                 /* Return NaN */
 +        moveq   r11, r10                /* Return inf */
++        mov     r10, 0
 +        rjmp    __extendsfdf_return_op1
 +#endif                  
 + 
@@ -20054,7 +20093,7 @@
 +        /* NaN or inf */
 +        cbr     r12,31                  /* clear implicit bit */
 +        retne   -1                      /* Return NaN if mantissa not zero */
-+	mov_imm	r12, 0xff000000
++	mov_imm	r12, 0x7f800000
 +        ret     r12                     /* Return inf */
 + 
 +3:      /* Result is subnormal. Adjust it.*/
@@ -21297,7 +21336,7 @@
  	;;
 +avr32*-*-linux*)
 +	tm_file="dbxelf.h elfos.h linux.h avr32/linux-elf.h avr32/avr32.h "
-+	tmake_file="t-linux avr32/t-avr32 avr32/t-elf"
++	tmake_file="t-linux avr32/t-avr32-linux"
 +	extra_parts="crtbegin.o crtbeginS.o crtend.o crtendS.o"
 +	extra_modes=avr32/avr32-modes.def
 +	gnu_ld=yes
@@ -22294,10 +22333,15 @@
  // different sentry variables for construction and destruction.
 --- a/libgcc/config.host
 +++ b/libgcc/config.host
-@@ -240,6 +240,8 @@ arm-*-pe*)
+@@ -240,6 +240,13 @@ arm-*-pe*)
  	;;
  arm*-*-kaos*)
  	;;
++avr32-*-linux*)
++	# No need to build crtbeginT.o on uClibc systems. Should probably be
++	# moved to the OS specific section above.
++	extra_parts="crtbegin.o crtbeginS.o crtend.o crtendS.o"
++	;;
 +avr32-*-*)
 +	;;
  avr-*-rtems*)
diff --git a/toolchain/gcc/patches/4.3.5/939-avr32_fix_linux_build.patch b/toolchain/gcc/patches/4.3.5/939-avr32_fix_linux_build.patch
deleted file mode 100644
index 1569592360c08d6d43092ab5403b763cc2fafd18..0000000000000000000000000000000000000000
--- a/toolchain/gcc/patches/4.3.5/939-avr32_fix_linux_build.patch
+++ /dev/null
@@ -1,25 +0,0 @@
---- a/gcc/config.gcc
-+++ b/gcc/config.gcc
-@@ -836,7 +836,7 @@ avr-*-*)
- 	;;
- avr32*-*-linux*)
- 	tm_file="dbxelf.h elfos.h linux.h avr32/linux-elf.h avr32/avr32.h "
--	tmake_file="t-linux avr32/t-avr32 avr32/t-elf"
-+	tmake_file="t-linux avr32/t-avr32-linux"
- 	extra_parts="crtbegin.o crtbeginS.o crtend.o crtendS.o"
- 	extra_modes=avr32/avr32-modes.def
- 	gnu_ld=yes
---- a/libgcc/config.host
-+++ b/libgcc/config.host
-@@ -240,6 +240,11 @@ arm-*-pe*)
- 	;;
- arm*-*-kaos*)
- 	;;
-+avr32-*-linux*)
-+	# No need to build crtbeginT.o on uClibc systems. Should probably be
-+	# moved to the OS specific section above.
-+	extra_parts="crtbegin.o crtbeginS.o crtend.o crtendS.o"
-+	;;
- avr32-*-*)
- 	;;
- avr-*-rtems*)
diff --git a/toolchain/gcc/patches/4.3.5/940-avr32_fix_f32_to_f64.patch b/toolchain/gcc/patches/4.3.5/940-avr32_fix_f32_to_f64.patch
deleted file mode 100644
index b19f84e29de69a5a0b49ff8cd65763c1c88c9e5b..0000000000000000000000000000000000000000
--- a/toolchain/gcc/patches/4.3.5/940-avr32_fix_f32_to_f64.patch
+++ /dev/null
@@ -1,10 +0,0 @@
---- a/gcc/config/avr32/lib1funcs.S
-+++ b/gcc/config/avr32/lib1funcs.S
-@@ -2800,6 +2800,7 @@ __extendsfdf_return_op1:
-         lsl     r11,8                   /* check mantissa */
-         movne   r11, -1                 /* Return NaN */
-         moveq   r11, r10                /* Return inf */
-+        mov     r10, 0
-         rjmp    __extendsfdf_return_op1
- #endif                  
-  
diff --git a/toolchain/gcc/patches/4.3.5/941-avr32_fix_f64_add.patch b/toolchain/gcc/patches/4.3.5/941-avr32_fix_f64_add.patch
deleted file mode 100644
index b3322cb94648c32bf65f9e0284083de2bbee3001..0000000000000000000000000000000000000000
--- a/toolchain/gcc/patches/4.3.5/941-avr32_fix_f64_add.patch
+++ /dev/null
@@ -1,10 +0,0 @@
---- a/gcc/config/avr32/lib1funcs.S
-+++ b/gcc/config/avr32/lib1funcs.S
-@@ -1036,6 +1036,7 @@ __avr32_f64_add_opL_nan_or_inf:
-         brne    __avr32_f64_add_return_nan
-         mov     r10, 0  /* Generate Inf in r11, r10 */
- 	mov_imm r11, 0x7ff00000
-+        or      r11, r12 /* Put sign bit back */
-         ldm     sp++, r5, r6, r7, pc/* opL Inf, return Inf */
- __avr32_f64_add_return_nan:     
-         mov     r10, -1 /* Generate NaN in r11, r10 */
diff --git a/toolchain/gcc/patches/4.3.5/942-avr32_fix_32bit_div.patch b/toolchain/gcc/patches/4.3.5/942-avr32_fix_32bit_div.patch
deleted file mode 100644
index af66a6d5005a3f5525d2e7b53655bf0e5b0e6a66..0000000000000000000000000000000000000000
--- a/toolchain/gcc/patches/4.3.5/942-avr32_fix_32bit_div.patch
+++ /dev/null
@@ -1,34 +0,0 @@
---- a/gcc/config/avr32/lib1funcs.S
-+++ b/gcc/config/avr32/lib1funcs.S
-@@ -2257,10 +2257,13 @@ __avr32_f32_div:
-  
-         /* Unpack */
-         lsl     r12,1
--        reteq   0                       /* Return zero if op1 is zero */
-         lsl     r11,1
-         breq    4f                      /* Check op2 for zero */
--        
-+
-+        tst     r12, r12
-+        moveq   r9, 0
-+        breq    12
-+
-         /* Unpack op1*/ 
-         /* exp: r9 */
-         /* sf:  r12 */
-@@ -2279,9 +2282,14 @@ __avr32_f32_div:
-         breq    13f /*If number is subnormal*/
-         cp      r10, 0xff
-         brhs    3f  /* Check op2 for NaN or Inf */      
--        
-         lsl     r11,7
-         sbr     r11, 31 /*Implicit bit*/
-+
-+        cp.w    r9, 0
-+        subfeq  r12, 0
-+        reteq   0                       /* op1 is zero and op2 is not zero */
-+                                        /* or NaN so return zero */
-+
- 14:     
-  
-         /* For UC3, store with predecrement is faster than stm */
diff --git a/toolchain/gcc/patches/4.3.5/943-avr32_fix_f64_cmp.patch b/toolchain/gcc/patches/4.3.5/943-avr32_fix_f64_cmp.patch
deleted file mode 100644
index b5d526c2a601a5434b3ab68a914b85734ce2d101..0000000000000000000000000000000000000000
--- a/toolchain/gcc/patches/4.3.5/943-avr32_fix_f64_cmp.patch
+++ /dev/null
@@ -1,66 +0,0 @@
---- a/gcc/config/avr32/lib1funcs.S
-+++ b/gcc/config/avr32/lib1funcs.S
-@@ -1389,25 +1389,30 @@ __avr32_f64_cmp_lt:
- #endif  
-  
-         /* compare magnitude of op1 and op2 */
-+        st.w    --sp, lr
-+        st.w    --sp, r7
-         lsl     r11,1                   /* Remove sign bit of op1 */
-         srcs    r12                     /* Sign op1 to lsb of r12*/
--	subfeq	r10, 0
--	breq	3f			/* op1 zero */
-         lsl     r9,1                    /* Remove sign bit of op2 */
-+        srcs    r7
-         rol     r12                     /* Sign op2 to lsb of lr, sign bit op1 bit 1 of r12*/
- 	
-  
-         /* Check for Nan */
--	pushm	lr
--	mov_imm	lr, 0xffe00000
-+        mov_imm lr, 0xffe00000
-         cp.w    r10,0
-         cpc     r11,lr
-         brhi    0f      /* We have NaN */
-         cp.w    r8,0
-         cpc     r9,lr
-         brhi    0f      /* We have NaN */
--	popm	lr
-- 
-+
-+        cp.w    r11, 0
-+        subfeq  r10, 0
-+        breq    3f			/* op1 zero */
-+        ld.w    r7, sp++
-+        ld.w    lr, sp++
-+
-         cp.w    r12,3                   /* both operands negative ?*/    
-         breq    1f
-  
-@@ -1453,18 +1458,22 @@ __avr32_f64_cmp_lt:
- #endif
- 
- 0:      
-+        ld.w    r7, sp++
-         popm    pc, r12=0
- #endif
-  
- 3:
--        lsl     r9,1                   /* Remove sign bit of op1 */
-+        cp.w    r7, 1          /* Check sign bit from r9 */
- #ifdef L_avr32_f64_cmp_ge
--        srcs    r12		       /* If op2 is negative then op1 >= op2. */	
-+        sreq    r12		       /* If op2 is negative then op1 >= op2. */	
- #endif
- #ifdef L_avr32_f64_cmp_lt
--        srcc    r12		       /* If op2 is positve then op1 <= op2. */
-+        srne    r12		       /* If op2 is positve then op1 <= op2. */
- #endif
--	subfeq	r8, 0		       
-+        cp.w    r9, 0
-+        subfeq  r8, 0
-+        ld.w    r7, sp++
-+        ld.w    lr, sp++
- #ifdef L_avr32_f64_cmp_ge
- 	reteq	1		       /* Both operands are zero. Return true. */
- #endif
diff --git a/toolchain/gcc/patches/4.3.5/944-avr32_fix_f64_div.patch b/toolchain/gcc/patches/4.3.5/944-avr32_fix_f64_div.patch
deleted file mode 100644
index 24a973f6870e58b7d864290b6a3927d708f26693..0000000000000000000000000000000000000000
--- a/toolchain/gcc/patches/4.3.5/944-avr32_fix_f64_div.patch
+++ /dev/null
@@ -1,20 +0,0 @@
---- a/gcc/config/avr32/lib1funcs.S
-+++ b/gcc/config/avr32/lib1funcs.S
-@@ -1733,7 +1733,7 @@ __avr32_f64_div_round_subnormal:
-         brne    16f     /* Return NaN if op1 is NaN */
-         /* Op1 is inf check op2 */
-         lsr     r6, r9, 20 /* Extract exponent */
--        cbr     r6, 8       /* Clear sign bit */
-+        cbr     r6, 11      /* Clear sign bit */
-         cp      r6, 0x7ff
-         brne    17f     /* Inf/number gives inf, return inf */
-         rjmp    16f     /* The rest gives NaN*/
-@@ -1849,7 +1849,7 @@ __avr32_f64_div_res_subnormal:/* Divide
- 	 
- 16:     /* Return NaN. */
-         mov     r11, -1
--        mov     r10, -1
-+        mov     r10, 0
-         ldm     sp++, r0, r1, r2, r3, r4, r5, r6, r7,pc
-         
- 17:     /* Return INF. */
diff --git a/toolchain/gcc/patches/4.3.5/945-avr32_fix_f64_to_f32.patch b/toolchain/gcc/patches/4.3.5/945-avr32_fix_f64_to_f32.patch
deleted file mode 100644
index 3d22b3924bd6923702457d0c483eb22462173713..0000000000000000000000000000000000000000
--- a/toolchain/gcc/patches/4.3.5/945-avr32_fix_f64_to_f32.patch
+++ /dev/null
@@ -1,11 +0,0 @@
---- a/gcc/config/avr32/lib1funcs.S
-+++ b/gcc/config/avr32/lib1funcs.S
-@@ -2866,7 +2866,7 @@ __truncdfsf_return_op1:
-         /* NaN or inf */
-         cbr     r12,31                  /* clear implicit bit */
-         retne   -1                      /* Return NaN if mantissa not zero */
--	mov_imm	r12, 0xff000000
-+	mov_imm	r12, 0x7f800000
-         ret     r12                     /* Return inf */
-  
- 3:      /* Result is subnormal. Adjust it.*/
diff --git a/toolchain/gcc/patches/4.3.5/946-avr32_fix_32bit_div_2.patch b/toolchain/gcc/patches/4.3.5/946-avr32_fix_32bit_div_2.patch
deleted file mode 100644
index 3f2bfb35c3bcbea9158bd5fbb09f0dcb9dca97d7..0000000000000000000000000000000000000000
--- a/toolchain/gcc/patches/4.3.5/946-avr32_fix_32bit_div_2.patch
+++ /dev/null
@@ -1,27 +0,0 @@
---- a/gcc/config/avr32/lib1funcs.S
-+++ b/gcc/config/avr32/lib1funcs.S
-@@ -2271,7 +2271,7 @@ __avr32_f32_div:
- 
-         tst     r12, r12
-         moveq   r9, 0
--        breq    12
-+        breq    12f
- 
-         /* Unpack op1*/ 
-         /* exp: r9 */
-@@ -2467,9 +2467,14 @@ __divsf_return_op1:
-         reteq   0       /* Return zero if number/inf*/
-         ret     -1      /* Return NaN*/
- 4:
--        /* Op2 is zero ? */
-+        /* Op1 is zero ? */
-         tst     r12,r12
-         reteq   -1      /* 0.0/0.0 is NaN */
-+        /* Op1 is Nan? */
-+        lsr     r9, r12, 24
-+        breq    11f /*If number is subnormal*/
-+        cp      r9, 0xff
-+        brhs    2b  /* Check op1 for NaN or Inf */
-         /* Nonzero/0.0 is Inf. Sign bit will be shifted in before returning*/
- 	mov_imm	r12, 0xff000000
-         rjmp    __divsf_return_op1
diff --git a/toolchain/gcc/patches/4.3.5/948-avr32_fix_reorg_opt_bug11763.patch b/toolchain/gcc/patches/4.3.5/948-avr32_fix_reorg_opt_bug11763.patch
deleted file mode 100644
index 6616640045d85841d3efd13b739b888781e6bc31..0000000000000000000000000000000000000000
--- a/toolchain/gcc/patches/4.3.5/948-avr32_fix_reorg_opt_bug11763.patch
+++ /dev/null
@@ -1,32 +0,0 @@
---- a/gcc/config/avr32/avr32.c
-+++ b/gcc/config/avr32/avr32.c
-@@ -6501,12 +6501,23 @@ avr32_reorg_optimization (void)
-                         continue;
- 
- 		      set = single_set (scan);
--		      if (set && rtx_equal_p (src_reg, SET_DEST (set)))
--			{
--			  link = scan;
--			  break;
--			}
--
-+                      // Fix for bug #11763 : the following if condition
-+                      // has been modified and else part is included to 
-+                      // set the link to NULL_RTX. 
-+                      // if (set && rtx_equal_p (src_reg, SET_DEST (set)))
-+                      if (set && (REGNO(src_reg) == REGNO(SET_DEST(set))))
-+                       {
-+                         if (rtx_equal_p (src_reg, SET_DEST (set)))
-+			  {
-+			    link = scan;
-+			    break;
-+                          }
-+                         else
-+                          {
-+                            link = NULL_RTX;
-+                            break;
-+                          }
-+                       }
-                     }
- 
- 
diff --git a/toolchain/gcc/patches/4.3.5/949-avr32_nan_by_zero_div.patch b/toolchain/gcc/patches/4.3.5/949-avr32_nan_by_zero_div.patch
deleted file mode 100644
index c5f880668a3b411a7c0d3e925402ae0fff5aed08..0000000000000000000000000000000000000000
--- a/toolchain/gcc/patches/4.3.5/949-avr32_nan_by_zero_div.patch
+++ /dev/null
@@ -1,15 +0,0 @@
---- a/gcc/config/avr32/lib1funcs.S
-+++ b/gcc/config/avr32/lib1funcs.S
-@@ -1852,7 +1852,11 @@ __avr32_f64_div_res_subnormal:/* Divide
-         mov     r10, 0
-         ldm     sp++, r0, r1, r2, r3, r4, r5, r6, r7,pc
-         
--17:     /* Return INF. */
-+17:     
-+        /* Check if op1 is zero. */
-+        or      r4, r10, r11
-+        breq    __avr32_f64_div_op1_zero
-+        /* Return INF. */
-         mov     r11, lr /*Get correct sign*/
-         andh    r11, 0x8000, COH
-         orh     r11, 0x7ff0