summaryrefslogtreecommitdiff
path: root/test/asan/TestCases/Posix
diff options
context:
space:
mode:
authorVitaly Buka <vitalybuka@google.com>2017-09-09 06:04:23 +0000
committerVitaly Buka <vitalybuka@google.com>2017-09-09 06:04:23 +0000
commitc5cad77b92f072222f3680cd2ccf82543448e43b (patch)
tree7d19c17269b5a11782c4f0f375e46501aee569ee /test/asan/TestCases/Posix
parent49cac23f37b00f4bdcc44d50e3a7696254c03139 (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.cc87
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