diff options
author | Evgeniy Stepanov <eugeni.stepanov@gmail.com> | 2014-06-03 12:15:43 +0000 |
---|---|---|
committer | Evgeniy Stepanov <eugeni.stepanov@gmail.com> | 2014-06-03 12:15:43 +0000 |
commit | bb2fc7e4bbe354f16a39b47c5fca77da0198acc9 (patch) | |
tree | 6966ae92cb7a88c96734c4d9be8744a75b57c283 /compiler-rt/test/asan/TestCases/Android/coverage.cc | |
parent | 114a2bc9d25de52a1beacd18aff3a07929c64910 (diff) | |
download | bcm5719-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.cc | 41 |
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 |