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);