|
|
Message-ID: <e748d6c5-d063-f312-72e8-924d71fbf1aa@sholland.org>
Date: Sun, 30 Jun 2019 19:59:28 -0500
From: Samuel Holland <samuel@...lland.org>
To: musl@...ts.openwall.com
Subject: Re: [GCC PATCH] powerpc64 musl libc support for IEEE binary128
long double
On 6/30/19 5:29 PM, Szabolcs Nagy wrote:
> * Samuel Holland <samuel@...lland.org> [2019-06-30 14:38:25 -0500]:
>> gcc/config/rs6000/linux.h | 3 ++-
>> gcc/config/rs6000/linux64.h | 11 +++++++++--
>> 2 files changed, 11 insertions(+), 3 deletions(-)
>>
>> diff --git a/gcc/config/rs6000/linux.h b/gcc/config/rs6000/linux.h
>> index 96b97877989b..439b5179b172 100644
>> --- a/gcc/config/rs6000/linux.h
>> +++ b/gcc/config/rs6000/linux.h
>> @@ -139,8 +139,9 @@
>> #define POWERPC_LINUX
>>
>> /* ppc linux has 128-bit long double support in glibc 2.4 and later. */
>> +/* musl supports 128-bit long double in 1.1.23 and later on powerpc64 only. */
>> #ifdef TARGET_DEFAULT_LONG_DOUBLE_128
>> -#define RS6000_DEFAULT_LONG_DOUBLE_SIZE 128
>> +#define RS6000_DEFAULT_LONG_DOUBLE_SIZE (OPTION_MUSL ? 64 : 128)
>
> configuring 32bit ppc with 128bit long double is unsupported in musl
>
> i think reporting an error in config.gcc is better than trying to fix
> it up later.
I don't think that's possible, but I'm happy to be proven wrong. gcc accepts a
single gcc_cv_target_ldbl128, which is applied everywhere with
multilib/multiarch/--enable-targets=all. So even if --with-long-double-128 was
made an error for powerpc-linux-musl, the logic still has to work for
powerpc64-linux-musl, where it can't be an error.
> OPTION_MUSL can handle -mmusl cflag, not just the configured libc, but
> i think that's unreliable for other reasons anyway.
That also has to work: --target=powerpc-linux-gnu --with-long-double-128, and
then powerpc-linux-gnu-gcc -mmusl, will do the wrong thing unless it's fixed up
at runtime.
>> --- a/gcc/config/rs6000/linux64.h
>> +++ b/gcc/config/rs6000/linux64.h
>> @@ -447,12 +447,18 @@ extern int dot_symbols;
>> ":%(dynamic_linker_prefix)/lib64/ld64.so.1}"
>> #endif
>>
>> +#ifdef TARGET_DEFAULT_LONG_DOUBLE_128
>> +#define MUSL_DYNAMIC_LINKER_FP "%{mlong-double-64:;:-ieee128}"
>> +#else
>> +#define MUSL_DYNAMIC_LINKER_FP "%{mlong-double-128:-ieee128}"
>> +#endif
>> +
>> #undef MUSL_DYNAMIC_LINKER32
>> #define MUSL_DYNAMIC_LINKER32 \
>> "/lib/ld-musl-powerpc" MUSL_DYNAMIC_LINKER_E "%{msoft-float:-sf}.so.1"
>> #undef MUSL_DYNAMIC_LINKER64
>> #define MUSL_DYNAMIC_LINKER64 \
>> - "/lib/ld-musl-powerpc64" MUSL_DYNAMIC_LINKER_E "%{msoft-float:-sf}.so.1"
>> + "/lib/ld-musl-powerpc64" MUSL_DYNAMIC_LINKER_E MUSL_DYNAMIC_LINKER_FP ".so.1"
>
> why did the -sf disappear?
> only do this if we are sure we never want to support such abi in musl
Because powerpc64 sf support doesn't exist on the musl side. I'll put it back.
> otherwise keep it with some easy to remember ordering for the extension
> suffixes (e.g. alphabetical)
Should there be a dash between "ieee128" and "sf"?
>> /* ppc{32,64} linux has 128-bit long double support in glibc 2.4 and later. */
>> +/* musl supports 128-bit long double in 1.1.23 and later on powerpc64 only. */
>> #ifdef TARGET_DEFAULT_LONG_DOUBLE_128
>> -#define RS6000_DEFAULT_LONG_DOUBLE_SIZE 128
>> +#define RS6000_DEFAULT_LONG_DOUBLE_SIZE (OPTION_MUSL && !TARGET_64BIT ? 64 : 128)
>> #endif
>
> same as above, this looks ugly.
Same as above, I don't think it's avoidable.
Cheers,
Samuel
Powered by blists - more mailing lists
Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.