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 master updated. glibc-2.26-374-g1cc9e59


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, master has been updated
       via  1cc9e59a93636be6772ad423f7895e7ab52e4be7 (commit)
      from  ae8372d7e4c44f6839aa3d851d4d0cb486b81cd5 (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=1cc9e59a93636be6772ad423f7895e7ab52e4be7

commit 1cc9e59a93636be6772ad423f7895e7ab52e4be7
Author: Paul Pluzhnikov <ppluzhnikov@google.com>
Date:   Wed Sep 20 19:37:45 2017 -0700

    Implement xdlopen, xdlsym and xdlclose routines which terminate test
    program with appropriate message if the corresponding dlfcn.h routine
    returns an error.
    
    Use them in stdlib/tst-tls-atexit.c

diff --git a/ChangeLog b/ChangeLog
index d85bb87..d7eb754 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2017-09-20  Paul Pluzhnikov  <ppluzhnikov@google.com>
+	    Carlos O'Donell  <carlos@redhat.com>
+
+	* support/xdlfcn.h: New file.
+	* support/xdlfcn.c: New file.
+	* support/Makefile (libsupport-routines): Add xdlfcn.
+	* stdlib/tst-tls-atexit.c: Use xdlopen, xdlsym, xdlclose.
+
 2017-09-20  Joseph Myers  <joseph@codesourcery.com>
 
 	[BZ #20142]
diff --git a/stdlib/tst-tls-atexit.c b/stdlib/tst-tls-atexit.c
index 6dbf49d..165909a 100644
--- a/stdlib/tst-tls-atexit.c
+++ b/stdlib/tst-tls-atexit.c
@@ -31,7 +31,6 @@
    second handle.  In the end, the DSO should remain loaded due to the
    RTLD_NODELETE flag being set in the second dlopen call.  */
 
-#include <dlfcn.h>
 #include <pthread.h>
 #include <stdio.h>
 #include <unistd.h>
@@ -39,6 +38,7 @@
 #include <errno.h>
 #include <link.h>
 #include <stdbool.h>
+#include <support/xdlfcn.h>
 
 #ifndef NO_DELETE
 # define LOADED_IS_GOOD false
@@ -73,18 +73,12 @@ is_loaded (void)
 static void *
 reg_dtor_and_close (void *h)
 {
-  void (*reg_dtor) (void) = (void (*) (void)) dlsym (h, "reg_dtor");
-
-  if (reg_dtor == NULL)
-    {
-      printf ("Unable to find symbol: %s\n", dlerror ());
-      return (void *) (uintptr_t) 1;
-    }
+  void (*reg_dtor) (void) = (void (*) (void)) xdlsym (h, "reg_dtor");
 
   reg_dtor ();
 
 #ifndef NO_DELETE
-  dlclose (h);
+  xdlclose (h);
 #endif
 
   return NULL;
@@ -119,32 +113,22 @@ static int
 do_test (void)
 {
   /* Load the DSO.  */
-  void *h1 = dlopen (DSO_NAME, RTLD_LAZY);
-  if (h1 == NULL)
-    {
-      printf ("h1: Unable to load DSO: %s\n", dlerror ());
-      return 1;
-    }
+  void *h1 = xdlopen (DSO_NAME, RTLD_LAZY);
 
 #ifndef NO_DELETE
   if (spawn_thread (h1) != 0)
     return 1;
 #endif
 
-  void *h2 = dlopen (DSO_NAME, H2_RTLD_FLAGS);
-  if (h2 == NULL)
-    {
-      printf ("h2: Unable to load DSO: %s\n", dlerror ());
-      return 1;
-    }
+  void *h2 = xdlopen (DSO_NAME, H2_RTLD_FLAGS);
 
 #ifdef NO_DELETE
   if (spawn_thread (h1) != 0)
     return 1;
 
-  dlclose (h1);
+  xdlclose (h1);
 #endif
-  dlclose (h2);
+  xdlclose (h2);
 
   /* Check link maps to ensure that the DSO has unloaded.  In the normal case,
      the DSO should be unloaded if there are no uses.  However, if one of the
diff --git a/support/Makefile b/support/Makefile
index 2ace3fa..027a663 100644
--- a/support/Makefile
+++ b/support/Makefile
@@ -65,6 +65,7 @@ libsupport-routines = \
   xchroot \
   xclose \
   xconnect \
+  xdlfcn \
   xdup2 \
   xfclose \
   xfopen \
diff --git a/support/xdlfcn.c b/support/xdlfcn.c
new file mode 100644
index 0000000..6e39799
--- /dev/null
+++ b/support/xdlfcn.c
@@ -0,0 +1,58 @@
+/* Support functionality for using dlopen/dlclose/dlsym.
+   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/>.  */
+
+#include <support/check.h>
+#include <support/xdlfcn.h>
+
+void *
+xdlopen (const char *filename, int flags)
+{
+  void *dso = dlopen (filename, flags);
+
+  if (dso == NULL)
+    FAIL_EXIT1 ("error: dlopen: %s\n", dlerror ());
+
+  /* Clear any errors.  */
+  dlerror ();
+
+  return dso;
+}
+
+void *
+xdlsym (void *handle, const char *symbol)
+{
+  void *sym = dlsym (handle, symbol);
+
+  if (sym == NULL)
+    FAIL_EXIT1 ("error: dlsym: %s\n", dlerror ());
+
+  /* Clear any errors.  */
+  dlerror ();
+
+  return sym;
+}
+
+void
+xdlclose (void *handle)
+{
+  if (dlclose (handle) != 0)
+    FAIL_EXIT1 ("error: dlclose: %s\n", dlerror ());
+
+  /* Clear any errors.  */
+  dlerror ();
+}
diff --git a/support/xdlfcn.h b/support/xdlfcn.h
new file mode 100644
index 0000000..9bdcb38
--- /dev/null
+++ b/support/xdlfcn.h
@@ -0,0 +1,34 @@
+/* Support functionality for using dlopen/dlclose/dlsym.
+   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/>.  */
+
+#ifndef SUPPORT_DLOPEN_H
+#define SUPPORT_DLOPEN_H
+
+#include <dlfcn.h>
+
+__BEGIN_DECLS
+
+/* Each of these terminates process on failure with relevant error message.  */
+void *xdlopen (const char *filename, int flags);
+void *xdlsym (void *handle, const char *symbol);
+void xdlclose (void *handle);
+
+
+__END_DECLS
+
+#endif /* SUPPORT_DLOPEN_H */

-----------------------------------------------------------------------

Summary of changes:
 ChangeLog                                          |    8 ++++
 stdlib/tst-tls-atexit.c                            |   30 +++----------
 support/Makefile                                   |    1 +
 support/{support-xstat.c => xdlfcn.c}              |   44 ++++++++++++++++----
 .../sysv/linux/globfree64.c => support/xdlfcn.h    |   24 +++++------
 5 files changed, 63 insertions(+), 44 deletions(-)
 copy support/{support-xstat.c => xdlfcn.c} (54%)
 copy sysdeps/unix/sysv/linux/globfree64.c => support/xdlfcn.h (66%)


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]