[compiler-rt] r213583 - [ASan] Fix __asan_describe_address and add a test for it.
Alexey Samsonov
vonosmas at gmail.com
Mon Jul 21 14:33:46 PDT 2014
Author: samsonov
Date: Mon Jul 21 16:33:46 2014
New Revision: 213583
URL: http://llvm.org/viewvc/llvm-project?rev=213583&view=rev
Log:
[ASan] Fix __asan_describe_address and add a test for it.
Added:
compiler-rt/trunk/test/asan/TestCases/describe_address.cc
Modified:
compiler-rt/trunk/lib/asan/asan_report.cc
Modified: compiler-rt/trunk/lib/asan/asan_report.cc
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/asan/asan_report.cc?rev=213583&r1=213582&r2=213583&view=diff
==============================================================================
--- compiler-rt/trunk/lib/asan/asan_report.cc (original)
+++ compiler-rt/trunk/lib/asan/asan_report.cc Mon Jul 21 16:33:46 2014
@@ -945,7 +945,10 @@ void NOINLINE __asan_set_error_report_ca
}
void __asan_describe_address(uptr addr) {
+ // Thread registry must be locked while we're describing an address.
+ asanThreadRegistry().Lock();
DescribeAddress(addr, 1);
+ asanThreadRegistry().Unlock();
}
extern "C" {
Added: compiler-rt/trunk/test/asan/TestCases/describe_address.cc
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/test/asan/TestCases/describe_address.cc?rev=213583&view=auto
==============================================================================
--- compiler-rt/trunk/test/asan/TestCases/describe_address.cc (added)
+++ compiler-rt/trunk/test/asan/TestCases/describe_address.cc Mon Jul 21 16:33:46 2014
@@ -0,0 +1,19 @@
+// RUN: %clangxx_asan -O0 %s -o %t && %run %t 2>&1 | FileCheck %s
+
+#include <sanitizer/asan_interface.h>
+
+int global;
+
+int main(int argc, char *argv[]) {
+ int stack;
+ int *heap = new int[100];
+ __asan_describe_address(heap);
+ // CHECK: {{.*}} is located 0 bytes inside of 400-byte region
+ // CHECK: allocated by thread T{{.*}} here
+ __asan_describe_address(&stack);
+ // CHECK: Address {{.*}} is located in stack of thread T{{.*}} at offset {{.*}}
+ __asan_describe_address(&global);
+ // CHECK: {{.*}} is located 0 bytes inside of global variable 'global'
+ delete[] heap;
+ return 0;
+}
More information about the llvm-commits
mailing list