diff options
Diffstat (limited to 'deps/v8/test/debugging/wasm/gdb-server/status.py')
-rw-r--r-- | deps/v8/test/debugging/wasm/gdb-server/status.py | 109 |
1 files changed, 109 insertions, 0 deletions
diff --git a/deps/v8/test/debugging/wasm/gdb-server/status.py b/deps/v8/test/debugging/wasm/gdb-server/status.py new file mode 100644 index 00000000000..0b333dce057 --- /dev/null +++ b/deps/v8/test/debugging/wasm/gdb-server/status.py @@ -0,0 +1,109 @@ +# 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_basic.js + +import re +import struct +import sys +import unittest + +import gdb_rsp +import test_files.test_basic as test_basic + +# These are set up by Main(). +COMMAND = None + +class Tests(unittest.TestCase): + + 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_checking_thread_state(self): + with gdb_rsp.LaunchDebugStub(COMMAND) as connection: + # Query wasm thread id + reply = connection.RspRequest('qfThreadInfo') + match = re.match('m([0-9])$', reply) + if match is None: + raise AssertionError('Bad active thread list reply: %r' % reply) + thread_id = int(match.group(1), 10) + # There should not be other threads. + reply = connection.RspRequest('qsThreadInfo') + self.assertEqual("l", reply) + # Test that valid thread should be alive. + reply = connection.RspRequest('T%d' % (thread_id)) + self.assertEqual("OK", reply) + # Test invalid thread id. + reply = connection.RspRequest('T42') + self.assertEqual("E02", reply) + + def test_wasm_local(self): + with gdb_rsp.LaunchDebugStub(COMMAND) as connection: + module_load_addr = gdb_rsp.GetLoadedModuleAddress(connection) + breakpoint_addr = module_load_addr + test_basic.BREAK_ADDRESS_2 + + reply = connection.RspRequest('Z0,%x,1' % breakpoint_addr) + self.assertEqual("OK", reply) + reply = connection.RspRequest('c') + gdb_rsp.AssertReplySignal(reply, gdb_rsp.SIGTRAP) + + reply = connection.RspRequest('qWasmLocal:0;0') + value = struct.unpack('I', gdb_rsp.DecodeHex(reply))[0] + self.assertEqual(test_basic.ARG_0, value) + + reply = connection.RspRequest('qWasmLocal:0;1') + value = struct.unpack('I', gdb_rsp.DecodeHex(reply))[0] + self.assertEqual(test_basic.ARG_1, value) + + # invalid local + reply = connection.RspRequest('qWasmLocal:0;9') + self.assertEqual("E03", reply) + + def test_wasm_stack_value(self): + with gdb_rsp.LaunchDebugStub(COMMAND) as connection: + module_load_addr = gdb_rsp.GetLoadedModuleAddress(connection) + breakpoint_addr = module_load_addr + test_basic.BREAK_ADDRESS_2 + + reply = connection.RspRequest('Z0,%x,1' % breakpoint_addr) + self.assertEqual("OK", reply) + reply = connection.RspRequest('c') + gdb_rsp.AssertReplySignal(reply, gdb_rsp.SIGTRAP) + + reply = connection.RspRequest('qWasmStackValue:0;0') + value = struct.unpack('I', gdb_rsp.DecodeHex(reply))[0] + self.assertEqual(test_basic.ARG_0, value) + + reply = connection.RspRequest('qWasmStackValue:0;1') + value = struct.unpack('I', gdb_rsp.DecodeHex(reply))[0] + self.assertEqual(test_basic.ARG_1, value) + + # invalid index + reply = connection.RspRequest('qWasmStackValue:0;2') + self.assertEqual("E03", reply) + + def test_modifying_code_is_disallowed(self): + with gdb_rsp.LaunchDebugStub(COMMAND) as connection: + # Pick an arbitrary address in the code segment. + module_load_addr = gdb_rsp.GetLoadedModuleAddress(connection) + breakpoint_addr = module_load_addr + test_basic.BREAK_ADDRESS_1 + # Writing to the code area should be disallowed. + data = '\x00' + write_command = 'M%x,%x:%s' % (breakpoint_addr, len(data), gdb_rsp.EncodeHex(data)) + reply = connection.RspRequest(write_command) + self.assertEquals(reply, 'E03') + + +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() |