Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/patches/808851/?format=api
{ "id": 808851, "url": "http://patchwork.ozlabs.org/api/patches/808851/?format=api", "web_url": "http://patchwork.ozlabs.org/project/glibc/patch/20170901180029.9527-2-hjl.tools@gmail.com/", "project": { "id": 41, "url": "http://patchwork.ozlabs.org/api/projects/41/?format=api", "name": "GNU C Library", "link_name": "glibc", "list_id": "libc-alpha.sourceware.org", "list_email": "libc-alpha@sourceware.org", "web_url": "", "scm_url": "", "webscm_url": "", "list_archive_url": "", "list_archive_url_format": "", "commit_url_format": "" }, "msgid": "<20170901180029.9527-2-hjl.tools@gmail.com>", "list_archive_url": null, "date": "2017-09-01T17:59:32", "name": "[01/58] Mark internal functions with attribute_hidden [BZ #18822]", "commit_ref": null, "pull_url": null, "state": "new", "archived": false, "hash": "5eb28ab8d7aca0400086ab4203575a19008c9909", "submitter": { "id": 4387, "url": "http://patchwork.ozlabs.org/api/people/4387/?format=api", "name": "H.J. Lu", "email": "hjl.tools@gmail.com" }, "delegate": null, "mbox": "http://patchwork.ozlabs.org/project/glibc/patch/20170901180029.9527-2-hjl.tools@gmail.com/mbox/", "series": [ { "id": 1088, "url": "http://patchwork.ozlabs.org/api/series/1088/?format=api", "web_url": "http://patchwork.ozlabs.org/project/glibc/list/?series=1088", "date": "2017-09-01T18:00:21", "name": "Hide internal functions in libc.so", "version": 1, "mbox": "http://patchwork.ozlabs.org/series/1088/mbox/" } ], "comments": "http://patchwork.ozlabs.org/api/patches/808851/comments/", "check": "pending", "checks": "http://patchwork.ozlabs.org/api/patches/808851/checks/", "tags": {}, "related": [], "headers": { "Return-Path": "<libc-alpha-return-84048-incoming=patchwork.ozlabs.org@sourceware.org>", "X-Original-To": "incoming@patchwork.ozlabs.org", "Delivered-To": [ "patchwork-incoming@bilbo.ozlabs.org", "mailing list libc-alpha@sourceware.org" ], "Authentication-Results": [ "ozlabs.org;\n\tspf=pass (mailfrom) smtp.mailfrom=sourceware.org\n\t(client-ip=209.132.180.131; helo=sourceware.org;\n\tenvelope-from=libc-alpha-return-84048-incoming=patchwork.ozlabs.org@sourceware.org;\n\treceiver=<UNKNOWN>)", "ozlabs.org; dkim=pass (1024-bit key;\n\tsecure) header.d=sourceware.org header.i=@sourceware.org\n\theader.b=\"FLPL/4sb\"; dkim-atps=neutral", "sourceware.org; auth=none" ], "Received": [ "from sourceware.org (server1.sourceware.org [209.132.180.131])\n\t(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256\n\tbits)) (No client certificate requested)\n\tby ozlabs.org (Postfix) with ESMTPS id 3xkRrn6D0Wz9s7M\n\tfor <incoming@patchwork.ozlabs.org>;\n\tSat, 2 Sep 2017 04:01:45 +1000 (AEST)", "(qmail 84102 invoked by alias); 1 Sep 2017 18:00:46 -0000", "(qmail 83643 invoked by uid 89); 1 Sep 2017 18:00:41 -0000" ], "DomainKey-Signature": "a=rsa-sha1; c=nofws; d=sourceware.org; h=list-id\n\t:list-unsubscribe:list-subscribe:list-archive:list-post\n\t:list-help:sender:from:to:subject:date:message-id:in-reply-to\n\t:references; q=dns; s=default; b=rDPjZ5VeY1Ti5hoIzp6YRf0yldOQwyr\n\tgTX9UrSZnyALIOLbSIrPQm4stXhG+uDEtFpRRg0WmwQqW6duNVCv5wSvA841IWqm\n\tzE8Ohpd7GtfHgmQkKby2LuuXelthkhVe/2scCpmwMaSQdLle/qgv9HlqQiLO8h0Z\n\tZA1/aZo0CSUI=", "DKIM-Signature": "v=1; a=rsa-sha1; c=relaxed; d=sourceware.org; h=list-id\n\t:list-unsubscribe:list-subscribe:list-archive:list-post\n\t:list-help:sender:from:to:subject:date:message-id:in-reply-to\n\t:references; s=default; bh=ulWBoK7+65xwGMdCBdLXdsvQguo=; b=FLPL/\n\t4sbbOAIMONa0FiEEB7N0oSqoKkHLDuQokMlh/BxGcVM9PC5yOhBZVwLrBQ5fDPtP\n\t+dSuOyaI6+pLHNCjPgRd+ycT+mkUaItFkUAHDQAOKRw35MyJ+SnCcq7nsZLnvb0I\n\t74gTHLSyEUWR3bfH18W8w2tJVDiET964qF5308=", "Mailing-List": "contact libc-alpha-help@sourceware.org; run by ezmlm", "Precedence": "bulk", "List-Id": "<libc-alpha.sourceware.org>", "List-Unsubscribe": "<mailto:libc-alpha-unsubscribe-incoming=patchwork.ozlabs.org@sourceware.org>", "List-Subscribe": "<mailto:libc-alpha-subscribe@sourceware.org>", "List-Archive": "<http://sourceware.org/ml/libc-alpha/>", "List-Post": "<mailto:libc-alpha@sourceware.org>", "List-Help": "<mailto:libc-alpha-help@sourceware.org>,\n\t<http://sourceware.org/ml/#faqs>", "Sender": "libc-alpha-owner@sourceware.org", "X-Virus-Found": "No", "X-Spam-SWARE-Status": "No, score=-26.2 required=5.0 tests=BAYES_00,\n\tFREEMAIL_FROM, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2,\n\tGIT_PATCH_3, SPF_SOFTFAIL autolearn=ham version=3.3.2 spammy=", "X-HELO": "mga02.intel.com", "X-ExtLoop1": "1", "From": "\"H.J. Lu\" <hjl.tools@gmail.com>", "To": "libc-alpha@sourceware.org", "Subject": "[PATCH 01/58] Mark internal functions with attribute_hidden [BZ\n\t#18822]", "Date": "Fri, 1 Sep 2017 10:59:32 -0700", "Message-Id": "<20170901180029.9527-2-hjl.tools@gmail.com>", "In-Reply-To": "<20170901180029.9527-1-hjl.tools@gmail.com>", "References": "<20170901180029.9527-1-hjl.tools@gmail.com>" }, "content": "Mark internal functions with attribute_hidden to allow direct access to\ninternal functions within libc.so and libc.a without using GOT nor PLT.\n\nSize comparison of libc.so:\n\nOn x86-64:\n text\t data\t bss\t dec\t hex\nBefore: 1728577\t 20584\t 17088\t1766249\t 1af369\nAfter : 1728593\t 20584\t 17088\t1766265\t 1af379\n\nThe only change is __gconv_release_shlib in iconv/gconv_dl.c is inlined\nsince it is hidden, which increases the code size of gconv_dl.os by 18\nbytes.\n\nOn i686:\n text\t data\t bss\t dec\t hex\nBefore: 1869039\t 11444\t 11112\t1891595\t 1cdd0b\nAfter : 1868635\t 11444\t 11112\t1891191\t 1cdb77\n\nThe code size is decreased by avoiding GOT/PLT for hidden functions.\n\n\t[BZ #18822]\n\t* iconv/gconv_int.h (__gconv_open): Add attribute_hidden.\n\t(__gconv_close): Likewise.\n\t(__gconv): Likewise.\n\t(__gconv_find_transform): Likewise.\n\t(__gconv_lookup_cache): Likewise.\n\t(__gconv_compare_alias_cache): Likewise.\n\t(__gconv_load_cache): Likewise.\n\t(__gconv_get_path): Likewise.\n\t(__gconv_close_transform): Likewise.\n\t(__gconv_release_cache): Likewise.\n\t(__gconv_find_shlib): Likewise.\n\t(__gconv_release_shlib): Likewise.\n\t(__gconv_get_builtin_trans): Likewise.\n\t(__gconv_compare_alias): Likewise.\n\t* include/dlfcn.h (_dlerror_run): Likewise.\n\t* include/stdio.h (__fortify_fail_abort): Likewise.\n\t* include/time.h (__tz_compute): Likewise.\n\t(__strptime_internal): Likewise.\n\t* intl/gettextP.h (_nl_find_domain): Likewise.\n\t(_nl_load_domain): Likewise.\n\t(_nl_find_msg): Likewise.\n\t* intl/plural-exp.h (FREE_EXPRESSION): Likewise.\n\t(EXTRACT_PLURAL_EXPRESSION): Likewise.\n\t* locale/coll-lookup.h (__collidx_table_lookup): Likewise.\n\t* resolv/gai_misc.h (__gai_enqueue_request): Likewise.\n\t(__gai_find_request): Likewise.\n\t(__gai_remove_request): Likewise.\n\t(__gai_notify): Likewise.\n\t(__gai_notify_only): Likewise.\n\t* sysdeps/generic/aio_misc.h (__aio_sigqueue): Likewise.\n\t* sysdeps/generic/ldsodefs.h (_dl_fini): Likewise.\n\t(_dl_non_dynamic_init): Likewise.\n\t(_dl_aux_init): Likewise.\n\t* sysdeps/i386/machine-gmon.h (mcount_internal): Likewise.\n\t* sysdeps/unix/sysv/linux/i386/olddirent.h (__old_getdents64):\n\tLikewise.\n\t* wcsmbs/wcsmbsload.h (__wcsmbs_load_conv): Likewise.\n\t(__wcsmbs_clone_conv): Likewise.\n\t(__wcsmbs_named_conv): Likewise.\n---\n iconv/gconv_int.h | 43 +++++++++++++++++++++-----------\n include/dlfcn.h | 3 ++-\n include/stdio.h | 2 +-\n include/time.h | 4 +--\n intl/gettextP.h | 12 ++++++---\n intl/plural-exp.h | 5 ++--\n locale/coll-lookup.h | 6 +++--\n resolv/gai_misc.h | 15 +++++++----\n sysdeps/generic/aio_misc.h | 3 ++-\n sysdeps/generic/ldsodefs.h | 8 +++---\n sysdeps/i386/machine-gmon.h | 2 +-\n sysdeps/unix/sysv/linux/i386/olddirent.h | 3 ++-\n wcsmbs/wcsmbsload.h | 9 ++++---\n 13 files changed, 74 insertions(+), 41 deletions(-)", "diff": "diff --git a/iconv/gconv_int.h b/iconv/gconv_int.h\nindex b1433f801e..2afd12a977 100644\n--- a/iconv/gconv_int.h\n+++ b/iconv/gconv_int.h\n@@ -156,10 +156,12 @@ __libc_lock_define (extern, __gconv_lock attribute_hidden)\n \n /* Return in *HANDLE decriptor for transformation from FROMSET to TOSET. */\n extern int __gconv_open (const char *toset, const char *fromset,\n-\t\t\t __gconv_t *handle, int flags);\n+\t\t\t __gconv_t *handle, int flags)\n+ attribute_hidden;\n \n /* Free resources associated with transformation descriptor CD. */\n-extern int __gconv_close (__gconv_t cd);\n+extern int __gconv_close (__gconv_t cd)\n+ attribute_hidden;\n \n /* Transform at most *INBYTESLEFT bytes from buffer starting at *INBUF\n according to rules described by CD and place up to *OUTBYTESLEFT\n@@ -167,33 +169,38 @@ extern int __gconv_close (__gconv_t cd);\n conversions in *IRREVERSIBLE if this pointer is not null. */\n extern int __gconv (__gconv_t cd, const unsigned char **inbuf,\n \t\t const unsigned char *inbufend, unsigned char **outbuf,\n-\t\t unsigned char *outbufend, size_t *irreversible);\n+\t\t unsigned char *outbufend, size_t *irreversible)\n+ attribute_hidden;\n \n /* Return in *HANDLE a pointer to an array with *NSTEPS elements describing\n the single steps necessary for transformation from FROMSET to TOSET. */\n extern int __gconv_find_transform (const char *toset, const char *fromset,\n \t\t\t\t struct __gconv_step **handle,\n-\t\t\t\t size_t *nsteps, int flags);\n+\t\t\t\t size_t *nsteps, int flags)\n+ attribute_hidden;\n \n /* Search for transformation in cache data. */\n extern int __gconv_lookup_cache (const char *toset, const char *fromset,\n \t\t\t\t struct __gconv_step **handle, size_t *nsteps,\n-\t\t\t\t int flags);\n+\t\t\t\t int flags)\n+ attribute_hidden;\n \n /* Compare the two name for whether they are after alias expansion the\n same. This function uses the cache and fails if none is\n loaded. */\n extern int __gconv_compare_alias_cache (const char *name1, const char *name2,\n-\t\t\t\t\tint *result);\n+\t\t\t\t\tint *result)\n+ attribute_hidden;\n \n /* Free data associated with a step's structure. */\n-extern void __gconv_release_step (struct __gconv_step *step);\n+extern void __gconv_release_step (struct __gconv_step *step)\n+ attribute_hidden;\n \n /* Read all the configuration data and cache it. */\n extern void __gconv_read_conf (void) attribute_hidden;\n \n /* Try to read module cache file. */\n-extern int __gconv_load_cache (void);\n+extern int __gconv_load_cache (void) attribute_hidden;\n \n /* Retrieve pointer to internal cache. */\n extern void *__gconv_get_cache (void);\n@@ -205,7 +212,7 @@ extern struct gconv_module *__gconv_get_modules_db (void);\n extern void *__gconv_get_alias_db (void);\n \n /* Determine the directories we are looking in. */\n-extern void __gconv_get_path (void);\n+extern void __gconv_get_path (void) attribute_hidden;\n \n /* Comparison function to search alias. */\n extern int __gconv_alias_compare (const void *p1, const void *p2)\n@@ -214,28 +221,34 @@ extern int __gconv_alias_compare (const void *p1, const void *p2)\n /* Clear reference to transformation step implementations which might\n cause the code to be unloaded. */\n extern int __gconv_close_transform (struct __gconv_step *steps,\n-\t\t\t\t size_t nsteps);\n+\t\t\t\t size_t nsteps)\n+ attribute_hidden;\n \n /* Free all resources allocated for the transformation record when\n using the cache. */\n-extern void __gconv_release_cache (struct __gconv_step *steps, size_t nsteps);\n+extern void __gconv_release_cache (struct __gconv_step *steps, size_t nsteps)\n+ attribute_hidden;\n \n /* Load shared object named by NAME. If already loaded increment reference\n count. */\n-extern struct __gconv_loaded_object *__gconv_find_shlib (const char *name);\n+extern struct __gconv_loaded_object *__gconv_find_shlib (const char *name)\n+ attribute_hidden;\n \n /* Release shared object. If no further reference is available unload\n the object. */\n-extern void __gconv_release_shlib (struct __gconv_loaded_object *handle);\n+extern void __gconv_release_shlib (struct __gconv_loaded_object *handle)\n+ attribute_hidden;\n \n /* Fill STEP with information about builtin module with NAME. */\n extern void __gconv_get_builtin_trans (const char *name,\n-\t\t\t\t struct __gconv_step *step);\n+\t\t\t\t struct __gconv_step *step)\n+ attribute_hidden;\n \n libc_hidden_proto (__gconv_transliterate)\n \n /* If NAME is an codeset alias expand it. */\n-extern int __gconv_compare_alias (const char *name1, const char *name2);\n+extern int __gconv_compare_alias (const char *name1, const char *name2)\n+ attribute_hidden;\n \n \n /* Builtin transformations. */\ndiff --git a/include/dlfcn.h b/include/dlfcn.h\nindex 888e84d4b8..526086f1a0 100644\n--- a/include/dlfcn.h\n+++ b/include/dlfcn.h\n@@ -72,7 +72,8 @@ extern void *_dl_vsym (void *handle, const char *name, const char *version,\n _dl_catch_error. Returns zero for success, nonzero for failure; and\n arranges for `dlerror' to return the error details.\n ARGS is passed as argument to OPERATE. */\n-extern int _dlerror_run (void (*operate) (void *), void *args);\n+extern int _dlerror_run (void (*operate) (void *), void *args)\n+ attribute_hidden;\n \n #ifdef SHARED\n # define DL_CALLER_DECL /* Nothing */\ndiff --git a/include/stdio.h b/include/stdio.h\nindex 87e0e10797..7625a2a3a0 100644\n--- a/include/stdio.h\n+++ b/include/stdio.h\n@@ -100,7 +100,7 @@ extern void __libc_message (enum __libc_message_action action,\n \t\t\t const char *__fnt, ...);\n extern void __fortify_fail (const char *msg) __attribute__ ((__noreturn__));\n extern void __fortify_fail_abort (_Bool, const char *msg)\n- __attribute__ ((__noreturn__));\n+ __attribute__ ((__noreturn__)) attribute_hidden;\n libc_hidden_proto (__fortify_fail)\n libc_hidden_proto (__fortify_fail_abort)\n \ndiff --git a/include/time.h b/include/time.h\nindex 324913214f..9fb0e329a3 100644\n--- a/include/time.h\n+++ b/include/time.h\n@@ -46,7 +46,7 @@ extern void __tzfile_default (const char *std, const char *dst,\n \t\t\t long int stdoff, long int dstoff);\n extern void __tzset_parse_tz (const char *tz);\n extern void __tz_compute (time_t timer, struct tm *tm, int use_localtime)\n- __THROW;\n+ __THROW attribute_hidden;\n \n /* Subroutine of `mktime'. Return the `time_t' representation of TP and\n normalize TP, given that a `struct tm *' maps to a `time_t' as performed\n@@ -89,7 +89,7 @@ extern int __getclktck (void);\n /* strptime support. */\n extern char * __strptime_internal (const char *rp, const char *fmt,\n \t\t\t\t struct tm *tm, void *statep,\n-\t\t\t\t locale_t locparam);\n+\t\t\t\t locale_t locparam) attribute_hidden;\n \n extern double __difftime (time_t time1, time_t time0);\n \ndiff --git a/intl/gettextP.h b/intl/gettextP.h\nindex 8fcfb5bef8..75b203ab52 100644\n--- a/intl/gettextP.h\n+++ b/intl/gettextP.h\n@@ -251,19 +251,23 @@ extern const char *_nl_locale_name_default (void);\n \n struct loaded_l10nfile *_nl_find_domain (const char *__dirname, char *__locale,\n \t\t\t\t\t const char *__domainname,\n-\t\t\t\t\t struct binding *__domainbinding);\n+\t\t\t\t\t struct binding *__domainbinding)\n+ attribute_hidden;\n void _nl_load_domain (struct loaded_l10nfile *__domain,\n-\t\t struct binding *__domainbinding);\n+\t\t struct binding *__domainbinding)\n+ attribute_hidden;\n \n #ifdef IN_LIBGLOCALE\n char *_nl_find_msg (struct loaded_l10nfile *domain_file,\n \t\t struct binding *domainbinding, const char *encoding,\n \t\t const char *msgid,\n-\t\t size_t *lengthp);\n+\t\t size_t *lengthp)\n+ attribute_hidden;\n #else\n char *_nl_find_msg (struct loaded_l10nfile *domain_file,\n \t\t struct binding *domainbinding, const char *msgid,\n-\t\t int convert, size_t *lengthp);\n+\t\t int convert, size_t *lengthp)\n+ attribute_hidden;\n #endif\n \n /* The internal variables in the standalone libintl.a must have different\ndiff --git a/intl/plural-exp.h b/intl/plural-exp.h\nindex 4833fcdf35..a4ffff9f91 100644\n--- a/intl/plural-exp.h\n+++ b/intl/plural-exp.h\n@@ -101,12 +101,13 @@ struct parse_args\n # define EXTRACT_PLURAL_EXPRESSION extract_plural_expression\n #endif\n \n-extern void FREE_EXPRESSION (struct expression *exp);\n+extern void FREE_EXPRESSION (struct expression *exp) attribute_hidden;\n extern int PLURAL_PARSE (struct parse_args *arg);\n extern const struct expression GERMANIC_PLURAL attribute_hidden;\n extern void EXTRACT_PLURAL_EXPRESSION (const char *nullentry,\n \t\t\t\t const struct expression **pluralp,\n-\t\t\t\t unsigned long int *npluralsp);\n+\t\t\t\t unsigned long int *npluralsp)\n+ attribute_hidden;\n \n #if !defined (_LIBC) && !defined (IN_LIBINTL) && !defined (IN_LIBGLOCALE)\n extern unsigned long int plural_eval (const struct expression *pexp,\ndiff --git a/locale/coll-lookup.h b/locale/coll-lookup.h\nindex d1c488dcf5..9e20d39329 100644\n--- a/locale/coll-lookup.h\n+++ b/locale/coll-lookup.h\n@@ -19,7 +19,9 @@\n #include <stdint.h>\n \n /* Lookup in a table of int32_t, with default value 0. */\n-extern int32_t __collidx_table_lookup (const char *table, uint32_t wc);\n+extern int32_t __collidx_table_lookup (const char *table, uint32_t wc)\n+ attribute_hidden;\n \n /* Lookup in a table of uint32_t, with default value 0xffffffff. */\n-extern uint32_t __collseq_table_lookup (const char *table, uint32_t wc);\n+extern uint32_t __collseq_table_lookup (const char *table, uint32_t wc)\n+ attribute_hidden;\ndiff --git a/resolv/gai_misc.h b/resolv/gai_misc.h\nindex 95d14ed54f..efadf13010 100644\n--- a/resolv/gai_misc.h\n+++ b/resolv/gai_misc.h\n@@ -75,19 +75,24 @@ extern pthread_mutex_t __gai_requests_mutex;\n \n \n /* Enqueue request. */\n-extern struct requestlist *__gai_enqueue_request (struct gaicb *gaicbp);\n+extern struct requestlist *__gai_enqueue_request (struct gaicb *gaicbp)\n+ attribute_hidden;\n \n /* Find request on wait list. */\n-extern struct requestlist *__gai_find_request (const struct gaicb *gaicbp);\n+extern struct requestlist *__gai_find_request (const struct gaicb *gaicbp)\n+ attribute_hidden;\n \n /* Remove request from waitlist. */\n-extern int __gai_remove_request (struct gaicb *gaicbp);\n+extern int __gai_remove_request (struct gaicb *gaicbp)\n+ attribute_hidden;\n \n /* Notify initiator of request and tell this everybody listening. */\n-extern void __gai_notify (struct requestlist *req);\n+extern void __gai_notify (struct requestlist *req)\n+ attribute_hidden;\n \n /* Notify initiator of request. */\n-extern int __gai_notify_only (struct sigevent *sigev, pid_t caller_pid);\n+extern int __gai_notify_only (struct sigevent *sigev, pid_t caller_pid)\n+ attribute_hidden;\n \n /* Send the signal. */\n extern int __gai_sigqueue (int sig, const union sigval val, pid_t caller_pid);\ndiff --git a/sysdeps/generic/aio_misc.h b/sysdeps/generic/aio_misc.h\nindex c0622b2ab6..d5a0297673 100644\n--- a/sysdeps/generic/aio_misc.h\n+++ b/sysdeps/generic/aio_misc.h\n@@ -40,7 +40,8 @@ typedef union\n \n \n /* Send the signal. */\n-extern int __aio_sigqueue (int sig, const union sigval val, pid_t caller_pid);\n+extern int __aio_sigqueue (int sig, const union sigval val, pid_t caller_pid)\n+ attribute_hidden;\n \n \n #endif /* aio_misc.h */\ndiff --git a/sysdeps/generic/ldsodefs.h b/sysdeps/generic/ldsodefs.h\nindex 1a4449eeb3..5efae2d96d 100644\n--- a/sysdeps/generic/ldsodefs.h\n+++ b/sysdeps/generic/ldsodefs.h\n@@ -954,7 +954,7 @@ extern void _dl_init (struct link_map *main_map, int argc, char **argv,\n \n /* Call the finalizer functions of all shared objects whose\n initializer functions have completed. */\n-extern void _dl_fini (void);\n+extern void _dl_fini (void) attribute_hidden;\n \n /* Sort array MAPS according to dependencies of the contained objects. */\n extern void _dl_sort_fini (struct link_map **maps, size_t nmaps, char *used,\n@@ -1123,10 +1123,12 @@ extern struct link_map *_dl_find_dso_for_object (const ElfW(Addr) addr);\n rtld_hidden_proto (_dl_find_dso_for_object)\n \n /* Initialization which is normally done by the dynamic linker. */\n-extern void _dl_non_dynamic_init (void);\n+extern void _dl_non_dynamic_init (void)\n+ attribute_hidden;\n \n /* Used by static binaries to check the auxiliary vector. */\n-extern void _dl_aux_init (ElfW(auxv_t) *av);\n+extern void _dl_aux_init (ElfW(auxv_t) *av)\n+ attribute_hidden;\n \n \n __END_DECLS\ndiff --git a/sysdeps/i386/machine-gmon.h b/sysdeps/i386/machine-gmon.h\nindex 3e90b8c0c7..81e168e4e6 100644\n--- a/sysdeps/i386/machine-gmon.h\n+++ b/sysdeps/i386/machine-gmon.h\n@@ -30,7 +30,7 @@\n #define mcount_internal __mcount_internal\n \n extern void mcount_internal (u_long frompc, u_long selfpc)\n- __attribute__ ((regparm (2)));\n+ __attribute__ ((regparm (2))) attribute_hidden;\n \n #define _MCOUNT_DECL(frompc, selfpc) \\\n __attribute__ ((regparm (2)))\t\t\t \\\ndiff --git a/sysdeps/unix/sysv/linux/i386/olddirent.h b/sysdeps/unix/sysv/linux/i386/olddirent.h\nindex 0b4c81da0e..5510ab2095 100644\n--- a/sysdeps/unix/sysv/linux/i386/olddirent.h\n+++ b/sysdeps/unix/sysv/linux/i386/olddirent.h\n@@ -34,7 +34,8 @@ extern struct __old_dirent64 *__old_readdir64 (DIR *__dirp);\n libc_hidden_proto (__old_readdir64);\n extern int __old_readdir64_r (DIR *__dirp, struct __old_dirent64 *__entry,\n \t\t\t struct __old_dirent64 **__result);\n-extern __ssize_t __old_getdents64 (int __fd, char *__buf, size_t __nbytes);\n+extern __ssize_t __old_getdents64 (int __fd, char *__buf, size_t __nbytes)\n+\tattribute_hidden;\n int __old_scandir64 (const char * __dir,\n \t\t struct __old_dirent64 *** __namelist,\n \t\t int (*__selector) (const struct __old_dirent64 *),\ndiff --git a/wcsmbs/wcsmbsload.h b/wcsmbs/wcsmbsload.h\nindex 7efe2c1f81..57fad53077 100644\n--- a/wcsmbs/wcsmbsload.h\n+++ b/wcsmbs/wcsmbsload.h\n@@ -37,13 +37,16 @@ struct gconv_fcts\n extern const struct gconv_fcts __wcsmbs_gconv_fcts_c attribute_hidden;\n \n /* Load conversion functions for the currently selected locale. */\n-extern void __wcsmbs_load_conv (struct __locale_data *new_category);\n+extern void __wcsmbs_load_conv (struct __locale_data *new_category)\n+ attribute_hidden;\n \n /* Clone the current `__wcsmbs_load_conv' value. */\n-extern void __wcsmbs_clone_conv (struct gconv_fcts *copy);\n+extern void __wcsmbs_clone_conv (struct gconv_fcts *copy)\n+ attribute_hidden;\n \n /* Find the conversion functions for converting to and from NAME. */\n-extern int __wcsmbs_named_conv (struct gconv_fcts *copy, const char *name);\n+extern int __wcsmbs_named_conv (struct gconv_fcts *copy, const char *name)\n+ attribute_hidden;\n \n /* Function used for the `private.cleanup' hook. */\n extern void _nl_cleanup_ctype (struct __locale_data *) attribute_hidden;\n", "prefixes": [ "01/58" ] }