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