On Tue, Nov 27, 2012 at 12:23 PM, Jakub Jelinek <ja...@redhat.com> wrote:
> On Tue, Nov 27, 2012 at 12:13:42PM +0400, Dmitry Vyukov wrote:
>> I've added 128-bit atomic ops:
>> http://llvm.org/viewvc/llvm-project?view=rev&revision=168683
>
> Thanks.
>>
>> Refactored atomic ops so that the atomic operation itself is done
>> under the mutex:
>> http://llvm.org/viewvc/llvm-project?view=rev&revision=168682
>
> This is IMHO very wrong.  It is fine if you hold some mutex over the atomic
> operation, but you do need to perform the operation atomicly, e.g. you can't
> rely that all atomic accesses to that memory location are performed from
> -fsanitize=thread compiled code (it could be from non-instrumented code
> from e.g. other libraries, could be from user written assembly, etc.).
> By not doing the operation atomicly, the other code might observe
> inconsistent state, or the tsan non-atomic code might be doing the wrong
> thing.  One thing is that the tsan analysis will be right, but another
> thing is that the program itself might misbehave.


Yes, you are right.
I think I've done them atomically initially because of things like
FUTEX_WAKE_OP. I will fix that.


>> And added atomic nand operation:
>> http://llvm.org/viewvc/llvm-project?view=rev&revision=168584
>
> Thanks.  Can you please also add the memory range read/write functions?
> That could be used both for builtins (e.g. if user writes
>   __builtin_memcpy (&a, &b, sizeof (a));
> in his code, no -fno-builtin or similar actually disables that), compiler
> generated builtins - e.g. structure copies
> struct large a, b;
>   ...
>   a = b;
> and also for accesses of sizes that aren't supported by the library
> (consider 32-byte or 64-byte vectors etc.).

Done:
http://llvm.org/viewvc/llvm-project?view=rev&revision=168692

Reply via email to