c++gccaddress-sanitizerthread-sanitizer

Is it possible to combine AddressSanitizer and ThreadSanitizer into one build?


Or do I have to use separate builds? The -fsanitize flag only allows for either address or thread but are multiple allowed?

Regards


Solution

  • No, it's not possible to combine AddressSanitizer and ThreadSanitizer into one build (but other combinations are possible). You need multiple builds

    -fsanitize=address

    Enable AddressSanitizer, a fast memory error detector. Memory access instructions are instrumented to detect out-of-bounds and use-after-free bugs. The option enables -fsanitize-address-use-after-scope. See https://github.com/google/sanitizers/wiki/AddressSanitizer for more details. The run-time behavior can be influenced using the ASAN_OPTIONS environment variable. When set to help=1, the available options are shown at startup of the instrumented program. See https://github.com/google/sanitizers/wiki/AddressSanitizerFlags#run-time-flags for a list of supported options. The option cannot be combined with -fsanitize=thread or -fsanitize=hwaddress. Note that the only target -fsanitize=hwaddress is currently supported on is AArch64.

    -fsanitize=thread

    Enable ThreadSanitizer, a fast data race detector. Memory access instructions are instrumented to detect data race bugs. See https://github.com/google/sanitizers/wiki#threadsanitizer for more details. The run-time behavior can be influenced using the TSAN_OPTIONS environment variable; see https://github.com/google/sanitizers/wiki/ThreadSanitizerFlags for a list of supported options. The option cannot be combined with -fsanitize=address, -fsanitize=leak.

    Note that sanitized atomic builtins cannot throw exceptions when operating on invalid memory addresses with non-call exceptions (-fnon-call-exceptions).

    https://gcc.gnu.org/onlinedocs/gcc/Instrumentation-Options.html