diff --git a/core/glibc/0001-Don-t-use-IFUNC-resolver-for-longjmp-or-system-in-li.patch b/core/glibc/0001-Don-t-use-IFUNC-resolver-for-longjmp-or-system-in-li.patch deleted file mode 100644 index 5bd40130d..000000000 --- a/core/glibc/0001-Don-t-use-IFUNC-resolver-for-longjmp-or-system-in-li.patch +++ /dev/null @@ -1,110 +0,0 @@ -From fc5ad7024c620cdfe9b76e94638aac83b99c5bf8 Mon Sep 17 00:00:00 2001 -From: Andreas Schwab <schwab@suse.de> -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/core/glibc/0002-x86-Add-x86_64-to-x86-64-HWCAP-BZ-22093.patch b/core/glibc/0002-x86-Add-x86_64-to-x86-64-HWCAP-BZ-22093.patch deleted file mode 100644 index 9d1f6ed66..000000000 --- a/core/glibc/0002-x86-Add-x86_64-to-x86-64-HWCAP-BZ-22093.patch +++ /dev/null @@ -1,223 +0,0 @@ -From 45ff34638f034877b6a490c217d6a0632ce263f4 Mon Sep 17 00:00:00 2001 -From: "H.J. Lu" <hjl.tools@gmail.com> -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 -+ <http://www.gnu.org/licenses/>. */ -+ -+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 -+ <http://www.gnu.org/licenses/>. */ -+ -+void -+foo (void) -+{ -+} --- -2.13.2 - diff --git a/core/glibc/PKGBUILD b/core/glibc/PKGBUILD index 294e50ddc..f7706756f 100644 --- a/core/glibc/PKGBUILD +++ b/core/glibc/PKGBUILD @@ -6,56 +6,50 @@ # NOTE: valgrind requires rebuilt with each major glibc version # ALARM: Kevin Mihelich <kevin@archlinuxarm.org> -# - Specify our build host type -# - Disabled distcc +# - Specify our build host type +# - Disabled distcc +# - Strip out Arch x86 multilib noautobuild=1 pkgname=glibc pkgver=2.26 -pkgrel=6 -pkgdesc='GNU C Library' -arch=(i686 x86_64) +pkgrel=8 +arch=(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') -backup=(etc/gai.conf - etc/locale.gen - etc/nscd.conf) options=(!strip staticlibs !distcc) -install=glibc.install -_commit=4b692dffb95ac4812b161eb6a16113d7e824982e # release/2.26/master +_commit=71170eba2af41e08d51cf9d7b1ded5fd4b0b5c9c # release/2.26/master source=(git://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) + locale-gen) md5sums=('SKIP' '07ac979b6ab5eeb778d55f041529d623' - '476e9113489f93b348b21e144b6a8fcf' - 'cbc073315c00b03898b7fc614274d6b3') - -# pkgver() { -# cd glibc -# git describe --tags | sed 's/^glibc-//;s/-/+/g' -# } + '476e9113489f93b348b21e144b6a8fcf') prepare() { mkdir -p glibc-build - - cd glibc - patch -p1 -i "$srcdir/0001-Don-t-use-IFUNC-resolver-for-longjmp-or-system-in-li.patch" } build() { - cd glibc-build + local _configure_flags=( + --prefix=/usr + --with-headers=/usr/include + --with-bugurl=https://github.com/archlinuxarm/PKGBUILDs/issues + --enable-add-ons + --enable-bind-now + --enable-lock-elision + --disable-multi-arch + --enable-obsolete-nsl + --enable-obsolete-rpc + --enable-stack-protector=strong + --enable-stackguard-randomization + --disable-profile + --disable-werror + ) - 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 + cd "$srcdir/glibc-build" # ALARM: Specify build host types [[ $CARCH == "arm" ]] && CONFIGFLAG="--host=armv5tel-unknown-linux-gnueabi --build=armv5tel-unknown-linux-gnueabi" @@ -72,21 +66,9 @@ build() { CPPFLAGS=${CPPFLAGS/-D_FORTIFY_SOURCE=2/} "$srcdir/glibc/configure" \ - --prefix=/usr \ --libdir=/usr/lib \ --libexecdir=/usr/lib \ - --with-headers=/usr/include \ - --with-bugurl=https://github.com/archlinuxarm/PKGBUILDs/issues \ - --enable-add-ons \ - --enable-bind-now \ - --enable-lock-elision \ - --disable-multi-arch \ - --enable-obsolete-nsl \ - --enable-obsolete-rpc \ - --enable-stack-protector=strong \ - --enable-stackguard-randomization \ - --disable-profile \ - --disable-werror \ + ${_configure_flags[@]} \ $CONFIGFLAG # build libraries with fortify disabled @@ -112,6 +94,15 @@ check() { } package() { + pkgdesc='GNU C Library' + depends=('linux-api-headers>=4.10' tzdata filesystem) + optdepends=('gd: for memusagestat') + install=glibc.install + backup=(etc/gai.conf + etc/locale.gen + etc/nscd.conf) + groups=(base) + install -dm755 "$pkgdir/etc" touch "$pkgdir/etc/ld.so.conf" @@ -160,14 +151,4 @@ package() { 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 }