From patchwork Wed Nov 12 23:49:46 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Joseph Myers X-Patchwork-Id: 3684 Received: (qmail 12536 invoked by alias); 12 Nov 2014 23:49:54 -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 12520 invoked by uid 89); 12 Nov 2014 23:49:53 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-1.9 required=5.0 tests=AWL, BAYES_00, RCVD_IN_DNSWL_NONE autolearn=ham version=3.3.2 X-HELO: relay1.mentorg.com Date: Wed, 12 Nov 2014 23:49:46 +0000 From: Joseph Myers To: Subject: Fix strtoll / strtoull namespace for 32-bit (bug 17594) Message-ID: User-Agent: Alpine 2.10 (DEB 1266 2009-07-14) MIME-Version: 1.0 For 32-bit platforms, strtoll and strtoull are strong symbols in libc, but they are not in ISO C90, and are brought in by references to __strtoll_internal / __strtoull_internal from scanf. (For 64-bit platforms, they are properly weak.) This patch makes them weak for 32-bit (it has a side-effect of making other symbols weak that don't need to be weak, such as strtol, but that's harmless). Tested for x86 (testsuite, and that the disassembly of installed shared libraries is unchanged by the patch). This fixes all 120 unXFAILed FAILs of the new linknamespace tests seen for x86 (in fact, there are now seven XPASSes of those tests for x86 XPASS: conform/POSIX2008/fcntl.h/linknamespace XPASS: conform/UNIX98/libgen.h/linknamespace XPASS: conform/XOPEN2K/fcntl.h/linknamespace XPASS: conform/XOPEN2K/libgen.h/linknamespace XPASS: conform/XOPEN2K8/fcntl.h/linknamespace XPASS: conform/XOPEN2K8/libgen.h/linknamespace XPASS: conform/XPG4/libgen.h/linknamespace so suggesting that the failures seen for those on x86_64 are in some way architecture-specific or 64-bit-specific). 2014-11-12 Joseph Myers [BZ #17594] * stdlib/strtol.c (SYM__): New macro. (SYM__1): Likewise. (__strtol): Likewise. (strtol): Rename to __strtol and define as weak alias of __strtol. Use libc_hidden_weak. diff --git a/stdlib/strtol.c b/stdlib/strtol.c index f97fc44..bd59180 100644 --- a/stdlib/strtol.c +++ b/stdlib/strtol.c @@ -82,6 +82,10 @@ #define INTERNAL(X) INTERNAL1(X) #define INTERNAL1(X) __##X##_internal +#define SYM__(X) SYM__1 (X) +#define SYM__1(X) __ ## X +#define __strtol SYM__ (strtol) + extern INT INTERNAL (__strtol_l) (const STRING_TYPE *, STRING_TYPE **, int, int, __locale_t); @@ -100,11 +104,12 @@ libc_hidden_def (INTERNAL (strtol)) INT -strtol (nptr, endptr, base) +__strtol (nptr, endptr, base) const STRING_TYPE *nptr; STRING_TYPE **endptr; int base; { return INTERNAL (__strtol_l) (nptr, endptr, base, 0, _NL_CURRENT_LOCALE); } -libc_hidden_def (strtol) +weak_alias (__strtol, strtol) +libc_hidden_weak (strtol)