From patchwork Fri Aug 18 19:08:34 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Lu, Hongjiu" X-Patchwork-Id: 22227 Received: (qmail 121041 invoked by alias); 18 Aug 2017 19:08:38 -0000 Mailing-List: contact libc-alpha-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: libc-alpha-owner@sourceware.org Delivered-To: mailing list libc-alpha@sourceware.org Received: (qmail 121023 invoked by uid 89); 18 Aug 2017 19:08:38 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-25.9 required=5.0 tests=BAYES_00, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, KAM_LAZY_DOMAIN_SECURITY, NO_DNS_FOR_FROM, RP_MATCHES_RCVD autolearn=ham version=3.3.2 spammy=3011 X-HELO: mga09.intel.com X-ExtLoop1: 1 Date: Fri, 18 Aug 2017 12:08:34 -0700 From: "H.J. Lu" To: GNU C Library Subject: [PATCH] Mark __dso_handle as hidden [BZ #18822] Message-ID: <20170818190834.GA15197@gmail.com> Reply-To: "H.J. Lu" MIME-Version: 1.0 Content-Disposition: inline User-Agent: Mutt/1.8.3 (2017-05-23) 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. Tested on i686 and x86-64. OK for master? H.J. --- [BZ #18822] * dlfcn/modatexit.c (foo): Remove __dso_handle check. * dlfcn/modcxaatexit.c (__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/stdlib.h (__dso_handle): New. * malloc/mtrace.c (__dso_handle): Remove declaration. (mtrace): Pass __dso_handle directly. * nptl/pthread_atfork.c (__dso_handle): Remove declaration. (__pthread_atfork): Pass __dso_handle directly. * nptl/tst-atfork2mod.c (__dso_handle): Removed. * posix/wordexp-test.c (__dso_handle): Remove declaration. (__app_register_atfork): Pass __dso_handle directly. * stdlib/at_quick_exit.c (__dso_handle): Remove declaration. (at_quick_exit): Pass __dso_handle directly. * stdlib/atexit.c (__dso_handle): Remove declaration. (atexit): Pass __dso_handle directly. * stdlib/tst-tls-atexit-lib.c (__dso_handle): Removed. --- dlfcn/modatexit.c | 2 -- dlfcn/modcxaatexit.c | 1 - dlfcn/tstatexit.c | 8 -------- dlfcn/tstcxaatexit.c | 8 -------- include/stdlib.h | 4 ++++ malloc/mtrace.c | 3 +-- nptl/pthread_atfork.c | 7 +------ nptl/tst-atfork2mod.c | 1 - posix/wordexp-test.c | 4 +--- stdlib/at_quick_exit.c | 7 +------ stdlib/atexit.c | 8 +------- stdlib/tst-tls-atexit-lib.c | 2 -- 12 files changed, 9 insertions(+), 46 deletions(-) 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..b921b5c9ac 100644 --- a/dlfcn/modcxaatexit.c +++ b/dlfcn/modcxaatexit.c @@ -34,7 +34,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 -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 #include -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/stdlib.h b/include/stdlib.h index 2274790a2e..d0dcbf81c3 100644 --- a/include/stdlib.h +++ b/include/stdlib.h @@ -5,6 +5,10 @@ #endif #include +/* __dso_handle is always defined by either crtbegin.o from GCC or our + dso_handle.c. */ +extern void *__dso_handle __attribute__ ((visibility ("hidden"))); + /* Now define the internal interfaces. */ #if !defined _ISOMAC # include diff --git a/malloc/mtrace.c b/malloc/mtrace.c index d6eb49757b..7ff6d2316f 100644 --- a/malloc/mtrace.c +++ b/malloc/mtrace.c @@ -315,10 +315,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..dd328b76f1 100644 --- a/nptl/pthread_atfork.c +++ b/nptl/pthread_atfork.c @@ -36,10 +36,6 @@ #include "pthreadP.h" #include -/* This is defined by newer gcc version unique for each module. */ -extern void *__dso_handle __attribute__ ((__weak__, - __visibility__ ("hidden"))); - /* Hide the symbol so that no definition but the one locally in the executable or DSO is used. */ @@ -51,8 +47,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..1e49612bdd 100644 --- a/nptl/tst-atfork2mod.c +++ b/nptl/tst-atfork2mod.c @@ -46,7 +46,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..6ae769678c 100644 --- a/posix/wordexp-test.c +++ b/posix/wordexp-test.c @@ -30,13 +30,11 @@ #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..ca54c3f851 100644 --- a/stdlib/at_quick_exit.c +++ b/stdlib/at_quick_exit.c @@ -36,15 +36,10 @@ #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..aec7f5ce1b 100644 --- a/stdlib/atexit.c +++ b/stdlib/atexit.c @@ -35,11 +35,6 @@ #include #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 +42,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..9bdd690842 100644 --- a/stdlib/tst-tls-atexit-lib.c +++ b/stdlib/tst-tls-atexit-lib.c @@ -18,8 +18,6 @@ #include -extern void *__dso_handle; - typedef struct { void *val;