Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(35)

Side by Side Diff: src/compiler.cc

Issue 2229723002: [wasm] Support validation of asm.js modules with != 3 args. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: file change Created 4 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "src/compiler.h" 5 #include "src/compiler.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <memory> 8 #include <memory>
9 9
10 #include "src/asmjs/asm-js.h" 10 #include "src/asmjs/asm-js.h"
(...skipping 458 matching lines...) Expand 10 before | Expand all | Expand 10 after
469 int CodeAndMetadataSize(CompilationInfo* info) { 469 int CodeAndMetadataSize(CompilationInfo* info) {
470 if (info->has_bytecode_array()) { 470 if (info->has_bytecode_array()) {
471 return info->bytecode_array()->SizeIncludingMetadata(); 471 return info->bytecode_array()->SizeIncludingMetadata();
472 } 472 }
473 return info->code()->SizeIncludingMetadata(); 473 return info->code()->SizeIncludingMetadata();
474 } 474 }
475 475
476 bool GenerateUnoptimizedCode(CompilationInfo* info) { 476 bool GenerateUnoptimizedCode(CompilationInfo* info) {
477 bool success; 477 bool success;
478 EnsureFeedbackMetadata(info); 478 EnsureFeedbackMetadata(info);
479 if (FLAG_validate_asm && info->scope()->asm_module()) { 479 if (FLAG_validate_asm && info->scope()->asm_module() &&
480 !info->shared_info()->HasAsmWasmData()) {
Michael Starzinger 2016/08/11 11:44:10 As mentioned in my previous comment, we could go w
bradn 2016/08/12 01:17:09 Done.
480 MaybeHandle<FixedArray> wasm_data; 481 MaybeHandle<FixedArray> wasm_data;
481 wasm_data = AsmJs::ConvertAsmToWasm(info->parse_info()); 482 wasm_data = AsmJs::ConvertAsmToWasm(info->parse_info());
482 if (!wasm_data.is_null()) { 483 if (!wasm_data.is_null()) {
483 info->shared_info()->set_asm_wasm_data(*wasm_data.ToHandleChecked()); 484 info->shared_info()->set_asm_wasm_data(*wasm_data.ToHandleChecked());
484 info->SetCode(info->isolate()->builtins()->InstantiateAsmJs()); 485 info->SetCode(info->isolate()->builtins()->InstantiateAsmJs());
485 return true; 486 return true;
486 } 487 }
487 } 488 }
489 if (info->shared_info()->HasAsmWasmData()) {
490 info->shared_info()->ClearAsmWasmData();
491 }
488 if (ShouldUseIgnition(info)) { 492 if (ShouldUseIgnition(info)) {
489 success = interpreter::Interpreter::MakeBytecode(info); 493 success = interpreter::Interpreter::MakeBytecode(info);
490 } else { 494 } else {
491 success = FullCodeGenerator::MakeCode(info); 495 success = FullCodeGenerator::MakeCode(info);
492 } 496 }
493 if (success) { 497 if (success) {
494 Isolate* isolate = info->isolate(); 498 Isolate* isolate = info->isolate();
495 Counters* counters = isolate->counters(); 499 Counters* counters = isolate->counters();
496 // TODO(4280): Rename counters from "baseline" to "unoptimized" eventually. 500 // TODO(4280): Rename counters from "baseline" to "unoptimized" eventually.
497 counters->total_baseline_code_size()->Increment(CodeAndMetadataSize(info)); 501 counters->total_baseline_code_size()->Increment(CodeAndMetadataSize(info));
(...skipping 504 matching lines...) Expand 10 before | Expand all | Expand 10 after
1002 1006
1003 // Record the function compilation event. 1007 // Record the function compilation event.
1004 RecordFunctionCompilation(CodeEventListener::LAZY_COMPILE_TAG, &info); 1008 RecordFunctionCompilation(CodeEventListener::LAZY_COMPILE_TAG, &info);
1005 1009
1006 return info.code(); 1010 return info.code();
1007 } 1011 }
1008 1012
1009 MaybeHandle<Code> GetLazyCode(Handle<JSFunction> function) { 1013 MaybeHandle<Code> GetLazyCode(Handle<JSFunction> function) {
1010 Isolate* isolate = function->GetIsolate(); 1014 Isolate* isolate = function->GetIsolate();
1011 DCHECK(!isolate->has_pending_exception()); 1015 DCHECK(!isolate->has_pending_exception());
1012 DCHECK(!function->is_compiled()); 1016 DCHECK(!function->is_compiled() ||
1017 function->code() ==
1018 function->GetIsolate()->builtins()->builtin(
Michael Starzinger 2016/08/11 11:44:10 This can be avoided by adding the following to the
bradn 2016/08/12 01:17:09 Done.
1019 Builtins::kInstantiateAsmJs));
1013 TimerEventScope<TimerEventCompileCode> compile_timer(isolate); 1020 TimerEventScope<TimerEventCompileCode> compile_timer(isolate);
1014 RuntimeCallTimerScope runtimeTimer(isolate, 1021 RuntimeCallTimerScope runtimeTimer(isolate,
1015 &RuntimeCallStats::CompileCodeLazy); 1022 &RuntimeCallStats::CompileCodeLazy);
1016 TRACE_EVENT_RUNTIME_CALL_STATS_TRACING_SCOPED( 1023 TRACE_EVENT_RUNTIME_CALL_STATS_TRACING_SCOPED(
1017 isolate, &tracing::TraceEventStatsTable::CompileCodeLazy); 1024 isolate, &tracing::TraceEventStatsTable::CompileCodeLazy);
1018 AggregatedHistogramTimerScope timer(isolate->counters()->compile_lazy()); 1025 AggregatedHistogramTimerScope timer(isolate->counters()->compile_lazy());
1019 1026
1020 if (FLAG_turbo_cache_shared_code) { 1027 if (FLAG_turbo_cache_shared_code) {
1021 Handle<Code> cached_code; 1028 Handle<Code> cached_code;
1022 if (GetCodeFromOptimizedCodeMap(function, BailoutId::None()) 1029 if (GetCodeFromOptimizedCodeMap(function, BailoutId::None())
1023 .ToHandle(&cached_code)) { 1030 .ToHandle(&cached_code)) {
1024 if (FLAG_trace_opt) { 1031 if (FLAG_trace_opt) {
1025 PrintF("[found optimized code for "); 1032 PrintF("[found optimized code for ");
1026 function->ShortPrint(); 1033 function->ShortPrint();
1027 PrintF(" during unoptimized compile]\n"); 1034 PrintF(" during unoptimized compile]\n");
1028 } 1035 }
1029 DCHECK(function->shared()->is_compiled()); 1036 DCHECK(function->shared()->is_compiled());
1030 return cached_code; 1037 return cached_code;
1031 } 1038 }
1032 } 1039 }
1033 1040
1034 if (function->shared()->is_compiled()) { 1041 if (function->shared()->is_compiled() &&
Michael Starzinger 2016/08/11 11:44:10 This can be avoided by adding the following to the
bradn 2016/08/12 01:17:09 Done.
1042 function->code() !=
1043 function->GetIsolate()->builtins()->builtin(
1044 Builtins::kInstantiateAsmJs)) {
1035 return Handle<Code>(function->shared()->code()); 1045 return Handle<Code>(function->shared()->code());
1036 } 1046 }
1037 1047
1038 Zone zone(isolate->allocator()); 1048 Zone zone(isolate->allocator());
1039 ParseInfo parse_info(&zone, function); 1049 ParseInfo parse_info(&zone, function);
1040 CompilationInfo info(&parse_info, function); 1050 CompilationInfo info(&parse_info, function);
1041 Handle<Code> result; 1051 Handle<Code> result;
1042 ASSIGN_RETURN_ON_EXCEPTION(isolate, result, GetUnoptimizedCode(&info), Code); 1052 ASSIGN_RETURN_ON_EXCEPTION(isolate, result, GetUnoptimizedCode(&info), Code);
1043 1053
1044 if (FLAG_always_opt) { 1054 if (FLAG_always_opt) {
(...skipping 159 matching lines...) Expand 10 before | Expand all | Expand 10 after
1204 1214
1205 bool Compiler::ParseAndAnalyze(ParseInfo* info) { 1215 bool Compiler::ParseAndAnalyze(ParseInfo* info) {
1206 if (!Parser::ParseStatic(info)) return false; 1216 if (!Parser::ParseStatic(info)) return false;
1207 if (!Compiler::Analyze(info)) return false; 1217 if (!Compiler::Analyze(info)) return false;
1208 DCHECK_NOT_NULL(info->literal()); 1218 DCHECK_NOT_NULL(info->literal());
1209 DCHECK_NOT_NULL(info->scope()); 1219 DCHECK_NOT_NULL(info->scope());
1210 return true; 1220 return true;
1211 } 1221 }
1212 1222
1213 bool Compiler::Compile(Handle<JSFunction> function, ClearExceptionFlag flag) { 1223 bool Compiler::Compile(Handle<JSFunction> function, ClearExceptionFlag flag) {
1214 if (function->is_compiled()) return true; 1224 if (function->is_compiled() &&
Michael Starzinger 2016/08/11 11:44:10 Likewise.
bradn 2016/08/12 01:17:09 Done.
1225 function->code() !=
1226 function->GetIsolate()->builtins()->builtin(
1227 Builtins::kInstantiateAsmJs))
1228 return true;
1215 Isolate* isolate = function->GetIsolate(); 1229 Isolate* isolate = function->GetIsolate();
1216 DCHECK(AllowCompilation::IsAllowed(isolate)); 1230 DCHECK(AllowCompilation::IsAllowed(isolate));
1217 1231
1218 // Start a compilation. 1232 // Start a compilation.
1219 Handle<Code> code; 1233 Handle<Code> code;
1220 if (!GetLazyCode(function).ToHandle(&code)) { 1234 if (!GetLazyCode(function).ToHandle(&code)) {
1221 if (flag == CLEAR_EXCEPTION) { 1235 if (flag == CLEAR_EXCEPTION) {
1222 isolate->clear_pending_exception(); 1236 isolate->clear_pending_exception();
1223 } 1237 }
1224 return false; 1238 return false;
(...skipping 723 matching lines...) Expand 10 before | Expand all | Expand 10 after
1948 DCHECK(shared->is_compiled()); 1962 DCHECK(shared->is_compiled());
1949 function->set_literals(cached.literals); 1963 function->set_literals(cached.literals);
1950 } else if (shared->is_compiled()) { 1964 } else if (shared->is_compiled()) {
1951 // TODO(mvstanton): pass pretenure flag to EnsureLiterals. 1965 // TODO(mvstanton): pass pretenure flag to EnsureLiterals.
1952 JSFunction::EnsureLiterals(function); 1966 JSFunction::EnsureLiterals(function);
1953 } 1967 }
1954 } 1968 }
1955 1969
1956 } // namespace internal 1970 } // namespace internal
1957 } // namespace v8 1971 } // namespace v8
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698