[v3,7/7] math: Provide modf128 for static libm on alpha, s390, and sparcv9

Message ID 20240402140644.2172819-8-adhemerval.zanella@linaro.org
State Superseded
Delegated to: Carlos O'Donell
Headers
Series Fix some libm static issues |

Checks

Context Check Description
redhat-pt-bot/TryBot-apply_patch success Patch applied to master at the time it was sent
linaro-tcwg-bot/tcwg_glibc_build--master-arm success Testing passed
redhat-pt-bot/TryBot-32bit success Build for i686
linaro-tcwg-bot/tcwg_glibc_check--master-arm success Testing passed
linaro-tcwg-bot/tcwg_glibc_build--master-aarch64 success Testing passed
linaro-tcwg-bot/tcwg_glibc_check--master-aarch64 success Testing passed

Commit Message

Adhemerval Zanella Netto April 2, 2024, 2:06 p.m. UTC
  Checked with a build for the affected ABIs
---
 sysdeps/ieee754/ldbl-64-128/s_modfl.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)
  

Comments

H.J. Lu May 20, 2024, 4:59 p.m. UTC | #1
On Tue, Apr 2, 2024 at 7:07 AM Adhemerval Zanella
<adhemerval.zanella@linaro.org> wrote:
>
> Checked with a build for the affected ABIs
> ---
>  sysdeps/ieee754/ldbl-64-128/s_modfl.c | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/sysdeps/ieee754/ldbl-64-128/s_modfl.c b/sysdeps/ieee754/ldbl-64-128/s_modfl.c
> index 7d7aeae111..ba3d31334a 100644
> --- a/sysdeps/ieee754/ldbl-64-128/s_modfl.c
> +++ b/sysdeps/ieee754/ldbl-64-128/s_modfl.c
> @@ -1,10 +1,10 @@
>  #include <math_ldbl_opt.h>
>  #include <libm-alias-ldouble.h>
> -#if IS_IN (libc)
> +#if IS_IN (libc) && defined SHARED
>  # undef libm_alias_ldouble
>  # define libm_alias_ldouble(from, to)
>  #endif
>  #include <sysdeps/ieee754/ldbl-128/s_modfl.c>
> -#if IS_IN (libc)
> +#if IS_IN (libc) && defined SHARED
>  long_double_symbol (libc, __modfl, modfl);

Doesn't this remove modfl from static library?

>  #endif
> --
> 2.34.1
>
  
Adhemerval Zanella Netto May 20, 2024, 7:07 p.m. UTC | #2
On 20/05/24 13:59, H.J. Lu wrote:
> On Tue, Apr 2, 2024 at 7:07 AM Adhemerval Zanella
> <adhemerval.zanella@linaro.org> wrote:
>>
>> Checked with a build for the affected ABIs
>> ---
>>  sysdeps/ieee754/ldbl-64-128/s_modfl.c | 4 ++--
>>  1 file changed, 2 insertions(+), 2 deletions(-)
>>
>> diff --git a/sysdeps/ieee754/ldbl-64-128/s_modfl.c b/sysdeps/ieee754/ldbl-64-128/s_modfl.c
>> index 7d7aeae111..ba3d31334a 100644
>> --- a/sysdeps/ieee754/ldbl-64-128/s_modfl.c
>> +++ b/sysdeps/ieee754/ldbl-64-128/s_modfl.c
>> @@ -1,10 +1,10 @@
>>  #include <math_ldbl_opt.h>
>>  #include <libm-alias-ldouble.h>
>> -#if IS_IN (libc)
>> +#if IS_IN (libc) && defined SHARED
>>  # undef libm_alias_ldouble
>>  # define libm_alias_ldouble(from, to)
>>  #endif
>>  #include <sysdeps/ieee754/ldbl-128/s_modfl.c>
>> -#if IS_IN (libc)
>> +#if IS_IN (libc) && defined SHARED
>>  long_double_symbol (libc, __modfl, modfl);
> 
> Doesn't this remove modfl from static library?

As for copysignf128 and frexp128, this symbol is also provided by libc.a. 
Before this patch:

alpha-linux-gnu$ readelf -sW libc.a | grep -w modf.*
    19: 0000000000000000   572 FUNC    WEAK   DEFAULT [STD GPLOAD]     1 modfl
    17: 0000000000000000   304 FUNC    WEAK   DEFAULT [STD GPLOAD]     1 modff32x
    18: 0000000000000000   304 FUNC    WEAK   DEFAULT [STD GPLOAD]     1 modff64
    19: 0000000000000000   304 FUNC    WEAK   DEFAULT [STD GPLOAD]     1 modf
    17: 0000000000000000   244 FUNC    WEAK   DEFAULT [STD GPLOAD]     1 modff32
    18: 0000000000000000   244 FUNC    WEAK   DEFAULT [STD GPLOAD]     1 modff

After this patch:

alpha-linux-gnu$ readelf -sW libc.a | grep -w modf.*
    19: 0000000000000000   572 FUNC    WEAK   DEFAULT [STD GPLOAD]     1 modff64x
    20: 0000000000000000   572 FUNC    WEAK   DEFAULT [STD GPLOAD]     1 modff128
    21: 0000000000000000   572 FUNC    WEAK   DEFAULT [STD GPLOAD]     1 modfl
    17: 0000000000000000   304 FUNC    WEAK   DEFAULT [STD GPLOAD]     1 modff32x
    18: 0000000000000000   304 FUNC    WEAK   DEFAULT [STD GPLOAD]     1 modff64
    19: 0000000000000000   304 FUNC    WEAK   DEFAULT [STD GPLOAD]     1 modf
    17: 0000000000000000   244 FUNC    WEAK   DEFAULT [STD GPLOAD]     1 modff32
    18: 0000000000000000   244 FUNC    WEAK   DEFAULT [STD GPLOAD]     1 modff

> 
>>  #endif
>> --
>> 2.34.1
>>
> 
>
  
H.J. Lu May 21, 2024, 3:40 p.m. UTC | #3
On Mon, May 20, 2024 at 12:07 PM Adhemerval Zanella Netto
<adhemerval.zanella@linaro.org> wrote:
>
>
>
> On 20/05/24 13:59, H.J. Lu wrote:
> > On Tue, Apr 2, 2024 at 7:07 AM Adhemerval Zanella
> > <adhemerval.zanella@linaro.org> wrote:
> >>
> >> Checked with a build for the affected ABIs
> >> ---
> >>  sysdeps/ieee754/ldbl-64-128/s_modfl.c | 4 ++--
> >>  1 file changed, 2 insertions(+), 2 deletions(-)
> >>
> >> diff --git a/sysdeps/ieee754/ldbl-64-128/s_modfl.c b/sysdeps/ieee754/ldbl-64-128/s_modfl.c
> >> index 7d7aeae111..ba3d31334a 100644
> >> --- a/sysdeps/ieee754/ldbl-64-128/s_modfl.c
> >> +++ b/sysdeps/ieee754/ldbl-64-128/s_modfl.c
> >> @@ -1,10 +1,10 @@
> >>  #include <math_ldbl_opt.h>
> >>  #include <libm-alias-ldouble.h>
> >> -#if IS_IN (libc)
> >> +#if IS_IN (libc) && defined SHARED
> >>  # undef libm_alias_ldouble
> >>  # define libm_alias_ldouble(from, to)
> >>  #endif
> >>  #include <sysdeps/ieee754/ldbl-128/s_modfl.c>
> >> -#if IS_IN (libc)
> >> +#if IS_IN (libc) && defined SHARED
> >>  long_double_symbol (libc, __modfl, modfl);
> >
> > Doesn't this remove modfl from static library?
>
> As for copysignf128 and frexp128, this symbol is also provided by libc.a.
> Before this patch:
>
> alpha-linux-gnu$ readelf -sW libc.a | grep -w modf.*
>     19: 0000000000000000   572 FUNC    WEAK   DEFAULT [STD GPLOAD]     1 modfl
>     17: 0000000000000000   304 FUNC    WEAK   DEFAULT [STD GPLOAD]     1 modff32x
>     18: 0000000000000000   304 FUNC    WEAK   DEFAULT [STD GPLOAD]     1 modff64
>     19: 0000000000000000   304 FUNC    WEAK   DEFAULT [STD GPLOAD]     1 modf
>     17: 0000000000000000   244 FUNC    WEAK   DEFAULT [STD GPLOAD]     1 modff32
>     18: 0000000000000000   244 FUNC    WEAK   DEFAULT [STD GPLOAD]     1 modff
>
> After this patch:
>
> alpha-linux-gnu$ readelf -sW libc.a | grep -w modf.*
>     19: 0000000000000000   572 FUNC    WEAK   DEFAULT [STD GPLOAD]     1 modff64x
>     20: 0000000000000000   572 FUNC    WEAK   DEFAULT [STD GPLOAD]     1 modff128
>     21: 0000000000000000   572 FUNC    WEAK   DEFAULT [STD GPLOAD]     1 modfl
>     17: 0000000000000000   304 FUNC    WEAK   DEFAULT [STD GPLOAD]     1 modff32x
>     18: 0000000000000000   304 FUNC    WEAK   DEFAULT [STD GPLOAD]     1 modff64
>     19: 0000000000000000   304 FUNC    WEAK   DEFAULT [STD GPLOAD]     1 modf
>     17: 0000000000000000   244 FUNC    WEAK   DEFAULT [STD GPLOAD]     1 modff32
>     18: 0000000000000000   244 FUNC    WEAK   DEFAULT [STD GPLOAD]     1 modff
>
>

I am working on a patch to check missing symbols in static libraries.
 I opened:

https://sourceware.org/bugzilla/show_bug.cgi?id=31781

scalbnf128 seems also missing in alpha libm.a.
  
Adhemerval Zanella Netto May 21, 2024, 4:41 p.m. UTC | #4
On 21/05/24 12:40, H.J. Lu wrote:
> On Mon, May 20, 2024 at 12:07 PM Adhemerval Zanella Netto
> <adhemerval.zanella@linaro.org> wrote:
>>
>>
>>
>> On 20/05/24 13:59, H.J. Lu wrote:
>>> On Tue, Apr 2, 2024 at 7:07 AM Adhemerval Zanella
>>> <adhemerval.zanella@linaro.org> wrote:
>>>>
>>>> Checked with a build for the affected ABIs
>>>> ---
>>>>  sysdeps/ieee754/ldbl-64-128/s_modfl.c | 4 ++--
>>>>  1 file changed, 2 insertions(+), 2 deletions(-)
>>>>
>>>> diff --git a/sysdeps/ieee754/ldbl-64-128/s_modfl.c b/sysdeps/ieee754/ldbl-64-128/s_modfl.c
>>>> index 7d7aeae111..ba3d31334a 100644
>>>> --- a/sysdeps/ieee754/ldbl-64-128/s_modfl.c
>>>> +++ b/sysdeps/ieee754/ldbl-64-128/s_modfl.c
>>>> @@ -1,10 +1,10 @@
>>>>  #include <math_ldbl_opt.h>
>>>>  #include <libm-alias-ldouble.h>
>>>> -#if IS_IN (libc)
>>>> +#if IS_IN (libc) && defined SHARED
>>>>  # undef libm_alias_ldouble
>>>>  # define libm_alias_ldouble(from, to)
>>>>  #endif
>>>>  #include <sysdeps/ieee754/ldbl-128/s_modfl.c>
>>>> -#if IS_IN (libc)
>>>> +#if IS_IN (libc) && defined SHARED
>>>>  long_double_symbol (libc, __modfl, modfl);
>>>
>>> Doesn't this remove modfl from static library?
>>
>> As for copysignf128 and frexp128, this symbol is also provided by libc.a.
>> Before this patch:
>>
>> alpha-linux-gnu$ readelf -sW libc.a | grep -w modf.*
>>     19: 0000000000000000   572 FUNC    WEAK   DEFAULT [STD GPLOAD]     1 modfl
>>     17: 0000000000000000   304 FUNC    WEAK   DEFAULT [STD GPLOAD]     1 modff32x
>>     18: 0000000000000000   304 FUNC    WEAK   DEFAULT [STD GPLOAD]     1 modff64
>>     19: 0000000000000000   304 FUNC    WEAK   DEFAULT [STD GPLOAD]     1 modf
>>     17: 0000000000000000   244 FUNC    WEAK   DEFAULT [STD GPLOAD]     1 modff32
>>     18: 0000000000000000   244 FUNC    WEAK   DEFAULT [STD GPLOAD]     1 modff
>>
>> After this patch:
>>
>> alpha-linux-gnu$ readelf -sW libc.a | grep -w modf.*
>>     19: 0000000000000000   572 FUNC    WEAK   DEFAULT [STD GPLOAD]     1 modff64x
>>     20: 0000000000000000   572 FUNC    WEAK   DEFAULT [STD GPLOAD]     1 modff128
>>     21: 0000000000000000   572 FUNC    WEAK   DEFAULT [STD GPLOAD]     1 modfl
>>     17: 0000000000000000   304 FUNC    WEAK   DEFAULT [STD GPLOAD]     1 modff32x
>>     18: 0000000000000000   304 FUNC    WEAK   DEFAULT [STD GPLOAD]     1 modff64
>>     19: 0000000000000000   304 FUNC    WEAK   DEFAULT [STD GPLOAD]     1 modf
>>     17: 0000000000000000   244 FUNC    WEAK   DEFAULT [STD GPLOAD]     1 modff32
>>     18: 0000000000000000   244 FUNC    WEAK   DEFAULT [STD GPLOAD]     1 modff
>>
>>
> 
> I am working on a patch to check missing symbols in static libraries.
>  I opened:
> 
> https://sourceware.org/bugzilla/show_bug.cgi?id=31781
> 
> scalbnf128 seems also missing in alpha libm.a.
> 

It seems so, the static tests I have added only cover for the auto-generated
function from the libm-test-funcs-auto, libm-test-funcs-noauto, and 
libm-test-funcs-narrow; and the are some function that are not covered by
these (scalbn for instance).
  

Patch

diff --git a/sysdeps/ieee754/ldbl-64-128/s_modfl.c b/sysdeps/ieee754/ldbl-64-128/s_modfl.c
index 7d7aeae111..ba3d31334a 100644
--- a/sysdeps/ieee754/ldbl-64-128/s_modfl.c
+++ b/sysdeps/ieee754/ldbl-64-128/s_modfl.c
@@ -1,10 +1,10 @@ 
 #include <math_ldbl_opt.h>
 #include <libm-alias-ldouble.h>
-#if IS_IN (libc)
+#if IS_IN (libc) && defined SHARED
 # undef libm_alias_ldouble
 # define libm_alias_ldouble(from, to)
 #endif
 #include <sysdeps/ieee754/ldbl-128/s_modfl.c>
-#if IS_IN (libc)
+#if IS_IN (libc) && defined SHARED
 long_double_symbol (libc, __modfl, modfl);
 #endif