From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from hedgehog.birch.relay.mailchannels.net (hedgehog.birch.relay.mailchannels.net [23.83.209.81]) by sourceware.org (Postfix) with ESMTPS id 8A3F63858D32 for ; Tue, 4 Jul 2023 23:49:28 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 8A3F63858D32 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=gotplt.org Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=gotplt.org X-Sender-Id: dreamhost|x-authsender|siddhesh@gotplt.org Received: from relay.mailchannels.net (localhost [127.0.0.1]) by relay.mailchannels.net (Postfix) with ESMTP id 0008F7618F9; Tue, 4 Jul 2023 23:49:26 +0000 (UTC) Received: from pdx1-sub0-mail-a286.dreamhost.com (unknown [127.0.0.6]) (Authenticated sender: dreamhost) by relay.mailchannels.net (Postfix) with ESMTPA id 95AB77619A2; Tue, 4 Jul 2023 23:49:26 +0000 (UTC) ARC-Seal: i=1; s=arc-2022; d=mailchannels.net; t=1688514566; a=rsa-sha256; cv=none; b=WQ8bfACu6dDyVqNuy2uKqmh/pRKb8D1LOXpf5xnuXmwDSegdnrvEN6edspyi9hQXEBQyMi j5hZp6MtFz9DTcZUnSqCThtHAFpSpBh9n22fatGEl1R6VlpFHnz2vJW/wf9BkL3LCdY6iJ bp/CS2Ti+0m3eGz/dH0DPuetVMW8XGFvMme39LABN2l3RuVyGM3vwCDsO41YPc+OxRQbiv xa1rHuDByNHrOQhU06d9dc8GEBvmSuM4JX41Uqd4IIcVBM6WtGXBzBzUOFO9aCWxyhEn4k Ged3s/0lKapcuQJLsot7+MStCcbz/tT561W2EakuK//zUIlIteWtaE4UHt+YEw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=mailchannels.net; s=arc-2022; t=1688514566; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=/fVE0aX4ghjM1oWZzSXPxBXVnOPPdnIUTwBRHc24ij0=; b=N2Obcekx9SBbwbVIZJj1g83taTx7uAWDZA5djs3bKMQqGCDe0cgeP9619UAtRiRaFvXMFc 4B/DPtHTtlf1PhF8HTfA2RyBqxiSs5K5LVRy2lj49FT5cJDKR3SyKPIBDEzLDAkzOZS7RG bC+DhuT1NXLMZJhnF4WnDuarGpUJ7AbbAtsFwggCtjGzEmbFS+xDgUY+qZnGZIKqzxJBy6 GqTA66kZRwB+BWr3NAhhipH8+NB9XveohxNj7KZlO07cmAXWDXHFGSC2m3v2tihZQBwuNF 2swSg/Lr8nyTTytTrPQ5Wb0GHoSEnzzk+h3VBWLEK/+Q85QGPRtbYm/5paLwWA== ARC-Authentication-Results: i=1; rspamd-7ccd4b867f-ghpqg; auth=pass smtp.auth=dreamhost smtp.mailfrom=siddhesh@gotplt.org X-Sender-Id: dreamhost|x-authsender|siddhesh@gotplt.org X-MC-Relay: Neutral X-MailChannels-SenderId: dreamhost|x-authsender|siddhesh@gotplt.org X-MailChannels-Auth-Id: dreamhost X-Battle-Harmony: 255e60d34e8a7f86_1688514566852_1272350522 X-MC-Loop-Signature: 1688514566852:3531693799 X-MC-Ingress-Time: 1688514566852 Received: from pdx1-sub0-mail-a286.dreamhost.com (pop.dreamhost.com [64.90.62.162]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384) by 100.120.73.150 (trex/6.9.1); Tue, 04 Jul 2023 23:49:26 +0000 Received: from [192.168.0.182] (bras-vprn-toroon4834w-lp130-09-174-91-45-44.dsl.bell.ca [174.91.45.44]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) (Authenticated sender: siddhesh@gotplt.org) by pdx1-sub0-mail-a286.dreamhost.com (Postfix) with ESMTPSA id 4Qwfdy1BPbzBB; Tue, 4 Jul 2023 16:49:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gotplt.org; s=dreamhost; t=1688514566; bh=/fVE0aX4ghjM1oWZzSXPxBXVnOPPdnIUTwBRHc24ij0=; h=Date:Subject:To:Cc:From:Content-Type:Content-Transfer-Encoding; b=FrVwzH01Lwg7EF1sHDnemSyaM7C0vR1G8imVc+aivOXbQvc4Rm0m2M42dNynwkBNm ThrVeDru3xWNnmUU5d26MxYRZEC1qOIx8Sz4zknL8IJ8r7ECUXL6h9sChZyPwaJ1Ld qJJJ/c56+JKSPPbk208YHcifnHfj6/mkJjaud6bmw/5XBzW8ErUPWrYmT0ptMl/bi6 NeIENWqDQIZ5YaxtVV18SE45BubhtEEXTRdCrHmiSfxDTyMqc1vdAYQiMTddpGeVdR 6haUf5apR1mnGwn8lWUh/RjFz6q43odCGg4qsZZOpCiw3kcztCyU+lDyEf3ktvWjB7 z2AmMSsMzdNKg== Message-ID: <8fc23079-1e92-206b-b3c3-1544bbf56bda@gotplt.org> Date: Tue, 4 Jul 2023 19:49:25 -0400 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.12.0 Subject: Re: [PATCH v4 05/15] stdio: Ensure *_chk routines have their hidden builtin definition available Content-Language: en-US To: =?UTF-8?B?RnLDqWTDqXJpYyBCw6lyYXQ=?= , libc-alpha@sourceware.org Cc: Paul E Murphy References: <20230704165554.239581-1-fberat@redhat.com> <20230704165554.239581-6-fberat@redhat.com> From: Siddhesh Poyarekar In-Reply-To: <20230704165554.239581-6-fberat@redhat.com> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-3036.2 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,GIT_PATCH_0,NICE_REPLY_A,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H5,RCVD_IN_MSPIKE_WL,SPF_HELO_NONE,SPF_PASS,TXREP,T_SCC_BODY_TEXT_LINE,URIBL_BLACK autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: On 2023-07-04 12:55, Frédéric Bérat wrote: > If libc_hidden_builtin_{def,proto} isn't properly set for *_chk routines, > there are unwanted PLT entries in libc.so. > > There is a special case with __asprintf_chk: > If ldbl_* macros are used for asprintf, ABI gets broken on s390x, > if it isn't, ppc64le isn't building due to multiple asm redirections. > > This is due to the inclusion of bits/stdio-lbdl.h for ppc64le whereas it > isn't for s390x. This header creates redirections, which are not > compatible with the ones generated using libc_hidden_def. > Yet, we can't use libc_hidden_ldbl_proto on s390x since it will not > create a simple strong alias (e.g. as done on x86_64), but a versioned > alias, leading to ABI breakage. > > This results in errors on s390x: > /usr/bin/ld: glibc/iconv/../libio/bits/stdio2.h:137: undefined reference > to `__asprintf_chk' > > Original __asprintf_chk symbols: > 00000000001395b0 T __asprintf_chk > 0000000000177e90 T __nldbl___asprintf_chk > > __asprintf_chk symbols with ldbl_* macros: > 000000000012d590 t ___asprintf_chk > 000000000012d590 t __asprintf_chk@@GLIBC_2.4 > 000000000012d590 t __GI___asprintf_chk > 000000000012d590 t __GL____asprintf_chk___asprintf_chk > 0000000000172240 T __nldbl___asprintf_chk > > __asprintf_chk symbols with the patch: > 000000000012d590 t ___asprintf_chk > 000000000012d590 T __asprintf_chk > 000000000012d590 t __GI___asprintf_chk > 0000000000172240 T __nldbl___asprintf_chk > --- I'm leaving this one for you Paul. thanks, Sid > debug/asprintf_chk.c | 18 +++++++++++++++++- > debug/fgets_u_chk.c | 1 + > debug/fprintf_chk.c | 1 + > debug/sprintf_chk.c | 1 + > include/stdio.h | 13 ++++++++++++- > .../ldbl-128ibm-compat/ieee128-asprintf_chk.c | 1 + > .../ldbl-128ibm-compat/ieee128-fprintf_chk.c | 1 + > .../ldbl-128ibm-compat/ieee128-sprintf_chk.c | 1 + > .../ldbl-128ibm-compat/ieee128-vsprintf_chk.c | 1 + > 9 files changed, 36 insertions(+), 2 deletions(-) > > diff --git a/debug/asprintf_chk.c b/debug/asprintf_chk.c > index 651c2cd76b..e233d5d737 100644 > --- a/debug/asprintf_chk.c > +++ b/debug/asprintf_chk.c > @@ -22,7 +22,7 @@ > /* Write formatted output from FORMAT to a string which is > allocated with malloc and stored in *STRING_PTR. */ > int > -__asprintf_chk (char **result_ptr, int flag, const char *format, ...) > +___asprintf_chk (char **result_ptr, int flag, const char *format, ...) > { > /* For flag > 0 (i.e. __USE_FORTIFY_LEVEL > 1) request that %n > can only come from read-only format strings. */ > @@ -36,3 +36,19 @@ __asprintf_chk (char **result_ptr, int flag, const char *format, ...) > > return ret; > } > +#if defined __LDBL_COMPAT || __LDOUBLE_REDIRECTS_TO_FLOAT128_ABI == 1 > +/* This is needed since is included in this case, leading to > + * multiple asm redirection of the same symbol > + */ > +ldbl_hidden_def (___asprintf_chk, __asprintf_chk) > +ldbl_strong_alias (___asprintf_chk, __asprintf_chk) > +#else > +/* On some systems introduction of ldbl_* macros lead to ABI breakage due to the > + * long_double_symbol aliasing, e.g. on s390x: > + * /usr/bin/ld: glibc/iconv/../libio/bits/stdio2.h:137: undefined reference to > + * `__asprintf_chk' > + * Due to __asprintf_chk@@GLIBC_2.4 alias replacing __asprintf_chk. > + */ > +strong_alias (___asprintf_chk, __asprintf_chk) > +libc_hidden_def (__asprintf_chk) > +#endif > diff --git a/debug/fgets_u_chk.c b/debug/fgets_u_chk.c > index a16ba655e6..74275381f5 100644 > --- a/debug/fgets_u_chk.c > +++ b/debug/fgets_u_chk.c > @@ -56,3 +56,4 @@ __fgets_unlocked_chk (char *buf, size_t size, int n, FILE *fp) > fp->_flags |= old_error; > return result; > } > +libc_hidden_builtin_def (__fgets_unlocked_chk) > diff --git a/debug/fprintf_chk.c b/debug/fprintf_chk.c > index b57d538d03..273051ef91 100644 > --- a/debug/fprintf_chk.c > +++ b/debug/fprintf_chk.c > @@ -35,4 +35,5 @@ ___fprintf_chk (FILE *fp, int flag, const char *format, ...) > > return ret; > } > +ldbl_hidden_def (___fprintf_chk, __fprintf_chk) > ldbl_strong_alias (___fprintf_chk, __fprintf_chk) > diff --git a/debug/sprintf_chk.c b/debug/sprintf_chk.c > index b27f4afae8..e45f1e7b3b 100644 > --- a/debug/sprintf_chk.c > +++ b/debug/sprintf_chk.c > @@ -42,4 +42,5 @@ ___sprintf_chk (char *s, int flag, size_t slen, const char *format, ...) > > return ret; > } > +ldbl_hidden_def (___sprintf_chk, __sprintf_chk) > ldbl_strong_alias (___sprintf_chk, __sprintf_chk) > diff --git a/include/stdio.h b/include/stdio.h > index da47d1ce99..6755877911 100644 > --- a/include/stdio.h > +++ b/include/stdio.h > @@ -276,7 +276,18 @@ extern FILE *__open_memstream (char **, size_t *) __THROW __wur; > libc_hidden_proto (__open_memstream) > libc_hidden_proto (__libc_fatal) > rtld_hidden_proto (__libc_fatal) > -libc_hidden_proto (__vsprintf_chk) > + > +libc_hidden_proto (__fgets_unlocked_chk) > + > +#if defined __LDBL_COMPAT || __LDOUBLE_REDIRECTS_TO_FLOAT128_ABI == 1 > +libc_hidden_ldbl_proto (__asprintf_chk) > +#else > +libc_hidden_proto (__asprintf_chk) > +#endif > + > +libc_hidden_ldbl_proto (__fprintf_chk) > +libc_hidden_ldbl_proto (__sprintf_chk) > +libc_hidden_ldbl_proto (__vsprintf_chk) > > extern FILE * __fmemopen (void *buf, size_t len, const char *mode); > libc_hidden_proto (__fmemopen) > diff --git a/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-asprintf_chk.c b/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-asprintf_chk.c > index fbf953a728..6e93ee81fc 100644 > --- a/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-asprintf_chk.c > +++ b/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-asprintf_chk.c > @@ -35,4 +35,5 @@ ___ieee128___asprintf_chk (char **string_ptr, int flag, const char *format, ...) > > return done; > } > +hidden_def (___ieee128___asprintf_chk) > strong_alias (___ieee128___asprintf_chk, __asprintf_chkieee128) > diff --git a/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-fprintf_chk.c b/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-fprintf_chk.c > index bd10e9c3db..e0865b6663 100644 > --- a/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-fprintf_chk.c > +++ b/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-fprintf_chk.c > @@ -35,4 +35,5 @@ ___ieee128___fprintf_chk (FILE *fp, int flag, const char *format, ...) > > return done; > } > +hidden_def (___ieee128___fprintf_chk) > strong_alias (___ieee128___fprintf_chk, __fprintf_chkieee128) > diff --git a/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-sprintf_chk.c b/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-sprintf_chk.c > index 0039c3b53d..762757a5c7 100644 > --- a/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-sprintf_chk.c > +++ b/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-sprintf_chk.c > @@ -43,4 +43,5 @@ ___ieee128___sprintf_chk (char *s, int flag, size_t slen, > > return done; > } > +hidden_def (___ieee128___sprintf_chk) > strong_alias (___ieee128___sprintf_chk, __sprintf_chkieee128) > diff --git a/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-vsprintf_chk.c b/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-vsprintf_chk.c > index 22137269c0..c251b60d4e 100644 > --- a/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-vsprintf_chk.c > +++ b/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-vsprintf_chk.c > @@ -35,4 +35,5 @@ ___ieee128___vsprintf_chk (char *string, int flag, size_t slen, > > return __vsprintf_internal (string, slen, format, ap, mode); > } > +hidden_def (___ieee128___vsprintf_chk) > strong_alias (___ieee128___vsprintf_chk, __vsprintf_chkieee128)