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=-1.0 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,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 1BC261F44D for ; Mon, 25 Mar 2024 17:42:25 +0000 (UTC) Authentication-Results: dcvr.yhbt.net; dkim=pass (2048-bit key; unprotected) header.d=linaro.org header.i=@linaro.org header.a=rsa-sha256 header.s=google header.b=ZQV+jxau; dkim-atps=neutral Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 28AC43858429 for ; Mon, 25 Mar 2024 17:42:24 +0000 (GMT) Received: from mail-pl1-x62b.google.com (mail-pl1-x62b.google.com [IPv6:2607:f8b0:4864:20::62b]) by sourceware.org (Postfix) with ESMTPS id D12793858D38 for ; Mon, 25 Mar 2024 17:41:58 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org D12793858D38 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=linaro.org ARC-Filter: OpenARC Filter v1.0.0 sourceware.org D12793858D38 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2607:f8b0:4864:20::62b ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1711388521; cv=none; b=X0ACshvodocmn3eb+O1cHKMwrFDwF+oFG5DvqS9cVoLQfddCrmAdidsG6MRmPL4ekgOAbrktahqgW8eobPDC19FN05ACaRUHHHiyNzMVveWPgJAmD71IgO9SHhuvvDiJwfqcHNge4pT+d60ynvosYIp6CK4mNxmZbP8RnA0fdSc= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1711388521; c=relaxed/simple; bh=xhmbjKdToO9txom9YkqmyU/+zOxvMqprMo7Jw2pQsEw=; h=DKIM-Signature:Message-ID:Date:MIME-Version:Subject:To:From; b=DhUHfeJTEOVNgEqHeAiezdFLjLptE7jrS9oQ5NLN7U8qY8CAF+VhZEI+LLVfNQuZJ+WJgWL0RmT49N8vl/RWR8hiwrdr48fDG05sbZaHp7Ax3rcb1uSE293XfN/oXEcEF0bSWg9wANKoJcsZBxmqENumeo+Nppy6U1twYEtpt1g= ARC-Authentication-Results: i=1; server2.sourceware.org Received: by mail-pl1-x62b.google.com with SMTP id d9443c01a7336-1e0d6356ce9so4983335ad.3 for ; Mon, 25 Mar 2024 10:41:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1711388518; x=1711993318; darn=sourceware.org; h=content-transfer-encoding:in-reply-to:organization:from:references :cc:to:content-language:subject:user-agent:mime-version:date :message-id:from:to:cc:subject:date:message-id:reply-to; bh=v8AI19CwklOX/pRyR5tdFGPMimq8gOEMi/4kxRWDIfw=; b=ZQV+jxautqD61Dfm7fw4tfWDwIVPrGFmBsE+jTg17j4CL/CzUqdA0/pD+XixjWsBpH WIrUg3megfrhLTuwxJDiHlrasgXE6byEnYqcYa1bY+xYqVLcERennL1OXeMug6UWhQLK P7efinpSm8oa3gfzfH7KbSnbYLXFzJjKxf6OydBQkU/NgfW+KvkmtZiZgzB6oYtjWjHA RbFNhfVuMOyI2LVTx7MdCD2LVNScH5wESQfALzNCF2EdulMYE9s0hKwDt/gPHbzZVXFI ne7IUtok+fky3WqrpIGPj3d/QgFHSkLOwrbYRTF1LJqIoGmVpRepgm8kTOMZt3/ZMxd2 gwvA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1711388518; x=1711993318; 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=v8AI19CwklOX/pRyR5tdFGPMimq8gOEMi/4kxRWDIfw=; b=AB1bccsgQA20DFMxlMrKEYD3ggjaupBMkovf3ST/iYlmcTzR+CxlWQoYUxgmVwS0lj 37cZR5yOhmnKqttzSIdk4R4PWWhUB4DNIeqZnfND4BCZEOsfUsDxLPyDDpNVNYDqiUxf Ai0i6fqsi0rbgv9p0ISb1T+oXGTtfLqTjTtUDSJyDXDR/HpAYcMDCiC+iUMuYSGkR5mi jdsTLayMSwZ4HgDnYoKr9yLlArJPVzFYNCZ3IcVrXuZJbKiiDSm5e39cELLIdHJ4vY/0 +6Yh9byn1uDuitcJS8g2bUpDz75ktrlAlEQoK2aQlnFaDPCbgU5eouM8ITcMn5Xrw2k+ TyHA== X-Forwarded-Encrypted: i=1; AJvYcCVSyXXLjP8+XvezYaB5L6f7VAh6EiDnE4FbeBo14NqSoxESzn78R0xH9oVxKfl+dQg4F6FoWm6SyOdphiaxR2Z+/MQhwGhsvSmf X-Gm-Message-State: AOJu0YzSXZL4Q3g7HUMXkZHHsl//f+O914oGLnMohGUehHlyQV+0+OwU NR1ncP4EXfkWn6UgL8hwSJHAjbVEbC+jPU2gO+59mDfrMFivSVkr+vMaADa08SQ= X-Google-Smtp-Source: AGHT+IHdeyDAfpRdLGpVwZNT+OosVhvFkflKDf9ZNT07d+Y4M0VnI4+GAsrGEw8e9uV1Ado2bDNG3A== X-Received: by 2002:a17:902:b20b:b0:1e0:2a5f:d1d6 with SMTP id t11-20020a170902b20b00b001e02a5fd1d6mr5570621plr.63.1711388517677; Mon, 25 Mar 2024 10:41:57 -0700 (PDT) Received: from ?IPV6:2804:1b3:a7c3:1d04:59b1:88e7:3675:b14? ([2804:1b3:a7c3:1d04:59b1:88e7:3675:b14]) by smtp.gmail.com with ESMTPSA id c4-20020a170902aa4400b001e0d9dcae91sm514132plr.279.2024.03.25.10.41.55 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 25 Mar 2024 10:41:56 -0700 (PDT) Message-ID: <95787342-3be0-4d35-bef9-abb0a82fc77e@linaro.org> Date: Mon, 25 Mar 2024 14:41:54 -0300 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH v2 1/6] math: Add support for auto static math tests Content-Language: en-US To: "H.J. Lu" Cc: Florian Weimer , Joseph Myers , libc-alpha@sourceware.org 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> From: Adhemerval Zanella Netto Organization: Linaro In-Reply-To: Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 25/03/24 11:52, H.J. Lu wrote: > On Mon, Mar 25, 2024 at 7:29 AM Adhemerval Zanella Netto > wrote: >> >> >> >> On 25/03/24 11:25, H.J. Lu wrote: >>> On Mon, Mar 25, 2024 at 7:13 AM Adhemerval Zanella Netto >>> wrote: >>>> >>>> >>>> >>>> On 25/03/24 10:34, H.J. Lu wrote: >>>>> On Fri, Mar 22, 2024 at 10:46 AM 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 tests >>>>>>>>>>> for auto-generated math tests for all support types. To avoid >>>>>>>>>>> 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 non-static >>>>>>>>> symbols in the ABI lists and use those for testing static linking. >>>>>>>>> >>>>>>>> >>>>>>>> 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 coverage >>>>> 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 static >>>> tests, I haven't hook all of the autogenerated tests because this would >>>> 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 here, 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 last >>>>>>> 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 maintainer >>>>>> option. Although some installed programs will be static linked, it is >>>>>> really useful on checking if static linking is really working as expected. >>>>>> >>>>>> And it also requires *another* build and check iteration, which duplicates >>>>>> the work required in most cases (since static libraries are still built >>>>>> on default for --enable-shared). I tried to help a coworker on support the >>>>>> --disable-shared and I recall another potential issues was the resulting >>>>>> 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 add >>>>>> $(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 towards >>>>>> 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 needed. >>>> >>>> For this patchset only added the required one to check for symbols that >>>> there were some regression with recent fixes. But it should be doable 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 = >> -libm-test-funcs-noauto-static = >> +libm-test-funcs-noauto-static = \ >> + fmod \ >> + # libm-test-funcs-noauto-static >> libm-test-funcs-compat-static = >> libm-test-funcs-narrow-static = >> libm-test-funcs-all-static = $(libm-test-funcs-auto-static) $(libm-test-funcs-noauto-static) >> >> >> If you check the build directory, it will have a test--fmod-static >> 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: libm-test%.inc \ libm-test-funcs-auto-static = \ + cabs \ exp10 \ # libm-test-funcs-auto-static libm-test-funcs-noauto-static = \ x86_64-linux-gnu$ file math/test-*-cabs-static math/test-double-cabs-static: ELF 64-bit LSB pie executable, x86-64, version 1 (GNU/Linux), static-pie linked, for GNU/Linux 3.2.0, with debug_info, not stripped math/test-float-cabs-static: ELF 64-bit LSB pie executable, x86-64, version 1 (GNU/Linux), static-pie linked, for GNU/Linux 3.2.0, with debug_info, not stripped math/test-float128-cabs-static: ELF 64-bit LSB pie executable, x86-64, version 1 (GNU/Linux), static-pie linked, for GNU/Linux 3.2.0, with debug_info, not stripped math/test-float32-cabs-static: ELF 64-bit LSB pie executable, x86-64, version 1 (GNU/Linux), static-pie linked, for GNU/Linux 3.2.0, with debug_info, not stripped math/test-float32x-cabs-static: ELF 64-bit LSB pie executable, x86-64, version 1 (GNU/Linux), static-pie linked, for GNU/Linux 3.2.0, with debug_info, not stripped math/test-float64-cabs-static: ELF 64-bit LSB pie executable, x86-64, version 1 (GNU/Linux), static-pie linked, for GNU/Linux 3.2.0, with debug_info, not stripped math/test-float64x-cabs-static: ELF 64-bit LSB pie executable, x86-64, version 1 (GNU/Linux), static-pie linked, for GNU/Linux 3.2.0, with debug_info, not stripped math/test-ldouble-cabs-static: ELF 64-bit LSB pie executable, x86-64, version 1 (GNU/Linux), static-pie linked, for GNU/Linux 3.2.0, with debug_info, 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 = canonicalize ceil cimag conj copysign cproj creal \ nextup remainder remquo rint round roundeven scalb \ scalbln scalbn setpayload setpayloadsig signbit \ significand totalorder totalordermag trunc ufromfp \ - ufromfpx compat_totalorder compat_totalordermag + ufromfpx libm-test-funcs-compat = compat_totalorder compat_totalordermag libm-test-funcs-narrow = add div fma mul sqrt sub libm-test-funcs-all = $(libm-test-funcs-auto) $(libm-test-funcs-noauto) @@ -368,13 +368,15 @@ $(libm-test-c-narrow-obj): $(objpfx)libm-test%.c: libm-test%.inc \ libm-test-funcs-auto-static = \ - exp10 \ + $(libm-test-funcs-auto) \ # libm-test-funcs-auto-static libm-test-funcs-noauto-static = \ - fmod \ + $(libm-test-funcs-noauto) \ # libm-test-funcs-noauto-static libm-test-funcs-compat-static = -libm-test-funcs-narrow-static = +libm-test-funcs-narrow-static = \ + $(libm-test-funcs-narrow) \ + # libm-test-funcs-narrow-static libm-test-funcs-all-static = $(libm-test-funcs-auto-static) $(libm-test-funcs-noauto-static) libm-test-c-auto-static = $(foreach f,$(libm-test-funcs-auto-static),libm-test-$(f)-static.c) (this won't work because of another missing symbol, __isnanf128, but which is also simple to fix). The approach might be time consuming, since it requires more disk space and cpu use. To just build the tests on my machine (Ryzen 5900, 12c) it takes about 17s, however the extra disk space is quite high: x86_64-linux-gnu$ stat -c "%s" math/test-*-static | awk '{ total += $0 }; END { print total }' | numfmt --to iec --format "%8.4f" 3,6716G I could get a smaller with '-fdata-sections -ffunction-sections -Wl,-gc-sections' (3,5940G), but it is still a somewhat amount of extra disk space for testing.