summaryrefslogtreecommitdiffstats
path: root/compiler-rt/test/asan/TestCases/Android/coverage.cc
diff options
context:
space:
mode:
authorEvgeniy Stepanov <eugeni.stepanov@gmail.com>2014-06-03 12:15:43 +0000
committerEvgeniy Stepanov <eugeni.stepanov@gmail.com>2014-06-03 12:15:43 +0000
commitbb2fc7e4bbe354f16a39b47c5fca77da0198acc9 (patch)
tree6966ae92cb7a88c96734c4d9be8744a75b57c283 /compiler-rt/test/asan/TestCases/Android/coverage.cc
parent114a2bc9d25de52a1beacd18aff3a07929c64910 (diff)
downloadbcm5719-llvm-bb2fc7e4bbe354f16a39b47c5fca77da0198acc9.tar.gz
bcm5719-llvm-bb2fc7e4bbe354f16a39b47c5fca77da0198acc9.zip
[sancov] Fix map update logic on Android.
dlopen()/dlclose() are not interceptable on Android, so we update .sancov.map in module constructor callbacks. llvm-svn: 210098
Diffstat (limited to 'compiler-rt/test/asan/TestCases/Android/coverage.cc')
-rw-r--r--compiler-rt/test/asan/TestCases/Android/coverage.cc41
1 files changed, 41 insertions, 0 deletions
diff --git a/compiler-rt/test/asan/TestCases/Android/coverage.cc b/compiler-rt/test/asan/TestCases/Android/coverage.cc
new file mode 100644
index 00000000000..97f122ec287
--- /dev/null
+++ b/compiler-rt/test/asan/TestCases/Android/coverage.cc
@@ -0,0 +1,41 @@
+// Test for direct coverage writing with dlopen.
+// RUN: %clangxx_asan -mllvm -asan-coverage=1 -DSHARED %s -shared -o %T/libcoverage_direct_test_1.so -fPIC
+// RUN: %clangxx_asan -mllvm -asan-coverage=1 -DSO_DIR=\"%device\" %s -o %t
+
+// RUN: adb shell rm -rf %device/coverage-direct
+// RUN: rm -rf %T/coverage-direct
+
+// RUN: adb shell mkdir -p %device/coverage-direct/direct
+// RUN: mkdir -p %T/coverage-direct/direct
+// RUN: ASAN_OPTIONS=coverage=1:coverage_direct=1:coverage_dir=%device/coverage-direct/direct:verbosity=1 %run %t
+// RUN: adb pull %device/coverage-direct/direct %T/coverage-direct/direct
+// RUN: ls; pwd
+// RUN: cd %T/coverage-direct/direct
+// RUN: %sancov rawunpack *.sancov.raw
+// RUN: %sancov print *.sancov |& FileCheck %s
+
+#include <assert.h>
+#include <dlfcn.h>
+#include <stdio.h>
+#include <unistd.h>
+
+#ifdef SHARED
+extern "C" {
+void bar() { printf("bar\n"); }
+}
+#else
+
+int main(int argc, char **argv) {
+ fprintf(stderr, "PID: %d\n", getpid());
+ void *handle1 =
+ dlopen(SO_DIR "/libcoverage_direct_test_1.so", RTLD_LAZY);
+ assert(handle1);
+ void (*bar1)() = (void (*)())dlsym(handle1, "bar");
+ assert(bar1);
+ bar1();
+
+ return 0;
+}
+#endif
+
+// CHECK: 2 PCs total
OpenPOWER on IntegriCloud