This is the mail archive of the
glibc-cvs@sourceware.org
mailing list for the glibc project.
GNU C Library master sources branch master updated. glibc-2.26-374-g1cc9e59
- From: ppluzhnikov at sourceware dot org
- To: glibc-cvs at sourceware dot org
- Date: 21 Sep 2017 02:37:52 -0000
- Subject: 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