Index: runtime/vm/stub_code_arm.cc |
diff --git a/runtime/vm/stub_code_arm.cc b/runtime/vm/stub_code_arm.cc |
index 94cf00b33d08a8d5f0183fe5343adce3998d91ae..f36ce1f43b9513773386938617c44ece0ab80df2 100644 |
--- a/runtime/vm/stub_code_arm.cc |
+++ b/runtime/vm/stub_code_arm.cc |
@@ -437,6 +437,10 @@ static void GenerateDeoptimizationSequence(Assembler* assembler, |
COMPILE_ASSERT(IP > CODE_REG); // Assert IP is pushed first. |
__ ldr(IP, Address(FP, kCallerSpSlotFromFp * kWordSize)); |
__ Push(IP); |
+ } else if (i == SP) { |
+ // Push(SP) has unpredictable behavior. |
+ __ mov(IP, Operand(SP)); |
zra
2015/11/12 20:37:48
Does this clobber IP before it has been saved? Doe
rmacnak
2015/11/12 21:15:52
Hm, this does clobber IP before it has been saved.
Florian Schneider
2015/11/13 09:04:06
IP holds the live value of LR at entry where they
rmacnak
2015/11/13 20:09:12
Removing the assert for the CODE case.
|
+ __ Push(IP); |
} else { |
__ Push(static_cast<Register>(i)); |
} |