summaryrefslogtreecommitdiffstats
path: root/compiler-rt
Commit message (Collapse)AuthorAgeFilesLines
...
* [GWP-ASan] Core Guarded Pool Allocator [4].Mitch Phillips2019-06-0511-3/+1111
| | | | | | | | | | | | | | | | | | | | | Summary: See D60593 for further information. This patch introduces the core of GWP-ASan, being the guarded pool allocator. This class contains the logic for creating and maintaining allocations in the guarded pool. Its public interface is to be utilised by supporting allocators in order to provide sampled guarded allocation behaviour. This patch also contains basic functionality tests of the allocator as unittests. The error-catching behaviour will be tested in upcoming patches that use Scudo as an implementing allocator. Reviewers: vlad.tsyrklevich, eugenis, jfb Reviewed By: vlad.tsyrklevich Subscribers: dexonsmith, kubamracek, mgorny, cryptoad, jfb, #sanitizers, llvm-commits, morehouse Tags: #sanitizers, #llvm Differential Revision: https://reviews.llvm.org/D62872 llvm-svn: 362636
* Changed force build of GWP-ASan options parser to be staticallyMitch Phillips2019-06-051-1/+1
| | | | | | | linked instead of dynamic. This should help resolve a downstream build order issue against libc++. llvm-svn: 362566
* Fixed GWP-ASan build breakage. When adding the optional flag parser, there ↵Mitch Phillips2019-06-041-1/+2
| | | | | | was a missing dependency on compiler-rt (and thus SanitizerCommon) for this feature. llvm-svn: 362542
* [GWP-ASan] Configuration options [3].Mitch Phillips2019-06-045-0/+253
| | | | | | | | | | | | | | | | | | | | | Summary: See D60593 for further information. This patch introduces the configuration options for GWP-ASan. In general, we expect the supporting allocator to populate the options struct, and give that to GWP-ASan during initialisation. For allocators that are okay with pulling in sanitizer_common, we also provide an optional parser that populates the gwp_asan::Options struct with values provided in the GWP_ASAN_OPTIONS environment variable. This patch contains very little logic, and all of the testable components (i.e. the optional parser's internal logic) is tested as part of the sanitizer_common testbed. Reviewers: vlad.tsyrklevich, morehouse, jfb Reviewed By: morehouse Subscribers: dexonsmith, kubamracek, mgorny, #sanitizers, llvm-commits, vitalybuka Tags: #sanitizers, #llvm Differential Revision: https://reviews.llvm.org/D62698 llvm-svn: 362527
* [HWASAN] Make new/delete weakEugene Leviant2019-06-042-8/+31
| | | | | | | | | This allows instrumenting programs which have their own versions of new and delete operators. Differential revision: https://reviews.llvm.org/D62794 llvm-svn: 362478
* [builtins] Use libtool for builtins when building for Apple platformPetr Hosek2019-06-043-52/+55
| | | | | | | | | | | | compiler-rt already uses libtool instead of ar when building for Apple platform, but that's not being used when builtins are being built separately e.g. as part of the runtimes build. This change extracts the logic setting up libtool into a separate file and uses it from both the compiler-rt and standalone builtins build. Differential Revision: https://reviews.llvm.org/D62820 llvm-svn: 362466
* builtins: correct function name for AEABISaleem Abdulrasool2019-06-031-2/+2
| | | | | | | | | | If `COMPILER_RT_ARMHF_TARGET` is set , the definition of the AEABI runtime function `__aeabi_fcmpun` is misspelt: `__aeabi_fcmpum` instead of `__aeabi_fcmpun`. Patch by Konstantin Schwarz! llvm-svn: 362424
* Attempt to fix test failure for armv8.Mitch Phillips2019-05-301-2/+2
| | | | | | | | Looks like armv8 can't handle a thousand threads, which GWP-ASan requests when running a synchronised mutex test. Limiting this to 100 to attempt to fix the build issue. llvm-svn: 362163
* Attempt to fix 'mutex.h' not found when building mutex_posix.Mitch Phillips2019-05-301-1/+1
| | | | llvm-svn: 362149
* [GWP-ASan] Mutex implementation [2].Mitch Phillips2019-05-3011-1/+339
| | | | | | | | | | | | | | | | | | | | | | | | | | Summary: See D60593 for further information. This patch pulls out the mutex implementation and the required definitions file. We implement our own mutex for GWP-ASan currently, because: 1. We must be compatible with the sum of the most restrictive elements of the supporting allocator's build system. Current targets for GWP-ASan include Scudo (on Linux and Fuchsia), and bionic (on Android). 2. Scudo specifies `-nostdlib++ -nonodefaultlibs`, meaning we can't use `std::mutex` or `mtx_t`. 3. We can't use `sanitizer_common`'s mutex, as the supporting allocators cannot afford the extra maintenance (Android, Fuchsia) and code size (Fuchsia) overheads that this would incur. In future, we would like to implement a shared base mutex for GWP-ASan, Scudo and sanitizer_common. This will likely happen when both GWP-ASan and Scudo standalone are not in the development phase, at which point they will have stable requirements. Reviewers: vlad.tsyrklevich, morehouse, jfb Reviewed By: morehouse Subscribers: dexonsmith, srhines, cfe-commits, kubamracek, mgorny, cryptoad, jfb, #sanitizers, llvm-commits, vitalybuka, eugenis Tags: #sanitizers, #llvm, #clang Differential Revision: https://reviews.llvm.org/D61923 llvm-svn: 362138
* mac: Make ubsan test config look more like asan test configNico Weber2019-05-291-4/+1
| | | | | | | | | | | | | | | | | | | | | | | In particular, don't call get_target_flags_for_arch() since that will cause an error in some situations: If DARWIN_iossim_ARCHS=i386;x86_64, DARWIN_osx_ARCHS=x86_64, and DARWIN_iossym_SYSROOT isn't set (due to the simulator sysroot not being available), then config-ix.cmake won't add i386 to COMPILER_RT_SUPPORTED_ARCH but ubsan's test/CMakeLists.txt would call get_target_flags_for_arch() with i386, which would then run into the error in get_target_flags_for_arch(). Having these conditions isn't ideal. The background here is that we configure our mac-hosted trunk bots all the same (so they all have the same DARWIN_*_archs, and we don't easily know if a mac host bot is targeting mac or ios at the place where we call cmake), but only the ios-targeting bots have ios sysroots available. This will hopefully unbreak that use case without impacting anything else -- and it makes ubsan and asan test setup more alike. llvm-svn: 362010
* [HWASAN] Remove unused codeEugene Leviant2019-05-292-28/+0
| | | | | | Differential revision: https://reviews.llvm.org/D62489 llvm-svn: 361942
* [builtins] Move the compare2f definition outside of the macroPetr Hosek2019-05-291-11/+19
| | | | | | | | | This should hopefully address the error we're seeing in older versions of Clang. Differential Revision: https://reviews.llvm.org/D62554 llvm-svn: 361909
* [compiler-rt] Fix cmake warningsShoaib Meenai2019-05-281-2/+6
| | | | | | | | | | | | | | | | | | | | | | | | - Fix cmake BOOL misspellings - Set cmake policy for CMP0075 to NEW As requested by smeenai I've compared CMAkeCache.txt in master with and without this patch and the only changes are to the variable types I fixed: $ diff build-b1-master/CMakeCache.txt build-b1-compiler-rt-fix-cmake-warnings/CMakeCache.txt 503c503 < COMPILER_RT_BAREMETAL_BUILD:STRING=OFF --- > COMPILER_RT_BAREMETAL_BUILD:BOOL=OFF 550c550 < COMPILER_RT_HWASAN_WITH_INTERCEPTORS:STRING=ON --- > COMPILER_RT_HWASAN_WITH_INTERCEPTORS:BOOL=ON Patch by Wink Saville <wink@saville.com>. Differential Revision: https://reviews.llvm.org/D61203 llvm-svn: 361866
* [Driver] Change layout of per-target runtimes to resemble multiarchPetr Hosek2019-05-271-2/+2
| | | | | | | | | | | | | | | | | | | | | | | This is a follow up to r361432, changing the layout of per-target runtimes to more closely resemble multiarch. While before, we used the following layout: [RESOURCE_DIR]/<target>/lib/libclang_rt.<runtime>.<ext> Now we use the following layout: [RESOURCE_DIR]/lib/<target>/libclang_rt.<runtime>.<ext> This also more closely resembles the existing "non-per-target" layout: [RESOURCE_DIR]/lib/<os>/libclang_rt.<runtime>-<arch>.<ext> This change will enable further simplification of the driver logic in follow up changes. Differential Revision: https://reviews.llvm.org/D62469 llvm-svn: 361784
* [libFuzzer] when using data-flow-trace (DFT) only load the DFT for the files ↵Kostya Serebryany2019-05-244-11/+18
| | | | | | present in the corpus llvm-svn: 361579
* [libFuzzer] remove the data-flow-trace (DFT) python scripts; their ↵Kostya Serebryany2019-05-234-156/+8
| | | | | | functionality is now part of libFuzzer proper; also write functions.txt to the disk only if this file doesn't exist yet llvm-svn: 361452
* [libFuzzer] automatically collect the data flow trace (DFT) in the fork mode ↵Kostya Serebryany2019-05-236-3/+53
| | | | | | if -collect_data_flow= is given llvm-svn: 361448
* [asan] Fix debug asan build link errorReid Kleckner2019-05-222-26/+29
| | | | | | | | | | | | Reviewers: dmajor, vitalybuka, waltl Subscribers: kubamracek, #sanitizers, llvm-commits Tags: #sanitizers, #llvm Differential Revision: https://reviews.llvm.org/D61871 llvm-svn: 361427
* [X86] Add more icelake model numbers to compiler-rt implementation of ↵Craig Topper2019-05-221-0/+8
| | | | | | | | | __builtin_cpu_is. Using model numbers found in Table 2-1 of the May 2019 version of the Intel Software Developer's Manual Volume 4. llvm-svn: 361423
* [libFuzzer] Ignore synthetic exceptions on FuchsiaPetr Hosek2019-05-221-42/+58
| | | | | | | | | | | | | Fuchsia has several exceptions which are merely informational and should not be treated as crashes. This patch puts logic that read from the exception port and handled the exception in a loop, and ignores non-exceptions and informational exceptions. Patch By: aarongreen Differential Revision: https://reviews.llvm.org/D62226 llvm-svn: 361407
* [Sanitizer] Add interceptor for wcsdupPavel Labath2019-05-223-0/+34
| | | | | | | | | | | | | | Summary: The wide-string equivalent of strdup. Implementation trivial. Reviewers: vitalybuka, eugenis Subscribers: kubamracek, delcypher, llvm-commits, #sanitizers Tags: #llvm, #sanitizers Differential Revision: https://reviews.llvm.org/D62189 llvm-svn: 361357
* [libFuzzer] Sleep after process exits in merge-sigusr.test.Matt Morehouse2019-05-221-0/+1
| | | | | | Ensure that log file has been fully updated before trying to read it. llvm-svn: 361339
* [libFuzzer] Kill by session ID in merge-sigusr.test.Matt Morehouse2019-05-211-3/+3
| | | | | | Ensures that parent and all child processes are killed at once. llvm-svn: 361336
* [libFuzzer] Ignore exit status of wait in merge-sigusr.test.Matt Morehouse2019-05-211-1/+1
| | | | | | | If process $PID has already exited, wait will give a non-zero exit status. llvm-svn: 361326
* [libFuzzer] Reduce flakiness of merge-sigusr.test.Matt Morehouse2019-05-211-3/+10
| | | | | | Double the number of files to merge, and use wait instead of sleep. llvm-svn: 361313
* [asan] clang-format parent patchVitaly Buka2019-05-211-3/+3
| | | | llvm-svn: 361305
* [asan] Replace assignments with internal_memcpy ErrorDescriptionVitaly Buka2019-05-212-3/+5
| | | | | | For consistency with nearby code and to avoid interceptors during reports. llvm-svn: 361304
* [builtins] Deduplicate __eqsf2 and __gtsf2 via macroPetr Hosek2019-05-201-77/+30
| | | | | | | | | | | The only difference between __eqsf2 and __gtsf2 is whether they return 1 or -1 on NaN. Rather than duplicating all the code, use a macro to define the function twice and use an argument to decide whether to negate the return value. Differential Revision: https://reviews.llvm.org/D61919 llvm-svn: 361207
* This change adds an API to allow setting the flag to indicate that the ↵Max Moroz2019-05-202-0/+12
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | profile data has been dumped to the file. Summary: The main use is for users to disable dumping profile data to the file for certain processes in case the processes don't have permission to write to the disks, and trying to do so would result in side effects such as crashes. Patch by Yuke Liao (@liaoyuke). Additional context (Chromium use case): - https://bugs.chromium.org/p/chromium/issues/detail?id=842424 - https://bugs.chromium.org/p/chromium/issues/detail?id=957655 - https://chromium-review.googlesource.com/c/chromium/src/+/1610093 Reviewers: Dor1s, vsk, davidxl Reviewed By: Dor1s, davidxl Subscribers: delcypher, davidxl, sajjadm, #sanitizers, llvm-commits Tags: #sanitizers, #llvm Differential Revision: https://reviews.llvm.org/D62078 llvm-svn: 361194
* [libFuzzer] Disable fork-sigusr.test on AArch64.Matt Morehouse2019-05-201-1/+1
| | | | | | Test fails on the clang-cmake-aarch64-lld build and I'm not sure why. llvm-svn: 361185
* [X86] Add icelake-client and tremont model numbers to compiler-rt's ↵Craig Topper2019-05-201-0/+9
| | | | | | implementation of __builtin_cpu_is. llvm-svn: 361175
* [scudo][standalone] Introduce the Primary(s) and LocalCacheKostya Kortchinsky2019-05-207-9/+1128
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Summary: This CL introduces the 32 & 64-bit primary allocators, and associated Local Cache. While the general idea is mostly similar to what exists in sanitizer_common, it departs from the original code somewhat significantly: - the 64-bit primary no longer uses a free array at the end of a region but uses batches of free blocks in region 0, allowing for a convergence with the 32-bit primary behavior; - as a result, there is only one (templated) local cache type for both primary allocators, and memory reclaiming can be implemented similarly for the 32-bit & 64-bit platforms; - 64-bit primary regions are handled a bit differently: we do not reserve 4TB of memory that we split, but reserve `NumClasses * 2^RegionSizeLog`, each region being offseted by a random number of pages from its computed base. A side effect of this is that the 64-bit primary works on 32-bit platform (I don't think we want to encourage it but it's an interesting side effect); Reviewers: vitalybuka, eugenis, morehouse, hctim Reviewed By: morehouse Subscribers: srhines, mgorny, delcypher, jfb, #sanitizers, llvm-commits Tags: #llvm, #sanitizers Differential Revision: https://reviews.llvm.org/D61745 llvm-svn: 361159
* Use CMAKE_C_COMPILER_ARG1 in compiler invocationPetr Hosek2019-05-192-3/+4
| | | | | | | | | This is needed when using compiler wrappers such as ccache or distcc and should address the failure on clang-x86_64-debian-fast bot. Differential Revision: https://reviews.llvm.org/D62104 llvm-svn: 361111
* [sanitizer] Update symbolizer/scripts/global_symbols.txtVitaly Buka2019-05-171-0/+1
| | | | llvm-svn: 361077
* Explicitly remove -stdlib=libc++, as we pass -nostdinc++ anyway. This should ↵Mitch Phillips2019-05-171-0/+3
| | | | | | fix the android builtbots, and is a direct copy from what Scudo does. llvm-svn: 361073
* [libFuzzer] Dump input on failure for sigusr tests.Matt Morehouse2019-05-172-2/+2
| | | | | | Should help with debugging failures on the bots. llvm-svn: 361070
* [hwasan] Limit try-catch tests to aarch64.Evgeniy Stepanov2019-05-171-0/+3
| | | | | | | HWASan C++ tests do not do well on x86_64. Fixes https://bugs.llvm.org/show_bug.cgi?id=41923 llvm-svn: 361063
* [libFuzzer] Use SleepOneSecondTest.cpp for fork-sigusr.test.Matt Morehouse2019-05-171-2/+2
| | | | | | | | ShallowOOMDeepCrash.cpp may hit libFuzzer's RSS limit before the SIGUSR2 is delivered, causing the test to be flaky when bots are under load. SleepOneSecondTest.cpp will keep running until the signal is delivered. llvm-svn: 361048
* [GWP-ASan] Fixed issue with c++ standard library dependency.Mitch Phillips2019-05-173-6/+6
| | | | | | | | | | | | | | | | | | | Summary: Removed dependency on c++ standard library. Some supporting allocators (namely Scudo on Fuchsia, and shortly, scudo standalone) has a hard requirement of no c++stdlib. This patch updates the build system so that we don't have any c++ stdlib dependencies. It also will conveniently fix a racy build-order bug discrepency between GWP-ASan and libc++. Reviewers: phosek, morehouse Reviewed By: phosek, morehouse Subscribers: kubamracek, mgorny, cryptoad, #sanitizers, llvm-commits, beanz, smeenai, vitalybuka Tags: #sanitizers, #llvm Differential Revision: https://reviews.llvm.org/D62048 llvm-svn: 360982
* HWASan exception support.Evgeniy Stepanov2019-05-161-0/+60
| | | | | | | | | | | | | | | | | | Summary: Adds a call to __hwasan_handle_vfork(SP) at each landingpad entry. Reusing __hwasan_handle_vfork instead of introducing a new runtime call in order to be ABI-compatible with old runtime library. Reviewers: pcc Subscribers: kubamracek, hiraditya, #sanitizers, llvm-commits Tags: #sanitizers, #llvm Differential Revision: https://reviews.llvm.org/D61968 llvm-svn: 360959
* [sanitizer] Don't generate "failed to intercept" constants for each functionVitaly Buka2019-05-162-18/+18
| | | | llvm-svn: 360958
* [TSan][libdispatch] Use FileCheck's --implicit-check-not=...Julian Lettner2019-05-1618-37/+18
| | | | | | | | | | | | | | | | | | | | | | | Use FileCheck's --implicit-check-not='ThreadSanitizer' which increases the strictness of our tests a bit. NFC. ``` CHECK: start CHECK-NOT: ThreadSanitizer CHECK: done ``` With --implicit-check-not, the above is turned into: ``` CHECK-NOT: ThreadSanitizer CHECK: start CHECK-NOT: ThreadSanitizer CHECK: done CHECK-NOT: ThreadSanitizer ``` llvm-svn: 360927
* [libFuzzer] Disable merge-sigusr.test on linux.Matt Morehouse2019-05-161-1/+2
| | | | | | Make buildbot green while I rethink the test. llvm-svn: 360914
* [crt] Mark dso_handle test as xfailing on ARM.Yvan Roux2019-05-161-0/+2
| | | | | | This is a temporary action to fix the bots. llvm-svn: 360873
* [libFuzzer] Increase merge-sigusr sleep after sending signal.Matt Morehouse2019-05-161-1/+1
| | | | | | | Test is flaky on buildbot at least partially due to the fuzz target not exiting before we read its output. llvm-svn: 360848
* [libFuzzer] Also kill parent process in merge-siguser.test.Matt Morehouse2019-05-161-0/+1
| | | | llvm-svn: 360840
* [libFuzzer] Fix typo in merge-sigusr.test.Matt Morehouse2019-05-161-1/+1
| | | | llvm-svn: 360836
* [libFuzzer] Use PID to send signals rather than process name.Matt Morehouse2019-05-162-4/+4
| | | | | | | | pkill reads the process name as a pattern, not a raw name. This means that if the process name contains + or other regex characters, pkill fails. llvm-svn: 360835
* [mips] Always use _LARGEFILE_SOURCE / _FILE_OFFSET_BITS for building MIPS 32-bitSimon Atanasyan2019-05-151-2/+2
| | | | | | | | | | | | | | | | | When MIPS 32-bit compiler-rt is building on 32-bit host or using 32-bit `DLLVM_HOST_TRIPLE` the `_LARGEFILE_SOURCE` and the `_FILE_OFFSET_BITS=64` macros defined by statements from the `HandleLLVMOptions.cmake`. In case of building 32-bit libraries on 64-bit host using default host triple these macros are not defined. As a result assertions check a consistency between the `struct_kernel_stat_sz` constant and the `struct_kernel_stat_sz` start to fail. To resolve this problem and enable building both 32/64-bit versions of MIPS compiler-rt libraries on 64-bit host at once always explicitly define the `_LARGEFILE_SOURCE` and the `_FILE_OFFSET_BITS=64` macros for MIPS 32-bit. llvm-svn: 360825
OpenPOWER on IntegriCloud