summaryrefslogtreecommitdiff
path: root/deps/v8/src/compiler/backend/frame-elider.cc
diff options
context:
space:
mode:
Diffstat (limited to 'deps/v8/src/compiler/backend/frame-elider.cc')
-rw-r--r--deps/v8/src/compiler/backend/frame-elider.cc12
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;
+ }
}
}
}