[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