Chromium Code Reviews| Index: src/arm/regexp-macro-assembler-arm.cc | 
| =================================================================== | 
| --- src/arm/regexp-macro-assembler-arm.cc (revision 8110) | 
| +++ src/arm/regexp-macro-assembler-arm.cc (working copy) | 
| @@ -371,9 +371,14 @@ | 
| // Isolate. | 
| __ mov(r3, Operand(ExternalReference::isolate_address())); | 
| - ExternalReference function = | 
| - ExternalReference::re_case_insensitive_compare_uc16(masm_->isolate()); | 
| - __ CallCFunction(function, argument_count); | 
| + { | 
| + // The compare function can't cause a GC. Tell the system that it is OK | 
| + // to call into C++ without having a stack frame in place. | 
| + FrameScope scope(masm_, StackFrame::NONE); | 
| + ExternalReference function = | 
| + ExternalReference::re_case_insensitive_compare_uc16(masm_->isolate()); | 
| + __ CallCFunction(function, argument_count); | 
| 
 
Søren Thygesen Gjesse
2011/05/31 07:51:45
How about having CallCFunctionWithoutFrame or Call
 
Erik Corry
2011/05/31 11:52:52
This turns out to be messy because there are lots
 
 | 
| + } | 
| // Check if function returned non-zero for success or zero for failure. | 
| __ cmp(r0, Operand(0, RelocInfo::NONE)); | 
| @@ -611,6 +616,12 @@ | 
| // Entry code: | 
| __ bind(&entry_label_); | 
| + | 
| + // Tell the system that we have a stack frame. Because the type is NONE, no | 
| + // is generated. | 
| + FrameScope scope(masm_, StackFrame::NONE); | 
| + | 
| + // Actually emit code to start a new stack frame. | 
| // Push arguments | 
| // Save callee-save registers. | 
| // Start new stack frame. |