1 // RUN: %clangxx_asan -fsanitize-coverage=func,trace-pc-guard -DSHARED %s -shared -o %dynamiclib -fPIC %ld_flags_rpath_so 2 // RUN: %clangxx_asan -fsanitize-coverage=func,trace-pc-guard %s %ld_flags_rpath_exe -o %t 3 // RUN: rm -rf %t-dir && mkdir -p %t-dir && cd %t-dir 4 // RUN: %env_asan_opts=coverage=1:verbosity=1 %run %t 2>&1 | FileCheck %s 5 // 6 // UNSUPPORTED: ios 7 8 // XFAIL: i386-netbsd 9 10 #include <stdio.h> 11 12 #include <sanitizer/coverage_interface.h> 13 14 #ifdef SHARED 15 void bar1() { printf("bar1\n"); } 16 void bar2() { printf("bar2\n"); } 17 #else 18 __attribute__((noinline)) void foo1() { printf("foo1\n"); } 19 __attribute__((noinline)) void foo2() { printf("foo2\n"); } 20 void bar1(); 21 void bar2(); 22 23 int main(int argc, char **argv) { 24 fprintf(stderr, "RESET\n"); 25 __sanitizer_cov_reset(); 26 foo1(); 27 foo2(); 28 bar1(); 29 bar2(); 30 __sanitizer_cov_dump(); 31 // CHECK: RESET 32 // CHECK-DAG: SanitizerCoverage: ./coverage-reset.cpp{{.*}}.sancov: 2 PCs written 33 // CHECK-DAG: SanitizerCoverage: ./libcoverage-reset.cpp{{.*}}.sancov: 2 PCs written 34 35 fprintf(stderr, "RESET\n"); 36 __sanitizer_cov_reset(); 37 foo1(); 38 bar1(); 39 __sanitizer_cov_dump(); 40 // CHECK: RESET 41 // CHECK-DAG: SanitizerCoverage: ./coverage-reset.cpp{{.*}}.sancov: 1 PCs written 42 // CHECK-DAG: SanitizerCoverage: ./libcoverage-reset.cpp{{.*}}.sancov: 1 PCs written 43 44 fprintf(stderr, "RESET\n"); 45 __sanitizer_cov_reset(); 46 foo1(); 47 foo2(); 48 __sanitizer_cov_dump(); 49 // CHECK: RESET 50 // CHECK: SanitizerCoverage: ./coverage-reset.cpp{{.*}}.sancov: 2 PCs written 51 52 fprintf(stderr, "RESET\n"); 53 __sanitizer_cov_reset(); 54 bar1(); 55 bar2(); 56 __sanitizer_cov_dump(); 57 // CHECK: RESET 58 // CHECK: SanitizerCoverage: ./libcoverage-reset.cpp{{.*}}.sancov: 2 PCs written 59 60 fprintf(stderr, "RESET\n"); 61 __sanitizer_cov_reset(); 62 // CHECK: RESET 63 64 bar2(); 65 // CHECK: SanitizerCoverage: ./libcoverage-reset.cpp{{.*}}.sancov: 1 PCs written 66 } 67 #endif 68