[llvm-commits] [compiler-rt] r171112 - in /compiler-rt/trunk/lib/asan: asan_report.cc lit_tests/stack-frame-demangle.cc

Alexey Samsonov samsonov at google.com
Wed Dec 26 06:44:46 PST 2012


Author: samsonov
Date: Wed Dec 26 08:44:46 2012
New Revision: 171112

URL: http://llvm.org/viewvc/llvm-project?rev=171112&view=rev
Log:
[ASan] Teach ASan to print demangled function name when describing stack frame

Added:
    compiler-rt/trunk/lib/asan/lit_tests/stack-frame-demangle.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=171112&r1=171111&r2=171112&view=diff
==============================================================================
--- compiler-rt/trunk/lib/asan/asan_report.cc (original)
+++ compiler-rt/trunk/lib/asan/asan_report.cc Wed Dec 26 08:44:46 2012
@@ -20,6 +20,7 @@
 #include "asan_thread_registry.h"
 #include "sanitizer_common/sanitizer_common.h"
 #include "sanitizer_common/sanitizer_report_decorator.h"
+#include "sanitizer_common/sanitizer_symbolizer.h"
 
 namespace __asan {
 
@@ -247,7 +248,7 @@
   Printf("%s", d.Location());
   Printf("Address %p is located at offset %zu "
              "in frame <%s> of T%d's stack:\n",
-             (void*)addr, offset, buf, t->tid());
+             (void*)addr, offset, Demangle(buf), t->tid());
   Printf("%s", d.EndLocation());
   // Report the number of stack objects.
   char *p;

Added: compiler-rt/trunk/lib/asan/lit_tests/stack-frame-demangle.cc
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/asan/lit_tests/stack-frame-demangle.cc?rev=171112&view=auto
==============================================================================
--- compiler-rt/trunk/lib/asan/lit_tests/stack-frame-demangle.cc (added)
+++ compiler-rt/trunk/lib/asan/lit_tests/stack-frame-demangle.cc Wed Dec 26 08:44:46 2012
@@ -0,0 +1,24 @@
+// Check that ASan is able to print demangled frame name even w/o
+// symbolization.
+
+// RUN: %clangxx_asan -m64 -O0 %s -o %t && %t 2>&1 | FileCheck %s
+
+#include <string.h>
+
+namespace XXX {
+struct YYY {
+  static int ZZZ(int x) {
+    char array[10];
+    memset(array, 0, 10);
+    return array[x];  // BOOOM
+    // CHECK: {{ERROR: AddressSanitizer: stack-buffer-overflow}}
+    // CHECK: {{READ of size 1 at 0x.* thread T0}}
+    // CHECK: {{Address 0x.* is .* frame <XXX::YYY::ZZZ(.*)>}}
+  }
+};
+};
+
+int main(int argc, char **argv) {
+  int res = XXX::YYY::ZZZ(argc + 10);
+  return res;
+}





More information about the llvm-commits mailing list