From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 2154) id 2C1A43858402; Fri, 12 Nov 2021 14:48:39 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 2C1A43858402 Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: Stan Shebs To: glibc-cvs@sourceware.org Subject: [glibc/google/grte/v5-2.27/master] Use a better workaround for clang lack of _builtin_va_arg_pack X-Act-Checkin: glibc X-Git-Author: Stan Shebs X-Git-Refname: refs/heads/google/grte/v5-2.27/master X-Git-Oldrev: add8e34cd7223dc6770c34de820651eee879ff65 X-Git-Newrev: b0d12dcb635744a4fa0ebd13b6e5743d67da1046 Message-Id: <20211112144839.2C1A43858402@sourceware.org> Date: Fri, 12 Nov 2021 14:48:39 +0000 (GMT) X-BeenThere: glibc-cvs@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Glibc-cvs mailing list List-Unsubscribe: , List-Archive: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 12 Nov 2021 14:48:39 -0000 https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=b0d12dcb635744a4fa0ebd13b6e5743d67da1046 commit b0d12dcb635744a4fa0ebd13b6e5743d67da1046 Author: Stan Shebs Date: Fri Nov 12 06:48:03 2021 -0800 Use a better workaround for clang lack of _builtin_va_arg_pack Diff: --- sysdeps/generic/ldsodefs.h | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/sysdeps/generic/ldsodefs.h b/sysdeps/generic/ldsodefs.h index 0495f85e84..8759f6e561 100644 --- a/sysdeps/generic/ldsodefs.h +++ b/sysdeps/generic/ldsodefs.h @@ -744,15 +744,26 @@ extern void _dl_dprintf (int fd, const char *fmt, ...) __attribute__ ((__format__ (__printf__, 2, 3))) attribute_hidden; #else +#if defined(__clang__) +#include +#endif __attribute__ ((always_inline, __format__ (__printf__, 2, 3))) static inline void _dl_dprintf (int fd, const char *fmt, ...) { - /* Use local declaration to avoid includign . */ - extern int __dprintf(int fd, const char *format, ...) attribute_hidden; #if defined(__clang__) - __dprintf (fd, fmt); + /* In the absence of __builtin_va_arg_pack, use varargs macros to construct a + direct call to the stdio function that __dprintf eventually gets to. This + is not a robust hack, will break if stdio changes much. */ + extern int _IO_vdprintf (int d, const char *format, va_list arg); + va_list arg; + + va_start (arg, fmt); + _IO_vdprintf (fd, fmt, arg); + va_end (arg); #else + /* Use local declaration to avoid includign . */ + extern int __dprintf(int fd, const char *format, ...) attribute_hidden; __dprintf (fd, fmt, __builtin_va_arg_pack ()); #endif }