diff --git a/fakeroot-tcp/PKGBUILD b/fakeroot-tcp/PKGBUILD new file mode 100644 index 000000000000..ba0c1ba1b051 --- /dev/null +++ b/fakeroot-tcp/PKGBUILD @@ -0,0 +1,53 @@ +# Maintainer: 4679 +# Contributor: Bartłomiej Piotrowski +# Contributor: Allan McRae +# Contributor: Jochem Kossen + +pkgname=fakeroot-tcp +_pkgname=fakeroot +pkgver=1.21 +pkgrel=2 +pkgdesc='Tool for simulating superuser privileges,with tcp ipc' +arch=('i686' 'x86_64' 'armv7h') +license=('GPL') +url="http://packages.debian.org/fakeroot" +groups=('base-devel') +install=fakeroot.install +depends=('glibc' 'filesystem' 'sed' 'util-linux' 'sh') +makedepends=('po4a') +source=(http://ftp.debian.org/debian/pool/main/f/$_pkgname/${_pkgname}_${pkgver}.orig.tar.gz + silence-dlerror.patch) +md5sums=('be5c9a0e516869fca4a6758105968e5a' + '5fba0b541b5af39d804265223fda525c') + +prepare() { + cd $_pkgname-$pkgver + patch -p1 -i "$srcdir"/silence-dlerror.patch +} + +build() { + cd $_pkgname-$pkgver + + ./bootstrap + ./configure --prefix=/usr \ + --libdir=/usr/lib/libfakeroot \ + --disable-static \ + --with-ipc=tcp + + make + + cd doc + po4a -k 0 --rm-backups --variable "srcdir=../doc/" po4a/po4a.cfg +} + +package() { + cd $_pkgname-$pkgver + make DESTDIR="$pkgdir" install + + install -dm755 "$pkgdir"/etc/ld.so.conf.d/ + echo '/usr/lib/libfakeroot' > "$pkgdir"/etc/ld.so.conf.d/fakeroot.conf + + # install README for sysv/tcp usage + install -Dm644 README "$pkgdir"/usr/share/doc/$_pkgname/README +} + diff --git a/fakeroot-tcp/fakeroot.install b/fakeroot-tcp/fakeroot.install new file mode 100644 index 000000000000..986c91b068bf --- /dev/null +++ b/fakeroot-tcp/fakeroot.install @@ -0,0 +1,14 @@ +post_install() { + sbin/ldconfig -r . +} + +post_upgrade() { + if [ "$(vercmp $2 1.14.4-2)" -lt 0 ]; then + sed -i -e '/\/usr\/lib\/libfakeroot/d' etc/ld.so.conf + fi + sbin/ldconfig -r . +} + +pre_remove() { + sbin/ldconfig -r . +} diff --git a/fakeroot-tcp/lilac.py b/fakeroot-tcp/lilac.py new file mode 100755 index 000000000000..71c59a5a8a1d --- /dev/null +++ b/fakeroot-tcp/lilac.py @@ -0,0 +1,15 @@ +#!/usr/bin/env python3 +# +# This file is the most simple lilac.py file, +# and it suits for most packages in AUR. +# + +from lilaclib import * + +build_prefix = 'extra-x86_64' +pre_build = aur_pre_build +post_build = aur_post_build + +if __name__ == '__main__': + single_main() + diff --git a/fakeroot-tcp/silence-dlerror.patch b/fakeroot-tcp/silence-dlerror.patch new file mode 100644 index 000000000000..a4472d8f7c7b --- /dev/null +++ b/fakeroot-tcp/silence-dlerror.patch @@ -0,0 +1,17 @@ +diff --git a/libfakeroot.c b/libfakeroot.c +index f867758..7ef6e47 100644 +--- a/libfakeroot.c ++++ b/libfakeroot.c +@@ -256,10 +256,12 @@ void load_library_symbols(void){ + /* clear dlerror() just in case dlsym() legitimately returns NULL */ + msg = dlerror(); + *(next_wrap[i].doit)=dlsym(get_libc(), next_wrap[i].name); ++#ifdef LIBFAKEROOT_DEBUGGING + if ( (msg = dlerror()) != NULL){ + fprintf (stderr, "dlsym(%s): %s\n", next_wrap[i].name, msg); + /* abort ();*/ + } ++#endif /* LIBFAKEROOT_DEBUGGING */ + } + } + diff --git a/glibc-wsl/0001-Don-t-use-IFUNC-resolver-for-longjmp-or-system-in-li.patch b/glibc-wsl/0001-Don-t-use-IFUNC-resolver-for-longjmp-or-system-in-li.patch new file mode 100644 index 000000000000..5bd40130dee2 --- /dev/null +++ b/glibc-wsl/0001-Don-t-use-IFUNC-resolver-for-longjmp-or-system-in-li.patch @@ -0,0 +1,110 @@ +From fc5ad7024c620cdfe9b76e94638aac83b99c5bf8 Mon Sep 17 00:00:00 2001 +From: Andreas Schwab +Date: Tue, 8 Aug 2017 16:21:58 +0200 +Subject: [PATCH] Don't use IFUNC resolver for longjmp or system in libpthread + (bug 21041) + +Unlike the vfork forwarder and like the fork forwarder as in bug 19861, +there won't be a problem when the compiler does not turn this into a tail +call. +--- + nptl/pt-longjmp.c | 31 ++++++++++--------------------- + nptl/pt-system.c | 24 ++++++++---------------- + 3 files changed, 18 insertions(+), 37 deletions(-) + +diff --git a/nptl/pt-longjmp.c b/nptl/pt-longjmp.c +index 2ef757e687f..8f3c6b3a09f 100644 +--- a/nptl/pt-longjmp.c ++++ b/nptl/pt-longjmp.c +@@ -25,21 +25,14 @@ + symbol in libpthread, but the historical ABI requires it. For static + linking, there is no need to provide anything here--the libc version + will be linked in. For shared library ABI compatibility, there must be +- longjmp and siglongjmp symbols in libpthread.so; so we define them using +- IFUNC to redirect to the libc function. */ ++ longjmp and siglongjmp symbols in libpthread.so. + +-#if SHLIB_COMPAT (libpthread, GLIBC_2_0, GLIBC_2_22) +- +-# if HAVE_IFUNC +- +-# undef INIT_ARCH +-# define INIT_ARCH() +-# define DEFINE_LONGJMP(name) libc_ifunc (name, &__libc_longjmp) +- +-extern __typeof(longjmp) longjmp_ifunc; +-extern __typeof(siglongjmp) siglongjmp_ifunc; ++ With an IFUNC resolver, it would be possible to avoid the indirection, ++ but the IFUNC resolver might run before the __libc_longjmp symbol has ++ been relocated, in which case the IFUNC resolver would not be able to ++ provide the correct address. */ + +-# else /* !HAVE_IFUNC */ ++#if SHLIB_COMPAT (libpthread, GLIBC_2_0, GLIBC_2_22) + + static void __attribute__ ((noreturn, used)) + longjmp_compat (jmp_buf env, int val) +@@ -47,14 +40,10 @@ longjmp_compat (jmp_buf env, int val) + __libc_longjmp (env, val); + } + +-# define DEFINE_LONGJMP(name) strong_alias (longjmp_compat, name) +- +-# endif /* HAVE_IFUNC */ +- +-DEFINE_LONGJMP (longjmp_ifunc) +-compat_symbol (libpthread, longjmp_ifunc, longjmp, GLIBC_2_0); ++strong_alias (longjmp_compat, longjmp_alias) ++compat_symbol (libpthread, longjmp_alias, longjmp, GLIBC_2_0); + +-strong_alias (longjmp_ifunc, siglongjmp_ifunc) +-compat_symbol (libpthread, siglongjmp_ifunc, siglongjmp, GLIBC_2_0); ++strong_alias (longjmp_alias, siglongjmp_alias) ++compat_symbol (libpthread, siglongjmp_alias, siglongjmp, GLIBC_2_0); + + #endif +diff --git a/nptl/pt-system.c b/nptl/pt-system.c +index f8ca6ba0d94..b30ddf2b398 100644 +--- a/nptl/pt-system.c ++++ b/nptl/pt-system.c +@@ -25,29 +25,21 @@ + libpthread, but the historical ABI requires it. For static linking, + there is no need to provide anything here--the libc version will be + linked in. For shared library ABI compatibility, there must be a +- 'system' symbol in libpthread.so; so we define it using IFUNC to +- redirect to the libc function. */ ++ 'system' symbol in libpthread.so. + +-#if SHLIB_COMPAT (libpthread, GLIBC_2_0, GLIBC_2_22) +- +-# if HAVE_IFUNC +- +-extern __typeof(system) system_ifunc; +-# undef INIT_ARCH +-# define INIT_ARCH() +-libc_ifunc (system_ifunc, &__libc_system) ++ With an IFUNC resolver, it would be possible to avoid the indirection, ++ but the IFUNC resolver might run before the __libc_system symbol has ++ been relocated, in which case the IFUNC resolver would not be able to ++ provide the correct address. */ + +-# else /* !HAVE_IFUNC */ ++#if SHLIB_COMPAT (libpthread, GLIBC_2_0, GLIBC_2_22) + + static int __attribute__ ((used)) + system_compat (const char *line) + { + return __libc_system (line); + } +-strong_alias (system_compat, system_ifunc) +- +-# endif /* HAVE_IFUNC */ +- +-compat_symbol (libpthread, system_ifunc, system, GLIBC_2_0); ++strong_alias (system_compat, system_alias) ++compat_symbol (libpthread, system_alias, system, GLIBC_2_0); + + #endif +-- +2.14.1 + diff --git a/glibc-wsl/0001-Revert-Assume-prlimit64-is-available.patch b/glibc-wsl/0001-Revert-Assume-prlimit64-is-available.patch new file mode 100644 index 000000000000..b76e43b2abf3 --- /dev/null +++ b/glibc-wsl/0001-Revert-Assume-prlimit64-is-available.patch @@ -0,0 +1,171 @@ +From e2cfb44540873fc0a566a8a119c550a64a38c319 Mon Sep 17 00:00:00 2001 +From: Patrick Stewart +Date: Thu, 14 Sep 2017 18:26:22 +0100 +Subject: [PATCH] Revert "Assume prlimit64 is available." + +This reverts commit 695d7d138eda449678a1650a8b8b58181033353f. +--- + sysdeps/unix/sysv/linux/getrlimit64.c | 35 ++++++++++++++++++++++++++++++- + sysdeps/unix/sysv/linux/kernel-features.h | 5 +++++ + sysdeps/unix/sysv/linux/prlimit.c | 10 +++++++++ + sysdeps/unix/sysv/linux/setrlimit.c | 7 ++++++- + sysdeps/unix/sysv/linux/setrlimit64.c | 31 ++++++++++++++++++++++++++- + 5 files changed, 85 insertions(+), 3 deletions(-) + +diff --git a/sysdeps/unix/sysv/linux/getrlimit64.c b/sysdeps/unix/sysv/linux/getrlimit64.c +index 56af3c0646..37c173286f 100644 +--- a/sysdeps/unix/sysv/linux/getrlimit64.c ++++ b/sysdeps/unix/sysv/linux/getrlimit64.c +@@ -35,7 +35,40 @@ + int + __getrlimit64 (enum __rlimit_resource resource, struct rlimit64 *rlimits) + { +- return INLINE_SYSCALL_CALL (prlimit64, 0, resource, NULL, rlimits); ++#ifdef __NR_prlimit64 ++ int res = INLINE_SYSCALL_CALL (prlimit64, 0, resource, NULL, rlimits); ++ if (res == 0 || errno != ENOSYS) ++ return res; ++#endif ++ ++/* The fallback code only makes sense if the platform supports either ++ __NR_ugetrlimit and/or __NR_getrlimit. */ ++#if defined (__NR_ugetrlimit) || defined (__NR_getrlimit) ++# ifndef __NR_ugetrlimit ++# define __NR_ugetrlimit __NR_getrlimit ++# endif ++# if __RLIM_T_MATCHES_RLIM64_T ++# define rlimits32 (*rlimits) ++# else ++ struct rlimit rlimits32; ++# endif ++ ++ if (INLINE_SYSCALL_CALL (ugetrlimit, resource, &rlimits32) < 0) ++ return -1; ++ ++# if !__RLIM_T_MATCHES_RLIM64_T ++ if (rlimits32.rlim_cur == RLIM_INFINITY) ++ rlimits->rlim_cur = RLIM64_INFINITY; ++ else ++ rlimits->rlim_cur = rlimits32.rlim_cur; ++ if (rlimits32.rlim_max == RLIM_INFINITY) ++ rlimits->rlim_max = RLIM64_INFINITY; ++ else ++ rlimits->rlim_max = rlimits32.rlim_max; ++# endif /* !__RLIM_T_MATCHES_RLIM64_T */ ++#endif /* defined (__NR_ugetrlimit) || defined (__NR_getrlimit) */ ++ ++ return 0; + } + libc_hidden_def (__getrlimit64) + +diff --git a/sysdeps/unix/sysv/linux/kernel-features.h b/sysdeps/unix/sysv/linux/kernel-features.h +index 9495db4fef..38788a75fb 100644 +--- a/sysdeps/unix/sysv/linux/kernel-features.h ++++ b/sysdeps/unix/sysv/linux/kernel-features.h +@@ -81,6 +81,11 @@ + /* Support for sendmmsg functionality was added in 3.0. */ + #define __ASSUME_SENDMMSG 1 + ++/* prlimit64 is available in 2.6.36. */ ++#if __LINUX_KERNEL_VERSION >= 0x020624 ++# define __ASSUME_PRLIMIT64 1 ++#endif ++ + /* On most architectures, most socket syscalls are supported for all + supported kernel versions, but on some socketcall architectures + separate syscalls were only added later. */ +diff --git a/sysdeps/unix/sysv/linux/prlimit.c b/sysdeps/unix/sysv/linux/prlimit.c +index d31980f10c..2996e73b81 100644 +--- a/sysdeps/unix/sysv/linux/prlimit.c ++++ b/sysdeps/unix/sysv/linux/prlimit.c +@@ -20,6 +20,7 @@ + #include + + ++#ifdef __NR_prlimit64 + int + prlimit (__pid_t pid, enum __rlimit_resource resource, + const struct rlimit *new_rlimit, struct rlimit *old_rlimit) +@@ -72,3 +73,12 @@ prlimit (__pid_t pid, enum __rlimit_resource resource, + + return res; + } ++#else ++int ++prlimit (__pid_t pid, enum __rlimit_resource resource, ++ const struct rlimit *new_rlimit, struct rlimit *old_rlimit) ++{ ++ return INLINE_SYSCALL_ERROR_RETURN_VALUE (ENOSYS); ++} ++stub_warning (prlimit) ++#endif +diff --git a/sysdeps/unix/sysv/linux/setrlimit.c b/sysdeps/unix/sysv/linux/setrlimit.c +index 8773c78236..01812ac355 100644 +--- a/sysdeps/unix/sysv/linux/setrlimit.c ++++ b/sysdeps/unix/sysv/linux/setrlimit.c +@@ -34,6 +34,7 @@ + int + __setrlimit (enum __rlimit_resource resource, const struct rlimit *rlim) + { ++# ifdef __NR_prlimit64 + struct rlimit64 rlim64; + + if (rlim->rlim_cur == RLIM_INFINITY) +@@ -45,7 +46,11 @@ __setrlimit (enum __rlimit_resource resource, const struct rlimit *rlim) + else + rlim64.rlim_max = rlim->rlim_max; + +- return INLINE_SYSCALL_CALL (prlimit64, 0, resource, &rlim64, NULL); ++ int res = INLINE_SYSCALL_CALL (prlimit64, 0, resource, &rlim64, NULL); ++ if (res == 0 || errno != ENOSYS) ++ return res; ++# endif ++ return INLINE_SYSCALL_CALL (setrlimit, resource, rlim); + } + + # if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_2) +diff --git a/sysdeps/unix/sysv/linux/setrlimit64.c b/sysdeps/unix/sysv/linux/setrlimit64.c +index db1960fc18..2dd129d99e 100644 +--- a/sysdeps/unix/sysv/linux/setrlimit64.c ++++ b/sysdeps/unix/sysv/linux/setrlimit64.c +@@ -36,7 +36,36 @@ + int + __setrlimit64 (enum __rlimit_resource resource, const struct rlimit64 *rlimits) + { +- return INLINE_SYSCALL_CALL (prlimit64, 0, resource, rlimits, NULL); ++ int res; ++ ++#ifdef __NR_prlimit64 ++ res = INLINE_SYSCALL_CALL (prlimit64, 0, resource, rlimits, NULL); ++ if (res == 0 || errno != ENOSYS) ++ return res; ++#endif ++ ++/* The fallback code only makes sense if the platform supports ++ __NR_setrlimit. */ ++#ifdef __NR_setrlimit ++# if !__RLIM_T_MATCHES_RLIM64_T ++ struct rlimit rlimits32; ++ ++ if (rlimits->rlim_cur >= RLIM_INFINITY) ++ rlimits32.rlim_cur = RLIM_INFINITY; ++ else ++ rlimits32.rlim_cur = rlimits->rlim_cur; ++ if (rlimits->rlim_max >= RLIM_INFINITY) ++ rlimits32.rlim_max = RLIM_INFINITY; ++ else ++ rlimits32.rlim_max = rlimits->rlim_max; ++# else ++# define rlimits32 (*rlimits) ++# endif ++ ++ res = INLINE_SYSCALL_CALL (setrlimit, resource, &rlimits32); ++#endif ++ ++ return res; + } + weak_alias (__setrlimit64, setrlimit64) + +-- +2.14.1 + diff --git a/glibc-wsl/0001-Revert-linux-spawni.c-simplify-error-reporting-to-pa.patch b/glibc-wsl/0001-Revert-linux-spawni.c-simplify-error-reporting-to-pa.patch new file mode 100644 index 000000000000..6a897db659f5 --- /dev/null +++ b/glibc-wsl/0001-Revert-linux-spawni.c-simplify-error-reporting-to-pa.patch @@ -0,0 +1,188 @@ +From ac8a2ae80345fbd494b3e459014da3099d0af678 Mon Sep 17 00:00:00 2001 +From: Patrick Stewart +Date: Tue, 12 Sep 2017 20:35:51 +0100 +Subject: [PATCH] Revert "linux: spawni.c: simplify error reporting to parent" + +This reverts commit 4b4d4056bb154603f36c6f8845757c1012758158. +--- + sysdeps/unix/sysv/linux/spawni.c | 72 ++++++++++++++++++++++++++-------------- + 1 file changed, 47 insertions(+), 25 deletions(-) + +diff --git a/sysdeps/unix/sysv/linux/spawni.c b/sysdeps/unix/sysv/linux/spawni.c +index c56f894a82..29083e0998 100644 +--- a/sysdeps/unix/sysv/linux/spawni.c ++++ b/sysdeps/unix/sysv/linux/spawni.c +@@ -17,7 +17,6 @@ + . */ + + #include +-#include + #include + #include + #include +@@ -45,12 +44,11 @@ + 3. Child must synchronize with parent to enforce 2. and to possible + return execv issues. + +- The first issue is solved by blocking all signals in child, even +- the NPTL-internal ones (SIGCANCEL and SIGSETXID). The second and +- third issue is done by a stack allocation in parent, and by using a +- field in struct spawn_args where the child can write an error +- code. CLONE_VFORK ensures that the parent does not run until the +- child has either exec'ed successfully or exited. */ ++ The first issue is solved by blocking all signals in child, even the ++ NPTL-internal ones (SIGCANCEL and SIGSETXID). The second and third issue ++ is done by a stack allocation in parent and a synchronization with using ++ a pipe or waitpid (in case or error). The pipe has the advantage of ++ allowing the child the communicate an exec error. */ + + + /* The Unix standard contains a long explanation of the way to signal +@@ -78,6 +76,7 @@ + + struct posix_spawn_args + { ++ int pipe[2]; + sigset_t oldmask; + const char *file; + int (*exec) (const char *, char *const *, char *const *); +@@ -87,7 +86,6 @@ struct posix_spawn_args + ptrdiff_t argc; + char *const *envp; + int xflags; +- int err; + }; + + /* Older version requires that shell script without shebang definition +@@ -124,6 +122,10 @@ __spawni_child (void *arguments) + struct posix_spawn_args *args = arguments; + const posix_spawnattr_t *restrict attr = args->attr; + const posix_spawn_file_actions_t *file_actions = args->fa; ++ int p = args->pipe[1]; ++ int ret; ++ ++ close_not_cancel (args->pipe[0]); + + /* The child must ensure that no signal handler are enabled because it shared + memory with parent, so the signal disposition must be either SIG_DFL or +@@ -202,6 +204,17 @@ __spawni_child (void *arguments) + { + struct __spawn_action *action = &file_actions->__actions[cnt]; + ++ /* Dup the pipe fd onto an unoccupied one to avoid any file ++ operation to clobber it. */ ++ if ((action->action.close_action.fd == p) ++ || (action->action.open_action.fd == p) ++ || (action->action.dup2_action.fd == p)) ++ { ++ if ((ret = __dup (p)) < 0) ++ goto fail; ++ p = ret; ++ } ++ + switch (action->tag) + { + case spawn_do_close: +@@ -268,7 +281,6 @@ __spawni_child (void *arguments) + __sigprocmask (SIG_SETMASK, (attr->__flags & POSIX_SPAWN_SETSIGMASK) + ? &attr->__ss : &args->oldmask, 0); + +- args->err = 0; + args->exec (args->file, args->argv, args->envp); + + /* This is compatibility function required to enable posix_spawn run +@@ -276,13 +288,14 @@ __spawni_child (void *arguments) + (2.15). */ + maybe_script_execute (args); + ++ ret = -errno; ++ + fail: +- /* errno should have an appropriate non-zero value; otherwise, +- there's a bug in glibc or the kernel. For lack of an error code +- (EINTERNALBUG) describing that, use ECHILD. Another option would +- be to set args->err to some negative sentinel and have the parent +- abort(), but that seems needlessly harsh. */ +- args->err = errno ? : ECHILD; ++ /* Since sizeof errno < PIPE_BUF, the write is atomic. */ ++ ret = -ret; ++ if (ret) ++ while (write_not_cancel (p, &ret, sizeof ret) < 0) ++ continue; + _exit (SPAWN_ERROR); + } + +@@ -299,6 +312,9 @@ __spawnix (pid_t * pid, const char *file, + struct posix_spawn_args args; + int ec; + ++ if (__pipe2 (args.pipe, O_CLOEXEC)) ++ return errno; ++ + /* To avoid imposing hard limits on posix_spawn{p} the total number of + arguments is first calculated to allocate a mmap to hold all possible + values. */ +@@ -330,16 +346,17 @@ __spawnix (pid_t * pid, const char *file, + void *stack = __mmap (NULL, stack_size, prot, + MAP_PRIVATE | MAP_ANONYMOUS | MAP_STACK, -1, 0); + if (__glibc_unlikely (stack == MAP_FAILED)) +- return errno; ++ { ++ close_not_cancel (args.pipe[0]); ++ close_not_cancel (args.pipe[1]); ++ return errno; ++ } + + /* Disable asynchronous cancellation. */ + int state; + __libc_ptf_call (__pthread_setcancelstate, + (PTHREAD_CANCEL_DISABLE, &state), 0); + +- /* Child must set args.err to something non-negative - we rely on +- the parent and child sharing VM. */ +- args.err = -1; + args.file = file; + args.exec = exec; + args.fa = file_actions; +@@ -353,8 +370,9 @@ __spawnix (pid_t * pid, const char *file, + + /* The clone flags used will create a new child that will run in the same + memory space (CLONE_VM) and the execution of calling thread will be +- suspend until the child calls execve or _exit. +- ++ suspend until the child calls execve or _exit. These condition as ++ signal below either by pipe write (_exit with SPAWN_ERROR) or ++ a successful execve. + Also since the calling thread execution will be suspend, there is not + need for CLONE_SETTLS. Although parent and child share the same TLS + namespace, there will be no concurrent access for TLS variables (errno +@@ -362,18 +380,22 @@ __spawnix (pid_t * pid, const char *file, + new_pid = CLONE (__spawni_child, STACK (stack, stack_size), stack_size, + CLONE_VM | CLONE_VFORK | SIGCHLD, &args); + ++ close_not_cancel (args.pipe[1]); ++ + if (new_pid > 0) + { +- ec = args.err; +- assert (ec >= 0); +- if (ec != 0) +- __waitpid (new_pid, NULL, 0); ++ if (__read (args.pipe[0], &ec, sizeof ec) != sizeof ec) ++ ec = 0; ++ else ++ __waitpid (new_pid, NULL, 0); + } + else + ec = -new_pid; + + __munmap (stack, stack_size); + ++ close_not_cancel (args.pipe[0]); ++ + if ((ec == 0) && (pid != NULL)) + *pid = new_pid; + +-- +2.14.1 + diff --git a/glibc-wsl/0002-x86-Add-x86_64-to-x86-64-HWCAP-BZ-22093.patch b/glibc-wsl/0002-x86-Add-x86_64-to-x86-64-HWCAP-BZ-22093.patch new file mode 100644 index 000000000000..9d1f6ed66a05 --- /dev/null +++ b/glibc-wsl/0002-x86-Add-x86_64-to-x86-64-HWCAP-BZ-22093.patch @@ -0,0 +1,223 @@ +From 45ff34638f034877b6a490c217d6a0632ce263f4 Mon Sep 17 00:00:00 2001 +From: "H.J. Lu" +Date: Mon, 11 Sep 2017 08:18:11 -0700 +Subject: [PATCH] x86: Add x86_64 to x86-64 HWCAP [BZ #22093] + +Before glibc 2.26, ld.so set dl_platform to "x86_64" and searched the +"x86_64" subdirectory when loading a shared library. ld.so in glibc +2.26 was changed to set dl_platform to "haswell" or "xeon_phi", based +on supported ISAs. This led to shared library loading failure for +shared libraries placed under the "x86_64" subdirectory. + +This patch adds "x86_64" to x86-64 dl_hwcap so that ld.so will always +search the "x86_64" subdirectory when loading a shared library. + +NB: We can't set x86-64 dl_platform to "x86-64" since ld.so will skip +the "haswell" and "xeon_phi" subdirectories on "haswell" and "xeon_phi" +machines. + +Tested on i686 and x86-64. + + [BZ #22093] + * sysdeps/x86/cpu-features.c (init_cpu_features): Initialize + GLRO(dl_hwcap) to HWCAP_X86_64 for x86-64. + * sysdeps/x86/dl-hwcap.h (HWCAP_COUNT): Updated. + (HWCAP_IMPORTANT): Likewise. + (HWCAP_X86_64): New enum. + (HWCAP_X86_AVX512_1): Updated. + * sysdeps/x86/dl-procinfo.c (_dl_x86_hwcap_flags): Add "x86_64". + * sysdeps/x86_64/Makefile (tests): Add tst-x86_64-1. + (modules-names): Add x86_64/tst-x86_64mod-1. + (LDFLAGS-tst-x86_64mod-1.so): New. + ($(objpfx)tst-x86_64-1): Likewise. + ($(objpfx)x86_64/tst-x86_64mod-1.os): Likewise. + (tst-x86_64-1-clean): Likewise. + * sysdeps/x86_64/tst-x86_64-1.c: New file. + * sysdeps/x86_64/tst-x86_64mod-1.c: Likewise. +--- + sysdeps/x86/cpu-features.c | 3 ++- + sysdeps/x86/dl-hwcap.h | 12 +++++++----- + sysdeps/x86/dl-procinfo.c | 4 ++-- + sysdeps/x86_64/Makefile | 17 +++++++++++++++++ + sysdeps/x86_64/tst-x86_64-1.c | 26 ++++++++++++++++++++++++++ + sysdeps/x86_64/tst-x86_64mod-1.c | 22 ++++++++++++++++++++++ + 7 files changed, 76 insertions(+), 8 deletions(-) + create mode 100644 sysdeps/x86_64/tst-x86_64-1.c + create mode 100644 sysdeps/x86_64/tst-x86_64mod-1.c + +diff --git a/sysdeps/x86/cpu-features.c b/sysdeps/x86/cpu-features.c +index 6f900840d4..c267f17b76 100644 +--- a/sysdeps/x86/cpu-features.c ++++ b/sysdeps/x86/cpu-features.c +@@ -336,7 +336,6 @@ no_cpuid: + + /* Reuse dl_platform, dl_hwcap and dl_hwcap_mask for x86. */ + GLRO(dl_platform) = NULL; +- GLRO(dl_hwcap) = 0; + #if !HAVE_TUNABLES && defined SHARED + /* The glibc.tune.hwcap_mask tunable is initialized already, so no need to do + this. */ +@@ -344,6 +343,7 @@ no_cpuid: + #endif + + #ifdef __x86_64__ ++ GLRO(dl_hwcap) = HWCAP_X86_64; + if (cpu_features->kind == arch_kind_intel) + { + if (CPU_FEATURES_ARCH_P (cpu_features, AVX512F_Usable) +@@ -374,6 +374,7 @@ no_cpuid: + GLRO(dl_platform) = "haswell"; + } + #else ++ GLRO(dl_hwcap) = 0; + if (CPU_FEATURES_CPU_P (cpu_features, SSE2)) + GLRO(dl_hwcap) |= HWCAP_X86_SSE2; + +diff --git a/sysdeps/x86/dl-hwcap.h b/sysdeps/x86/dl-hwcap.h +index c95668415a..38627e9eef 100644 +--- a/sysdeps/x86/dl-hwcap.h ++++ b/sysdeps/x86/dl-hwcap.h +@@ -24,15 +24,16 @@ + # define HWCAP_PLATFORMS_START 0 + # define HWCAP_PLATFORMS_COUNT 4 + # define HWCAP_START 0 +-# define HWCAP_COUNT 2 +-# define HWCAP_IMPORTANT (HWCAP_X86_SSE2 | HWCAP_X86_AVX512_1) ++# define HWCAP_COUNT 3 ++# define HWCAP_IMPORTANT \ ++ (HWCAP_X86_SSE2 | HWCAP_X86_64 | HWCAP_X86_AVX512_1) + #elif defined __x86_64__ + /* For 64 bit, only cover x86-64 platforms and capabilities. */ + # define HWCAP_PLATFORMS_START 2 + # define HWCAP_PLATFORMS_COUNT 4 + # define HWCAP_START 1 +-# define HWCAP_COUNT 2 +-# define HWCAP_IMPORTANT (HWCAP_X86_AVX512_1) ++# define HWCAP_COUNT 3 ++# define HWCAP_IMPORTANT (HWCAP_X86_64 | HWCAP_X86_AVX512_1) + #else + /* For 32 bit, only cover i586, i686 and SSE2. */ + # define HWCAP_PLATFORMS_START 0 +@@ -45,7 +46,8 @@ + enum + { + HWCAP_X86_SSE2 = 1 << 0, +- HWCAP_X86_AVX512_1 = 1 << 1 ++ HWCAP_X86_64 = 1 << 1, ++ HWCAP_X86_AVX512_1 = 1 << 2 + }; + + static inline const char * +diff --git a/sysdeps/x86/dl-procinfo.c b/sysdeps/x86/dl-procinfo.c +index 43ab8fe25b..0192feb850 100644 +--- a/sysdeps/x86/dl-procinfo.c ++++ b/sysdeps/x86/dl-procinfo.c +@@ -58,11 +58,11 @@ PROCINFO_CLASS struct cpu_features _dl_x86_cpu_features + #if !defined PROCINFO_DECL && defined SHARED + ._dl_x86_hwcap_flags + #else +-PROCINFO_CLASS const char _dl_x86_hwcap_flags[2][9] ++PROCINFO_CLASS const char _dl_x86_hwcap_flags[3][9] + #endif + #ifndef PROCINFO_DECL + = { +- "sse2", "avx512_1" ++ "sse2", "x86_64", "avx512_1" + } + #endif + #if !defined SHARED || defined PROCINFO_DECL +diff --git a/sysdeps/x86_64/Makefile b/sysdeps/x86_64/Makefile +index 7f3ffe34ba..1514805f4a 100644 +--- a/sysdeps/x86_64/Makefile ++++ b/sysdeps/x86_64/Makefile +@@ -52,6 +52,12 @@ $(objpfx)tst-quad2pie: $(objpfx)tst-quadmod2pie.o + CFLAGS-tst-quad1pie.c = $(PIE-ccflag) + CFLAGS-tst-quad2pie.c = $(PIE-ccflag) + ++tests += tst-x86_64-1 ++modules-names += x86_64/tst-x86_64mod-1 ++LDFLAGS-tst-x86_64mod-1.so = -Wl,-soname,tst-x86_64mod-1.so ++ ++$(objpfx)tst-x86_64-1: $(objpfx)x86_64/tst-x86_64mod-1.so ++ + tests += tst-audit3 tst-audit4 tst-audit5 tst-audit6 tst-audit7 \ + tst-audit10 tst-sse tst-avx tst-avx512 + test-extras += tst-audit4-aux tst-audit10-aux \ +@@ -124,3 +130,14 @@ endif + ifeq ($(subdir),csu) + gen-as-const-headers += tlsdesc.sym rtld-offsets.sym + endif ++ ++$(objpfx)x86_64/tst-x86_64mod-1.os: $(objpfx)tst-x86_64mod-1.os ++ $(make-target-directory) ++ rm -f $@ ++ ln $< $@ ++ ++do-tests-clean common-mostlyclean: tst-x86_64-1-clean ++ ++.PHONY: tst-x86_64-1-clean ++tst-x86_64-1-clean: ++ -rm -rf $(objpfx)x86_64 +diff --git a/sysdeps/x86_64/tst-x86_64-1.c b/sysdeps/x86_64/tst-x86_64-1.c +new file mode 100644 +index 0000000000..ba1a55cdaf +--- /dev/null ++++ b/sysdeps/x86_64/tst-x86_64-1.c +@@ -0,0 +1,26 @@ ++/* Test searching the "x86_64" directory for shared libraries. ++ Copyright (C) 2017 Free Software Foundation, Inc. ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public ++ License as published by the Free Software Foundation; either ++ version 2.1 of the License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, see ++ . */ ++ ++extern void foo (void); ++ ++int ++main (void) ++{ ++ foo (); ++ return 0; ++} +diff --git a/sysdeps/x86_64/tst-x86_64mod-1.c b/sysdeps/x86_64/tst-x86_64mod-1.c +new file mode 100644 +index 0000000000..83dfafb5a8 +--- /dev/null ++++ b/sysdeps/x86_64/tst-x86_64mod-1.c +@@ -0,0 +1,22 @@ ++/* Test searching the "x86_64" directory for shared libraries. ++ Copyright (C) 2017 Free Software Foundation, Inc. ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public ++ License as published by the Free Software Foundation; either ++ version 2.1 of the License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, see ++ . */ ++ ++void ++foo (void) ++{ ++} +-- +2.13.2 + diff --git a/glibc-wsl/PKGBUILD b/glibc-wsl/PKGBUILD new file mode 100644 index 000000000000..446e178f15bc --- /dev/null +++ b/glibc-wsl/PKGBUILD @@ -0,0 +1,168 @@ +# Maintainer: Patrick Stewart +# Contributor: Bartlomiej Piotrowski +# Contributor: Allan McRae + +# toolchain build order: linux-api-headers->glibc->binutils->gcc->binutils->glibc +# NOTE: valgrind requires rebuilt with each major glibc version + +pkgname=glibc-wsl +pkgver=2.26 +pkgrel=4 +pkgdesc='GNU C Library' +arch=(i686 x86_64) +url='http://www.gnu.org/software/libc' +license=(GPL LGPL) +groups=(base) +depends=('linux-api-headers>=4.10' tzdata filesystem) +makedepends=(git gd) +optdepends=('gd: for memusagestat') +provides=(glibc=${pkgver}-${pkgrel}) +conflicts=(glibc) +backup=(etc/gai.conf + etc/locale.gen + etc/nscd.conf) +options=(!strip staticlibs) +install=glibc.install +_commit=58270c0049404ef2f878fdd45df55f17f0b8c1f7 +source=(glibc::git+https://sourceware.org/git/glibc.git#commit=${_commit} + locale.gen.txt + locale-gen + 0001-Don-t-use-IFUNC-resolver-for-longjmp-or-system-in-li.patch + 0002-x86-Add-x86_64-to-x86-64-HWCAP-BZ-22093.patch + 0001-Revert-linux-spawni.c-simplify-error-reporting-to-pa.patch + 0001-Revert-Assume-prlimit64-is-available.patch) +md5sums=('SKIP' + '07ac979b6ab5eeb778d55f041529d623' + '476e9113489f93b348b21e144b6a8fcf' + 'cbc073315c00b03898b7fc614274d6b3' + 'bd9b13f3294b6357baa809e4416b9f44' + 'a987eab514bee92cc627453c777896e8' + '5758d6e2a0ca3dbd6019063f895b64da') + +# pkgver() { +# cd glibc +# git describe --tags | sed 's/^glibc-//;s/-/+/g' +# } + +prepare() { + mkdir -p glibc-build + + cd glibc + patch -p1 -i "$srcdir/0001-Don-t-use-IFUNC-resolver-for-longjmp-or-system-in-li.patch" + patch -p1 -i "$srcdir/0002-x86-Add-x86_64-to-x86-64-HWCAP-BZ-22093.patch" + patch -p1 -i "$srcdir/0001-Revert-linux-spawni.c-simplify-error-reporting-to-pa.patch" + patch -p1 -i "$srcdir/0001-Revert-Assume-prlimit64-is-available.patch" +} + +build() { + cd glibc-build + + if [[ ${CARCH} = "i686" ]]; then + # Hack to fix NPTL issues with Xen, only required on 32bit platforms + export CFLAGS="$CFLAGS -mno-tls-direct-seg-refs" + fi + + echo "slibdir=/usr/lib" >> configparms + echo "rtlddir=/usr/lib" >> configparms + echo "sbindir=/usr/bin" >> configparms + echo "rootsbindir=/usr/bin" >> configparms + + # remove fortify for building libraries + CPPFLAGS=${CPPFLAGS/-D_FORTIFY_SOURCE=2/} + + "$srcdir/glibc/configure" \ + --prefix=/usr \ + --libdir=/usr/lib \ + --libexecdir=/usr/lib \ + --with-headers=/usr/include \ + --with-bugurl=https://bugs.archlinux.org/ \ + --enable-add-ons \ + --enable-bind-now \ + --enable-lock-elision \ + --enable-multi-arch \ + --enable-obsolete-nsl \ + --enable-obsolete-rpc \ + --enable-stack-protector=strong \ + --enable-stackguard-randomization \ + --disable-profile \ + --disable-werror + + # build libraries with fortify disabled + echo "build-programs=no" >> configparms + make + + # re-enable fortify for programs + sed -i "/build-programs=/s#no#yes#" configparms + + echo "CC += -D_FORTIFY_SOURCE=2" >> configparms + echo "CXX += -D_FORTIFY_SOURCE=2" >> configparms + make +} + +check() { + cd glibc-build + + # remove fortify in preparation to run test-suite + sed -i '/FORTIFY/d' configparms + + # some failures are "expected" + make check || true +} + +package() { + install -dm755 "$pkgdir/etc" + touch "$pkgdir/etc/ld.so.conf" + + make -C glibc-build install_root="$pkgdir" install + rm -f "$pkgdir"/etc/ld.so.{cache,conf} + + cd glibc + + install -dm755 "$pkgdir"/usr/lib/{locale,systemd/system,tmpfiles.d} + install -m644 nscd/nscd.conf "$pkgdir/etc/nscd.conf" + install -m644 nscd/nscd.service "$pkgdir/usr/lib/systemd/system" + install -m644 nscd/nscd.tmpfiles "$pkgdir/usr/lib/tmpfiles.d/nscd.conf" + install -dm755 "$pkgdir/var/db/nscd" + + install -m644 posix/gai.conf "$pkgdir"/etc/gai.conf + + install -m755 "$srcdir/locale-gen" "$pkgdir/usr/bin" + + # create /etc/locale.gen + install -m644 "$srcdir/locale.gen.txt" "$pkgdir/etc/locale.gen" + sed -e '1,3d' -e 's|/| |g' -e 's|\\| |g' -e 's|^|#|g' \ + "$srcdir/glibc/localedata/SUPPORTED" >> "$pkgdir/etc/locale.gen" + + # Do not strip the following files for improved debugging support + # ("improved" as in not breaking gdb and valgrind...): + # ld-${pkgver}.so + # libc-${pkgver}.so + # libpthread-${pkgver}.so + # libthread_db-1.0.so + + cd "$pkgdir" + strip $STRIP_BINARIES usr/bin/{gencat,getconf,getent,iconv,iconvconfig} \ + usr/bin/{ldconfig,locale,localedef,nscd,makedb} \ + usr/bin/{pcprofiledump,pldd,rpcgen,sln,sprof} \ + usr/lib/getconf/* + + strip $STRIP_STATIC usr/lib/lib{anl,BrokenLocale,c{,_nonshared},crypt}.a \ + usr/lib/lib{dl,g,ieee,mcheck,nsl,pthread{,_nonshared}}.a \ + usr/lib/lib{resolv,rpcsvc,rt,util}.a + + strip $STRIP_SHARED usr/lib/lib{anl,BrokenLocale,cidn,crypt}-${pkgver}.so \ + usr/lib/libnss_{compat,db,dns,files,hesiod,nis,nisplus}-*.so \ + usr/lib/lib{dl,m,nsl,resolv,rt,util}-${pkgver}.so \ + usr/lib/lib{memusage,pcprofile,SegFault}.so \ + usr/lib/{audit,gconv}/*.so || true + + if [[ $CARCH = "x86_64" ]]; then + strip $STRIP_STATIC usr/lib/lib{m-${pkgver},mvec{,_nonshared}}.a + strip $STRIP_SHARED usr/lib/libmvec-*.so + fi + + if [[ $CARCH = "i686" ]]; then + strip $STRIP_BINARIES usr/bin/lddlibc4 + strip $STRIP_STATIC usr/lib/libm.a + fi +} diff --git a/glibc-wsl/glibc.install b/glibc-wsl/glibc.install new file mode 100644 index 000000000000..351f05b263cb --- /dev/null +++ b/glibc-wsl/glibc.install @@ -0,0 +1,5 @@ +post_upgrade() { + locale-gen + + ldconfig -r . +} diff --git a/glibc-wsl/locale-gen b/glibc-wsl/locale-gen new file mode 100644 index 000000000000..5aff344c4e91 --- /dev/null +++ b/glibc-wsl/locale-gen @@ -0,0 +1,42 @@ +#!/bin/sh + +set -e + +LOCALEGEN=/etc/locale.gen +LOCALES=/usr/share/i18n/locales +if [ -n "$POSIXLY_CORRECT" ]; then + unset POSIXLY_CORRECT +fi + + +[ -f $LOCALEGEN -a -s $LOCALEGEN ] || exit 0; + +# Remove all old locale dir and locale-archive before generating new +# locale data. +rm -rf /usr/lib/locale/* || true + +umask 022 + +is_entry_ok() { + if [ -n "$locale" -a -n "$charset" ] ; then + true + else + echo "error: Bad entry '$locale $charset'" + false + fi +} + +echo "Generating locales..." +while read locale charset; do \ + case $locale in \#*) continue;; "") continue;; esac; \ + is_entry_ok || continue + echo -n " `echo $locale | sed 's/\([^.\@]*\).*/\1/'`"; \ + echo -n ".$charset"; \ + echo -n `echo $locale | sed 's/\([^\@]*\)\(\@.*\)*/\2/'`; \ + echo -n '...'; \ + if [ -f $LOCALES/$locale ]; then input=$locale; else \ + input=`echo $locale | sed 's/\([^.]*\)[^@]*\(.*\)/\1\2/'`; fi; \ + localedef -i $input -c -f $charset -A /usr/share/locale/locale.alias $locale; \ + echo ' done'; \ +done < $LOCALEGEN +echo "Generation complete." diff --git a/glibc-wsl/locale.gen.txt b/glibc-wsl/locale.gen.txt new file mode 100644 index 000000000000..ccdd817342c7 --- /dev/null +++ b/glibc-wsl/locale.gen.txt @@ -0,0 +1,23 @@ +# Configuration file for locale-gen +# +# lists of locales that are to be generated by the locale-gen command. +# +# Each line is of the form: +# +# +# +# where is one of the locales given in /usr/share/i18n/locales +# and is one of the character sets listed in /usr/share/i18n/charmaps +# +# Examples: +# en_US ISO-8859-1 +# en_US.UTF-8 UTF-8 +# de_DE ISO-8859-1 +# de_DE@euro ISO-8859-15 +# +# The locale-gen command will generate all the locales, +# placing them in /usr/lib/locale. +# +# A list of supported locales is included in this file. +# Uncomment the ones you need. +# diff --git a/nvchecker.ini b/nvchecker.ini index 9c74cf2ff596..77d3fbb3a9f9 100644 --- a/nvchecker.ini +++ b/nvchecker.ini @@ -2088,6 +2088,14 @@ aur= [java-service-wrapper] aur= +[fakeroot-tcp] +aur= + +[glibc-wsl] +aur= + +[obfs4proxy] +aur= # Others {{{1 ; [archlinuxcn-keyring] diff --git a/obfs4proxy/PKGBUILD b/obfs4proxy/PKGBUILD new file mode 100644 index 000000000000..eb26adca821c --- /dev/null +++ b/obfs4proxy/PKGBUILD @@ -0,0 +1,30 @@ +# Maintainer: mutantmonkey +# Contributor: shyokou +# Contributor: FzerorubigD +pkgname=obfs4proxy +_gitname=obfs4 +pkgver=0.0.7 +pkgrel=1 +pkgdesc='The obfourscator - a pluggable transport proxy written in Go' +arch=('i686' 'x86_64') +url='https://gitweb.torproject.org/pluggable-transports/obfs4.git/' +license=('BSD') +makedepends=('git' 'go') +optdepends=('tor: you need tor to use this package') +source=("git+https://git.torproject.org/pluggable-transports/obfs4.git#tag=obfs4proxy-${pkgver}") +sha256sums=('SKIP') + +build() { + cd "${srcdir}/${_gitname}/obfs4proxy" + GOPATH="$srcdir" GOBIN="$PWD" go get -v +} + +package() { + cd "${srcdir}/${_gitname}" + install -Dm0755 obfs4proxy/obfs4proxy "${pkgdir}/usr/bin/obfs4proxy" + install -Dm0644 doc/obfs4proxy.1 "${pkgdir}/usr/share/man/man1/obfs4proxy.1" + install -Dm0644 ChangeLog "${pkgdir}/usr/share/doc/${pkgname}/ChangeLog" + install -Dm0644 LICENSE "${pkgdir}/usr/share/licenses/${pkgname}/LICENSE" +} + +## vim:set ts=2 sw=2 et: diff --git a/obfs4proxy/lilac.py b/obfs4proxy/lilac.py new file mode 100755 index 000000000000..71c59a5a8a1d --- /dev/null +++ b/obfs4proxy/lilac.py @@ -0,0 +1,15 @@ +#!/usr/bin/env python3 +# +# This file is the most simple lilac.py file, +# and it suits for most packages in AUR. +# + +from lilaclib import * + +build_prefix = 'extra-x86_64' +pre_build = aur_pre_build +post_build = aur_post_build + +if __name__ == '__main__': + single_main() +