Follow @Openwall on Twitter for new release announcements and other news
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20141123152129.GJ29621@brightrain.aerifal.cx>
Date: Sun, 23 Nov 2014 10:21:29 -0500
From: Rich Felker <dalias@...c.org>
To: musl@...ts.openwall.com
Subject: Re: [PATCH] Add stdatomic.h for clang>=3.1 and gcc>=4.1

On Sun, Nov 23, 2014 at 10:43:34AM +0100, Jens Gustedt wrote:
> Hello,
> 
> Am Sonntag, den 23.11.2014, 02:47 +0100 schrieb Joakim Sindholt:
> > GCC 4.9:
> > 
> > typedef _Atomic struct
> > {
> > #if __GCC_ATOMIC_TEST_AND_SET_TRUEVAL == 1
> >   _Bool __val;
> > #else
> >   unsigned char __val;
> > #endif
> > } atomic_flag;
> > 
> > Clang 3.6:
> > 
> > #ifdef __cplusplus
> > typedef _Atomic(bool)               atomic_bool;
> > #else
> > typedef _Atomic(_Bool)              atomic_bool;
> > #endif
> > 
> > typedef struct atomic_flag { atomic_bool _Value; } atomic_flag;
> 
> So they fucked it up and have incompatible declarations? Great.

The differences are minor, and are things that are generally
considered non-issues when linking code from two different
compilers/implementations of the language which share an ABI. The only
differences are the name of the member (__val vs _Value) and whether
its type is atomic-qualified. I agree there's room for different
interpretations, but my view is that when you're linking code produced
by different compilers that have agreed on an ABI, matching the
size/representation/layout is generally sufficient.

> For the discussion about the second case for the type, this is the
> question if there are archs that implement TAS operations with other
> values than 0 for "unset" and 1 for "set". There seem to be archs out
> there that implement TAS with other values, I vaguely remember having
> heard about some risk arch (??). Actually this also is the reason why
> the standard defines this type in such a weird manner, and why per the
> standard it needs a dedicated initialization macro, default
> initialization with 0 doesn't do in all cases.

These are not archs we can support with musl, so they wouldn't be
relevant. And they're not archs that could support POSIX without a
kernel stop-the-world approach for implementing CAS, or syscalls for
every synchronization action.

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.