Do not do local unwinds through .oat or .dex maps.

Bug: 27391690
Change-Id: I88a49537544b507a3b0bfa61eafc27400a05281b
This commit is contained in:
Christopher Ferris 2016-03-01 17:56:00 -08:00
parent ae607e149b
commit 4265ed7cc8
1 changed files with 11 additions and 0 deletions

View File

@ -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 @@ bool UnwindCurrent::UnwindFromContext(size_t num_ignore_frames, ucontext_t* ucon
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);