This is the mail archive of the
glibc-cvs@sourceware.org
mailing list for the glibc project.
GNU C Library master sources branch release/2.23/master updated. glibc-2.23-52-ga824d60
- From: fw at sourceware dot org
- To: glibc-cvs at sourceware dot org
- Date: 9 May 2016 10:47:57 -0000
- Subject: GNU C Library master sources branch release/2.23/master updated. glibc-2.23-52-ga824d60
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GNU C Library master sources".
The branch, release/2.23/master has been updated
via a824d609581d5ee7544aabcbbc70e8da44b2b5b6 (commit)
via 80f87443eed17838fe453f1f5406ccf5d3698c25 (commit)
from c4294bd8620fabf0afddc2b85701371fafd40a6b (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
http://sourceware.org/git/gitweb.cgi?p=glibc.git;a=commitdiff;h=a824d609581d5ee7544aabcbbc70e8da44b2b5b6
commit a824d609581d5ee7544aabcbbc70e8da44b2b5b6
Author: Adhemerval Zanella <adhemerval.zanella@linaro.com>
Date: Thu Mar 31 10:51:51 2016 -0300
Fix tst-dlsym-error build
This patch fixes the new test tst-dlsym-error build on aarch64
(and possible other architectures as well) due missing strchrnul
definition.
* elf/tst-dlsym-error.c: Include <string.h> for strchrnul.
(cherry picked from commit e91bd7465816f474617dcb4bbfe72f3594c5783c)
diff --git a/ChangeLog b/ChangeLog
index ff1d565..4764955 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+2016-03-31 Adhemerval Zanella <adhemerval.zanella@linaro.org>
+
+ * elf/tst-dlsym-error.c: Include <string.h> for strchrnul.
+
2016-03-31 Florian Weimer <fweimer@redhat.com>
[BZ #19509]
diff --git a/elf/tst-dlsym-error.c b/elf/tst-dlsym-error.c
index 11b0358..fb084c5 100644
--- a/elf/tst-dlsym-error.c
+++ b/elf/tst-dlsym-error.c
@@ -20,6 +20,7 @@
#include <gnu/lib-names.h>
#include <stdio.h>
#include <stdlib.h>
+#include <string.h>
/* Used to disambiguate symbol names. */
static int counter;
http://sourceware.org/git/gitweb.cgi?p=glibc.git;a=commitdiff;h=80f87443eed17838fe453f1f5406ccf5d3698c25
commit 80f87443eed17838fe453f1f5406ccf5d3698c25
Author: Florian Weimer <fweimer@redhat.com>
Date: Thu Mar 31 11:26:55 2016 +0200
Report dlsym, dlvsym lookup errors using dlerror [BZ #19509]
* elf/dl-lookup.c (_dl_lookup_symbol_x): Report error even if
skip_map != NULL.
* elf/tst-dlsym-error.c: New file.
* elf/Makefile (tests): Add tst-dlsym-error.
(tst-dlsym-error): Link against libdl.
(cherry picked from commit 7d45c163d00c88d5875a112343c4ea3e61349e6b)
diff --git a/ChangeLog b/ChangeLog
index 164f80c..ff1d565 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+2016-03-31 Florian Weimer <fweimer@redhat.com>
+
+ [BZ #19509]
+ * elf/dl-lookup.c (_dl_lookup_symbol_x): Report error even if
+ skip_map != NULL.
+ * elf/tst-dlsym-error.c: New file.
+ * elf/Makefile (tests): Add tst-dlsym-error.
+ (tst-dlsym-error): Link against libdl.
+
2016-03-07 Florian Weimer <fweimer@redhat.com>
[BZ #19610]
diff --git a/elf/Makefile b/elf/Makefile
index ae99f65..c3dc451 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-nodelete2 tst-audit11 tst-audit12 tst-dlsym-error
# reldep9
ifeq ($(build-hardcoded-path-in-tests),yes)
tests += tst-dlopen-aout
@@ -1257,3 +1257,5 @@ $(objpfx)tst-prelink-cmp.out: tst-prelink.exp \
$(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 f577759..6d299c1 100644
--- a/elf/dl-lookup.c
+++ b/elf/dl-lookup.c
@@ -858,7 +858,6 @@ _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
new file mode 100644
index 0000000..11b0358
--- /dev/null
+++ b/elf/tst-dlsym-error.c
@@ -0,0 +1,113 @@
+/* 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
+ <http://www.gnu.org/licenses/>. */
+
+#include <dlfcn.h>
+#include <gnu/lib-names.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+/* 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"
-----------------------------------------------------------------------
Summary of changes:
ChangeLog | 13 ++++++
elf/Makefile | 4 +-
elf/dl-lookup.c | 1 -
elf/tst-dlsym-error.c | 114 +++++++++++++++++++++++++++++++++++++++++++++++++
4 files changed, 130 insertions(+), 2 deletions(-)
create mode 100644 elf/tst-dlsym-error.c
hooks/post-receive
--
GNU C Library master sources