diff --git a/toolchain/gcc/common.mk b/toolchain/gcc/common.mk
index eec9d20de12c5bade248debccf99541cdb8fe4c7..ebfcfc1ccb353a776d1fd9d3e498250efe184c71 100644
--- a/toolchain/gcc/common.mk
+++ b/toolchain/gcc/common.mk
@@ -34,10 +34,10 @@ ifeq ($(findstring linaro, $(CONFIG_GCC_VERSION)),linaro)
       PKG_COMP:=bz2
     endif
     ifeq ($(CONFIG_GCC_VERSION),"4.8-linaro")
-      PKG_REV:=4.8-2013.08
-      PKG_VERSION:=4.8.2
+      PKG_REV:=4.8-2013.11
+      PKG_VERSION:=4.8.3
       PKG_VERSION_MAJOR:=4.8
-      PKG_MD5SUM:=668e0f4250e35aff554b66accc9a3105
+      PKG_MD5SUM:=729f4ac34ad404892ecafb991bea2da5
       PKG_COMP:=xz
     endif
     PKG_SOURCE_URL:=http://launchpad.net/gcc-linaro/$(PKG_VERSION_MAJOR)/$(PKG_REV)/+download/
diff --git a/toolchain/gcc/patches/4.8-linaro/020-fix_pr58670.patch b/toolchain/gcc/patches/4.8-linaro/020-fix_pr58670.patch
deleted file mode 100644
index 8a4ae1b76e31484e51a29988b8cdf885159434e4..0000000000000000000000000000000000000000
--- a/toolchain/gcc/patches/4.8-linaro/020-fix_pr58670.patch
+++ /dev/null
@@ -1,167 +0,0 @@
---- a/gcc/cfgrtl.c
-+++ b/gcc/cfgrtl.c
-@@ -1784,10 +1784,18 @@ commit_one_edge_insertion (edge e)
-     }
- 
-   /* If the source has one successor and the edge is not abnormal,
--     insert there.  Except for the entry block.  */
-+     insert there.  Except for the entry block.
-+     Don't do this if the predecessor ends in a jump other than
-+     unconditional simple jump.  E.g. for asm goto that points all
-+     its labels at the fallthru basic block, we can't insert instructions
-+     before the asm goto, as the asm goto can have various of side effects,
-+     and can't emit instructions after the asm goto, as it must end
-+     the basic block.  */
-   else if ((e->flags & EDGE_ABNORMAL) == 0
- 	   && single_succ_p (e->src)
--	   && e->src != ENTRY_BLOCK_PTR)
-+	   && e->src != ENTRY_BLOCK_PTR
-+	   && (!JUMP_P (BB_END (e->src))
-+	       || simplejump_p (BB_END (e->src))))
-     {
-       bb = e->src;
- 
---- a/gcc/stmt.c
-+++ b/gcc/stmt.c
-@@ -613,6 +613,9 @@ tree_conflicts_with_clobbers_p (tree t, 
-    CLOBBERS is a list of STRING_CST nodes each naming a hard register
-    that is clobbered by this insn.
- 
-+   LABELS is a list of labels, and if LABELS is non-NULL, FALLTHRU_BB
-+   should be the fallthru basic block of the asm goto.
-+
-    Not all kinds of lvalue that may appear in OUTPUTS can be stored directly.
-    Some elements of OUTPUTS may be replaced with trees representing temporary
-    values.  The caller should copy those temporary values to the originally
-@@ -622,7 +625,8 @@ tree_conflicts_with_clobbers_p (tree t, 
- 
- static void
- expand_asm_operands (tree string, tree outputs, tree inputs,
--		     tree clobbers, tree labels, int vol, location_t locus)
-+		     tree clobbers, tree labels, basic_block fallthru_bb,
-+		     int vol, location_t locus)
- {
-   rtvec argvec, constraintvec, labelvec;
-   rtx body;
-@@ -643,6 +647,7 @@ expand_asm_operands (tree string, tree o
-   enum machine_mode *inout_mode = XALLOCAVEC (enum machine_mode, noutputs);
-   const char **constraints = XALLOCAVEC (const char *, noutputs + ninputs);
-   int old_generating_concat_p = generating_concat_p;
-+  rtx fallthru_label = NULL_RTX;
- 
-   /* An ASM with no outputs needs to be treated as volatile, for now.  */
-   if (noutputs == 0)
-@@ -942,8 +947,24 @@ expand_asm_operands (tree string, tree o
- 
-   /* Copy labels to the vector.  */
-   for (i = 0, tail = labels; i < nlabels; ++i, tail = TREE_CHAIN (tail))
--    ASM_OPERANDS_LABEL (body, i)
--      = gen_rtx_LABEL_REF (Pmode, label_rtx (TREE_VALUE (tail)));
-+    {
-+      rtx r;
-+      /* If asm goto has any labels in the fallthru basic block, use
-+	 a label that we emit immediately after the asm goto.  Expansion
-+	 may insert further instructions into the same basic block after
-+	 asm goto and if we don't do this, insertion of instructions on
-+	 the fallthru edge might misbehave.  See PR58670.  */
-+      if (fallthru_bb
-+	  && label_to_block_fn (cfun, TREE_VALUE (tail)) == fallthru_bb)
-+	{
-+	  if (fallthru_label == NULL_RTX)
-+	    fallthru_label = gen_label_rtx ();
-+	  r = fallthru_label;
-+	}
-+      else
-+	r = label_rtx (TREE_VALUE (tail));
-+      ASM_OPERANDS_LABEL (body, i) = gen_rtx_LABEL_REF (Pmode, r);
-+    }
- 
-   generating_concat_p = old_generating_concat_p;
- 
-@@ -1067,6 +1088,9 @@ expand_asm_operands (tree string, tree o
- 	emit_insn (body);
-     }
- 
-+  if (fallthru_label)
-+    emit_label (fallthru_label);
-+
-   /* For any outputs that needed reloading into registers, spill them
-      back to where they belong.  */
-   for (i = 0; i < noutputs; ++i)
-@@ -1087,6 +1111,7 @@ expand_asm_stmt (gimple stmt)
-   const char *s;
-   tree str, out, in, cl, labels;
-   location_t locus = gimple_location (stmt);
-+  basic_block fallthru_bb = NULL;
- 
-   /* Meh... convert the gimple asm operands into real tree lists.
-      Eventually we should make all routines work on the vectors instead
-@@ -1122,6 +1147,9 @@ expand_asm_stmt (gimple stmt)
-   n = gimple_asm_nlabels (stmt);
-   if (n > 0)
-     {
-+      edge fallthru = find_fallthru_edge (gimple_bb (stmt)->succs);
-+      if (fallthru)
-+	fallthru_bb = fallthru->dest;
-       t = labels = gimple_asm_label_op (stmt, 0);
-       for (i = 1; i < n; i++)
- 	t = TREE_CHAIN (t) = gimple_asm_label_op (stmt, i);
-@@ -1147,7 +1175,7 @@ expand_asm_stmt (gimple stmt)
- 
-   /* Generate the ASM_OPERANDS insn; store into the TREE_VALUEs of
-      OUTPUTS some trees for where the values were actually stored.  */
--  expand_asm_operands (str, outputs, in, cl, labels,
-+  expand_asm_operands (str, outputs, in, cl, labels, fallthru_bb,
- 		       gimple_asm_volatile_p (stmt), locus);
- 
-   /* Copy all the intermediate outputs into the specified outputs.  */
---- /dev/null
-+++ b/gcc/testsuite/gcc.dg/torture/pr58670.c
-@@ -0,0 +1,47 @@
-+/* PR middle-end/58670 */
-+/* { dg-do run { target i?86-*-* x86_64-*-* } } */
-+
-+#if defined (__i386__) || defined (__x86_64__)
-+#define ASM_STR "bts $1, %0; jc %l[lab]"
-+#endif
-+
-+__attribute__((noinline, noclone)) int
-+foo (int a, int b)
-+{
-+  if (a)
-+    return -3;
-+#ifdef ASM_STR
-+  asm volatile goto (ASM_STR : : "m" (b) : "memory" : lab);
-+  return 0;
-+lab:
-+#endif
-+  return 0;
-+}
-+
-+int
-+bar (int a, int b)
-+{
-+  if (a)
-+    return -3;
-+#ifdef ASM_STR
-+  asm volatile goto (ASM_STR : : "m" (b) : "memory" : lab);
-+  return 0;
-+lab:
-+#endif
-+  return 0;
-+}
-+
-+int
-+main ()
-+{
-+  if (foo (1, 0) != -3
-+      || foo (0, 3) != 0
-+      || foo (1, 0) != -3
-+      || foo (0, 0) != 0
-+      || bar (1, 0) != -3
-+      || bar (0, 3) != 0
-+      || bar (1, 0) != -3
-+      || bar (0, 0) != 0)
-+    __builtin_abort ();
-+  return 0;
-+}
diff --git a/toolchain/gcc/patches/4.8-linaro/200-musl.patch b/toolchain/gcc/patches/4.8-linaro/200-musl.patch
index 3fe5a7eba23584a2f1784cea80bfe09a40d57ded..dedbb10842898588c8636cbb20aa6893ccb9b77f 100644
--- a/toolchain/gcc/patches/4.8-linaro/200-musl.patch
+++ b/toolchain/gcc/patches/4.8-linaro/200-musl.patch
@@ -1,6 +1,6 @@
 --- a/gcc/config.gcc
 +++ b/gcc/config.gcc
-@@ -550,7 +550,7 @@ case ${target} in
+@@ -551,7 +551,7 @@ case ${target} in
  esac
  
  # Common C libraries.
@@ -9,7 +9,7 @@
  
  # Common parts for widely ported systems.
  case ${target} in
-@@ -653,6 +653,9 @@ case ${target} in
+@@ -654,6 +654,9 @@ case ${target} in
      *-*-*uclibc*)
        tm_defines="$tm_defines DEFAULT_LIBC=LIBC_UCLIBC"
        ;;
@@ -306,9 +306,9 @@
    CHOOSE_DYNAMIC_LINKER (GLIBC_DYNAMIC_LINKERN32, UCLIBC_DYNAMIC_LINKERN32, \
 -			 BIONIC_DYNAMIC_LINKERN32)
 +			 BIONIC_DYNAMIC_LINKERN32, MUSL_DYNAMIC_LINKERN32)
---- a/gcc/config/sparc/linux64.h       2013-09-10 10:02:45.663973856 +0100
-+++ b/gcc/config/sparc/linux64.h       2013-09-10 10:03:17.871972435 +0100
-@@ -104,6 +104,9 @@
+--- a/gcc/config/sparc/linux64.h
++++ b/gcc/config/sparc/linux64.h
+@@ -95,6 +95,9 @@ along with GCC; see the file COPYING3.
  #define GLIBC_DYNAMIC_LINKER32 "/lib/ld-linux.so.2"
  #define GLIBC_DYNAMIC_LINKER64 "/lib64/ld-linux.so.2"
  
@@ -318,4 +318,3 @@
  #ifdef SPARC_BI_ARCH
  
  #undef SUBTARGET_EXTRA_SPECS
-
diff --git a/toolchain/gcc/patches/4.8-linaro/870-ppc_no_crtsavres.patch b/toolchain/gcc/patches/4.8-linaro/870-ppc_no_crtsavres.patch
index 14e4fbdce99f2fb5974e667d6c45663fe6b2cc09..7d8f54fcb3bbe37132a00e38a66835bc9b5083ed 100644
--- a/toolchain/gcc/patches/4.8-linaro/870-ppc_no_crtsavres.patch
+++ b/toolchain/gcc/patches/4.8-linaro/870-ppc_no_crtsavres.patch
@@ -1,6 +1,6 @@
 --- a/gcc/config/rs6000/rs6000.c
 +++ b/gcc/config/rs6000/rs6000.c
-@@ -17664,7 +17664,7 @@ rs6000_savres_strategy (rs6000_stack_t *
+@@ -17661,7 +17661,7 @@ rs6000_savres_strategy (rs6000_stack_t *
    /* Define cutoff for using out-of-line functions to save registers.  */
    if (DEFAULT_ABI == ABI_V4 || TARGET_ELF)
      {