This is the mail archive of the glibc-cvs@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]