Follow @Openwall on Twitter for new release announcements and other news
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20230503193325.GZ4163@brightrain.aerifal.cx>
Date: Wed, 3 May 2023 15:33:26 -0400
From: Rich Felker <dalias@...c.org>
To: Jₑₙₛ Gustedt <jens.gustedt@...ia.fr>
Cc: musl@...ts.openwall.com
Subject: Re: patches for C23

On Wed, May 03, 2023 at 08:46:56PM +0200, Jₑₙₛ Gustedt wrote:
> Rich,
> 
> on Wed, 3 May 2023 13:28:02 -0400 you (Rich Felker <dalias@...c.org>)
> wrote:
> 
> > On Wed, May 03, 2023 at 05:11:11PM +0200, Jₑₙₛ Gustedt wrote:
> > > Rich,
> > > 
> > > on Wed, 3 May 2023 10:16:19 -0400 you (Rich Felker
> > > <dalias@...c.org>) wrote:
> > >   
> > > > On Wed, May 03, 2023 at 11:12:46AM +0200, Jₑₙₛ Gustedt wrote:  
> >  [...]  
> >  [...]  
> > > > 
> > > > Yes. We don't require a compiler that has an __int128.  
> > > 
> > > sure, but all the uses are protected by `__SIZEOF_INT128__`. So if
> > > the compiler don't has this, they will not see that code when
> > > compiling musl.  
> > 
> > Again, there are not multiple versions of musl with different features
> > depending on which compiler was used to compile them. There is one
> > unified feature set. There are not configure-time or compile-time
> > decisions about which features to support.
> 
> This sounds a bit dogmatic

Yes, it's one of the core principles of musl: that we don't have
build-time-selectable feature-set like uclibc did.

> and also unrealistic. As said the dependency
> on compiler builtins undermines that approach. Future versions of gcc
> and clang will soon support `va_start` with only one parameter for
> example. Musl will just be dependent on that compiler feature.

No it won't. None of the code in musl calls or needs to call va_start
with one parameter. You're confusing header-level stuff that a c23
application might depend on, with build dependencies of libc.

> How will you do with optional features, then? For example decimal
> floating point? This will never be added to musl? (Nobody will
> probably backport support for them to very old gcc versions, for
> example, or even to more recent versions of clang)

Decimal float math library will likely be left to a third-party
library implementation.

Decimal float in printf, if that becomes a thing, will be done the
same way as int128: stub to pop the arguments, and 100% integer code
to actually work with the data.

> > > Also application side compilation with a different compiler that has
> > > no `__int128` would not see these interfaces, so such application
> > > code can never call into the library with `__int128` types.  
> > 
> > The compiler used to compile musl and the compiler used to compile the
> > application using musl have nothing to do with each other except
> > sharing a baseline ABI target.
> 
> Yes, exactly. And one supporting `__int128` and the other that doesn't
> basically wouldn't interfere.

The premise here is that applications and libc are being built by
possibly different people with different tools. If I have a system
built with gcc 5.3, I can't build C23 applications, but I might get a
dynamically-linked C23 binary from someone who can. That binary needs
to run with my musl-1.2.7 (made-up number) libc.so because the C
language version the binary was generated from (or whether it was even
C at all) is irrelevant. The interface surface is just the musl ABI
surface.

> For the support of `__int128`: gcc has this since ages on 64 bit
> archs, is there any such arch out there where this support is changing
> according to versions of gcc that are still in use? So if we make the

We also support pcc, cparser+libfirm, etc. on archs they support. Not
just gcc. And gcc back to 3.x.

> availability of `__int128` dependent on `UINTPTR_WIDTH` being 64,
> would that be acceptable for you? Or an even more dependent approach
> with special casing architectures where this is available since
> always?

It's not really "special casing archs where this is available since
always". It's more like the other way around, "not special casing
archs where __int128 is a guaranteed part of the baseline psABI". For
those we can just let the default C implementation be used. For the
rest we need a (completely trivial) asm stub that pops the arg
according to the variadic argument ABI for the arch. This really isn't
that big a deal. It's a few instructions at most.

Rich

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.