[multilib][arm] spiff up the multilib stuff with more variants for armv6m and floating point
diff --git a/patches/gcc-patch.txt b/patches/gcc-patch.txt
index b90aebb..b32d230 100644
--- a/patches/gcc-patch.txt
+++ b/patches/gcc-patch.txt
@@ -1,78 +1,203 @@
---- gcc-4.8.2.orig/gcc/config/arm/t-arm-elf	2013-01-10 20:38:27.000000000 +0000
-+++ gcc-4.8.2/gcc/config/arm/t-arm-elf	2013-12-28 22:54:59.000000000 +0000
-@@ -25,22 +25,36 @@
+diff -ruN gcc-5.3.0/gcc/config/arm/t-arm-elf gcc-5.3.0.patched/gcc/config/arm/t-arm-elf
+--- gcc-5.3.0/gcc/config/arm/t-arm-elf	2015-01-05 04:33:28.000000000 -0800
++++ gcc-5.3.0.patched/gcc/config/arm/t-arm-elf	2015-12-10 13:29:14.792309380 -0800
+@@ -16,31 +16,49 @@
+ # along with GCC; see the file COPYING3.  If not see
+ # <http://www.gnu.org/licenses/>.
+ 
+-MULTILIB_OPTIONS     = marm/mthumb
+-MULTILIB_DIRNAMES    = arm thumb
+-MULTILIB_EXCEPTIONS  = 
+-MULTILIB_MATCHES     =
++#MULTILIB_OPTIONS     = marm/mthumb
++#MULTILIB_DIRNAMES    = arm thumb
++#MULTILIB_EXCEPTIONS  = 
++#MULTILIB_MATCHES     =
+ 
+ #MULTILIB_OPTIONS     += mcpu=fa526/mcpu=fa626/mcpu=fa606te/mcpu=fa626te/mcpu=fmp626/mcpu=fa726te
  #MULTILIB_DIRNAMES    += fa526 fa626 fa606te fa626te fmp626 fa726te
  #MULTILIB_EXCEPTIONS  += *mthumb*/*mcpu=fa526 *mthumb*/*mcpu=fa626
  
+-#MULTILIB_OPTIONS      += march=armv7
+-#MULTILIB_DIRNAMES     += thumb2
 +# build a bunch of specialized versions of libcc for particular cores
 +#MULTILIB_OPTIONS    += mcpu=arm7tdmi/mcpu=arm9tdmi/mcpu=arm920t/mcpu=arm926ej-s/mcpu=arm1136j-s/mcpu=arm1136jf-s/mcpu=arm1176jz-s/mcpu=arm1176jzf-s/mcpu=xscale/mcpu=mpcore/mcpu=cortex-a8/cortex-a9/march=armv4t/march=armv5t/march=armv5te/march=armv6/march=armv6j/march=armv6k/march=armv6z/march=armv6zk/march=armv7-a/march=armv7-r
 +#MULTILIB_DIRNAMES   += arm7tdmi arm9tdmi arm920t arm926ej-s arm1136j-s arm1136jf-s arm1176jz-s arm1176jzf-s xscale mpcore cortex-a8 cortex-a9 cortex-m3 armv4t armv5t armv5te armv6 armv6j armv6k armv6z armv6zk armv7-a armv7-r
 +#MULTILIB_OPTIONS    += mcpu=arm7tdmi/mcpu=arm9tdmi/mcpu=arm920t/mcpu=arm926ej-s/mcpu=arm1136j-s/mcpu=arm1136jf-s/mcpu=arm1176jz-s/mcpu=arm1176jzf-s/mcpu=xscale/mcpu=mpcore/mcpu=cortex-a8/mcpu=cortex-a9
 +#MULTILIB_DIRNAMES   += arm7tdmi arm9tdmi arm920t arm926ej-s arm1136j-s arm1136jf-s arm1176jz-s arm1176jzf-s xscale mpcore cortex-a8 cortex-a9
 +
-+MULTILIB_OPTIONS      += march=armv7
-+MULTILIB_DIRNAMES     += thumb2
-+MULTILIB_EXCEPTIONS   += march=armv7* marm/*march=armv7*
-+MULTILIB_MATCHES      += march?armv7=march?armv7-a
-+MULTILIB_MATCHES      += march?armv7=march?armv7-r
-+MULTILIB_MATCHES      += march?armv7=march?armv7-m
-+MULTILIB_MATCHES      += march?armv7=mcpu?cortex-a15
-+MULTILIB_MATCHES      += march?armv7=mcpu?cortex-a9
-+MULTILIB_MATCHES      += march?armv7=mcpu?cortex-a8
-+MULTILIB_MATCHES      += march?armv7=mcpu?cortex-r4
-+MULTILIB_MATCHES      += march?armv7=mcpu?cortex-m4
-+MULTILIB_MATCHES      += march?armv7=mcpu?cortex-m3
++#MULTILIB_OPTIONS      += march=armv7/march=armv6-m
++#MULTILIB_DIRNAMES     += thumb2 v6m
+ #MULTILIB_EXCEPTIONS   += march=armv7* marm/*march=armv7*
+ #MULTILIB_MATCHES      += march?armv7=march?armv7-a
+ #MULTILIB_MATCHES      += march?armv7=march?armv7-r
+ #MULTILIB_MATCHES      += march?armv7=march?armv7-m
++#MULTILIB_MATCHES      += march?armv7=mcpu?cortex-a15
++#MULTILIB_MATCHES      += march?armv7=mcpu?cortex-a9
+ #MULTILIB_MATCHES      += march?armv7=mcpu?cortex-a8
+ #MULTILIB_MATCHES      += march?armv7=mcpu?cortex-r4
++#MULTILIB_MATCHES      += march?armv7=mcpu?cortex-m4
+ #MULTILIB_MATCHES      += march?armv7=mcpu?cortex-m3
++#MULTILIB_EXCEPTIONS   += march=armv6* marm/*march=armv6m*
++#MULTILIB_MATCHES      += march?armv6m=mcpu?cortex-m0
++#MULTILIB_MATCHES      += march?armv6m=mcpu?cortex-m0plus
++#MULTILIB_MATCHES      += march?armv6m=mcpu?cortex-m1
 +
 +#MULTILIB_OPTIONS      += mfpu=vfp
 +#MULTILIB_DIRNAMES     += vfp
 +#MULTILIB_MATCHES      += mfpu?vfp=mcpu?arm1136jf-s
 +#MULTILIB_MATCHES      += mfpu?vfp=mcpu?arm1136jzf-s
--#MULTILIB_OPTIONS      += march=armv7
--#MULTILIB_DIRNAMES     += thumb2
--#MULTILIB_EXCEPTIONS   += march=armv7* marm/*march=armv7*
--#MULTILIB_MATCHES      += march?armv7=march?armv7-a
--#MULTILIB_MATCHES      += march?armv7=march?armv7-r
--#MULTILIB_MATCHES      += march?armv7=march?armv7-m
--#MULTILIB_MATCHES      += march?armv7=mcpu?cortex-a8
--#MULTILIB_MATCHES      += march?armv7=mcpu?cortex-r4
--#MULTILIB_MATCHES      += march?armv7=mcpu?cortex-m3
  
  # Not quite true.  We can support hard-vfp calling in Thumb2, but how do we
  # express that here?  Also, we really need architecture v5e or later
  # (mcrr etc).
-+#MULTILIB_OPTIONS       += mfloat-abi=hard
-+#MULTILIB_DIRNAMES      += fpu
-+#MULTILIB_EXCEPTIONS    += *mthumb/*mfloat-abi=hard*
 -MULTILIB_OPTIONS       += mfloat-abi=hard
 -MULTILIB_DIRNAMES      += fpu
 -MULTILIB_EXCEPTIONS    += *mthumb/*mfloat-abi=hard*
++#MULTILIB_OPTIONS       += mfloat-abi=hard
++#MULTILIB_DIRNAMES      += fpu
++#MULTILIB_EXCEPTIONS    += *mthumb/*mfloat-abi=hard*
  #MULTILIB_EXCEPTIONS    += *mcpu=fa526/*mfloat-abi=hard*
  #MULTILIB_EXCEPTIONS    += *mcpu=fa626/*mfloat-abi=hard*
  
-@@ -56,8 +70,8 @@
+@@ -56,8 +74,8 @@
  # MULTILIB_DIRNAMES   += fpu soft
  # MULTILIB_EXCEPTIONS += *mthumb/*mfloat-abi=hard*
  # 
-+MULTILIB_OPTIONS    += mno-thumb-interwork/mthumb-interwork
-+MULTILIB_DIRNAMES   += normal interwork
 -# MULTILIB_OPTIONS    += mno-thumb-interwork/mthumb-interwork
 -# MULTILIB_DIRNAMES   += normal interwork
++#MULTILIB_OPTIONS    += mno-thumb-interwork/mthumb-interwork
++#MULTILIB_DIRNAMES   += normal interwork
  # 
  # MULTILIB_OPTIONS    += fno-leading-underscore/fleading-underscore
  # MULTILIB_DIRNAMES   += elf under
-reverted:
---- gcc-4.8.2.orig/gcc/config/i386/t-x86_64-elf	1970-01-01 01:00:00.000000000 +0100
-+++ gcc-4.8.2/gcc/config/i386/t-x86_64-elf	2013-12-29 12:47:35.000000000 +0000
+@@ -88,3 +106,113 @@
+ # MULTILIB_MATCHES    += mcpu?arm7=mcpu?arm600
+ # MULTILIB_MATCHES    += mcpu?arm7=mcpu?arm610
+ # MULTILIB_MATCHES    += mcpu?arm7=mcpu?arm620
++
++# taken from ARM toolchain 4.9-2015q3-20150921, gcc/config/arm/t-rtems-eabi
++# Custom RTEMS EABI multilibs
++
++MULTILIB_OPTIONS  = mthumb march=armv6-m/march=armv7-a/march=armv7-r/march=armv7-m mfpu=neon/mfpu=vfpv3-d16/mfpu=fpv4-sp-d16 mfloat-abi=hard
++MULTILIB_DIRNAMES = thumb armv6-m armv7-a armv7-r armv7-m neon vfpv3-d16 fpv4-sp-d16 hard
++
++# Enumeration of multilibs
++
++# reject all the combinations we don't want or won't work
++
++MULTILIB_EXCEPTIONS =
++MULTILIB_EXCEPTIONS += mthumb/march=armv6-m/mfpu=neon/mfloat-abi=hard
++MULTILIB_EXCEPTIONS += mthumb/march=armv6-m/mfpu=neon
++MULTILIB_EXCEPTIONS += mthumb/march=armv6-m/mfpu=vfpv3-d16/mfloat-abi=hard
++MULTILIB_EXCEPTIONS += mthumb/march=armv6-m/mfpu=vfpv3-d16
++MULTILIB_EXCEPTIONS += mthumb/march=armv6-m/mfpu=fpv4-sp-d16/mfloat-abi=hard
++MULTILIB_EXCEPTIONS += mthumb/march=armv6-m/mfpu=fpv4-sp-d16
++MULTILIB_EXCEPTIONS += mthumb/march=armv6-m/mfloat-abi=hard
++# MULTILIB_EXCEPTIONS += mthumb/march=armv6-m
++# MULTILIB_EXCEPTIONS += mthumb/march=armv7-a/mfpu=neon/mfloat-abi=hard
++# MULTILIB_EXCEPTIONS += mthumb/march=armv7-a/mfpu=neon
++# MULTILIB_EXCEPTIONS += mthumb/march=armv7-a/mfpu=vfpv3-d16/mfloat-abi=hard
++# MULTILIB_EXCEPTIONS += mthumb/march=armv7-a/mfpu=vfpv3-d16
++# MULTILIB_EXCEPTIONS += mthumb/march=armv7-a/mfpu=fpv4-sp-d16/mfloat-abi=hard
++# MULTILIB_EXCEPTIONS += mthumb/march=armv7-a/mfpu=fpv4-sp-d16
++MULTILIB_EXCEPTIONS += mthumb/march=armv7-a/mfloat-abi=hard
++# MULTILIB_EXCEPTIONS += mthumb/march=armv7-a
++MULTILIB_EXCEPTIONS += mthumb/march=armv7-r/mfpu=neon/mfloat-abi=hard
++MULTILIB_EXCEPTIONS += mthumb/march=armv7-r/mfpu=neon
++# MULTILIB_EXCEPTIONS += mthumb/march=armv7-r/mfpu=vfpv3-d16/mfloat-abi=hard
++# MULTILIB_EXCEPTIONS += mthumb/march=armv7-r/mfpu=vfpv3-d16
++MULTILIB_EXCEPTIONS += mthumb/march=armv7-r/mfpu=fpv4-sp-d16/mfloat-abi=hard
++MULTILIB_EXCEPTIONS += mthumb/march=armv7-r/mfpu=fpv4-sp-d16
++MULTILIB_EXCEPTIONS += mthumb/march=armv7-r/mfloat-abi=hard
++# MULTILIB_EXCEPTIONS += mthumb/march=armv7-r
++MULTILIB_EXCEPTIONS += mthumb/march=armv7-m/mfpu=neon/mfloat-abi=hard
++MULTILIB_EXCEPTIONS += mthumb/march=armv7-m/mfpu=neon
++#MULTILIB_EXCEPTIONS += mthumb/march=armv7-m/mfpu=vfpv3-d16/mfloat-abi=hard
++#MULTILIB_EXCEPTIONS += mthumb/march=armv7-m/mfpu=vfpv3-d16
++#MULTILIB_EXCEPTIONS += mthumb/march=armv7-m/mfpu=fpv4-sp-d16/mfloat-abi=hard
++#MULTILIB_EXCEPTIONS += mthumb/march=armv7-m/mfpu=fpv4-sp-d16
++MULTILIB_EXCEPTIONS += mthumb/march=armv7-m/mfloat-abi=hard
++# MULTILIB_EXCEPTIONS += mthumb/march=armv7-m
++MULTILIB_EXCEPTIONS += mthumb/mfpu=neon/mfloat-abi=hard
++MULTILIB_EXCEPTIONS += mthumb/mfpu=neon
++MULTILIB_EXCEPTIONS += mthumb/mfpu=vfpv3-d16/mfloat-abi=hard
++MULTILIB_EXCEPTIONS += mthumb/mfpu=vfpv3-d16
++MULTILIB_EXCEPTIONS += mthumb/mfpu=fpv4-sp-d16/mfloat-abi=hard
++MULTILIB_EXCEPTIONS += mthumb/mfpu=fpv4-sp-d16
++MULTILIB_EXCEPTIONS += mthumb/mfloat-abi=hard
++# MULTILIB_EXCEPTIONS += mthumb
++MULTILIB_EXCEPTIONS += march=armv6-m/mfpu=neon/mfloat-abi=hard
++MULTILIB_EXCEPTIONS += march=armv6-m/mfpu=neon
++MULTILIB_EXCEPTIONS += march=armv6-m/mfpu=vfpv3-d16/mfloat-abi=hard
++MULTILIB_EXCEPTIONS += march=armv6-m/mfpu=vfpv3-d16
++MULTILIB_EXCEPTIONS += march=armv6-m/mfpu=fpv4-sp-d16/mfloat-abi=hard
++MULTILIB_EXCEPTIONS += march=armv6-m/mfpu=fpv4-sp-d16
++MULTILIB_EXCEPTIONS += march=armv6-m/mfloat-abi=hard
++MULTILIB_EXCEPTIONS += march=armv6-m
++# MULTILIB_EXCEPTIONS += march=armv7-a/mfpu=neon/mfloat-abi=hard
++# MULTILIB_EXCEPTIONS += march=armv7-a/mfpu=neon
++# MULTILIB_EXCEPTIONS += march=armv7-a/mfpu=vfpv3-d16/mfloat-abi=hard
++# MULTILIB_EXCEPTIONS += march=armv7-a/mfpu=vfpv3-d16
++# MULTILIB_EXCEPTIONS += march=armv7-a/mfpu=fpv4-sp-d16/mfloat-abi=hard
++# MULTILIB_EXCEPTIONS += march=armv7-a/mfpu=fpv4-sp-d16
++MULTILIB_EXCEPTIONS += march=armv7-a/mfloat-abi=hard
++#MULTILIB_EXCEPTIONS += march=armv7-a
++MULTILIB_EXCEPTIONS += march=armv7-r/mfpu=neon/mfloat-abi=hard
++MULTILIB_EXCEPTIONS += march=armv7-r/mfpu=neon
++MULTILIB_EXCEPTIONS += march=armv7-r/mfpu=vfpv3-d16/mfloat-abi=hard
++MULTILIB_EXCEPTIONS += march=armv7-r/mfpu=vfpv3-d16
++MULTILIB_EXCEPTIONS += march=armv7-r/mfpu=fpv4-sp-d16/mfloat-abi=hard
++MULTILIB_EXCEPTIONS += march=armv7-r/mfpu=fpv4-sp-d16
++MULTILIB_EXCEPTIONS += march=armv7-r/mfloat-abi=hard
++#MULTILIB_EXCEPTIONS += march=armv7-r
++MULTILIB_EXCEPTIONS += march=armv7-m/mfpu=neon/mfloat-abi=hard
++MULTILIB_EXCEPTIONS += march=armv7-m/mfpu=neon
++MULTILIB_EXCEPTIONS += march=armv7-m/mfpu=vfpv3-d16/mfloat-abi=hard
++MULTILIB_EXCEPTIONS += march=armv7-m/mfpu=vfpv3-d16
++MULTILIB_EXCEPTIONS += march=armv7-m/mfpu=fpv4-sp-d16/mfloat-abi=hard
++MULTILIB_EXCEPTIONS += march=armv7-m/mfpu=fpv4-sp-d16
++MULTILIB_EXCEPTIONS += march=armv7-m/mfloat-abi=hard
++MULTILIB_EXCEPTIONS += march=armv7-m
++MULTILIB_EXCEPTIONS += mfpu=neon/mfloat-abi=hard
++MULTILIB_EXCEPTIONS += mfpu=neon
++MULTILIB_EXCEPTIONS += mfpu=vfpv3-d16/mfloat-abi=hard
++MULTILIB_EXCEPTIONS += mfpu=vfpv3-d16
++MULTILIB_EXCEPTIONS += mfpu=fpv4-sp-d16/mfloat-abi=hard
++MULTILIB_EXCEPTIONS += mfpu=fpv4-sp-d16
++MULTILIB_EXCEPTIONS += mfloat-abi=hard
++
++# build a few matches so we only have to specify -mcpu=cortex-* for most stuff
++MULTILIB_MATCHES    += march?armv7-a=mcpu?cortex-a17
++MULTILIB_MATCHES    += march?armv7-a=mcpu?cortex-a15
++MULTILIB_MATCHES    += march?armv7-a=mcpu?cortex-a9
++MULTILIB_MATCHES    += march?armv7-a=mcpu?cortex-a8
++MULTILIB_MATCHES    += march?armv7-a=mcpu?cortex-a7
++MULTILIB_MATCHES    += march?armv7-a=mcpu?cortex-a5
++MULTILIB_MATCHES    += march?armv7-r=mcpu?cortex-r7
++MULTILIB_MATCHES    += march?armv7-r=mcpu?cortex-r5
++MULTILIB_MATCHES    += march?armv7-r=mcpu?cortex-r4
++MULTILIB_MATCHES    += march?armv7-m=mcpu?cortex-m7
++MULTILIB_MATCHES    += march?armv7-m=mcpu?cortex-m4
++MULTILIB_MATCHES    += march?armv7-m=mcpu?cortex-m3
++MULTILIB_MATCHES    += march?armv6-m=mcpu?cortex-m1
++MULTILIB_MATCHES    += march?armv6-m=mcpu?cortex-m0plus
++MULTILIB_MATCHES    += march?armv6-m=mcpu?cortex-m0
++
++
+diff -ruN gcc-5.3.0/gcc/config/i386/t-x86_64-elf gcc-5.3.0.patched/gcc/config/i386/t-x86_64-elf
+--- gcc-5.3.0/gcc/config/i386/t-x86_64-elf	1969-12-31 16:00:00.000000000 -0800
++++ gcc-5.3.0.patched/gcc/config/i386/t-x86_64-elf	2015-12-10 12:10:07.492460504 -0800
 @@ -0,0 +1,4 @@
 +# Add redzoneless libgcc
 +
 +MULTILIB_OPTIONS  += mno-red-zone
 +MULTILIB_DIRNAMES += no-red-zone
 \ No newline at end of file
-reverted:
---- gcc-4.8.2.orig/gcc/config.gcc	2013-10-03 01:47:24.000000000 +0100
-+++ gcc-4.8.2/gcc/config.gcc	2013-12-29 12:06:18.000000000 +0000
-@@ -1213,6 +1213,7 @@
+diff -ruN gcc-5.3.0/gcc/config.gcc gcc-5.3.0.patched/gcc/config.gcc
+--- gcc-5.3.0/gcc/config.gcc	2015-09-10 07:17:53.000000000 -0700
++++ gcc-5.3.0.patched/gcc/config.gcc	2015-12-10 12:10:07.492460504 -0800
+@@ -1375,6 +1375,7 @@
  	tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h newlib-stdint.h i386/i386elf.h"
  	;;
  x86_64-*-elf*)
diff --git a/testmultilib b/testmultilib
new file mode 100755
index 0000000..e4bf37b
--- /dev/null
+++ b/testmultilib
@@ -0,0 +1,24 @@
+#!/bin/bash
+
+# a script to test the multilib matching of an arm toolchain
+
+TC=arm-eabi-5.3.0-Linux-x86_64/bin/arm-eabi-
+#TC=arm-eabi-
+
+${TC}gcc --print-libgcc-file-name
+
+for c in m0 m0plus m1 m3 m4 m7 r4 a5 a7 a8 a9 a12 a15; do
+    echo $c
+    ${TC}gcc -mcpu=cortex-${c} --print-libgcc-file-name
+    echo $c -mthumb
+    ${TC}gcc -mcpu=cortex-${c} -mthumb --print-libgcc-file-name
+    for f in -mfpu=neon -mfpu=vfpv3-d16 -mfpu=fpv4-sp-d16; do
+         echo $c -mthumb $f
+         ${TC}gcc -mcpu=cortex-${c} -mthumb $f --print-libgcc-file-name
+        for a in -mfloat-abi=hard -mfloat-abi=softfp; do 
+            echo $c -mthumb $f $a
+            ${TC}gcc -mcpu=cortex-${c} -mthumb $f $a --print-libgcc-file-name
+        done
+    done
+done
+