• Marko Mäkelä's avatar
    MDEV-20377: Make WITH_MSAN more usable · 94d0bb4d
    Marko Mäkelä authored
    MemorySanitizer (clang -fsanitize=memory) requires that all code
    be compiled with instrumentation enabled. The C runtime library
    is an exception. Failure to use instrumented libraries will cause
    bogus messages about memory being uninitialized.
    
    In WITH_MSAN builds, we must avoid calling getservbyname(),
    because even though it is a standard library function, it is
    not instrumented, not even in clang 10.
    
    The following cmake options were tested:
    
    -DCMAKE_C_FLAGS='-march=native -O2'
    -DCMAKE_CXX_FLAGS='-stdlib=libc++ -march=native -O2'
    -DWITH_EMBEDDED_SERVER=OFF -DWITH_UNIT_TESTS=OFF -DCMAKE_BUILD_TYPE=Debug
    -DWITH_INNODB_{BZIP2,LZ4,LZMA,LZO,SNAPPY}=OFF
    -DPLUGIN_{ARCHIVE,TOKUDB,MROONGA,OQGRAPH,ROCKSDB,CONNECT,SPIDER}=NO
    -DWITH_SAFEMALLOC=OFF
    -DWITH_{ZLIB,SSL,PCRE}=bundled
    -DHAVE_LIBAIO_H=0
    -DWITH_MSAN=ON
    
    MEM_MAKE_DEFINED(): An alias for VALGRIND_MAKE_MEM_DEFINED()
    and in the future, __msan_unpoison().
    
    For now, neither MEM_MAKE_DEFINED() nor MEM_UNDEFINED()
    perform any action under MSAN. Enabling them will catch more bugs, but
    will also require some more fixes or work-arounds.
    
    Json_writer::add_double(): Work around a frequently occurring
    failure in optimizer tests, related to EXPLAIN FORMAT=JSON.
    
    dtoa(): Disable MSAN altogether. For some reason, this function
    is triggering a lot of trouble, especially when invoked for
    DBUG functions. The MDL default timeout is dd=86400 seconds,
    and for some reason it is claimed to be uninitialized.
    
    InnoDB: Define UNIV_DEBUG_VALGRIND also WITH_MSAN.
    
    ut_crc32_8_hw(), ut_crc32_64_low_hw(): Use the compiler built-in
    functions instead of inline assembler when building WITH_MSAN.
    This will require at least -msse4.2 when building for IA-32 or AMD64.
    The inline assembler would not be instrumented, and would thus cause
    bogus failures.
    94d0bb4d
my_json_writer.cc 8.64 KB