From patchwork Tue Mar 7 15:30:34 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Wilco Dijkstra X-Patchwork-Id: 736208 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from sourceware.org (server1.sourceware.org [209.132.180.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 3vd0wq27Nlz9sNf for ; Wed, 8 Mar 2017 02:30:51 +1100 (AEDT) Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; secure) header.d=sourceware.org header.i=@sourceware.org header.b="Q8MSesCf"; dkim-atps=neutral DomainKey-Signature: a=rsa-sha1; c=nofws; d=sourceware.org; h=list-id :list-unsubscribe:list-subscribe:list-archive:list-post :list-help:sender:from:to:cc:subject:date:message-id:references :in-reply-to:content-type:content-transfer-encoding :mime-version; q=dns; s=default; b=PHGJo/FVJLZr3LI+URpnmEJWsq6Bs QNWT4LdB3zPWDEXAffG033i0gdk+DM3zNSZTvyPH/jeUMitTam1gAsoiADnOmEi1 QxtSgWS4dpwSqvMWO0W2FryHatDxQ11RQjj9ihxqrJeoy2gEIaH0vt/vkZZOrYpJ uhkK6gKEXjOIQg= DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=sourceware.org; h=list-id :list-unsubscribe:list-subscribe:list-archive:list-post :list-help:sender:from:to:cc:subject:date:message-id:references :in-reply-to:content-type:content-transfer-encoding :mime-version; s=default; bh=Y9DC8RNVIO/vvnGiUK3sXz9d2mw=; b=Q8M SesCf8QAuwTqBD8Q+pzRRPNEXCDbpbnkBMH5SE6ur8WHpI3VTHzC3yqFDpSarOEZ JbPAy3DHxQewWFdfej1kOhr0Zj5TcG8oVCeSXvcHuMn2RZwNihZNoyrvI+CSixxX 9B1ZWD3liFZBlWz4QrAWqlJJW2PQvZU152DKGVi8= Received: (qmail 40767 invoked by alias); 7 Mar 2017 15:30:41 -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 40733 invoked by uid 89); 7 Mar 2017 15:30:40 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-24.2 required=5.0 tests=AWL, BAYES_00, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, KAM_LOTSOFHASH, RCVD_IN_DNSWL_NONE, SPF_HELO_PASS, SPF_PASS autolearn=ham version=3.3.2 spammy=tight, canon, 12412, 19463 X-HELO: EUR03-AM5-obe.outbound.protection.outlook.com From: Wilco Dijkstra To: Adhemerval Zanella CC: "libc-alpha@sourceware.org" , nd Subject: Re: [PATCH] Rename strdup uses Date: Tue, 7 Mar 2017 15:30:34 +0000 Message-ID: References: , <2be3b9b0-aeab-8075-abbb-2aff3ee2eeae@linaro.org>, , In-Reply-To: authentication-results: sourceware.org; dkim=none (message not signed) header.d=none; sourceware.org; dmarc=none action=none header.from=arm.com; x-ms-office365-filtering-correlation-id: 75dc297b-579d-4921-7d5a-08d4656ee5fe x-ms-office365-filtering-ht: Tenant x-microsoft-antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001)(48565401081); SRVR:VI1PR0802MB2624; x-microsoft-exchange-diagnostics: 1; VI1PR0802MB2624; 7:EwLAuUfEhrDRhRoqFqhI1IeHRK3RerF2tMtPHpkGnYY8wDO+EsOizHhEq+8MZFPo5Z110QUmkQ2yc3JTQ+PqXxIu0WMiB5/xrZzODvQIhyerBrINSPmC21MY6IxF06jtnS4ywWq3CiDz5Nk5OfVp42MEJKItlNubuzirHU1yWRbjmVA5xFUNsIxx2QLHPoC8N1JH7R9YeMW/fuwEEV1+gV0OYH+ae6SYgRLfaRxgi0CdeYLI6PPXGa1xEIrzzHq9Smnpe1XzntYbFtEw3cM1h2m/liu/yEDVxqx6W3vHYW3bV1GjI2Wmn/wRwDC6tdGf9eybYC17gnK6As1buhA9Rg== nodisclaimer: True x-microsoft-antispam-prvs: x-exchange-antispam-report-test: UriScan:(158342451672863)(180628864354917)(211171220733660); x-exchange-antispam-report-cfa-test: BCL:0; PCL:0; RULEID:(6040375)(601004)(2401047)(8121501046)(5005006)(10201501046)(3002001)(6055026)(6041248)(20161123560025)(20161123555025)(20161123558025)(20161123564025)(20161123562025)(6072148); SRVR:VI1PR0802MB2624; BCL:0; PCL:0; RULEID:; SRVR:VI1PR0802MB2624; x-forefront-prvs: 0239D46DB6 x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(6009001)(7916002)(39860400002)(39450400003)(39850400002)(39840400002)(39410400002)(24454002)(377424004)(54534003)(77096006)(86362001)(575784001)(2906002)(6436002)(9686003)(53936002)(25786008)(2900100001)(6246003)(6506006)(50986999)(54356999)(76176999)(66066001)(102836003)(54906002)(38730400002)(106116001)(110136004)(99286003)(55016002)(5660300001)(74316002)(33656002)(6116002)(53546006)(305945005)(122556002)(3846002)(3660700001)(229853002)(3280700002)(8676002)(81166006)(7696004)(189998001)(8936002)(6916009)(4326008)(2950100002)(93886004)(7736002); DIR:OUT; SFP:1101; SCL:1; SRVR:VI1PR0802MB2624; H:VI1PR0802MB2621.eurprd08.prod.outlook.com; FPR:; SPF:None; MLV:sfv; LANG:en; spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM MIME-Version: 1.0 X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-originalarrivaltime: 07 Mar 2017 15:30:34.3189 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: f34e5979-57d9-4aaa-ad4d-b122a662184d X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR0802MB2624 ping From: Wilco Dijkstra Sent: 10 February 2017 18:40 To: Adhemerval Zanella Cc: libc-alpha@sourceware.org; nd Subject: Re: [PATCH] Rename strdup uses     Adhemerval Zanella wrote: > > Ah right, although imho for such coupled patchset splitting is more confusing > than a single one. Well if it helps I can easily list them together (rebased to latest sources and the XOPEN defines now removed): Remove the str(n)dup inlines from string/bits/string2.h.  Although inlining calls with constant strings shows a small (~10%) performance gain, strdup is typically used in error reporting code, so not performance critical. Remove the now unused __need_malloc_and_calloc related defines from stdlib.h. Rename existing uses of str(n)dup to __str(n)dup so it no longer needs to be redirected to a builtin.  Also building GLIBC with -Os now no longer shows localplt or linkname space failures (partial fix for BZ #15105 and BZ #19463). ChangeLog: 2017-02-10  Wilco Dijkstra          [BZ #15105]         [BZ #19463]         * elf/dl-cache.c (_dl_load_cache_lookup): Use __strdup.         * inet/rcmd.c (rcmd_af): Likewise.         * inet/rexec.c   (rexec_af): Likewise.         * intl/dcigettext.c (_LIBC): Likewise.         * intl/finddomain.c (_nl_find_domain): Use strdup expansion.         * locale/loadarchive.c (_nl_load_locale_from_archive):         Use __strdup.         * locale/setlocale.c (setlocale): Likewise.         * posix/spawn_faction_addopen.c         (posix_spawn_file_actions_addopen): Likewise.         * stdlib/putenv.c (putenv): Use __strndup.         * sunrpc/svc_simple.c (__registerrpc): Use __strdup.         * sysdeps/posix/getaddrinfo.c (gaih_inet): Use __strdup/__strndup.         * include/stdlib.h (__need_malloc_and_calloc): Remove uses.         (__Need_M_And_C) Remove define/undef.         * stdlib/stdlib.h (__need_malloc_and_calloc): Remove uses.         (__malloc_and_calloc_defined): Remove define.         * string/bits/string2.h (__strdup): Remove define.         (strdup): Likewise.         (__strndup): Likewise.         (strndup): Likewise. diff --git a/include/stdlib.h b/include/stdlib.h index 352339e8595eb8229018cb27f7d2decf63f511c7..929cead59ae10afe03ae1286b72d8321f0ab2d90 100644 --- a/include/stdlib.h +++ b/include/stdlib.h @@ -1,16 +1,12 @@  #ifndef _STDLIB_H   -#ifdef __need_malloc_and_calloc -#define __Need_M_And_C -#endif -  #ifndef _ISOMAC  # include  #endif  #include    /* Now define the internal interfaces.  */ -#if !defined __Need_M_And_C && !defined _ISOMAC +#if !defined _ISOMAC  # include    __BEGIN_DECLS @@ -269,6 +265,4 @@ __END_DECLS    #endif   -#undef __Need_M_And_C -  #endif  /* include/stdlib.h */ diff --git a/stdlib/stdlib.h b/stdlib/stdlib.h index 292c6a2f053a2a578cd09d75307c26ed191e1c00..7cfbcafe79ec1f7c9d07c464bd56b9bd964755fd 100644 --- a/stdlib/stdlib.h +++ b/stdlib/stdlib.h @@ -25,16 +25,13 @@  #include    /* Get size_t, wchar_t and NULL from .  */ -#define                __need_size_t -#ifndef __need_malloc_and_calloc -# define       __need_wchar_t -# define       __need_NULL -#endif +#define __need_size_t +#define __need_wchar_t +#define __need_NULL  #include    __BEGIN_DECLS   -#ifndef __need_malloc_and_calloc  #define _STDLIB_H       1    #if (defined __USE_XOPEN || defined __USE_XOPEN2K8) && !defined _SYS_WAIT_H @@ -434,10 +431,6 @@ extern int lcong48_r (unsigned short int __param[7],  # endif /* Use misc.  */  #endif  /* Use misc or X/Open.  */   -#endif /* don't just need malloc and calloc */ - -#ifndef __malloc_and_calloc_defined -# define __malloc_and_calloc_defined  __BEGIN_NAMESPACE_STD  /* Allocate SIZE bytes of memory.  */  extern void *malloc (size_t __size) __THROW __attribute_malloc__ __wur; @@ -445,9 +438,7 @@ extern void *malloc (size_t __size) __THROW __attribute_malloc__ __wur;  extern void *calloc (size_t __nmemb, size_t __size)       __THROW __attribute_malloc__ __wur;  __END_NAMESPACE_STD -#endif   -#ifndef __need_malloc_and_calloc  __BEGIN_NAMESPACE_STD  /* Re-allocate the previously allocated block     in PTR, making the new block SIZE bytes long.  */ @@ -944,9 +935,6 @@ extern int ttyslot (void) __THROW;  # include  #endif   -#endif /* don't just need malloc and calloc */ -#undef __need_malloc_and_calloc -  __END_DECLS    #endif /* stdlib.h  */ diff --git a/string/bits/string2.h b/string/bits/string2.h index e5337becf6fd21a7f303f4e9e8152f8571ec96b1..5d2bd0c8e2f39df6c7a407253e5995d9bb0f6cdb 100644 --- a/string/bits/string2.h +++ b/string/bits/string2.h @@ -180,65 +180,6 @@ extern void *__rawmemchr (const void *__s, int __c);  #endif     -/* We need the memory allocation functions for inline strdup(). -   Referring to stdlib.h (even minimally) is not allowed -   in any of the tight standards compliant modes.  */ -#ifdef __USE_MISC - -# if !defined _HAVE_STRING_ARCH_strdup || !defined _HAVE_STRING_ARCH_strndup -#  define __need_malloc_and_calloc -#  include -# endif - -# ifndef _HAVE_STRING_ARCH_strdup - -extern char *__strdup (const char *__string) __THROW __attribute_malloc__; -#  define __strdup(s) \ -  (__extension__ (__builtin_constant_p (s) && __string2_1bptr_p (s)          \ -                 ? (((const char *) (s))[0] == '\0'                           \ -                    ? (char *) calloc ((size_t) 1, (size_t) 1)                \ -                    : ({ size_t __len = strlen (s) + 1;               \ -                         char *__retval = (char *) malloc (__len);            \ -                         if (__retval != NULL)                                \ -                           __retval = (char *) memcpy (__retval, s, __len);  \ -                         __retval; }))                                        \ -                 : __strdup (s))) - -#  if defined __USE_XOPEN_EXTENDED || defined __USE_XOPEN2K8 -#   define strdup(s) __strdup (s) -#  endif -# endif - -# ifndef _HAVE_STRING_ARCH_strndup - -extern char *__strndup (const char *__string, size_t __n) -     __THROW __attribute_malloc__; -#  define __strndup(s, n) \ -  (__extension__ (__builtin_constant_p (s) && __string2_1bptr_p (s)          \ -                 ? (((const char *) (s))[0] == '\0'                           \ -                    ? (char *) calloc ((size_t) 1, (size_t) 1)                \ -                    : ({ size_t __len = strlen (s) + 1;               \ -                         size_t __n = (n);                                    \ -                         char *__retval;                                      \ -                         if (__n < __len)                                     \ -                           __len = __n + 1;                                   \ -                         __retval = (char *) malloc (__len);                  \ -                         if (__retval != NULL)                                \ -                           {                                                  \ -                             __retval[__len - 1] = '\0';                      \ -                             __retval = (char *) memcpy (__retval, s,         \ -                                                         __len - 1);          \ -                           }                                                  \ -                         __retval; }))                                        \ -                 : __strndup (s, n))) - -#  ifdef __USE_XOPEN2K8 -#   define strndup(s, n) __strndup (s, n) -#  endif -# endif - -#endif /* Use misc. or use GNU.  */ -  #ifndef _FORCE_INLINES  # undef __STRING_INLINE  #endif diff --git a/elf/dl-cache.c b/elf/dl-cache.c index 1ac7524c3e8cc41eee0e4f20158b67f97a0f60bc..017c78aae36cd981f31b955966bb77c9b793567a 100644 --- a/elf/dl-cache.c +++ b/elf/dl-cache.c @@ -302,7 +302,7 @@ _dl_load_cache_lookup (const char *name)    char *temp;    temp = alloca (strlen (best) + 1);    strcpy (temp, best); -  return strdup (temp); +  return __strdup (temp);  }    #ifndef MAP_COPY diff --git a/inet/rcmd.c b/inet/rcmd.c index 8613d96764b08cc8fe3d988a0f38125a0cd54d04..b7cc7a82ba0ac1b39ccf03c589e00114b0bc79a5 100644 --- a/inet/rcmd.c +++ b/inet/rcmd.c @@ -149,7 +149,7 @@ rcmd_af (char **ahost, u_short rport, const char *locuser, const char *remuser,            if (res->ai_canonname){                  free (ahostbuf); -               ahostbuf = strdup (res->ai_canonname); +               ahostbuf = __strdup (res->ai_canonname);                  if (ahostbuf == NULL) {                          __fxprintf(NULL, "%s",                                     _("rcmd: Cannot allocate memory\n")); diff --git a/inet/rexec.c b/inet/rexec.c index 24ac4b11b6d745aa53a80bd0f7bd10924246b526..43fb67bcf2c6d4fdff9e8dcd053786ab523f7aa1 100644 --- a/inet/rexec.c +++ b/inet/rexec.c @@ -73,7 +73,7 @@ rexec_af (char **ahost, int rport, const char *name, const char *pass,            if (res0->ai_canonname){                  free (ahostbuf); -               ahostbuf = strdup (res0->ai_canonname); +               ahostbuf = __strdup (res0->ai_canonname);                  if (ahostbuf == NULL) {                          perror ("rexec: strdup");                          return (-1); diff --git a/intl/dcigettext.c b/intl/dcigettext.c index 95fa72b1c548ee66d9771eac86488f7f034a0c89..2c7358796eb7853f31773ad8f5e6b89ee94ec5db 100644 --- a/intl/dcigettext.c +++ b/intl/dcigettext.c @@ -131,6 +131,9 @@ extern int errno;  /* Rename the non ANSI C functions.  This is required by the standard     because some ANSI C functions will require linking with this object     file and the name space must not be polluted.  */ +# ifndef strdup +#  define strdup __strdup +# endif  # define getcwd __getcwd  # ifndef stpcpy  #  define stpcpy __stpcpy diff --git a/intl/finddomain.c b/intl/finddomain.c index cb61a0c8d6b90023847ef0cc609524a0c0a070a0..88fd880dbcc3e21cd4975306f1196a906116d1cc 100644 --- a/intl/finddomain.c +++ b/intl/finddomain.c @@ -124,18 +124,12 @@ _nl_find_domain (const char *dirname, char *locale,    alias_value = _nl_expand_alias (locale);    if (alias_value != NULL)      { -#if defined _LIBC || defined HAVE_STRDUP -      locale = strdup (alias_value); -      if (locale == NULL) -       return NULL; -#else        size_t len = strlen (alias_value) + 1;        locale = (char *) malloc (len);        if (locale == NULL)          return NULL;          memcpy (locale, alias_value, len); -#endif      }      /* Now we determine the single parts of the locale name.  First diff --git a/locale/loadarchive.c b/locale/loadarchive.c index fc6fb32a9d706c0501f83b166d3aa73a19c9c58f..e6e1a05d2e7b74abf81d136760f0c42d58744f57 100644 --- a/locale/loadarchive.c +++ b/locale/loadarchive.c @@ -462,7 +462,7 @@ _nl_load_locale_from_archive (int category, const char **namep)    if (__glibc_unlikely (lia == NULL))      return NULL;   -  lia->name = strdup (*namep); +  lia->name = __strdup (*namep);    if (__glibc_unlikely (lia->name == NULL))      {        free (lia); diff --git a/locale/setlocale.c b/locale/setlocale.c index 1603ef306a51a8fe9368a617eae67310b77ffb0f..19acc4b2c7173ece3b235f289c57c4c74f3da5cc 100644 --- a/locale/setlocale.c +++ b/locale/setlocale.c @@ -283,7 +283,7 @@ setlocale (int category, const char *locale)        if (__glibc_unlikely (strchr (locale, ';') != NULL))          {            /* This is a composite name.  Make a copy and split it up.  */ -         locale_copy = strdup (locale); +         locale_copy = __strdup (locale);            if (__glibc_unlikely (locale_copy == NULL))              {                __libc_rwlock_unlock (__libc_setlocale_lock); diff --git a/posix/spawn_faction_addopen.c b/posix/spawn_faction_addopen.c index 95111684bc4ea2f5dd82cc8287cc9ba0db6d9cb1..cbb3584345374e19b37560e4081c618bbb76d707 100644 --- a/posix/spawn_faction_addopen.c +++ b/posix/spawn_faction_addopen.c @@ -34,7 +34,7 @@ posix_spawn_file_actions_addopen (posix_spawn_file_actions_t *file_actions,    if (!__spawn_valid_fd (fd))      return EBADF;   -  char *path_copy = strdup (path); +  char *path_copy = __strdup (path);    if (path_copy == NULL)      return ENOMEM;   diff --git a/stdlib/putenv.c b/stdlib/putenv.c index 85890fec264cda0f7d1f6e4bc411b6e2f95af048..c0488fc50558ef2fc2878cdbe436e76276fa3898 100644 --- a/stdlib/putenv.c +++ b/stdlib/putenv.c @@ -60,7 +60,7 @@ putenv (char *string)        int use_malloc = !__libc_use_alloca (name_end - string + 1);        if (__builtin_expect (use_malloc, 0))          { -         name = strndup (string, name_end - string); +         name = __strndup (string, name_end - string);            if (name == NULL)              return -1;          } diff --git a/sunrpc/svc_simple.c b/sunrpc/svc_simple.c index baa177eec0f1fea3306e056033be29cee42fe132..acc9b9db14fa24b4b04e4ddca7d10980e661fe88 100644 --- a/sunrpc/svc_simple.c +++ b/sunrpc/svc_simple.c @@ -87,7 +87,7 @@ __registerrpc (u_long prognum, u_long versnum, u_long procnum,        transp = svcudp_create (RPC_ANYSOCK);        if (transp == NULL)          { -         buf = strdup (_("couldn't create an rpc server\n")); +         buf = __strdup (_("couldn't create an rpc server\n"));            goto err_out;          }      } @@ -103,7 +103,7 @@ __registerrpc (u_long prognum, u_long versnum, u_long procnum,    pl = (struct proglst_ *) malloc (sizeof (struct proglst_));    if (pl == NULL)      { -      buf = strdup (_("registerrpc: out of memory\n")); +      buf = __strdup (_("registerrpc: out of memory\n"));        goto err_out;      }    pl->p_progname = progname; diff --git a/sysdeps/posix/getaddrinfo.c b/sysdeps/posix/getaddrinfo.c index 43eb31365ed10059bb6e1147af197ed54550e6c5..eed7264850307b6b65b055a6936dc6362d5b3ff9 100644 --- a/sysdeps/posix/getaddrinfo.c +++ b/sysdeps/posix/getaddrinfo.c @@ -536,7 +536,7 @@ gaih_inet (const char *name, const struct gaih_service *service,                        }                      else                        { -                       namebuf = strndup (name, scope_delim - name); +                       namebuf = __strndup (name, scope_delim - name);                          if (namebuf == NULL)                            {                              assert (!malloc_name); @@ -1141,7 +1141,7 @@ gaih_inet (const char *name, const struct gaih_service *service,                    malloc_canonbuf = false;                  else                    { -                   canon = strdup (canon); +                   canon = __strdup (canon);                      if (canon == NULL)                        {                          result = -EAI_MEMORY;