From a3f49c13ba2916ad15a6c546b5455e0a40808441 Mon Sep 17 00:00:00 2001 From: Benjamin Bouvier Date: Wed, 18 Apr 2018 14:34:20 +0200 Subject: [PATCH] Bug 1454923: Add debugging support for anyref return values in wasm; r=lth --HG-- extra : rebase_source : 7da83800e74d72ad1f0ef312f50a4b2649a52c65 extra : amend_source : 0eae3689ff025bb43184e662f27aac7fefddeaa7 --- js/src/jit-test/tests/wasm/gc/anyref.js | 6 ++++++ js/src/wasm/WasmBaselineCompile.cpp | 6 ++++++ 2 files changed, 12 insertions(+) diff --git a/js/src/jit-test/tests/wasm/gc/anyref.js b/js/src/jit-test/tests/wasm/gc/anyref.js index d06b2154755a..4b702bb44832 100644 --- a/js/src/jit-test/tests/wasm/gc/anyref.js +++ b/js/src/jit-test/tests/wasm/gc/anyref.js @@ -150,6 +150,12 @@ ref = exports.nested(baguette, 0); assertEq(ref, baguette); assertEq(ref.calories, baguette.calories); +if (wasmDebuggingIsSupported()) { + let g = newGlobal(); + let dbg = new Debugger(g); + g.eval(`o = new WebAssembly.Instance(new WebAssembly.Module(wasmTextToBinary('(module (func (result anyref) (param anyref) get_local 0) (export "" 0))')));`); +} + // More interesting use cases about control flow joins. function assertJoin(body) { diff --git a/js/src/wasm/WasmBaselineCompile.cpp b/js/src/wasm/WasmBaselineCompile.cpp index 3ef4a5693a97..ca20efb15a91 100644 --- a/js/src/wasm/WasmBaselineCompile.cpp +++ b/js/src/wasm/WasmBaselineCompile.cpp @@ -3429,6 +3429,9 @@ class BaseCompiler final : public BaseCompilerInterface case ExprType::F32: masm.storeFloat32(RegF32(ReturnFloat32Reg), resultsAddress); break; + case ExprType::AnyRef: + masm.storePtr(RegPtr(ReturnReg), resultsAddress); + break; default: MOZ_CRASH("Function return type"); } @@ -3453,6 +3456,9 @@ class BaseCompiler final : public BaseCompilerInterface case ExprType::F32: masm.loadFloat32(resultsAddress, RegF32(ReturnFloat32Reg)); break; + case ExprType::AnyRef: + masm.loadPtr(resultsAddress, RegPtr(ReturnReg)); + break; default: MOZ_CRASH("Function return type"); }