Commit dc6e1c4e authored by Manos Koukoutos's avatar Manos Koukoutos Committed by V8 LUCI CQ

[fuzzer] Print compilation error in wasm-compile

For debugging purposes, we print the validation error if the module
generated by WasmCompileFuzzer fails to validate.

Change-Id: I79d2827e489194d02150484ab5a196e979a302af
Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/3211574Reviewed-by: 's avatarThibaud Michaud <thibaudm@chromium.org>
Commit-Queue: Manos Koukoutos <manoskouk@chromium.org>
Cr-Commit-Position: refs/heads/main@{#77295}
parent 7cd438c6
......@@ -462,15 +462,22 @@ WasmEngine::~WasmEngine() {
bool WasmEngine::SyncValidate(Isolate* isolate, const WasmFeatures& enabled,
const ModuleWireBytes& bytes) {
return SyncValidateResult(isolate, enabled, bytes).ok();
}
ModuleResult WasmEngine::SyncValidateResult(Isolate* isolate,
const WasmFeatures& enabled,
const ModuleWireBytes& bytes) {
TRACE_EVENT0("v8.wasm", "wasm.SyncValidate");
// TODO(titzer): remove dependency on the isolate.
if (bytes.start() == nullptr || bytes.length() == 0) return false;
ModuleResult result = DecodeWasmModule(
if (bytes.start() == nullptr || bytes.length() == 0) {
return ModuleResult(WasmError(0, "empty module wire bytes"));
}
return DecodeWasmModule(
enabled, bytes.start(), bytes.end(), true, kWasmOrigin,
isolate->counters(), isolate->metrics_recorder(),
isolate->GetOrRegisterRecorderContextId(isolate->native_context()),
DecodingMethod::kSync, allocator());
return result.ok();
}
MaybeHandle<AsmWasmData> WasmEngine::SyncCompileTranslatedAsmJs(
......
......@@ -45,8 +45,11 @@ class GdbServer;
class AsyncCompileJob;
class ErrorThrower;
struct ModuleWireBytes;
template <typename T>
class Result;
class StreamingDecoder;
class WasmFeatures;
using ModuleResult = Result<std::shared_ptr<WasmModule>>;
class V8_EXPORT_PRIVATE CompilationResultResolver {
public:
......@@ -151,6 +154,10 @@ class V8_EXPORT_PRIVATE WasmEngine {
// module.
bool SyncValidate(Isolate* isolate, const WasmFeatures& enabled,
const ModuleWireBytes& bytes);
// Synchronously validates the given bytes that represent an encoded Wasm
// module.
ModuleResult SyncValidateResult(Isolate* isolate, const WasmFeatures& enabled,
const ModuleWireBytes& bytes);
// Synchronously compiles the given bytes that represent a translated
// asm.js module.
......
......@@ -627,11 +627,14 @@ void WasmExecutionFuzzer::FuzzWasmModule(base::Vector<const uint8_t> data,
GenerateTestCase(i_isolate, wire_bytes, compiles);
}
bool validates =
GetWasmEngine()->SyncValidate(i_isolate, enabled_features, wire_bytes);
CHECK_EQ(compiles, validates);
CHECK_IMPLIES(require_valid, validates);
ModuleResult result = GetWasmEngine()->SyncValidateResult(
i_isolate, enabled_features, wire_bytes);
CHECK_EQ(compiles, result.ok());
CHECK_WITH_MSG(
!require_valid || result.ok(),
("Generated module should validate, but got: " + result.error().message())
.c_str());
if (!compiles) return;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment