From patchwork Mon Aug 21 11:46:58 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "H.J. Lu" X-Patchwork-Id: 22254 Received: (qmail 102121 invoked by alias); 21 Aug 2017 11:47:05 -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 99516 invoked by uid 89); 21 Aug 2017 11:47:03 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-25.0 required=5.0 tests=AWL, BAYES_00, FREEMAIL_FROM, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, RCVD_IN_DNSWL_NONE, RCVD_IN_SORBS_SPAM, SPF_PASS autolearn=ham version=3.3.2 spammy= X-HELO: mail-oi0-f68.google.com X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to:cc; bh=+u63LMi10eVJr95noJYkehhHbjJ7eyOAB7piYobklp0=; b=iko9qsZ8PanBDvSeKT8eLez2sSJydQZzZ2e7vRs3rVjkNRogA14jgy/XuvJQD4xIU7 7w1Bvn2ybl0GBpZ7ztjvdpFZb1tec3bBAbHgDKqYbX0xfnOTZN06/y0gjGKHTia1eH2W afyxnxwJ9R3UDs2sVQRTxgYzBVTTXVlnJBdMNgbOBbBpue8gyi5VFxaLEOyrvtLJqVRu fHiPQmN1RVkFhwMuwSeWyniO51stTJmYjHYWGOr9TTqcLsHw2UD0tdoKNbxkxBWDth33 1Nv/jeJuW/MkYdFIv+hUDDKEju5RxGdu0ysqPhFzgRQrMoL3uM0IVKiwbpD//sO6I747 VB3w== X-Gm-Message-State: AHYfb5gHpPVb8Kqto8Kwz3k5Jz/43lmYO7OVomDUzyHP2oKoGft2CGkz FN6rBH3Kvdctx934KaNhnlpnxUCXog== X-Received: by 10.202.72.73 with SMTP id v70mr5973174oia.97.1503316019010; Mon, 21 Aug 2017 04:46:59 -0700 (PDT) MIME-Version: 1.0 In-Reply-To: References: <20170818203044.GB15188@gmail.com> <87inhioe3z.fsf@mid.deneb.enyo.de> From: "H.J. Lu" Date: Mon, 21 Aug 2017 04:46:58 -0700 Message-ID: Subject: Re: [PATCH 2/3] Mark internal nss symbols with attribute_hidden [BZ #18822] To: Florian Weimer Cc: GNU C Library On Mon, Aug 21, 2017 at 2:58 AM, Florian Weimer wrote: > On 08/20/2017 07:18 PM, H.J. Lu wrote: >> diff --git a/grp/initgroups.c b/grp/initgroups.c >> index 0d5b841796..0ffb5ceea1 100644 >> --- a/grp/initgroups.c >> +++ b/grp/initgroups.c >> @@ -37,7 +37,6 @@ typedef enum nss_status (*initgroups_dyn_function) (const char *, gid_t, >> gid_t **, long int, int *); >> >> extern service_user *__nss_group_database attribute_hidden; >> -service_user *__nss_initgroups_database; > > The declaration of __nss_group_database is no longer necessary, either. > > I think these additional declarations can be removed as well" > > nscd/gai.c:service_user *__nss_hosts_database; > posix/tst-rfc3484-2.c:service_user *__nss_hosts_database attribute_hidden; > posix/tst-rfc3484-3.c:service_user *__nss_hosts_database attribute_hidden; > posix/tst-rfc3484.c:service_user *__nss_hosts_database attribute_hidden; > sysdeps/posix/getaddrinfo.c:extern service_user *__nss_hosts_database > attribute_hidden; > Here is the updated patch. Tested on x86-64. I will check it in shortly. Thanks. From 1b8ecdda717ebe4cf01f9af3d4996e5dec23855c Mon Sep 17 00:00:00 2001 From: "H.J. Lu" Date: Fri, 18 Aug 2017 12:27:59 -0700 Subject: [PATCH] Mark internal nss symbols with attribute_hidden [BZ #18822] Mark internal nss symbols with attribute_hidden to allow direct access within libc.so and libc.a without using GOT nor PLT. Tested on x86-64 with and without --disable-nscd. [BZ #18822] * grp/initgroups.c (__nss_group_database): Removed. (__nss_initgroups_database): Likewise. * nscd/gai.c (__nss_hosts_database): Likewise. * nss/XXX-lookup.c (DATABASE_NAME_SYMBOL): Likewise. * posix/tst-rfc3484-2.c (__nss_hosts_database): Likewise. * posix/tst-rfc3484-3.c (__nss_hosts_database): Likewise. * posix/tst-rfc3484.c (__nss_hosts_database): Likewise. * sysdeps/posix/getaddrinfo.c (__nss_hosts_database): Likewise. * nss/getXXent.c (INTERNAL (REENTRANT_GETNAME)): Add attribute_hidden. * nss/nsswitch.c (__nss_database_custom): Define only if USE_NSCD is defined. (__nss_configure_lookup): Use __nss_database_custom only if USE_NSCD is defined. * nss/nsswitch.h (__nss_database_custom): Declare only if USE_NSCD is defined. Add attribute_hidden. (__nss_setent): Add attribute_hidden. (__nss_endent): Likewise. (__nss_getent_r): Likewise. (__nss_getent): Likewise. (DEFINE_DATABASE): Declare __nss_##arg##_database. --- grp/initgroups.c | 2 -- nscd/gai.c | 3 --- nss/XXX-lookup.c | 2 -- nss/getXXent.c | 2 +- nss/nsswitch.c | 4 ++++ nss/nsswitch.h | 23 +++++++++++++++-------- posix/tst-rfc3484-2.c | 2 -- posix/tst-rfc3484-3.c | 2 -- posix/tst-rfc3484.c | 2 -- sysdeps/posix/getaddrinfo.c | 1 - 10 files changed, 20 insertions(+), 23 deletions(-) diff --git a/grp/initgroups.c b/grp/initgroups.c index 0d5b841796..3e4a3de11f 100644 --- a/grp/initgroups.c +++ b/grp/initgroups.c @@ -36,8 +36,6 @@ typedef enum nss_status (*initgroups_dyn_function) (const char *, gid_t, long int *, long int *, gid_t **, long int, int *); -extern service_user *__nss_group_database attribute_hidden; -service_user *__nss_initgroups_database; static bool use_initgroups_entry; diff --git a/nscd/gai.c b/nscd/gai.c index a1aeadadc3..084a1fe68a 100644 --- a/nscd/gai.c +++ b/nscd/gai.c @@ -43,6 +43,3 @@ #ifdef HAVE_LIBIDN # include #endif - -/* Some variables normally defined in libc. */ -service_user *__nss_hosts_database; diff --git a/nss/XXX-lookup.c b/nss/XXX-lookup.c index 49417691b2..839c96e194 100644 --- a/nss/XXX-lookup.c +++ b/nss/XXX-lookup.c @@ -52,8 +52,6 @@ #define DEFAULT_CONFIG NULL #endif -service_user *DATABASE_NAME_SYMBOL attribute_hidden; - int DB_LOOKUP_FCT (service_user **ni, const char *fct_name, const char *fct2_name, void **fctp) diff --git a/nss/getXXent.c b/nss/getXXent.c index aad374197f..31bd24b924 100644 --- a/nss/getXXent.c +++ b/nss/getXXent.c @@ -56,7 +56,7 @@ /* Prototype of the reentrant version. */ extern int INTERNAL (REENTRANT_GETNAME) (LOOKUP_TYPE *resbuf, char *buffer, size_t buflen, LOOKUP_TYPE **result - H_ERRNO_PARM); + H_ERRNO_PARM) attribute_hidden; /* We need to protect the dynamic buffer handling. */ __libc_lock_define_initialized (static, lock); diff --git a/nss/nsswitch.c b/nss/nsswitch.c index 8f31658523..834bef6f9c 100644 --- a/nss/nsswitch.c +++ b/nss/nsswitch.c @@ -73,8 +73,10 @@ static const struct }; #define ndatabases (sizeof (databases) / sizeof (databases[0])) +#ifdef USE_NSCD /* Flags whether custom rules for database is set. */ bool __nss_database_custom[NSS_DBSIDX_max]; +#endif __libc_lock_define_initialized (static, lock) @@ -304,7 +306,9 @@ __nss_configure_lookup (const char *dbname, const char *service_line) /* Install new rules. */ *databases[cnt].dbp = new_db; +#ifdef USE_NSCD __nss_database_custom[cnt] = true; +#endif __libc_lock_unlock (lock); diff --git a/nss/nsswitch.h b/nss/nsswitch.h index 2b86d63ddb..ab0a512d40 100644 --- a/nss/nsswitch.h +++ b/nss/nsswitch.h @@ -96,17 +96,19 @@ typedef struct name_database } name_database; +#ifdef USE_NSCD /* Indices into DATABASES in nsswitch.c and __NSS_DATABASE_CUSTOM. */ enum { -#define DEFINE_DATABASE(arg) NSS_DBSIDX_##arg, -#include "databases.def" -#undef DEFINE_DATABASE +# define DEFINE_DATABASE(arg) NSS_DBSIDX_##arg, +# include "databases.def" +# undef DEFINE_DATABASE NSS_DBSIDX_max }; /* Flags whether custom rules for database is set. */ -extern bool __nss_database_custom[NSS_DBSIDX_max]; +extern bool __nss_database_custom[NSS_DBSIDX_max] attribute_hidden; +#endif /* Warning for NSS functions, which don't require dlopen if glibc was built with --enable-static-nss. */ @@ -180,11 +182,13 @@ extern void __nss_setent (const char *func_name, db_lookup_function lookup_fct, service_user **nip, service_user **startp, service_user **last_nip, int stayon, - int *stayon_tmp, int res); + int *stayon_tmp, int res) + attribute_hidden; extern void __nss_endent (const char *func_name, db_lookup_function lookup_fct, service_user **nip, service_user **startp, - service_user **last_nip, int res); + service_user **last_nip, int res) + attribute_hidden; extern int __nss_getent_r (const char *getent_func_name, const char *setent_func_name, db_lookup_function lookup_fct, @@ -192,10 +196,12 @@ extern int __nss_getent_r (const char *getent_func_name, service_user **last_nip, int *stayon_tmp, int res, void *resbuf, char *buffer, size_t buflen, - void **result, int *h_errnop); + void **result, int *h_errnop) + attribute_hidden; extern void *__nss_getent (getent_r_function func, void **resbuf, char **buffer, size_t buflen, - size_t *buffer_size, int *h_errnop); + size_t *buffer_size, int *h_errnop) + attribute_hidden; struct resolv_context; struct hostent; extern int __nss_hostname_digits_dots_context (struct resolv_context *, @@ -221,6 +227,7 @@ libc_hidden_proto (__nss_hostname_digits_dots) /* Prototypes for __nss_*_lookup2 functions. */ #define DEFINE_DATABASE(arg) \ + service_user *__nss_##arg##_database attribute_hidden; \ int __nss_##arg##_lookup2 (service_user **, const char *, \ const char *, void **); \ libc_hidden_proto (__nss_##arg##_lookup2) diff --git a/posix/tst-rfc3484-2.c b/posix/tst-rfc3484-2.c index ee9281394b..f509534ca9 100644 --- a/posix/tst-rfc3484-2.c +++ b/posix/tst-rfc3484-2.c @@ -58,8 +58,6 @@ _res_hconf_init (void) #undef USE_NSCD #include "../sysdeps/posix/getaddrinfo.c" -service_user *__nss_hosts_database attribute_hidden; - /* This is the beginning of the real test code. The above defines (among other things) the function rfc3484_sort. */ diff --git a/posix/tst-rfc3484-3.c b/posix/tst-rfc3484-3.c index c987366e4e..ae44087a10 100644 --- a/posix/tst-rfc3484-3.c +++ b/posix/tst-rfc3484-3.c @@ -58,8 +58,6 @@ _res_hconf_init (void) #undef USE_NSCD #include "../sysdeps/posix/getaddrinfo.c" -service_user *__nss_hosts_database attribute_hidden; - /* This is the beginning of the real test code. The above defines (among other things) the function rfc3484_sort. */ diff --git a/posix/tst-rfc3484.c b/posix/tst-rfc3484.c index 73c4dffcf5..7f191abbbc 100644 --- a/posix/tst-rfc3484.c +++ b/posix/tst-rfc3484.c @@ -58,8 +58,6 @@ _res_hconf_init (void) #undef USE_NSCD #include "../sysdeps/posix/getaddrinfo.c" -service_user *__nss_hosts_database attribute_hidden; - /* This is the beginning of the real test code. The above defines (among other things) the function rfc3484_sort. */ diff --git a/sysdeps/posix/getaddrinfo.c b/sysdeps/posix/getaddrinfo.c index f02bbbe533..fcc5d79362 100644 --- a/sysdeps/posix/getaddrinfo.c +++ b/sysdeps/posix/getaddrinfo.c @@ -318,7 +318,6 @@ typedef enum nss_status (*nss_gethostbyname3_r) typedef enum nss_status (*nss_getcanonname_r) (const char *name, char *buffer, size_t buflen, char **result, int *errnop, int *h_errnop); -extern service_user *__nss_hosts_database attribute_hidden; /* This function is called if a canonical name is requested, but if the service function did not provide it. It tries to obtain the -- 2.13.5