diff --git a/common.mk b/common.mk index e2fd5c4b279f7e..6871ad003fc33b 100644 --- a/common.mk +++ b/common.mk @@ -269,21 +269,15 @@ MAKE_LINK = $(MINIRUBY) -rfileutils -e "include FileUtils::Verbose" \ # For release builds YJIT_RUSTC_ARGS = --crate-name=yjit \ $(JIT_RUST_FLAGS) \ + $(RUSTC_FLAGS) \ --edition=2021 \ - -g \ - -C lto=thin \ - -C opt-level=3 \ - -C overflow-checks=on \ '--out-dir=$(CARGO_TARGET_DIR)/release/' \ '$(top_srcdir)/yjit/src/lib.rs' ZJIT_RUSTC_ARGS = --crate-name=zjit \ $(JIT_RUST_FLAGS) \ + $(RUSTC_FLAGS) \ --edition=2024 \ - -g \ - -C lto=thin \ - -C opt-level=3 \ - -C overflow-checks=on \ '--out-dir=$(CARGO_TARGET_DIR)/release/' \ '$(top_srcdir)/zjit/src/lib.rs' diff --git a/configure.ac b/configure.ac index 6787e9b3067572..a276783b6c2f63 100644 --- a/configure.ac +++ b/configure.ac @@ -69,6 +69,7 @@ dnl 93(bright yellow) is copied from .github/workflows/mingw.yml AC_ARG_VAR([cflags], [additional CFLAGS (ignored when CFLAGS is given)])dnl AC_ARG_VAR([cppflags], [additional CPPFLAGS (ignored when CPPFLAGS is given)])dnl AC_ARG_VAR([cxxflags], [additional CXXFLAGS (ignored when CXXFLAGS is given)])dnl +AC_ARG_VAR([rustc_flags], [additional RUSTC_FLAGS])dnl [begin]_group "environment section" && { HAVE_BASERUBY=yes @@ -4049,6 +4050,11 @@ AS_CASE(["${ZJIT_SUPPORT}"], AC_DEFINE(USE_ZJIT, 0) ]) +RUSTC_FLAGS='-g -C lto=thin -C opt-level=3 -C overflow-checks=on' +AS_IF([test -n "${rustc_flags}"], [ + RUSTC_FLAGS="${RUSTC_FLAGS} ${rustc_flags}" +]) + JIT_RUST_FLAGS='--crate-type=staticlib --cfg feature=\"stats_allocator\"' RLIB_DIR= AS_CASE(["$JIT_CARGO_SUPPORT:$YJIT_SUPPORT:$ZJIT_SUPPORT"], @@ -4106,6 +4112,7 @@ AS_IF([test -n "$RUST_LIB"], [ dnl These variables end up in ::RbConfig::CONFIG AC_SUBST(RUSTC)dnl Rust compiler command AC_SUBST(JIT_RUST_FLAGS)dnl the common rustc flags for JIT crates such as zjit +AC_SUBST(RUSTC_FLAGS)dnl user-configurable rustc compiler flags AC_SUBST(CARGO)dnl Cargo command for Rust builds AC_SUBST(CARGO_BUILD_ARGS)dnl for selecting Rust build profiles AC_SUBST(YJIT_SUPPORT)dnl what flavor of YJIT the Ruby build includes @@ -4838,6 +4845,7 @@ config_summary "strip command" "$STRIP" config_summary "install doc" "$DOCTARGETS" config_summary "YJIT support" "$YJIT_SUPPORT" config_summary "ZJIT support" "$ZJIT_SUPPORT" +config_summary "RUSTC_FLAGS" "$RUSTC_FLAGS" config_summary "man page type" "$MANTYPE" config_summary "search path" "$search_path" config_summary "static-linked-ext" ${EXTSTATIC:+"yes"} diff --git a/defs/jit.mk b/defs/jit.mk index 42b56c4cd928b6..27b14e7a07255d 100644 --- a/defs/jit.mk +++ b/defs/jit.mk @@ -40,6 +40,7 @@ else ifneq ($(strip $(RLIB_DIR)),) # combo build $(RUST_LIB): $(srcdir)/ruby.rs $(ECHO) 'building $(@F)' $(gnumake_recursive)$(Q) $(RUSTC) --edition=2024 \ + $(RUSTC_FLAGS) \ '-L$(@D)' \ --extern=yjit \ --extern=zjit \ @@ -58,6 +59,7 @@ $(JIT_RLIB): $(gnumake_recursive)$(Q) $(RUSTC) --crate-name=jit \ --edition=2024 \ $(JIT_RUST_FLAGS) \ + $(RUSTC_FLAGS) \ '--out-dir=$(@D)' \ '$(top_srcdir)/jit/src/lib.rs' endif # ifneq ($(JIT_CARGO_SUPPORT),no) diff --git a/gc/mmtk/extconf.rb b/gc/mmtk/extconf.rb index 5f4228972bbbb8..c0e788037ecfe4 100644 --- a/gc/mmtk/extconf.rb +++ b/gc/mmtk/extconf.rb @@ -15,6 +15,10 @@ MMTK_BUILD = debug LIBMMTK_RUBY = libmmtk_ruby.#$LIBEXT RUSTSRCS = #{rustsrcs.join(" \\\n\t ")} + + ifeq ($(MMTK_BUILD), debug) + CPPFLAGS += -DMMTK_DEBUG + endif MAKEFILE ] end diff --git a/gc/mmtk/mmtk.c b/gc/mmtk/mmtk.c index 042517e7d741b6..38e730a3761e4d 100644 --- a/gc/mmtk/mmtk.c +++ b/gc/mmtk/mmtk.c @@ -963,6 +963,18 @@ rb_gc_impl_writebarrier(void *objspace_ptr, VALUE a, VALUE b) if (SPECIAL_CONST_P(b)) return; +#ifdef MMTK_DEBUG + if (!rb_gc_impl_pointer_to_heap_p(objspace_ptr, (void *)a)) { + char buff[256]; + rb_bug("a: %s is not an object", rb_raw_obj_info(buff, 256, a)); + } + + if (!rb_gc_impl_pointer_to_heap_p(objspace_ptr, (void *)b)) { + char buff[256]; + rb_bug("b: %s is not an object", rb_raw_obj_info(buff, 256, b)); + } +#endif + mmtk_object_reference_write_post(cache->mutator, (MMTk_ObjectReference)a); } diff --git a/template/Makefile.in b/template/Makefile.in index 443c394cb4f84d..0b7b50e3aa3340 100644 --- a/template/Makefile.in +++ b/template/Makefile.in @@ -115,6 +115,7 @@ CARGO_TARGET_DIR=@abs_top_builddir@/target CARGO_BUILD_ARGS=@CARGO_BUILD_ARGS@ ZJIT_TEST_FEATURES=@ZJIT_TEST_FEATURES@ JIT_RUST_FLAGS=@JIT_RUST_FLAGS@ +RUSTC_FLAGS=@RUSTC_FLAGS@ RLIB_DIR=@RLIB_DIR@ RUST_LIB=@RUST_LIB@ RUST_LIBOBJ = $(RUST_LIB:.a=.@OBJEXT@)