| Index: src/x64/regexp-macro-assembler-x64.cc
|
| diff --git a/src/x64/regexp-macro-assembler-x64.cc b/src/x64/regexp-macro-assembler-x64.cc
|
| index 9b07f68e31241f25463975e3575655ffa734bfae..13a4caa3fbca8862aa3efc18fca1fde18d1727a6 100644
|
| --- a/src/x64/regexp-macro-assembler-x64.cc
|
| +++ b/src/x64/regexp-macro-assembler-x64.cc
|
| @@ -855,6 +855,18 @@ Handle<HeapObject> RegExpMacroAssemblerX64::GetCode(Handle<String> source) {
|
| // position registers.
|
| __ movq(Operand(rbp, kInputStartMinusOne), rax);
|
|
|
| +#ifdef WIN32
|
| + // Ensure that we have written to each stack page, in order. Skipping a page
|
| + // on Windows can cause segmentation faults. Assuming page size is 4k.
|
| + const int kPageSize = 4096;
|
| + const int kRegistersPerPage = kPageSize / kPointerSize;
|
| + for (int i = num_saved_registers_ + kRegistersPerPage - 1;
|
| + i < num_registers_;
|
| + i += kRegistersPerPage) {
|
| + __ movq(register_location(i), rax); // One write every page.
|
| + }
|
| +#endif // WIN32
|
| +
|
| // Initialize code object pointer.
|
| __ Move(code_object_pointer(), masm_.CodeObject());
|
|
|
|
|