diff options
Diffstat (limited to 'deps/v8/src/safepoint-table.cc')
-rw-r--r-- | deps/v8/src/safepoint-table.cc | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/deps/v8/src/safepoint-table.cc b/deps/v8/src/safepoint-table.cc index 153bf4327..34e9cf4ab 100644 --- a/deps/v8/src/safepoint-table.cc +++ b/deps/v8/src/safepoint-table.cc @@ -1,4 +1,4 @@ -// Copyright 2010 the V8 project authors. All rights reserved. +// Copyright 2011 the V8 project authors. All rights reserved. // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are // met: @@ -27,6 +27,7 @@ #include "safepoint-table.h" +#include "deoptimizer.h" #include "disasm.h" #include "macro-assembler.h" @@ -144,6 +145,14 @@ unsigned SafepointTableBuilder::GetCodeOffset() const { void SafepointTableBuilder::Emit(Assembler* assembler, int bits_per_entry) { + // For lazy deoptimization we need space to patch a call after every call. + // Ensure there is always space for such patching, even if the code ends + // in a call. + int target_offset = assembler->pc_offset() + Deoptimizer::patch_size(); + while (assembler->pc_offset() < target_offset) { + assembler->nop(); + } + // Make sure the safepoint table is properly aligned. Pad with nops. assembler->Align(kIntSize); assembler->RecordComment(";;; Safepoint table."); |