[ASan] Make stack-buffer-overflow reports more robust

Summary:
Fix the function that gets stack frame description by address in
thread stack, so that it clearly indicates failures. Make this error non-fatal,
and print as much information as we can in this case. Make all errors in
ParseFrameDescription non-fatal.

Test Plan: check-asan testsuite

Reviewers: kcc

Reviewed By: kcc

Subscribers: llvm-commits

Differential Revision: http://reviews.llvm.org/D5554

llvm-svn: 218819
diff --git a/compiler-rt/lib/asan/asan_debugging.cc b/compiler-rt/lib/asan/asan_debugging.cc
index 2b41f67..ca5fa1f 100644
--- a/compiler-rt/lib/asan/asan_debugging.cc
+++ b/compiler-rt/lib/asan/asan_debugging.cc
@@ -28,19 +28,19 @@
   descr->region_size = 0;
   descr->region_kind = "stack";
 
-  uptr offset = 0;
-  uptr frame_pc = 0;
-  const char *frame_descr = t->GetFrameNameByAddr(addr, &offset, &frame_pc);
+  AsanThread::StackFrameAccess access;
+  if (!t->GetStackFrameAccessByAddr(addr, &access))
+    return;
   InternalMmapVector<StackVarDescr> vars(16);
-  if (!ParseFrameDescription(frame_descr, &vars)) {
+  if (!ParseFrameDescription(access.frame_descr, &vars)) {
     return;
   }
 
   for (uptr i = 0; i < vars.size(); i++) {
-    if (offset <= vars[i].beg + vars[i].size) {
+    if (access.offset <= vars[i].beg + vars[i].size) {
       internal_strncat(descr->name, vars[i].name_pos,
                        Min(descr->name_size, vars[i].name_len));
-      descr->region_address = addr - (offset - vars[i].beg);
+      descr->region_address = addr - (access.offset - vars[i].beg);
       descr->region_size = vars[i].size;
       return;
     }