Fix compilation errors and test failures in the GDB remote server stub
when enabled through v8_enable_wasm_gdb_remote_debugging.
The GDB remote server stub has been broken for a long time due to
V8 API changes. This patch addresses multiple issues:
- Fix type conversions from internal Isolate* to v8::Isolate*
- Update Handle to DirectHandle for WasmInstanceObject and WasmTrustedInstanceData
- Fix WasmModuleObject API calls (module() -> native_module()->module())
- Add Zone/AccountingAllocator for more efficient memory management
- Update include headers for changed APIs
- Fix unit tests to work with current V8 codebase
This enables native debuggers like GDB and LLDB to attach to V8 and
debug WebAssembly modules when the GDB remote debugging flag is enabled.
Bug: 433881953
Change-Id: Ib2d728b0e954d8701076a2ff07e59336794ddf82
Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/6785387
Reviewed-by: Paolo Severini <paolosev@microsoft.com>
Commit-Queue: Paolo Severini <paolosev@microsoft.com>
Reviewed-by: Clemens Backes <clemensb@chromium.org>
Cr-Commit-Position: refs/heads/main@{#101856}
This turns all paths in the test frameworks and all its suite
implementations from strings into pathlib paths. This makes the
framework more future-proof, simplifies a lot of code and
enhances readability. It comes with the risk of introducing new
bugs. This is lowered using an experimental test comparison
script: https://crrev.com/c/4648372.
Some detailed changes:
- The "path" of a test case is now a pathlib path (also in cases
where the path doesn't correspond to a location on the file
system). This path is always relative to the test root.
- The "name" of a test case is the posix string of that path
used in status files and at the command line.
- All other paths are absolute.
- We use some more wrapping with Path() than absolutely
necessary. Reducing such a wrapping where it's not needed is a
micro-optimization and the potential by introducing a bug by
forgetting one is worse.
- Some modules are not happy with pathlib objects, hence a few
explicit str() conversions are added.
Thoughts on risk:
- The highest risk is that due to the newly introduced logic, some
test cases are silently filtered and not run now.
We'll manually compare runs before and after this change.
- Each test attempted to run will either pass or fail,
failures won't be silent. E.g. a wrong path passed to the cctest
executable is flagged as a failure.
- Wrongly constructed paths to JS test cases lead to failures
(tested several manually).
Other failure types:
- Some string path not turned into pathlib: Will typically fail
when calling any pathlib function.
- Some pathlib object treated as a string: Will typically raise
an exception, e.g. using in-operator.
- Logic bugs in pathlib functions behaving differently than
anticipated, e.g. with_suffix(): Will typically result in wrong
paths, resulting in errors reading a test case. Though worst case
could be silent ignoring.
Cq-Include-Trybots: luci.v8.try:v8_numfuzz_dbg
Cq-Include-Trybots: luci.v8.try:v8_numfuzz_rel
Cq-Include-Trybots: luci.v8.try:v8_numfuzz_tsan_rel
Cq-Include-Trybots: luci.v8.try:v8_linux_noi18n_rel
Cq-Include-Trybots: luci.v8.try:v8_android_arm64_n5x_rel
Cq-Include-Trybots: luci.v8.try:v8_linux64_msan_rel
Cq-Include-Trybots: luci.v8.try:v8_linux64_ubsan_rel
Cq-Include-Trybots: luci.v8.try:v8_android_arm64_n5x_rel
Bug: chromium:1132088
Change-Id: Ifc94feb292174935db969dcf5d174d2eedcf3dfd
Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/4538761
Reviewed-by: Liviu Rau <liviurau@google.com>
Commit-Queue: Michael Achenbach <machenbach@chromium.org>
Cr-Commit-Position: refs/heads/main@{#88502}
This will allow on the infra side to easier link to the respective
shard on a test failure. Without that it's a hassle to find out on
which shard the failing test ran.
This also simplifies how the global test_config stores information.
Some information was duplicated, but is now rather shared through
properties if the owning object is already present.
Bug: v8:13681
Change-Id: I52f01a4fac74627575d80f25923faba99eb6a1fb
Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/4181030
Reviewed-by: Liviu Rau <liviurau@google.com>
Commit-Queue: Michael Achenbach <machenbach@chromium.org>
Cr-Commit-Position: refs/heads/main@{#85429}
- Removed duplication and unnecessary indirection from all suites testcfgs.
- Introduced a more comprehensive context to cover both command context and other platform specific concerns.
- Propagated above context to TestLoader to allow for test counting command execution on all platforms.
- Wrapped original pool with another class to give it a new interface and allow injecting different implementations in the future.
- Consolidated progress indicators under a single processor in the pipeline.
- Consolidated result retention requirements calculation outside of pipeline chain.
- Refactored LoaderProc and got it under tests.
- Added some more tests for the standard runner.
- Extracted BuildConfig class.
Bug: v8:12785
Change-Id: I87be040e91f792a983662bb5a10d55b36a14ea7f
Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/3701595
Reviewed-by: Michael Achenbach <machenbach@chromium.org>
Commit-Queue: Liviu Rau <liviurau@chromium.org>
Cr-Commit-Position: refs/heads/main@{#81770}
The GDB-stub for Wasm debugging (which builds with the flag
v8_enable_wasm_gdb_remote_debugging) doesn't build anymore after a few changes
in the interface of wasm::DebugInfo.
This CL fixes the build, and also adds a few small changes to the protocol.
Change-Id: I250a8c86fd83048434e68cbdc5cb8ae243577393
Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2571341
Reviewed-by: Clemens Backes <clemensb@chromium.org>
Reviewed-by: Philip Pfaffe <pfaffe@chromium.org>
Commit-Queue: Paolo Severini <paolosev@microsoft.com>
Cr-Commit-Position: refs/heads/master@{#71669}
- was missing an import sys
- check for long
- check for xrange
This file is now flake8 warning free, and should work on both Py2 and
Py3.
$ flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics
Bug: v8:8594
Change-Id: Iae857f4686bcad509fa700954b7f30f86150739f
Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2288177
Reviewed-by: Benedikt Meurer <bmeurer@chromium.org>
Commit-Queue: Zhi An Ng <zhin@chromium.org>
Cr-Commit-Position: refs/heads/master@{#68809}
The serializer currently cannot handle a heap state containing
arbitrary compiled Code objects. As a quick fix for the
--stress-snapshot d8 flag, we clear compiled data from the isolate
prior to the serialize-deserialize-verify pass.
With this change, mjsunit tests pass on x64.
The %SerializeDeserializeNow() runtime function would require more
work, since it is not possible to mutate the heap to this extent while
still preserving a runnable host context and isolate. We will need
another solution there.
Drive-by: Skip the stress_snapshot variant except for the mjsunit
suite.
Tbr: machenbach@chromium.org
Bug: v8:10493,v8:10416
Change-Id: Ie110da8b51613fcd69c7f391d3cf8589d6b04dd8
Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2182429
Reviewed-by: Jakob Gruber <jgruber@chromium.org>
Reviewed-by: Ulan Degenbaev <ulan@chromium.org>
Commit-Queue: Jakob Gruber <jgruber@chromium.org>
Cr-Commit-Position: refs/heads/master@{#67585}
This changelist makes the GDB-stub actually execute GDB-remote commands, by
accessing the Wasm engine state. More precisely:
- class GdbServer registers DebugDelegates that receive debug notifications when
a new Wasm module is loaded, when execution suspends at a breakpoint or for an
unhandled exception.
- Since the GDB-remote commands arrive on a separate thread, all
queries from the debugger are transformed into Task objects, that are posted
into a TaskRunner that runs in the Isolate thread.
- class WasmModuleDebug contains the logic to retrieve the value of globals, locals, memory ranges from the
Wasm engine and to add/remove breakpoints.
Build with: v8_enable_wasm_gdb_remote_debugging = true
Run with: --wasm-gdb-remote
Test with: python tools\run-tests.py --outdir=out\debug_x64 debugging -j 1
Bug: chromium:1010467
Change-Id: I9703894620a027d3c920926db92e2ff809d84ab8
Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/1941139
Reviewed-by: Benedikt Meurer <bmeurer@chromium.org>
Reviewed-by: Clemens Backes <clemensb@chromium.org>
Commit-Queue: Paolo Severini <paolosev@microsoft.com>
Cr-Commit-Position: refs/heads/master@{#67412}
This is the first piece of the wasm debugging prototype (besides the changes to
add/remove breakpoints in WasmModuleObject made with
https://chromium.googlesource.com/v8/v8.git/+/e699f39caed9a23f8e20bd3a0386a3236e272737).
This changelist adds the infrastructure for a GDB-remote stub that will be used
to manage debugging sessions via the gdb-remote protocol.
It enables the creation and termination of debugging sessions over TCP
connections that are managed in a separate thread.
The logic to actually send, receive and decode GDB-remote packets will be part
of a future changelist.
Build with: v8_enable_wasm_gdb_remote_debugging = true
Run with:
--wasm-gdb-remote Enables Wasm debugging with LLDB
(default: false)
--wasm-gdb-remote-port TCP port to be used for debugging
(default: 8765)
--wasm-pause-waiting-for-debugger Pauses the execution of Wasm code waiting
for a debugger (default: false)
--trace-wasm-gdb-remote Enables tracing of Gdb-remote packets
(default: false)
Note that most of this code is "borrowed" from the code of the Chromium NaCL
GDB-remote stub (located in Chromium in src\native_client\src\trusted\debug_stub).
Implementation details:
- class GdbServer acts as a singleton manager for the gdb-remote stub. It is
instantiated as soon as the first Wasm module is loaded in the Wasm engine.
- class GdbServerThread spawns the worker thread for the TCP connection.
- class Transport manages the socket connection, in a portable way.
- class Session represents a remote debugging session.
- class Target represents a debugging target and it’s the place where the
debugging packets will be processed and will implement the logic to debug
a Wasm engine.
Bug: chromium:1010467
Change-Id: Ib2324e5901f5ae1d855b96b99ef0995d407322b6
Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/1923407
Reviewed-by: Clemens Backes <clemensb@chromium.org>
Reviewed-by: Benedikt Meurer <bmeurer@chromium.org>
Reviewed-by: Michael Achenbach <machenbach@chromium.org>
Commit-Queue: Paolo Severini <paolosev@microsoft.com>
Cr-Commit-Position: refs/heads/master@{#66379}