# Copyright 2020 the V8 project authors. All rights reserved. # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. # Flags: -expose-wasm --wasm-gdb-remote --wasm-pause-waiting-for-debugger test/debugging/wasm/gdb-server/test_files/test_float.js import os import re import struct import subprocess import sys import unittest import gdb_rsp import test_files.test_float as test_float # These are set up by Main(). COMMAND = None class Tests(unittest.TestCase): def RunToWasm(self, connection): module_load_addr = gdb_rsp.GetLoadedModuleAddress(connection) breakpoint_addr = module_load_addr + test_float.FUNC_START_ADDR # Set a breakpoint. reply = connection.RspRequest('Z0,%x,1' % breakpoint_addr) self.assertEqual(reply, 'OK') # When we run the program, we should hit the breakpoint. reply = connection.RspRequest('c') gdb_rsp.AssertReplySignal(reply, gdb_rsp.SIGTRAP) # Remove the breakpoint. reply = connection.RspRequest('z0,%x,1' % breakpoint_addr) self.assertEqual(reply, 'OK') def test_loaded_modules(self): with gdb_rsp.LaunchDebugStub(COMMAND) as connection: modules = gdb_rsp.GetLoadedModules(connection) connection.Close() assert(len(modules) > 0) def test_wasm_local_float(self): with gdb_rsp.LaunchDebugStub(COMMAND) as connection: self.RunToWasm(connection) module_load_addr = gdb_rsp.GetLoadedModuleAddress(connection) reply = connection.RspRequest('qWasmLocal:0;0') value = struct.unpack('f', gdb_rsp.DecodeHex(reply))[0] self.assertEqual(test_float.ARG_0, value) reply = connection.RspRequest('qWasmLocal:0;1') value = struct.unpack('f', gdb_rsp.DecodeHex(reply))[0] self.assertEqual(test_float.ARG_1, value) # invalid local reply = connection.RspRequest('qWasmLocal:0;9') self.assertEqual("E03", reply) def Main(): index = sys.argv.index('--') args = sys.argv[index + 1:] # The remaining arguments go to unittest.main(). global COMMAND COMMAND = args unittest.main(argv=sys.argv[:index]) if __name__ == '__main__': Main()