blob: 5bbf7cc057eb7cbd0ca959c54f550e7215eeb58d [file] [log] [blame]
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;
}