POSIX timer can be configured to send any kind of signal, however, it
fundamentally does not make sense to consider a timer a synchronous
signal. Teach TSan that timers are never synchronous.
The tricky bit here is correctly defining compiler-rt's siginfo
replacement, which is a rather complex struct. Extend it in a limited
way that is mostly cross-platform compatible and add offset tests in
sanitizer_platform_limits_posix.cpp.
Should we also consider TRAP_PERF && !PERF_TYPE_BREAKPOINT as async?
I guess they can be sync as well, but maybe not in the tsan meaning (can also land inside of the tsan runtime). Esp with precise_ip>0 even these are not strictly speaking synchronous. However, with tsan signal delaying they will never land on the sampled instructions (e.g. memory accesses or calls). But delaying them is still better than corrupting memory.