if (VmUtils.getVm().getHeapManager().isLowOnMemory()) {
return null;
}
final VmProcessor proc = VmProcessor.current();
final VmStackReader reader = proc.getArchitecture().getStackReader();
final VmStackFrame[] mt;
boolean inSystemException = false;
// Address lastIP = null;
if (current.isInSystemException()) {
proc.disableReschedule(false);
try {
mt = reader.getVmStackTrace(current.getExceptionStackFrame(),
current.getExceptionInstructionPointer(),
STACKTRACE_LIMIT);
} finally {
proc.enableReschedule(false);
}
inSystemException = true;
} else if (current == proc.getCurrentThread()) {
final Address curFrame = VmMagic.getCurrentFrame();
mt = reader.getVmStackTrace(reader.getPrevious(curFrame), reader
.getReturnAddress(curFrame), STACKTRACE_LIMIT);
} else {
proc.disableReschedule(false);
try {
mt = reader.getVmStackTrace(current.getStackFrame(), current
.getInstructionPointer(), STACKTRACE_LIMIT);
// lastIP = current.getInstructionPointer();
} finally {
proc.enableReschedule(false);
}