From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by sourceware.org (Postfix) with ESMTPS id CE9BB3858284 for ; Wed, 5 Jul 2023 12:12:30 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org CE9BB3858284 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=redhat.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=redhat.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1688559150; 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; bh=HZvCqm5l71ARycsOLX0BOSnrsDnQhd35RAJdp/d8LOM=; b=hVIGAjna2Qg6/fxvdEZePtQu9u+xHCesqk3dKwjC7fzzrYXNl1v9jKnSTJInO86R7OlqAn SdeTs8EuyDkKJ1QzMv5QXVnk1SnLcE57+aZcnRvje6kpEu2O8+p1NkAuvXvLpv3tNz20Md /oggO8jWBLsK1si22CoQe1PZSIspIBk= Received: from mail-yw1-f200.google.com (mail-yw1-f200.google.com [209.85.128.200]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-340-5hHyxpW5O_6QApl0fdTSDQ-1; Wed, 05 Jul 2023 08:12:28 -0400 X-MC-Unique: 5hHyxpW5O_6QApl0fdTSDQ-1 Received: by mail-yw1-f200.google.com with SMTP id 00721157ae682-5771e0959f7so69730607b3.3 for ; Wed, 05 Jul 2023 05:12:28 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1688559148; x=1691151148; h=content-transfer-encoding:in-reply-to:organization:from:references :cc:to:content-language:subject:user-agent:mime-version:date :message-id:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=HZvCqm5l71ARycsOLX0BOSnrsDnQhd35RAJdp/d8LOM=; b=RmR9PO6JDXsyyDMxmBsu6Slq4az2rdoJAwUXtH3pAZcQBREPJrw5EoRg3GBTv9YXeM CsQgVwy/VCJvkuOexYjd/bpEGmex0CPnC9u6fT9OOiUS8uI3oiIhnte4eNFWsomLjCdE 6SJYV6f13JJ2XBW7JaP/N98MAn5ntaPY3EuzFN2YJ8znFkUjvuXww7qWbCX58VU1GCL/ eac3FvjNZUR5wXiE2XnNvqA+0Rxzgx2iXjp2x7G2ulWv84eRdm0AO7WVKyd6+C/g4v+T er3p6SAfMpJZPAnkAdJH7Mo3tyW81q0wIq3uY0E1YgYsxF8oQy4ZdJF+d+upXXiahZnR mPiQ== X-Gm-Message-State: ABy/qLZCrzetKssN9RA3aoB8JsZXv4pvFim3KYCbxVGwAFZO2j2y7Pns O9hiXZlVt0mqcaKVl8rLxoFLZu7X+tugFb4nXbEo0V5rKzq1D/CFPHUleBsih7eDJKhlTkZW4FN O/cyElgRctry3qokFoZ4s X-Received: by 2002:a0d:d78e:0:b0:56f:f15a:2753 with SMTP id z136-20020a0dd78e000000b0056ff15a2753mr16257103ywd.20.1688559148332; Wed, 05 Jul 2023 05:12:28 -0700 (PDT) X-Google-Smtp-Source: APBJJlF13+Njmy6OEdfRHUDPMue1qZ9wZ/mjuzFi7n2/cORF/Cy1Poj0BOKfO2ityn7Ve+Ti9MJ27Q== X-Received: by 2002:a0d:d78e:0:b0:56f:f15a:2753 with SMTP id z136-20020a0dd78e000000b0056ff15a2753mr16257087ywd.20.1688559148006; Wed, 05 Jul 2023 05:12:28 -0700 (PDT) Received: from [192.168.0.241] ([198.48.244.52]) by smtp.gmail.com with ESMTPSA id e6-20020a0dc206000000b0056d51c39c1fsm6107022ywd.23.2023.07.05.05.12.27 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 05 Jul 2023 05:12:27 -0700 (PDT) Message-ID: Date: Wed, 5 Jul 2023 08:12: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 To: =?UTF-8?B?RnLDqWTDqXJpYyBCw6lyYXQ=?= , libc-alpha@sourceware.org Cc: siddhesh@gotplt.org, Paul E Murphy References: <20230704165554.239581-1-fberat@redhat.com> <20230704165554.239581-6-fberat@redhat.com> From: Carlos O'Donell Organization: Red Hat In-Reply-To: <20230704165554.239581-6-fberat@redhat.com> X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Language: en-US Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-12.0 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,GIT_PATCH_0,NICE_REPLY_A,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H4,RCVD_IN_MSPIKE_WL,SPF_HELO_NONE,SPF_NONE,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 7/4/23 12:55, Frédéric Bérat via Libc-alpha 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. OK. > 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. LGTM. I would like to see this move forward for the release. We are in the release freeze. Reviewed-by: Carlos O'Donell > 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 > --- > 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, ...) OK. Adds extra underscore to differentiate the redirects. > { > /* 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) OK. > +#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) OK. > 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) OK. > 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) OK. > 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) OK. > > 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) OK. > 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) OK. > 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) OK. > 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) OK. > strong_alias (___ieee128___vsprintf_chk, __vsprintf_chkieee128) -- Cheers, Carlos.