Merge "Do not do local unwinds through .oat or .dex maps."
am: 48d930d0a9

* commit '48d930d0a9805c681bf6465bcd71b28a31861cd5':
  Do not do local unwinds through .oat or .dex maps.
diff --git a/libbacktrace/UnwindCurrent.cpp b/libbacktrace/UnwindCurrent.cpp
index 67e583f..f985f52 100644
--- a/libbacktrace/UnwindCurrent.cpp
+++ b/libbacktrace/UnwindCurrent.cpp
@@ -23,6 +23,7 @@
 #define UNW_LOCAL_ONLY
 #include <libunwind.h>
 
+#include <android-base/strings.h>
 #include <backtrace/Backtrace.h>
 
 #include "BacktraceLog.h"
@@ -124,6 +125,16 @@
         num_ignore_frames--;
       }
     }
+
+    // For now, do not attempt to do local unwinds through .dex, or .oat
+    // maps. We can only unwind through these if there is a compressed
+    // section available, almost all local unwinds are done by ART
+    // which will dump the Java frames separately.
+    // TODO: Come up with a flag to control this.
+    if (android::base::EndsWith(frame->map.name, ".dex")
+        || android::base::EndsWith(frame->map.name, ".oat")) {
+      break;
+    }
     ret = unw_step (cursor.get());
   } while (ret > 0 && num_frames < MAX_BACKTRACE_FRAMES);