From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on starla X-Spam-Level: X-Spam-Status: No, score=-0.9 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED, SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6 Received: from server2.sourceware.org (server2.sourceware.org [8.43.85.97]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by dcvr.yhbt.net (Postfix) with ESMTPS id 906AF1F44D for ; Tue, 26 Mar 2024 13:41:51 +0000 (UTC) Authentication-Results: dcvr.yhbt.net; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20230601 header.b=DVGNGQZG; dkim-atps=neutral Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id B4D89385840A for ; Tue, 26 Mar 2024 13:41:50 +0000 (GMT) Received: from mail-yb1-xb2c.google.com (mail-yb1-xb2c.google.com [IPv6:2607:f8b0:4864:20::b2c]) by sourceware.org (Postfix) with ESMTPS id A07AA3858408 for ; Tue, 26 Mar 2024 13:41:28 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org A07AA3858408 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=gmail.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org A07AA3858408 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2607:f8b0:4864:20::b2c ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1711460491; cv=none; b=U26VerBCc2oaxXdK8ai60Ff3fo2QKy8UxP0iSdPwp6DTncfCHhEBxpi/eofZlIomESASjF7PVMRHzHduzbfkBnDxsSUnftrdwZFo1WR4aehPL0px+RnURKv/7v3LrmugwOwU9WJ1t2Ip5lGtE8m3kgM03qLXIdgxg+H7W4dgcmQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1711460491; c=relaxed/simple; bh=X9edCG03brmfc6J+dQ1Un1NPwIdOmxxIsEGwxEiMIYw=; h=DKIM-Signature:MIME-Version:From:Date:Message-ID:Subject:To; b=qGfqk/c41Ba48aiF5oLadHbbmyvL8FqSZ8VIKo9FX+3tt2Tx/XztOIjMeYJejZSPqH0d5ElJV+3MNuX68+ywSVTQg8ABttM1StVlaP0fYllsO/36bxiHbxKLsNR09wkm9kiJwD2XV4Epn8bbTRHe5+f7H1i3P9yH8+CyGSlu3u8= ARC-Authentication-Results: i=1; server2.sourceware.org Received: by mail-yb1-xb2c.google.com with SMTP id 3f1490d57ef6-dcbcea9c261so5593399276.3 for ; Tue, 26 Mar 2024 06:41:28 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1711460488; x=1712065288; darn=sourceware.org; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=1KIXpXmyfHElvHN7JNsidi3H7dWOOgbXb++UywrFplY=; b=DVGNGQZGkeiivujMV7AYx85bh+DaE1z1qfd7HZ/7aNbpiNX+w513i2p+lVTlw3NKTB mbf4r6ahGH5l4GUQgpwbu/R3ln4f8kekgdmv3BaYxnajhVq+yPkAQDNXhFFFbyHci68F tMEUQxraLkvUWU0QSxe5pi8znL3UkNXSRigZrGUOeQTRe32J+x1Nr6By0wAJwyobqGkp 61VaxeIWWZojRHpXcwjusG5AyBlD2J8eshjv4GO2/nPjTHIH5nKMQW4FtSSoCaq/aH3g GjKxhzMtrvyZuqU7kabz3BazPcW5OAYFW6ZaQJoI+q4bJCz7oWtDztas/M3b/6huJRvL Gr1A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1711460488; x=1712065288; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=1KIXpXmyfHElvHN7JNsidi3H7dWOOgbXb++UywrFplY=; b=MjQZIgrzainXqST1GvtXQq3dDGG/1ptidM6lL5fOLb9WYIBmr8ra+66+fZctNpRLI+ DWDi6hBTFAl04PJs1GvDRmTfhrNf9FoUANFM8AX2ig0Bk9p91K/0QYeK4cFnOouDWzyt JNxk7F0HaANXxkLrDsVNemd6XF4pVaCZ9azjAiQwa17lGh9Up0DyC6So5leUOFE+lPM6 /MZjXK4emqMrsCsYlr0rXg3UCkJySJCN3QCGdd72tOsBGwwNGDvT6N+8o7w9XBthI/C9 KUA57qqlOaWbpSsYYxCQ7FdvQAizEcNOIN4/rQfW6crOfhgu6J+qoyoVlmlCLT3t94/e 7mdA== X-Forwarded-Encrypted: i=1; AJvYcCVjwuQwJaCe9w0FPZubfcOCus9FAlvvh09pFOnYkMly+DZAWAuVJvP99lUe9o44zG8TVNQgrgmF89BMiHtqkUtQO+6HSApREmp3 X-Gm-Message-State: AOJu0YyUrixrQX6dnJA7GoCZUQ/ci6g6Oy3txijtIq4PKpfoULsT09L5 T6T6Jk3jrN0cjK6f9VGCoUoqxCtTJNKpKoJu3E78CGb0IjzUg3LfJIacsWZPgHRCUwLIC/zPzNw 8kqU+HF03ldJAl5qMYlW1pnyfHyc= X-Google-Smtp-Source: AGHT+IEUh+ANLMCsLfG71PGhIVrBf0NuvYjvrXubLiqLsLNjfonR+CcaWN/haCvtHE4q5Pn1p6L5ef0rj+GxrKjVXgI= X-Received: by 2002:a25:b104:0:b0:dc2:421e:c943 with SMTP id g4-20020a25b104000000b00dc2421ec943mr1003062ybj.42.1711460487783; Tue, 26 Mar 2024 06:41:27 -0700 (PDT) MIME-Version: 1.0 References: <20240321164325.539976-1-adhemerval.zanella@linaro.org> <20240321164325.539976-2-adhemerval.zanella@linaro.org> <23abf336-5490-d62d-c664-98724630bad0@redhat.com> <87v85edar3.fsf@oldenburg.str.redhat.com> <152e5240-b315-401a-8bdd-03b4be0fe35f@linaro.org> <8734sii7s3.fsf@oldenburg.str.redhat.com> <1ab96a85-a66c-45f7-9786-863cd37e5497@linaro.org> <95787342-3be0-4d35-bef9-abb0a82fc77e@linaro.org> In-Reply-To: <95787342-3be0-4d35-bef9-abb0a82fc77e@linaro.org> From: "H.J. Lu" Date: Tue, 26 Mar 2024 06:40:51 -0700 Message-ID: Subject: Re: [PATCH v2 1/6] math: Add support for auto static math tests To: Adhemerval Zanella Netto Cc: Florian Weimer , Joseph Myers , libc-alpha@sourceware.org Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-BeenThere: libc-alpha@sourceware.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Libc-alpha mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: libc-alpha-bounces+e=80x24.org@sourceware.org On Mon, Mar 25, 2024 at 10:41=E2=80=AFAM Adhemerval Zanella Netto wrote: > > > > On 25/03/24 11:52, H.J. Lu wrote: > > On Mon, Mar 25, 2024 at 7:29=E2=80=AFAM Adhemerval Zanella Netto > > wrote: > >> > >> > >> > >> On 25/03/24 11:25, H.J. Lu wrote: > >>> On Mon, Mar 25, 2024 at 7:13=E2=80=AFAM Adhemerval Zanella Netto > >>> wrote: > >>>> > >>>> > >>>> > >>>> On 25/03/24 10:34, H.J. Lu wrote: > >>>>> On Fri, Mar 22, 2024 at 10:46=E2=80=AFAM Adhemerval Zanella Netto > >>>>> wrote: > >>>>>> > >>>>>> > >>>>>> > >>>>>> On 22/03/24 12:51, Florian Weimer wrote: > >>>>>>> * Adhemerval Zanella Netto: > >>>>>>> > >>>>>>>> On 22/03/24 03:46, Florian Weimer wrote: > >>>>>>>>> * Joseph Myers: > >>>>>>>>> > >>>>>>>>>> On Thu, 21 Mar 2024, Adhemerval Zanella wrote: > >>>>>>>>>> > >>>>>>>>>>> It basically copy the already in place rules for dynamic test= s > >>>>>>>>>>> for auto-generated math tests for all support types. To avoi= d > >>>>>>>>>>> the need to duplicate .inc files, a .SECONDEXPANSION rules is > >>>>>>>>>>> adeed for the gen-libm-test.py generation. > >>>>>>>>>> > >>>>>>>>>> Running the autogenerated tests seems overly complicated when = the goal is > >>>>>>>>>> simply to verify that linking a call succeeds. > >>>>>>>>> > >>>>>>>>> Right. And I would prefer if we could mark compat/otherwise no= n-static > >>>>>>>>> symbols in the ABI lists and use those for testing static linki= ng. > >>>>>>>>> > >>>>>>>> > >>>>>>>> That was my first approach, but then as an experiment I enabled = static > >>>>>>>> build for most of math tests and unexpectedly it has shows some = failures > >>>>>>>> on x86_64: > >>>>>>>> > >>>>>>>> FAIL: math/test-float64x-acos > >>>>>>>> FAIL: math/test-float64x-log10 > >>>>>>>> FAIL: math/test-float64x-log2 > >>>>>>>> FAIL: math/test-float64x-y0 > >>>>>>>> FAIL: math/test-float64x-y1 > >>>>>>>> FAIL: math/test-ldouble-acos > >>>>>>>> FAIL: math/test-ldouble-log10 > >>>>>>>> FAIL: math/test-ldouble-log2 > >>>>>>>> FAIL: math/test-ldouble-y0 > >>>>>>>> FAIL: math/test-ldouble-y1 > >>>>>>>> > >>>>>>>> $ cat math/test-float64x-acos.out > >>>>>>>> testing _Float64x (without inline functions) > >>>>>>>> Failure: acos (max_value): Exception "Overflow" set > >>>>>>>> Failure: acos (-max_value): Exception "Overflow" set > >>>>>>>> Failure: acos_downward (max_value): Exception "Overflow" set > >>>>>>>> Failure: acos_downward (-max_value): Exception "Overflow" set > >>>>>>>> Failure: acos_towardzero (max_value): Exception "Overflow" set > >>>>>>>> Failure: acos_towardzero (-max_value): Exception "Overflow" set > >>>>>>>> Failure: acos_upward (max_value): Exception "Overflow" set > >>>>>>>> Failure: acos_upward (-max_value): Exception "Overflow" set > >>>>>>>> > >>>>> > >>>>> This new static test only checks link failure. It doesn't check if= the static > >>>>> implementation is correct. We may not have more functional coverag= e > >>>>> for static libm in the first static libm test patch. But the first= new static > >>>>> libm tests should least expose one static libm failure on x86-64. > >>>> > >>>> The first patch is just a framework so we can selective add new stat= ic > >>>> tests, I haven't hook all of the autogenerated tests because this wo= uld > >>>> add more cpu and disk usage. > >>>> > >>>> And the test added on libm-test-funcs-*-static rules does check for > >>>> the implementation, using the default math skeleton test (including > >>>> ulp, rounding, exceptions, etc). > >>>> > >>>>> > >>>>>>>> My plan was to eventually track down what might be happening her= e, and > >>>>>>>> the currently autogenerated tests gave me a nice scaffolding to = add coverage > >>>>>>>> tests. > >>>>>>> > >>>>>>> Interesting. On the other hand, getting --disable-shared to work= and > >>>>>>> just run the *entire* test suite could provide value, too. The l= ast > >>>>>>> time we discussed this we weren't sure if we had static-specific > >>>>>>> failures, but your example shows that we do. > >>>>>>> > >>>>>> > >>>>>> The main problem imho is --disable-shared is essentially a maintai= ner > >>>>>> option. Although some installed programs will be static linked, it= is > >>>>>> really useful on checking if static linking is really working as e= xpected. > >>>>>> > >>>>>> And it also requires *another* build and check iteration, which du= plicates > >>>>>> the work required in most cases (since static libraries are still = built > >>>>>> on default for --enable-shared). I tried to help a coworker on su= pport the > >>>>>> --disable-shared and I recall another potential issues was the res= ulting > >>>>>> disk usage (and thus build requirements) was quite high due glibc = poor > >>>>>> organization on static build requirements. > >>>>>> > >>>>>> There also another complication where we will need to constantly a= dd > >>>>>> $(build-shared) and duplicate the CI work to ensure both configure > >>>>>> builds are ok. > >>>>>> > >>>>>> So I really think we should phase-out --disable-shared and work to= wards > >>>>>> on add more static build tests. > >>>>> > >>>>> Agreed. We should add one static libm functional test to each libm > >>>>> functional test. With this, the static libm link tests won't be ne= eded. > >>>> > >>>> For this patchset only added the required one to check for symbols t= hat > >>>> there were some regression with recent fixes. But it should be doabl= e to > >>>> hook all tests for all symbols, although it would require some more = Makefile > >>>> rules to hook the tgmath ones. > >>> > >>> The first patch should just add the functional tests for the missing = static > >>> libm functions with Makefile changes which can be extended to cover > >>> other libm functions. > >>> > >> > >> And it does on second patch exactly as you suggested: > >> > >> diff --git a/math/Makefile b/math/Makefile > >> index aef9cec1a1..fbb2987248 100644 > >> --- a/math/Makefile > >> +++ b/math/Makefile > >> @@ -368,7 +368,9 @@ $(libm-test-c-narrow-obj): $(objpfx)libm-test%.c: = libm-test%.inc \ > >> > >> > >> libm-test-funcs-auto-static =3D > >> -libm-test-funcs-noauto-static =3D > >> +libm-test-funcs-noauto-static =3D \ > >> + fmod \ > >> + # libm-test-funcs-noauto-static > >> libm-test-funcs-compat-static =3D > >> libm-test-funcs-narrow-static =3D > >> libm-test-funcs-all-static =3D $(libm-test-funcs-auto-static) $(libm-= test-funcs-noauto-static) > >> > >> > >> If you check the build directory, it will have a test--fmod-stat= ic > >> that would fail to build without the rest of the patch. > >> > > > > We already generate libm tests under math: > > > > math/cabs.c > > math/cabsf128.c > > math/cabsf.c > > math/cabsl.c > > ... > > > > These are not tests, but rather the complex absolute (cabs/cabsf/etc.) > that are autogenerated from the cabs_template.c. > > > Can we also generate > > > > math/cabs-static.c > > ... > > > > and add them to libm tests? > > > > And it should be simple to add static tests using these new rules: > > diff --git a/math/Makefile b/math/Makefile > index ad7fd25995..67618a4385 100644 > --- a/math/Makefile > +++ b/math/Makefile > @@ -368,6 +368,7 @@ $(libm-test-c-narrow-obj): $(objpfx)libm-test%.c: lib= m-test%.inc \ > > > libm-test-funcs-auto-static =3D \ > + cabs \ > exp10 \ > # libm-test-funcs-auto-static > libm-test-funcs-noauto-static =3D \ > > x86_64-linux-gnu$ file math/test-*-cabs-static > math/test-double-cabs-static: ELF 64-bit LSB pie executable, x86-64, ve= rsion 1 (GNU/Linux), static-pie linked, for GNU/Linux 3.2.0, with debug_inf= o, not stripped > math/test-float-cabs-static: ELF 64-bit LSB pie executable, x86-64, ve= rsion 1 (GNU/Linux), static-pie linked, for GNU/Linux 3.2.0, with debug_inf= o, not stripped > math/test-float128-cabs-static: ELF 64-bit LSB pie executable, x86-64, ve= rsion 1 (GNU/Linux), static-pie linked, for GNU/Linux 3.2.0, with debug_inf= o, not stripped > math/test-float32-cabs-static: ELF 64-bit LSB pie executable, x86-64, ve= rsion 1 (GNU/Linux), static-pie linked, for GNU/Linux 3.2.0, with debug_inf= o, not stripped > math/test-float32x-cabs-static: ELF 64-bit LSB pie executable, x86-64, ve= rsion 1 (GNU/Linux), static-pie linked, for GNU/Linux 3.2.0, with debug_inf= o, not stripped > math/test-float64-cabs-static: ELF 64-bit LSB pie executable, x86-64, ve= rsion 1 (GNU/Linux), static-pie linked, for GNU/Linux 3.2.0, with debug_inf= o, not stripped > math/test-float64x-cabs-static: ELF 64-bit LSB pie executable, x86-64, ve= rsion 1 (GNU/Linux), static-pie linked, for GNU/Linux 3.2.0, with debug_inf= o, not stripped > math/test-ldouble-cabs-static: ELF 64-bit LSB pie executable, x86-64, ve= rsion 1 (GNU/Linux), static-pie linked, for GNU/Linux 3.2.0, with debug_inf= o, not stripped > > To add all the autogenerated tests, it is a matter to do something like: > > diff --git a/math/Makefile b/math/Makefile > index ad7fd25995..b9f1b839ae 100644 > --- a/math/Makefile > +++ b/math/Makefile > @@ -307,7 +307,7 @@ libm-test-funcs-noauto =3D canonicalize ceil cimag co= nj copysign cproj creal \ > nextup remainder remquo rint round roundeven sca= lb \ > scalbln scalbn setpayload setpayloadsig signbit = \ > significand totalorder totalordermag trunc ufrom= fp \ > - ufromfpx compat_totalorder compat_totalordermag > + ufromfpx > libm-test-funcs-compat =3D compat_totalorder compat_totalordermag > libm-test-funcs-narrow =3D add div fma mul sqrt sub > libm-test-funcs-all =3D $(libm-test-funcs-auto) $(libm-test-funcs-noauto= ) > @@ -368,13 +368,15 @@ $(libm-test-c-narrow-obj): $(objpfx)libm-test%.c: l= ibm-test%.inc \ > > > libm-test-funcs-auto-static =3D \ > - exp10 \ > + $(libm-test-funcs-auto) \ > # libm-test-funcs-auto-static > libm-test-funcs-noauto-static =3D \ > - fmod \ > + $(libm-test-funcs-noauto) \ > # libm-test-funcs-noauto-static > libm-test-funcs-compat-static =3D > -libm-test-funcs-narrow-static =3D > +libm-test-funcs-narrow-static =3D \ > + $(libm-test-funcs-narrow) \ > + # libm-test-funcs-narrow-static > libm-test-funcs-all-static =3D $(libm-test-funcs-auto-static) $(libm-tes= t-funcs-noauto-static) > > libm-test-c-auto-static =3D $(foreach f,$(libm-test-funcs-auto-static),l= ibm-test-$(f)-static.c) > > (this won't work because of another missing symbol, __isnanf128, but whic= h > is also simple to fix). Another reason to do it. > The approach might be time consuming, since it requires more disk space a= nd > cpu use. To just build the tests on my machine (Ryzen 5900, 12c) it take= s > about 17s, however the extra disk space is quite high: > > x86_64-linux-gnu$ stat -c "%s" math/test-*-static | awk '{ total +=3D $0 = }; END { print total }' | numfmt --to iec --format "%8.4f" > 3,6716G > > I could get a smaller with '-fdata-sections -ffunction-sections -Wl,-gc-s= ections' (3,5940G), > but it is still a somewhat amount of extra disk space for testing. The current glibc build takes 2.7G on x86-64. I don't see another 4GB is a big issue. --=20 H.J.