aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorH.J. Lu <hjl.tools@gmail.com>2017-09-26 16:53:25 -0700
committerH.J. Lu <hjl.tools@gmail.com>2017-09-26 16:53:44 -0700
commit825adeeed1e95990fd1efb70d9ac3eb7f1ea802a (patch)
tree4002af56c7bd48974db937cdc3fbe7c2d7ecc290
parentbfb0deb3554204cbba10d61d96cad355e4ca5623 (diff)
downloadglibc-825adeeed1e95990fd1efb70d9ac3eb7f1ea802a.zip
glibc-825adeeed1e95990fd1efb70d9ac3eb7f1ea802a.tar.gz
glibc-825adeeed1e95990fd1efb70d9ac3eb7f1ea802a.tar.bz2
Mark __dso_handle as hidden [BZ #18822]
Since __dso_handle is always defined by either crtbegin.o from GCC or dso_handle.c, it should be marked as hidden and be passed directly. [BZ #18822] * dlfcn/modatexit.c (foo): Remove __dso_handle check. * dlfcn/modcxaatexit.c: Include <dso_handle.h>. (__dso_handle): Remove declaration. * dlfcn/tstatexit.c (__dso_handle): Removed. (main): Don't check __dso_handle. * dlfcn/tstcxaatexit.c (__dso_handle): Removed. (main): Don't check __dso_handle. * include/dso_handle.h: New file. * malloc/mtrace.c: Include <dso_handle.h>. (mtrace): Pass __dso_handle directly. * nptl/pthread_atfork.c: Include <dso_handle.h>. (__dso_handle): Remove declaration. (__pthread_atfork): Pass __dso_handle directly. * nptl/tst-atfork2mod.c: Include <dso_handle.h>. (__dso_handle): Removed. * posix/wordexp-test.c: Include <dso_handle.h>. (__dso_handle): Remove declaration. (__app_register_atfork): Pass __dso_handle directly. * stdlib/at_quick_exit.c: Include <dso_handle.h>. (__dso_handle): Remove declaration. (at_quick_exit): Pass __dso_handle directly. * stdlib/atexit.c: Include <dso_handle.h>. (__dso_handle): Remove declaration. (atexit): Pass __dso_handle directly. * stdlib/tst-tls-atexit-lib.c: Include <dso_handle.h>. (__dso_handle): Removed.
-rw-r--r--ChangeLog30
-rw-r--r--dlfcn/modatexit.c2
-rw-r--r--dlfcn/modcxaatexit.c2
-rw-r--r--dlfcn/tstatexit.c8
-rw-r--r--dlfcn/tstcxaatexit.c8
-rw-r--r--include/dso_handle.h3
-rw-r--r--malloc/mtrace.c4
-rw-r--r--nptl/pthread_atfork.c8
-rw-r--r--nptl/tst-atfork2mod.c2
-rw-r--r--posix/wordexp-test.c5
-rw-r--r--stdlib/at_quick_exit.c8
-rw-r--r--stdlib/atexit.c9
-rw-r--r--stdlib/tst-tls-atexit-lib.c3
13 files changed, 46 insertions, 46 deletions
diff --git a/ChangeLog b/ChangeLog
index 91c7751..a731980 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,33 @@
+2017-09-26 H.J. Lu <hongjiu.lu@intel.com>
+
+ [BZ #18822]
+ * dlfcn/modatexit.c (foo): Remove __dso_handle check.
+ * dlfcn/modcxaatexit.c: Include <dso_handle.h>.
+ (__dso_handle): Remove declaration.
+ * dlfcn/tstatexit.c (__dso_handle): Removed.
+ (main): Don't check __dso_handle.
+ * dlfcn/tstcxaatexit.c (__dso_handle): Removed.
+ (main): Don't check __dso_handle.
+ * include/dso_handle.h: New file.
+ * malloc/mtrace.c: Include <dso_handle.h>.
+ (mtrace): Pass __dso_handle directly.
+ * nptl/pthread_atfork.c: Include <dso_handle.h>.
+ (__dso_handle): Remove declaration.
+ (__pthread_atfork): Pass __dso_handle directly.
+ * nptl/tst-atfork2mod.c: Include <dso_handle.h>.
+ (__dso_handle): Removed.
+ * posix/wordexp-test.c: Include <dso_handle.h>.
+ (__dso_handle): Remove declaration.
+ (__app_register_atfork): Pass __dso_handle directly.
+ * stdlib/at_quick_exit.c: Include <dso_handle.h>.
+ (__dso_handle): Remove declaration.
+ (at_quick_exit): Pass __dso_handle directly.
+ * stdlib/atexit.c: Include <dso_handle.h>.
+ (__dso_handle): Remove declaration.
+ (atexit): Pass __dso_handle directly.
+ * stdlib/tst-tls-atexit-lib.c: Include <dso_handle.h>.
+ (__dso_handle): Removed.
+
2017-09-26 Joseph Myers <joseph@codesourcery.com>
* sysdeps/unix/make-syscalls.sh: Use __ifunc to define symbols
diff --git a/dlfcn/modatexit.c b/dlfcn/modatexit.c
index e620d10..95c18dc 100644
--- a/dlfcn/modatexit.c
+++ b/dlfcn/modatexit.c
@@ -35,9 +35,7 @@ dummy (void)
void
foo (void *p)
{
- extern void *__dso_handle __attribute__ ((__weak__));
printf ("This is %s\n", __FUNCTION__);
atexit (dummy);
- if (&__dso_handle) puts ("have dso handle"); else puts ("no dso handle");
ip = p;
}
diff --git a/dlfcn/modcxaatexit.c b/dlfcn/modcxaatexit.c
index fbda2f3..917a97d 100644
--- a/dlfcn/modcxaatexit.c
+++ b/dlfcn/modcxaatexit.c
@@ -17,6 +17,7 @@
#include <stdio.h>
#include <stdlib.h>
+#include <dso_handle.h>
extern void fluffy (void *p);
extern void bar (void *p);
@@ -34,7 +35,6 @@ fluffy (void *p)
void
bar (void *p)
{
- extern void *__dso_handle;
printf ("This is %s\n", __FUNCTION__);
__cxa_atexit (fluffy, p, __dso_handle);
}
diff --git a/dlfcn/tstatexit.c b/dlfcn/tstatexit.c
index 2073843..e25a3f8 100644
--- a/dlfcn/tstatexit.c
+++ b/dlfcn/tstatexit.c
@@ -20,8 +20,6 @@
#include <stdlib.h>
-extern void *__dso_handle __attribute__ ((__weak__));
-
int
main (void)
{
@@ -30,12 +28,6 @@ main (void)
void (*fp) (void *);
int v = 0;
- if (&__dso_handle == NULL)
- {
- puts ("__dso_handle not available, cannot perform the test");
- exit (0);
- }
-
h = dlopen (fname, RTLD_NOW);
if (h == NULL)
{
diff --git a/dlfcn/tstcxaatexit.c b/dlfcn/tstcxaatexit.c
index fde645c..37f25d6 100644
--- a/dlfcn/tstcxaatexit.c
+++ b/dlfcn/tstcxaatexit.c
@@ -19,8 +19,6 @@
#include <stdio.h>
#include <stdlib.h>
-extern void *__dso_handle __attribute__ ((__weak__));
-
int
main (void)
{
@@ -29,12 +27,6 @@ main (void)
void (*fp) (void *);
int v = 0;
- if (&__dso_handle == NULL)
- {
- puts ("__dso_handle not available, cannot perform the test");
- exit (0);
- }
-
h = dlopen (fname, RTLD_LAZY);
if (h == NULL)
{
diff --git a/include/dso_handle.h b/include/dso_handle.h
new file mode 100644
index 0000000..d9c1ebb
--- /dev/null
+++ b/include/dso_handle.h
@@ -0,0 +1,3 @@
+/* __dso_handle is always defined by either crtbegin.o from GCC or our
+ dso_handle.c. */
+extern void *__dso_handle __attribute__ ((__visibility__ ("hidden")));
diff --git a/malloc/mtrace.c b/malloc/mtrace.c
index 6c362d9..9eb2f5f 100644
--- a/malloc/mtrace.c
+++ b/malloc/mtrace.c
@@ -34,6 +34,7 @@
#include <_itoa.h>
#include <libc-internal.h>
+#include <dso_handle.h>
#include <libio/iolibio.h>
#define setvbuf(s, b, f, l) _IO_setvbuf (s, b, f, l)
@@ -315,10 +316,9 @@ mtrace (void)
#ifdef _LIBC
if (!added_atexit_handler)
{
- extern void *__dso_handle __attribute__ ((__weak__));
added_atexit_handler = 1;
__cxa_atexit ((void (*)(void *))release_libc_mem, NULL,
- &__dso_handle ? __dso_handle : NULL);
+ __dso_handle);
}
#endif
}
diff --git a/nptl/pthread_atfork.c b/nptl/pthread_atfork.c
index dc2ea07..f1aa2b3 100644
--- a/nptl/pthread_atfork.c
+++ b/nptl/pthread_atfork.c
@@ -35,10 +35,7 @@
#include "pthreadP.h"
#include <fork.h>
-
-/* This is defined by newer gcc version unique for each module. */
-extern void *__dso_handle __attribute__ ((__weak__,
- __visibility__ ("hidden")));
+#include <dso_handle.h>
/* Hide the symbol so that no definition but the one locally in the
@@ -51,8 +48,7 @@ attribute_hidden
__pthread_atfork (void (*prepare) (void), void (*parent) (void),
void (*child) (void))
{
- return __register_atfork (prepare, parent, child,
- &__dso_handle == NULL ? NULL : __dso_handle);
+ return __register_atfork (prepare, parent, child, __dso_handle);
}
#ifndef __pthread_atfork
extern int pthread_atfork (void (*prepare) (void), void (*parent) (void),
diff --git a/nptl/tst-atfork2mod.c b/nptl/tst-atfork2mod.c
index fe64046..ea47d58 100644
--- a/nptl/tst-atfork2mod.c
+++ b/nptl/tst-atfork2mod.c
@@ -19,6 +19,7 @@
#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
+#include <dso_handle.h>
extern int val;
@@ -46,7 +47,6 @@ static void
__attribute__ ((constructor))
init (void)
{
- extern void *__dso_handle;
printf ("dsohandle = %p\n", __dso_handle);
if (pthread_atfork (prepare, parent, child) != 0)
diff --git a/posix/wordexp-test.c b/posix/wordexp-test.c
index 17ae812..c030a4d 100644
--- a/posix/wordexp-test.c
+++ b/posix/wordexp-test.c
@@ -27,16 +27,15 @@
#include <string.h>
#include <wordexp.h>
#include <libc-pointer-arith.h>
+#include <dso_handle.h>
#define IFS " \n\t"
-extern void *__dso_handle __attribute__ ((__weak__, __visibility__ ("hidden")));
extern int __register_atfork (void (*) (void), void (*) (void), void (*) (void), void *);
static int __app_register_atfork (void (*prepare) (void), void (*parent) (void), void (*child) (void))
{
- return __register_atfork (prepare, parent, child,
- &__dso_handle == NULL ? NULL : __dso_handle);
+ return __register_atfork (prepare, parent, child, __dso_handle);
}
/* Number of forks seen. */
diff --git a/stdlib/at_quick_exit.c b/stdlib/at_quick_exit.c
index 3b74d0a..0f1c1fd 100644
--- a/stdlib/at_quick_exit.c
+++ b/stdlib/at_quick_exit.c
@@ -33,18 +33,14 @@
<http://www.gnu.org/licenses/>. */
#include <stdlib.h>
+#include <dso_handle.h>
#include "exit.h"
-/* This is defined by newer gcc version unique for each module. */
-extern void *__dso_handle __attribute__ ((__weak__));
-
-
/* Register FUNC to be executed by `quick_exit'. */
int
attribute_hidden
at_quick_exit (void (*func) (void))
{
- return __cxa_at_quick_exit ((void (*) (void *)) func,
- &__dso_handle == NULL ? NULL : __dso_handle);
+ return __cxa_at_quick_exit ((void (*) (void *)) func, __dso_handle);
}
diff --git a/stdlib/atexit.c b/stdlib/atexit.c
index f28b6ba..aaecb4a 100644
--- a/stdlib/atexit.c
+++ b/stdlib/atexit.c
@@ -33,13 +33,9 @@
<http://www.gnu.org/licenses/>. */
#include <stdlib.h>
+#include <dso_handle.h>
#include "exit.h"
-
-/* This is defined by newer gcc version unique for each module. */
-extern void *__dso_handle __attribute__ ((__weak__));
-
-
/* Register FUNC to be executed by `exit'. */
int
#ifndef atexit
@@ -47,6 +43,5 @@ attribute_hidden
#endif
atexit (void (*func) (void))
{
- return __cxa_atexit ((void (*) (void *)) func, NULL,
- &__dso_handle == NULL ? NULL : __dso_handle);
+ return __cxa_atexit ((void (*) (void *)) func, NULL, __dso_handle);
}
diff --git a/stdlib/tst-tls-atexit-lib.c b/stdlib/tst-tls-atexit-lib.c
index a227e46..06ec02f 100644
--- a/stdlib/tst-tls-atexit-lib.c
+++ b/stdlib/tst-tls-atexit-lib.c
@@ -17,8 +17,7 @@
<http://www.gnu.org/licenses/>. */
#include <stdlib.h>
-
-extern void *__dso_handle;
+#include <dso_handle.h>
typedef struct
{