diff options
author | Vitaly Buka <vitalybuka@google.com> | 2017-09-09 06:04:23 +0000 |
---|---|---|
committer | Vitaly Buka <vitalybuka@google.com> | 2017-09-09 06:04:23 +0000 |
commit | c5cad77b92f072222f3680cd2ccf82543448e43b (patch) | |
tree | 7d19c17269b5a11782c4f0f375e46501aee569ee /test/asan/TestCases/Posix | |
parent | 49cac23f37b00f4bdcc44d50e3a7696254c03139 (diff) |
[compiler-rt] Move allow_user_segv.cc into sanitizer_common
Summary: Part of https://github.com/google/sanitizers/issues/637
Reviewers: eugenis
Subscribers: kubamracek, dberris, llvm-commits
Differential Revision: https://reviews.llvm.org/D37537
git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@312859 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/asan/TestCases/Posix')
-rw-r--r-- | test/asan/TestCases/Posix/allow_user_segv.cc | 87 |
1 files changed, 0 insertions, 87 deletions
diff --git a/test/asan/TestCases/Posix/allow_user_segv.cc b/test/asan/TestCases/Posix/allow_user_segv.cc deleted file mode 100644 index e9918910a..000000000 --- a/test/asan/TestCases/Posix/allow_user_segv.cc +++ /dev/null @@ -1,87 +0,0 @@ -// Regression test for -// https://code.google.com/p/address-sanitizer/issues/detail?id=180 - -// clang-format off -// RUN: %clangxx_asan -O0 %s -o %t - -// RUN: %env_asan_opts=handle_segv=0 not %run %t 2>&1 | FileCheck %s --check-prefix=CHECK0 -// RUN: %env_asan_opts=handle_segv=1 not %run %t 2>&1 | FileCheck %s --check-prefix=CHECK1 -// RUN: %env_asan_opts=handle_segv=2 not %run %t 2>&1 | FileCheck %s --check-prefix=CHECK2 - -// RUN: %env_asan_opts=handle_segv=0:allow_user_segv_handler=0 not %run %t 2>&1 | FileCheck %s --check-prefix=CHECK0 -// RUN: %env_asan_opts=handle_segv=1:allow_user_segv_handler=0 not %run %t 2>&1 | FileCheck %s --check-prefix=CHECK2 -// RUN: %env_asan_opts=handle_segv=2:allow_user_segv_handler=0 not %run %t 2>&1 | FileCheck %s --check-prefix=CHECK2 - -// RUN: %env_asan_opts=handle_segv=0:allow_user_segv_handler=1 not %run %t 2>&1 | FileCheck %s --check-prefix=CHECK0 -// RUN: %env_asan_opts=handle_segv=1:allow_user_segv_handler=1 not %run %t 2>&1 | FileCheck %s --check-prefix=CHECK1 -// RUN: %env_asan_opts=handle_segv=2:allow_user_segv_handler=1 not %run %t 2>&1 | FileCheck %s --check-prefix=CHECK2 -// clang-format on - -#include <signal.h> -#include <stdio.h> -#include <stdlib.h> - -struct sigaction original_sigaction_sigbus; -struct sigaction original_sigaction_sigsegv; - -void User_OnSIGSEGV(int signum, siginfo_t *siginfo, void *context) { - fprintf(stderr, "User sigaction called\n"); - struct sigaction original_sigaction; - if (signum == SIGBUS) - original_sigaction = original_sigaction_sigbus; - else if (signum == SIGSEGV) - original_sigaction = original_sigaction_sigsegv; - else { - printf("Invalid signum"); - exit(1); - } - if (original_sigaction.sa_flags | SA_SIGINFO) { - if (original_sigaction.sa_sigaction) - original_sigaction.sa_sigaction(signum, siginfo, context); - } else { - if (original_sigaction.sa_handler) - original_sigaction.sa_handler(signum); - } - exit(1); -} - -int DoSEGV() { - volatile int *x = 0; - return *x; -} - -bool InstallHandler(int signum, struct sigaction *original_sigaction) { - struct sigaction user_sigaction; - user_sigaction.sa_sigaction = User_OnSIGSEGV; - user_sigaction.sa_flags = SA_SIGINFO; - if (sigaction(signum, &user_sigaction, original_sigaction)) { - perror("sigaction"); - return false; - } - return true; -} - -int main() { - // Let's install handlers for both SIGSEGV and SIGBUS, since pre-Yosemite - // 32-bit Darwin triggers SIGBUS instead. - if (InstallHandler(SIGSEGV, &original_sigaction_sigsegv) && - InstallHandler(SIGBUS, &original_sigaction_sigbus)) { - fprintf(stderr, "User sigaction installed\n"); - } - return DoSEGV(); -} - -// CHECK0-NOT: AddressSanitizer:DEADLYSIGNAL -// CHECK0-NOT: AddressSanitizer: SEGV on unknown address -// CHECK0: User sigaction installed -// CHECK0-NEXT: User sigaction called - -// CHECK1: User sigaction installed -// CHECK1-NEXT: User sigaction called -// CHECK1-NEXT: AddressSanitizer:DEADLYSIGNAL -// CHECK1: AddressSanitizer: SEGV on unknown address - -// CHECK2-NOT: User sigaction called -// CHECK2: User sigaction installed -// CHECK2-NEXT: AddressSanitizer:DEADLYSIGNAL -// CHECK2: AddressSanitizer: SEGV on unknown address |