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. |