 Chromium Code Reviews
 Chromium Code Reviews Issue 6499015:
  Make sure we always have room for patching the reloc info during lazy deoptim...  (Closed) 
  Base URL: http://v8.googlecode.com/svn/branches/bleeding_edge/
    
  
    Issue 6499015:
  Make sure we always have room for patching the reloc info during lazy deoptim...  (Closed) 
  Base URL: http://v8.googlecode.com/svn/branches/bleeding_edge/| Index: src/ia32/lithium-codegen-ia32.cc | 
| =================================================================== | 
| --- src/ia32/lithium-codegen-ia32.cc (revision 6782) | 
| +++ src/ia32/lithium-codegen-ia32.cc (working copy) | 
| @@ -43,13 +43,20 @@ | 
| public: | 
| SafepointGenerator(LCodeGen* codegen, | 
| LPointerMap* pointers, | 
| - int deoptimization_index) | 
| + int deoptimization_index, | 
| + bool ensure_reloc_space = false) | 
| : codegen_(codegen), | 
| pointers_(pointers), | 
| - deoptimization_index_(deoptimization_index) { } | 
| + deoptimization_index_(deoptimization_index), | 
| + ensure_reloc_space_(ensure_reloc_space) { } | 
| virtual ~SafepointGenerator() { } | 
| virtual void Generate() { | 
| + // Ensure that we have enough space in the reloc info to patch | 
| + // this with calls when doing deoptimization. | 
| + if (ensure_reloc_space_) { | 
| + codegen_->masm()->RecordComment(NULL, true); | 
| 
Kevin Millikin (Chromium)
2011/02/15 12:19:15
I guess printing comments works with NULL strings?
 
Rico
2011/02/15 13:33:00
Printing with null works, but I changed this to a
 | 
| + } | 
| codegen_->RecordSafepoint(pointers_, deoptimization_index_); | 
| } | 
| @@ -57,6 +64,7 @@ | 
| LCodeGen* codegen_; | 
| LPointerMap* pointers_; | 
| int deoptimization_index_; | 
| + bool ensure_reloc_space_; | 
| }; | 
| @@ -3731,9 +3739,13 @@ | 
| LEnvironment* env = instr->deoptimization_environment(); | 
| RecordPosition(pointers->position()); | 
| RegisterEnvironmentForDeoptimization(env); | 
| + // Create safepoint generator that will also ensure enough space in the | 
| + // reloc info for patching in deoptimization (since this is invoking a | 
| + // builtin) | 
| SafepointGenerator safepoint_generator(this, | 
| pointers, | 
| - env->deoptimization_index()); | 
| + env->deoptimization_index(), | 
| + true); | 
| __ mov(esi, Operand(ebp, StandardFrameConstants::kContextOffset)); | 
| __ push(Immediate(Smi::FromInt(strict_mode_flag()))); | 
| __ InvokeBuiltin(Builtins::DELETE, CALL_FUNCTION, &safepoint_generator); |