Index: src/builtins.cc |
diff --git a/src/builtins.cc b/src/builtins.cc |
index 288ad64b7c4b62241956496586e22b825a3c1b8c..b02b6e9d143414c554489b2dce3f93826f2a528f 100644 |
--- a/src/builtins.cc |
+++ b/src/builtins.cc |
@@ -5596,7 +5596,7 @@ Builtins::Builtins() : initialized_(false) { |
Builtins::~Builtins() { |
} |
-#define DEF_ENUM_C(name) FUNCTION_ADDR(Builtin_##name), |
+#define DEF_ENUM_C(name, ignore) FUNCTION_ADDR(Builtin_##name), |
Address const Builtins::c_functions_[cfunction_count] = { |
BUILTIN_LIST_C(DEF_ENUM_C) |
}; |
@@ -5610,6 +5610,7 @@ struct BuiltinDesc { |
const char* s_name; // name is only used for generating log information. |
int name; |
Code::Flags flags; |
+ bool builtin_exit_frame; |
int argc; |
}; |
@@ -5654,13 +5655,13 @@ Handle<Code> MacroAssemblerBuilder(Isolate* isolate, |
MacroAssembler masm(isolate, u.buffer, sizeof(u.buffer), |
CodeObjectRequired::kYes); |
// Generate the code/adaptor. |
- typedef void (*Generator)(MacroAssembler*, int); |
+ typedef void (*Generator)(MacroAssembler*, int, bool); |
Generator g = FUNCTION_CAST<Generator>(builtin_desc->generator); |
// We pass all arguments to the generator, but it may not use all of |
// them. This works because the first arguments are on top of the |
// stack. |
DCHECK(!masm.has_frame()); |
- g(&masm, builtin_desc->name); |
+ g(&masm, builtin_desc->name, builtin_desc->builtin_exit_frame); |
// Move the code into the object heap. |
CodeDesc desc; |
masm.GetCode(&desc); |
@@ -5714,15 +5715,17 @@ void Builtins::InitBuiltinFunctionTable() { |
functions[builtin_count].s_name = nullptr; |
functions[builtin_count].name = builtin_count; |
functions[builtin_count].flags = static_cast<Code::Flags>(0); |
+ functions[builtin_count].builtin_exit_frame = false; |
functions[builtin_count].argc = 0; |
-#define DEF_FUNCTION_PTR_C(aname) \ |
+#define DEF_FUNCTION_PTR_C(aname, is_builtin_exit_frame) \ |
functions->builder = &MacroAssemblerBuilder; \ |
functions->generator = FUNCTION_ADDR(Generate_Adaptor); \ |
functions->c_code = FUNCTION_ADDR(Builtin_##aname); \ |
functions->s_name = #aname; \ |
functions->name = c_##aname; \ |
functions->flags = Code::ComputeFlags(Code::BUILTIN); \ |
+ functions->builtin_exit_frame = is_builtin_exit_frame; \ |
functions->argc = 0; \ |
++functions; |
@@ -5733,6 +5736,7 @@ void Builtins::InitBuiltinFunctionTable() { |
functions->s_name = #aname; \ |
functions->name = k##aname; \ |
functions->flags = Code::ComputeFlags(Code::kind, extra); \ |
+ functions->builtin_exit_frame = false; \ |
functions->argc = 0; \ |
++functions; |
@@ -5743,6 +5747,7 @@ void Builtins::InitBuiltinFunctionTable() { |
functions->s_name = #aname; \ |
functions->name = k##aname; \ |
functions->flags = Code::ComputeFlags(Code::BUILTIN); \ |
+ functions->builtin_exit_frame = false; \ |
functions->argc = aargc; \ |
++functions; |
@@ -5753,6 +5758,7 @@ void Builtins::InitBuiltinFunctionTable() { |
functions->s_name = #aname; \ |
functions->name = k##aname; \ |
functions->flags = Code::ComputeFlags(Code::kind, extra); \ |
+ functions->builtin_exit_frame = false; \ |
functions->argc = CallDescriptors::interface_descriptor; \ |
++functions; |
@@ -5763,6 +5769,7 @@ void Builtins::InitBuiltinFunctionTable() { |
functions->s_name = #aname; \ |
functions->name = k##aname; \ |
functions->flags = Code::ComputeHandlerFlags(Code::kind); \ |
+ functions->builtin_exit_frame = false; \ |
functions->argc = 0; \ |
++functions; |
@@ -6096,7 +6103,7 @@ void Builtins::Generate_AtomicsStore(CodeStubAssembler* a) { |
a->Return(a->Int32Constant(0)); |
} |
-#define DEFINE_BUILTIN_ACCESSOR_C(name) \ |
+#define DEFINE_BUILTIN_ACCESSOR_C(name, ignore) \ |
Handle<Code> Builtins::name() { \ |
Code** code_address = reinterpret_cast<Code**>(builtin_address(k##name)); \ |
return Handle<Code>(code_address); \ |