coverage-android.cc revision 86277eb844c4983c81de62d7c050e92fe7155788
1// Test for direct coverage writing with dlopen.
2
3// Test normal exit, coverage level 1.
4// RUN: %clangxx_asan -fsanitize-coverage=1 -DSHARED %s -shared -o %T/libcoverage_android_test_1.so -fPIC
5// RUN: %clangxx_asan -fsanitize-coverage=1 -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: ASAN_OPTIONS=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=1 -DSHARED -DKILL %s -shared -o %T/libcoverage_android_test_1.so -fPIC
22// RUN: %clangxx_asan -fsanitize-coverage=1 -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: ASAN_OPTIONS=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=2 -DSHARED %s -shared -o %T/libcoverage_android_test_1.so -fPIC
39// RUN: %clangxx_asan -fsanitize-coverage=2 -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: ASAN_OPTIONS=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=2 -DSHARED -DKILL %s -shared -o %T/libcoverage_android_test_1.so -fPIC
56// RUN: %clangxx_asan -fsanitize-coverage=2 -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: ASAN_OPTIONS=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=3 -DSHARED %s -shared -o %T/libcoverage_android_test_1.so -fPIC
73// RUN: %clangxx_asan -fsanitize-coverage=3 -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: ASAN_OPTIONS=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=3 -DSHARED -DKILL %s -shared -o %T/libcoverage_android_test_1.so -fPIC
90// RUN: %clangxx_asan -fsanitize-coverage=3 -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: ASAN_OPTIONS=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
112extern "C" {
113void bar() {
114  printf("bar\n");
115#ifdef KILL
116  kill(getpid(), SIGKILL);
117#endif
118}
119}
120#else
121
122volatile int sink;
123
124int 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: 7 PCs total
143// CHECK3: 8 PCs total
144