1 | // When DYLD-inserting the ASan dylib from a different location than the |
2 | // original, make sure we don't try to reexec. |
3 | |
4 | // UNSUPPORTED: ios |
5 | |
6 | // RUN: rm -rf %t && mkdir -p %t |
7 | // RUN: cp `%clang_asan -print-file-name=lib`/darwin/libclang_rt.asan_osx_dynamic.dylib \ |
8 | // RUN: %t/libclang_rt.asan_osx_dynamic.dylib |
9 | // RUN: %clangxx_asan %s -o %t/a.out |
10 | |
11 | // RUN: %env_asan_opts=verbosity=1 \ |
12 | // RUN: DYLD_INSERT_LIBRARIES=@executable_path/libclang_rt.asan_osx_dynamic.dylib \ |
13 | // RUN: %run %t/a.out 2>&1 \ |
14 | // RUN: | FileCheck %s |
15 | |
16 | // RUN: MACOS_MAJOR=$(sw_vers -productVersion | cut -d'.' -f1) |
17 | // RUN: MACOS_MINOR=$(sw_vers -productVersion | cut -d'.' -f2) |
18 | |
19 | // RUN: IS_MACOS_10_11_OR_HIGHER=$([ $MACOS_MAJOR -eq 10 ] && [ $MACOS_MINOR -lt 11 ]; echo $?) |
20 | |
21 | // On OS X 10.10 and lower, if the dylib is not DYLD-inserted, ASan will re-exec. |
22 | // RUN: if [ $IS_MACOS_10_11_OR_HIGHER == 0 ]; then \ |
23 | // RUN: %env_asan_opts=verbosity=1 %run %t/a.out 2>&1 \ |
24 | // RUN: | FileCheck --check-prefix=CHECK-NOINSERT %s; \ |
25 | // RUN: fi |
26 | |
27 | // On OS X 10.11 and higher, we don't need to DYLD-insert anymore, and the interceptors |
28 | // still installed correctly. Let's just check that things work and we don't try to re-exec. |
29 | // RUN: if [ $IS_MACOS_10_11_OR_HIGHER == 1 ]; then \ |
30 | // RUN: %env_asan_opts=verbosity=1 %run %t/a.out 2>&1 \ |
31 | // RUN: | FileCheck %s; \ |
32 | // RUN: fi |
33 | |
34 | #include <stdio.h> |
35 | |
36 | int main() { |
37 | printf(format: "Passed\n" ); |
38 | return 0; |
39 | } |
40 | |
41 | // CHECK-NOINSERT: exec()-ing the program with |
42 | // CHECK-NOINSERT: DYLD_INSERT_LIBRARIES |
43 | // CHECK-NOINSERT: to enable wrappers. |
44 | // CHECK-NOINSERT: Passed |
45 | |
46 | // CHECK-NOT: exec()-ing the program with |
47 | // CHECK-NOT: DYLD_INSERT_LIBRARIES |
48 | // CHECK-NOT: to enable wrappers. |
49 | // CHECK: Passed |
50 | |