diff --git a/contrib/llvm-project/compiler-rt/lib/lsan/lsan_common.h b/contrib/llvm-project/compiler-rt/lib/lsan/lsan_common.h index 3434beede828..ad301b78ab46 100644 --- a/contrib/llvm-project/compiler-rt/lib/lsan/lsan_common.h +++ b/contrib/llvm-project/compiler-rt/lib/lsan/lsan_common.h @@ -40,7 +40,7 @@ #elif defined(__arm__) && \ SANITIZER_LINUX && !SANITIZER_ANDROID #define CAN_SANITIZE_LEAKS 1 -#elif SANITIZER_NETBSD || SANITIZER_FUCHSIA +#elif SANITIZER_NETBSD || SANITIZER_FREEBSD || SANITIZER_FUCHSIA #define CAN_SANITIZE_LEAKS 1 #else #define CAN_SANITIZE_LEAKS 0 diff --git a/contrib/llvm-project/compiler-rt/lib/lsan/lsan_common_linux.cpp b/contrib/llvm-project/compiler-rt/lib/lsan/lsan_common_linux.cpp index c97ef31593df..5688dafe8a15 100644 --- a/contrib/llvm-project/compiler-rt/lib/lsan/lsan_common_linux.cpp +++ b/contrib/llvm-project/compiler-rt/lib/lsan/lsan_common_linux.cpp @@ -15,7 +15,7 @@ #include "sanitizer_common/sanitizer_platform.h" #include "lsan_common.h" -#if CAN_SANITIZE_LEAKS && (SANITIZER_LINUX || SANITIZER_NETBSD) +#if CAN_SANITIZE_LEAKS && (SANITIZER_LINUX || SANITIZER_NETBSD || SANITIZER_FREEBSD) #include #include "sanitizer_common/sanitizer_common.h" @@ -80,7 +80,11 @@ static int ProcessGlobalRegionsCallback(struct dl_phdr_info *info, size_t size, void *data) { Frontier *frontier = reinterpret_cast(data); for (uptr j = 0; j < info->dlpi_phnum; j++) { +#if SANITIZER_FREEBSD + const __ElfN(Phdr) *phdr = &(info->dlpi_phdr[j]); +#else const ElfW(Phdr) *phdr = &(info->dlpi_phdr[j]); +#endif // We're looking for .data and .bss sections, which reside in writeable, // loadable segments. if (!(phdr->p_flags & PF_W) || (phdr->p_type != PT_LOAD) || @@ -137,7 +141,11 @@ static int LockStuffAndStopTheWorldCallback(struct dl_phdr_info *info, void LockStuffAndStopTheWorld(StopTheWorldCallback callback, CheckForLeaksParam *argument) { DoStopTheWorldParam param = {callback, argument}; +#if SANITIZER_FREEBSD + LockStuffAndStopTheWorldCallback(0, 0, ¶m); +#else dl_iterate_phdr(LockStuffAndStopTheWorldCallback, ¶m); +#endif } } // namespace __lsan diff --git a/lib/libclang_rt/asan/Makefile b/lib/libclang_rt/asan/Makefile index 647012e8649f..8f028f522ab8 100644 --- a/lib/libclang_rt/asan/Makefile +++ b/lib/libclang_rt/asan/Makefile @@ -30,6 +30,8 @@ SRCS+= asan/asan_suppressions.cpp SRCS+= asan/asan_thread.cpp SRCS+= interception/interception_linux.cpp SRCS+= interception/interception_type_test.cpp +SRCS+= lsan/lsan_common.cpp +SRCS+= lsan/lsan_common_linux.cpp SRCS+= sanitizer_common/sancov_flags.cpp SRCS+= sanitizer_common/sanitizer_allocator.cpp SRCS+= sanitizer_common/sanitizer_allocator_checks.cpp @@ -60,6 +62,7 @@ SRCS+= sanitizer_common/sanitizer_stackdepot.cpp SRCS+= sanitizer_common/sanitizer_stacktrace.cpp SRCS+= sanitizer_common/sanitizer_stacktrace_libcdep.cpp SRCS+= sanitizer_common/sanitizer_stacktrace_printer.cpp +SRCS+= sanitizer_common/sanitizer_stoptheworld_freebsd.cpp SRCS+= sanitizer_common/sanitizer_suppressions.cpp SRCS+= sanitizer_common/sanitizer_symbolizer.cpp SRCS+= sanitizer_common/sanitizer_symbolizer_libbacktrace.cpp diff --git a/lib/libclang_rt/asan_dynamic/Makefile b/lib/libclang_rt/asan_dynamic/Makefile index 434b1c3c3ed6..90de9496b518 100644 --- a/lib/libclang_rt/asan_dynamic/Makefile +++ b/lib/libclang_rt/asan_dynamic/Makefile @@ -33,6 +33,8 @@ SRCS+= asan/asan_suppressions.cpp SRCS+= asan/asan_thread.cpp SRCS+= interception/interception_linux.cpp SRCS+= interception/interception_type_test.cpp +SRCS+= lsan/lsan_common.cpp +SRCS+= lsan/lsan_common_linux.cpp SRCS+= sanitizer_common/sancov_flags.cpp SRCS+= sanitizer_common/sanitizer_allocator.cpp SRCS+= sanitizer_common/sanitizer_allocator_checks.cpp @@ -63,6 +65,7 @@ SRCS+= sanitizer_common/sanitizer_stackdepot.cpp SRCS+= sanitizer_common/sanitizer_stacktrace.cpp SRCS+= sanitizer_common/sanitizer_stacktrace_libcdep.cpp SRCS+= sanitizer_common/sanitizer_stacktrace_printer.cpp +SRCS+= sanitizer_common/sanitizer_stoptheworld_freebsd.cpp SRCS+= sanitizer_common/sanitizer_suppressions.cpp SRCS+= sanitizer_common/sanitizer_symbolizer.cpp SRCS+= sanitizer_common/sanitizer_symbolizer_libbacktrace.cpp