--- gcc-6.4.0/libstdc++-v3/config/os/generic/ctype_base.h.old	2016-01-04 08:30:50.652828000 -0600
+++ gcc-6.4.0/libstdc++-v3/config/os/generic/ctype_base.h	2017-10-16 07:51:26.226276759 -0500
@@ -40,19 +40,27 @@
 
     // NB: Offsets into ctype<char>::_M_table force a particular size
     // on the mask type. Because of this, we don't use an enum.
-    typedef unsigned int 	mask;
-    static const mask upper    	= 1 << 0;
-    static const mask lower 	= 1 << 1;
-    static const mask alpha 	= 1 << 2;
-    static const mask digit 	= 1 << 3;
-    static const mask xdigit 	= 1 << 4;
-    static const mask space 	= 1 << 5;
-    static const mask print 	= 1 << 6;
-    static const mask graph 	= (1 << 2) | (1 << 3) | (1 << 9); // alnum|punct
-    static const mask cntrl 	= 1 << 8;
-    static const mask punct 	= 1 << 9;
-    static const mask alnum 	= (1 << 2) | (1 << 3);  // alpha|digit
-    static const mask blank	= 1 << 10;
+    typedef unsigned short int 	mask;
+/* horrible ugly code from glibc */
+#ifndef _ISbit
+# if __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__
+#  define _ISbit(i) (1 << (i))
+# else
+#  define _ISbit(i) (i < 8 ? (1 << i << 8) : (1 << i >> 8))
+# endif
+#endif
+    static const mask upper    	= _ISbit(0);
+    static const mask lower 	= _ISbit(1);
+    static const mask alpha 	= _ISbit(2);
+    static const mask digit 	= _ISbit(3);
+    static const mask xdigit 	= _ISbit(4);
+    static const mask space 	= _ISbit(5);
+    static const mask print 	= _ISbit(6);
+    static const mask graph 	= _ISbit(7);
+    static const mask cntrl 	= _ISbit(9);
+    static const mask punct 	= _ISbit(10);
+    static const mask alnum 	= _ISbit(11);
+    static const mask blank	= _ISbit(8);
   };
 
 _GLIBCXX_END_NAMESPACE_VERSION
--- gcc-6.4.0/libstdc++-v3/config/os/generic/ctype_configure_char.cc.old	2016-01-04 08:30:50.652828000 -0600
+++ gcc-6.4.0/libstdc++-v3/config/os/generic/ctype_configure_char.cc	2017-10-16 08:37:57.986260218 -0500
@@ -40,7 +40,105 @@
 
   const ctype_base::mask*
   ctype<char>::classic_table() throw()
-  { return 0; }
+  {
+    static ctype_base::mask mask[256] = {
+      cntrl, cntrl, cntrl, cntrl, cntrl, cntrl, cntrl, cntrl,
+      cntrl, cntrl | blank | space, cntrl | space, cntrl | space,
+      cntrl | space, cntrl | space, cntrl, cntrl,
+      cntrl, cntrl, cntrl, cntrl, cntrl, cntrl, cntrl, cntrl,
+      cntrl, cntrl, cntrl, cntrl, cntrl, cntrl, cntrl, cntrl,
+      print | space | blank,
+      print | punct, print | punct,
+      print | punct, print | punct,
+      print | punct, print | punct,
+      print | punct, print | punct,
+      print | punct, print | punct,
+      print | punct, print | punct,
+      print | punct, print | punct,
+      print | punct,
+      print | alnum | digit | xdigit, print | alnum | digit | xdigit,
+      print | alnum | digit | xdigit, print | alnum | digit | xdigit,
+      print | alnum | digit | xdigit, print | alnum | digit | xdigit,
+      print | alnum | digit | xdigit, print | alnum | digit | xdigit,
+      print | alnum | digit | xdigit, print | alnum | digit | xdigit,
+      print | punct, print | punct,
+      print, print, print,
+      print | punct, print,
+      print | alnum | xdigit | alpha | upper,
+      print | alnum | xdigit | alpha | upper,
+      print | alnum | xdigit | alpha | upper,
+      print | alnum | xdigit | alpha | upper,
+      print | alnum | xdigit | alpha | upper,
+      print | alnum | xdigit | alpha | upper,
+      print | alnum | alpha | upper,
+      print | alnum | alpha | upper,
+      print | alnum | alpha | upper,
+      print | alnum | alpha | upper,
+      print | alnum | alpha | upper,
+      print | alnum | alpha | upper,
+      print | alnum | alpha | upper,
+      print | alnum | alpha | upper,
+      print | alnum | alpha | upper,
+      print | alnum | alpha | upper,
+      print | alnum | alpha | upper,
+      print | alnum | alpha | upper,
+      print | alnum | alpha | upper,
+      print | alnum | alpha | upper,
+      print | alnum | alpha | upper,
+      print | alnum | alpha | upper,
+      print | alnum | alpha | upper,
+      print | alnum | alpha | upper,
+      print | alnum | alpha | upper,
+      print | alnum | alpha | upper,
+      print | punct, print | punct, print | punct,
+      print | punct, print | punct, print | punct,
+      print | alnum | xdigit | alpha | lower,
+      print | alnum | xdigit | alpha | lower,
+      print | alnum | xdigit | alpha | lower,
+      print | alnum | xdigit | alpha | lower,
+      print | alnum | xdigit | alpha | lower,
+      print | alnum | xdigit | alpha | lower,
+      print | alnum | alpha | lower,
+      print | alnum | alpha | lower,
+      print | alnum | alpha | lower,
+      print | alnum | alpha | lower,
+      print | alnum | alpha | lower,
+      print | alnum | alpha | lower,
+      print | alnum | alpha | lower,
+      print | alnum | alpha | lower,
+      print | alnum | alpha | lower,
+      print | alnum | alpha | lower,
+      print | alnum | alpha | lower,
+      print | alnum | alpha | lower,
+      print | alnum | alpha | lower,
+      print | alnum | alpha | lower,
+      print | alnum | alpha | lower,
+      print | alnum | alpha | lower,
+      print | alnum | alpha | lower,
+      print | alnum | alpha | lower,
+      print | alnum | alpha | lower,
+      print | alnum | alpha | lower,
+      print | punct, print | punct, print | punct, print | punct,
+      cntrl,
+      0, 0, 0, 0, 0, 0, 0, 0,
+      0, 0, 0, 0, 0, 0, 0, 0,
+      0, 0, 0, 0, 0, 0, 0, 0,
+      0, 0, 0, 0, 0, 0, 0, 0,
+      0, 0, 0, 0, 0, 0, 0, 0,
+      0, 0, 0, 0, 0, 0, 0, 0,
+      0, 0, 0, 0, 0, 0, 0, 0,
+      0, 0, 0, 0, 0, 0, 0, 0,
+      0, 0, 0, 0, 0, 0, 0, 0,
+      0, 0, 0, 0, 0, 0, 0, 0,
+      0, 0, 0, 0, 0, 0, 0, 0,
+      0, 0, 0, 0, 0, 0, 0, 0,
+      0, 0, 0, 0, 0, 0, 0, 0,
+      0, 0, 0, 0, 0, 0, 0, 0,
+      0, 0, 0, 0, 0, 0, 0, 0,
+      0, 0, 0, 0, 0, 0, 0, 0
+    };
+    return mask;
+  }
 
   ctype<char>::ctype(__c_locale, const mask* __table, bool __del, 
 		     size_t __refs)