[compiler-rt] r350139 - Add support for background thread on NetBSD in ASan

Kamil Rytarowski via llvm-commits llvm-commits at lists.llvm.org
Mon Jan 7 06:44:26 PST 2019


I've already replied to Yvan Roux 4 days ago:

It's not possible to guess what's wrong.
 - Is the background thread started at all?
 - Is __local_asan_dyninit optimized away or not executed?
 - Is there a timing issue that test needs more time?

I don't have access to setup to reproduce it myself.

The patch fixed Android setup and enabled NetBSD.

I think that the problem is not caused by my change, but it's a side
effect of other bug/optimization. I can mark the test as XFAIL for your
setup or add ifdef for your Linux configuration to start the background
thread in the same way as before.


On 07.01.2019 10:34, Diana Picus wrote:
> Hi Kamil,
> 
> I think this is breaking our Thumb buildbots:
> http://lab.llvm.org:8011/builders/clang-cmake-thumbv7-full-sh/builds/1263
> http://lab.llvm.org:8011/builders/clang-cmake-thumbv8-full-sh/builds/1577
> 
> Can you please have a look?
> 
> Thanks,
> Diana
> 
> On Sat, 29 Dec 2018 at 01:35, Kamil Rytarowski via llvm-commits
> <llvm-commits at lists.llvm.org> wrote:
>>
>> Author: kamil
>> Date: Fri Dec 28 16:32:07 2018
>> New Revision: 350139
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=350139&view=rev
>> Log:
>> Add support for background thread on NetBSD in ASan
>>
>> Summary:
>> Change the point of calling MaybeStartBackgroudThread() from AsanInitInternal()
>> that is too early on NetBSD to a constructor (with aid of C++11 lambda construct).
>>
>> Enable the code for background thread as is for NetBSD.
>>
>> Rename test/sanitizer_common/TestCases/Linux/hard_rss_limit_mb_test.cc
>> to test/sanitizer_common/TestCases/hard_rss_limit_mb_test.cc and allow runs
>> on NetBSD. This tests passes correctly.
>>
>> Reviewers: vitalybuka, joerg, eugenis
>>
>> Reviewed By: eugenis
>>
>> Subscribers: eugenis, kubamracek, fedor.sergeev, llvm-commits, mgorny, #sanitizers
>>
>> Tags: #sanitizers
>>
>> Differential Revision: https://reviews.llvm.org/D55887
>>
>> Added:
>>     compiler-rt/trunk/test/sanitizer_common/TestCases/hard_rss_limit_mb_test.cc
>>       - copied, changed from r350138, compiler-rt/trunk/test/sanitizer_common/TestCases/Linux/hard_rss_limit_mb_test.cc
>> Removed:
>>     compiler-rt/trunk/test/sanitizer_common/TestCases/Linux/hard_rss_limit_mb_test.cc
>> Modified:
>>     compiler-rt/trunk/lib/asan/asan_rtl.cc
>>     compiler-rt/trunk/lib/sanitizer_common/sanitizer_common_libcdep.cc
>>
>> Modified: compiler-rt/trunk/lib/asan/asan_rtl.cc
>> URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/asan/asan_rtl.cc?rev=350139&r1=350138&r2=350139&view=diff
>> ==============================================================================
>> --- compiler-rt/trunk/lib/asan/asan_rtl.cc (original)
>> +++ compiler-rt/trunk/lib/asan/asan_rtl.cc Fri Dec 28 16:32:07 2018
>> @@ -383,6 +383,13 @@ void PrintAddressSpaceLayout() {
>>            kHighShadowBeg > kMidMemEnd);
>>  }
>>
>> +static bool UNUSED __local_asan_dyninit = [] {
>> +  MaybeStartBackgroudThread();
>> +  SetSoftRssLimitExceededCallback(AsanSoftRssLimitExceededCallback);
>> +
>> +  return false;
>> +}();
>> +
>>  static void AsanInitInternal() {
>>    if (LIKELY(asan_inited)) return;
>>    SanitizerToolName = "AddressSanitizer";
>> @@ -457,9 +464,6 @@ static void AsanInitInternal() {
>>    allocator_options.SetFrom(flags(), common_flags());
>>    InitializeAllocator(allocator_options);
>>
>> -  MaybeStartBackgroudThread();
>> -  SetSoftRssLimitExceededCallback(AsanSoftRssLimitExceededCallback);
>> -
>>    // On Linux AsanThread::ThreadStart() calls malloc() that's why asan_inited
>>    // should be set to 1 prior to initializing the threads.
>>    asan_inited = 1;
>>
>> Modified: compiler-rt/trunk/lib/sanitizer_common/sanitizer_common_libcdep.cc
>> URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_common_libcdep.cc?rev=350139&r1=350138&r2=350139&view=diff
>> ==============================================================================
>> --- compiler-rt/trunk/lib/sanitizer_common/sanitizer_common_libcdep.cc (original)
>> +++ compiler-rt/trunk/lib/sanitizer_common/sanitizer_common_libcdep.cc Fri Dec 28 16:32:07 2018
>> @@ -25,7 +25,7 @@ void SetSoftRssLimitExceededCallback(voi
>>    SoftRssLimitExceededCallback = Callback;
>>  }
>>
>> -#if SANITIZER_LINUX && !SANITIZER_GO
>> +#if (SANITIZER_LINUX || SANITIZER_NETBSD) && !SANITIZER_GO
>>  // Weak default implementation for when sanitizer_stackdepot is not linked in.
>>  SANITIZER_WEAK_ATTRIBUTE StackDepotStats *StackDepotGetStats() {
>>    return nullptr;
>> @@ -114,7 +114,7 @@ void WriteToSyslog(const char *msg) {
>>  }
>>
>>  void MaybeStartBackgroudThread() {
>> -#if SANITIZER_LINUX && \
>> +#if (SANITIZER_LINUX || SANITIZER_NETBSD) && \
>>      !SANITIZER_GO  // Need to implement/test on other platforms.
>>    // Start the background thread if one of the rss limits is given.
>>    if (!common_flags()->hard_rss_limit_mb &&
>>
>> Removed: compiler-rt/trunk/test/sanitizer_common/TestCases/Linux/hard_rss_limit_mb_test.cc
>> URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/test/sanitizer_common/TestCases/Linux/hard_rss_limit_mb_test.cc?rev=350138&view=auto
>> ==============================================================================
>> --- compiler-rt/trunk/test/sanitizer_common/TestCases/Linux/hard_rss_limit_mb_test.cc (original)
>> +++ compiler-rt/trunk/test/sanitizer_common/TestCases/Linux/hard_rss_limit_mb_test.cc (removed)
>> @@ -1,44 +0,0 @@
>> -// Check hard_rss_limit_mb. Not all sanitizers implement it yet.
>> -// RUN: %clangxx -O2 %s -o %t
>> -//
>> -// Run with limit should fail:
>> -// RUN: %env_tool_opts=hard_rss_limit_mb=100                           not %run %t 2>&1 | FileCheck %s
>> -// This run uses getrusage:
>> -// RUN: %env_tool_opts=hard_rss_limit_mb=100:can_use_proc_maps_statm=0 not %run %t 2>&1 | FileCheck %s
>> -//
>> -// Run w/o limit or with a large enough limit should pass:
>> -// RUN: %env_tool_opts=hard_rss_limit_mb=1000 %run %t
>> -// RUN: %run %t
>> -//
>> -// FIXME: make it work for other sanitizers.
>> -// XFAIL: lsan
>> -// XFAIL: tsan
>> -// XFAIL: msan
>> -// XFAIL: ubsan
>> -
>> -// https://github.com/google/sanitizers/issues/981
>> -// UNSUPPORTED: android-26
>> -
>> -#include <string.h>
>> -#include <stdio.h>
>> -#include <unistd.h>
>> -
>> -const int kNumAllocs = 200 * 1000;
>> -const int kAllocSize = 1000;
>> -volatile char *sink[kNumAllocs];
>> -
>> -int main(int argc, char **argv) {
>> -  for (int i = 0; i < kNumAllocs; i++) {
>> -    if ((i % 1000) == 0) {
>> -      // Don't write to stderr! Doing that triggers a kernel race condition
>> -      // between this thread and the rss-limit thread, and may lose part of the
>> -      // output. See https://lkml.org/lkml/2014/2/17/324.
>> -      printf("[%d]\n", i);
>> -    }
>> -    char *x = new char[kAllocSize];
>> -    memset(x, 0, kAllocSize);
>> -    sink[i] = x;
>> -  }
>> -  sleep(1);  // Make sure the background thread has time to kill the process.
>> -// CHECK: hard rss limit exhausted
>> -}
>>
>> Copied: compiler-rt/trunk/test/sanitizer_common/TestCases/hard_rss_limit_mb_test.cc (from r350138, compiler-rt/trunk/test/sanitizer_common/TestCases/Linux/hard_rss_limit_mb_test.cc)
>> URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/test/sanitizer_common/TestCases/hard_rss_limit_mb_test.cc?p2=compiler-rt/trunk/test/sanitizer_common/TestCases/hard_rss_limit_mb_test.cc&p1=compiler-rt/trunk/test/sanitizer_common/TestCases/Linux/hard_rss_limit_mb_test.cc&r1=350138&r2=350139&rev=350139&view=diff
>> ==============================================================================
>> --- compiler-rt/trunk/test/sanitizer_common/TestCases/Linux/hard_rss_limit_mb_test.cc (original)
>> +++ compiler-rt/trunk/test/sanitizer_common/TestCases/hard_rss_limit_mb_test.cc Fri Dec 28 16:32:07 2018
>> @@ -19,6 +19,8 @@
>>  // https://github.com/google/sanitizers/issues/981
>>  // UNSUPPORTED: android-26
>>
>> +// UNSUPPORTED: freebsd, solaris, darwin
>> +
>>  #include <string.h>
>>  #include <stdio.h>
>>  #include <unistd.h>
>>
>>
>> _______________________________________________
>> llvm-commits mailing list
>> llvm-commits at lists.llvm.org
>> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits


-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 850 bytes
Desc: OpenPGP digital signature
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20190107/8368a372/attachment.sig>


More information about the llvm-commits mailing list