Loading compiler-rt/lib/asan/asan_report.cc +3 −0 Original line number Diff line number Diff line Loading @@ -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" { Loading compiler-rt/test/asan/TestCases/describe_address.cc 0 → 100644 +19 −0 Original line number Diff line number Diff line // 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; } Loading
compiler-rt/lib/asan/asan_report.cc +3 −0 Original line number Diff line number Diff line Loading @@ -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" { Loading
compiler-rt/test/asan/TestCases/describe_address.cc 0 → 100644 +19 −0 Original line number Diff line number Diff line // 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; }