svn commit: r288121 - projects/clang370-import/contrib/libc++/src/support
Warner Losh
imp at bsdimp.com
Tue Sep 22 19:25:26 UTC 2015
> On Sep 22, 2015, at 12:48 PM, Dimitry Andric <dim at FreeBSD.org> wrote:
>
> On 22 Sep 2015, at 20:37, Warner Losh <imp at bsdimp.com> wrote:
>>
>>> On Sep 22, 2015, at 11:34 AM, Dimitry Andric <dim at freebsd.org> wrote:
>>> NOTE: this needs to be fixed properly later on, by supplying library
>>> functions implementing atomic operations for arm < v6. We should
>>> probably take those from sys/arm/arm/stdatomic.c, and stuff them into
>>> either libgcc or compiler-rt.
>>
>> I don’t think you can do that.
>>
>> arm < v6 is special. The CPUs don’t have atomic operations. In the kernel,
>> we disable interrupts and do the op. You can’t do that in user land. Instead,
>> you have to use RAS (Restartable Atomic Sequences) and have the kernel
>> grok the RAS. Thankfully, the RAS support in the kernel is just the R in that.
>> But it does mean that we’ll have some work to do this properly.
>>
>> I’m not entirely sure that your ‘fix’ makes things actually safe, even if it
>> seems to make them work today. I’ll have to study it more closely.
>
> Probably not 100% safe, since the stub functions are just placeholders
> which aren't atomic at all. Then again, if we insist on this being
> correct, we will have no choice as to disable the atomic support in
> libc++ somehow. (I'm not sure if this is supported by upstream at all.)
>
> As far as I understood on IRC, the functions in stdatomic.c should work
> in userland, unless you are using real SMP? (And does that even exist
> for such old ARM architectures?)
I think you misunderstand. We can switch threads at any point on armv4 based
on an interrupt coming in. For load and store, this won’t matter. But for everything
else, it won’t work. You don’t need SMP to trigger a race in user land atomics.
We already have most of the bits in arm/include/atomic.h, but they are for
FreeBSD atomic interface not the others. I haven’t pulled the 3.7 tree
to see what’s up there since these files don’t seem to be present in head.
Warner
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 842 bytes
Desc: Message signed with OpenPGP using GPGMail
URL: <http://lists.freebsd.org/pipermail/svn-src-projects/attachments/20150922/b40e3d26/attachment.bin>
More information about the svn-src-projects
mailing list