diff options
author | Elliott Hughes <enh@google.com> | 2013-04-12 11:51:51 -0700 |
---|---|---|
committer | Elliott Hughes <enh@google.com> | 2013-04-12 14:54:42 -0700 |
commit | 9442265659fb274358c7f95900742d8d3a1a0fb5 (patch) | |
tree | 2dabfa9be4cdff3a4234067974b1c115bc8bdb6e /vm/Thread.cpp | |
parent | 7964f9ca0a14380a121c2757c566787b3d21bbe1 (diff) | |
download | android_dalvik-9442265659fb274358c7f95900742d8d3a1a0fb5.tar.gz android_dalvik-9442265659fb274358c7f95900742d8d3a1a0fb5.tar.bz2 android_dalvik-9442265659fb274358c7f95900742d8d3a1a0fb5.zip |
More native stack dump hardening.
Threads just starting up or shutting down might not have any managed
stack frames, leading to a NULL "currFrame" frame pointer in the
interpreter stack.
Bug: 8596028
(cherry picked from commit 46371593812d966c40e1ec4019e3c7c6613046a6)
Change-Id: I0fbc6d422bcae0fd080f7c1a63198755235e9e00
Diffstat (limited to 'vm/Thread.cpp')
-rw-r--r-- | vm/Thread.cpp | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/vm/Thread.cpp b/vm/Thread.cpp index aba98ab73..cfc43486d 100644 --- a/vm/Thread.cpp +++ b/vm/Thread.cpp @@ -3330,7 +3330,12 @@ static bool shouldShowNativeStack(Thread* thread) { // state THREAD_SUSPENDED if they're calling back into the VM, or THREAD_MONITOR // if they're blocked on a monitor, or one of the thread-startup states if // it's early enough in their life cycle (http://b/7432159). - const Method* currentMethod = SAVEAREA_FROM_FP(thread->interpSave.curFrame)->method; + u4* fp = thread->interpSave.curFrame; + if (fp == NULL) { + // The thread has no managed frames, so native frames are all there is. + return true; + } + const Method* currentMethod = SAVEAREA_FROM_FP(fp)->method; return currentMethod != NULL && dvmIsNativeMethod(currentMethod); } |