| 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); \
|
|
|