Mercurial > hg > CbC > CbC_llvm
comparison compiler-rt/test/tsan/dlclose.cpp @ 150:1d019706d866
LLVM10
author | anatofuz |
---|---|
date | Thu, 13 Feb 2020 15:10:13 +0900 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
147:c2174574ed3a | 150:1d019706d866 |
---|---|
1 // RUN: %clangxx_tsan -O1 %s -DBUILD_SO -fPIC -shared -o %t-so.so | |
2 // RUN: %clangxx_tsan -O1 %s %link_libcxx_tsan -o %t && %run %t 2>&1 | FileCheck %s | |
3 | |
4 // Test case for | |
5 // https://github.com/google/sanitizers/issues/487 | |
6 | |
7 #ifdef BUILD_SO | |
8 | |
9 #include <stdio.h> | |
10 | |
11 extern "C" | |
12 void sofunc() { | |
13 fprintf(stderr, "HELLO FROM SO\n"); | |
14 } | |
15 | |
16 #else // BUILD_SO | |
17 | |
18 #include <dlfcn.h> | |
19 #include <stdio.h> | |
20 #include <stddef.h> | |
21 #include <unistd.h> | |
22 #include <string> | |
23 | |
24 void *lib; | |
25 void *lib2; | |
26 | |
27 struct Closer { | |
28 ~Closer() { | |
29 dlclose(lib); | |
30 fprintf(stderr, "CLOSED SO\n"); | |
31 } | |
32 }; | |
33 static Closer c; | |
34 | |
35 int main(int argc, char *argv[]) { | |
36 lib = dlopen((std::string(argv[0]) + std::string("-so.so")).c_str(), | |
37 RTLD_NOW|RTLD_NODELETE); | |
38 if (lib == 0) { | |
39 printf("error in dlopen: %s\n", dlerror()); | |
40 return 1; | |
41 } | |
42 void *f = dlsym(lib, "sofunc"); | |
43 if (f == 0) { | |
44 printf("error in dlsym: %s\n", dlerror()); | |
45 return 1; | |
46 } | |
47 ((void(*)())f)(); | |
48 return 0; | |
49 } | |
50 | |
51 #endif // BUILD_SO | |
52 | |
53 // CHECK: HELLO FROM SO | |
54 // CHECK-NOT: Inconsistency detected by ld.so | |
55 // CHECK: CLOSED SO | |
56 |