diff options
Diffstat (limited to 'deps/v8/src/compiler/backend/frame-elider.cc')
-rw-r--r-- | deps/v8/src/compiler/backend/frame-elider.cc | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/deps/v8/src/compiler/backend/frame-elider.cc b/deps/v8/src/compiler/backend/frame-elider.cc index 293fc9352c..5454996b38 100644 --- a/deps/v8/src/compiler/backend/frame-elider.cc +++ b/deps/v8/src/compiler/backend/frame-elider.cc @@ -29,6 +29,18 @@ void FrameElider::MarkBlocks() { block->mark_needs_frame(); break; } + if (instr->arch_opcode() == ArchOpcode::kArchStackSlot && + instr->InputAt(0)->IsImmediate() && + code_->GetImmediate(ImmediateOperand::cast(instr->InputAt(0))) + .ToInt32() > 0) { + // We shouldn't allow accesses to the stack below the current stack + // pointer (indicated by positive slot indices). + // This is in particular because signal handlers (which could, of + // course, be triggered at any point in time) will overwrite this + // memory. + block->mark_needs_frame(); + break; + } } } } |