From: Alexey Samsonov Date: Mon, 1 Jul 2013 09:15:19 +0000 (+0000) Subject: [ASan] Add sanity test for asan_symbolize.py script X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=c3832f7788db8df5930cd92ef22edfa204a3a9d0;p=platform%2Fupstream%2Fllvm.git [ASan] Add sanity test for asan_symbolize.py script llvm-svn: 185318 --- 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 686a245..6ef565c 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 0000000..a539ca3 --- /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 +#include +#include + +#include + +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 71b284f..df0b1e6 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)))