diff options
author | Nicolas Geoffray <ngeoffray@google.com> | 2017-06-15 12:34:36 +0100 |
---|---|---|
committer | Nicolas Geoffray <ngeoffray@google.com> | 2017-06-15 14:05:08 +0100 |
commit | f789353025401c1907d2264952a88f253a9af8e7 (patch) | |
tree | 9ad4c6a4eed419eb8664fd8aa6b4811d5f259f71 /compiler/optimizing/code_generator_arm.cc | |
parent | 1368312bb4772a1c505452f766fdaceef4c48f6e (diff) |
Set the deopt flag after adjusting the stack pointer.
One should not write to something below the stack pointer, or
it could be overwritten during an interrupt.
Test: test.py
Change-Id: Ie6c997b9f7548ca5844303d6a3fc0c531f469c6e
Diffstat (limited to 'compiler/optimizing/code_generator_arm.cc')
-rw-r--r-- | compiler/optimizing/code_generator_arm.cc | 12 |
1 files changed, 6 insertions, 6 deletions
diff --git a/compiler/optimizing/code_generator_arm.cc b/compiler/optimizing/code_generator_arm.cc index e4efbef394..0b3ac204ff 100644 --- a/compiler/optimizing/code_generator_arm.cc +++ b/compiler/optimizing/code_generator_arm.cc @@ -2521,12 +2521,6 @@ void CodeGeneratorARM::GenerateFrameEntry() { __ cfi().RelOffsetForMany(DWARFReg(S0), 0, fpu_spill_mask_, kArmWordSize); } - if (GetGraph()->HasShouldDeoptimizeFlag()) { - // Initialize should_deoptimize flag to 0. - __ mov(IP, ShifterOperand(0)); - __ StoreToOffset(kStoreWord, IP, SP, -kShouldDeoptimizeFlagSize); - } - int adjust = GetFrameSize() - FrameEntrySpillSize(); __ AddConstant(SP, -adjust); __ cfi().AdjustCFAOffset(adjust); @@ -2537,6 +2531,12 @@ void CodeGeneratorARM::GenerateFrameEntry() { if (RequiresCurrentMethod()) { __ StoreToOffset(kStoreWord, kMethodRegisterArgument, SP, 0); } + + if (GetGraph()->HasShouldDeoptimizeFlag()) { + // Initialize should_deoptimize flag to 0. + __ mov(IP, ShifterOperand(0)); + __ StoreToOffset(kStoreWord, IP, SP, GetStackOffsetOfShouldDeoptimizeFlag()); + } } void CodeGeneratorARM::GenerateFrameExit() { |