diff --git a/glibc/trunk/PKGBUILD b/glibc/trunk/PKGBUILD index ee22dbf..26d7bf8 100644 --- a/glibc/trunk/PKGBUILD +++ b/glibc/trunk/PKGBUILD @@ -22,13 +22,17 @@ options=('!strip' 'staticlibs') install=glibc.install source=(git://sourceware.org/git/glibc.git#commit=${_commit} locale.gen.txt - locale-gen) + locale-gen + wink.patch) md5sums=('SKIP' '07ac979b6ab5eeb778d55f041529d623' - '476e9113489f93b348b21e144b6a8fcf') + '476e9113489f93b348b21e144b6a8fcf' + 'fc3e1c5c43c44e290aa4085eb81cfe0c') prepare() { mkdir glibc-build + cd glibc + patch -Np1 <../wink.patch } build() { diff --git a/glibc/trunk/wink.patch b/glibc/trunk/wink.patch new file mode 100644 index 0000000..7761553 --- /dev/null +++ b/glibc/trunk/wink.patch @@ -0,0 +1,150 @@ +diff --git a/elf/Makefile b/elf/Makefile +index 593403c..509ecba 100644 +--- a/elf/Makefile ++++ b/elf/Makefile +@@ -149,7 +149,7 @@ tests += loadtest restest1 preloadtest loadfail multiload origtest resolvfail \ + tst-nodelete) \ + tst-initorder tst-initorder2 tst-relsort1 tst-null-argv \ + tst-ptrguard1 tst-tlsalign tst-tlsalign-extern tst-nodelete-opened \ +- tst-nodelete2 tst-audit11 tst-audit12 tst-dlsym-error ++ tst-nodelete2 tst-audit11 tst-audit12 + # reldep9 + ifeq ($(build-hardcoded-path-in-tests),yes) + tests += tst-dlopen-aout +@@ -1266,4 +1266,3 @@ $(objpfx)tst-ldconfig-X.out : tst-ldconfig-X.sh $(objpfx)ldconfig + $(SHELL) $< '$(common-objpfx)' '$(test-wrapper)' '$(test-wrapper-env)' > $@; \ + $(evaluate-test) + +-$(objpfx)tst-dlsym-error: $(libdl) +diff --git a/elf/dl-lookup.c b/elf/dl-lookup.c +index 52c994e..0573265 100644 +--- a/elf/dl-lookup.c ++++ b/elf/dl-lookup.c +@@ -862,6 +862,7 @@ _dl_lookup_symbol_x (const char *undef_name, struct link_map *undef_map, + if (__glibc_unlikely (current_value.s == NULL)) + { + if ((*ref == NULL || ELFW(ST_BIND) ((*ref)->st_info) != STB_WEAK) ++ && skip_map == NULL + && !(GLRO(dl_debug_mask) & DL_DEBUG_UNUSED)) + { + /* We could find no value for a strong reference. */ +diff --git a/elf/tst-dlsym-error.c b/elf/tst-dlsym-error.c +deleted file mode 100644 +index fb084c5..0000000 +--- a/elf/tst-dlsym-error.c ++++ /dev/null +@@ -1,114 +0,0 @@ +-/* Test error reporting for dlsym, dlvsym failures. +- Copyright (C) 2016 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 +- . */ +- +-#include +-#include +-#include +-#include +-#include +- +-/* Used to disambiguate symbol names. */ +-static int counter; +- +-static void +-test_one (void *handle, const char *name, void *(func) (void *, const char *), +- const char *suffix) +-{ +- ++counter; +- char symbol[32]; +- snprintf (symbol, sizeof (symbol), "no_such_symbol_%d", counter); +- char *expected_message; +- if (asprintf (&expected_message, ": undefined symbol: %s%s", +- symbol, suffix) < 0) +- { +- printf ("error: asprintf: %m\n"); +- abort (); +- } +- +- void *addr = func (handle, symbol); +- if (addr != NULL) +- { +- printf ("error: %s: found symbol \"no_such_symbol\"\n", name); +- abort (); +- } +- const char *message = dlerror (); +- if (message == NULL) +- { +- printf ("error: %s: missing error message\n", name); +- abort (); +- } +- const char *message_without_path = strchrnul (message, ':'); +- if (strcmp (message_without_path, expected_message) != 0) +- { +- printf ("error: %s: unexpected error message: %s\n", name, message); +- abort (); +- } +- free (expected_message); +- +- message = dlerror (); +- if (message != NULL) +- { +- printf ("error: %s: unexpected error message: %s\n", name, message); +- abort (); +- } +-} +- +-static void +-test_handles (const char *name, void *(func) (void *, const char *), +- const char *suffix) +-{ +- test_one (RTLD_DEFAULT, name, func, suffix); +- test_one (RTLD_NEXT, name, func, suffix); +- +- void *handle = dlopen (LIBC_SO, RTLD_LAZY); +- if (handle == NULL) +- { +- printf ("error: cannot dlopen %s: %s\n", LIBC_SO, dlerror ()); +- abort (); +- } +- test_one (handle, name, func, suffix); +- dlclose (handle); +-} +- +-static void * +-dlvsym_no_such_version (void *handle, const char *name) +-{ +- return dlvsym (handle, name, "NO_SUCH_VERSION"); +-} +- +-static void * +-dlvsym_glibc_private (void *handle, const char *name) +-{ +- return dlvsym (handle, name, "GLIBC_PRIVATE"); +-} +- +-static int +-do_test (void) +-{ +- test_handles ("dlsym", dlsym, ""); +- test_handles ("dlvsym", dlvsym_no_such_version, +- ", version NO_SUCH_VERSION"); +- test_handles ("dlvsym", dlvsym_glibc_private, +- ", version GLIBC_PRIVATE"); +- +- return 0; +-} +- +- +-#define TEST_FUNCTION do_test () +-#include "../test-skeleton.c"