Merge to 3.4? We are still seeing this on the 3.4 arm sim builder: http://build.chromium.org/p/client.v8/builders/V8%20arm%20-%20sim%20-%203.4%20branch/builds/4/steps/Sputnik/logs/stdio
On Wed, Aug 10, 2011 at 10:05 AM, <codesite-nore...@google.com> wrote: > Revision: 8868 > Author: mstarzin...@chromium.org > Date: Wed Aug 10 01:03:22 2011 > Log: ARM: Fix deoptimizer for two-word call sites. > > R=svenpa...@chromium.org,kmilli...@chromium.org > BUG=v8:1584 > > Review URL: http://codereview.chromium.org/7585006 > http://code.google.com/p/v8/source/detail?r=8868 > > Modified: > /branches/bleeding_edge/src/arm/deoptimizer-arm.cc > /branches/bleeding_edge/src/arm/macro-assembler-arm.h > > ======================================= > --- /branches/bleeding_edge/src/arm/deoptimizer-arm.cc Mon Aug 8 00:34:54 > 2011 > +++ /branches/bleeding_edge/src/arm/deoptimizer-arm.cc Wed Aug 10 01:03:22 > 2011 > @@ -65,8 +65,6 @@ > > // For each return after a safepoint insert an absolute call to the > // corresponding deoptimization entry. > - ASSERT(patch_size() % Assembler::kInstrSize == 0); > - int call_size_in_words = patch_size() / Assembler::kInstrSize; > unsigned last_pc_offset = 0; > SafepointTable table(function->code()); > for (unsigned i = 0; i < table.length(); i++) { > @@ -87,13 +85,18 @@ > #endif > last_pc_offset = pc_offset; > if (deoptimization_index != Safepoint::kNoDeoptimizationIndex) { > + Address deoptimization_entry = Deoptimizer::GetDeoptimizationEntry( > + deoptimization_index, Deoptimizer::LAZY); > last_pc_offset += gap_code_size; > + int call_size_in_bytes = > MacroAssembler::CallSize(deoptimization_entry, > + RelocInfo::NONE); > + int call_size_in_words = call_size_in_bytes / Assembler::kInstrSize; > + ASSERT(call_size_in_bytes % Assembler::kInstrSize == 0); > + ASSERT(call_size_in_bytes <= patch_size()); > CodePatcher patcher(code->instruction_start() + last_pc_offset, > call_size_in_words); > - Address deoptimization_entry = Deoptimizer::GetDeoptimizationEntry( > - deoptimization_index, Deoptimizer::LAZY); > patcher.masm()->Call(deoptimization_entry, RelocInfo::NONE); > - last_pc_offset += patch_size(); > + last_pc_offset += call_size_in_bytes; > } > } > > ======================================= > --- /branches/bleeding_edge/src/arm/macro-assembler-arm.h Fri Jul 8 > 03:46:10 2011 > +++ /branches/bleeding_edge/src/arm/macro-assembler-arm.h Wed Aug 10 > 01:03:22 2011 > @@ -92,14 +92,16 @@ > void Jump(Register target, Condition cond = al); > void Jump(Address target, RelocInfo::Mode rmode, Condition cond = al); > void Jump(Handle<Code> code, RelocInfo::Mode rmode, Condition cond = al); > - int CallSize(Register target, Condition cond = al); > + static int CallSize(Register target, Condition cond = al); > void Call(Register target, Condition cond = al); > - int CallSize(Address target, RelocInfo::Mode rmode, Condition cond = al); > + static int CallSize(Address target, > + RelocInfo::Mode rmode, > + Condition cond = al); > void Call(Address target, RelocInfo::Mode rmode, Condition cond = al); > - int CallSize(Handle<Code> code, > - RelocInfo::Mode rmode = RelocInfo::CODE_TARGET, > - unsigned ast_id = kNoASTId, > - Condition cond = al); > + static int CallSize(Handle<Code> code, > + RelocInfo::Mode rmode = RelocInfo::CODE_TARGET, > + unsigned ast_id = kNoASTId, > + Condition cond = al); > void Call(Handle<Code> code, > RelocInfo::Mode rmode = RelocInfo::CODE_TARGET, > unsigned ast_id = kNoASTId, > > -- > v8-dev mailing list > v8-dev@googlegroups.com > http://groups.google.com/group/v8-dev > -- v8-dev mailing list v8-dev@googlegroups.com http://groups.google.com/group/v8-dev