brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.9 KiB · 9a3cb88 Raw
76 lines · cpp
1// RUN:rm -rf %t.dir && mkdir -p %t.dir && cd %t.dir2// RUN: %clangxx_asan -fsanitize-coverage=func,trace-pc-guard -DSHARED %s -shared -o %dynamiclib -fPIC %ld_flags_rpath_so3// RUN: %clangxx_asan -fsanitize-coverage=func,trace-pc-guard %s %ld_flags_rpath_exe -o %t.dir/exe4// RUN: %env_asan_opts=coverage=1:verbosity=1 %run %t.dir/exe 2>&1         | FileCheck %s --check-prefix=CHECK-main5// RUN: %sancov print exe.*sancov 2>&1 | FileCheck %s --check-prefix=CHECK-SANCOV16// RUN: %env_asan_opts=coverage=1:verbosity=1 %run %t.dir/exe foo 2>&1     | FileCheck %s --check-prefix=CHECK-foo7// RUN: %sancov print exe.*sancov 2>&1 | FileCheck %s --check-prefix=CHECK-SANCOV28// RUN: %env_asan_opts=coverage=1:verbosity=1 %run %t.dir/exe bar 2>&1     | FileCheck %s --check-prefix=CHECK-bar9// RUN: %sancov print exe.*sancov 2>&1 | FileCheck %s --check-prefix=CHECK-SANCOV210// RUN: %env_asan_opts=coverage=1:verbosity=1 %run %t.dir/exe foo bar 2>&1 | FileCheck %s --check-prefix=CHECK-foo-bar11// RUN: %sancov print exe.*sancov 2>&1 | FileCheck %s --check-prefix=CHECK-SANCOV212// RUN: %sancov print libcoverage.*sancov 2>&1 | FileCheck %s --check-prefix=CHECK-SANCOV113// RUN: %sancov merge exe.*sancov > merged-cov14// RUN: %sancov print merged-cov 2>&1 | FileCheck %s --check-prefix=CHECK-SANCOV215// RUN: %env_asan_opts=coverage=1:verbosity=1 not %run %t.dir/exe foo bar 4    2>&1 | FileCheck %s --check-prefix=CHECK-report16// RUN: %env_asan_opts=coverage=1:verbosity=1 not %run %t.dir/exe foo bar 4 5  2>&1 | FileCheck %s --check-prefix=CHECK-segv17//18// https://code.google.com/p/address-sanitizer/issues/detail?id=26319// XFAIL: android20// UNSUPPORTED: ios21 22#include <assert.h>23#include <stdio.h>24#include <string.h>25#include <unistd.h>26 27#ifdef SHARED28void bar() { printf("bar\n"); }29#else30__attribute__((noinline))31void foo() { printf("foo\n"); }32extern void bar();33 34int G[4];35 36int main(int argc, char **argv) {37  fprintf(stderr, "PID: %d\n", getpid());38  for (int i = 1; i < argc; i++) {39    if (!strcmp(argv[i], "foo"))40      foo();41    if (!strcmp(argv[i], "bar"))42      bar();43  }44  if (argc == 5) {45    static volatile char *zero = 0;46    *zero = 0;  // SEGV if argc == 5.47  }48  return G[argc];  // Buffer overflow if argc >= 4.49}50#endif51 52// CHECK-main: PID: [[PID:[0-9]+]]53// CHECK-main: [[PID]].sancov: 1 PCs written54// CHECK-main-NOT: .so.[[PID]]55//56// CHECK-foo: PID: [[PID:[0-9]+]]57// CHECK-foo: [[PID]].sancov: 2 PCs written58// CHECK-foo-NOT: .so.[[PID]]59//60// CHECK-bar: PID: [[PID:[0-9]+]]61// CHECK-bar-DAG: .so.[[PID]].sancov: 1 PCs written62// CHECK-bar-DAG: [[PID]].sancov: 1 PCs written63//64// CHECK-foo-bar: PID: [[PID:[0-9]+]]65// CHECK-foo-bar-DAG: so.[[PID]].sancov: 1 PCs written66// CHECK-foo-bar-DAG: [[PID]].sancov: 2 PCs written67//68// CHECK-report: AddressSanitizer: global-buffer-overflow69// CHECK-report: PCs written70//71// CHECK-segv: AddressSanitizer: SEGV72// CHECK-segv: PCs written73//74// CHECK-SANCOV1: 1 PCs total75// CHECK-SANCOV2: 2 PCs total76