diff options
| author | Sergey Matveev <earthdok@google.com> | 2014-05-23 16:04:41 +0000 |
|---|---|---|
| committer | Sergey Matveev <earthdok@google.com> | 2014-05-23 16:04:41 +0000 |
| commit | 2be4a2829738b46fd887f911a7ea177baf2092d4 (patch) | |
| tree | a429da2acaf516a4703d9cdaecd85642069b1b6a /compiler-rt/test/asan/TestCases/Linux/stack-trace-dlclose.cc | |
| parent | 3892013a8abca6b98167bf655a72cd3a385493bb (diff) | |
| download | bcm5719-llvm-2be4a2829738b46fd887f911a7ea177baf2092d4.tar.gz bcm5719-llvm-2be4a2829738b46fd887f911a7ea177baf2092d4.zip | |
[sanitizer] Make stack traces from dlclose()'d modules more meaningful.
Previously, they silently omitted PCs belonging to unknown modules. Now we print
(<unknown module>) instead.
llvm-svn: 209522
Diffstat (limited to 'compiler-rt/test/asan/TestCases/Linux/stack-trace-dlclose.cc')
| -rw-r--r-- | compiler-rt/test/asan/TestCases/Linux/stack-trace-dlclose.cc | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/compiler-rt/test/asan/TestCases/Linux/stack-trace-dlclose.cc b/compiler-rt/test/asan/TestCases/Linux/stack-trace-dlclose.cc new file mode 100644 index 00000000000..3c6812b02fc --- /dev/null +++ b/compiler-rt/test/asan/TestCases/Linux/stack-trace-dlclose.cc @@ -0,0 +1,40 @@ +// RUN: %clangxx_asan -DSHARED %s -shared -o %T/stack_trace_dlclose.so -fPIC +// RUN: %clangxx_asan -DSO_DIR=\"%T\" %s -o %t +// RUN: ASAN_OPTIONS=exitcode=0 %run %t 2>&1 | FileCheck %s + +#include <assert.h> +#include <dlfcn.h> +#include <stdlib.h> +#include <stdio.h> +#include <unistd.h> + +#include <sanitizer/common_interface_defs.h> + +#ifdef SHARED +extern "C" { +void *foo() { + return malloc(1); +} +} +#else +void *handle; + +int main(int argc, char **argv) { + void *handle = dlopen(SO_DIR "/stack_trace_dlclose.so", RTLD_LAZY); + assert(handle); + void *(*foo)() = (void *(*)())dlsym(handle, "foo"); + assert(foo); + void *p = foo(); + assert(p); + dlclose(handle); + + free(p); + free(p); // double-free + + return 0; +} +#endif + +// CHECK: {{ #0 0x.* in malloc}} +// CHECK: {{ #1 0x.* \(<unknown module>\)}} +// CHECK: {{ #2 0x.* in main}} |

