Commit Graph

7794 Commits

Author SHA1 Message Date
Dmitry Vyukov 1a75379b24 tsan: add a hook to obtain number of reports
Requested in:
https://github.com/golang/go/issues/15972
Will help to fail individual test cases with races.

llvm-svn: 285455
2016-10-28 21:25:37 +00:00
Dmitry Vyukov 0b00a7fc6e tsan: round Go shadow to page boundary
There is a corner case reported in Go issue tracker:
https://github.com/golang/go/issues/17065
On darwin data/bss segments may not be aligned to page bounary
and mmap seems to be behaving differently than on linux
(shrinks instead of enlarge unaligned regions).

Explicitly round shadow to page bounary before mapping
to avoid any such problems.

llvm-svn: 285454
2016-10-28 21:24:29 +00:00
Dmitry Vyukov 8ee6f0c30f tsan: set disable_coredump=0 by default for Go
Go maps shadow memory lazily, so we don't have the huge multi-TB mapping.
Virtual memory consumption is proportional to normal memory usage.
Also in Go core dumps are enabled explicitly with GOTRACEBACK=crash,
if user explicitly requests a core that must be on purpose.

So don't disable core dumps by default.

llvm-svn: 285451
2016-10-28 20:52:22 +00:00
Dmitry Vyukov 5dc443619e tsan: always define SANITIZER_GO
Currently we either define SANITIZER_GO for Go or don't define it at all for C++.
This works fine with preprocessor (ifdef/ifndef/defined), but does not work
for C++ if statements (e.g. if (SANITIZER_GO) {...}). Also this is different
from majority of SANITIZER_FOO macros which are always defined to either 0 or 1.

Always define SANITIZER_GO to either 0 or 1.
This allows to use SANITIZER_GO in expressions and in flag default values.

Also remove kGoMode and kCppMode, which were meant to be used in expressions,
but they are not defined in sanitizer_common code, so SANITIZER_GO become prevalent.

Also convert some preprocessor checks to C++ if's or ternary expressions.

Majority of this change is done mechanically with:
sed "s#ifdef SANITIZER_GO#if SANITIZER_GO#g"
sed "s#ifndef SANITIZER_GO#if \!SANITIZER_GO#g"
sed "s#defined(SANITIZER_GO)#SANITIZER_GO#g"

llvm-svn: 285443
2016-10-28 20:14:18 +00:00
Dmitry Vyukov 693163e723 tsan: fix windows meta mapping
Currently windows fails on startup with:
CHECK failed: gotsan.cc:3077 "(((m - prev_m) / kMetaShadowSize)) == (((p - prev) / kMetaShadowCell))" (0x3ffffffeffffff7e, 0x6ffffff7e)

Make MemToMeta do the same MemToShadow does on windows: add offset instead of or'ing it.

llvm-svn: 285420
2016-10-28 17:25:27 +00:00
Dmitry Vyukov 128bd99808 tsan: fix code formatting
llvm-svn: 285418
2016-10-28 17:23:08 +00:00
Dmitry Vyukov a2a677c542 sanitizer_common: fix description of disable_coredump flag
s/disable_core/disable_coredump/
Add missing space in text.

llvm-svn: 285401
2016-10-28 14:25:51 +00:00
Dmitry Vyukov 7e6f8db7aa tsan: fix windows build
Currently fails with:

C:\workdir\compiler-rt\lib\tsan\go>gcc -c -o race_windows_amd64.syso gotsan.cc -I..\rtl -I..\.. -I..\..\sanitizer_common -I..\..\..\include -m64 -Wall -fno-exceptions -fno-rtti -DSANITIZER_GO -Wno-error=at
tributes -Wno-attributes -Wno-format -Wno-maybe-uninitialized -DSANITIZER_DEBUG=0 -O3 -fomit-frame-pointer -std=c++11 
gotsan.cc:9229:0: warning: ignoring #pragma comment  [-Wunknown-pragmas]
 #pragma comment(linker, "/alternatename:__sanitizer_print_memory_profile=__sanitizer_default_print_memory_profile") // NOLINT
 ^
gotsan.cc: In function 'void __sanitizer_print_memory_profile(int)':
gotsan.cc:9226:17: error: redefinition of 'void __sanitizer_print_memory_profile(int)'
 extern "C" void __sanitizer_print_memory_profile(int top_percent) {}
                 ^
gotsan.cc:6898:6: note: 'void __sanitizer_print_memory_profile(int)' previously defined here
 void __sanitizer_print_memory_profile(int top_percent) {


Remove __sanitizer_print_memory_profile from Go build, it is not needed.

llvm-svn: 285400
2016-10-28 14:16:13 +00:00
Maxim Ostapenko 49504fa211 [asan] Run pthread_create_from_constructor test on x86 targets.
llvm-svn: 285389
2016-10-28 09:49:34 +00:00
Maxim Ostapenko ee84db84d4 [asan] Disable pthread_create_from_constructor test on PowerPC64.
llvm-svn: 285387
2016-10-28 08:45:23 +00:00
Maxim Ostapenko 984f42eed5 [asan/lsan] Avoid possible deadlock in dynamic ASan runtime thread initialization.
There is possible deadlock in dynamic ASan runtime when we dlopen() shared lib
which creates a thread at the global initialization stage. The scenario:

1) dlopen grabs a GI_pthread_mutex_lock in main thread.
2) main thread calls pthread_create, ASan intercepts it, calls real pthread_create
   and waits for the second thread to be "fully initialized".
3) Newly created thread tries to access a thread local disable_counter in LSan
   (to complete its "full initialization") and hangs in tls_get_addr_tail, because
   it also tries to acquire GI_pthread_mutex_lock.

The issue is reproducible on relative recent Glibc versions e.g. 2.23.

Differential Revision: https://reviews.llvm.org/D26028

llvm-svn: 285385
2016-10-28 06:49:53 +00:00
Vitaly Buka d6eee81790 [asan] Test jumps which bypass variables declaration
Summary:
Clang should not generate lifetime intrinsics for such variables. D24693

PR28267

Reviewers: eugenis

Subscribers: llvm-commits, kubabrecka

Differential Revision: https://reviews.llvm.org/D24696

llvm-svn: 285343
2016-10-27 21:02:32 +00:00
Richard Smith f8520559ce Atomics library: provide operations for __int128 when it is available.
llvm-svn: 285265
2016-10-27 01:46:24 +00:00
Anna Zaks be7ae6684f [sanitizers] Set Darwin specific linker and compiler flags for all tests
Looks like we are missing these flags only in tsan and sanitizer-common.

This results in linker warnings in some settings as it can cause the Unit
tests to be built with a different SDK version than that was used to build
the runtime. For example, we are not setting the minimal deployment target
on the tests but are setting the minimal deployment target for the sanitizer
library, which leads to the following warning on some bots: ld: warning:
object file (sanitizer_posix_test.cc.i386.o) was built for newer OSX version
(10.12) than being linked (10.11).

Differential Revision: https://reviews.llvm.org/D25860  https://reviews.llvm.org/D25352

llvm-svn: 285255
2016-10-26 23:23:38 +00:00
Kostya Kortchinsky 71dcc33c58 [scudo] Lay the foundation for 32-bit support
Summary:
In order to support 32-bit platforms, we have to make some adjustments in
multiple locations, one of them being the Scudo chunk header. For it to fit on
64 bits (as a reminder, on x64 it's 128 bits), I had to crunch the space taken
by some of the fields. In order to keep the offset field small, the secondary
allocator was changed to accomodate aligned allocations for larger alignments,
hence making the offset constant for chunks serviced by it.

The resulting header candidate has been added, and further modifications to
allow 32-bit support will follow.

Another notable change is the addition of MaybeStartBackgroudThread() to allow
release of the memory to the OS.

Reviewers: kcc

Subscribers: llvm-commits

Differential Revision: https://reviews.llvm.org/D25688

llvm-svn: 285209
2016-10-26 16:16:58 +00:00
Robert Lougher 8e075fd086 [ubsan] Fix vptr.cpp test to be more resilient. NFC.
The test contains a switch statement in which two of the cases are
tail-merged, with the call to __ubsan_handle_dynamic_type_cache_miss_abort
in the common tail. When tail-merging occurs, the debug location of the
tail is randomly taken from one of the merge inputs.  Luckily for the test,
the expected line number in the check is the one which is chosen by the
tail-merge.  However, if the switch cases are re-ordered the test will
fail.

This patch disables tail-merge, making the test resilient to changes
in tail-merge, and unblocking review D25742.  It does not change the
semantics of the test.

llvm-svn: 285208
2016-10-26 16:02:36 +00:00
Renato Golin 81e8b771d7 [ARM RT] Fix broken clear_cache debug build on ARM
clear_cache is using R7 for the SVC call and that's the frame pointer in
GCC, which is only disabled on -O2/3, so Release builds finish, Debug don't.

Fixes PR30797.

llvm-svn: 285204
2016-10-26 15:20:33 +00:00
Maxim Ostapenko 6aafa89c34 [lsan] Relax check for allocator_end in ProcessGlobalRegionsCallback.
Differential Revision: https://reviews.llvm.org/D25945

llvm-svn: 285177
2016-10-26 06:56:51 +00:00
Nico Weber 0519a53d7d Remove a VS 2012 workaround, we require 2015 now.
llvm-svn: 285096
2016-10-25 18:48:43 +00:00
Peter Collingbourne 4e271c947c scripts: Document existing problems with the symbolizer build script.
Reviewers: eugenis, vitalybuka

Subscribers: llvm-commits, kubabrecka

Differential Revision: https://reviews.llvm.org/D25846

llvm-svn: 285013
2016-10-24 20:15:39 +00:00
Bob Haarman 2bf4a14b3e [compiler-rt] moved __asan_schedule_unregister_globals out of anonymous namespace
Summary: Newer versions of clang complain that __asan_schedule_unregister_globals is unused. Moving it outside the anonymous namespace gets rid of that warning.

Reviewers: rnk, timurrrr

Subscribers: kubabrecka, dberris

Differential Revision: https://reviews.llvm.org/D25921

llvm-svn: 285010
2016-10-24 19:56:18 +00:00
Tim Northover 5adb224bc2 [asan] relax strstr tests.
Darwin's implementation of strstr seems to trigger slightly different failure
modes from Linux since it calls strncmp. All messages seem about equally useful
and correct, so I relaxed the tests so Darwin can pass.

llvm-svn: 285004
2016-10-24 19:07:27 +00:00
Mandeep Singh Grang 249237cb2e [compiler-rt] Remove redundant --check-prefix=CHECK from test
Reviewers: eugenis, rengolin

Subscribers: dberris

Differential Revision: https://reviews.llvm.org/D25892

llvm-svn: 284932
2016-10-23 00:55:12 +00:00
Kostya Serebryany 110e2e52b7 [sanitizers] support strict_string_checks for strncmp
llvm-svn: 284901
2016-10-21 23:52:26 +00:00
Richard Smith 104887ed08 Fix typo (ordered comparison between pointer and 0).
llvm-svn: 284886
2016-10-21 21:37:18 +00:00
Mike Aizatsky 8210959afd adding new symbols to llvm-symbolizer symbol test
llvm-svn: 284773
2016-10-20 20:33:54 +00:00
Strahinja Petrovic 19610a33c1 [lsan] [aarch64] Fix printing of pointers in make check tests
This patch replaces fprintf with print_address function
in LSAN tests. This is necessary because of different 
printing of pointers in fprintf and sanitizer's print 
function. Differential Revision: https://reviews.llvm.org/D25270.

llvm-svn: 284722
2016-10-20 12:25:57 +00:00
Vitaly Buka 832c383b25 [asan] Update test for D25715
Reviewers: eugenis

Subscribers: kubabrecka, llvm-commits

Differential Revision: https://reviews.llvm.org/D25716

llvm-svn: 284548
2016-10-18 23:30:07 +00:00
Kuba Brecka efdc36c802 [tsan] Always use -std=c++11 in TSan tests
We currently only pass -std=c++11 when we have an instrumented libcxx.

Differential Revision: https://reviews.llvm.org/D25740

llvm-svn: 284512
2016-10-18 18:33:42 +00:00
Vedant Kumar 6ff82bd0ec [profile] Mark lprofCurFilename as COMPILER_RT_WEAK
This makes __llvm_profile_set_filename() work across dylib boundaries on
Darwin.

This functionality was originally meant to work on all platforms, but
was moved to a Linux-only directory with r272404. The root cause of the
test failure on Darwin was that lprofCurFilename was not marked weak.
Each dylib maintained its own copy of the variable due to the two-level
namespace.

Tested with check-profile (on Darwin). I don't expect this to regress
other platforms.

Differential Revision: https://reviews.llvm.org/D25707

llvm-svn: 284440
2016-10-18 00:02:28 +00:00
Vitaly Buka 0f90f9bbda [sanitizers] -Wno-macro-redefined for libc++ build
llvm-svn: 284258
2016-10-14 18:19:02 +00:00
Dean Michael Berris 1b09aae82a [compiler-rt][XRay] Support tail call sleds
Summary:
This change depends on D23986 which adds tail call-specific sleds. For
now we treat them first as normal exits, and in the future leave room
for implementing this as a different kind of log entry.

The reason for deferring the change is so that we can keep the naive
logging implementation more accurate without additional complexity for
reading the log. The accuracy is gained in effectively interpreting call
stacks like:

  A()
    B()
      C()

Which when tail-call merged will end up not having any exit entries for
A() nor B(), but effectively in turn can be reasoned about as:

  A()
  B()
  C()

Although we lose the fact that A() had called B() then had called C()
with the naive approach, a later iteration that adds the explicit tail
call entries would be a change in the log format and thus necessitate a
version change for the header. We can do this later to have a chance at
releasing some tools (in D21987) that are able to handle the naive log
format, then support higher version numbers of the log format too.

Reviewers: echristo, kcc, rSerge, majnemer

Subscribers: mehdi_amini, llvm-commits, dberris

Differential Revision: https://reviews.llvm.org/D23988

llvm-svn: 284178
2016-10-13 23:56:54 +00:00
Kostya Serebryany 8633900e03 Make lsan complain loudly when running under ptrace
Summary:
LeakSanitizer does not work with ptrace but currently it
will print warnings (only under verbosity=1) and then proceed
to print tons of false reports.
This patch makes lsan fail hard under ptrace with a verbose message.

https://github.com/google/sanitizers/issues/728

Reviewers: eugenis, vitalybuka, aizatsky

Subscribers: kubabrecka, llvm-commits

Differential Revision: https://reviews.llvm.org/D25538

llvm-svn: 284171
2016-10-13 22:34:13 +00:00
Reid Kleckner 3137c81e56 Make __asan_handle_no_return a no-op during initialization
Some of our existing tests hang on the new Windows bot with this stack:

770, clang_rt.asan_dynamic-i386.dll!__asan::AsanTSDGet+0x3e
771, clang_rt.asan_dynamic-i386.dll!__asan::GetCurrentThread+0x9
772, clang_rt.asan_dynamic-i386.dll!__asan_handle_no_return+0xe
773, clang_rt.asan_dynamic-i386.dll!__asan_wrap__except_handler4_common+0x12
774, ntdll.dll!wcstombs+0xb0 (No unwind info)
775, ntdll.dll!ZwWow64CallFunction64+0x2001 (No unwind info)
776, ntdll.dll!ZwWow64CallFunction64+0x1fd3 (No unwind info)
777, ntdll.dll!KiUserExceptionDispatcher+0xf (No unwind info)
778, clang_rt.asan_dynamic-i386.dll!destroy_fls+0x13
779, ntdll.dll!RtlLockHeap+0xea (No unwind info)
780, ntdll.dll!LdrShutdownProcess+0x7f (No unwind info)
781, ntdll.dll!RtlExitUserProcess+0x81 (No unwind info)
782, kernel32.dll!ExitProcess+0x13 (No unwind info)
783, clang_rt.asan_dynamic-i386.dll!__sanitizer::internal__exit+0xc
784, clang_rt.asan_dynamic-i386.dll!__sanitizer::Die+0x3d
785, clang_rt.asan_dynamic-i386.dll!__asan::AsanInitInternal+0x50b
786, clang_rt.asan_dynamic-i386.dll!__asan::Allocator::Allocate+0x1c
787, clang_rt.asan_dynamic-i386.dll!__asan::Allocator::Calloc+0x43

We hang because AsanDie tries to defend against multi-threaded death by
infinite looping if someone is already exiting. We might want to
reconsider that, but one easy way to avoid getting here is not to let
our noreturn interceptors call back into fragile parts of ASan.

llvm-svn: 284067
2016-10-12 22:33:57 +00:00
Reid Kleckner a8c44c3d0c Follow up to r283955: add _recalloc_base dll thunk
llvm-svn: 284059
2016-10-12 21:59:56 +00:00
Reid Kleckner a335055643 Fix _recalloc redefinition link error in ASan RTL
Fixes PR30329

Patch by Hans-Bernhard Broeker!

llvm-svn: 283955
2016-10-11 23:13:13 +00:00
Vedant Kumar d5454ce10e [profile] Add test for dead_strip+live_support functionality
Differential Revision: https://reviews.llvm.org/D25457

llvm-svn: 283948
2016-10-11 21:48:48 +00:00
Kuba Brecka ab61c74f93 [compiler-rt] Exclude compiler-rt from using -fmodules when LLVM_ENABLE_MODULES=On
Sanitizers are intentionally not including system headers and often declare slightly different function prototypes, which is incompatible with -fmodules and -fcxx-modules. Let’s simply exclude compiler-rt from using -fmodules.

Differential Revision: https://reviews.llvm.org/D25230

llvm-svn: 283658
2016-10-08 09:01:27 +00:00
Qin Zhao 998371f3be [esan] Fix ESan test failure on Debian Sid bot
Summary: Increase early allocation buffer size.

Reviewers: bruening

Subscribers: kubabrecka

Differential Revision: https://reviews.llvm.org/D25380

llvm-svn: 283598
2016-10-07 20:53:35 +00:00
Vedant Kumar 78b2b73ac1 [ubsan] More 0 -> nullptr conversions (NFC)
llvm-svn: 283511
2016-10-06 23:41:57 +00:00
Vedant Kumar 413fce239e [ubsan] 0 -> nullptr (NFC)
llvm-svn: 283506
2016-10-06 22:58:45 +00:00
Vedant Kumar cb7110be27 [ubsan] Turn on 'Has CXXABI' to enable support for -fsanitize=vptr on Darwin
Differential Revision: https://reviews.llvm.org/D24990

llvm-svn: 283466
2016-10-06 16:45:40 +00:00
Sagar Thakur d9a1a53b8d [ESan] [MIPS] Fix workingset-signal-posix.cpp on MIPS
Used uptr for __sanitizer_kernel_sigset_t.sig to avoid byte order issues on big endian systems

Reviewd by bruening.
Differential: D24332 

llvm-svn: 283438
2016-10-06 10:21:42 +00:00
Sagar Thakur 51458256a2 [ESan][MIPS] Adds support for MIPS64
With this patch 12 out of 13 tests are passing.

Reviewed by zhaoqin.
Differential: D23799 

llvm-svn: 283435
2016-10-06 09:58:11 +00:00
Dean Michael Berris 4ef1a69b40 [compiler-rt][XRay][NFC] clang-format XRay sources
llvm-svn: 283421
2016-10-06 07:09:40 +00:00
Anna Zaks cacfb554a8 [compiler-rt] Enable building iOS by default.
llvm-svn: 283379
2016-10-05 20:45:36 +00:00
Anna Zaks bfe61253b8 [asan] Fixup: Switch to using dynamic shadow offset on iOS
Address lint comments.

llvm-svn: 283378
2016-10-05 20:45:34 +00:00
Anna Zaks b17a5db2ee [asan] Reapply: Switch to using dynamic shadow offset on iOS
The VM layout is not stable between iOS version releases, so switch to dynamic shadow offset.

Differential Revision: https://reviews.llvm.org/D25218

llvm-svn: 283375
2016-10-05 20:33:59 +00:00
Anna Zaks 4ca31f8ad9 Revert "[asan] Switch to using dynamic shadow offset on iOS"
This reverts commit b2af965b7924ad793b313996a96633bb72daf629.

Revert as these changes broke a Chromium buildbot.

llvm-svn: 283349
2016-10-05 17:42:24 +00:00
Diana Picus 47cf72c34c [sanitizers] Update sanitizers test to better match glibc internals
Reapply 282061.

One of the tests relying on sem_t's layout gets the wrong value for versions of
glibc newer than 2.21 on platforms that don't have 64-bit atomics (e.g. ARM).

This commit fixes the test to work with:
* versions of glibc >= 2.21 on platforms with 64-bit atomics: unchanged
* versions of glibc >= 2.21 on platforms without 64-bit atomics: the semaphore
value is shifted by SEM_VALUE_SHIFT (which is set to 1 in glibc's internal
headers)
* versions of glibc < 2.21: unchanged

The logic is complicated a bit by the fact that the sanitizers always pick the
oldest version of the symbol available in glibc, which creates discrepancies
between old platforms which contain several versions od the sem_init symbol, and
newer platforms which contain only one.

See the glibc 2.23 sources:
* sysdeps/nptl/internaltypes.h (struct new_sem for glibc >= 2.21 and
                                struct old_sem for glibc < 2.21)
* nptl/sem_getvalue.c

This was uncovered on one of the new buildbots that we are trying to move to
production.

Differential Revision: https://reviews.llvm.org/D24766

llvm-svn: 283299
2016-10-05 07:13:42 +00:00