15d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines// Test for direct coverage writing with dlopen. 25d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines 35d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines// Test normal exit. 45d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines// RUN: %clangxx_asan -mllvm -asan-coverage=1 -DSHARED %s -shared -o %T/libcoverage_android_test_1.so -fPIC 55d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines// RUN: %clangxx_asan -mllvm -asan-coverage=1 -DSO_DIR=\"%device\" %s -o %t 65d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines 75d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines// RUN: adb shell rm -rf %device/coverage-android 85d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines// RUN: rm -rf %T/coverage-android 95d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines 105d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines// RUN: adb shell mkdir -p %device/coverage-android/direct 115d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines// RUN: mkdir -p %T/coverage-android/direct 125d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines// RUN: ASAN_OPTIONS=coverage=1:coverage_direct=1:coverage_dir=%device/coverage-android/direct:verbosity=1 %run %t 135d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines// RUN: adb pull %device/coverage-android/direct %T/coverage-android/direct 145d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines// RUN: ls; pwd 155d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines// RUN: cd %T/coverage-android/direct 165d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines// RUN: %sancov rawunpack *.sancov.raw 175d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines// RUN: %sancov print *.sancov |& FileCheck %s 185d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines 195d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines 205d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines// Test sudden death. 215d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines// RUN: %clangxx_asan -mllvm -asan-coverage=1 -DSHARED -DKILL %s -shared -o %T/libcoverage_android_test_1.so -fPIC 225d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines// RUN: %clangxx_asan -mllvm -asan-coverage=1 -DSO_DIR=\"%device\" %s -o %t 235d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines 245d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines// RUN: adb shell rm -rf %device/coverage-android-kill 255d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines// RUN: rm -rf %T/coverage-android-kill 265d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines 275d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines// RUN: adb shell mkdir -p %device/coverage-android-kill/direct 285d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines// RUN: mkdir -p %T/coverage-android-kill/direct 295d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines// RUN: ASAN_OPTIONS=coverage=1:coverage_direct=1:coverage_dir=%device/coverage-android-kill/direct:verbosity=1 not %run %t 305d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines// RUN: adb pull %device/coverage-android-kill/direct %T/coverage-android-kill/direct 315d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines// RUN: ls; pwd 325d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines// RUN: cd %T/coverage-android-kill/direct 335d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines// RUN: %sancov rawunpack *.sancov.raw 345d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines// RUN: %sancov print *.sancov |& FileCheck %s 355d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines 365d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines#include <assert.h> 375d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines#include <dlfcn.h> 385d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines#include <stdio.h> 395d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines#include <unistd.h> 405d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines#include <sys/types.h> 415d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines#include <signal.h> 425d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines 435d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines#ifdef SHARED 445d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hinesextern "C" { 455d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hinesvoid bar() { 465d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines printf("bar\n"); 475d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines#ifdef KILL 485d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines kill(getpid(), SIGKILL); 495d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines#endif 505d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines} 515d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines} 525d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines#else 535d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines 545d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hinesint main(int argc, char **argv) { 555d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines fprintf(stderr, "PID: %d\n", getpid()); 565d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines void *handle1 = 575d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines dlopen(SO_DIR "/libcoverage_android_test_1.so", RTLD_LAZY); 585d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines assert(handle1); 595d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines void (*bar1)() = (void (*)())dlsym(handle1, "bar"); 605d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines assert(bar1); 615d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines bar1(); 625d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines 635d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines return 0; 645d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines} 655d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines#endif 665d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines 675d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines// CHECK: 2 PCs total 68