aboutsummaryrefslogtreecommitdiff
path: root/compiler-rt
AgeCommit message (Collapse)AuthorFilesLines
2021-03-08[CMake][compiler-rt] Use copying instead of symlinking for LSE builtins on ↵llvmorg-12.0.0-rc3Raul Tambre1-1/+7
non-Unix-likes As reported in D93278 post-review symlinking requires privilege escalation on Windows. Copying is functionally same, so fallback to it for systems that aren't Unix-like. This is similar to the solution in AddLLVM.cmake. Reviewed By: ikudrin Differential Revision: https://reviews.llvm.org/D98111 (cherry picked from commit ba860963b156db3b653c67ef044df877f3cea9cc)
2021-01-29[sanitizer] Fix msan test build on FreeBSD after 7afdc89c2054Dimitry Andric2-1/+3
This commit accidentally enabled fgetgrent_r() in the msan tests under FreeBSD, but this function is not supported. Also remove FreeBSD from the SANITIZER_INTERCEPT_FGETGRENT_R macro. (cherry picked from commit e056fc6cb676f72d5b7dfe7ca540b3275bd1a46f)
2021-01-25[scudo][standalone] Enable death tests on FuchsiaKostya Kortchinsky2-5/+9
zxtest doesn't have `EXPECT_DEATH` and the Scudo unit-tests were defining it as a no-op. This enables death tests on Fuchsia by using `ASSERT_DEATH` instead. I used a lambda to wrap the expressions as this appears to not be working the same way as `EXPECT_DEATH`. Additionnally, a death test using `alarm` was failing with the change, as it's currently not implemented in Fuchsia, so move that test within a `!SCUDO_FUCHSIA` block. Differential Revision: https://reviews.llvm.org/D94362
2021-01-23[ASan] Fix broken Windows build due to 596d534ac3524052df210be8d3c01a33b2260a42.Dan Liew1-1/+1
In that change I forgot to update the call to `AsanThread::ThreadStart()` in `asan_win.cpp`.
2021-01-22[ASan] Stop blocking child thread progress from parent thread in ↵Dan Liew4-42/+42
`pthread_create` interceptor. Previously in ASan's `pthread_create` interceptor we would block in the `pthread_create` interceptor waiting for the child thread to start. Unfortunately this has bad performance characteristics because the OS scheduler doesn't know the relationship between the parent and child thread (i.e. the parent thread cannot make progress until the child thread makes progress) and may make the wrong scheduling decision which stalls progress. It turns out that ASan didn't use to block in this interceptor but was changed to do so to try to address http://llvm.org/bugs/show_bug.cgi?id=21621/. In that bug the problem being addressed was a LeakSanitizer false positive. That bug concerns a heap object being passed as `arg` to `pthread_create`. If: * The calling thread loses a live reference to the object (e.g. `pthread_create` finishes and the thread no longer has a live reference to the object). * Leak checking is triggered. * The child thread has not yet started (once it starts it will have a live reference). then the heap object will incorrectly appear to be leaked. This bug is covered by the `lsan/TestCases/leak_check_before_thread_started.cpp` test case. In b029c5101fb49b3577a1c322f42ef9fc616f25bf ASan was changed to block in `pthread_create()` until the child thread starts so that `arg` is kept alive for the purposes of leaking check. While this change "works" its problematic due to the performance problems it causes. The change is also completely unnecessary if leak checking is disabled (via detect_leaks runtime option or CAN_SANITIZE_LEAKS compile time config). This patch does two things: 1. Takes a different approach to solving the leak false positive by making LSan's leak checking mechanism treat the `arg` pointer of created but not started threads as reachable. This is done by implementing the `ForEachRegisteredThreadContextCb` callback for ASan. 2. Removes the blocking behaviour in the ASan `pthread_create` interceptor. rdar://problem/63537240 Differential Revision: https://reviews.llvm.org/D95184
2021-01-22[LSan] Introduce a callback mechanism to allow adding data reachable from ↵Dan Liew4-0/+46
ThreadContexts to the frontier. This mechanism is intended to provide a way to treat the `arg` pointer of a created (but not yet started) thread as reachable. In future patches this will be implemented in `GetAdditionalThreadContextPtrs`. A separate implementation of `GetAdditionalThreadContextPtrs` exists for ASan and LSan runtimes because they need to be implemented differently in future patches. rdar://problem/63537240 Differential Revision: https://reviews.llvm.org/D95183
2021-01-21[MSan] Move origins for overlapped memory transferJianzhou Zhao2-2/+134
Reviewed-by: eugenis Differential Revision: https://reviews.llvm.org/D94572
2021-01-19[CMake] Remove dead code setting policies to NEWRaul Tambre1-4/+0
cmake_minimum_required(VERSION) calls cmake_policy(VERSION), which sets all policies up to VERSION to NEW. LLVM started requiring CMake 3.13 last year, so we can remove a bunch of code setting policies prior to 3.13 to NEW as it no longer has any effect. Reviewed By: phosek, #libunwind, #libc, #libc_abi, ldionne Differential Revision: https://reviews.llvm.org/D94374
2021-01-15hwasan: Update register-dump-read.c test to reserve x23 instead of x20.Peter Collingbourne1-6/+6
D90422 changed this test to write a fixed value into register x23 instead of x20, but it did not update the list of reserved registers. This meant that x23 may have been live across the register write, although this happens to not be the case with the current compiler. Fix the problem by updating the reserved register list.
2021-01-15[GWP-ASan] Add inbuilt options parser.Mitch Phillips15-105/+334
Adds a modified options parser (shamefully pulled from Scudo, which shamefully pulled it from sanitizer-common) to GWP-ASan. This allows customers (Android) to parse options strings in a common way. Depends on D94117. AOSP side of these patches is staged at: - sepolicy (sysprops should only be settable by the shell, in both root and unrooted conditions): https://android-review.googlesource.com/c/platform/system/sepolicy/+/1517238 - zygote updates: https://android-review.googlesource.com/c/platform/frameworks/base/+/1515009 - bionic changes to add `gwp_asan.<process_name>` system property, and GWP_ASAN_OPTIONS environment variable: https://android-review.googlesource.com/c/platform/bionic/+/1514989 Reviewed By: eugenis Differential Revision: https://reviews.llvm.org/D92696
2021-01-15GetMacosAlignedVersion() fails if sysctl is not setupJulian Lettner1-13/+32
`GetMacosAlignedVersion()` fails for ASan-ified launchd because the sanitizer initialization code runs before `sysctl` has been setup by launchd. In this situation, `sysctl kern.osproductversion` returns a non-empty string that does not match our expectations of a well-formatted version string. Retrieving the kernel version (via `sysctl kern.osrelease`) still works, so we can use it to add a fallback for this corner case. Differential Revision: https://reviews.llvm.org/D94190
2021-01-14[GWP-ASan] Minor refactor of optional components.Mitch Phillips13-216/+210
In preparation for the inbuilt options parser, this is a minor refactor of optional components including: - Putting certain optional elements in the right header files, according to their function and their dependencies. - Cleaning up some old and mostly-dead code. - Moving some functions into anonymous namespaces to prevent symbol export. Reviewed By: cryptoad, eugenis Differential Revision: https://reviews.llvm.org/D94117
2021-01-13Revert "Hwasan InitPrctl check for error using internal_iserror"Nico Weber1-6/+4
This reverts commit 1854594b80b444dc21b830b51e53e05d38fc7d60. See https://reviews.llvm.org/D94425#2495621
2021-01-13Hwasan InitPrctl check for error using internal_iserrorMatthew Malcomson1-4/+6
When adding this function in https://reviews.llvm.org/D68794 I did not notice that internal_prctl has the API of the syscall to prctl rather than the API of the glibc (posix) wrapper. This means that the error return value is not necessarily -1 and that errno is not set by the call. For InitPrctl this means that the checks do not catch running on a kernel *without* the required ABI (not caught since I only tested this function correctly enables the ABI when it exists). This commit updates the two calls which check for an error condition to use `internal_iserror`. That function sets a provided integer to an equivalent errno value and returns a boolean to indicate success or not. Tested by running on a kernel that has this ABI and on one that does not. Verified that running on the kernel without this ABI the current code prints the provided error message and does not attempt to run the program. Verified that running on the kernel with this ABI the current code does not print an error message and turns on the ABI. All tests done on an AArch64 Linux machine. Reviewed By: eugenis Differential Revision: https://reviews.llvm.org/D94425
2021-01-13[MSan] Partially revert some changes from D94552Jianzhou Zhao1-6/+4
Because of line 55, actually aligned_beg always equals to beg.
2021-01-13[MSan] Tweak CopyOriginJianzhou Zhao1-5/+7
There could be some mis-alignments when copying origins not aligned. I believe inaligned memcpy is rare so the cases do not matter too much in practice. 1) About the change at line 50 Let dst be (void*)5, then d=5, beg=4 so we need to write 3 (4+4-5) bytes from 5 to 7. 2) About the change around line 77. Let dst be (void*)5, because of lines 50-55, the bytes from 5-7 were already writen. So the aligned copy is from 8. Reviewed-by: eugenis Differential Revision: https://reviews.llvm.org/D94552
2021-01-12[Sanitizer][Darwin] Fix test for macOS 11+ point releasesJulian Lettner1-6/+12
This test wrongly asserted that the minor version is always 0 when running on macOS 11 and above.
2021-01-12[VE][compiler-rt] Add VE as a target of crtKazushi (Jam) Marukawa1-1/+2
SX Aurora VE is an experimental target. We upstreamed many part of ported llvm and clang. In order to continue this move, we need to support libraries next, then we need to show the ability of llvm for VE through test cases. As a first step for that, we need to use crt in compiler-rt. VE has it's own crt but they are a part of proprietary compiler. So, we want to use crt in compiler-rt as an alternative. This patch enables VE as a candidate of crt in compiler-rt. Reviewed By: phosek, compnerd Differential Revision: https://reviews.llvm.org/D92748
2021-01-08[compiler-rt] [sanitizer] Silence -Wframe-larger-than= for a few windows ↵Martin Storsjö3-1/+22
functions with large stack buffers Also update a documentation url while touching code nearby, as requested in review. Differential Revision: https://reviews.llvm.org/D91853
2021-01-08[compiler-rt] Implement __atomic_is_lock_freeAlex Richardson2-0/+90
This function is called by the __atomic_is_lock_free() builtin if the value cannot be resolved to true at compile time. Lack of this function is causing the non-lockfree atomics tests in libc++ to not be run (see D91911) This function is also added in D85044, but that review also adds support for using lock-free atomics in more cases, whereas this is a minimal change that just adds __atomic_is_lock_free() for the implementation of atomic.c. Reviewed By: ldionne Differential Revision: https://reviews.llvm.org/D92302
2021-01-07[builtins] Add COMPILER_RT_BUILTINS_HIDE_SYMBOLSRyan Prichard1-2/+5
On Android, when the builtins are linked into a binary, they are typically linked using -Wl,--exclude-libs so that the symbols aren't reexported. For the NDK, compiler-rt's default behavior (build the builtins archive with -fvisibility=hidden) is better so that builtins are hidden even without -Wl,--exclude-libs. Android needs the builtins with non-hidden symbols only for a special case: for backwards compatibility with old binaries, the libc.so and libm.so DSOs in the platform need to export some builtins for arm32 and 32-bit x86. See D56977. Control the behavior with a new flag, `COMPILER_RT_BUILTINS_HIDE_SYMBOLS`, that behaves similarly to the `*_HERMETIC_STATIC_LIBRARY` in libunwind/libcxx/libcxxabi, so that Android can build a special builtins variant for libc.so/libm.so. Unlike the hermetic flags for other projects, this new flag is enabled by default. Reviewed By: compnerd, MaskRay Differential Revision: https://reviews.llvm.org/D93431
2021-01-06[sanitizer] Define SANITIZER_GLIBC to refine SANITIZER_LINUX feature ↵Fangrui Song14-118/+159
detection and support musl Several `#if SANITIZER_LINUX && !SANITIZER_ANDROID` guards are replaced with the more appropriate `#if SANITIZER_GLIBC` (the headers are glibc extensions, not specific to Linux (i.e. if we ever support GNU/kFreeBSD or Hurd, the guards may automatically work)). Several `#if SANITIZER_LINUX && !SANITIZER_ANDROID` guards are refined with `#if SANITIZER_GLIBC` (the definitions are available on Linux glibc, but may not be available on other libc (e.g. musl) implementations). This patch makes `ninja asan cfi lsan msan stats tsan ubsan xray` build on a musl based Linux distribution (apk install musl-libintl) Notes about disabled interceptors for musl: * `SANITIZER_INTERCEPT_GLOB`: musl does not implement `GLOB_ALTDIRFUNC` (GNU extension) * Some ioctl structs and functions operating on them. * `SANITIZER_INTERCEPT___PRINTF_CHK`: `_FORTIFY_SOURCE` functions are GNU extension * `SANITIZER_INTERCEPT___STRNDUP`: `dlsym(RTLD_NEXT, "__strndup")` errors so a diagnostic is formed. The diagnostic uses `write` which hasn't been intercepted => SIGSEGV * `SANITIZER_INTERCEPT_*64`: the `_LARGEFILE64_SOURCE` functions are glibc specific. musl does something like `#define pread64 pread` * Disabled `msg_iovlen msg_controllen cmsg_len` checks: musl is conforming while many implementations (Linux/FreeBSD/NetBSD/Solaris) are non-conforming. Since we pick the glibc definition, exclude the checks for musl (incompatible sizes but compatible offsets) Pass through LIBCXX_HAS_MUSL_LIBC to make check-msan/check-tsan able to build libc++ (https://bugs.llvm.org/show_bug.cgi?id=48618). Many sanitizer features are available now. ``` % ninja check-asan (known issues: * ASAN_OPTIONS=fast_unwind_on_malloc=0 odr-violations hangs ) ... Testing Time: 53.69s Unsupported : 185 Passed : 512 Expectedly Failed: 1 Failed : 12 % ninja check-ubsan check-ubsan-minimal check-memprof # all passed % ninja check-cfi ( all cross-dso/) ... Testing Time: 8.68s Unsupported : 264 Passed : 80 Expectedly Failed: 8 Failed : 32 % ninja check-lsan (With GetTls (D93972), 10 failures) Testing Time: 4.09s Unsupported: 7 Passed : 65 Failed : 22 % ninja check-msan (Many are due to functions not marked unsupported.) Testing Time: 23.09s Unsupported : 6 Passed : 764 Expectedly Failed: 2 Failed : 58 % ninja check-tsan Testing Time: 23.21s Unsupported : 86 Passed : 295 Expectedly Failed: 1 Failed : 25 ``` Used `ASAN_OPTIONS=verbosity=2` to verify there is no unneeded interceptor. Partly based on Jari Ronkainen's https://reviews.llvm.org/D63785#1921014 Note: we need to place `_FILE_OFFSET_BITS` above `#include "sanitizer_platform.h"` to avoid `#define __USE_FILE_OFFSET64 1` in 32-bit ARM `features.h` Reviewed By: vitalybuka Differential Revision: https://reviews.llvm.org/D93848
2021-01-06Revert "[sanitizer] Define SANITIZER_GLIBC to refine SANITIZER_LINUX feature ↵Oliver Stannard13-152/+112
detection and support musl" This reverts commit b7718b617557aa9827f994a16267537236634095, because it is causing build failures on all 32-bit ARM bots which build compiler-rt.
2021-01-05scudo: Update a comment to match the Linux kernel behavior. NFCI.Peter Collingbourne1-4/+5
2021-01-05[sanitizer][Darwin] Suppress -Wno-non-virtual-dtor warningJulian Lettner1-0/+1
Suppress the warning: ``` 'fake_shared_weak_count' has virtual functions but non-virtual destructor [-Wnon-virtual-dtor] ``` The warning has been recently enabled [1], but the associated cleanup missed this instance in Darwin code [2]. [1] 9c31e12609e1935eb84a2497ac08a49e3139859a [2] d48f2d7c02743571075bb7812bb4c9e634e51ed1 Differential Revision: https://reviews.llvm.org/D94139
2021-01-05Reland D93848 "[sanitizer] Define SANITIZER_GLIBC to refine SANITIZER_LINUX ↵Fangrui Song13-112/+152
feature detection and support musl"" Several `#if SANITIZER_LINUX && !SANITIZER_ANDROID` guards are replaced with the more appropriate `#if SANITIZER_GLIBC` (the headers are glibc extensions, not specific to Linux (i.e. if we ever support GNU/kFreeBSD or Hurd, the guards may automatically work)). Several `#if SANITIZER_LINUX && !SANITIZER_ANDROID` guards are refined with `#if SANITIZER_GLIBC` (the definitions are available on Linux glibc, but may not be available on other libc (e.g. musl) implementations). This patch makes `ninja asan cfi msan stats tsan ubsan xray` build on a musl based Linux distribution (apk install musl-libintl) Notes about disabled interceptors for musl: * `SANITIZER_INTERCEPT_GLOB`: musl does not implement `GLOB_ALTDIRFUNC` (GNU extension) * Some ioctl structs and functions operating on them. * `SANITIZER_INTERCEPT___PRINTF_CHK`: `_FORTIFY_SOURCE` functions are GNU extension * `SANITIZER_INTERCEPT___STRNDUP`: `dlsym(RTLD_NEXT, "__strndup")` errors so a diagnostic is formed. The diagnostic uses `write` which hasn't been intercepted => SIGSEGV * `SANITIZER_INTERCEPT_*64`: the `_LARGEFILE64_SOURCE` functions are glibc specific. musl does something like `#define pread64 pread` * Disabled `msg_iovlen msg_controllen cmsg_len` checks: musl is conforming while many implementations (Linux/FreeBSD/NetBSD/Solaris) are non-conforming. Since we pick the glibc definition, exclude the checks for musl (incompatible sizes but compatible offsets) Pass through LIBCXX_HAS_MUSL_LIBC to make check-msan/check-tsan able to build libc++ (https://bugs.llvm.org/show_bug.cgi?id=48618). Many sanitizer features are available now. ``` % ninja check-asan (known issues: * ASAN_OPTIONS=fast_unwind_on_malloc=0 odr-violations hangs ) ... Testing Time: 53.69s Unsupported : 185 Passed : 512 Expectedly Failed: 1 Failed : 12 % ninja check-ubsan check-ubsan-minimal check-memprof # all passed % ninja check-cfi ( all cross-dso/) ... Testing Time: 8.68s Unsupported : 264 Passed : 80 Expectedly Failed: 8 Failed : 32 % ninja check-lsan (With GetTls (D93972), 10 failures) Testing Time: 4.09s Unsupported: 7 Passed : 65 Failed : 22 % ninja check-msan (Many are due to functions not marked unsupported.) Testing Time: 23.09s Unsupported : 6 Passed : 764 Expectedly Failed: 2 Failed : 58 % ninja check-tsan Testing Time: 23.21s Unsupported : 86 Passed : 295 Expectedly Failed: 1 Failed : 25 ``` Used `ASAN_OPTIONS=verbosity=2` to verify there is no unneeded interceptor. Partly based on Jari Ronkainen's https://reviews.llvm.org/D63785#1921014 Reviewed By: vitalybuka Differential Revision: https://reviews.llvm.org/D93848
2021-01-05scudo: Fix compilation for non-Linux aarch64Roland McGrath1-0/+10
Linux-specific aarch64 code was deconditionalized in commit dfa40840e0e2fa094c5d3f441affe0785cdc8d09. This broke builds for non-Linux aarch64 platforms. Reviewed By: cryptoad Differential Revision: https://reviews.llvm.org/D94108
2021-01-05[android] Fix some tests for AOSP-master devices.Mitch Phillips3-2/+22
Some tests are broken at API level 30 on AOSP-master devices. When we change the buildbuit to API level 30, the following tests get enabled. They're currently broken due to various issues, and so fix up those issues. Reviewed By: oontvoo, eugenis Differential Revision: https://reviews.llvm.org/D94100
2021-01-05[Coverage] Add support for Branch Coverage in LLVM Source-Based Code CoverageAlan Phipps1-2/+2
This is an enhancement to LLVM Source-Based Code Coverage in clang to track how many times individual branch-generating conditions are taken (evaluate to TRUE) and not taken (evaluate to FALSE). Individual conditions may comprise larger boolean expressions using boolean logical operators. This functionality is very similar to what is supported by GCOV except that it is very closely anchored to the ASTs. Differential Revision: https://reviews.llvm.org/D84467
2021-01-05[compiler-rt] [windows] Add UNUSED attributes on variables/functions only ↵Martin Storsjö1-3/+3
used for 64 bit targets This fixes warnings when building for 32 bit targets. Differential Revision: https://reviews.llvm.org/D91852
2021-01-04[compiler-rt] [Sanitizers] Extend ThreadDescriptorSize() for ↵Jan Kratochvil1-1/+3
glibc-2.32-2.fc33.x86_64+i686 before: $ echo 'int main(){}'|clang -g -fsanitize=leak -x c++ -;./a.out Tracer caught signal 11: addr=0x7f4f73da5f40 pc=0x4222c8 sp=0x7f4f72cffd40 ==1164171==LeakSanitizer has encountered a fatal error. ==1164171==HINT: For debugging, try setting environment variable LSAN_OPTIONS=verbosity=1:log_threads=1 ==1164171==HINT: LeakSanitizer does not work under ptrace (strace, gdb, etc) $ _ after: $ echo 'int main(){}'|clang -g -fsanitize=leak -x c++ -;./a.out) $ _ I haven't verified the size cannot be affected by Fedora patches of upstream glibc-2.32 - but I do not expect upstream glibc-2.32 would have the last sizes `(1216, 2304)` from 2013 around glibc-2.12. Differential Revision: https://reviews.llvm.org/D93386
2021-01-02Revert "[sanitizer] Define SANITIZER_GLIBC to refine SANITIZER_LINUX feature ↵Nico Weber13-150/+112
detection and support musl" ...and follow-ups. It still doesn't build on Android, see https://reviews.llvm.org/D93848#2476310 This reverts commit a92d01534f1c4fb79210975573e774d0393f2533. This reverts commit 52d7e183bf25ea38e1149e39e19d21e6212e701f. This reverts commit 34489da81b39972b40d2ff5581fe48911339406e.
2021-01-01[sanitizer] Enable mallopt and mallinfo interceptors on Android after D93848Fangrui Song1-1/+1
Reviewed By: aeubanks Differential Revision: https://reviews.llvm.org/D93970
2021-01-01[compiler-rt][test] Suppress stderr of ldd outputFangrui Song1-0/+1
2020-12-31[sanitizer] Include fstab.h on glibc/FreeBSD/NetBSD/macOSFangrui Song1-2/+4
2020-12-31[sanitizer] Define SANITIZER_GLIBC to refine SANITIZER_LINUX feature ↵Fangrui Song13-112/+148
detection and support musl Several `#if SANITIZER_LINUX && !SANITIZER_ANDROID` guards are replaced with the more appropriate `#if SANITIZER_GLIBC` (the headers are glibc extensions, not specific to Linux (i.e. if we ever support GNU/kFreeBSD or Hurd, the guards may automatically work)). Several `#if SANITIZER_LINUX && !SANITIZER_ANDROID` guards are refined with `#if SANITIZER_GLIBC` (the definitions are available on Linux glibc, but may not be available on other libc (e.g. musl) implementations). This patch makes `ninja asan cfi msan stats tsan ubsan xray` build on a musl based Linux distribution (apk install musl-libintl) Notes about disabled interceptors for musl: * `SANITIZER_INTERCEPT_GLOB`: musl does not implement `GLOB_ALTDIRFUNC` (GNU extension) * Some ioctl structs and functions operating on them. * `SANITIZER_INTERCEPT___PRINTF_CHK`: `_FORTIFY_SOURCE` functions are GNU extension * `SANITIZER_INTERCEPT___STRNDUP`: `dlsym(RTLD_NEXT, "__strndup")` errors so a diagnostic is formed. The diagnostic uses `write` which hasn't been intercepted => SIGSEGV * `SANITIZER_INTERCEPT_*64`: the `_LARGEFILE64_SOURCE` functions are glibc specific. musl does something like `#define pread64 pread` * Disabled `msg_iovlen msg_controllen cmsg_len` checks: musl is conforming while many implementations (Linux/FreeBSD/NetBSD/Solaris) are non-conforming. Since we pick the glibc definition, exclude the checks for musl (incompatible sizes but compatible offsets) Pass through LIBCXX_HAS_MUSL_LIBC to make check-msan/check-tsan able to build libc++ (https://bugs.llvm.org/show_bug.cgi?id=48618). Many sanitizer features are available now. ``` % ninja check-asan (known issues: * ASAN_OPTIONS=fast_unwind_on_malloc=0 odr-violations hangs ) ... Testing Time: 53.69s Unsupported : 185 Passed : 512 Expectedly Failed: 1 Failed : 12 % ninja check-ubsan check-ubsan-minimal check-memprof # all passed % ninja check-cfi ( all cross-dso/) ... Testing Time: 8.68s Unsupported : 264 Passed : 80 Expectedly Failed: 8 Failed : 32 % ninja check-msan (Many are due to functions not marked unsupported.) Testing Time: 23.09s Unsupported : 6 Passed : 764 Expectedly Failed: 2 Failed : 58 % ninja check-tsan Testing Time: 23.21s Unsupported : 86 Passed : 295 Expectedly Failed: 1 Failed : 25 ``` Used `ASAN_OPTIONS=verbosity=2` to verify no unneeded interceptors. Partly based on Jari Ronkainen's https://reviews.llvm.org/D63785#1921014 Reviewed By: vitalybuka Differential Revision: https://reviews.llvm.org/D93848
2020-12-30[lsan] Ignore inderect leaks referenced by suppressed blocksVitaly Buka3-23/+91
This makes suppression list to work similar to __lsan_ignore_object. Existing behavior was inconsistent and very inconvenient for complex data structures. Example: struct B; struct A { B* ptr; }; A* t = makeA(); t->ptr = makeB(); Before the patch: if makeA suppressed by suppression file, lsan will still report the makeB() leak, so we need two suppressions. After the patch: a single makeA suppression is enough (the same as a single __lsan_ignore_object(t)). Differential Revision: https://reviews.llvm.org/D93884
2020-12-30[compiler-rt] FuzzedDataProvider: Add PickValueInArray for std::arrayMax Moroz2-0/+23
This makes `PickValueInArray` work for `std::array<T, s>` (C++11). I've also tested the C++17 `std::array` (with compiler-deduced template parameters) ``` Author: MarcoFalke <falke.marco@gmail.com> ``` Reviewed By: Dor1s Differential Revision: https://reviews.llvm.org/D93412
2020-12-30[CMake][tsan] Remove --sysroot=.Fangrui Song1-15/+0
rL254966 added `--sysroot=.` to prevent accidental including system headers. It caused hassle to FreeBSD (D17383)/NetBSD. The next problem is that we want to include `features.h` (usually `/usr/include/features.h`) to detect `__GLIBC__`. At this point it seems that `--sysroot=.` adds lots of inconvenience so we disable it for now. If there is a better way preventing accidental system header inclusion we can consider it again. Reviewed By: #sanitizers, vitalybuka Differential Revision: https://reviews.llvm.org/D93921
2020-12-29[NFC][lsan] Extract PrintResults functionVitaly Buka1-18/+23
2020-12-29[lsan] Parse suppressions just before leak reportingVitaly Buka1-22/+50
Without leaks suppressions are not needed.
2020-12-29[NFC][lsan] Add nested leak in testVitaly Buka1-4/+12
2020-12-29[NFC][sanitizer] Add SortAndDedup functionVitaly Buka2-0/+50
2020-12-29[NFC][sanitizer] Simplify InternalLowerBoundVitaly Buka5-33/+28
2020-12-29[tsan] Remove stdlib.h from dd_interceptors.cppVitaly Buka1-5/+6
This fixes "realpath already defined" error. Reviewed By: eugenis Differential Revision: https://reviews.llvm.org/D93877
2020-12-29sanitizer: fix typo/spelling: Dissassemble → DisassembleMichael Stapelberg1-1/+1
Differential Revision: https://reviews.llvm.org/D93902
2020-12-28[ubsan][test] FLush stdout before checking interleaved stdout/stderrFangrui Song1-0/+1
Detected by musl.
2020-12-28[asan][test] Annotate glibc specific tests with REQUIRES: glibc-2.27Fangrui Song8-10/+10
2020-12-28[NFC][sanitizer] Remove unused typedefVitaly Buka1-2/+0
2020-12-27[msan] Delete unused glibc header <execinfo.h>Fangrui Song1-1/+0
The file does not call backtrace/backtrace_symbols.