Skip to content

Commit 0fe1099

Browse files
authored
ZJIT: Support gdb for debugging zjit-test (ruby#14637)
1 parent 8fad3e8 commit 0fe1099

File tree

1 file changed

+20
-4
lines changed

1 file changed

+20
-4
lines changed

zjit/zjit.mk

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,8 @@ ZJIT_BINDGEN_DIFF_OPTS =
5656
# Generate Rust bindings. See source for details.
5757
# Needs `./configure --enable-zjit=dev` and Clang.
5858
ifneq ($(strip $(CARGO)),) # if configure found Cargo
59-
.PHONY: zjit-bindgen zjit-bindgen-show-unused zjit-test zjit-test-lldb zjit-test-update
59+
.PHONY: zjit-bindgen zjit-bindgen-show-unused zjit-test zjit-test-update
60+
.PHONY: zjit-test-debug zjit-test-lldb zjit-test-gdb zjit-test-rr
6061
zjit-bindgen: zjit.$(OBJEXT)
6162
ZJIT_SRC_ROOT_PATH='$(top_srcdir)' BINDGEN_JIT_NAME=zjit $(CARGO) run --manifest-path '$(top_srcdir)/zjit/bindgen/Cargo.toml' -- $(CFLAGS) $(XCFLAGS) $(CPPFLAGS)
6263
$(Q) if [ 'x$(HAVE_GIT)' = xyes ]; then $(GIT) -C "$(top_srcdir)" diff $(ZJIT_BINDGEN_DIFF_OPTS) zjit/src/cruby_bindings.inc.rs; fi
@@ -93,8 +94,11 @@ zjit-test-update:
9394
@$(CARGO) insta --version >/dev/null 2>&1 || { echo "Error: cargo-insta is not installed. Install with: cargo install cargo-insta"; exit 1; }
9495
@$(CARGO) insta accept --manifest-path '$(top_srcdir)/zjit/Cargo.toml'
9596

96-
# Run a ZJIT test written with Rust #[test] under LLDB
97-
zjit-test-lldb: libminiruby.a
97+
ZJIT_DEBUGGER =
98+
ZJIT_DEBUGGER_OPTS =
99+
100+
# Run a ZJIT test written with Rust #[test] under $(ZJIT_DEBUGGER)
101+
zjit-test-debug: libminiruby.a
98102
$(Q)set -eu; \
99103
if [ -z '$(ZJIT_TESTS)' ]; then \
100104
echo "Please pass a ZJIT_TESTS=... filter to make."; \
@@ -104,7 +108,19 @@ zjit-test-lldb: libminiruby.a
104108
exe_path=`$(ZJIT_NEXTEST_ENV) \
105109
$(CARGO) nextest list --manifest-path '$(top_srcdir)/zjit/Cargo.toml' --message-format json --list-type=binaries-only | \
106110
$(BASERUBY) -rjson -e 'puts JSON.load(STDIN.read).dig("rust-binaries", "zjit", "binary-path")'`; \
107-
exec lldb $$exe_path -- --test-threads=1 $(ZJIT_TESTS)
111+
exec $(ZJIT_DEBUGGER) $$exe_path $(ZJIT_DEBUGGER_OPTS) --test-threads=1 $(ZJIT_TESTS)
112+
113+
# Run a ZJIT test written with Rust #[test] under LLDB
114+
zjit-test-lldb:
115+
$(Q) $(MAKE) zjit-test-debug ZJIT_DEBUGGER=lldb ZJIT_DEBUGGER_OPTS=--
116+
117+
# Run a ZJIT test written with Rust #[test] under GDB
118+
zjit-test-gdb: libminiruby.a
119+
$(Q) $(MAKE) zjit-test-debug ZJIT_DEBUGGER="gdb --args"
120+
121+
# Run a ZJIT test written with Rust #[test] under rr-debugger
122+
zjit-test-rr: libminiruby.a
123+
$(Q) $(MAKE) zjit-test-debug ZJIT_DEBUGGER="rr record"
108124

109125
# A library for booting miniruby in tests.
110126
# Why not use libruby-static.a for this?

0 commit comments

Comments
 (0)