5

メモリサニタイザーが使用されているときにFD_ZERO、誤検知をクリアしたいと考えています。FD_SETクリアするのはやや簡単です。

#include <sanitizer/msan_interface.h>
...

__msan_unpoison(&readfds, sizeof(readfds));
__msan_unpoison(&writefds, sizeof(writefds));

ただし、メモリサニタイザーが使用されていることを検出する方法がわかりません。つまり-fsanitize=memory、コマンド ラインでいつ指定されたかを検出します。プリプロセッサは役に立っていないようです:

$ clang -dM -E -fsanitize=memory - </dev/null | egrep -i 'memory|sanitize|msan'
$

がいつ使用されているかを判断するにはどうすればよい-fsanitize=memoryですか?

4

1 に答える 1

2

Memory Sanitizer メーリング リストの Konstantin Serebryany によると、プリプロセッサ マクロはありません。__has_feature (memory_sanitizer)を使用する必要があります。

#if defined(__has_feature)
#  if __has_feature(memory_sanitizer)
#    define MEMORY_SANITIZER 1
#  endif
#endif
...

#ifdef MEMORY_SANITIZER
#  include <sanitizer/msan_interface.h>
#endif
...

#ifdef MEMORY_SANITIZER
__msan_unpoison(&readfds, sizeof(readfds));
__msan_unpoison(&writefds, sizeof(writefds));
#endif
...
于 2016-02-27T18:10:06.133 に答える