Index: src/arm/deoptimizer-arm.cc |
diff --git a/src/arm/deoptimizer-arm.cc b/src/arm/deoptimizer-arm.cc |
index 5b42116ad4bc0ac32c1bea0321337d56211ab481..2118ed6d5d8f87aac92fe014c69e3041b0971118 100644 |
--- a/src/arm/deoptimizer-arm.cc |
+++ b/src/arm/deoptimizer-arm.cc |
@@ -70,6 +70,9 @@ void Deoptimizer::PatchCodeForDeoptimization(Isolate* isolate, Code* code) { |
ASSERT(call_size_in_bytes % Assembler::kInstrSize == 0); |
ASSERT(call_size_in_bytes <= patch_size()); |
CodePatcher patcher(call_address, call_size_in_words); |
+ if (deopt_data->Mode(i)->value() == 1) { |
+ patcher.masm()->set_thumb_mode(); |
+ } |
patcher.masm()->Call(deopt_entry, RelocInfo::NONE32); |
ASSERT(prev_call_address == NULL || |
call_address >= prev_call_address + patch_size()); |
@@ -142,7 +145,7 @@ void Deoptimizer::RevertInterruptCodeAt(Code* unoptimized_code, |
2 * kInstrSize) & 0xfff; |
Address interrupt_address_pointer = pc_after + interrupt_address_offset; |
Memory::uint32_at(interrupt_address_pointer) = |
- reinterpret_cast<uint32_t>(interrupt_code->entry()); |
+ reinterpret_cast<uint32_t>(interrupt_code->instruction_start()); |
interrupt_code->GetHeap()->incremental_marking()->RecordCodeTargetPatch( |
unoptimized_code, pc_after - 2 * kInstrSize, interrupt_code); |
@@ -164,7 +167,7 @@ bool Deoptimizer::InterruptCodeIsPatched(Code* unoptimized_code, |
if (Assembler::IsNop(Assembler::instr_at(pc_after - 3 * kInstrSize))) { |
ASSERT(Assembler::IsLdrPcImmediateOffset( |
Assembler::instr_at(pc_after - 2 * kInstrSize))); |
- ASSERT(reinterpret_cast<uint32_t>(replacement_code->entry()) == |
+ ASSERT(reinterpret_cast<uint32_t>(replacement_code->instruction_start()) == |
Memory::uint32_at(interrupt_address_pointer)); |
return true; |
} else { |
@@ -172,7 +175,7 @@ bool Deoptimizer::InterruptCodeIsPatched(Code* unoptimized_code, |
Assembler::instr_at(pc_after - 2 * kInstrSize))); |
ASSERT_EQ(kBranchBeforeInterrupt, |
Memory::int32_at(pc_after - 3 * kInstrSize)); |
- ASSERT(reinterpret_cast<uint32_t>(interrupt_code->entry()) == |
+ ASSERT(reinterpret_cast<uint32_t>(interrupt_code->instruction_start()) == |
Memory::uint32_at(interrupt_address_pointer)); |
return false; |
} |
@@ -331,7 +334,7 @@ void Deoptimizer::DoComputeOsrOutputFrame() { |
} |
Code* continuation = isolate_->builtins()->builtin(Builtins::kNotifyOSR); |
output_[0]->SetContinuation( |
- reinterpret_cast<uint32_t>(continuation->entry())); |
+ reinterpret_cast<uint32_t>(continuation->instruction_start())); |
if (FLAG_trace_osr) { |
PrintF("[on-stack replacement translation %s: 0x%08" V8PRIxPTR " ", |