1 // Test for direct coverage writing with dlopen. 2 3 // Test normal exit, coverage level 1. 4 // RUN: %clangxx_asan -fsanitize-coverage=func -DSHARED %s -shared -o %T/libcoverage_android_test_1.so -fPIC 5 // RUN: %clangxx_asan -fsanitize-coverage=func -DSO_DIR=\"%device\" %s -o %t 6 7 // RUN: adb shell rm -rf %device/coverage-android 8 // RUN: rm -rf %T/coverage-android 9 10 // RUN: adb shell mkdir -p %device/coverage-android/direct 11 // RUN: mkdir -p %T/coverage-android/direct 12 // RUN: %env_asan_opts=coverage=1:coverage_direct=1:coverage_dir=%device/coverage-android/direct:verbosity=1 %run %t 13 // RUN: adb pull %device/coverage-android/direct %T/coverage-android/direct 14 // RUN: ls; pwd 15 // RUN: cd %T/coverage-android/direct 16 // RUN: %sancov rawunpack *.sancov.raw 17 // RUN: %sancov print *.sancov |& FileCheck --check-prefix=CHECK1 %s 18 19 20 // Test sudden death, coverage level 1. 21 // RUN: %clangxx_asan -fsanitize-coverage=func -DSHARED -DKILL %s -shared -o %T/libcoverage_android_test_1.so -fPIC 22 // RUN: %clangxx_asan -fsanitize-coverage=func -DSO_DIR=\"%device\" %s -o %t 23 24 // RUN: adb shell rm -rf %device/coverage-android-kill 25 // RUN: rm -rf %T/coverage-android-kill 26 27 // RUN: adb shell mkdir -p %device/coverage-android-kill/direct 28 // RUN: mkdir -p %T/coverage-android-kill/direct 29 // RUN: %env_asan_opts=coverage=1:coverage_direct=1:coverage_dir=%device/coverage-android-kill/direct:verbosity=1 not %run %t 30 // RUN: adb pull %device/coverage-android-kill/direct %T/coverage-android-kill/direct 31 // RUN: ls; pwd 32 // RUN: cd %T/coverage-android-kill/direct 33 // RUN: %sancov rawunpack *.sancov.raw 34 // RUN: %sancov print *.sancov |& FileCheck --check-prefix=CHECK1 %s 35 36 37 // Test normal exit, coverage level 2. 38 // RUN: %clangxx_asan -fsanitize-coverage=bb -DSHARED %s -shared -o %T/libcoverage_android_test_1.so -fPIC 39 // RUN: %clangxx_asan -fsanitize-coverage=bb -DSO_DIR=\"%device\" %s -o %t 40 41 // RUN: adb shell rm -rf %device/coverage-android 42 // RUN: rm -rf %T/coverage-android 43 44 // RUN: adb shell mkdir -p %device/coverage-android/direct 45 // RUN: mkdir -p %T/coverage-android/direct 46 // RUN: %env_asan_opts=coverage=1:coverage_direct=1:coverage_dir=%device/coverage-android/direct:verbosity=1 %run %t 47 // RUN: adb pull %device/coverage-android/direct %T/coverage-android/direct 48 // RUN: ls; pwd 49 // RUN: cd %T/coverage-android/direct 50 // RUN: %sancov rawunpack *.sancov.raw 51 // RUN: %sancov print *.sancov |& FileCheck --check-prefix=CHECK2 %s 52 53 54 // Test sudden death, coverage level 2. 55 // RUN: %clangxx_asan -fsanitize-coverage=bb -DSHARED -DKILL %s -shared -o %T/libcoverage_android_test_1.so -fPIC 56 // RUN: %clangxx_asan -fsanitize-coverage=bb -DSO_DIR=\"%device\" %s -o %t 57 58 // RUN: adb shell rm -rf %device/coverage-android-kill 59 // RUN: rm -rf %T/coverage-android-kill 60 61 // RUN: adb shell mkdir -p %device/coverage-android-kill/direct 62 // RUN: mkdir -p %T/coverage-android-kill/direct 63 // RUN: %env_asan_opts=coverage=1:coverage_direct=1:coverage_dir=%device/coverage-android-kill/direct:verbosity=1 not %run %t 64 // RUN: adb pull %device/coverage-android-kill/direct %T/coverage-android-kill/direct 65 // RUN: ls; pwd 66 // RUN: cd %T/coverage-android-kill/direct 67 // RUN: %sancov rawunpack *.sancov.raw 68 // RUN: %sancov print *.sancov |& FileCheck --check-prefix=CHECK2 %s 69 70 71 // Test normal exit, coverage level 3. 72 // RUN: %clangxx_asan -fsanitize-coverage=edge -DSHARED %s -shared -o %T/libcoverage_android_test_1.so -fPIC 73 // RUN: %clangxx_asan -fsanitize-coverage=edge -DSO_DIR=\"%device\" %s -o %t 74 75 // RUN: adb shell rm -rf %device/coverage-android 76 // RUN: rm -rf %T/coverage-android 77 78 // RUN: adb shell mkdir -p %device/coverage-android/direct 79 // RUN: mkdir -p %T/coverage-android/direct 80 // RUN: %env_asan_opts=coverage=1:coverage_direct=1:coverage_dir=%device/coverage-android/direct:verbosity=1 %run %t 81 // RUN: adb pull %device/coverage-android/direct %T/coverage-android/direct 82 // RUN: ls; pwd 83 // RUN: cd %T/coverage-android/direct 84 // RUN: %sancov rawunpack *.sancov.raw 85 // RUN: %sancov print *.sancov |& FileCheck --check-prefix=CHECK3 %s 86 87 88 // Test sudden death, coverage level 3. 89 // RUN: %clangxx_asan -fsanitize-coverage=edge -DSHARED -DKILL %s -shared -o %T/libcoverage_android_test_1.so -fPIC 90 // RUN: %clangxx_asan -fsanitize-coverage=edge -DSO_DIR=\"%device\" %s -o %t 91 92 // RUN: adb shell rm -rf %device/coverage-android-kill 93 // RUN: rm -rf %T/coverage-android-kill 94 95 // RUN: adb shell mkdir -p %device/coverage-android-kill/direct 96 // RUN: mkdir -p %T/coverage-android-kill/direct 97 // RUN: %env_asan_opts=coverage=1:coverage_direct=1:coverage_dir=%device/coverage-android-kill/direct:verbosity=1 not %run %t 98 // RUN: adb pull %device/coverage-android-kill/direct %T/coverage-android-kill/direct 99 // RUN: ls; pwd 100 // RUN: cd %T/coverage-android-kill/direct 101 // RUN: %sancov rawunpack *.sancov.raw 102 // RUN: %sancov print *.sancov |& FileCheck --check-prefix=CHECK3 %s 103 104 #include <assert.h> 105 #include <dlfcn.h> 106 #include <stdio.h> 107 #include <unistd.h> 108 #include <sys/types.h> 109 #include <signal.h> 110 111 #ifdef SHARED 112 extern "C" { 113 void bar() { 114 printf("bar\n"); 115 #ifdef KILL 116 kill(getpid(), SIGKILL); 117 #endif 118 } 119 } 120 #else 121 122 volatile int sink; 123 124 int main(int argc, char **argv) { 125 fprintf(stderr, "PID: %d\n", getpid()); 126 void *handle1 = 127 dlopen(SO_DIR "/libcoverage_android_test_1.so", RTLD_LAZY); 128 assert(handle1); 129 130 if (argc == 0) 131 sink = 0; 132 133 void (*bar1)() = (void (*)())dlsym(handle1, "bar"); 134 assert(bar1); 135 bar1(); 136 137 return 0; 138 } 139 #endif 140 141 // CHECK1: 2 PCs total 142 // CHECK2: 4 PCs total 143 // CHECK3: 5 PCs total 144