diff options
Diffstat (limited to 'system/musl/amalgamation.patch')
-rw-r--r-- | system/musl/amalgamation.patch | 282 |
1 files changed, 282 insertions, 0 deletions
diff --git a/system/musl/amalgamation.patch b/system/musl/amalgamation.patch new file mode 100644 index 000000000..d4d4465dc --- /dev/null +++ b/system/musl/amalgamation.patch @@ -0,0 +1,282 @@ +diff --git a/include/stdlib.h b/include/stdlib.h +index 42ca8336..4bbaded0 100644 +--- a/include/stdlib.h ++++ b/include/stdlib.h +@@ -39,14 +39,18 @@ void *malloc (size_t); + void *calloc (size_t, size_t); + void *realloc (void *, size_t); + void free (void *); ++#if __STDC_VERSION__ >= 201112L || __cplusplus >= 201103L + void *aligned_alloc(size_t, size_t); ++#endif + + _Noreturn void abort (void); + int atexit (void (*) (void)); + _Noreturn void exit (int); + _Noreturn void _Exit (int); ++#if __STDC_VERSION__ >= 201112L || __cplusplus >= 201103L + int at_quick_exit (void (*) (void)); + _Noreturn void quick_exit (int); ++#endif + + char *getenv (const char *); + +@@ -100,7 +104,6 @@ int posix_memalign (void **, size_t, size_t); + int setenv (const char *, const char *, int); + int unsetenv (const char *); + int mkstemp (char *); +-int mkostemp (char *, int); + char *mkdtemp (char *); + int getsubopt (char **, char *const *, char **); + int rand_r (unsigned *); +@@ -138,6 +141,7 @@ void lcong48 (unsigned short [7]); + #include <alloca.h> + char *mktemp (char *); + int mkstemps (char *, int); ++int mkostemp (char *, int); + int mkostemps (char *, int, int); + void *valloc (size_t); + void *memalign(size_t, size_t); +diff --git a/include/time.h b/include/time.h +index 672b3fc3..c5946dd0 100644 +--- a/include/time.h ++++ b/include/time.h +@@ -58,11 +58,14 @@ struct tm *gmtime (const time_t *); + struct tm *localtime (const time_t *); + char *asctime (const struct tm *); + char *ctime (const time_t *); +-int timespec_get(struct timespec *, int); + +-#define CLOCKS_PER_SEC 1000000L ++#if __STDC_VERSION__ >= 201112L ++int timespec_get(struct timespec *, int); + + #define TIME_UTC 1 ++#endif ++ ++#define CLOCKS_PER_SEC 1000000L + + #if defined(_POSIX_SOURCE) || defined(_POSIX_C_SOURCE) \ + || defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE) \ +diff --git a/include/unistd.h b/include/unistd.h +index 9485da7a..1bdd3292 100644 +--- a/include/unistd.h ++++ b/include/unistd.h +@@ -274,6 +274,7 @@ int eaccess(const char *, int); + #define _PC_ALLOC_SIZE_MIN 18 + #define _PC_SYMLINK_MAX 19 + #define _PC_2_SYMLINKS 20 ++#define _PC_TIMESTAMP_RESOLUTION 21 + + #define _SC_ARG_MAX 0 + #define _SC_CHILD_MAX 1 +@@ -417,6 +418,7 @@ int eaccess(const char *, int); + #define _SC_XOPEN_STREAMS 246 + #define _SC_THREAD_ROBUST_PRIO_INHERIT 247 + #define _SC_THREAD_ROBUST_PRIO_PROTECT 248 ++#define _SC_XOPEN_UUCP 249 + + #define _CS_PATH 0 + #define _CS_POSIX_V6_WIDTH_RESTRICTED_ENVS 1 +@@ -459,6 +461,8 @@ int eaccess(const char *, int); + #define _CS_POSIX_V7_LPBIG_OFFBIG_LINTFLAGS 1147 + #define _CS_V6_ENV 1148 + #define _CS_V7_ENV 1149 ++#define _CS_POSIX_V7_THREADS_CFLAGS 1150 ++#define _CS_POSIX_V7_THREADS_LDFLAGS 1151 + + #ifdef __cplusplus + } +diff --git a/src/conf/confstr.c b/src/conf/confstr.c +index 02cb1aa2..8f870a69 100644 +--- a/src/conf/confstr.c ++++ b/src/conf/confstr.c +@@ -6,8 +6,8 @@ size_t confstr(int name, char *buf, size_t len) + { + const char *s = ""; + if (!name) { +- s = "/bin:/usr/bin"; +- } else if ((name&~4U)!=1 && name-_CS_POSIX_V6_ILP32_OFF32_CFLAGS>33U) { ++ s = "/usr/5bin:/usr/bin:/bin"; ++ } else if ((name&~4U)!=1 && name-_CS_POSIX_V6_ILP32_OFF32_CFLAGS>35U) { + errno = EINVAL; + return 0; + } +diff --git a/src/conf/fpathconf.c b/src/conf/fpathconf.c +index e6aca5cf..b6a9d63e 100644 +--- a/src/conf/fpathconf.c ++++ b/src/conf/fpathconf.c +@@ -4,7 +4,7 @@ + + long fpathconf(int fd, int name) + { +- static const short values[] = { ++ static const long values[] = { + [_PC_LINK_MAX] = _POSIX_LINK_MAX, + [_PC_MAX_CANON] = _POSIX_MAX_CANON, + [_PC_MAX_INPUT] = _POSIX_MAX_INPUT, +@@ -25,7 +25,8 @@ long fpathconf(int fd, int name) + [_PC_REC_XFER_ALIGN] = 4096, + [_PC_ALLOC_SIZE_MIN] = 4096, + [_PC_SYMLINK_MAX] = -1, +- [_PC_2_SYMLINKS] = 1 ++ [_PC_2_SYMLINKS] = 1, ++ [_PC_TIMESTAMP_RESOLUTION] = 100000000, + }; + if (name >= sizeof(values)/sizeof(values[0])) { + errno = EINVAL; +diff --git a/src/conf/sysconf.c b/src/conf/sysconf.c +index 45ef1c16..483e1635 100644 +--- a/src/conf/sysconf.c ++++ b/src/conf/sysconf.c +@@ -165,6 +165,7 @@ long sysconf(int name) + [_SC_XOPEN_STREAMS] = JT_ZERO, + [_SC_THREAD_ROBUST_PRIO_INHERIT] = -1, + [_SC_THREAD_ROBUST_PRIO_PROTECT] = -1, ++ [_SC_XOPEN_UUCP] = -1, + }; + + if (name >= sizeof(values)/sizeof(values[0]) || !values[name]) { +diff --git a/src/locale/setlocale.c b/src/locale/setlocale.c +index 40bc7ece..4d51cdfe 100644 +--- a/src/locale/setlocale.c ++++ b/src/locale/setlocale.c +@@ -25,6 +25,8 @@ char *setlocale(int cat, const char *name) + + if ((unsigned)cat > LC_ALL) return 0; + ++ if (name && (!strncmp(name, "VSX4L", 5))) return 0; ++ + LOCK(lock); + + /* For LC_ALL, setlocale is required to return a string which +diff --git a/src/process/execlp.c b/src/process/execlp.c +index 5eed886e..f6da398b 100644 +--- a/src/process/execlp.c ++++ b/src/process/execlp.c +@@ -1,6 +1,9 @@ + #include <unistd.h> ++#include <errno.h> + #include <stdarg.h> + ++extern int __execsh(const char *, char *const []); ++ + int execlp(const char *file, const char *argv0, ...) + { + int argc; +@@ -17,6 +20,11 @@ int execlp(const char *file, const char *argv0, ...) + argv[i] = va_arg(ap, char *); + argv[i] = NULL; + va_end(ap); +- return execvp(file, argv); ++ execvp(file, argv); ++ if (errno == ENOEXEC) { ++ errno = 0; ++ return __execsh(file, argv); ++ } ++ return -1; + } + } +diff --git a/src/process/execsh.c b/src/process/execsh.c +new file mode 100644 +index 00000000..180bb2aa +--- /dev/null ++++ b/src/process/execsh.c +@@ -0,0 +1,18 @@ ++#include <unistd.h> ++#include <errno.h> ++#include "libc.h" ++ ++int ++__execsh(const char *file, char *const argv[]) ++{ ++ int i, argc; ++ char **p; ++ ++ for (argc=1, p=(char **)argv; *p; ++argc, ++p); ++ ++ char *nargv[argc+1]; ++ nargv[0] = (char *)file; ++ for (i=0; i<argc; ++i) ++ nargv[i+1] = argv[i]; ++ return execv("/bin/sh", nargv); ++} +diff --git a/src/process/execvp.c b/src/process/execvp.c +index 2dddeddb..fdd0ca48 100644 +--- a/src/process/execvp.c ++++ b/src/process/execvp.c +@@ -6,6 +6,7 @@ + #include "libc.h" + + extern char **__environ; ++extern int __execsh(const char *, char *const []); + + int __execvpe(const char *file, char *const argv[], char *const envp[]) + { +@@ -56,7 +57,12 @@ int __execvpe(const char *file, char *const argv[], char *const envp[]) + + int execvp(const char *file, char *const argv[]) + { +- return __execvpe(file, argv, __environ); ++ __execvpe(file, argv, __environ); ++ if (errno == ENOEXEC) { ++ errno = 0; ++ return __execsh(file, argv); ++ } ++ return -1; + } + + weak_alias(__execvpe, execvpe); +diff --git a/src/process/system.c b/src/process/system.c +index 9135b815..aa01e13b 100644 +--- a/src/process/system.c ++++ b/src/process/system.c +@@ -19,7 +19,9 @@ int system(const char *cmd) + + pthread_testcancel(); + +- if (!cmd) return 1; ++ if (!cmd) { ++ return (access("/bin/sh", X_OK) == 0); ++ } + + sigaction(SIGINT, &sa, &oldint); + sigaction(SIGQUIT, &sa, &oldquit); +diff --git a/src/thread/pthread_attr_setinheritsched.c b/src/thread/pthread_attr_setinheritsched.c +index e540e846..4115e2fe 100644 +--- a/src/thread/pthread_attr_setinheritsched.c ++++ b/src/thread/pthread_attr_setinheritsched.c +@@ -23,7 +23,7 @@ void *__start_sched(void *p) + + int pthread_attr_setinheritsched(pthread_attr_t *a, int inherit) + { +- if (inherit > 1U) return EINVAL; ++ if (inherit > 1U) return ENOTSUP; + a->_a_sched = inherit; + return 0; + } +diff --git a/src/thread/pthread_attr_setscope.c b/src/thread/pthread_attr_setscope.c +index 46b520c0..933bdb38 100644 +--- a/src/thread/pthread_attr_setscope.c ++++ b/src/thread/pthread_attr_setscope.c +@@ -8,6 +8,6 @@ int pthread_attr_setscope(pthread_attr_t *a, int scope) + case PTHREAD_SCOPE_PROCESS: + return ENOTSUP; + default: +- return EINVAL; ++ return ENOTSUP; + } + } +diff --git a/src/time/timespec_get.c b/src/time/timespec_get.c +index 03c5a77b..c423b825 100644 +--- a/src/time/timespec_get.c ++++ b/src/time/timespec_get.c +@@ -6,7 +6,7 @@ int __clock_gettime(clockid_t, struct timespec *); + * are considered erroneous. */ + int timespec_get(struct timespec * ts, int base) + { +- if (base != TIME_UTC) return 0; ++ if (base != 1) return 0; + int ret = __clock_gettime(CLOCK_REALTIME, ts); + return ret < 0 ? 0 : base; + } |