[compiler-rt] r200310 - [ASan] Move the sigaltstack() bits to sanitizer_common.

Alexander Potapenko glider at google.com
Tue Jan 28 06:15:26 PST 2014


Removed that. Thanks!

On Tue, Jan 28, 2014 at 6:08 PM, Alexey Samsonov <samsonov at google.com> wrote:
>
>
>
> On Tue, Jan 28, 2014 at 3:12 PM, Alexander Potapenko <glider at google.com>
> wrote:
>>
>> Author: glider
>> Date: Tue Jan 28 05:12:29 2014
>> New Revision: 200310
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=200310&view=rev
>> Log:
>> [ASan] Move the sigaltstack() bits to sanitizer_common.
>> This change is a part of refactoring intended to have common signal
>> handling behavior in all tools.
>> Note that this particular change doesn't enable use_sigaltstack support in
>> every tool.
>>
>>
>> Modified:
>>     compiler-rt/trunk/lib/asan/asan_internal.h
>>     compiler-rt/trunk/lib/asan/asan_posix.cc
>>     compiler-rt/trunk/lib/asan/asan_win.cc
>>     compiler-rt/trunk/lib/sanitizer_common/sanitizer_common.h
>>     compiler-rt/trunk/lib/sanitizer_common/sanitizer_posix.cc
>>     compiler-rt/trunk/lib/sanitizer_common/sanitizer_posix_libcdep.cc
>>     compiler-rt/trunk/lib/sanitizer_common/sanitizer_win.cc
>>
>> Modified: compiler-rt/trunk/lib/asan/asan_internal.h
>> URL:
>> http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/asan/asan_internal.h?rev=200310&r1=200309&r2=200310&view=diff
>>
>> ==============================================================================
>> --- compiler-rt/trunk/lib/asan/asan_internal.h (original)
>> +++ compiler-rt/trunk/lib/asan/asan_internal.h Tue Jan 28 05:12:29 2014
>> @@ -74,8 +74,6 @@ void GetPcSpBp(void *context, uptr *pc,
>>
>>  void MaybeReexec();
>>  bool AsanInterceptsSignal(int signum);
>> -void SetAlternateSignalStack();
>> -void UnsetAlternateSignalStack();
>>  void InstallSignalHandlers();
>>  void ReadContextStack(void *context, uptr *stack, uptr *ssize);
>>  void AsanPlatformThreadInit();
>>
>> Modified: compiler-rt/trunk/lib/asan/asan_posix.cc
>> URL:
>> http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/asan/asan_posix.cc?rev=200310&r1=200309&r2=200310&view=diff
>>
>> ==============================================================================
>> --- compiler-rt/trunk/lib/asan/asan_posix.cc (original)
>> +++ compiler-rt/trunk/lib/asan/asan_posix.cc Tue Jan 28 05:12:29 2014
>> @@ -56,33 +56,6 @@ static void     ASAN_OnSIGSEGV(int, sigi
>>    ReportSIGSEGV(pc, sp, bp, addr);
>>  }
>>
>> -void SetAlternateSignalStack() {
>> -  stack_t altstack, oldstack;
>> -  CHECK_EQ(0, sigaltstack(0, &oldstack));
>> -  // If the alternate stack is already in place, do nothing.
>> -  if ((oldstack.ss_flags & SS_DISABLE) == 0) return;
>> -  // TODO(glider): the mapped stack should have the MAP_STACK flag in the
>> -  // future. It is not required by man 2 sigaltstack now (they're using
>> -  // malloc()).
>> -  void* base = MmapOrDie(kAltStackSize, __FUNCTION__);
>> -  altstack.ss_sp = base;
>> -  altstack.ss_flags = 0;
>> -  altstack.ss_size = kAltStackSize;
>> -  CHECK_EQ(0, sigaltstack(&altstack, 0));
>> -  VReport(1, "Alternative stack for T%d set: [%p,%p)\n",
>> -          GetCurrentTidOrInvalid(), altstack.ss_sp,
>> -          (char *)altstack.ss_sp + altstack.ss_size);
>> -}
>> -
>> -void UnsetAlternateSignalStack() {
>> -  stack_t altstack, oldstack;
>> -  altstack.ss_sp = 0;
>> -  altstack.ss_flags = SS_DISABLE;
>> -  altstack.ss_size = 0;
>> -  CHECK_EQ(0, sigaltstack(&altstack, &oldstack));
>> -  UnmapOrDie(oldstack.ss_sp, oldstack.ss_size);
>> -}
>> -
>>  void InstallSignalHandlers() {
>>    // Set the alternate signal stack for the main thread.
>>    // This will cause SetAlternateSignalStack to be called twice, but the
>> stack
>>
>> Modified: compiler-rt/trunk/lib/asan/asan_win.cc
>> URL:
>> http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/asan/asan_win.cc?rev=200310&r1=200309&r2=200310&view=diff
>>
>> ==============================================================================
>> --- compiler-rt/trunk/lib/asan/asan_win.cc (original)
>> +++ compiler-rt/trunk/lib/asan/asan_win.cc Tue Jan 28 05:12:29 2014
>> @@ -70,14 +70,6 @@ void *AsanDoesNotSupportStaticLinkage()
>>    return 0;
>>  }
>>
>> -void SetAlternateSignalStack() {
>> -  // FIXME: Decide what to do on Windows.
>> -}
>> -
>> -void UnsetAlternateSignalStack() {
>> -  // FIXME: Decide what to do on Windows.
>> -}
>> -
>>  void InstallSignalHandlers() {
>>    // FIXME: Decide what to do on Windows.
>>  }
>>
>> Modified: compiler-rt/trunk/lib/sanitizer_common/sanitizer_common.h
>> URL:
>> http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_common.h?rev=200310&r1=200309&r2=200310&view=diff
>>
>> ==============================================================================
>> --- compiler-rt/trunk/lib/sanitizer_common/sanitizer_common.h (original)
>> +++ compiler-rt/trunk/lib/sanitizer_common/sanitizer_common.h Tue Jan 28
>> 05:12:29 2014
>> @@ -213,6 +213,10 @@ typedef void (*CheckFailedCallbackType)(
>>                                         u64, u64);
>>  void SetCheckFailedCallback(CheckFailedCallbackType callback);
>>
>> +// Functions related to signal handling.
>> +void SetAlternateSignalStack();
>> +void UnsetAlternateSignalStack();
>> +
>>  // We don't want a summary too long.
>>  const int kMaxSummaryLength = 1024;
>>  // Construct a one-line string:
>>
>> Modified: compiler-rt/trunk/lib/sanitizer_common/sanitizer_posix.cc
>> URL:
>> http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_posix.cc?rev=200310&r1=200309&r2=200310&view=diff
>>
>> ==============================================================================
>> --- compiler-rt/trunk/lib/sanitizer_common/sanitizer_posix.cc (original)
>> +++ compiler-rt/trunk/lib/sanitizer_common/sanitizer_posix.cc Tue Jan 28
>> 05:12:29 2014
>> @@ -21,6 +21,7 @@
>>  #include "sanitizer_stacktrace.h"
>>
>>  #include <sys/mman.h>
>> +#include <signal.h>
>
>
> why this include?
>
>>
>>
>>  namespace __sanitizer {
>>
>>
>> Modified:
>> compiler-rt/trunk/lib/sanitizer_common/sanitizer_posix_libcdep.cc
>> URL:
>> http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_posix_libcdep.cc?rev=200310&r1=200309&r2=200310&view=diff
>>
>> ==============================================================================
>> --- compiler-rt/trunk/lib/sanitizer_common/sanitizer_posix_libcdep.cc
>> (original)
>> +++ compiler-rt/trunk/lib/sanitizer_common/sanitizer_posix_libcdep.cc Tue
>> Jan 28 05:12:29 2014
>> @@ -20,6 +20,7 @@
>>
>>  #include <errno.h>
>>  #include <pthread.h>
>> +#include <signal.h>
>>  #include <stdlib.h>
>>  #include <sys/mman.h>
>>  #include <sys/resource.h>
>> @@ -89,6 +90,33 @@ int internal_isatty(fd_t fd) {
>>    return isatty(fd);
>>  }
>>
>> +// TODO(glider): different tools may require different altstack size.
>> +static const uptr kAltStackSize = SIGSTKSZ * 4;  // SIGSTKSZ is not
>> enough.
>> +
>> +void SetAlternateSignalStack() {
>> +  stack_t altstack, oldstack;
>> +  CHECK_EQ(0, sigaltstack(0, &oldstack));
>> +  // If the alternate stack is already in place, do nothing.
>> +  if ((oldstack.ss_flags & SS_DISABLE) == 0) return;
>> +  // TODO(glider): the mapped stack should have the MAP_STACK flag in the
>> +  // future. It is not required by man 2 sigaltstack now (they're using
>> +  // malloc()).
>> +  void* base = MmapOrDie(kAltStackSize, __FUNCTION__);
>> +  altstack.ss_sp = base;
>> +  altstack.ss_flags = 0;
>> +  altstack.ss_size = kAltStackSize;
>> +  CHECK_EQ(0, sigaltstack(&altstack, 0));
>> +}
>> +
>> +void UnsetAlternateSignalStack() {
>> +  stack_t altstack, oldstack;
>> +  altstack.ss_sp = 0;
>> +  altstack.ss_flags = SS_DISABLE;
>> +  altstack.ss_size = 0;
>> +  CHECK_EQ(0, sigaltstack(&altstack, &oldstack));
>> +  UnmapOrDie(oldstack.ss_sp, oldstack.ss_size);
>> +}
>> +
>>  }  // namespace __sanitizer
>>
>>  #endif
>>
>> Modified: compiler-rt/trunk/lib/sanitizer_common/sanitizer_win.cc
>> URL:
>> http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_win.cc?rev=200310&r1=200309&r2=200310&view=diff
>>
>> ==============================================================================
>> --- compiler-rt/trunk/lib/sanitizer_common/sanitizer_win.cc (original)
>> +++ compiler-rt/trunk/lib/sanitizer_common/sanitizer_win.cc Tue Jan 28
>> 05:12:29 2014
>> @@ -413,6 +413,14 @@ void RawWrite(const char *buffer) {
>>    }
>>  }
>>
>> +void SetAlternateSignalStack() {
>> +  // FIXME: Decide what to do on Windows.
>> +}
>> +
>> +void UnsetAlternateSignalStack() {
>> +  // FIXME: Decide what to do on Windows.
>> +}
>> +
>>  }  // namespace __sanitizer
>>
>>  #endif  // _WIN32
>>
>>
>> _______________________________________________
>> llvm-commits mailing list
>> llvm-commits at cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>
>
>
>
> --
> Alexey Samsonov, MSK



-- 
Alexander Potapenko
Software Engineer
Google Moscow



More information about the llvm-commits mailing list