From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on dcvr.yhbt.net X-Spam-Level: X-Spam-ASN: AS31976 209.132.180.0/23 X-Spam-Status: No, score=-3.9 required=3.0 tests=AWL,BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_EF,HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,SPF_HELO_PASS,SPF_PASS shortcircuit=no autolearn=ham autolearn_force=no version=3.4.2 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 dcvr.yhbt.net (Postfix) with ESMTPS id 596FC1F454 for ; Mon, 4 Nov 2019 16:10:16 +0000 (UTC) DomainKey-Signature: a=rsa-sha1; c=nofws; d=sourceware.org; h=list-id :list-unsubscribe:list-subscribe:list-archive:list-post :list-help:sender:subject:to:references:from:message-id:date :mime-version:in-reply-to:content-type :content-transfer-encoding; q=dns; s=default; b=XDV66tIDFKS6dJ/B mxmoXkjdlrWHg2Fjmm9L3rJzSgUa4jIaX/tcck+lLa4tgKcjRAfpFQYet7jnmj9T Kq+ZIw2gdwP3Ok/g8gTceFOHnRhIznpI2LNP6cvtsutOFxvHW/v8sdZh8nXVfuEs 2oCPg+5EewB688T4m1GhYM2WpFw= 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:subject:to:references:from:message-id:date :mime-version:in-reply-to:content-type :content-transfer-encoding; s=default; bh=Xsq16Xg8SDkESMgkmdUBlu 1My5Y=; b=VZEQNvf5zYPdUKp8vtAM8+qFfdChNZ8e/SsXjtH+Hc9sbEu1d3F7c+ CtA05T2MzMKekM6qBxJiXvcWkyqcIYpbXkjNi/spcog3dVhK4luzjLHtbbIC5CL5 14RVVxMnIIyMZbYtvZ/9V9arpkUrYTp9C9cX2EcV5MA6t42MdHwPU= Received: (qmail 122163 invoked by alias); 4 Nov 2019 16:10:13 -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 Received: (qmail 122150 invoked by uid 89); 4 Nov 2019 16:10:12 -0000 Authentication-Results: sourceware.org; auth=none X-HELO: mx0a-001b2d01.pphosted.com Subject: Re: [PATCH v2 04/30] ldbl-128ibm-compat: Add wide character, fortified printing functions To: "Gabriel F. T. Gomes" , libc-alpha@sourceware.org References: <20191025153410.15405-1-gabriel@inconstante.net.br> <20191025153410.15405-5-gabriel@inconstante.net.br> From: Paul E Murphy Message-ID: <07e653c0-fe44-772e-0ec8-452c6ed57906@linux.ibm.com> Date: Mon, 4 Nov 2019 10:07:50 -0600 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.1.0 MIME-Version: 1.0 In-Reply-To: <20191025153410.15405-5-gabriel@inconstante.net.br> Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit On 10/25/19 10:33 AM, Gabriel F. T. Gomes wrote: > From: "Gabriel F. T. Gomes" > > No changes since v1. > > -- 8< -- > Similarly to what was done for the regular character, fortified printing > functions, this patch combines the mode masks PRINTF_LDBL_USES_FLOAT128 > and PRINTF_FORTIFY to provide wide character versions of fortified > printf functions. It also adds two flavors of test cases: one that > explicitly calls the fortified functions, and another that reuses the > non-fortified test, but defining _FORTIFY_SOURCE as 2. The first > guarantees that the implementations are actually being tested > (independently of what's in bits/wchar2.h), whereas the second > guarantees that the redirections calls the correct function in the IBM > and IEEE long double cases. > > Tested for powerpc64le. > --- > sysdeps/ieee754/ldbl-128ibm-compat/Makefile | 18 ++- > sysdeps/ieee754/ldbl-128ibm-compat/Versions | 8 ++ > .../ldbl-128ibm-compat/ieee128-fwprintf_chk.c | 38 ++++++ > .../ldbl-128ibm-compat/ieee128-swprintf_chk.c | 42 +++++++ > .../ieee128-vfwprintf_chk.c | 31 +++++ > .../ieee128-vswprintf_chk.c | 34 ++++++ > .../ldbl-128ibm-compat/ieee128-vwprintf_chk.c | 30 +++++ > .../ldbl-128ibm-compat/ieee128-wprintf_chk.c | 38 ++++++ > .../test-wprintf-chk-ibm128.c | 1 + > .../test-wprintf-chk-ieee128.c | 1 + > .../test-wprintf-chk-ldbl-compat.c | 113 ++++++++++++++++++ > .../test-wprintf-chk-redir-ibm128.c | 2 + > .../test-wprintf-chk-redir-ieee128.c | 2 + > 13 files changed, 357 insertions(+), 1 deletion(-) > create mode 100644 sysdeps/ieee754/ldbl-128ibm-compat/ieee128-fwprintf_chk.c > create mode 100644 sysdeps/ieee754/ldbl-128ibm-compat/ieee128-swprintf_chk.c > create mode 100644 sysdeps/ieee754/ldbl-128ibm-compat/ieee128-vfwprintf_chk.c > create mode 100644 sysdeps/ieee754/ldbl-128ibm-compat/ieee128-vswprintf_chk.c > create mode 100644 sysdeps/ieee754/ldbl-128ibm-compat/ieee128-vwprintf_chk.c > create mode 100644 sysdeps/ieee754/ldbl-128ibm-compat/ieee128-wprintf_chk.c > create mode 100644 sysdeps/ieee754/ldbl-128ibm-compat/test-wprintf-chk-ibm128.c > create mode 100644 sysdeps/ieee754/ldbl-128ibm-compat/test-wprintf-chk-ieee128.c > create mode 100644 sysdeps/ieee754/ldbl-128ibm-compat/test-wprintf-chk-ldbl-compat.c > create mode 100644 sysdeps/ieee754/ldbl-128ibm-compat/test-wprintf-chk-redir-ibm128.c > create mode 100644 sysdeps/ieee754/ldbl-128ibm-compat/test-wprintf-chk-redir-ieee128.c > > diff --git a/sysdeps/ieee754/ldbl-128ibm-compat/Makefile b/sysdeps/ieee754/ldbl-128ibm-compat/Makefile > diff --git a/sysdeps/ieee754/ldbl-128ibm-compat/Versions b/sysdeps/ieee754/ldbl-128ibm-compat/Versions OK > diff --git a/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-fwprintf_chk.c b/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-fwprintf_chk.c The 6 wrappers look OK too. > diff --git a/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-vwprintf_chk.c b/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-vwprintf_chk.c > new file mode 100644 > index 0000000000..5e47dccc0d > --- /dev/null > +++ b/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-vwprintf_chk.c > @@ -0,0 +1,30 @@ > +/* Wrapper for __vwprintf_chk. IEEE128 version. > + Copyright (C) 2019 Free Software Foundation, Inc. > + This file is part of the GNU C Library. > + > + The GNU C Library is free software; you can redistribute it and/or > + modify it under the terms of the GNU Lesser General Public > + License as published by the Free Software Foundation; either > + version 2.1 of the License, or (at your option) any later version. > + > + The GNU C Library is distributed in the hope that it will be useful, > + but WITHOUT ANY WARRANTY; without even the implied warranty of > + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU > + Lesser General Public License for more details. > + > + You should have received a copy of the GNU Lesser General Public > + License along with the GNU C Library; if not, see > + . */ > + > +#include > + > +extern int > +___ieee128_vwprintf_chk (int flag, const wchar_t *format, va_list ap) > +{ > + unsigned int mode = PRINTF_LDBL_USES_FLOAT128; > + if (flag > 0) > + mode |= PRINTF_FORTIFY; > + > + return __vfwprintf_internal (stdout, format, ap, mode); > +} > +strong_alias (___ieee128_vwprintf_chk, __vwprintf_chkieee128) > diff --git a/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-wprintf_chk.c b/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-wprintf_chk.c > new file mode 100644 > index 0000000000..ba00b7be54 > --- /dev/null > +++ b/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-wprintf_chk.c > @@ -0,0 +1,38 @@ > +/* Wrapper for __wprintf_chk. IEEE128 version. > + Copyright (C) 2019 Free Software Foundation, Inc. > + This file is part of the GNU C Library. > + > + The GNU C Library is free software; you can redistribute it and/or > + modify it under the terms of the GNU Lesser General Public > + License as published by the Free Software Foundation; either > + version 2.1 of the License, or (at your option) any later version. > + > + The GNU C Library is distributed in the hope that it will be useful, > + but WITHOUT ANY WARRANTY; without even the implied warranty of > + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU > + Lesser General Public License for more details. > + > + You should have received a copy of the GNU Lesser General Public > + License along with the GNU C Library; if not, see > + . */ > + > +#include > +#include > + > +extern int > +___ieee128_wprintf_chk (int flag, const wchar_t *format, ...) > +{ > + va_list ap; > + int done; > + > + unsigned int mode = PRINTF_LDBL_USES_FLOAT128; > + if (flag > 0) > + mode |= PRINTF_FORTIFY; > + > + va_start (ap, format); > + done = __vfwprintf_internal (stdout, format, ap, mode); > + va_end (ap); > + > + return done; > +} > +strong_alias (___ieee128_wprintf_chk, __wprintf_chkieee128) > diff --git a/sysdeps/ieee754/ldbl-128ibm-compat/test-wprintf-chk-ibm128.c b/sysdeps/ieee754/ldbl-128ibm-compat/test-wprintf-chk-ibm128.c > new file mode 100644 > index 0000000000..5323df71e2 > --- /dev/null > +++ b/sysdeps/ieee754/ldbl-128ibm-compat/test-wprintf-chk-ibm128.c > @@ -0,0 +1 @@ > +#include > diff --git a/sysdeps/ieee754/ldbl-128ibm-compat/test-wprintf-chk-ieee128.c b/sysdeps/ieee754/ldbl-128ibm-compat/test-wprintf-chk-ieee128.c > new file mode 100644 > index 0000000000..5323df71e2 > --- /dev/null > +++ b/sysdeps/ieee754/ldbl-128ibm-compat/test-wprintf-chk-ieee128.c > @@ -0,0 +1 @@ > +#include > diff --git a/sysdeps/ieee754/ldbl-128ibm-compat/test-wprintf-chk-ldbl-compat.c b/sysdeps/ieee754/ldbl-128ibm-compat/test-wprintf-chk-ldbl-compat.c > new file mode 100644 > index 0000000000..f614004f27 > --- /dev/null > +++ b/sysdeps/ieee754/ldbl-128ibm-compat/test-wprintf-chk-ldbl-compat.c > @@ -0,0 +1,113 @@ > +/* Test for the long double variants of *w*printf_chk functions. > + Copyright (C) 2019 Free Software Foundation, Inc. > + This file is part of the GNU C Library. > + > + The GNU C Library is free software; you can redistribute it and/or > + modify it under the terms of the GNU Lesser General Public > + License as published by the Free Software Foundation; either > + version 2.1 of the License, or (at your option) any later version. > + > + The GNU C Library is distributed in the hope that it will be useful, > + but WITHOUT ANY WARRANTY; without even the implied warranty of > + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU > + Lesser General Public License for more details. > + > + You should have received a copy of the GNU Lesser General Public > + License along with the GNU C Library; if not, see > + . */ > + > +#define _FORTIFY_SOURCE 2 > + > +#include > +#include > +#include > +#include > + > +#include > +#include > + > +static void > +do_test_call_varg (FILE *stream, const wchar_t *format, ...) > +{ > + wchar_t string[128]; > + va_list args; > + > + wprintf (L"%20Ls", L"__vfwprintf_chk: "); > + va_start (args, format); > + __vfwprintf_chk (stream, 1, format, args); > + va_end (args); > + wprintf (L"\n"); > + > + wprintf (L"%20Ls", L"__vswprintf_chk: "); > + va_start (args, format); > + __vswprintf_chk (string, 79, 1, 127, format, args); > + va_end (args); > + wprintf (L"%Ls", string); > + wprintf (L"\n"); > + > + wprintf (L"%20Ls", L"__vwprintf_chk: "); > + va_start (args, format); > + __vwprintf_chk (1, format, args); > + va_end (args); > + wprintf (L"\n"); > +} > + > +static void > +do_test_call_rarg (FILE *stream, const wchar_t *format, long double ld) > +{ > + wchar_t string[128]; > + > + wprintf (L"%20Ls", L"__fwprintf_chk: "); > + __fwprintf_chk (stream, 1, format, ld); > + wprintf (L"\n"); > + > + wprintf (L"%20Ls", L"__swprintf_chk: "); > + __swprintf_chk (string, 79, 1, 127, format, ld); > + wprintf (L"%Ls", string); > + wprintf (L"\n"); > + > + wprintf (L"%20Ls", L"__wprintf_chk: "); > + __wprintf_chk (1, format, ld); > + wprintf (L"\n"); > +} > + > +static void > +do_test_call (void) > +{ > + long double ld = -1; > + > + /* Print in decimal notation. */ > + do_test_call_rarg (stdout, L"%.10Lf", ld); > + do_test_call_varg (stdout, L"%.10Lf", ld); > + > + /* Print in hexadecimal notation. */ > + do_test_call_rarg (stdout, L"%.10La", ld); > + do_test_call_varg (stdout, L"%.10La", ld); > +} > + > +static int > +do_test (void) > +{ > + struct support_capture_subprocess result; > + result = support_capture_subprocess ((void *) &do_test_call, NULL); > + > + /* Compare against the expected output. */ > + const char *expected = > + " __fwprintf_chk: -1.0000000000\n" > + " __swprintf_chk: -1.0000000000\n" > + " __wprintf_chk: -1.0000000000\n" > + " __vfwprintf_chk: -1.0000000000\n" > + " __vswprintf_chk: -1.0000000000\n" > + " __vwprintf_chk: -1.0000000000\n" > + " __fwprintf_chk: -0x1.0000000000p+0\n" > + " __swprintf_chk: -0x1.0000000000p+0\n" > + " __wprintf_chk: -0x1.0000000000p+0\n" > + " __vfwprintf_chk: -0x1.0000000000p+0\n" > + " __vswprintf_chk: -0x1.0000000000p+0\n" > + " __vwprintf_chk: -0x1.0000000000p+0\n"; > + TEST_COMPARE_STRING (expected, result.out.buffer); > + > + return 0; > +} > + OK > +#include > diff --git a/sysdeps/ieee754/ldbl-128ibm-compat/test-wprintf-chk-redir-ibm128.c b/sysdeps/ieee754/ldbl-128ibm-compat/test-wprintf-chk-redir-ibm128.c > new file mode 100644 > index 0000000000..a12186a945 > --- /dev/null > +++ b/sysdeps/ieee754/ldbl-128ibm-compat/test-wprintf-chk-redir-ibm128.c > @@ -0,0 +1,2 @@ > +#define _FORTIFY_SOURCE 2 Similar comment to the narrow printing version of the patch. Is this needed here as well as the shared test code? > +#include > diff --git a/sysdeps/ieee754/ldbl-128ibm-compat/test-wprintf-chk-redir-ieee128.c b/sysdeps/ieee754/ldbl-128ibm-compat/test-wprintf-chk-redir-ieee128.c > new file mode 100644 > index 0000000000..a12186a945 > --- /dev/null > +++ b/sysdeps/ieee754/ldbl-128ibm-compat/test-wprintf-chk-redir-ieee128.c > @@ -0,0 +1,2 @@ > +#define _FORTIFY_SOURCE 2 Likewise. > +#include >