Tested on: $ uname -rms NetBSD 8.99.4 amd64
The NetBSD support has been developed directly in the compiler-rt upstream source. Testing against the LLVM+Clang+compiler-rt (2017-10-25 snapshot from HEAD): $ make check-asan Failing Tests (2): AddressSanitizer-Unit :: ./Asan-x86_64-calls-Test/AddressSanitizerInterface.ManyThreadsWithStatsStressTest AddressSanitizer-Unit :: ./Asan-x86_64-inline-Test/AddressSanitizerInterface.ManyThreadsWithStatsStressTest Expected Passes : 436 Unsupported Tests : 822 Unexpected Failures: 2 $ make check-asan-dynamic Failing Tests (2): AddressSanitizer-Unit :: ./Asan-x86_64-calls-Dynamic-Test/AddressSanitizerInterface.ManyThreadsWithStatsStressTest AddressSanitizer-Unit :: ./Asan-x86_64-inline-Dynamic-Test/AddressSanitizerInterface.ManyThreadsWithStatsStressTest Expected Passes : 372 Unsupported Tests : 822 Unexpected Failures: 2 $ make check-ubsan Failing Tests (44): UBSan-ASan-i386 :: TestCases/TypeCheck/vptr-non-unique-typeinfo.cpp UBSan-ASan-x86_64 :: TestCases/TypeCheck/vptr-non-unique-typeinfo.cpp UBSan-MSan-x86_64 :: TestCases/Float/cast-overflow.cpp UBSan-MSan-x86_64 :: TestCases/Integer/add-overflow.cpp UBSan-MSan-x86_64 :: TestCases/Integer/div-overflow.cpp UBSan-MSan-x86_64 :: TestCases/Integer/div-zero.cpp UBSan-MSan-x86_64 :: TestCases/Integer/incdec-overflow.cpp UBSan-MSan-x86_64 :: TestCases/Integer/mul-overflow.cpp UBSan-MSan-x86_64 :: TestCases/Integer/negate-overflow.cpp UBSan-MSan-x86_64 :: TestCases/Integer/no-recover.cpp UBSan-MSan-x86_64 :: TestCases/Integer/shift.cpp UBSan-MSan-x86_64 :: TestCases/Integer/sub-overflow.cpp UBSan-MSan-x86_64 :: TestCases/Integer/suppressions.cpp UBSan-MSan-x86_64 :: TestCases/Integer/uadd-overflow.cpp UBSan-MSan-x86_64 :: TestCases/Integer/uincdec-overflow.cpp UBSan-MSan-x86_64 :: TestCases/Integer/umul-overflow.cpp UBSan-MSan-x86_64 :: TestCases/Integer/usub-overflow.cpp UBSan-MSan-x86_64 :: TestCases/Misc/bool.cpp UBSan-MSan-x86_64 :: TestCases/Misc/bounds.cpp UBSan-MSan-x86_64 :: TestCases/Misc/builtins.cpp UBSan-MSan-x86_64 :: TestCases/Misc/coverage-levels.cc UBSan-MSan-x86_64 :: TestCases/Misc/deduplication.cpp UBSan-MSan-x86_64 :: TestCases/Misc/enum.cpp UBSan-MSan-x86_64 :: TestCases/Misc/log-path_test.cc UBSan-MSan-x86_64 :: TestCases/Misc/missing_return.cpp UBSan-MSan-x86_64 :: TestCases/Misc/nonnull-arg.cpp UBSan-MSan-x86_64 :: TestCases/Misc/nonnull.cpp UBSan-MSan-x86_64 :: TestCases/Misc/nullability.c UBSan-MSan-x86_64 :: TestCases/Misc/unreachable.cpp UBSan-MSan-x86_64 :: TestCases/Misc/vla.c UBSan-MSan-x86_64 :: TestCases/Pointer/index-overflow.cpp UBSan-MSan-x86_64 :: TestCases/Pointer/unsigned-index-expression.cpp UBSan-MSan-x86_64 :: TestCases/TypeCheck/Function/function.cpp UBSan-MSan-x86_64 :: TestCases/TypeCheck/PR33221.cpp UBSan-MSan-x86_64 :: TestCases/TypeCheck/misaligned.cpp UBSan-MSan-x86_64 :: TestCases/TypeCheck/null.cpp UBSan-MSan-x86_64 :: TestCases/TypeCheck/vptr-corrupted-vtable-itanium.cpp UBSan-MSan-x86_64 :: TestCases/TypeCheck/vptr-non-unique-typeinfo.cpp UBSan-MSan-x86_64 :: TestCases/TypeCheck/vptr-virtual-base-construction.cpp UBSan-MSan-x86_64 :: TestCases/TypeCheck/vptr-virtual-base.cpp UBSan-MSan-x86_64 :: TestCases/TypeCheck/vptr.cpp UBSan-Standalone-i386 :: TestCases/TypeCheck/vptr-non-unique-typeinfo.cpp UBSan-Standalone-x86_64 :: TestCases/TypeCheck/vptr-non-unique-typeinfo.cpp UBSan-TSan-x86_64 :: TestCases/TypeCheck/vptr-non-unique-typeinfo.cpp Expected Passes : 187 Expected Failures : 1 Unsupported Tests : 26 Unexpected Failures: 44 UBsan tests contain ASan, TSan and MSan tests; perhaps more of them. TSan/NetBSD is work-in-progress. MSan/NetBSD is in early development on NetBSD. vptr-non-unique-typeinfo.cpp failures are caused by environment issue in the test-suite, as the NetBSD loader does not support reliably $ORIGIN. The GCC patch has been tested in the context of pkgsrc in pkgsrc-wip/gcc8snapshot (upstream snapshot 20171022). $ uname -rms NetBSD 8.99.4 amd64 $ cat u.c int main(int argc, char **argv) { int k = 0x7fffffff; k += argc; return 0; } $ /usr/pkg/gcc8snapshot/bin/gcc -fsanitize=undefined u.c -o u $ ./u u.c:3:5: runtime error: signed integer overflow: 2147483647 + 1 cannot be represented in type 'int' chieftec$ cat a.c int main(int argc, char **argv) { char a[10]; argv[argc + 10] = 0; return 0; } $ /usr/pkg/gcc8snapshot/bin/gcc -fsanitize=address a.c -o a $ ./a AddressSanitizer:DEADLYSIGNAL ================================================================= ==20441==ERROR: AddressSanitizer: SEGV on unknown address 0x0ff07fff7cf0 (pc 0x000000400a8f bp 0x7f7fffffe7f0 sp 0x7f7fffffe770 T0) ==20441==The signal is caused by a WRITE memory access. #0 0x400a8e in main (/tmp/a+0x400a8e) #1 0x40090a in ___start (/tmp/a+0x40090a) AddressSanitizer can not provide additional info. SUMMARY: AddressSanitizer: SEGV (/tmp/a+0x400a8e) in main ==20441==ABORTING There is lack of additional info in asan when used with .so. This bug is not a show-stopper because a user still can get backtrace under debugger in the point of detected failure. This bug will be fixed in upstream LLVM sources and merged back to GCC in future merges from LLVM. 2017-10-26 Kamil Rytarowski <n...@gmx.com> * sanitizer_common/Makefile.am (sanitizer_common_files): Add sanitizer_platform_limits_netbsd.cc. * sanitizer_common/Makefile.in: Regenerated. * configure.tgt: Enable asan and ubsan on x86_64-*-netbsd*. --- libsanitizer/ChangeLog | 7 +++++++ libsanitizer/configure.tgt | 4 ++++ libsanitizer/sanitizer_common/Makefile.am | 2 +- libsanitizer/sanitizer_common/Makefile.in | 5 ++++- 4 files changed, 16 insertions(+), 2 deletions(-) diff --git a/libsanitizer/ChangeLog b/libsanitizer/ChangeLog index 63e71317cbf..097230ac5cf 100644 --- a/libsanitizer/ChangeLog +++ b/libsanitizer/ChangeLog @@ -1,3 +1,10 @@ +2017-10-26 Kamil Rytarowski <n...@gmx.com> + + * sanitizer_common/Makefile.am (sanitizer_common_files): Add + sanitizer_platform_limits_netbsd.cc. + * sanitizer_common/Makefile.in: Regenerated. + * configure.tgt: Enable asan and ubsan on x86_64-*-netbsd*. + 2017-10-20 Jakub Jelinek <ja...@redhat.com> PR sanitizer/82595 diff --git a/libsanitizer/configure.tgt b/libsanitizer/configure.tgt index 573e3b482e9..4c1f8e0bb27 100644 --- a/libsanitizer/configure.tgt +++ b/libsanitizer/configure.tgt @@ -55,6 +55,10 @@ case "${target}" in x86_64-*-darwin[1]* | i?86-*-darwin[1]*) TSAN_SUPPORTED=no ;; + x86_64-*-netbsd*) + TSAN_SUPPORTED=no + LSAN_SUPPORTED=no + ;; *) UNSUPPORTED=1 ;; diff --git a/libsanitizer/sanitizer_common/Makefile.am b/libsanitizer/sanitizer_common/Makefile.am index adaab4cee54..70563eded36 100644 --- a/libsanitizer/sanitizer_common/Makefile.am +++ b/libsanitizer/sanitizer_common/Makefile.am @@ -41,6 +41,7 @@ sanitizer_common_files = \ sanitizer_persistent_allocator.cc \ sanitizer_platform_limits_linux.cc \ sanitizer_platform_limits_posix.cc \ + sanitizer_platform_limits_netbsd.cc \ sanitizer_posix.cc \ sanitizer_posix_libcdep.cc \ sanitizer_printf.cc \ @@ -114,4 +115,3 @@ AM_MAKEFLAGS = \ MAKEOVERRIDES= ## ################################################################ - diff --git a/libsanitizer/sanitizer_common/Makefile.in b/libsanitizer/sanitizer_common/Makefile.in index b2acc5caf56..f05c181f0b1 100644 --- a/libsanitizer/sanitizer_common/Makefile.in +++ b/libsanitizer/sanitizer_common/Makefile.in @@ -91,7 +91,8 @@ am__objects_1 = sancov_flags.lo sanitizer_allocator.lo \ sanitizer_mac.lo sanitizer_mac_libcdep.lo \ sanitizer_persistent_allocator.lo \ sanitizer_platform_limits_linux.lo \ - sanitizer_platform_limits_posix.lo sanitizer_posix.lo \ + sanitizer_platform_limits_posix.lo \ + sanitizer_platform_limits_netbsd.lo sanitizer_posix.lo \ sanitizer_posix_libcdep.lo sanitizer_printf.lo \ sanitizer_procmaps_common.lo sanitizer_procmaps_freebsd.lo \ sanitizer_procmaps_linux.lo sanitizer_procmaps_mac.lo \ @@ -323,6 +324,7 @@ sanitizer_common_files = \ sanitizer_persistent_allocator.cc \ sanitizer_platform_limits_linux.cc \ sanitizer_platform_limits_posix.cc \ + sanitizer_platform_limits_netbsd.cc \ sanitizer_posix.cc \ sanitizer_posix_libcdep.cc \ sanitizer_printf.cc \ @@ -468,6 +470,7 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sanitizer_mac_libcdep.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sanitizer_persistent_allocator.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sanitizer_platform_limits_linux.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sanitizer_platform_limits_netbsd.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sanitizer_platform_limits_posix.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sanitizer_posix.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sanitizer_posix_libcdep.Plo@am__quote@ -- 2.14.2