[ASan] Fix __asan_describe_address and add a test for it.

llvm-svn: 213583
This commit is contained in:
Alexey Samsonov 2014-07-21 21:33:46 +00:00
parent d32803b669
commit a89ad664b1
2 changed files with 22 additions and 0 deletions

View File

@ -945,7 +945,10 @@ void NOINLINE __asan_set_error_report_callback(void (*callback)(const char*)) {
}
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" {

View File

@ -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;
}