| 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 " ",
|
|
|