diff options
author | Alexey Samsonov <samsonov@google.com> | 2013-07-01 09:15:19 +0000 |
---|---|---|
committer | Alexey Samsonov <samsonov@google.com> | 2013-07-01 09:15:19 +0000 |
commit | c3832f7788db8df5930cd92ef22edfa204a3a9d0 (patch) | |
tree | 8344c52c0b56561153fbfe7351ec0457e0c55e68 | |
parent | d6e856f722548428b188d08476603ced0be4a777 (diff) | |
download | bcm5719-llvm-c3832f7788db8df5930cd92ef22edfa204a3a9d0.tar.gz bcm5719-llvm-c3832f7788db8df5930cd92ef22edfa204a3a9d0.zip |
[ASan] Add sanity test for asan_symbolize.py script
llvm-svn: 185318
3 files changed, 51 insertions, 0 deletions
diff --git a/compiler-rt/lib/asan/lit_tests/TestCases/SharedLibs/shared-lib-test-so.cc b/compiler-rt/lib/asan/lit_tests/TestCases/SharedLibs/shared-lib-test-so.cc index 686a2457808..6ef565ce47b 100644 --- a/compiler-rt/lib/asan/lit_tests/TestCases/SharedLibs/shared-lib-test-so.cc +++ b/compiler-rt/lib/asan/lit_tests/TestCases/SharedLibs/shared-lib-test-so.cc @@ -19,3 +19,8 @@ extern "C" void inc(int index) { GLOB[index]++; } + +extern "C" +void inc2(int *a, int index) { + a[index]++; +} diff --git a/compiler-rt/lib/asan/lit_tests/TestCases/asan-symbolize-sanity-test.cc b/compiler-rt/lib/asan/lit_tests/TestCases/asan-symbolize-sanity-test.cc new file mode 100644 index 00000000000..a539ca3dbd9 --- /dev/null +++ b/compiler-rt/lib/asan/lit_tests/TestCases/asan-symbolize-sanity-test.cc @@ -0,0 +1,39 @@ +// Check that asan_symbolize.py script works (for binaries, ASan RTL and +// shared object files. + +// RUN: %clangxx_asan -O0 %p/SharedLibs/shared-lib-test-so.cc -fPIC -shared -o %t-so.so +// RUN: %clangxx_asan -O0 %s -o %t +// RUN: ASAN_SYMBOLIZER_PATH= %t 2>&1 | %asan_symbolize | FileCheck %s +#include <dlfcn.h> +#include <stdio.h> +#include <stdlib.h> + +#include <string> + +using std::string; + +typedef void (fun_t)(int*, int); + +int main(int argc, char *argv[]) { + string path = string(argv[0]) + "-so.so"; + printf("opening %s ... \n", path.c_str()); + void *lib = dlopen(path.c_str(), RTLD_NOW); + if (!lib) { + printf("error in dlopen(): %s\n", dlerror()); + return 1; + } + fun_t *inc2 = (fun_t*)dlsym(lib, "inc2"); + if (!inc2) return 1; + printf("ok\n"); + int *array = (int*)malloc(40); + inc2(array, 1); + inc2(array, -1); // BOOM + // CHECK: ERROR: AddressSanitizer: heap-buffer-overflow + // CHECK: READ of size 4 at 0x{{.*}} + // CHECK: #0 {{.*}} in inc2 {{.*}}shared-lib-test-so.cc:25 + // CHECK: #1 {{.*}} in main {{.*}}asan-symbolize-sanity-test.cc:[[@LINE-4]] + // CHECK: allocated by thread T{{.*}} here: + // CHECK: #{{.*}} in {{(wrap_|__interceptor_)?}}malloc + // CHECK: #{{.*}} in main {{.*}}asan-symbolize-sanity-test.cc:[[@LINE-9]] + return 0; +} diff --git a/compiler-rt/lib/asan/lit_tests/lit.cfg b/compiler-rt/lib/asan/lit_tests/lit.cfg index 71b284f417c..df0b1e63bd2 100644 --- a/compiler-rt/lib/asan/lit_tests/lit.cfg +++ b/compiler-rt/lib/asan/lit_tests/lit.cfg @@ -69,6 +69,13 @@ config.substitutions.append( ("%clangxx_asan ", (" " + config.clang + " " + # Setup path to external LLVM symbolizer to run AddressSanitizer output tests. config.environment['ASAN_SYMBOLIZER_PATH'] = config.llvm_symbolizer_path +# Setup path to asan_symbolize.py script. +asan_source_dir = get_required_attr(config, "asan_source_dir") +asan_symbolize = os.path.join(asan_source_dir, "scripts", "asan_symbolize.py") +if not os.path.exists(asan_symbolize): + lit.fatal("Can't find script on path %r" % asan_symbolize) +config.substitutions.append( ("%asan_symbolize", " " + asan_symbolize + " ") ) + # Define CHECK-%os to check for OS-dependent output. config.substitutions.append( ('CHECK-%os', ("CHECK-" + config.host_os))) |