diff options
author | H.J. Lu <hjl.tools@gmail.com> | 2017-09-26 16:53:25 -0700 |
---|---|---|
committer | H.J. Lu <hjl.tools@gmail.com> | 2017-09-26 16:53:44 -0700 |
commit | 825adeeed1e95990fd1efb70d9ac3eb7f1ea802a (patch) | |
tree | 4002af56c7bd48974db937cdc3fbe7c2d7ecc290 | |
parent | bfb0deb3554204cbba10d61d96cad355e4ca5623 (diff) | |
download | glibc-825adeeed1e95990fd1efb70d9ac3eb7f1ea802a.tar.gz |
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-- | ChangeLog | 30 | ||||
-rw-r--r-- | dlfcn/modatexit.c | 2 | ||||
-rw-r--r-- | dlfcn/modcxaatexit.c | 2 | ||||
-rw-r--r-- | dlfcn/tstatexit.c | 8 | ||||
-rw-r--r-- | dlfcn/tstcxaatexit.c | 8 | ||||
-rw-r--r-- | include/dso_handle.h | 3 | ||||
-rw-r--r-- | malloc/mtrace.c | 4 | ||||
-rw-r--r-- | nptl/pthread_atfork.c | 8 | ||||
-rw-r--r-- | nptl/tst-atfork2mod.c | 2 | ||||
-rw-r--r-- | posix/wordexp-test.c | 5 | ||||
-rw-r--r-- | stdlib/at_quick_exit.c | 8 | ||||
-rw-r--r-- | stdlib/atexit.c | 9 | ||||
-rw-r--r-- | stdlib/tst-tls-atexit-lib.c | 3 |
13 files changed, 46 insertions, 46 deletions
@@ -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 e620d10c70..95c18dcbac 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 fbda2f3c9f..917a97d813 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 2073843b8f..e25a3f8000 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 fde645c16b..37f25d63d4 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 0000000000..d9c1ebbce4 --- /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 6c362d9679..9eb2f5f1c7 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 dc2ea07887..f1aa2b3cf1 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 fe64046d3c..ea47d5825a 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 17ae812346..c030a4d670 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 3b74d0a688..0f1c1fde9e 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 f28b6ba1b7..aaecb4a503 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 a227e4653c..06ec02f4ee 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 { |