brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.0 KiB · 48e5475 Raw
49 lines · cpp
1// UNSUPPORTED: android2// UNSUPPORTED: hwasan3 4// RUN: %clangxx -O0 %s -o %t5 6// Sanitizer signal handler not installed; custom signal handler installed7// RUN: %env_tool_opts=handle_segv=0:cloak_sanitizer_signal_handlers=false not %run %t 2>&1 | FileCheck %s --check-prefixes=DEFAULT,CUSTOM8// RUN: %env_tool_opts=handle_segv=0:cloak_sanitizer_signal_handlers=true not %run %t 2>&1 | FileCheck %s --check-prefixes=DEFAULT,CUSTOM9 10// Sanitizer signal handler installed but overriden by custom signal handler11// RUN: %env_tool_opts=handle_segv=1:cloak_sanitizer_signal_handlers=false not %run %t 2>&1 | FileCheck %s --check-prefixes=NONDEFAULT,CUSTOM12// RUN: %env_tool_opts=handle_segv=1:cloak_sanitizer_signal_handlers=true not %run %t 2>&1 | FileCheck %s --check-prefixes=DEFAULT,CUSTOM13 14// Sanitizer signal handler installed immutably15// N.B. for handle_segv=2 with cloaking off, there is a pre-existing difference16//      in signal vs. sigaction: signal effectively cloaks the handler.17// RUN: %env_tool_opts=handle_segv=2:cloak_sanitizer_signal_handlers=false not %run %t 2>&1 | FileCheck %s --check-prefixes=DEFAULT,SANITIZER18// RUN: %env_tool_opts=handle_segv=2:cloak_sanitizer_signal_handlers=true not %run %t 2>&1 | FileCheck %s --check-prefixes=DEFAULT,SANITIZER19 20#include <signal.h>21#include <stdio.h>22#include <stdlib.h>23 24void my_signal_sighandler(int signum) {25  printf("Custom signal handler\n");26  exit(1);27}28 29int main(int argc, char *argv[]) {30  __sighandler_t old = signal(SIGSEGV, &my_signal_sighandler);31  if (old == SIG_DFL)32    printf("Old handler: default\n");33  // DEFAULT: Old handler: default34  else35    printf("Old handler: non-default\n");36  // NONDEFAULT: Old handler: non-default37 38  fflush(stdout);39 40  // Trying to organically segfault by dereferencing a pointer can be tricky41  // in builds with assertions. Additionally, some older platforms may SIGBUS42  // instead.43  raise(SIGSEGV);44  // CUSTOM: Custom signal handler45  // SANITIZER: Sanitizer:DEADLYSIGNAL46 47  return 0;48}49