diff -ruB --unidirectional-new-file ../glibc-2.19/abi-tags ../glibc-2.19-akaros/abi-tags
--- glibc-2.19/abi-tags	2014-02-07 04:04:38.000000000 -0500
+++ glibc-2.19-akaros/abi-tags	2015-12-17 14:58:45.065386401 -0500
@@ -28,5 +28,7 @@
 
 .*-.*-syllable.*	5	2.0.0	# just an arbitrary value
 
+.*-.*-akaros.*		6	1.0.0	# just an arbitrary value
+
 # There is no catch-all default here because every supported OS that uses
 # ELF must have its own unique ABI tag.
diff -ruB --unidirectional-new-file ../glibc-2.19/configure ../glibc-2.19-akaros/configure
--- glibc-2.19/configure	2014-02-07 04:04:38.000000000 -0500
+++ glibc-2.19-akaros/configure	2015-12-17 14:58:45.065386401 -0500
@@ -4121,6 +4121,16 @@
   tail="$2"
 done
 
+# For akaros, we don't have a base OS, which messes things up. Change this for
+# the purpose of sysdeps detection.
+test "x$base_os" != x || case "$os" in
+akaros*)
+  base=/akaros
+  vendor=
+  ostry=
+  ;;
+esac
+
 # For sparc/sparc32, try sparc/sparc32 and then sparc.
 mach=
 tail=$machine${submachine:+/$submachine}
diff -ruB --unidirectional-new-file ../glibc-2.19/configure.ac ../glibc-2.19-akaros/configure.ac
--- glibc-2.19/configure.ac	2014-02-07 04:04:38.000000000 -0500
+++ glibc-2.19-akaros/configure.ac	2015-12-17 14:58:45.065386401 -0500
@@ -722,6 +722,16 @@
   tail="$2"
 done
 
+# For akaros, we don't have a base OS, which messes things up. Change this for
+# the purpose of sysdeps detection.
+test "x$base_os" != x || case "$os" in
+akaros*)
+  base=/akaros
+  vendor=
+  ostry=
+  ;;
+esac
+
 # For sparc/sparc32, try sparc/sparc32 and then sparc.
 mach=
 tail=$machine${submachine:+/$submachine}
diff -ruB --unidirectional-new-file ../glibc-2.19/elf/Makefile ../glibc-2.19-akaros/elf/Makefile
--- glibc-2.19/elf/Makefile	2014-02-07 04:04:38.000000000 -0500
+++ glibc-2.19-akaros/elf/Makefile	2015-12-17 14:58:45.065386401 -0500
@@ -24,7 +24,7 @@
 headers		= elf.h bits/elfclass.h link.h bits/link.h
 routines	= $(dl-routines) dl-support dl-iteratephdr \
 		  dl-addr enbl-secure dl-profstub \
-		  dl-origin dl-libc dl-sym dl-tsd dl-sysdep
+		  dl-origin dl-libc dl-sym dl-tsd #dl-sysdep
 
 # The core dynamic linking functions are in libc for the static and
 # profiled libraries.
diff -ruB --unidirectional-new-file ../glibc-2.19/include/alloca.h ../glibc-2.19-akaros/include/alloca.h
--- glibc-2.19/include/alloca.h	2014-02-07 04:04:38.000000000 -0500
+++ glibc-2.19-akaros/include/alloca.h	2016-10-05 17:05:34.571879935 -0400
@@ -1,5 +1,7 @@
 #ifndef _ALLOCA_H
 
+/* AKAROS: Modified the alloca cutoff */
+
 #include <stdlib/alloca.h>
 #include <stackinfo.h>
 
@@ -16,7 +18,10 @@
 extern int __libc_alloca_cutoff (size_t size) __attribute__ ((const));
 libc_hidden_proto (__libc_alloca_cutoff)
 
-#define __MAX_ALLOCA_CUTOFF	65536
+/* AKAROS: Limit to a small amount, so 2LSs and vcore context can have small
+ * stacks.  Glibc typically uses 1/4 of the stack.  Assuming our users have at
+ * least 4K stacks, we can use 1k, but let's be paranoid and use 512 for now. */
+#define __MAX_ALLOCA_CUTOFF	512
 
 #include <allocalim.h>
 
diff -ruB --unidirectional-new-file ../glibc-2.19/include/errno.h ../glibc-2.19-akaros/include/errno.h
--- glibc-2.19/include/errno.h	2014-02-07 04:04:38.000000000 -0500
+++ glibc-2.19-akaros/include/errno.h	2015-12-17 14:58:45.065386401 -0500
@@ -1,3 +1,5 @@
+/* Modified for Akaros, removed the redefinition of errno */
+
 #ifndef _ERRNO_H
 
 #include <stdlib/errno.h>
@@ -21,13 +23,16 @@
 
 #  include <tls.h>
 
-#  undef  errno
-#  ifndef NOT_IN_libc
-#   define errno __libc_errno
-#  else
-#   define errno errno		/* For #ifndef errno tests.  */
-#  endif
+/* AKAROS doesn't want the redef of errno */
+#  ifndef __akaros__
+#    undef  errno
+#    ifndef NOT_IN_libc
+#     define errno __libc_errno
+#    else
+#     define errno errno		/* For #ifndef errno tests.  */
+#    endif
 extern __thread int errno attribute_tls_model_ie;
+#  endif
 
 # endif	/* !NOT_IN_libc || IN_LIB */
 
diff -ruB --unidirectional-new-file ../glibc-2.19/include/libc-symbols.h ../glibc-2.19-akaros/include/libc-symbols.h
--- glibc-2.19/include/libc-symbols.h	2014-02-07 04:04:38.000000000 -0500
+++ glibc-2.19-akaros/include/libc-symbols.h	2016-02-16 11:25:16.761066328 -0500
@@ -1,3 +1,5 @@
+/* Modified for Akaros, removed the static_link_warning() */
+
 /* Support macros for making weak and strong aliases for symbols,
    and for using symbol sets and linker warnings with GNU ld.
    Copyright (C) 1995-2014 Free Software Foundation, Inc.
@@ -231,6 +233,14 @@
   link_warning (name, #name " is not implemented and will always fail")
 
 /* Warning for linking functions calling dlopen into static binaries.  */
+
+/* AKAROS doesn't want the annoying warning, breaks -Werror. */
+#ifdef __akaros__
+
+#define static_link_warning(name)
+
+#else
+
 #ifdef SHARED
 #define static_link_warning(name)
 #else
@@ -241,6 +251,8 @@
 for linking")
 #endif
 
+#endif /* __akaros__ */
+
 /* Declare SYMBOL to be TYPE (`function' or `object') of SIZE bytes
    alias to ORIGINAL, when the assembler supports such declarations
    (such as in ELF).
diff -ruB --unidirectional-new-file ../glibc-2.19/Makeconfig ../glibc-2.19-akaros/Makeconfig
--- glibc-2.19/Makeconfig	2014-02-07 04:04:38.000000000 -0500
+++ glibc-2.19-akaros/Makeconfig	2015-12-17 14:58:45.065386401 -0500
@@ -493,13 +493,17 @@
 LDFLAGS-rdynamic = -rdynamic
 LDFLAGS-Bsymbolic = -Bsymbolic
 
-# Choose the default search path for the dynamic linker based on
-# where we will install libraries.
-ifneq ($(libdir),$(slibdir))
-default-rpath = $(slibdir):$(libdir)
-else
-default-rpath = $(libdir)
-endif
+# For akaros we want the default-rpath to be the path on our resulting
+# machine, not the path of the lib directory in our cross compiler
+default-rpath = "/lib"
+
+## Choose the default search path for the dynamic linker based on
+## where we will install libraries.
+#ifneq ($(libdir),$(slibdir))
+#default-rpath = $(slibdir):$(libdir)
+#else
+#default-rpath = $(libdir)
+#endif
 
 ifndef link-extra-libs
 link-extra-libs = $(LDLIBS-$(@F))
@@ -1028,10 +1032,12 @@
 # These are the subdirectories containing the library source.  The order
 # is more or less arbitrary.  The sorting step will take care of the
 # dependencies.
+#
+# AKAROS_PORT removed gshadow.  relies on NSS, has no man interface
 all-subdirs = csu assert ctype locale intl catgets math setjmp signal	    \
 	      stdlib stdio-common libio malloc string wcsmbs time dirent    \
 	      grp pwd posix io termios resource misc socket sysvipc gmon    \
-	      gnulib iconv iconvdata wctype manual shadow gshadow po argp   \
+	      gnulib iconv iconvdata wctype manual shadow po argp   \
 	      crypt localedata timezone rt conform debug		    \
 	      $(add-on-subdirs) dlfcn elf
 
diff -ruB --unidirectional-new-file ../glibc-2.19/nptl/shlib-versions ../glibc-2.19-akaros/nptl/shlib-versions
--- glibc-2.19/nptl/shlib-versions	2014-02-07 04:04:38.000000000 -0500
+++ glibc-2.19-akaros/nptl/shlib-versions	2015-12-17 14:58:45.065386401 -0500
@@ -3,4 +3,6 @@
 s390x-.*-linux.*	libpthread=0		GLIBC_2.2
 powerpc64-.*-linux.*	libpthread=0		GLIBC_2.3
 powerpc.*le-.*-linux.*	libpthread=0		GLIBC_2.17
+#x86_64-.*-akaros.*      libpthread=0        GLIBC_2.2.5
 .*-.*-linux.*		libpthread=0
+.*-.*-akaros.*		libpthread=0
diff -ruB --unidirectional-new-file ../glibc-2.19/rt/Makefile ../glibc-2.19-akaros/rt/Makefile
--- glibc-2.19/rt/Makefile	2014-02-07 04:04:38.000000000 -0500
+++ glibc-2.19-akaros/rt/Makefile	2015-12-17 14:58:45.065386401 -0500
@@ -53,7 +53,7 @@
 	 tst-cputimer1 tst-cputimer2 tst-cputimer3 \
 	 tst-clock2
 
-extra-libs := librt
+extra-libs := #librt
 extra-libs-others := $(extra-libs)
 
 include ../Rules
diff -ruB --unidirectional-new-file ../glibc-2.19/scripts/config.sub ../glibc-2.19-akaros/scripts/config.sub
--- glibc-2.19/scripts/config.sub	2014-02-07 04:04:38.000000000 -0500
+++ glibc-2.19-akaros/scripts/config.sub	2015-12-17 14:58:45.065386401 -0500
@@ -117,7 +117,7 @@
 case $maybe_os in
   nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \
   linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \
-  knetbsd*-gnu* | netbsd*-gnu* | \
+  knetbsd*-gnu* | netbsd*-gnu* | akaros*-gnu* | \
   kopensolaris*-gnu* | \
   storm-chaos* | os2-emx* | rtmk-nova*)
     os=-$maybe_os
@@ -1356,7 +1356,7 @@
 	      | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \
 	      | -sym* | -kopensolaris* | -plan9* \
 	      | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
-	      | -aos* | -aros* \
+	      | -aos* | -aros* | -akaros* \
 	      | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
 	      | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
 	      | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \
diff -ruB --unidirectional-new-file ../glibc-2.19/shlib-versions ../glibc-2.19-akaros/shlib-versions
--- glibc-2.19/shlib-versions	2014-02-07 04:04:38.000000000 -0500
+++ glibc-2.19-akaros/shlib-versions	2015-12-17 14:58:45.065386401 -0500
@@ -24,6 +24,7 @@
 s390x-.*-linux.*        DEFAULT			GLIBC_2.2
 powerpc64-.*-linux.*	DEFAULT			GLIBC_2.3
 powerpc.*le-.*-linux.*	DEFAULT			GLIBC_2.17
+x86_64-.*-akaros.*      DEFAULT			GLIBC_2.2.5
 .*-.*-gnu-gnu.*		DEFAULT			GLIBC_2.2.6
 
 # Configuration		ABI			Identifier for ABI data files
@@ -44,6 +45,7 @@
 sh.*-.*-linux.*		libc=6			GLIBC_2.2
 sparc64.*-.*-linux.*	libc=6			GLIBC_2.2
 .*-.*-linux.*		libc=6
+.*-.*-akaros.*		libc=6
 
 # libmachuser.so.1 corresponds to mach/*.defs as of Utah's UK22 release.
 .*-.*-gnu-gnu.*		libmachuser=1
diff -ruB --unidirectional-new-file ../glibc-2.19/sunrpc/netname.c ../glibc-2.19-akaros/sunrpc/netname.c
--- glibc-2.19/sunrpc/netname.c	2014-02-07 04:04:38.000000000 -0500
+++ glibc-2.19-akaros/sunrpc/netname.c	2015-12-17 14:58:45.065386401 -0500
@@ -16,13 +16,13 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
+/* AKAROS_PORT: removed references to nss; stubbed the funcs that used it. */
+
 #include <stdio.h>
 #include <unistd.h>
 #include <string.h>
 #include <rpc/rpc.h>
 
-#include "nsswitch.h"
-
 #define	OPSYS_LEN 4
 #define	MAXIPRINT (11)		/* max length of printed integer */
 static const char OPSYS[] = "unix";
@@ -139,56 +139,18 @@
 /* Type of the lookup function for netname2user.  */
 typedef int (*netname2user_function) (const char netname[MAXNETNAMELEN + 1],
 				      uid_t *, gid_t *, int *, gid_t *);
-/* The lookup function for the first entry of this service.  */
-extern int __nss_publickey_lookup (service_user ** nip, const char *name,
-				   void **fctp) internal_function;
-
 int
 netname2user (const char netname[MAXNETNAMELEN + 1], uid_t * uidp, gid_t * gidp,
 	      int *gidlenp, gid_t * gidlist)
 {
-  static service_user *startp;
-  static netname2user_function start_fct;
-  service_user *nip;
-  union
-  {
-    netname2user_function f;
-    void *ptr;
-  } fct;
-  enum nss_status status = NSS_STATUS_UNAVAIL;
-  int no_more;
-
-  if (startp == NULL)
-    {
-      no_more = __nss_publickey_lookup (&nip, "netname2user", &fct.ptr);
-      if (no_more)
-	startp = (service_user *) - 1;
-      else
-	{
-	  startp = nip;
-	  start_fct = fct.f;
-	}
-    }
-  else
-    {
-      fct.f = start_fct;
-      no_more = (nip = startp) == (service_user *) - 1;
-    }
-
-  while (!no_more)
-    {
-      status = (*fct.f) (netname, uidp, gidp, gidlenp, gidlist);
-
-      no_more = __nss_next2 (&nip, "netname2user", NULL, &fct.ptr, status, 0);
-    }
-
-  return status == NSS_STATUS_SUCCESS;
+  return FALSE;
 }
 #ifdef EXPORT_RPC_SYMBOLS
 libc_hidden_def (netname2user)
 #else
 libc_hidden_nolink_sunrpc (netname2user, GLIBC_2_1)
 #endif
+stub_warning(netname2user)
 
 int
 netname2host (const char netname[MAXNETNAMELEN + 1], char *hostname,
diff -ruB --unidirectional-new-file ../glibc-2.19/sysdeps/i386/configure ../glibc-2.19-akaros/sysdeps/i386/configure
--- glibc-2.19/sysdeps/i386/configure	2014-02-07 04:04:38.000000000 -0500
+++ glibc-2.19-akaros/sysdeps/i386/configure	2015-12-17 14:58:45.077386468 -0500
@@ -82,13 +82,13 @@
 $as_echo "$libc_compiler_builtin_inlined" >&6; }
 
 
-ac_fn_c_check_header_compile "$LINENO" "cpuid.h" "ac_cv_header_cpuid_h" "/* No default includes.  */
-"
-if test "x$ac_cv_header_cpuid_h" = xyes; then :
-
-else
-  as_fn_error $? "gcc must provide the <cpuid.h> header" "$LINENO" 5
-fi
+#ac_fn_c_check_header_compile "$LINENO" "cpuid.h" "ac_cv_header_cpuid_h" "/* No default includes.  */
+#"
+#if test "x$ac_cv_header_cpuid_h" = xyes; then :
+#
+#else
+#  as_fn_error $? "gcc must provide the <cpuid.h> header" "$LINENO" 5
+#fi
 
 
 
diff -ruB --unidirectional-new-file ../glibc-2.19/sysdeps/i386/configure.ac ../glibc-2.19-akaros/sysdeps/i386/configure.ac
--- glibc-2.19/sysdeps/i386/configure.ac	2014-02-07 04:04:38.000000000 -0500
+++ glibc-2.19-akaros/sysdeps/i386/configure.ac	2015-12-17 14:58:45.077386468 -0500
@@ -30,9 +30,9 @@
 *** Please use host i786, i686, i586, or i486.
 *** For example: /source/glibc/configure CFLAGS='-O2 -march=i686' ...])])
 
-AC_CHECK_HEADER([cpuid.h], ,
-  [AC_MSG_ERROR([gcc must provide the <cpuid.h> header])],
-  [/* No default includes.  */])
+#AC_CHECK_HEADER([cpuid.h], ,
+#  [AC_MSG_ERROR([gcc must provide the <cpuid.h> header])],
+#  [/* No default includes.  */])
 
 dnl Check if -msse4 works.
 AC_CACHE_CHECK(for SSE4 support, libc_cv_cc_sse4, [dnl
diff -ruB --unidirectional-new-file ../glibc-2.19/sysdeps/i386/tlsdesc.sym ../glibc-2.19-akaros/sysdeps/i386/tlsdesc.sym
--- glibc-2.19/sysdeps/i386/tlsdesc.sym	2014-02-07 04:04:38.000000000 -0500
+++ glibc-2.19-akaros/sysdeps/i386/tlsdesc.sym	2015-12-17 14:58:45.077386468 -0500
@@ -8,7 +8,7 @@
 
 -- Abuse tls.h macros to derive offsets relative to the thread register.
 
-DTV_OFFSET			offsetof(struct pthread, header.dtv)
+DTV_OFFSET			offsetof(struct rthread, header.dtv)
 
 TLSDESC_ARG			offsetof(struct tlsdesc, arg)
 
diff -ruB --unidirectional-new-file ../glibc-2.19/sysdeps/x86_64/tlsdesc.sym ../glibc-2.19-akaros/sysdeps/x86_64/tlsdesc.sym
--- glibc-2.19/sysdeps/x86_64/tlsdesc.sym	2014-02-07 04:04:38.000000000 -0500
+++ glibc-2.19-akaros/sysdeps/x86_64/tlsdesc.sym	2015-12-17 14:58:45.077386468 -0500
@@ -8,7 +8,7 @@
 
 -- Abuse tls.h macros to derive offsets relative to the thread register.
 
-DTV_OFFSET			offsetof(struct pthread, header.dtv)
+DTV_OFFSET			offsetof(struct rthread, header.dtv)
 
 TLSDESC_ARG			offsetof(struct tlsdesc, arg)
 
--- glibc-2.19/assert/assert.c	2017-04-25 12:52:32.624619029 -0400
+++ glibc-2.19-akaros/assert/assert.c	2017-04-25 12:53:43.872966850 -0400
@@ -24,6 +24,7 @@
 #include <sysdep.h>
 #include <unistd.h>
 #include <sys/mman.h>
+#include <parlib/assert.h>
 
 
 extern const char *__progname;
@@ -98,7 +99,7 @@
 __assert_fail (const char *assertion, const char *file, unsigned int line,
 	       const char *function)
 {
-  __assert_fail_base (_("%s%s%s:%u: %s%sAssertion `%s' failed.\n%n"),
-		      assertion, file, line, function);
+  /* Calls out to parlib, and this never returns */
+  _assert_failed(file, line, assertion);
 }
 hidden_def(__assert_fail)
--- glibc-2.19/stdlib/exit.c	2017-06-08 17:05:17.558550998 -0400
+++ glibc-2.19-akaros/stdlib/exit.c	2017-06-08 17:04:50.574432434 -0400
@@ -19,6 +19,7 @@
 #include <stdlib.h>
 #include <unistd.h>
 #include <sysdep.h>
+#include <parlib/vcore.h>
 #include "exit.h"
 
 #include "set-hooks.h"
@@ -101,6 +102,8 @@
 void
 exit (int status)
 {
+  if (in_vcore_context())
+    _exit(status);
   __run_exit_handlers (status, &__exit_funcs, true);
 }
 libc_hidden_def (exit)
diff -ruB --unidirectional-new-file ../glibc-2.19/stdio-common/vfprintf.c ../glibc-2.19-akaros/stdio-common/vfprintf.c
--- glibc-2.19/stdio-common/vfprintf.c	2014-02-07 04:04:38.000000000 -0500
+++ glibc-2.19-akaros/stdio-common/vfprintf.c	2017-07-31 16:49:00.835618991 -0400
@@ -30,6 +30,38 @@
 #include <locale/localeinfo.h>
 #include <stdio.h>
 
+#include <ros/common.h>
+#include <sys/mman.h>
+#include <parlib/vcore.h>
+#include <unistd.h>
+
+/* Modified for AKAROS, uses mmap in place of large stack allocations */
+static const char *failmsg = "vfprintf mmap failed!";
+
+static inline __attribute__((always_inline)) void *safe_alloc(size_t amt)
+{
+	void *buf;
+
+	if (in_vcore_context()) {
+		buf = mmap(0, ROUNDUP(amt, PGSIZE), PROT_WRITE | PROT_READ,
+		           MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
+		if (buf == MAP_FAILED) {
+			write(2, failmsg, sizeof(failmsg));
+			exit(-1);
+		}
+		return buf;
+	} else {
+		/* This might have issues.  Might have to use macros. */
+		return alloca(amt);
+	}
+}
+
+static inline void safe_free(void *buf, size_t amt)
+{
+	if (in_vcore_context())
+    	munmap(buf, ROUNDUP(amt, PGSIZE));
+}
+
 /* This code is shared between the standard stdio implementation found
    in GNU C library and the libio implementation originally found in
    GNU libg++.
@@ -246,6 +278,8 @@
   CHAR_T work_buffer[1000];
   CHAR_T *workstart = NULL;
   CHAR_T *workend;
+  /* AKAROS: this might get mmaped */
+  void *specs_buf = NULL;
 
   /* We have to save the original argument pointer.  */
   va_list ap_save;
@@ -1678,7 +1712,13 @@
     size_t nspecs = 0;
     /* A more or less arbitrary start value.  */
     size_t nspecs_size = 32 * sizeof (struct printf_spec);
-    struct printf_spec *specs = alloca (nspecs_size);
+
+	/* AKAROS: specs_buf declared above and conditionally freed below */
+    //struct printf_spec *specs = alloca (nspecs_size);
+    struct printf_spec *specs;
+
+    specs_buf = safe_alloc(nspecs_size);
+	specs = (struct printf_spec*)specs_buf;
 
     /* The number of arguments the format string requests.  This will
        determine the size of the array needed to store the argument
@@ -2049,6 +2089,8 @@
     free (args_malloced);
   if (__glibc_unlikely (workstart != NULL))
     free (workstart);
+  if (specs_buf)
+    safe_free(specs_buf, 32 * sizeof(struct printf_spec));
   /* Unlock the stream.  */
   _IO_funlockfile (s);
   _IO_cleanup_region_end (0);
@@ -2276,7 +2318,12 @@
 buffered_vfprintf (_IO_FILE *s, const CHAR_T *format,
 		   _IO_va_list args)
 {
-  CHAR_T buf[_IO_BUFSIZ];
+  /* AKAROS: mmap the buf.  */
+  //CHAR_T buf[_IO_BUFSIZ];
+  CHAR_T *buf;
+
+  buf = safe_alloc(_IO_BUFSIZ);
+
   struct helper_file helper;
   _IO_FILE *hp = (_IO_FILE *) &helper._f;
   int result, to_flush;
@@ -2338,6 +2385,7 @@
   _IO_funlockfile (s);
   __libc_cleanup_region_end (0);
 
+  safe_free(buf, _IO_BUFSIZ);
   return result;
 }
 
