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

Side by Side Diff: src/wasm/module-decoder.cc

Issue 1698133002: [wasm] Clean up handling of function names. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 4 years, 10 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 2015 the V8 project authors. All rights reserved. 1 // Copyright 2015 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/macro-assembler.h" 5 #include "src/macro-assembler.h"
6 #include "src/objects.h" 6 #include "src/objects.h"
7 #include "src/v8.h" 7 #include "src/v8.h"
8 8
9 #include "src/wasm/decoder.h" 9 #include "src/wasm/decoder.h"
10 #include "src/wasm/module-decoder.h" 10 #include "src/wasm/module-decoder.h"
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after
104 menv.module = module; 104 menv.module = module;
105 menv.instance = nullptr; 105 menv.instance = nullptr;
106 menv.asm_js = asm_js_; 106 menv.asm_js = asm_js_;
107 // Decode functions. 107 // Decode functions.
108 for (uint32_t i = 0; i < functions_count; i++) { 108 for (uint32_t i = 0; i < functions_count; i++) {
109 if (failed()) break; 109 if (failed()) break;
110 TRACE("DecodeFunction[%d] module+%d\n", i, 110 TRACE("DecodeFunction[%d] module+%d\n", i,
111 static_cast<int>(pc_ - start_)); 111 static_cast<int>(pc_ - start_));
112 112
113 module->functions->push_back( 113 module->functions->push_back(
114 {nullptr, 0, 0, 0, 0, 0, 0, false, false}); 114 {nullptr, i, 0, 0, 0, 0, 0, 0, false, false});
115 WasmFunction* function = &module->functions->back(); 115 WasmFunction* function = &module->functions->back();
116 DecodeFunctionInModule(module, function, false); 116 DecodeFunctionInModule(module, function, false);
117 } 117 }
118 if (ok() && verify_functions) { 118 if (ok() && verify_functions) {
119 for (uint32_t i = 0; i < functions_count; i++) { 119 for (uint32_t i = 0; i < functions_count; i++) {
120 if (failed()) break; 120 if (failed()) break;
121 WasmFunction* function = &module->functions->at(i); 121 WasmFunction* function = &module->functions->at(i);
122 if (!function->external) { 122 if (!function->external) {
123 VerifyFunctionBody(i, &menv, function); 123 VerifyFunctionBody(i, &menv, function);
124 if (result_.failed()) 124 if (result_.failed())
(...skipping 268 matching lines...) Expand 10 before | Expand all | Expand 10 after
393 if (!IsWithinLimit(memory_limit, segment->dest_addr, 393 if (!IsWithinLimit(memory_limit, segment->dest_addr,
394 segment->source_size)) { 394 segment->source_size)) {
395 error(pc_ - sizeof(uint32_t), "segment out of bounds of memory"); 395 error(pc_ - sizeof(uint32_t), "segment out of bounds of memory");
396 } 396 }
397 } 397 }
398 398
399 // Verifies the body (code) of a given function. 399 // Verifies the body (code) of a given function.
400 void VerifyFunctionBody(uint32_t func_num, ModuleEnv* menv, 400 void VerifyFunctionBody(uint32_t func_num, ModuleEnv* menv,
401 WasmFunction* function) { 401 WasmFunction* function) {
402 if (FLAG_trace_wasm_decode_time) { 402 if (FLAG_trace_wasm_decode_time) {
403 // TODO(titzer): clean me up a bit.
404 OFStream os(stdout); 403 OFStream os(stdout);
405 os << "Verifying WASM function:"; 404 os << "Verifying WASM function " << WasmFunctionName(function, menv)
406 if (function->name_offset > 0) { 405 << std::endl;
407 os << menv->module->GetName(function->name_offset);
408 }
409 os << std::endl; 406 os << std::endl;
410 } 407 }
411 FunctionEnv fenv; 408 FunctionEnv fenv;
412 fenv.module = menv; 409 fenv.module = menv;
413 fenv.sig = function->sig; 410 fenv.sig = function->sig;
414 fenv.local_i32_count = function->local_i32_count; 411 fenv.local_i32_count = function->local_i32_count;
415 fenv.local_i64_count = function->local_i64_count; 412 fenv.local_i64_count = function->local_i64_count;
416 fenv.local_f32_count = function->local_f32_count; 413 fenv.local_f32_count = function->local_f32_count;
417 fenv.local_f64_count = function->local_f64_count; 414 fenv.local_f64_count = function->local_f64_count;
418 fenv.SumLocals(); 415 fenv.SumLocals();
419 416
420 TreeResult result = 417 TreeResult result =
421 VerifyWasmCode(&fenv, start_, start_ + function->code_start_offset, 418 VerifyWasmCode(&fenv, start_, start_ + function->code_start_offset,
422 start_ + function->code_end_offset); 419 start_ + function->code_end_offset);
423 if (result.failed()) { 420 if (result.failed()) {
424 // Wrap the error message from the function decoder. 421 // Wrap the error message from the function decoder.
425 std::ostringstream str; 422 std::ostringstream str;
426 str << "in function #" << func_num << ": "; 423 str << "in function " << WasmFunctionName(function, menv) << ": ";
427 // TODO(titzer): add function name for the user?
428 str << result; 424 str << result;
429 std::string strval = str.str(); 425 std::string strval = str.str();
430 const char* raw = strval.c_str(); 426 const char* raw = strval.c_str();
431 size_t len = strlen(raw); 427 size_t len = strlen(raw);
432 char* buffer = new char[len]; 428 char* buffer = new char[len];
433 strncpy(buffer, raw, len); 429 strncpy(buffer, raw, len);
434 buffer[len - 1] = 0; 430 buffer[len - 1] = 0;
435 431
436 // Copy error code and location. 432 // Copy error code and location.
437 result_.CopyFrom(result); 433 result_.CopyFrom(result);
(...skipping 142 matching lines...) Expand 10 before | Expand all | Expand 10 after
580 if (function_start > function_end) return FunctionError("start > end"); 576 if (function_start > function_end) return FunctionError("start > end");
581 if (size > kMaxFunctionSize) 577 if (size > kMaxFunctionSize)
582 return FunctionError("size > maximum function size"); 578 return FunctionError("size > maximum function size");
583 WasmFunction* function = new WasmFunction(); 579 WasmFunction* function = new WasmFunction();
584 ModuleDecoder decoder(zone, function_start, function_end, false); 580 ModuleDecoder decoder(zone, function_start, function_end, false);
585 return decoder.DecodeSingleFunction(module_env, function); 581 return decoder.DecodeSingleFunction(module_env, function);
586 } 582 }
587 } // namespace wasm 583 } // namespace wasm
588 } // namespace internal 584 } // namespace internal
589 } // namespace v8 585 } // namespace v8
OLDNEW
« no previous file with comments | « src/compiler/wasm-compiler.cc ('k') | src/wasm/wasm-module.h » ('j') | src/wasm/wasm-module.h » ('J')

Powered by Google App Engine
This is Rietveld 408576698