diff options
author | Kostya Serebryany <kcc@google.com> | 2016-03-01 22:19:21 +0000 |
---|---|---|
committer | Kostya Serebryany <kcc@google.com> | 2016-03-01 22:19:21 +0000 |
commit | 228d5b1ce48c1d21268d00d752cd8c07af56a0d1 (patch) | |
tree | 53eb118c185a784859d603124f48d430af013642 /llvm/lib/Fuzzer/FuzzerUtil.cpp | |
parent | 07daf721fbdc337db3c2cd5dc303b543ecf9a477 (diff) | |
download | llvm-228d5b1ce48c1d21268d00d752cd8c07af56a0d1.zip llvm-228d5b1ce48c1d21268d00d752cd8c07af56a0d1.tar.gz llvm-228d5b1ce48c1d21268d00d752cd8c07af56a0d1.tar.bz2 |
[libFuzzer] add generic signal handlers so that libFuzzer can report at least something if ASan is not handlig the signals for us. Remove abort_on_timeout flag.
llvm-svn: 262415
Diffstat (limited to 'llvm/lib/Fuzzer/FuzzerUtil.cpp')
-rw-r--r-- | llvm/lib/Fuzzer/FuzzerUtil.cpp | 30 |
1 files changed, 25 insertions, 5 deletions
diff --git a/llvm/lib/Fuzzer/FuzzerUtil.cpp b/llvm/lib/Fuzzer/FuzzerUtil.cpp index 1d51cf9..9364955 100644 --- a/llvm/lib/Fuzzer/FuzzerUtil.cpp +++ b/llvm/lib/Fuzzer/FuzzerUtil.cpp @@ -71,17 +71,37 @@ static void AlarmHandler(int, siginfo_t *, void *) { Fuzzer::StaticAlarmCallback(); } +static void CrashHandler(int, siginfo_t *, void *) { + Fuzzer::StaticCrashSignalCallback(); +} + +static void InterruptHandler(int, siginfo_t *, void *) { + Fuzzer::StaticInterruptCallback(); +} + +static void SetSigaction(int signum, + void (*callback)(int, siginfo_t *, void *)) { + struct sigaction sigact; + memset(&sigact, 0, sizeof(sigact)); + sigact.sa_sigaction = callback; + int Res = sigaction(signum, &sigact, 0); + assert(Res == 0); +} + void SetTimer(int Seconds) { struct itimerval T {{Seconds, 0}, {Seconds, 0}}; int Res = setitimer(ITIMER_REAL, &T, nullptr); assert(Res == 0); - struct sigaction sigact; - memset(&sigact, 0, sizeof(sigact)); - sigact.sa_sigaction = AlarmHandler; - Res = sigaction(SIGALRM, &sigact, 0); - assert(Res == 0); + SetSigaction(SIGALRM, AlarmHandler); } +void SetSigSegvHandler() { SetSigaction(SIGSEGV, CrashHandler); } +void SetSigBusHandler() { SetSigaction(SIGBUS, CrashHandler); } +void SetSigAbrtHandler() { SetSigaction(SIGABRT, CrashHandler); } +void SetSigIllHandler() { SetSigaction(SIGILL, CrashHandler); } +void SetSigFpeHandler() { SetSigaction(SIGFPE, CrashHandler); } +void SetSigIntHandler() { SetSigaction(SIGINT, InterruptHandler); } + int NumberOfCpuCores() { FILE *F = popen("nproc", "r"); int N = 0; |