|
|
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.