16a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines// Test for direct coverage writing with dlopen. 26a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines 386277eb844c4983c81de62d7c050e92fe7155788Stephen Hines// Test normal exit, coverage level 1. 4cdce50bda3603770cc4ef80cbb613c78b8e47a17Pirama Arumuga Nainar// RUN: %clangxx_asan -fsanitize-coverage=func -DSHARED %s -shared -o %T/libcoverage_android_test_1.so -fPIC 5cdce50bda3603770cc4ef80cbb613c78b8e47a17Pirama Arumuga Nainar// RUN: %clangxx_asan -fsanitize-coverage=func -DSO_DIR=\"%device\" %s -o %t 66a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines 76a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines// RUN: adb shell rm -rf %device/coverage-android 86a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines// RUN: rm -rf %T/coverage-android 96a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines 106a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines// RUN: adb shell mkdir -p %device/coverage-android/direct 116a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines// RUN: mkdir -p %T/coverage-android/direct 12799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar// RUN: %env_asan_opts=coverage=1:coverage_direct=1:coverage_dir=%device/coverage-android/direct:verbosity=1 %run %t 136a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines// RUN: adb pull %device/coverage-android/direct %T/coverage-android/direct 146a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines// RUN: ls; pwd 156a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines// RUN: cd %T/coverage-android/direct 166a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines// RUN: %sancov rawunpack *.sancov.raw 1786277eb844c4983c81de62d7c050e92fe7155788Stephen Hines// RUN: %sancov print *.sancov |& FileCheck --check-prefix=CHECK1 %s 186a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines 196a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines 2086277eb844c4983c81de62d7c050e92fe7155788Stephen Hines// Test sudden death, coverage level 1. 21cdce50bda3603770cc4ef80cbb613c78b8e47a17Pirama Arumuga Nainar// RUN: %clangxx_asan -fsanitize-coverage=func -DSHARED -DKILL %s -shared -o %T/libcoverage_android_test_1.so -fPIC 22cdce50bda3603770cc4ef80cbb613c78b8e47a17Pirama Arumuga Nainar// RUN: %clangxx_asan -fsanitize-coverage=func -DSO_DIR=\"%device\" %s -o %t 236a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines 246a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines// RUN: adb shell rm -rf %device/coverage-android-kill 256a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines// RUN: rm -rf %T/coverage-android-kill 266a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines 276a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines// RUN: adb shell mkdir -p %device/coverage-android-kill/direct 286a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines// RUN: mkdir -p %T/coverage-android-kill/direct 29799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar// RUN: %env_asan_opts=coverage=1:coverage_direct=1:coverage_dir=%device/coverage-android-kill/direct:verbosity=1 not %run %t 306a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines// RUN: adb pull %device/coverage-android-kill/direct %T/coverage-android-kill/direct 316a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines// RUN: ls; pwd 326a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines// RUN: cd %T/coverage-android-kill/direct 336a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines// RUN: %sancov rawunpack *.sancov.raw 3486277eb844c4983c81de62d7c050e92fe7155788Stephen Hines// RUN: %sancov print *.sancov |& FileCheck --check-prefix=CHECK1 %s 3586277eb844c4983c81de62d7c050e92fe7155788Stephen Hines 3686277eb844c4983c81de62d7c050e92fe7155788Stephen Hines 3786277eb844c4983c81de62d7c050e92fe7155788Stephen Hines// Test normal exit, coverage level 2. 38cdce50bda3603770cc4ef80cbb613c78b8e47a17Pirama Arumuga Nainar// RUN: %clangxx_asan -fsanitize-coverage=bb -DSHARED %s -shared -o %T/libcoverage_android_test_1.so -fPIC 39cdce50bda3603770cc4ef80cbb613c78b8e47a17Pirama Arumuga Nainar// RUN: %clangxx_asan -fsanitize-coverage=bb -DSO_DIR=\"%device\" %s -o %t 4086277eb844c4983c81de62d7c050e92fe7155788Stephen Hines 4186277eb844c4983c81de62d7c050e92fe7155788Stephen Hines// RUN: adb shell rm -rf %device/coverage-android 4286277eb844c4983c81de62d7c050e92fe7155788Stephen Hines// RUN: rm -rf %T/coverage-android 4386277eb844c4983c81de62d7c050e92fe7155788Stephen Hines 4486277eb844c4983c81de62d7c050e92fe7155788Stephen Hines// RUN: adb shell mkdir -p %device/coverage-android/direct 4586277eb844c4983c81de62d7c050e92fe7155788Stephen Hines// RUN: mkdir -p %T/coverage-android/direct 46799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar// RUN: %env_asan_opts=coverage=1:coverage_direct=1:coverage_dir=%device/coverage-android/direct:verbosity=1 %run %t 4786277eb844c4983c81de62d7c050e92fe7155788Stephen Hines// RUN: adb pull %device/coverage-android/direct %T/coverage-android/direct 4886277eb844c4983c81de62d7c050e92fe7155788Stephen Hines// RUN: ls; pwd 4986277eb844c4983c81de62d7c050e92fe7155788Stephen Hines// RUN: cd %T/coverage-android/direct 5086277eb844c4983c81de62d7c050e92fe7155788Stephen Hines// RUN: %sancov rawunpack *.sancov.raw 5186277eb844c4983c81de62d7c050e92fe7155788Stephen Hines// RUN: %sancov print *.sancov |& FileCheck --check-prefix=CHECK2 %s 5286277eb844c4983c81de62d7c050e92fe7155788Stephen Hines 5386277eb844c4983c81de62d7c050e92fe7155788Stephen Hines 5486277eb844c4983c81de62d7c050e92fe7155788Stephen Hines// Test sudden death, coverage level 2. 55cdce50bda3603770cc4ef80cbb613c78b8e47a17Pirama Arumuga Nainar// RUN: %clangxx_asan -fsanitize-coverage=bb -DSHARED -DKILL %s -shared -o %T/libcoverage_android_test_1.so -fPIC 56cdce50bda3603770cc4ef80cbb613c78b8e47a17Pirama Arumuga Nainar// RUN: %clangxx_asan -fsanitize-coverage=bb -DSO_DIR=\"%device\" %s -o %t 5786277eb844c4983c81de62d7c050e92fe7155788Stephen Hines 5886277eb844c4983c81de62d7c050e92fe7155788Stephen Hines// RUN: adb shell rm -rf %device/coverage-android-kill 5986277eb844c4983c81de62d7c050e92fe7155788Stephen Hines// RUN: rm -rf %T/coverage-android-kill 6086277eb844c4983c81de62d7c050e92fe7155788Stephen Hines 6186277eb844c4983c81de62d7c050e92fe7155788Stephen Hines// RUN: adb shell mkdir -p %device/coverage-android-kill/direct 6286277eb844c4983c81de62d7c050e92fe7155788Stephen Hines// RUN: mkdir -p %T/coverage-android-kill/direct 63799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar// RUN: %env_asan_opts=coverage=1:coverage_direct=1:coverage_dir=%device/coverage-android-kill/direct:verbosity=1 not %run %t 6486277eb844c4983c81de62d7c050e92fe7155788Stephen Hines// RUN: adb pull %device/coverage-android-kill/direct %T/coverage-android-kill/direct 6586277eb844c4983c81de62d7c050e92fe7155788Stephen Hines// RUN: ls; pwd 6686277eb844c4983c81de62d7c050e92fe7155788Stephen Hines// RUN: cd %T/coverage-android-kill/direct 6786277eb844c4983c81de62d7c050e92fe7155788Stephen Hines// RUN: %sancov rawunpack *.sancov.raw 6886277eb844c4983c81de62d7c050e92fe7155788Stephen Hines// RUN: %sancov print *.sancov |& FileCheck --check-prefix=CHECK2 %s 6986277eb844c4983c81de62d7c050e92fe7155788Stephen Hines 7086277eb844c4983c81de62d7c050e92fe7155788Stephen Hines 7186277eb844c4983c81de62d7c050e92fe7155788Stephen Hines// Test normal exit, coverage level 3. 72cdce50bda3603770cc4ef80cbb613c78b8e47a17Pirama Arumuga Nainar// RUN: %clangxx_asan -fsanitize-coverage=edge -DSHARED %s -shared -o %T/libcoverage_android_test_1.so -fPIC 73cdce50bda3603770cc4ef80cbb613c78b8e47a17Pirama Arumuga Nainar// RUN: %clangxx_asan -fsanitize-coverage=edge -DSO_DIR=\"%device\" %s -o %t 7486277eb844c4983c81de62d7c050e92fe7155788Stephen Hines 7586277eb844c4983c81de62d7c050e92fe7155788Stephen Hines// RUN: adb shell rm -rf %device/coverage-android 7686277eb844c4983c81de62d7c050e92fe7155788Stephen Hines// RUN: rm -rf %T/coverage-android 7786277eb844c4983c81de62d7c050e92fe7155788Stephen Hines 7886277eb844c4983c81de62d7c050e92fe7155788Stephen Hines// RUN: adb shell mkdir -p %device/coverage-android/direct 7986277eb844c4983c81de62d7c050e92fe7155788Stephen Hines// RUN: mkdir -p %T/coverage-android/direct 80799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar// RUN: %env_asan_opts=coverage=1:coverage_direct=1:coverage_dir=%device/coverage-android/direct:verbosity=1 %run %t 8186277eb844c4983c81de62d7c050e92fe7155788Stephen Hines// RUN: adb pull %device/coverage-android/direct %T/coverage-android/direct 8286277eb844c4983c81de62d7c050e92fe7155788Stephen Hines// RUN: ls; pwd 8386277eb844c4983c81de62d7c050e92fe7155788Stephen Hines// RUN: cd %T/coverage-android/direct 8486277eb844c4983c81de62d7c050e92fe7155788Stephen Hines// RUN: %sancov rawunpack *.sancov.raw 8586277eb844c4983c81de62d7c050e92fe7155788Stephen Hines// RUN: %sancov print *.sancov |& FileCheck --check-prefix=CHECK3 %s 8686277eb844c4983c81de62d7c050e92fe7155788Stephen Hines 8786277eb844c4983c81de62d7c050e92fe7155788Stephen Hines 8886277eb844c4983c81de62d7c050e92fe7155788Stephen Hines// Test sudden death, coverage level 3. 89cdce50bda3603770cc4ef80cbb613c78b8e47a17Pirama Arumuga Nainar// RUN: %clangxx_asan -fsanitize-coverage=edge -DSHARED -DKILL %s -shared -o %T/libcoverage_android_test_1.so -fPIC 90cdce50bda3603770cc4ef80cbb613c78b8e47a17Pirama Arumuga Nainar// RUN: %clangxx_asan -fsanitize-coverage=edge -DSO_DIR=\"%device\" %s -o %t 9186277eb844c4983c81de62d7c050e92fe7155788Stephen Hines 9286277eb844c4983c81de62d7c050e92fe7155788Stephen Hines// RUN: adb shell rm -rf %device/coverage-android-kill 9386277eb844c4983c81de62d7c050e92fe7155788Stephen Hines// RUN: rm -rf %T/coverage-android-kill 9486277eb844c4983c81de62d7c050e92fe7155788Stephen Hines 9586277eb844c4983c81de62d7c050e92fe7155788Stephen Hines// RUN: adb shell mkdir -p %device/coverage-android-kill/direct 9686277eb844c4983c81de62d7c050e92fe7155788Stephen Hines// RUN: mkdir -p %T/coverage-android-kill/direct 97799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar// RUN: %env_asan_opts=coverage=1:coverage_direct=1:coverage_dir=%device/coverage-android-kill/direct:verbosity=1 not %run %t 9886277eb844c4983c81de62d7c050e92fe7155788Stephen Hines// RUN: adb pull %device/coverage-android-kill/direct %T/coverage-android-kill/direct 9986277eb844c4983c81de62d7c050e92fe7155788Stephen Hines// RUN: ls; pwd 10086277eb844c4983c81de62d7c050e92fe7155788Stephen Hines// RUN: cd %T/coverage-android-kill/direct 10186277eb844c4983c81de62d7c050e92fe7155788Stephen Hines// RUN: %sancov rawunpack *.sancov.raw 10286277eb844c4983c81de62d7c050e92fe7155788Stephen Hines// RUN: %sancov print *.sancov |& FileCheck --check-prefix=CHECK3 %s 1036a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines 1046a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines#include <assert.h> 1056a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines#include <dlfcn.h> 1066a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines#include <stdio.h> 1076a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines#include <unistd.h> 1086a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines#include <sys/types.h> 1096a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines#include <signal.h> 1106a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines 1116a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines#ifdef SHARED 1126a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hinesextern "C" { 1136a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hinesvoid bar() { 1146a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines printf("bar\n"); 1156a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines#ifdef KILL 1166a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines kill(getpid(), SIGKILL); 1176a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines#endif 1186a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines} 1196a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines} 1206a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines#else 1216a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines 12286277eb844c4983c81de62d7c050e92fe7155788Stephen Hinesvolatile int sink; 12386277eb844c4983c81de62d7c050e92fe7155788Stephen Hines 1246a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hinesint main(int argc, char **argv) { 1256a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines fprintf(stderr, "PID: %d\n", getpid()); 1266a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines void *handle1 = 1276a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines dlopen(SO_DIR "/libcoverage_android_test_1.so", RTLD_LAZY); 1286a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines assert(handle1); 12986277eb844c4983c81de62d7c050e92fe7155788Stephen Hines 13086277eb844c4983c81de62d7c050e92fe7155788Stephen Hines if (argc == 0) 13186277eb844c4983c81de62d7c050e92fe7155788Stephen Hines sink = 0; 13286277eb844c4983c81de62d7c050e92fe7155788Stephen Hines 1336a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines void (*bar1)() = (void (*)())dlsym(handle1, "bar"); 1346a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines assert(bar1); 1356a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines bar1(); 1366a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines 1376a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines return 0; 1386a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines} 1396a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines#endif 1406a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines 14186277eb844c4983c81de62d7c050e92fe7155788Stephen Hines// CHECK1: 2 PCs total 142c58a43648cd6121c51a2e795a28e2ef90d7813e6Pirama Arumuga Nainar// CHECK2: 4 PCs total 143c58a43648cd6121c51a2e795a28e2ef90d7813e6Pirama Arumuga Nainar// CHECK3: 5 PCs total 144