Skip to content
This repository has been archived by the owner on Mar 28, 2020. It is now read-only.

Re-branch stable from swift-5.1-branch #35

Merged
merged 741 commits into from Feb 20, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
741 commits
Select commit Hold shift + click to select a range
c7e3ada
[hwasan] optionally right-align heap allocations
kcc Nov 16, 2018
5b95a34
Add new interceptor for getmntinfo(3) from NetBSD
krytarowski Nov 16, 2018
85970a9
Add new interceptor for mi_vector_hash(3)
krytarowski Nov 16, 2018
77d7802
[hwasan] disable one test line while investigating a bot failure
kcc Nov 16, 2018
c53747e
[sanitizer] Update global_symbols.txt
vitalybuka Nov 16, 2018
4d9fb22
Cast _Unwind_GetIP() and _Unwind_GetRegionStart() to uintptr_t
krytarowski Nov 16, 2018
d016086
Cast the 2nd argument of _Unwind_SetIP() to _Unwind_Ptr
krytarowski Nov 16, 2018
0a11cc0
Revert "Cast the 2nd argument of _Unwind_SetIP() to _Unwind_Ptr"
krytarowski Nov 16, 2018
0cd2d2b
[hwasan] use reads instead of writes in a test
kcc Nov 16, 2018
9cf4f71
[hwasan] implement free_checks_tail_magic=1
kcc Nov 17, 2018
396bde3
[hwasan] make the heap-buffer-overflow.c test more robust and re-enab…
kcc Nov 17, 2018
e00aa66
[hwasan] don't check tail magic when in right_align mode (should fix …
kcc Nov 17, 2018
6fef42d
Propagating prior merge from 'llvm.org/master'.
Nov 17, 2018
8f842df
Add interceptor for the setvbuf(3) from NetBSD
krytarowski Nov 19, 2018
38ebdda
[compiler-rt] Use zx_futex_wait_deprecated for Fuchsia sanitizer runtime
petrhosek Nov 20, 2018
7ef733d
[XRay] Move buffer extents back to the heap
deanberris Nov 20, 2018
57c9432
[XRay] Add a test for allocator exhaustion
deanberris Nov 20, 2018
177d65e
Propagating prior merge from 'llvm.org/master'.
Nov 20, 2018
67ac3cd
[tsan] Add __cxa_guard_acquire hooks to support cooperative scheduling
vitalybuka Nov 20, 2018
64b4dbf
[cmake] Fix detecting terminfo library
mgorny Nov 20, 2018
8205a46
[Sanitizer] intercept setvbuf on other platforms where it is supported
devnexen Nov 20, 2018
85c370d
[Sanitizer] Unbreak non NetBSD builds.
devnexen Nov 20, 2018
2104610
Revert "[Sanitizer] intercept setvbuf on other platforms where it is …
devnexen Nov 20, 2018
07725f5
[XRay] Add a test for re-initialising FDR mode (NFC)
deanberris Nov 21, 2018
ffc98df
Add header <atomic> which is needed to compile with some older librar…
dyung Nov 21, 2018
1a48cab
tsan: add pthread_tryjoin_np and pthread_timedjoin_np interceptors
dvyukov Nov 21, 2018
d0a8a1a
Propagating prior merge from 'llvm.org/master'.
Nov 21, 2018
2451cfd
[compiler-rt][UBSan] silence_unsigned_overflow: do *NOT* ignore *fata…
LebedevRI Nov 21, 2018
2910601
[Sanitizer] Adding setvbuf in supported platforms and other stream bu…
devnexen Nov 21, 2018
bda33eb
tsan: Correct the name of an executable.
pcc Nov 22, 2018
c0061a2
tsan: Update measurements in check_analyze.sh.
pcc Nov 22, 2018
e1ce357
[XRay] Support for Fuchsia
petrhosek Nov 22, 2018
638498c
Unbreak FreeBSD build.
devnexen Nov 22, 2018
c46e494
Propagating prior merge from 'llvm.org/master'.
Nov 22, 2018
ee1ac8c
[X86][compiler-rt] Attempt to fix a warning about a shift amount bein…
topperc Nov 24, 2018
13d5330
[X86] Make conversion of feature bits into a mask explicitly unsigned…
topperc Nov 24, 2018
09f92a1
[X86][compiler-rt] Add missing semicolon
d0k Nov 24, 2018
af4bdd6
Propagating prior merge from 'llvm.org/master'.
Nov 24, 2018
7fedff5
Fix filtering of sanitizer_common unittest architectures on Darwin.
kubamracek Nov 27, 2018
8b2ba61
[CMake] Add a missing case of TO_CMAKE_PATH
mstorsjo Nov 27, 2018
3c18d4f
Propagating prior merge from 'llvm.org/master'.
Nov 27, 2018
d831994
[gcov] Disable instrprof-gcov-fork.test.
morehouse Nov 28, 2018
313ce8d
git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@34778…
yln Nov 28, 2018
fe115be
Propagating prior merge from 'llvm.org/master'.
Nov 28, 2018
e2323d8
Revert r346560 "[winasan] Unpoison the stack in NtTerminateThread"
rnk Nov 29, 2018
5f6e92b
Propagating prior merge from 'llvm.org/master'.
Nov 30, 2018
d17fd91
Add a new interceptor for getvfsstat(2) from NetBSD
krytarowski Nov 30, 2018
c593dcb
[compiler-rt] Use "ColumnLimit: 0" instead of "clang-format off" in t…
vitalybuka Dec 1, 2018
58f208e
Propagating prior merge from 'llvm.org/master'.
Dec 1, 2018
84a39fa
Introduce a way to allow the ASan dylib on Darwin platforms to be loa…
danliew Dec 1, 2018
9fb8923
Propagating prior merge from 'llvm.org/master'.
Dec 1, 2018
1ff0378
[SanitizerCommon] Remove RenameFile
eleviant Dec 3, 2018
3712afc
[gcov/Darwin] Ensure external symbols are exported when using an expo…
vedantk Dec 3, 2018
48fc69a
Remove unused empty arm64 directory
kongy Dec 3, 2018
c8fae51
Add new interceptor for regex(3) in NetBSD
krytarowski Dec 4, 2018
67639f9
Add interceptors for the fts(3) API family from NetBSD
krytarowski Dec 4, 2018
dd93998
Add interceptors for the sysctl(3) API family from NetBSD
krytarowski Dec 4, 2018
e8dd644
Improve the regerror(3) interceptor
krytarowski Dec 4, 2018
e3dec4e
[compiler-rt] Use the new zx_futex_wait for Fuchsia sanitizer runtime
petrhosek Dec 4, 2018
3706dd9
Propagating prior merge from 'llvm.org/master'.
Dec 4, 2018
ac40fa8
[SanitizerCommon] Test `CombinedAllocator::ForEachChunk()` in unit te…
danliew Dec 4, 2018
7cfbd63
Propagating prior merge from 'llvm.org/master'.
Dec 4, 2018
661444d
[Sanitizer] intercept part of sysctl Api
devnexen Dec 4, 2018
416855a
Unbreak build due to style.
devnexen Dec 4, 2018
5fc9c91
Fix sanitizer unit test
devnexen Dec 4, 2018
803ba10
[asan] Remove use_odr_indicator runtime flag
vitalybuka Dec 4, 2018
f5bdd93
[asan] Split -asan-use-private-alias to -asan-use-odr-indicator
vitalybuka Dec 4, 2018
7077d7e
[asan] Add clang flag -fsanitize-address-use-odr-indicator
vitalybuka Dec 5, 2018
2eb9a4c
Update GET_LINK_MAP_BY_DLOPEN_HANDLE() for NetBSD x86
krytarowski Dec 5, 2018
8147614
[XRay] Move-only Allocator, FunctionCallTrie, and Array
deanberris Dec 5, 2018
1fbd43a
[XRay] Use deallocateBuffer instead of deallocate
deanberris Dec 5, 2018
f8a5a3f
[XRay] Use uptr instead of uintptr_t
deanberris Dec 5, 2018
5f5894b
Revert r348335 "[XRay] Move-only Allocator, FunctionCallTrie, and Array"
zmodem Dec 5, 2018
748585b
Propagating prior merge from 'llvm.org/master'.
Dec 5, 2018
39c2acc
Add a new interceptor for nl_langinfo(3) from NetBSD
krytarowski Dec 5, 2018
b3a7f1d
Add a new interceptor for modctl(2) from NetBSD
krytarowski Dec 5, 2018
7b51c59
[Sanitizer] expand nl_langinfo interception to FreeBSD
devnexen Dec 5, 2018
088f1d1
[Sanitizer] nl_langinfo forgotten bit.
devnexen Dec 5, 2018
19b47fc
Remove XFAIL in get_module_and_offset_for_pc.cc for NetBSD-MSan
krytarowski Dec 5, 2018
8c053ce
Propagating prior merge from 'llvm.org/master'.
Dec 5, 2018
52307e0
Re-land r348335 "[XRay] Move-only Allocator, FunctionCallTrie, and Ar…
deanberris Dec 6, 2018
9d570bc
[XRay] Use default-constructed struct as argument to Append(...)
deanberris Dec 6, 2018
ba25bd8
Propagating prior merge from 'llvm.org/master'.
Dec 6, 2018
3c26799
[XRay] Use a local lvalue as arg to AppendEmplace(...)
deanberris Dec 6, 2018
099ae47
Revert "[XRay] Move-only Allocator, FunctionCallTrie, and Array"
deanberris Dec 6, 2018
e85a118
Propagating prior merge from 'llvm.org/master'.
Dec 6, 2018
0522a16
Add new `__sanitizer_mz_default_zone()` API which returns the address…
danliew Dec 6, 2018
165de65
[Sanitizer] getmntinfo support in FreeBSD
devnexen Dec 6, 2018
f5ef603
[test] Add missing cmake include for building libFuzzer alone
mgorny Dec 6, 2018
95f2e43
Propagating prior merge from 'llvm.org/master'.
Dec 6, 2018
eb2c17a
Re-land "[XRay] Move-only Allocator, FunctionCallTrie, and Array"
deanberris Dec 7, 2018
fc9968f
[XRay] Use preallocated memory for XRay profiling
deanberris Dec 7, 2018
6d0b0c1
Propagating prior merge from 'llvm.org/master'.
Dec 7, 2018
d42fc1b
[Sanitizer] Separate FreeBSD interception data structures
devnexen Dec 7, 2018
c9e5760
Missing freebsd files.
devnexen Dec 7, 2018
11ecbe6
Add new interceptor for strtonum(3)
krytarowski Dec 7, 2018
f0835eb
Add a new interceptor for fparseln(3) from NetBSD
krytarowski Dec 7, 2018
195044d
Add a new interceptors for statvfs1(2) and fstatvfs1(2) from NetBSD
krytarowski Dec 7, 2018
3234149
Fix IOError exception being raised in `asan_symbolize.py`crash when
danliew Dec 7, 2018
6b9f788
Add interceptors for the strtoi(3)/strtou(3) from NetBSD
krytarowski Dec 7, 2018
bfa6679
[Sanitizer] capsicum api subset interception
devnexen Dec 8, 2018
c874ebd
Conflict fixes from previous commits.
devnexen Dec 8, 2018
cbda744
Fix style.
devnexen Dec 8, 2018
1318222
[sanitizer] Suppress lint warning conflicting with clang-format
vitalybuka Dec 8, 2018
1a2736c
[sanitizer] Add lit.local.cfg for FreeBSD
vitalybuka Dec 8, 2018
27af3db
Add interceptors for the sha1(3) from NetBSD
krytarowski Dec 8, 2018
8f77a2e
Add interceptors for the md4(3) from NetBSD
krytarowski Dec 8, 2018
086caf6
Add interceptors for the rmd160(3) from NetBSD
krytarowski Dec 8, 2018
9a08746
Add interceptors for md5(3) from NetBSD
krytarowski Dec 8, 2018
660f744
Revert a chunk of previous change in sanitizer_platform_limits_netbsd.h
krytarowski Dec 8, 2018
8627b4b
Fix a typo in the strtoi test
krytarowski Dec 8, 2018
33b7929
Propagating prior merge from 'llvm.org/master'.
Dec 8, 2018
672c835
Fix conflict types for this FreeBSD test.
devnexen Dec 8, 2018
927b333
Propagating prior merge from 'llvm.org/master'.
Dec 8, 2018
42ac31e
Add new interceptors for FILE repositioning stream
krytarowski Dec 10, 2018
9e2ff43
Add interceptors for md2(3) from NetBSD
krytarowski Dec 10, 2018
0ddb9d0
Add interceptors for the sha2(3) from NetBSD
krytarowski Dec 10, 2018
a3e78a7
Add data types needed for md2(3)/NetBSD interceptors
krytarowski Dec 10, 2018
ff5baac
Propagating prior merge from 'llvm.org/master'.
Dec 10, 2018
7230598
[Sanitizer] expand sysctl/getmntinfo/nl_langinfo to Darwin
devnexen Dec 10, 2018
e527a51
[builtins] Remove trailing whitespaces, NFC
kongy Dec 10, 2018
1f21fc0
Propagating prior merge from 'llvm.org/master'.
Dec 10, 2018
30392c7
Fix bug where we'd try symbolize a second time with the same arguments.
danliew Dec 11, 2018
39adb65
[Sanitizer] Expand FSEEK interception to FreeBSD
devnexen Dec 11, 2018
b78e45d
Propagating prior merge from 'llvm.org/master'.
Dec 11, 2018
7503556
[hwasan] Verify Android TLS slot at startup.
eugenis Dec 12, 2018
a37a922
Switch Android from TLS_SLOT_TSAN(8) to TLS_SLOT_SANITIZER(6)
rprichard Dec 12, 2018
9ad6a32
[hwasan] Link ubsan_cxx to shared runtime library.
eugenis Dec 12, 2018
ac763b2
[asan] Don't check ODR violations for particular types of globals
vitalybuka Dec 13, 2018
71553eb
Add new interceptors for vis(3) API in NetBSD
krytarowski Dec 13, 2018
429bc2d
Add a new interceptors for cdbr(3) and cdbw(3) API from NetBSD
krytarowski Dec 13, 2018
cea3598
Propagating prior merge from 'llvm.org/master'.
Dec 13, 2018
78f1743
[Sanitizer] capsicum further support of the API
devnexen Dec 13, 2018
81d7839
Implement a small subset of the C++ `type_traits` header inside sanit…
danliew Dec 13, 2018
f4b23d2
[Sanitizer] Fix TSan check failure
yln Dec 12, 2018
cd0ed89
Revert "Switch Android from TLS_SLOT_TSAN(8) to TLS_SLOT_SANITIZER(6)"
eugenis Dec 13, 2018
8183d2d
Windows ASan: Instrument _msize_base()
vlad902 Dec 14, 2018
3ce0131
Propagating prior merge from 'llvm.org/master'.
Dec 14, 2018
7255316
[sanitizer] Fix nolibc internal_sleep
MaskRay Dec 14, 2018
e9af121
Introduce `AddressSpaceView` template parameter to `SizeClassAllocato…
danliew Dec 14, 2018
7aca635
Propagating prior merge from 'llvm.org/master'.
Dec 14, 2018
ececda6
Set shared_libasan_path in lit tests for NetBSD
krytarowski Dec 14, 2018
cd24f2f
Mark interception_failure_test.cc as passing for NetBSD and asan-dyna…
krytarowski Dec 14, 2018
e1f7b1b
[libFuzzer] make len_control less aggressive
kcc Dec 14, 2018
5a7a94c
hwasan: Fix typo: Previosly -> Previously.
pcc Dec 15, 2018
b6b03b4
Fix typo in test cases as well.
pcc Dec 15, 2018
5088473
Fix internal_sleep() for NetBSD
krytarowski Dec 15, 2018
19e2af5
Enable SANITIZER_INTERCEPT_PTHREAD_GETNAME_NP for NetBSD
krytarowski Dec 15, 2018
81e3709
Enable test/msan/pthread_getname_np.cc for NetBSD
krytarowski Dec 15, 2018
0bf03cf
Propagating prior merge from 'llvm.org/master'.
Dec 15, 2018
384486f
Expand TSan sysroot workaround to NetBSD
krytarowski Dec 16, 2018
79d385b
Improve the comment in previous
krytarowski Dec 16, 2018
992ad57
Propagating prior merge from 'llvm.org/master'.
Dec 16, 2018
dda1670
[Sanitizer] capsicum variadic api subset
devnexen Dec 17, 2018
4b81a45
Don't trigger sanitizer initialization from `sysctlbyname` and `sysc…
danliew Dec 17, 2018
4ec0ecb
Propagating prior merge from 'llvm.org/master'.
Dec 17, 2018
5e25fbb
hwasan: Allow range of frame descriptors to be empty.
pcc Dec 18, 2018
a86a3e7
Propagating prior merge from 'llvm.org/master'.
Dec 18, 2018
dceff36
Fix a gcc -Wpedantix warning
nico Dec 18, 2018
24d574e
Propagating prior merge from 'llvm.org/master'.
Dec 18, 2018
e523463
[asan] Restore ODR-violation detection on vtables
vitalybuka Dec 18, 2018
4f4dc1f
[asan] Disable ODR test on Android
vitalybuka Dec 19, 2018
c3cc767
tsan: align default value of detect_deadlocks flag with actual behavior
dvyukov Dec 19, 2018
7d2f6c8
Propagating prior merge from 'llvm.org/master'.
Dec 19, 2018
52af2fe
Reimplement Thread Static Data ASan routines with TLS
krytarowski Dec 19, 2018
a91ac00
[compiler-rt][builtins][PowerPC] Enable builtins tests on PowerPC 64 …
amy-kwan Dec 19, 2018
1d28c14
[sanitizer_common] Fix sha2 interceptors not to use vars in array len
mgorny Dec 19, 2018
3a3084e
[sanitizer] Remove spurious semi-colon
Dec 19, 2018
04f072f
[sanitizer] Support running without fd 0,1,2.
eugenis Dec 19, 2018
b2c680c
Propagating prior merge from 'llvm.org/master'.
Dec 19, 2018
84f52e9
[asan] Disable test incompatible with new Android
vitalybuka Dec 20, 2018
e9b5b2f
Remove pointless casts.
eugenis Dec 20, 2018
61b6a5a
[HWASAN] Add support for memory intrinsics
eleviant Dec 20, 2018
94853aa
[asan] Fix and re-enable few test on Android
vitalybuka Dec 20, 2018
0d4da71
Propagating prior merge from 'llvm.org/master'.
Dec 20, 2018
58bd9bd
[asan] Revert still Androind incompatible tests enabled in r349736
vitalybuka Dec 20, 2018
bcfc368
Revert "[sanitizer] Support running without fd 0,1,2."
ilya-biryukov Dec 20, 2018
ff3c1b3
[Sanitizer] Enable vis api on FreeBSD
devnexen Dec 20, 2018
1b7e547
Propagating prior merge from 'llvm.org/master'.
Dec 20, 2018
6e82742
[sanitizer] Support running without fd 0,1,2.
eugenis Dec 20, 2018
56b6455
Disable running LSan tests on Darwin due the recent changes
danliew-apple Dec 20, 2018
bfa1b90
[asan] Disable test on powerpc64be
vitalybuka Dec 20, 2018
6a2e192
Revert "[asan] Disable test on powerpc64be"
vitalybuka Dec 20, 2018
c2bc9af
Propagating prior merge from 'llvm.org/master'.
Dec 20, 2018
eefb21a
[CMake] Print out the list of sanitizers that the sanitizer_common te…
danliew Dec 21, 2018
8a35525
[xray] [tests] Detect and handle missing LLVMTestingSupport gracefully
mgorny Dec 21, 2018
08d1516
[Sanitizer] Enable strtonum in FreeBSD
devnexen Dec 21, 2018
ca77489
[Sanitizer] Move the unit test in the right place.
devnexen Dec 21, 2018
219145f
Introduce `AddressSpaceView` template parameter to `SizeClassAllocato…
danliew Dec 21, 2018
ab629b8
Introduce `AddressSpaceView` template parameter to `CombinedAllocator`.
danliew Dec 21, 2018
cf2bf1b
Fix `static_assert()` scope in `SizeClassAllocator32`.
danliew Dec 21, 2018
c81ed59
Fix `static_assert()` scope in `CombinedAllocator`.
danliew Dec 21, 2018
4883225
Fix comment typo.
danliew Dec 21, 2018
2835fe7
Add support for LLVM profile for NetBSD
krytarowski Dec 22, 2018
a5ed4c7
Propagating prior merge from 'llvm.org/master'.
Dec 22, 2018
c697faf
[Sanitizer] Enable POSIX regex api on FreeBSD.
devnexen Dec 22, 2018
2eb5dbb
Propagating prior merge from 'llvm.org/master'.
Dec 22, 2018
cd741c9
Set the default SANITIZER_CXX_ABI library to libc++ for FreeBSD, and
DimitryAndric Dec 23, 2018
aa2e555
[xray] Disable alignas() for thread_local objects on NetBSD
mgorny Dec 23, 2018
4448e3b
[xray] Detect MPROTECT and error out when it's enabled (on NetBSD)
mgorny Dec 23, 2018
13b13eb
Propagating prior merge from 'llvm.org/master'.
Dec 23, 2018
ba9f9b1
[msan] Disable tail call optimization in msan rtl.
eugenis Dec 27, 2018
8d86566
Revert "[msan] Disable tail call optimization in msan rtl."
eugenis Dec 27, 2018
41ff34a
Do not rely on that subject of ErrorAllocTypeMismatch is a heap address.
marxin Dec 27, 2018
b90bbd5
Propagating prior merge from 'llvm.org/master'.
Dec 27, 2018
217f2f7
[Sanitizer] Enable FTS api on FreeBSD
devnexen Dec 27, 2018
1f2d032
Adjust NetBSD/md[45].cc to be portable to more environments
krytarowski Dec 27, 2018
21bd4bd
Adjust NetBSD/md2.cc to be portable to more environments
krytarowski Dec 27, 2018
f4a536a
Adjust NetBSD/sha2.cc to be portable to more environments
krytarowski Dec 27, 2018
69aff42
[sanitizer] Avoid memset call in tsan
rupprecht Dec 27, 2018
3bc9b9b
[Sanitizer] Add fstab api to FreeBSD/Linux
devnexen Dec 27, 2018
60b1bb1
getfsent, unit test.
devnexen Dec 27, 2018
9ce7b27
[asan] Support running without /proc.
eugenis Dec 27, 2018
4d9ac42
Reimplement Thread Static Data MSan routines with TLS
krytarowski Dec 27, 2018
da41675
Enable posix regex interceptors on linux.
eugenis Dec 27, 2018
8be5bda
[asan] Fix build on windows.
eugenis Dec 27, 2018
2de4ff7
Enable asan_and_llvm_coverage_test.cc for NetBSD
krytarowski Dec 27, 2018
df1f462
Update NetBSD ioctl(2) entries with 8.99.28
krytarowski Dec 27, 2018
3ebc523
Fix a mistake in previous
krytarowski Dec 28, 2018
9341ca9
Revert "[asan] Support running without /proc.", +1
eugenis Dec 28, 2018
33e6620
Propagating prior merge from 'llvm.org/master'.
Dec 28, 2018
e2e466f
[Sanitizer] Intercept arc4random_buf / arc4random_addrandom on FreeBS…
devnexen Dec 28, 2018
d5bfa8c
[Sanitizer] arc4random unit test missing case.
devnexen Dec 28, 2018
51d3c23
Speculative fix for xray assembler error on MachO since r349976
rnk Dec 28, 2018
5e88c7c
Introduce `LocalAddressSpaceView::LoadWritable(...)` and make the `Lo…
danliew Dec 28, 2018
cba20ad
[Sanitizer] Enable getfsent api for Darwin
devnexen Dec 29, 2018
decb231
Add support for background thread on NetBSD in ASan
krytarowski Dec 29, 2018
3d5a366
Reenable hard_rss_limit_mb_test.cc for android-26
krytarowski Dec 29, 2018
2380329
Propagating prior merge from 'llvm.org/master'.
Dec 29, 2018
a96f950
[sanitizer_common] Add tests for more stdio.h functions
mgorny Jan 2, 2019
90c2349
[sanitizer_common] Rewrite more Posix tests to use asserts
mgorny Jan 2, 2019
b7de60b
[sanitizer_common] Fix devname_r() return type on !NetBSD
mgorny Jan 2, 2019
a9b6054
[sanitizer_common] Add tests for more *putc and *getc variants
mgorny Jan 2, 2019
7ef6885
[sanitizer_common] Add test for popen()
mgorny Jan 2, 2019
8b9ea8f
[sanitizer_common] Add tests for NetBSD funopen*() functions
mgorny Jan 2, 2019
1ee32a1
[sanitizer_common] Implement popen, popenve, pclose interceptors
mgorny Jan 2, 2019
2698229
[sanitizer_common] Implement funopen*() interceptors for NetBSD
mgorny Jan 2, 2019
a15c094
[sanitizer] Android does not provide <fstab.h>
eugenis Jan 2, 2019
af66c5c
[Sanitizer] Enable funopen on FreeBSD
devnexen Jan 2, 2019
92f9658
[Sanitizer] Disable arc4random seeding apis on for Non NetBSD platforms.
devnexen Jan 2, 2019
8860149
[TSan] Enable detection of lock-order-inversions for Objective-C @syn…
yln Jan 2, 2019
f25b990
[Sanitizer] Fix typo in funopen unit test.
devnexen Jan 2, 2019
142133e
Propagating prior merge from 'llvm.org/master'.
Jan 2, 2019
c680622
Re-disable the sanitizer_common/TestCases/Posix/getfsent.cc test. Rec…
kubamracek Jan 3, 2019
dd450bf
[hwasan] Switch to 64 allocator with a dense size class map.
eugenis Jan 3, 2019
14f83cd
Merge branch 'llvm.org/master/5.1' into swift-5.1-branch
Jan 4, 2019
328f76c
Explicitly set C++ standard for `Posix/no-fd.cc` ASan test.
danliew Jan 15, 2019
c2eb402
Fix sanitizer tool list used to generate sanitizer_common tests to be…
danliew Jan 16, 2019
f843cc0
Disable LSan sanitizer_common tests due to AppleClang not supporting
danliew-apple Jan 22, 2019
32b38dd
Re-branch stable from swift-5.1-branch
shahmishal Feb 19, 2019
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
75 changes: 64 additions & 11 deletions CMakeLists.txt
Expand Up @@ -59,6 +59,9 @@ if (NOT COMPILER_RT_ASAN_SHADOW_SCALE STREQUAL "")
-D${COMPILER_RT_ASAN_SHADOW_SCALE_DEFINITION})
endif()

set(COMPILER_RT_HWASAN_WITH_INTERCEPTORS ON CACHE BOOLEAN
"Enable libc interceptors in HWASan (testing mode)")

set(COMPILER_RT_BAREMETAL_BUILD OFF CACHE BOOLEAN
"Build for a bare-metal target.")

Expand All @@ -79,6 +82,61 @@ if (COMPILER_RT_STANDALONE_BUILD)
or specify the PYTHON_EXECUTABLE CMake variable.")
endif()

# Ensure that fat libraries are built correctly on Darwin
if(CMAKE_SYSTEM_NAME STREQUAL Darwin)
if(NOT CMAKE_LIBTOOL)
find_program(CMAKE_XCRUN
NAMES
xcrun)
if(CMAKE_XCRUN)
execute_process(COMMAND
${CMAKE_XCRUN} -find libtool
OUTPUT_VARIABLE
CMAKE_LIBTOOL
OUTPUT_STRIP_TRAILING_WHITESPACE)
endif()

if(NOT CMAKE_LIBTOOL OR NOT EXISTS CMAKE_LIBTOOL)
find_program(CMAKE_LIBTOOL
NAMES
libtool)
endif()
endif()

get_property(languages GLOBAL PROPERTY ENABLED_LANGUAGES)

if(CMAKE_LIBTOOL)
set(CMAKE_LIBTOOL ${CMAKE_LIBTOOL} CACHE PATH "libtool executable")
message(STATUS "Found libtool - ${CMAKE_LIBTOOL}")

execute_process(COMMAND
${CMAKE_LIBTOOL} -V
OUTPUT_VARIABLE
LIBTOOL_V_OUTPUT
OUTPUT_STRIP_TRAILING_WHITESPACE)
if("${LIBTOOL_V_OUTPUT}" MATCHES ".*cctools-([0-9]+).*")
string(REGEX REPLACE ".*cctools-([0-9]+).*" "\\1" LIBTOOL_VERSION ${LIBTOOL_V_OUTPUT})
if(NOT LIBTOOL_VERSION VERSION_LESS "862")
set(LIBTOOL_NO_WARNING_FLAG "-no_warning_for_no_symbols")
endif()
endif()

foreach(lang ${languages})
set(CMAKE_${lang}_CREATE_STATIC_LIBRARY "\"${CMAKE_LIBTOOL}\" -static ${LIBTOOL_NO_WARNING_FLAG} -o <TARGET> <LINK_FLAGS> <OBJECTS>")
endforeach()
endif()

# Workaround SIP :-(
if(DYLD_LIBRARY_PATH)
set(dyld_envar "DYLD_LIBRARY_PATH=${DYLD_LIBRARY_PATH}")
foreach(lang ${languages})
foreach(cmd ${CMAKE_${lang}_CREATE_STATIC_LIBRARY})
list(APPEND CMAKE_${lang}_CREATE_STATIC_LIBRARY_NEW "${dyld_envar} ${cmd}")
endforeach()
endforeach()
endif()
endif()

# Define default arguments to lit.
set(LIT_ARGS_DEFAULT "-sv")
if (MSVC OR XCODE)
Expand All @@ -89,12 +147,12 @@ if (COMPILER_RT_STANDALONE_BUILD)
endif()

construct_compiler_rt_default_triple()
if ("${COMPILER_RT_DEFAULT_TARGET_ABI}" MATCHES "hf$")
if ("${COMPILER_RT_DEFAULT_TARGET_TRIPLE}" MATCHES ".*hf$")
if (${COMPILER_RT_DEFAULT_TARGET_ARCH} MATCHES "^arm")
set(COMPILER_RT_DEFAULT_TARGET_ARCH "armhf")
endif()
endif()
if ("${COMPILER_RT_DEFAULT_TARGET_ABI}" MATCHES "^android")
if ("${COMPILER_RT_DEFAULT_TARGET_TRIPLE}" MATCHES ".*android.*")
set(ANDROID 1)
endif()
pythonize_bool(ANDROID)
Expand Down Expand Up @@ -142,7 +200,7 @@ set(CXXABIS none default libstdc++ libc++)
set_property(CACHE SANITIZER_CXX_ABI PROPERTY STRINGS ;${CXXABIS})

if (SANITIZER_CXX_ABI STREQUAL "default")
if (APPLE)
if (APPLE OR CMAKE_SYSTEM_NAME MATCHES "FreeBSD")
set(SANITIZER_CXX_ABI_LIBNAME "libc++")
set(SANITIZER_CXX_ABI_SYSTEM 1)
elseif (FUCHSIA)
Expand Down Expand Up @@ -310,11 +368,14 @@ append_list_if(COMPILER_RT_HAS_WD4391_FLAG /wd4391 SANITIZER_COMMON_CFLAGS)
append_list_if(COMPILER_RT_HAS_WD4722_FLAG /wd4722 SANITIZER_COMMON_CFLAGS)
append_list_if(COMPILER_RT_HAS_WD4800_FLAG /wd4800 SANITIZER_COMMON_CFLAGS)

append_list_if(MINGW -fms-extensions SANITIZER_COMMON_CFLAGS)

# Set common link flags.
append_list_if(COMPILER_RT_HAS_NODEFAULTLIBS_FLAG -nodefaultlibs SANITIZER_COMMON_LINK_FLAGS)

if (COMPILER_RT_USE_BUILTINS_LIBRARY)
list(APPEND SANITIZER_COMMON_LINK_LIBS ${COMPILER_RT_BUILTINS_LIBRARY})
string(REPLACE "-Wl,-z,defs" "" CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS}")
else()
if (ANDROID)
append_list_if(COMPILER_RT_HAS_GCC_LIB gcc SANITIZER_COMMON_LINK_LIBS)
Expand All @@ -325,14 +386,6 @@ endif()

append_list_if(COMPILER_RT_HAS_LIBC c SANITIZER_COMMON_LINK_LIBS)

if(ANDROID)
# Put the Sanitizer shared libraries in the global group. For more details, see
# android-changes-for-ndk-developers.md#changes-to-library-search-order
if (COMPILER_RT_HAS_Z_GLOBAL)
list(APPEND SANITIZER_COMMON_LINK_FLAGS -Wl,-z,global)
endif()
endif()

if("${CMAKE_SYSTEM_NAME}" STREQUAL "Fuchsia")
list(APPEND SANITIZER_COMMON_LINK_FLAGS -Wl,-z,defs,-z,now,-z,relro)
list(APPEND SANITIZER_COMMON_LINK_LIBS zircon)
Expand Down
40 changes: 25 additions & 15 deletions cmake/Modules/AddCompilerRT.cmake
Expand Up @@ -77,7 +77,7 @@ function(add_compiler_rt_object_libraries name)
endif()

set_target_compile_flags(${libname}
${CMAKE_CXX_FLAGS} ${extra_cflags_${libname}} ${target_flags})
${extra_cflags_${libname}} ${target_flags})
set_property(TARGET ${libname} APPEND PROPERTY
COMPILE_DEFINITIONS ${LIB_DEFS})
set_target_properties(${libname} PROPERTIES FOLDER "Compiler-RT Libraries")
Expand Down Expand Up @@ -357,19 +357,20 @@ set(COMPILER_RT_GTEST_CFLAGS
-I${COMPILER_RT_GTEST_PATH}
)

# Mocking support.
set(COMPILER_RT_GMOCK_PATH ${LLVM_MAIN_SRC_DIR}/utils/unittest/googlemock)
set(COMPILER_RT_GMOCK_SOURCE ${COMPILER_RT_GMOCK_PATH}/src/gmock-all.cc)
set(COMPILER_RT_GMOCK_CFLAGS
-DGTEST_NO_LLVM_RAW_OSTREAM=1
-DGTEST_HAS_RTTI=0
-I${COMPILER_RT_GMOCK_PATH}/include
-I${COMPILER_RT_GMOCK_PATH}
)

append_list_if(COMPILER_RT_DEBUG -DSANITIZER_DEBUG=1 COMPILER_RT_UNITTEST_CFLAGS)
append_list_if(COMPILER_RT_HAS_WCOVERED_SWITCH_DEFAULT_FLAG -Wno-covered-switch-default COMPILER_RT_UNITTEST_CFLAGS)

if(MSVC)
# clang doesn't support exceptions on Windows yet.
list(APPEND COMPILER_RT_UNITTEST_CFLAGS -D_HAS_EXCEPTIONS=0)

# We should teach clang to understand "#pragma intrinsic", see PR19898.
list(APPEND COMPILER_RT_UNITTEST_CFLAGS -Wno-undefined-inline)

# Clang doesn't support SEH on Windows yet.
list(APPEND COMPILER_RT_GTEST_CFLAGS -DGTEST_HAS_SEH=0)

# gtest use a lot of stuff marked as deprecated on Windows.
list(APPEND COMPILER_RT_GTEST_CFLAGS -Wno-deprecated-declarations)
endif()
Expand Down Expand Up @@ -550,6 +551,9 @@ macro(add_custom_libcxx name prefix)
set(PASSTHROUGH_VARIABLES
CMAKE_C_COMPILER_TARGET
CMAKE_CXX_COMPILER_TARGET
CMAKE_SHARED_LINKER_FLAGS
CMAKE_MODULE_LINKER_FLAGS
CMAKE_EXE_LINKER_FLAGS
CMAKE_INSTALL_PREFIX
CMAKE_MAKE_PROGRAM
CMAKE_LINKER
Expand All @@ -562,14 +566,20 @@ macro(add_custom_libcxx name prefix)
CMAKE_SYSROOT
CMAKE_SYSTEM_NAME)
foreach(variable ${PASSTHROUGH_VARIABLES})
if(${variable})
list(APPEND CMAKE_PASSTHROUGH_VARIABLES -D${variable}=${${variable}})
get_property(is_value_set CACHE ${variable} PROPERTY VALUE SET)
if(${is_value_set})
get_property(value CACHE ${variable} PROPERTY VALUE)
list(APPEND CMAKE_PASSTHROUGH_VARIABLES -D${variable}=${value})
endif()
endforeach()

string(REPLACE ";" " " FLAGS_STRING "${LIBCXX_CFLAGS}")
set(LIBCXX_C_FLAGS "${FLAGS_STRING}")
set(LIBCXX_CXX_FLAGS "${FLAGS_STRING}")
string(REPLACE ";" " " LIBCXX_C_FLAGS "${LIBCXX_CFLAGS}")
get_property(C_FLAGS CACHE CMAKE_C_FLAGS PROPERTY VALUE)
set(LIBCXX_C_FLAGS "${LIBCXX_C_FLAGS} ${C_FLAGS}")

string(REPLACE ";" " " LIBCXX_CXX_FLAGS "${LIBCXX_CFLAGS}")
get_property(CXX_FLAGS CACHE CMAKE_CXX_FLAGS PROPERTY VALUE)
set(LIBCXX_CXX_FLAGS "${LIBCXX_CXX_FLAGS} ${CXX_FLAGS}")

ExternalProject_Add(${name}
DEPENDS ${name}-clobber ${LIBCXX_DEPS}
Expand Down
133 changes: 87 additions & 46 deletions cmake/Modules/CompilerRTUtils.cmake
Expand Up @@ -210,47 +210,91 @@ macro(load_llvm_config)
find_program(LLVM_CONFIG_PATH "llvm-config"
DOC "Path to llvm-config binary")
if (NOT LLVM_CONFIG_PATH)
message(FATAL_ERROR "llvm-config not found: specify LLVM_CONFIG_PATH")
message(WARNING "UNSUPPORTED COMPILER-RT CONFIGURATION DETECTED: "
"llvm-config not found.\n"
"Reconfigure with -DLLVM_CONFIG_PATH=path/to/llvm-config.")
endif()
endif()
execute_process(
COMMAND ${LLVM_CONFIG_PATH} "--obj-root" "--bindir" "--libdir" "--src-root"
RESULT_VARIABLE HAD_ERROR
OUTPUT_VARIABLE CONFIG_OUTPUT)
if (HAD_ERROR)
message(FATAL_ERROR "llvm-config failed with status ${HAD_ERROR}")
endif()
string(REGEX REPLACE "[ \t]*[\r\n]+[ \t]*" ";" CONFIG_OUTPUT ${CONFIG_OUTPUT})
list(GET CONFIG_OUTPUT 0 BINARY_DIR)
list(GET CONFIG_OUTPUT 1 TOOLS_BINARY_DIR)
list(GET CONFIG_OUTPUT 2 LIBRARY_DIR)
list(GET CONFIG_OUTPUT 3 MAIN_SRC_DIR)
if (LLVM_CONFIG_PATH)
execute_process(
COMMAND ${LLVM_CONFIG_PATH} "--obj-root" "--bindir" "--libdir" "--src-root" "--includedir"
RESULT_VARIABLE HAD_ERROR
OUTPUT_VARIABLE CONFIG_OUTPUT)
if (HAD_ERROR)
message(FATAL_ERROR "llvm-config failed with status ${HAD_ERROR}")
endif()
string(REGEX REPLACE "[ \t]*[\r\n]+[ \t]*" ";" CONFIG_OUTPUT ${CONFIG_OUTPUT})
list(GET CONFIG_OUTPUT 0 BINARY_DIR)
list(GET CONFIG_OUTPUT 1 TOOLS_BINARY_DIR)
list(GET CONFIG_OUTPUT 2 LIBRARY_DIR)
list(GET CONFIG_OUTPUT 3 MAIN_SRC_DIR)
list(GET CONFIG_OUTPUT 4 INCLUDE_DIR)

set(LLVM_BINARY_DIR ${BINARY_DIR} CACHE PATH "Path to LLVM build tree")
set(LLVM_TOOLS_BINARY_DIR ${TOOLS_BINARY_DIR} CACHE PATH "Path to llvm/bin")
set(LLVM_LIBRARY_DIR ${LIBRARY_DIR} CACHE PATH "Path to llvm/lib")
set(LLVM_MAIN_SRC_DIR ${MAIN_SRC_DIR} CACHE PATH "Path to LLVM source tree")
set(LLVM_BINARY_DIR ${BINARY_DIR} CACHE PATH "Path to LLVM build tree")
set(LLVM_LIBRARY_DIR ${LIBRARY_DIR} CACHE PATH "Path to llvm/lib")
set(LLVM_MAIN_SRC_DIR ${MAIN_SRC_DIR} CACHE PATH "Path to LLVM source tree")
set(LLVM_TOOLS_BINARY_DIR ${TOOLS_BINARY_DIR} CACHE PATH "Path to llvm/bin")
set(LLVM_INCLUDE_DIR ${INCLUDE_DIR} CACHE PATH "Paths to LLVM headers")

# Make use of LLVM CMake modules.
# --cmakedir is supported since llvm r291218 (4.0 release)
execute_process(
COMMAND ${LLVM_CONFIG_PATH} --cmakedir
RESULT_VARIABLE HAD_ERROR
OUTPUT_VARIABLE CONFIG_OUTPUT)
if(NOT HAD_ERROR)
string(STRIP "${CONFIG_OUTPUT}" LLVM_CMAKE_PATH_FROM_LLVM_CONFIG)
file(TO_CMAKE_PATH ${LLVM_CMAKE_PATH_FROM_LLVM_CONFIG} LLVM_CMAKE_PATH)
else()
file(TO_CMAKE_PATH ${LLVM_BINARY_DIR} LLVM_BINARY_DIR_CMAKE_STYLE)
set(LLVM_CMAKE_PATH "${LLVM_BINARY_DIR_CMAKE_STYLE}/lib${LLVM_LIBDIR_SUFFIX}/cmake/llvm")
endif()
# Detect if we have the LLVMXRay and TestingSupport library installed and
# available from llvm-config.
execute_process(
COMMAND ${LLVM_CONFIG_PATH} "--ldflags" "--libs" "xray"
RESULT_VARIABLE HAD_ERROR
OUTPUT_VARIABLE CONFIG_OUTPUT)
if (HAD_ERROR)
message(WARNING "llvm-config finding xray failed with status ${HAD_ERROR}")
set(COMPILER_RT_HAS_LLVMXRAY FALSE)
else()
string(REGEX REPLACE "[ \t]*[\r\n]+[ \t]*" ";" CONFIG_OUTPUT ${CONFIG_OUTPUT})
list(GET CONFIG_OUTPUT 0 LDFLAGS)
list(GET CONFIG_OUTPUT 1 LIBLIST)
set(LLVM_XRAY_LDFLAGS ${LDFLAGS} CACHE STRING "Linker flags for LLVMXRay library")
set(LLVM_XRAY_LIBLIST ${LIBLIST} CACHE STRING "Library list for LLVMXRay")
set(COMPILER_RT_HAS_LLVMXRAY TRUE)
endif()

list(APPEND CMAKE_MODULE_PATH "${LLVM_CMAKE_PATH}")
# Get some LLVM variables from LLVMConfig.
include("${LLVM_CMAKE_PATH}/LLVMConfig.cmake")
set(COMPILER_RT_HAS_LLVMTESTINGSUPPORT FALSE)
execute_process(
COMMAND ${LLVM_CONFIG_PATH} "--ldflags" "--libs" "testingsupport"
RESULT_VARIABLE HAD_ERROR
OUTPUT_VARIABLE CONFIG_OUTPUT)
if (HAD_ERROR)
message(WARNING "llvm-config finding testingsupport failed with status ${HAD_ERROR}")
else()
string(REGEX REPLACE "[ \t]*[\r\n]+[ \t]*" ";" CONFIG_OUTPUT ${CONFIG_OUTPUT})
list(GET CONFIG_OUTPUT 0 LDFLAGS)
list(GET CONFIG_OUTPUT 1 LIBLIST)
if (LIBLIST STREQUAL "")
message(WARNING "testingsupport library not installed, some tests will be skipped")
else()
set(LLVM_TESTINGSUPPORT_LDFLAGS ${LDFLAGS} CACHE STRING "Linker flags for LLVMTestingSupport library")
set(LLVM_TESTINGSUPPORT_LIBLIST ${LIBLIST} CACHE STRING "Library list for LLVMTestingSupport")
set(COMPILER_RT_HAS_LLVMTESTINGSUPPORT TRUE)
endif()
endif()

set(LLVM_LIBRARY_OUTPUT_INTDIR
${LLVM_BINARY_DIR}/${CMAKE_CFG_INTDIR}/lib${LLVM_LIBDIR_SUFFIX})
# Make use of LLVM CMake modules.
# --cmakedir is supported since llvm r291218 (4.0 release)
execute_process(
COMMAND ${LLVM_CONFIG_PATH} --cmakedir
RESULT_VARIABLE HAD_ERROR
OUTPUT_VARIABLE CONFIG_OUTPUT)
if(NOT HAD_ERROR)
string(STRIP "${CONFIG_OUTPUT}" LLVM_CMAKE_PATH_FROM_LLVM_CONFIG)
file(TO_CMAKE_PATH ${LLVM_CMAKE_PATH_FROM_LLVM_CONFIG} LLVM_CMAKE_PATH)
else()
file(TO_CMAKE_PATH ${LLVM_BINARY_DIR} LLVM_BINARY_DIR_CMAKE_STYLE)
set(LLVM_CMAKE_PATH "${LLVM_BINARY_DIR_CMAKE_STYLE}/lib${LLVM_LIBDIR_SUFFIX}/cmake/llvm")
endif()

list(APPEND CMAKE_MODULE_PATH "${LLVM_CMAKE_PATH}")
# Get some LLVM variables from LLVMConfig.
include("${LLVM_CMAKE_PATH}/LLVMConfig.cmake")

set(LLVM_LIBRARY_OUTPUT_INTDIR
${LLVM_BINARY_DIR}/${CMAKE_CFG_INTDIR}/lib${LLVM_LIBDIR_SUFFIX})
endif()
endmacro()

macro(construct_compiler_rt_default_triple)
Expand All @@ -272,11 +316,6 @@ macro(construct_compiler_rt_default_triple)

string(REPLACE "-" ";" TARGET_TRIPLE_LIST ${COMPILER_RT_DEFAULT_TARGET_TRIPLE})
list(GET TARGET_TRIPLE_LIST 0 COMPILER_RT_DEFAULT_TARGET_ARCH)
list(GET TARGET_TRIPLE_LIST 1 COMPILER_RT_DEFAULT_TARGET_OS)
list(LENGTH TARGET_TRIPLE_LIST TARGET_TRIPLE_LIST_LENGTH)
if(TARGET_TRIPLE_LIST_LENGTH GREATER 2)
list(GET TARGET_TRIPLE_LIST 2 COMPILER_RT_DEFAULT_TARGET_ABI)
endif()
# Determine if test target triple is specified explicitly, and doesn't match the
# default.
if(NOT COMPILER_RT_DEFAULT_TARGET_TRIPLE STREQUAL TARGET_TRIPLE)
Expand Down Expand Up @@ -316,13 +355,15 @@ function(filter_builtin_sources output_var exclude_or_include excluded_list)
endfunction()

function(get_compiler_rt_target arch variable)
if(ANDROID AND ${arch} STREQUAL "i386")
set(target "i686${COMPILER_RT_OS_SUFFIX}-${COMPILER_RT_DEFAULT_TARGET_OS}")
string(FIND ${COMPILER_RT_DEFAULT_TARGET_TRIPLE} "-" dash_index)
string(SUBSTRING ${COMPILER_RT_DEFAULT_TARGET_TRIPLE} ${dash_index} -1 triple_suffix)
if(COMPILER_RT_DEFAULT_TARGET_ONLY)
# Use exact spelling when building only for the target specified to CMake.
set(target "${COMPILER_RT_DEFAULT_TARGET_TRIPLE}")
elseif(ANDROID AND ${arch} STREQUAL "i386")
set(target "i686${COMPILER_RT_OS_SUFFIX}${triple_suffix}")
else()
set(target "${arch}-${COMPILER_RT_DEFAULT_TARGET_OS}")
endif()
if(COMPILER_RT_DEFAULT_TARGET_ABI)
set(target "${target}-${COMPILER_RT_DEFAULT_TARGET_ABI}")
set(target "${arch}${triple_suffix}")
endif()
set(${variable} ${target} PARENT_SCOPE)
endfunction()
Expand Down
4 changes: 4 additions & 0 deletions cmake/Modules/HandleCompilerRT.cmake
Expand Up @@ -4,12 +4,16 @@ function(find_compiler_rt_library name variable)
if (CMAKE_CXX_COMPILER_ID MATCHES Clang AND CMAKE_CXX_COMPILER_TARGET)
list(APPEND CLANG_COMMAND "--target=${CMAKE_CXX_COMPILER_TARGET}")
endif()
get_property(SANITIZER_CXX_FLAGS CACHE CMAKE_CXX_FLAGS PROPERTY VALUE)
string(REPLACE " " ";" SANITIZER_CXX_FLAGS "${SANITIZER_CXX_FLAGS}")
list(APPEND CLANG_COMMAND ${SANITIZER_CXX_FLAGS})
execute_process(
COMMAND ${CLANG_COMMAND}
RESULT_VARIABLE HAD_ERROR
OUTPUT_VARIABLE LIBRARY_FILE
)
string(STRIP "${LIBRARY_FILE}" LIBRARY_FILE)
file(TO_CMAKE_PATH "${LIBRARY_FILE}" LIBRARY_FILE)
string(REPLACE "builtins" "${name}" LIBRARY_FILE "${LIBRARY_FILE}")
if (NOT HAD_ERROR AND EXISTS "${LIBRARY_FILE}")
message(STATUS "Found compiler-rt ${name} library: ${LIBRARY_FILE}")
Expand Down
10 changes: 9 additions & 1 deletion cmake/Modules/SanitizerUtils.cmake
Expand Up @@ -51,7 +51,15 @@ endmacro()
# This function is only used on Darwin, where undefined symbols must be specified
# in the linker invocation.
function(add_weak_symbols libname link_flags)
file(STRINGS "${COMPILER_RT_SOURCE_DIR}/lib/${libname}/weak_symbols.txt" WEAK_SYMBOLS)
set(weak_symbols_file "${COMPILER_RT_SOURCE_DIR}/lib/${libname}/weak_symbols.txt")
file(STRINGS "${weak_symbols_file}" WEAK_SYMBOLS)
# Add this file as a configure-time dependency so that changes to this
# file trigger a re-configure. This is necessary so that `${link_flags}`
# is changed when appropriate.
set_property(
DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
APPEND
PROPERTY CMAKE_CONFIGURE_DEPENDS "${weak_symbols_file}")
set(local_link_flags ${${link_flags}})
foreach(SYMBOL ${WEAK_SYMBOLS})
set(local_link_flags ${local_link_flags} -Wl,-U,${SYMBOL})
Expand Down