[LLVMdev] Unifying TSan blacklist and no_sanitize_thread

Evgeniy Stepanov eugeni.stepanov at gmail.com
Fri May 30 01:53:29 PDT 2014


On Fri, May 30, 2014 at 12:41 AM, Alexey Samsonov <vonosmas at gmail.com> wrote:
> Hi,
>
> I consider reducing the usage of blacklist in sanitizer instrumentation
> passes and doing the necessary work in frontend (Clang) instead.
>
> Some of it is already implemented: e.g. Clang will attach an attribute
> "sanitize_address" to function definition only if this function is not
> blacklisted. In this case we won't instrument the memory accesses in this
> function in ASan instrumentation pass, so there's no need to looking at
> blacklist once again.
>
> TSan pass does the following:
>
> 1) instruments plain memory accesses
> 2) instruments atomic accesses
> 3) instruments memory intrinsics calls.
> 4) adds function entry/exit callbacks.
>
> If a function doesn't have sanitize_thread attribute (e.g. it was annotated
> with __attribute__((no_sanitize_thread)) ), then it still does (2), (3) and
> (4). If a function is blacklisted,
> TSan pass does nothing. Shouldn't the behavior be the same? I think, we must
> always do (4) to get
> good stack traces, and probably do (2) (we may report races on atomics in
> this case, but otherwise
> we may miss synchronization). Thoughts?

I don't think we should do (2).

Sounds like your plan would let us drop blacklist from *SanitizerPass
arguments, right? That's great.


>
> --
> Alexey Samsonov
> vonosmas at gmail.com



More information about the llvm-dev mailing list