From f2899ee090f2d4daaa7e036d77ceefcae4f42b4d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Mon, 2 Jan 2023 16:51:45 +0100 Subject: [PATCH] Upgrade to Ruby 3.2.0. For details of the evolution please check `private-ruby-3.2` branch. --- ...0-Enable-configuration-of-archlibdir.patch | 5 +- ...ed-paths-when-empty-version-string-i.patch | 5 +- ruby-2.1.0-always-use-i386.patch | 5 +- ruby-2.1.0-custom-rubygems-location.patch | 9 +- ruby-2.3.0-ruby_version.patch | 28 +- ruby-2.7.0-Initialize-ABRT-hook.patch | 7 +- ..._bug_reporter_add-witout-raising-err.patch | 9 +- ...ery-RubyVM-FrozenCore-for-class-path.patch | 29 +- ruby-3.1.3-Fix-for-tzdata-2022g.patch | 70 --- ...ct-compaction-support-during-runtime.patch | 291 ---------- ...Revert-Fix-test-syntax-suggest-order.patch | 73 +++ ...rt-Test-syntax_suggest-by-make-check.patch | 67 +++ ...paction-methods-as-rb_f_notimplement.patch | 502 ------------------ ...c-compaction-methods_generated-files.patch | 502 ------------------ ruby-3.2.0-ossl-tests-replace-sha1.patch | 339 ------------ ruby-3.2.0-ossl_ocsp-use-null.patch | 61 --- ...t_cgi_cookie_new_with_domain-to-pass.patch | 38 -- ...gi-Loosen-the-domain-regex-to-accept.patch | 44 -- ruby-irb-1.4.1-drop-rdoc-hard-dep.patch | 24 - ruby-irb-1.4.1-set-rdoc-soft-dep.patch | 35 -- ruby.spec | 424 +++++++-------- sources | 2 +- 22 files changed, 392 insertions(+), 2177 deletions(-) delete mode 100644 ruby-3.1.3-Fix-for-tzdata-2022g.patch delete mode 100644 ruby-3.2.0-Detect-compaction-support-during-runtime.patch create mode 100644 ruby-3.2.0-Revert-Fix-test-syntax-suggest-order.patch create mode 100644 ruby-3.2.0-Revert-Test-syntax_suggest-by-make-check.patch delete mode 100644 ruby-3.2.0-define-unsupported-gc-compaction-methods-as-rb_f_notimplement.patch delete mode 100644 ruby-3.2.0-define-unsupported-gc-compaction-methods_generated-files.patch delete mode 100644 ruby-3.2.0-ossl-tests-replace-sha1.patch delete mode 100644 ruby-3.2.0-ossl_ocsp-use-null.patch delete mode 100644 ruby-3.2.0-ruby-cgi-Fix-test_cgi_cookie_new_with_domain-to-pass.patch delete mode 100644 ruby-3.2.0-ruby-cgi-Loosen-the-domain-regex-to-accept.patch delete mode 100644 ruby-irb-1.4.1-drop-rdoc-hard-dep.patch delete mode 100644 ruby-irb-1.4.1-set-rdoc-soft-dep.patch diff --git a/ruby-2.1.0-Enable-configuration-of-archlibdir.patch b/ruby-2.1.0-Enable-configuration-of-archlibdir.patch index 502b47a..65882be 100644 --- a/ruby-2.1.0-Enable-configuration-of-archlibdir.patch +++ b/ruby-2.1.0-Enable-configuration-of-archlibdir.patch @@ -11,7 +11,7 @@ diff --git a/configure.ac b/configure.ac index d261ea57b5..3c13076b82 100644 --- a/configure.ac +++ b/configure.ac -@@ -3374,6 +3374,11 @@ AS_IF([test ${multiarch+set}], [ +@@ -3410,6 +3410,11 @@ AS_IF([test ${multiarch+set}], [ ]) archlibdir='${libdir}/${arch}' @@ -23,6 +23,3 @@ index d261ea57b5..3c13076b82 100644 sitearchlibdir='${libdir}/${sitearch}' archincludedir='${includedir}/${arch}' sitearchincludedir='${includedir}/${sitearch}' --- -2.22.0 - diff --git a/ruby-2.1.0-Prevent-duplicated-paths-when-empty-version-string-i.patch b/ruby-2.1.0-Prevent-duplicated-paths-when-empty-version-string-i.patch index 8961723..2a6261b 100644 --- a/ruby-2.1.0-Prevent-duplicated-paths-when-empty-version-string-i.patch +++ b/ruby-2.1.0-Prevent-duplicated-paths-when-empty-version-string-i.patch @@ -14,7 +14,7 @@ diff --git a/configure.ac b/configure.ac index c42436c23d..d261ea57b5 100644 --- a/configure.ac +++ b/configure.ac -@@ -4032,7 +4032,8 @@ AS_CASE(["$ruby_version_dir_name"], +@@ -4195,7 +4195,8 @@ AS_CASE(["$ruby_version_dir_name"], ruby_version_dir=/'${ruby_version_dir_name}' if test -z "${ruby_version_dir_name}"; then @@ -75,6 +75,3 @@ index 07076d4..35e6c3c 100755 when /^ARCH_FLAG$/ val = "arch_flag || #{val}" if universal when /^UNIVERSAL_ARCHNAMES$/ --- -1.9.0 - diff --git a/ruby-2.1.0-always-use-i386.patch b/ruby-2.1.0-always-use-i386.patch index 1a9a758..05bbd3a 100644 --- a/ruby-2.1.0-always-use-i386.patch +++ b/ruby-2.1.0-always-use-i386.patch @@ -11,7 +11,7 @@ diff --git a/configure.ac b/configure.ac index 3c13076b82..93af30321d 100644 --- a/configure.ac +++ b/configure.ac -@@ -4096,6 +4096,8 @@ AC_SUBST(vendorarchdir)dnl +@@ -4259,6 +4259,8 @@ AC_SUBST(vendorarchdir)dnl AC_SUBST(CONFIGURE, "`echo $0 | sed 's|.*/||'`")dnl AC_SUBST(configure_args, "`echo "${ac_configure_args}" | sed 's/\\$/$$/g'`")dnl @@ -20,6 +20,3 @@ index 3c13076b82..93af30321d 100644 AS_IF([test "${universal_binary-no}" = yes ], [ arch="universal-${target_os}" AS_IF([test "${rb_cv_architecture_available}" = yes], [ --- -1.8.3.1 - diff --git a/ruby-2.1.0-custom-rubygems-location.patch b/ruby-2.1.0-custom-rubygems-location.patch index fe34219..e57500c 100644 --- a/ruby-2.1.0-custom-rubygems-location.patch +++ b/ruby-2.1.0-custom-rubygems-location.patch @@ -15,7 +15,7 @@ diff --git a/configure.ac b/configure.ac index 93af30321d..bc13397e0e 100644 --- a/configure.ac +++ b/configure.ac -@@ -4068,6 +4068,10 @@ AC_ARG_WITH(vendorarchdir, +@@ -4231,6 +4231,10 @@ AC_ARG_WITH(vendorarchdir, [vendorarchdir=$withval], [vendorarchdir=${multiarch+'${rubysitearchprefix}/vendor_ruby'${ruby_version_dir}}${multiarch-'${vendorlibdir}/${sitearch}'}]) @@ -26,7 +26,7 @@ index 93af30321d..bc13397e0e 100644 AS_IF([test "${LOAD_RELATIVE+set}"], [ AC_DEFINE_UNQUOTED(LOAD_RELATIVE, $LOAD_RELATIVE) RUBY_EXEC_PREFIX='' -@@ -4092,6 +4096,7 @@ AC_SUBST(sitearchdir)dnl +@@ -4255,6 +4259,7 @@ AC_SUBST(sitearchdir)dnl AC_SUBST(vendordir)dnl AC_SUBST(vendorlibdir)dnl AC_SUBST(vendorarchdir)dnl @@ -75,7 +75,7 @@ index e9110a17ca..76a1f0a315 100755 mandir = CONFIG["mandir", true] docdir = CONFIG["docdir", true] enable_shared = CONFIG["ENABLE_SHARED"] == 'yes' -@@ -590,7 +591,16 @@ def stub +@@ -595,7 +596,16 @@ def stub install?(:local, :comm, :lib) do prepare "library scripts", rubylibdir noinst = %w[*.txt *.rdoc *.gemspec] @@ -92,6 +92,3 @@ index e9110a17ca..76a1f0a315 100755 end install?(:local, :comm, :hdr, :'comm-hdr') do --- -1.8.3.1 - diff --git a/ruby-2.3.0-ruby_version.patch b/ruby-2.3.0-ruby_version.patch index 2508aeb..32b3069 100644 --- a/ruby-2.3.0-ruby_version.patch +++ b/ruby-2.3.0-ruby_version.patch @@ -12,15 +12,15 @@ ruby_version_dir_name now specifies custom version string for versioned directories, e.g. instead of default X.Y.Z, you can specify whatever string. --- - configure.ac | 64 ++++++++++++++++++++++++--------------------- + configure.ac | 66 ++++++++++++++++++++++++--------------------- template/ruby.pc.in | 1 + - 2 files changed, 35 insertions(+), 30 deletions(-) + 2 files changed, 36 insertions(+), 31 deletions(-) diff --git a/configure.ac b/configure.ac index 80b137e380..63cd3b4f8b 100644 --- a/configure.ac +++ b/configure.ac -@@ -3983,9 +3983,6 @@ AS_CASE(["$target_os"], +@@ -4145,9 +4145,6 @@ AS_CASE(["$target_os"], rubyw_install_name='$(RUBYW_INSTALL_NAME)' ]) @@ -30,7 +30,7 @@ index 80b137e380..63cd3b4f8b 100644 rubyarchprefix=${multiarch+'${archlibdir}/${RUBY_BASE_NAME}'}${multiarch-'${rubylibprefix}/${arch}'} AC_ARG_WITH(rubyarchprefix, AS_HELP_STRING([--with-rubyarchprefix=DIR], -@@ -4008,56 +4005,62 @@ AC_ARG_WITH(ridir, +@@ -4170,57 +4167,63 @@ AC_ARG_WITH(ridir, AC_SUBST(ridir) AC_SUBST(RI_BASE_NAME) @@ -46,6 +46,7 @@ index 80b137e380..63cd3b4f8b 100644 -AS_IF([test ${RUBY_LIB_VERSION_STYLE+set}], [ - { - echo "#define RUBY_LIB_VERSION_STYLE $RUBY_LIB_VERSION_STYLE" +- echo '@%:@include "confdefs.h"' - echo '#define STRINGIZE(x) x' - test -f revision.h -o -f "${srcdir}/revision.h" || echo '#define RUBY_REVISION 0' - echo '#include "version.h"' @@ -61,6 +62,7 @@ index 80b137e380..63cd3b4f8b 100644 +RUBY_LIB_VERSION_STYLE='3 /* full */' +{ +echo "#define RUBY_LIB_VERSION_STYLE $RUBY_LIB_VERSION_STYLE" ++echo '@%:@include "confdefs.h"' +echo '#define STRINGIZE(x) x' +test -f revision.h -o -f "${srcdir}/revision.h" || echo '#define RUBY_REVISION 0' +echo '#include "version.h"' @@ -120,7 +122,7 @@ index 80b137e380..63cd3b4f8b 100644 AS_IF([test "${LOAD_RELATIVE+set}"], [ AC_DEFINE_UNQUOTED(LOAD_RELATIVE, $LOAD_RELATIVE) -@@ -4074,6 +4077,7 @@ AC_SUBST(sitearchincludedir)dnl +@@ -4237,6 +4240,7 @@ AC_SUBST(sitearchincludedir)dnl AC_SUBST(arch)dnl AC_SUBST(sitearch)dnl AC_SUBST(ruby_version)dnl @@ -140,8 +142,6 @@ index 8a2c066..c81b211 100644 RUBY_API_VERSION=@RUBY_API_VERSION@ RUBY_PROGRAM_VERSION=@RUBY_PROGRAM_VERSION@ arch=@arch@ --- -2.1.0 From 518850aba6eee76de7715aae8d37330e34b01983 Mon Sep 17 00:00:00 2001 @@ -171,7 +171,7 @@ diff --git a/tool/rbinstall.rb b/tool/rbinstall.rb index d4c110e..d39c9a6 100755 --- a/tool/rbinstall.rb +++ b/tool/rbinstall.rb -@@ -448,7 +448,7 @@ def CONFIG.[](name, mandatory = false) +@@ -453,7 +453,7 @@ def CONFIG.[](name, mandatory = false) install?(:doc, :rdoc) do if $rdocdir @@ -180,9 +180,6 @@ index d4c110e..d39c9a6 100755 prepare "rdoc", ridatadir install_recursive($rdocdir, ridatadir, :no_install => rdoc_noinst, :mode => $data_mode) end --- -2.23.0 - From 9f0ec0233f618cbb862629816b22491c3df79578 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= @@ -217,7 +214,7 @@ index d4ff4a262c..3f9a5bf590 100644 File.join parts end -@@ -234,7 +235,7 @@ def self.vendor_dir # :nodoc: +@@ -248,7 +249,7 @@ def self.vendor_dir # :nodoc: return nil unless RbConfig::CONFIG.key? "vendordir" File.join RbConfig::CONFIG["vendordir"], "gems", @@ -249,8 +246,6 @@ index b25068405d..e9fef4a311 100644 assert_equal expected, Gem.vendor_dir end --- -2.1.0 From 88c38a030c22dbf9422ece847bdfbf87d6659313 Mon Sep 17 00:00:00 2001 @@ -267,7 +262,7 @@ diff --git a/configure.ac b/configure.ac index a00f2b6776..999e2d6d5d 100644 --- a/configure.ac +++ b/configure.ac -@@ -115,7 +115,7 @@ RUBY_BASE_NAME=`echo ruby | sed "$program_transform_name"` +@@ -124,7 +124,7 @@ RUBY_BASE_NAME=`echo ruby | sed "$program_transform_name"` RUBYW_BASE_NAME=`echo rubyw | sed "$program_transform_name"` AC_SUBST(RUBY_BASE_NAME) AC_SUBST(RUBYW_BASE_NAME) @@ -276,6 +271,3 @@ index a00f2b6776..999e2d6d5d 100644 dnl checks for alternative programs AC_CANONICAL_BUILD --- -2.1.0 - diff --git a/ruby-2.7.0-Initialize-ABRT-hook.patch b/ruby-2.7.0-Initialize-ABRT-hook.patch index 4d5ab29..b0aace4 100644 --- a/ruby-2.7.0-Initialize-ABRT-hook.patch +++ b/ruby-2.7.0-Initialize-ABRT-hook.patch @@ -43,7 +43,7 @@ diff --git a/common.mk b/common.mk index b2e5b2b6d0..f39f81da5c 100644 --- a/common.mk +++ b/common.mk -@@ -82,7 +82,8 @@ ENC_MK = enc.mk +@@ -86,7 +86,8 @@ ENC_MK = enc.mk MAKE_ENC = -f $(ENC_MK) V="$(V)" UNICODE_HDR_DIR="$(UNICODE_HDR_DIR)" \ RUBY="$(BOOTSTRAPRUBY)" MINIRUBY="$(BOOTSTRAPRUBY)" $(mflags) @@ -57,7 +57,7 @@ diff --git a/ruby.c b/ruby.c index 60c57d6259..1eec16f2c8 100644 --- a/ruby.c +++ b/ruby.c -@@ -1623,10 +1623,14 @@ proc_options(long argc, char **argv, ruby_cmdline_options_t *opt, int envopt) +@@ -1572,10 +1572,14 @@ proc_options(long argc, char **argv, ruby_cmdline_options_t *opt, int envopt) void Init_builtin_features(void); @@ -72,6 +72,3 @@ index 60c57d6259..1eec16f2c8 100644 rb_const_remove(rb_cObject, rb_intern_const("TMP_RUBY_PREFIX")); } --- -2.24.1 - diff --git a/ruby-2.7.1-Timeout-the-test_bug_reporter_add-witout-raising-err.patch b/ruby-2.7.1-Timeout-the-test_bug_reporter_add-witout-raising-err.patch index 5c7afe8..b14971e 100644 --- a/ruby-2.7.1-Timeout-the-test_bug_reporter_add-witout-raising-err.patch +++ b/ruby-2.7.1-Timeout-the-test_bug_reporter_add-witout-raising-err.patch @@ -20,15 +20,12 @@ diff --git a/test/-ext-/bug_reporter/test_bug_reporter.rb b/test/-ext-/bug_repor index 628fcd0340..2c677cc8a7 100644 --- a/test/-ext-/bug_reporter/test_bug_reporter.rb +++ b/test/-ext-/bug_reporter/test_bug_reporter.rb -@@ -22,7 +22,7 @@ def test_bug_reporter_add - args = ["--disable-gems", "-r-test-/bug_reporter", +@@ -28,7 +28,7 @@ def test_bug_reporter_add "-C", tmpdir] - stdin = "register_sample_bug_reporter(12345); Process.kill :SEGV, $$" + args.push("--yjit") if yjit_enabled? # We want the printed description to match this process's RUBY_DESCRIPTION + stdin = "#{no_core}register_sample_bug_reporter(12345); Process.kill :SEGV, $$" - assert_in_out_err(args, stdin, [], expected_stderr, encoding: "ASCII-8BIT") + assert_in_out_err(args, stdin, [], expected_stderr, encoding: "ASCII-8BIT", timeout_error: nil) ensure FileUtils.rm_rf(tmpdir) if tmpdir end --- -2.27.0 - diff --git a/ruby-3.1.0-Don-t-query-RubyVM-FrozenCore-for-class-path.patch b/ruby-3.1.0-Don-t-query-RubyVM-FrozenCore-for-class-path.patch index 973fe72..22b94e6 100644 --- a/ruby-3.1.0-Don-t-query-RubyVM-FrozenCore-for-class-path.patch +++ b/ruby-3.1.0-Don-t-query-RubyVM-FrozenCore-for-class-path.patch @@ -21,23 +21,20 @@ diff --git a/vm.c b/vm.c index 8ce8b279d4..3d189fa63a 100644 --- a/vm.c +++ b/vm.c -@@ -479,7 +479,15 @@ rb_dtrace_setup(rb_execution_context_t *ec, VALUE klass, ID id, +@@ -547,7 +547,15 @@ rb_dtrace_setup(rb_execution_context_t *ec, VALUE klass, ID id, } type = BUILTIN_TYPE(klass); if (type == T_CLASS || type == T_ICLASS || type == T_MODULE) { -- VALUE name = rb_class_path(klass); -+ VALUE name = Qnil; -+ /* -+ * Special treatment for rb_mRubyVMFrozenCore wchi is broken by GC. +- VALUE name = rb_class_path(klass); ++ VALUE name = Qnil; ++ /* ++ * Special treatment for rb_mRubyVMFrozenCore wchi is broken by GC. + * https://bugs.ruby-lang.org/issues/18257 -+ */ -+ if (klass == rb_mRubyVMFrozenCore) -+ name = rb_str_new_cstr("RubyVM::FrozenCore"); -+ else -+ name = rb_class_path(klass); - const char *classname, *filename; - const char *methodname = rb_id2name(id); - if (methodname && (filename = rb_source_location_cstr(&args->line_no)) != 0) { --- -2.34.1 - ++ */ ++ if (klass == rb_mRubyVMFrozenCore) ++ name = rb_str_new_cstr("RubyVM::FrozenCore"); ++ else ++ name = rb_class_path(klass); + const char *classname, *filename; + const char *methodname = rb_id2name(id); + if (methodname && (filename = rb_source_location_cstr(&args->line_no)) != 0) { diff --git a/ruby-3.1.3-Fix-for-tzdata-2022g.patch b/ruby-3.1.3-Fix-for-tzdata-2022g.patch deleted file mode 100644 index a8a1605..0000000 --- a/ruby-3.1.3-Fix-for-tzdata-2022g.patch +++ /dev/null @@ -1,70 +0,0 @@ -From a1124dc162810f86cb0bff58cde24064cfc561bc Mon Sep 17 00:00:00 2001 -From: nagachika -Date: Fri, 9 Dec 2022 21:11:47 +0900 -Subject: [PATCH] merge revision(s) 58cc3c9f387dcf8f820b43e043b540fa06248da3: - [Backport #19187] - - [Bug #19187] Fix for tzdata-2022g - - --- - test/ruby/test_time_tz.rb | 21 +++++++++++++++------ - 1 file changed, 15 insertions(+), 6 deletions(-) ---- - test/ruby/test_time_tz.rb | 21 +++++++++++++++------ - 1 files changed, 15 insertions(+), 6 deletions(-) - -diff --git a/test/ruby/test_time_tz.rb b/test/ruby/test_time_tz.rb -index b6785f336028d..939f218ed4d10 100644 ---- a/test/ruby/test_time_tz.rb -+++ b/test/ruby/test_time_tz.rb -@@ -7,9 +7,9 @@ class TestTimeTZ < Test::Unit::TestCase - has_lisbon_tz = true - force_tz_test = ENV["RUBY_FORCE_TIME_TZ_TEST"] == "yes" - case RUBY_PLATFORM -- when /linux/ -+ when /darwin|linux/ - force_tz_test = true -- when /darwin|freebsd|openbsd/ -+ when /freebsd|openbsd/ - has_lisbon_tz = false - force_tz_test = true - end -@@ -95,6 +95,9 @@ def group_by(e, &block) - CORRECT_KIRITIMATI_SKIP_1994 = with_tz("Pacific/Kiritimati") { - Time.local(1994, 12, 31, 0, 0, 0).year == 1995 - } -+ CORRECT_SINGAPORE_1982 = with_tz("Asia/Singapore") { -+ "2022g" if Time.local(1981, 12, 31, 23, 59, 59).utc_offset == 8*3600 -+ } - - def time_to_s(t) - t.to_s -@@ -140,9 +143,12 @@ def test_america_managua - - def test_asia_singapore - with_tz(tz="Asia/Singapore") { -- assert_time_constructor(tz, "1981-12-31 23:59:59 +0730", :local, [1981,12,31,23,59,59]) -- assert_time_constructor(tz, "1982-01-01 00:30:00 +0800", :local, [1982,1,1,0,0,0]) -- assert_time_constructor(tz, "1982-01-01 00:59:59 +0800", :local, [1982,1,1,0,29,59]) -+ assert_time_constructor(tz, "1981-12-31 23:29:59 +0730", :local, [1981,12,31,23,29,59]) -+ if CORRECT_SINGAPORE_1982 -+ assert_time_constructor(tz, "1982-01-01 00:00:00 +0800", :local, [1981,12,31,23,30,00]) -+ assert_time_constructor(tz, "1982-01-01 00:00:00 +0800", :local, [1982,1,1,0,0,0]) -+ assert_time_constructor(tz, "1982-01-01 00:29:59 +0800", :local, [1982,1,1,0,29,59]) -+ end - assert_time_constructor(tz, "1982-01-01 00:30:00 +0800", :local, [1982,1,1,0,30,0]) - } - end -@@ -450,8 +456,11 @@ def self.gen_zdump_test(data) - America/Managua Wed Jan 1 04:59:59 1997 UTC = Tue Dec 31 23:59:59 1996 EST isdst=0 gmtoff=-18000 - America/Managua Wed Jan 1 05:00:00 1997 UTC = Tue Dec 31 23:00:00 1996 CST isdst=0 gmtoff=-21600 - Asia/Singapore Sun Aug 8 16:30:00 1965 UTC = Mon Aug 9 00:00:00 1965 SGT isdst=0 gmtoff=27000 --Asia/Singapore Thu Dec 31 16:29:59 1981 UTC = Thu Dec 31 23:59:59 1981 SGT isdst=0 gmtoff=27000 -+Asia/Singapore Thu Dec 31 15:59:59 1981 UTC = Thu Dec 31 23:29:59 1981 SGT isdst=0 gmtoff=27000 - Asia/Singapore Thu Dec 31 16:30:00 1981 UTC = Fri Jan 1 00:30:00 1982 SGT isdst=0 gmtoff=28800 -+End -+ gen_zdump_test <<'End' if CORRECT_SINGAPORE_1982 -+Asia/Singapore Thu Dec 31 16:00:00 1981 UTC = Fri Jan 1 00:00:00 1982 SGT isdst=0 gmtoff=28800 - End - gen_zdump_test CORRECT_TOKYO_DST_1951 ? <<'End' + (CORRECT_TOKYO_DST_1951 < "2018f" ? <<'2018e' : <<'2018f') : <<'End' - Asia/Tokyo Sat May 5 14:59:59 1951 UTC = Sat May 5 23:59:59 1951 JST isdst=0 gmtoff=32400 diff --git a/ruby-3.2.0-Detect-compaction-support-during-runtime.patch b/ruby-3.2.0-Detect-compaction-support-during-runtime.patch deleted file mode 100644 index 64566f5..0000000 --- a/ruby-3.2.0-Detect-compaction-support-during-runtime.patch +++ /dev/null @@ -1,291 +0,0 @@ -From 4d9cc9afa47981520d991d19fd78b322f1ba9f2a Mon Sep 17 00:00:00 2001 -From: Jarek Prokop -Date: Wed, 22 Jun 2022 01:03:49 +0200 -Subject: [PATCH] Detect compaction support during runtime. - -The patch is created by backporting 3 commits from -the upstream Ruby master branch in the chronological order below. - -https://github.com/ruby/ruby/commit/52d42e702375446746164a0251e1a10bce813b78 -https://github.com/ruby/ruby/commit/79eaaf2d0b641710613f16525e4b4c439dfe854e -https://github.com/ruby/ruby/commit/2c190863239bee3f54cfb74b16bb6ea4cae6ed20 - -== How to create this patch == - -Download Ruby source code. -``` -$ git clone https://github.com/ruby/ruby.git -$ cd ruby -``` - -First create a commit squashed from the 3 commits above. -Checkout the second commmit above, and create a temporary branch. -``` -$ git checkout 79eaaf2d0b641710613f16525e4b4c439dfe854e -$ git checkout -b wip/detect-compaction-runtime-tmp -``` - -Cherry pick the third commit on the second commit. -``` -$ git cherry-pick 2c190863239bee3f54cfb74b16bb6ea4cae6ed20 -``` - -Squash the last 3 commits on the branch. -``` -$ git rebase -i 2223eb082afa6d05321b69df783d4133b9aacba6 -``` - -Then checkout Ruby 3.1.2 branch. -Create a new branch. -Merge the Fedora Ruby's -ruby-3.2.0-define-unsupported-gc-compaction-methods-as-rb_f_notimplement.patch. -``` -$ git checkout v3_1_2 -$ git checkout -b wip/detect-compaction-runtime -$ patch -p1 < -~/fed/ruby/ruby-3.2.0-define-unsupported-gc-compaction-methods-as-rb_f_notimplement.patch -$ git add gc.c gc.rb test/ruby/test_gc_compact.rb -$ git commit -``` - -Merge the squashed one commit on the -`wip/detect-compaction-runtime-tmp` branch -into the `wip/detect-compaction-runtime` branch. -``` -$ git cherry-pick -``` - -Fix conflicts seeing the difference by `git show ` -on another terminal. -``` -$ vi gc.c -$ git add gc.c -$ git commit -``` - -== Notes for the patch == - -``` -+# define GC_COMPACTION_SUPPORTED (GC_CAN_COMPILE_COMPACTION && USE_MMAP_ALIGNED_ALLOC) -``` - -We use the USE_MMAP_ALIGNED_ALLOC instead of HEAP_PAGE_ALLOC_USE_MMAP on -the line above. Because while the Ruby on the master branch replaced the -USE_MMAP_ALIGNED_ALLOC with HEAP_PAGE_ALLOC_USE_MMAP, Ruby 3.1.2 doesn't. -See . - -``` -+ rb_define_singleton_method(rb_mGC, "verify_compaction_references", gc_verify_compaction_references, -1); -``` - -We added the line in the case that GC_COMPACTION_SUPPORTED is true. -Because while the Ruby on the master branch defines the -GC.verify_compaction_references in the gc.rb in -the case that GC_COMPACTION_SUPPORTED is true, Ruby 3.1.2 -doesn't define it in the gc.rb. -See . - -``` -+ OPT(GC_COMPACTION_SUPPORTED); -``` - -We added the line to expose the C macro to Ruby level. -In Ruby the macro existance can then be checked like so: -```Ruby -GC::OPTS.include?("GC_COMPACTION_SUPPORTED") -``` -It will return `true` if the GC_COMPACTION_SUPPORTED evaluates to `true` on the -C level, `false` otherwise. -See - -== Original commit messages == - -This is a combination of 3 commits. -This is the 1st commit message: -~~~ -Rename GC_COMPACTION_SUPPORTED - -Naming this macro GC_COMPACTION_SUPPORTED is misleading because it -only checks whether compaction is supported at compile time. - -[Bug #18829] -~~~ - -This is the commit message #2: -~~~ -Include runtime checks for compaction support - -Commit 0c36ba53192c5a0d245c9b626e4346a32d7d144e changed GC compaction -methods to not be implemented when not supported. However, that commit -only does compile time checks (which currently only checks for WASM), -but there are additional compaction support checks during run time. - -This commit changes it so that GC compaction methods aren't defined -during run time if the platform does not support GC compaction. - -[Bug #18829] -~~~ - -This is the commit message #3: -~~~ -Suppress code unused unless GC_CAN_COMPILE_COMPACTION -~~~ ---- - gc.c | 63 +++++++++++++++++++++++++++++++++++++++++------------------- - 1 file changed, 43 insertions(+), 20 deletions(-) - -diff --git a/gc.c b/gc.c -index 1c35856c44..bff0666a17 100644 ---- a/gc.c -+++ b/gc.c -@@ -4984,6 +4984,23 @@ gc_unprotect_pages(rb_objspace_t *objspace, rb_heap_t *heap) - static void gc_update_references(rb_objspace_t * objspace); - static void invalidate_moved_page(rb_objspace_t *objspace, struct heap_page *page); - -+#ifndef GC_CAN_COMPILE_COMPACTION -+#if defined(__wasi__) /* WebAssembly doesn't support signals */ -+# define GC_CAN_COMPILE_COMPACTION 0 -+#else -+# define GC_CAN_COMPILE_COMPACTION 1 -+#endif -+#endif -+ -+#if defined(__MINGW32__) || defined(_WIN32) -+# define GC_COMPACTION_SUPPORTED 1 -+#else -+/* If not MinGW, Windows, or does not have mmap, we cannot use mprotect for -+ * the read barrier, so we must disable compaction. */ -+# define GC_COMPACTION_SUPPORTED (GC_CAN_COMPILE_COMPACTION && USE_MMAP_ALIGNED_ALLOC) -+#endif -+ -+#if GC_CAN_COMPILE_COMPACTION - static void - read_barrier_handler(uintptr_t address) - { -@@ -5004,6 +5021,7 @@ read_barrier_handler(uintptr_t address) - } - RB_VM_LOCK_LEAVE(); - } -+#endif - - #if defined(_WIN32) - static LPTOP_LEVEL_EXCEPTION_FILTER old_handler; -@@ -9267,13 +9285,7 @@ gc_start_internal(rb_execution_context_t *ec, VALUE self, VALUE full_mark, VALUE - - /* For now, compact implies full mark / sweep, so ignore other flags */ - if (RTEST(compact)) { -- /* If not MinGW, Windows, or does not have mmap, we cannot use mprotect for -- * the read barrier, so we must disable compaction. */ --#if !defined(__MINGW32__) && !defined(_WIN32) -- if (!USE_MMAP_ALIGNED_ALLOC) { -- rb_raise(rb_eNotImpError, "Compaction isn't available on this platform"); -- } --#endif -+ GC_ASSERT(GC_COMPACTION_SUPPORTED); - - reason |= GPR_FLAG_COMPACT; - } -@@ -9438,7 +9450,7 @@ gc_move(rb_objspace_t *objspace, VALUE scan, VALUE free, size_t slot_size) - return (VALUE)src; - } - --#if GC_COMPACTION_SUPPORTED -+#if GC_CAN_COMPILE_COMPACTION - static int - compare_free_slots(const void *left, const void *right, void *dummy) - { -@@ -10166,7 +10178,7 @@ gc_update_references(rb_objspace_t *objspace) - gc_update_table_refs(objspace, finalizer_table); - } - --#if GC_COMPACTION_SUPPORTED -+#if GC_CAN_COMPILE_COMPACTION - /* - * call-seq: - * GC.latest_compact_info -> {:considered=>{:T_CLASS=>11}, :moved=>{:T_CLASS=>11}} -@@ -10207,7 +10219,7 @@ gc_compact_stats(VALUE self) - # define gc_compact_stats rb_f_notimplement - #endif - --#if GC_COMPACTION_SUPPORTED -+#if GC_CAN_COMPILE_COMPACTION - static void - root_obj_check_moved_i(const char *category, VALUE obj, void *data) - { -@@ -10286,7 +10298,7 @@ gc_compact(VALUE self) - # define gc_compact rb_f_notimplement - #endif - --#if GC_COMPACTION_SUPPORTED -+#if GC_CAN_COMPILE_COMPACTION - /* - * call-seq: - * GC.verify_compaction_references(toward: nil, double_heap: false) -> hash -@@ -10817,7 +10829,7 @@ gc_disable(rb_execution_context_t *ec, VALUE _) - return rb_gc_disable(); - } - --#if GC_COMPACTION_SUPPORTED -+#if GC_CAN_COMPILE_COMPACTION - /* - * call-seq: - * GC.auto_compact = flag -@@ -10831,8 +10843,7 @@ gc_disable(rb_execution_context_t *ec, VALUE _) - static VALUE - gc_set_auto_compact(VALUE _, VALUE v) - { -- /* If not MinGW, Windows, or does not have mmap, we cannot use mprotect for -- * the read barrier, so we must disable automatic compaction. */ -+ GC_ASSERT(GC_COMPACTION_SUPPORTED); - - ruby_enable_autocompact = RTEST(v); - return v; -@@ -10841,7 +10852,8 @@ gc_set_auto_compact(VALUE _, VALUE v) - # define gc_set_auto_compact rb_f_notimplement - #endif - --#if GC_COMPACTION_SUPPORTED -+ -+#if GC_CAN_COMPILE_COMPACTION - /* - * call-seq: - * GC.auto_compact -> true or false -@@ -13714,11 +13726,21 @@ Init_GC(void) - rb_define_singleton_method(rb_mGC, "malloc_allocated_size", gc_malloc_allocated_size, 0); - rb_define_singleton_method(rb_mGC, "malloc_allocations", gc_malloc_allocations, 0); - #endif -- rb_define_singleton_method(rb_mGC, "compact", gc_compact, 0); -- rb_define_singleton_method(rb_mGC, "auto_compact", gc_get_auto_compact, 0); -- rb_define_singleton_method(rb_mGC, "auto_compact=", gc_set_auto_compact, 1); -- rb_define_singleton_method(rb_mGC, "latest_compact_info", gc_compact_stats, 0); -- rb_define_singleton_method(rb_mGC, "verify_compaction_references", gc_verify_compaction_references, -1); -+ if (GC_COMPACTION_SUPPORTED) { -+ rb_define_singleton_method(rb_mGC, "compact", gc_compact, 0); -+ rb_define_singleton_method(rb_mGC, "auto_compact", gc_get_auto_compact, 0); -+ rb_define_singleton_method(rb_mGC, "auto_compact=", gc_set_auto_compact, 1); -+ rb_define_singleton_method(rb_mGC, "latest_compact_info", gc_compact_stats, 0); -+ rb_define_singleton_method(rb_mGC, "verify_compaction_references", gc_verify_compaction_references, -1); -+ } -+ else { -+ rb_define_singleton_method(rb_mGC, "compact", rb_f_notimplement, 0); -+ rb_define_singleton_method(rb_mGC, "auto_compact", rb_f_notimplement, 0); -+ rb_define_singleton_method(rb_mGC, "auto_compact=", rb_f_notimplement, 1); -+ rb_define_singleton_method(rb_mGC, "latest_compact_info", rb_f_notimplement, 0); -+ /* When !GC_COMPACTION_SUPPORTED, this method is not defined in gc.rb */ -+ rb_define_singleton_method(rb_mGC, "verify_compaction_references", rb_f_notimplement, -1); -+ } - - #if GC_DEBUG_STRESS_TO_CLASS - rb_define_singleton_method(rb_mGC, "add_stress_to_class", rb_gcdebug_add_stress_to_class, -1); -@@ -13742,6 +13764,7 @@ Init_GC(void) - OPT(MALLOC_ALLOCATED_SIZE); - OPT(MALLOC_ALLOCATED_SIZE_CHECK); - OPT(GC_PROFILE_DETAIL_MEMORY); -+ OPT(GC_COMPACTION_SUPPORTED); - #undef OPT - OBJ_FREEZE(opts); - } --- -2.36.1 - diff --git a/ruby-3.2.0-Revert-Fix-test-syntax-suggest-order.patch b/ruby-3.2.0-Revert-Fix-test-syntax-suggest-order.patch new file mode 100644 index 0000000..12e242d --- /dev/null +++ b/ruby-3.2.0-Revert-Fix-test-syntax-suggest-order.patch @@ -0,0 +1,73 @@ +From 5e2f8761b2342ee58f9689a7d62d48ec031e59c0 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?V=C3=ADt=20Ondruch?= +Date: Mon, 2 Jan 2023 14:30:13 +0100 +Subject: [PATCH] Revert "Fix test-syntax-suggest order" + +This reverts commit 18c1ca8f4c0748905d5cedb6c044df507ea8ad6a. +--- + common.mk | 12 ++++-------- + defs/gmake.mk | 2 +- + 2 files changed, 5 insertions(+), 9 deletions(-) + +diff --git a/common.mk b/common.mk +index d0558697d7..e73841aae7 100644 +--- a/common.mk ++++ b/common.mk +@@ -767,7 +767,8 @@ clean-spec: PHONY + -$(Q) $(RMDIRS) $(RUBYSPEC_CAPIEXT) 2> $(NULL) || $(NULLCMD) + -$(Q) $(RMALL) rubyspec_temp + +-check: main $(DOT_WAIT) test $(DOT_WAIT) test-tool $(DOT_WAIT) test-all ++check: main $(DOT_WAIT) test $(DOT_WAIT) test-tool $(DOT_WAIT) test-all \ ++ $(DOT_WAIT) test-spec $(DOT_WAIT) test-syntax-suggest + $(ECHO) check succeeded + -$(Q) : : "run only on sh"; \ + if [ x"$(GIT)" != x ] && $(CHDIR) "$(srcdir)" && \ +@@ -903,8 +904,6 @@ yes-test-spec: test-spec-precheck + $(ACTIONS_ENDGROUP) + no-test-spec: + +-check: $(DOT_WAIT) test-spec +- + RUNNABLE = $(LIBRUBY_RELATIVE:no=un)-runnable + runnable: $(RUNNABLE) prog $(tooldir)/mkrunnable.rb PHONY + $(Q) $(MINIRUBY) $(tooldir)/mkrunnable.rb -v $(EXTOUT) +@@ -1457,7 +1456,6 @@ test-syntax-suggest-precheck: $(TEST_RUNNABLE)-test-syntax-suggest-precheck + no-test-syntax-suggest-precheck: + yes-test-syntax-suggest-precheck: main + +-test-syntax-suggest-prepare: $(TEST_RUNNABLE)-test-syntax-suggest-prepare + no-test-syntax-suggest-prepare: no-test-syntax-suggest-precheck + yes-test-syntax-suggest-prepare: yes-test-syntax-suggest-precheck + $(ACTIONS_GROUP) +@@ -1467,15 +1465,13 @@ yes-test-syntax-suggest-prepare: yes-test-syntax-suggest-precheck + + RSPECOPTS = + SYNTAX_SUGGEST_SPECS = +-PREPARE_SYNTAX_SUGGEST = test-syntax-suggest-prepare ++PREPARE_SYNTAX_SUGGEST = yes-test-syntax-suggest-prepare + test-syntax-suggest: $(TEST_RUNNABLE)-test-syntax-suggest +-yes-test-syntax-suggest: yes-$(PREPARE_SYNTAX_SUGGEST) ++yes-test-syntax-suggest: $(PREPARE_SYNTAX_SUGGEST) + $(XRUBY) -C $(srcdir) -Ispec/syntax_suggest .bundle/bin/rspec \ + --require spec_helper $(RSPECOPTS) spec/syntax_suggest/$(SYNTAX_SUGGEST_SPECS) + no-test-syntax-suggest: + +-check: $(DOT_WAIT) $(TEST_RUNNABLE)-$(PREPARE_SYNTAX_SUGGEST) test-syntax-suggest +- + test-bundler-precheck: $(TEST_RUNNABLE)-test-bundler-precheck + no-test-bundler-precheck: + yes-test-bundler-precheck: main $(arch)-fake.rb +diff --git a/defs/gmake.mk b/defs/gmake.mk +index 54fef6685f..0aa403a4eb 100644 +--- a/defs/gmake.mk ++++ b/defs/gmake.mk +@@ -84,7 +84,7 @@ endif + ORDERED_TEST_TARGETS := $(filter $(TEST_TARGETS), \ + btest-ruby test-knownbug test-basic \ + test-testframework test-tool test-ruby test-all \ +- test-spec test-syntax-suggest-prepare test-syntax-suggest \ ++ test-spec test-syntax-suggest \ + test-bundler-prepare test-bundler test-bundler-parallel \ + test-bundled-gems-precheck test-bundled-gems-fetch \ + test-bundled-gems-prepare test-bundled-gems-run \ diff --git a/ruby-3.2.0-Revert-Test-syntax_suggest-by-make-check.patch b/ruby-3.2.0-Revert-Test-syntax_suggest-by-make-check.patch new file mode 100644 index 0000000..7bddc2d --- /dev/null +++ b/ruby-3.2.0-Revert-Test-syntax_suggest-by-make-check.patch @@ -0,0 +1,67 @@ +From cf60e383a9c98da5cd75012f2aabfa4a2774aade Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?V=C3=ADt=20Ondruch?= +Date: Mon, 2 Jan 2023 14:16:39 +0100 +Subject: [PATCH] Revert "Test syntax_suggest by `make check`" + +This reverts commit cae53842735237ccf71a13873fd0d1ae7f165582. +--- + common.mk | 6 ++---- + defs/gmake.mk | 6 ++---- + 2 files changed, 4 insertions(+), 8 deletions(-) + +diff --git a/common.mk b/common.mk +index 27f6a9d89d..8021f03a58 100644 +--- a/common.mk ++++ b/common.mk +@@ -767,8 +767,7 @@ clean-spec: PHONY + -$(Q) $(RMDIRS) $(RUBYSPEC_CAPIEXT) 2> $(NULL) || $(NULLCMD) + -$(Q) $(RMALL) rubyspec_temp + +-check: main $(DOT_WAIT) test $(DOT_WAIT) test-tool $(DOT_WAIT) test-all \ +- $(DOT_WAIT) test-spec $(DOT_WAIT) test-syntax-suggest ++check: main $(DOT_WAIT) test $(DOT_WAIT) test-tool $(DOT_WAIT) test-all $(DOT_WAIT) test-spec + $(ECHO) check succeeded + -$(Q) : : "run only on sh"; \ + if [ x"$(GIT)" != x ] && $(CHDIR) "$(srcdir)" && \ +@@ -1465,9 +1464,8 @@ yes-test-syntax-suggest-prepare: yes-test-syntax-suggest-precheck + + RSPECOPTS = + SYNTAX_SUGGEST_SPECS = +-PREPARE_SYNTAX_SUGGEST = yes-test-syntax-suggest-prepare + test-syntax-suggest: $(TEST_RUNNABLE)-test-syntax-suggest +-yes-test-syntax-suggest: $(PREPARE_SYNTAX_SUGGEST) ++yes-test-syntax-suggest: yes-test-syntax-suggest-prepare + $(XRUBY) -C $(srcdir) -Ispec/syntax_suggest .bundle/bin/rspec \ + --require spec_helper $(RSPECOPTS) spec/syntax_suggest/$(SYNTAX_SUGGEST_SPECS) + no-test-syntax-suggest: +diff --git a/defs/gmake.mk b/defs/gmake.mk +index 0aa403a4eb..dc9d31f49e 100644 +--- a/defs/gmake.mk ++++ b/defs/gmake.mk +@@ -27,7 +27,7 @@ TEST_DEPENDS := $(filter-out commit $(TEST_TARGETS),$(MAKECMDGOALS)) + TEST_TARGETS := $(patsubst great,exam,$(TEST_TARGETS)) + TEST_DEPENDS := $(filter-out great $(TEST_TARGETS),$(TEST_DEPENDS)) + TEST_TARGETS := $(patsubst exam,check,$(TEST_TARGETS)) +-TEST_TARGETS := $(patsubst check,test-syntax-suggest test-spec test-all test-tool test-short,$(TEST_TARGETS)) ++TEST_TARGETS := $(patsubst check,test-spec test-all test-tool test-short,$(TEST_TARGETS)) + TEST_TARGETS := $(patsubst test-rubyspec,test-spec,$(TEST_TARGETS)) + TEST_DEPENDS := $(filter-out exam check test-spec $(TEST_TARGETS),$(TEST_DEPENDS)) + TEST_TARGETS := $(patsubst love,check,$(TEST_TARGETS)) +@@ -40,7 +40,6 @@ TEST_TARGETS := $(patsubst test-short,btest-ruby test-knownbug test-basic,$(TEST + TEST_TARGETS := $(patsubst test-bundled-gems,test-bundled-gems-run,$(TEST_TARGETS)) + TEST_TARGETS := $(patsubst test-bundled-gems-run,test-bundled-gems-run $(PREPARE_BUNDLED_GEMS),$(TEST_TARGETS)) + TEST_TARGETS := $(patsubst test-bundled-gems-prepare,test-bundled-gems-prepare $(PRECHECK_BUNDLED_GEMS) test-bundled-gems-fetch,$(TEST_TARGETS)) +-TEST_TARGETS := $(patsubst test-syntax-suggest,test-syntax-suggest $(PREPARE_SYNTAX_SUGGEST),$(TEST_TARGETS)) + TEST_DEPENDS := $(filter-out test-short $(TEST_TARGETS),$(TEST_DEPENDS)) + TEST_DEPENDS += $(if $(filter great exam love check,$(MAKECMDGOALS)),all exts) + endif +@@ -84,8 +83,7 @@ endif + ORDERED_TEST_TARGETS := $(filter $(TEST_TARGETS), \ + btest-ruby test-knownbug test-basic \ + test-testframework test-tool test-ruby test-all \ +- test-spec test-syntax-suggest \ +- test-bundler-prepare test-bundler test-bundler-parallel \ ++ test-spec test-bundler-prepare test-bundler test-bundler-parallel \ + test-bundled-gems-precheck test-bundled-gems-fetch \ + test-bundled-gems-prepare test-bundled-gems-run \ + ) diff --git a/ruby-3.2.0-define-unsupported-gc-compaction-methods-as-rb_f_notimplement.patch b/ruby-3.2.0-define-unsupported-gc-compaction-methods-as-rb_f_notimplement.patch deleted file mode 100644 index 1a06227..0000000 --- a/ruby-3.2.0-define-unsupported-gc-compaction-methods-as-rb_f_notimplement.patch +++ /dev/null @@ -1,502 +0,0 @@ -From 1b3502156a665e2782f366aa5ac8c3bfd7637ab8 Mon Sep 17 00:00:00 2001 -From: Mike Dalessio -Date: Mon, 23 May 2022 15:40:22 -0400 -Subject: [PATCH 1/2] Move compaction-related methods into gc.c - -These methods are removed from gc.rb and added to gc.c: - -- GC.compact -- GC.auto_compact -- GC.auto_compact= -- GC.latest_compact_info -- GC.verify_compaction_references - -This is a prefactor to allow setting these methods to -`rb_f_notimplement` in a followup commit. ---- - gc.c | 101 ++++++++++++++++++++++++++++++++++++++++++++++++++++------ - gc.rb | 68 --------------------------------------- - 2 files changed, 91 insertions(+), 78 deletions(-) - -diff --git a/gc.c b/gc.c -index ef9327df1f..1c35856c44 100644 ---- a/gc.c -+++ b/gc.c -@@ -10164,8 +10164,20 @@ gc_update_references(rb_objspace_t *objspace) - gc_update_table_refs(objspace, finalizer_table); - } - -+/* -+ * call-seq: -+ * GC.latest_compact_info -> {:considered=>{:T_CLASS=>11}, :moved=>{:T_CLASS=>11}} -+ * -+ * Returns information about object moved in the most recent GC compaction. -+ * -+ * The returned hash has two keys :considered and :moved. The hash for -+ * :considered lists the number of objects that were considered for movement -+ * by the compactor, and the :moved hash lists the number of objects that -+ * were actually moved. Some objects can't be moved (maybe they were pinned) -+ * so these numbers can be used to calculate compaction efficiency. -+ */ - static VALUE --gc_compact_stats(rb_execution_context_t *ec, VALUE self) -+gc_compact_stats(VALUE self) - { - size_t i; - rb_objspace_t *objspace = &rb_objspace; -@@ -10238,22 +10250,70 @@ heap_check_moved_i(void *vstart, void *vend, size_t stride, void *data) - return 0; - } - -+/* -+ * call-seq: -+ * GC.compact -+ * -+ * This function compacts objects together in Ruby's heap. It eliminates -+ * unused space (or fragmentation) in the heap by moving objects in to that -+ * unused space. This function returns a hash which contains statistics about -+ * which objects were moved. See `GC.latest_gc_info` for details about -+ * compaction statistics. -+ * -+ * This method is implementation specific and not expected to be implemented -+ * in any implementation besides MRI. -+ */ - static VALUE --gc_compact(rb_execution_context_t *ec, VALUE self) -+gc_compact(VALUE self) - { - /* Run GC with compaction enabled */ -- gc_start_internal(ec, self, Qtrue, Qtrue, Qtrue, Qtrue); -+ gc_start_internal(NULL, self, Qtrue, Qtrue, Qtrue, Qtrue); - -- return gc_compact_stats(ec, self); -+ return gc_compact_stats(self); - } - -+/* -+ * call-seq: -+ * GC.verify_compaction_references(toward: nil, double_heap: false) -> hash -+ * -+ * Verify compaction reference consistency. -+ * -+ * This method is implementation specific. During compaction, objects that -+ * were moved are replaced with T_MOVED objects. No object should have a -+ * reference to a T_MOVED object after compaction. -+ * -+ * This function doubles the heap to ensure room to move all objects, -+ * compacts the heap to make sure everything moves, updates all references, -+ * then performs a full GC. If any object contains a reference to a T_MOVED -+ * object, that object should be pushed on the mark stack, and will -+ * make a SEGV. -+ */ - static VALUE --gc_verify_compaction_references(rb_execution_context_t *ec, VALUE self, VALUE double_heap, VALUE toward_empty) -+gc_verify_compaction_references(int argc, VALUE *argv, VALUE self) - { - rb_objspace_t *objspace = &rb_objspace; -+ VALUE kwargs, double_heap = Qfalse, toward_empty = Qfalse; -+ static ID id_toward, id_double_heap, id_empty; -+ -+ if (!id_toward) { -+ id_toward = rb_intern("toward"); -+ id_double_heap = rb_intern("double_heap"); -+ id_empty = rb_intern("empty"); -+ } -+ -+ rb_scan_args(argc, argv, ":", &kwargs); -+ if (!NIL_P(kwargs)) { -+ if (rb_hash_has_key(kwargs, ID2SYM(id_toward))) { -+ VALUE toward = rb_hash_aref(kwargs, ID2SYM(id_toward)); -+ toward_empty = (toward == ID2SYM(id_empty)) ? Qtrue : Qfalse; -+ } -+ if (rb_hash_has_key(kwargs, ID2SYM(id_double_heap))) { -+ double_heap = rb_hash_aref(kwargs, ID2SYM(id_double_heap)); -+ } -+ } - - /* Clear the heap. */ -- gc_start_internal(ec, self, Qtrue, Qtrue, Qtrue, Qfalse); -+ gc_start_internal(NULL, self, Qtrue, Qtrue, Qtrue, Qfalse); - - RB_VM_LOCK_ENTER(); - { -@@ -10273,12 +10333,12 @@ gc_verify_compaction_references(rb_execution_context_t *ec, VALUE self, VALUE do - } - RB_VM_LOCK_LEAVE(); - -- gc_start_internal(ec, self, Qtrue, Qtrue, Qtrue, Qtrue); -+ gc_start_internal(NULL, self, Qtrue, Qtrue, Qtrue, Qtrue); - - objspace_reachable_objects_from_root(objspace, root_obj_check_moved_i, NULL); - objspace_each_objects(objspace, heap_check_moved_i, NULL, TRUE); - -- return gc_compact_stats(ec, self); -+ return gc_compact_stats(self); - } - - VALUE -@@ -10739,8 +10799,18 @@ gc_disable(rb_execution_context_t *ec, VALUE _) - return rb_gc_disable(); - } - -+/* -+ * call-seq: -+ * GC.auto_compact = flag -+ * -+ * Updates automatic compaction mode. -+ * -+ * When enabled, the compactor will execute on every major collection. -+ * -+ * Enabling compaction will degrade performance on major collections. -+ */ - static VALUE --gc_set_auto_compact(rb_execution_context_t *ec, VALUE _, VALUE v) -+gc_set_auto_compact(VALUE _, VALUE v) - { - /* If not MinGW, Windows, or does not have mmap, we cannot use mprotect for - * the read barrier, so we must disable automatic compaction. */ -@@ -10754,8 +10824,14 @@ gc_set_auto_compact(rb_execution_context_t *ec, VALUE _, VALUE v) - return v; - } - -+/* -+ * call-seq: -+ * GC.auto_compact -> true or false -+ * -+ * Returns whether or not automatic compaction has been enabled. -+ */ - static VALUE --gc_get_auto_compact(rb_execution_context_t *ec, VALUE _) -+gc_get_auto_compact(VALUE _) - { - return RBOOL(ruby_enable_autocompact); - } -@@ -13617,6 +13693,11 @@ Init_GC(void) - rb_define_singleton_method(rb_mGC, "malloc_allocated_size", gc_malloc_allocated_size, 0); - rb_define_singleton_method(rb_mGC, "malloc_allocations", gc_malloc_allocations, 0); - #endif -+ rb_define_singleton_method(rb_mGC, "compact", gc_compact, 0); -+ rb_define_singleton_method(rb_mGC, "auto_compact", gc_get_auto_compact, 0); -+ rb_define_singleton_method(rb_mGC, "auto_compact=", gc_set_auto_compact, 1); -+ rb_define_singleton_method(rb_mGC, "latest_compact_info", gc_compact_stats, 0); -+ rb_define_singleton_method(rb_mGC, "verify_compaction_references", gc_verify_compaction_references, -1); - - #if GC_DEBUG_STRESS_TO_CLASS - rb_define_singleton_method(rb_mGC, "add_stress_to_class", rb_gcdebug_add_stress_to_class, -1); -diff --git a/gc.rb b/gc.rb -index 72637f3796..9265dd7b57 100644 ---- a/gc.rb -+++ b/gc.rb -@@ -38,27 +38,6 @@ def garbage_collect full_mark: true, immediate_mark: true, immediate_sweep: true - Primitive.gc_start_internal full_mark, immediate_mark, immediate_sweep, false - end - -- # call-seq: -- # GC.auto_compact -> true or false -- # -- # Returns whether or not automatic compaction has been enabled. -- # -- def self.auto_compact -- Primitive.gc_get_auto_compact -- end -- -- # call-seq: -- # GC.auto_compact = flag -- # -- # Updates automatic compaction mode. -- # -- # When enabled, the compactor will execute on every major collection. -- # -- # Enabling compaction will degrade performance on major collections. -- def self.auto_compact=(flag) -- Primitive.gc_set_auto_compact(flag) -- end -- - # call-seq: - # GC.enable -> true or false - # -@@ -210,53 +189,6 @@ def self.latest_gc_info hash_or_key = nil - Primitive.gc_latest_gc_info hash_or_key - end - -- # call-seq: -- # GC.latest_compact_info -> {:considered=>{:T_CLASS=>11}, :moved=>{:T_CLASS=>11}} -- # -- # Returns information about object moved in the most recent GC compaction. -- # -- # The returned hash has two keys :considered and :moved. The hash for -- # :considered lists the number of objects that were considered for movement -- # by the compactor, and the :moved hash lists the number of objects that -- # were actually moved. Some objects can't be moved (maybe they were pinned) -- # so these numbers can be used to calculate compaction efficiency. -- def self.latest_compact_info -- Primitive.gc_compact_stats -- end -- -- # call-seq: -- # GC.compact -- # -- # This function compacts objects together in Ruby's heap. It eliminates -- # unused space (or fragmentation) in the heap by moving objects in to that -- # unused space. This function returns a hash which contains statistics about -- # which objects were moved. See `GC.latest_gc_info` for details about -- # compaction statistics. -- # -- # This method is implementation specific and not expected to be implemented -- # in any implementation besides MRI. -- def self.compact -- Primitive.gc_compact -- end -- -- # call-seq: -- # GC.verify_compaction_references(toward: nil, double_heap: false) -> hash -- # -- # Verify compaction reference consistency. -- # -- # This method is implementation specific. During compaction, objects that -- # were moved are replaced with T_MOVED objects. No object should have a -- # reference to a T_MOVED object after compaction. -- # -- # This function doubles the heap to ensure room to move all objects, -- # compacts the heap to make sure everything moves, updates all references, -- # then performs a full GC. If any object contains a reference to a T_MOVED -- # object, that object should be pushed on the mark stack, and will -- # make a SEGV. -- def self.verify_compaction_references(toward: nil, double_heap: false) -- Primitive.gc_verify_compaction_references(double_heap, toward == :empty) -- end -- - # call-seq: - # GC.using_rvargc? -> true or false - # - -From d3273559356db6852d1fd794f0f076fba100e09e Mon Sep 17 00:00:00 2001 -From: Mike Dalessio -Date: Mon, 23 May 2022 17:31:14 -0400 -Subject: [PATCH 2/2] Define unsupported GC compaction methods as - rb_f_notimplement - -Fixes [Bug #18779] - -Define the following methods as `rb_f_notimplement` on unsupported -platforms: - -- GC.compact -- GC.auto_compact -- GC.auto_compact= -- GC.latest_compact_info -- GC.verify_compaction_references - -This change allows users to call `GC.respond_to?(:compact)` to -properly test for compaction support. Previously, it was necessary to -invoke `GC.compact` or `GC.verify_compaction_references` and check if -those methods raised `NotImplementedError` to determine if compaction -was supported. - -This follows the precedent set for other platform-specific -methods. For example, in `process.c` for methods such as -`Process.fork`, `Process.setpgid`, and `Process.getpriority`. ---- - gc.c | 31 +++++++++++++++---- - test/ruby/test_gc_compact.rb | 58 ++++++++++++++++++++++++++---------- - 2 files changed, 69 insertions(+), 20 deletions(-) - -diff --git a/gc.c b/gc.c -index 92ed76cf96..d71924846a 100644 ---- a/gc.c -+++ b/gc.c -@@ -9438,6 +9438,7 @@ gc_move(rb_objspace_t *objspace, VALUE scan, VALUE free, size_t slot_size) - return (VALUE)src; - } - -+#if GC_COMPACTION_SUPPORTED - static int - compare_free_slots(const void *left, const void *right, void *dummy) - { -@@ -9485,6 +9486,7 @@ gc_sort_heap_by_empty_slots(rb_objspace_t *objspace) - free(page_list); - } - } -+#endif - - static void - gc_ref_update_array(rb_objspace_t * objspace, VALUE v) -@@ -10164,6 +10166,7 @@ gc_update_references(rb_objspace_t *objspace) - gc_update_table_refs(objspace, finalizer_table); - } - -+#if GC_COMPACTION_SUPPORTED - /* - * call-seq: - * GC.latest_compact_info -> {:considered=>{:T_CLASS=>11}, :moved=>{:T_CLASS=>11}} -@@ -10200,7 +10203,11 @@ gc_compact_stats(VALUE self) - - return h; - } -+#else -+# define gc_compact_stats rb_f_notimplement -+#endif - -+#if GC_COMPACTION_SUPPORTED - static void - root_obj_check_moved_i(const char *category, VALUE obj, void *data) - { -@@ -10262,6 +10269,10 @@ heap_check_moved_i(void *vstart, void *vend, size_t stride, void *data) - * - * This method is implementation specific and not expected to be implemented - * in any implementation besides MRI. -+ * -+ * To test whether GC compaction is supported, use the idiom: -+ * -+ * GC.respond_to?(:compact) - */ - static VALUE - gc_compact(VALUE self) -@@ -10271,7 +10282,11 @@ gc_compact(VALUE self) - - return gc_compact_stats(self); - } -+#else -+# define gc_compact rb_f_notimplement -+#endif - -+#if GC_COMPACTION_SUPPORTED - /* - * call-seq: - * GC.verify_compaction_references(toward: nil, double_heap: false) -> hash -@@ -10340,6 +10355,9 @@ gc_verify_compaction_references(int argc, VALUE *argv, VALUE self) - - return gc_compact_stats(self); - } -+#else -+# define gc_verify_compaction_references rb_f_notimplement -+#endif - - VALUE - rb_gc_start(void) -@@ -10799,6 +10817,7 @@ gc_disable(rb_execution_context_t *ec, VALUE _) - return rb_gc_disable(); - } - -+#if GC_COMPACTION_SUPPORTED - /* - * call-seq: - * GC.auto_compact = flag -@@ -10814,16 +10833,15 @@ gc_set_auto_compact(VALUE _, VALUE v) - { - /* If not MinGW, Windows, or does not have mmap, we cannot use mprotect for - * the read barrier, so we must disable automatic compaction. */ --#if !defined(__MINGW32__) && !defined(_WIN32) -- if (!USE_MMAP_ALIGNED_ALLOC) { -- rb_raise(rb_eNotImpError, "Automatic compaction isn't available on this platform"); -- } --#endif - - ruby_enable_autocompact = RTEST(v); - return v; - } -+#else -+# define gc_set_auto_compact rb_f_notimplement -+#endif - -+#if GC_COMPACTION_SUPPORTED - /* - * call-seq: - * GC.auto_compact -> true or false -@@ -10835,6 +10853,9 @@ gc_get_auto_compact(VALUE _) - { - return RBOOL(ruby_enable_autocompact); - } -+#else -+# define gc_get_auto_compact rb_f_notimplement -+#endif - - static int - get_envparam_size(const char *name, size_t *default_value, size_t lower_bound) -diff --git a/test/ruby/test_gc_compact.rb b/test/ruby/test_gc_compact.rb -index 42ad028530..411d5eab69 100644 ---- a/test/ruby/test_gc_compact.rb -+++ b/test/ruby/test_gc_compact.rb -@@ -9,14 +9,7 @@ - end - - class TestGCCompact < Test::Unit::TestCase -- module SupportsCompact -- def setup -- skip "autocompact not supported on this platform" unless supports_auto_compact? -- super -- end -- -- private -- -+ module CompactionSupportInspector - def supports_auto_compact? - return true unless defined?(Etc::SC_PAGE_SIZE) - -@@ -30,10 +23,19 @@ def supports_auto_compact? - end - end - -- include SupportsCompact -+ module OmitUnlessCompactSupported -+ include CompactionSupportInspector -+ -+ def setup -+ omit "autocompact not supported on this platform" unless supports_auto_compact? -+ super -+ end -+ end -+ -+ include OmitUnlessCompactSupported - - class AutoCompact < Test::Unit::TestCase -- include SupportsCompact -+ include OmitUnlessCompactSupported - - def test_enable_autocompact - before = GC.auto_compact -@@ -87,13 +89,39 @@ def test_implicit_compaction_does_something - end - end - -- def os_page_size -- return true unless defined?(Etc::SC_PAGE_SIZE) -+ class CompactMethodsNotImplemented < Test::Unit::TestCase -+ include CompactionSupportInspector -+ -+ def assert_not_implemented(method, *args) -+ omit "autocompact is supported on this platform" if supports_auto_compact? -+ -+ assert_raise(NotImplementedError) { GC.send(method, *args) } -+ refute(GC.respond_to?(method), "GC.#{method} should be defined as rb_f_notimplement") -+ end -+ -+ def test_gc_compact_not_implemented -+ assert_not_implemented(:compact) -+ end -+ -+ def test_gc_auto_compact_get_not_implemented -+ assert_not_implemented(:auto_compact) -+ end -+ -+ def test_gc_auto_compact_set_not_implemented -+ assert_not_implemented(:auto_compact=, true) -+ end -+ -+ def test_gc_latest_compact_info_not_implemented -+ assert_not_implemented(:latest_compact_info) -+ end -+ -+ def test_gc_verify_compaction_references_not_implemented -+ assert_not_implemented(:verify_compaction_references) -+ end - end - -- def setup -- skip "autocompact not supported on this platform" unless supports_auto_compact? -- super -+ def os_page_size -+ return true unless defined?(Etc::SC_PAGE_SIZE) - end - - def test_gc_compact_stats diff --git a/ruby-3.2.0-define-unsupported-gc-compaction-methods_generated-files.patch b/ruby-3.2.0-define-unsupported-gc-compaction-methods_generated-files.patch deleted file mode 100644 index 654c54c..0000000 --- a/ruby-3.2.0-define-unsupported-gc-compaction-methods_generated-files.patch +++ /dev/null @@ -1,502 +0,0 @@ ---- ruby-3.1.3/gc.rbinc 2022-11-24 11:20:33.000000000 +0100 -+++ ruby/gc.rbinc 2022-11-25 11:50:19.939820992 +0100 -@@ -9,27 +9,27 @@ - #include "builtin.h" /* for RB_BUILTIN_FUNCTION */ - struct rb_execution_context_struct; /* in vm_core.h */ - --static VALUE builtin_inline_class_277(struct rb_execution_context_struct *ec, const VALUE self) -+static VALUE builtin_inline_class_209(struct rb_execution_context_struct *ec, const VALUE self) - { - MAYBE_UNUSED(const VALUE) flag = rb_vm_lvar(ec, -3); --#line 277 "gc.rb" -+#line 209 "gc.rb" - - rb_objspace.flags.measure_gc = RTEST(flag) ? TRUE : FALSE; - return flag; - #line 20 "gc.rbinc" - } - --static VALUE builtin_inline_class_289(struct rb_execution_context_struct *ec, const VALUE self) -+static VALUE builtin_inline_class_221(struct rb_execution_context_struct *ec, const VALUE self) - { --#line 289 "gc.rb" -+#line 221 "gc.rb" - return - RBOOL(rb_objspace.flags.measure_gc); - #line 28 "gc.rbinc" - } - --static VALUE builtin_inline_class_299(struct rb_execution_context_struct *ec, const VALUE self) -+static VALUE builtin_inline_class_231(struct rb_execution_context_struct *ec, const VALUE self) - { --#line 299 "gc.rb" -+#line 231 "gc.rb" - return - ULL2NUM(rb_objspace.profile.total_time_ns); - #line 36 "gc.rbinc" -@@ -52,31 +52,6 @@ - } - - static void --mjit_compile_invokebuiltin_for_gc_get_auto_compact(FILE *f, long index, unsigned stack_size, bool inlinable_p) --{ -- fprintf(f, " VALUE self = GET_SELF();\n"); -- fprintf(f, " typedef VALUE (*func)(rb_execution_context_t *, VALUE);\n"); -- fprintf(f, " func f = (func)%"PRIuVALUE"; /* == gc_get_auto_compact */\n", (VALUE)gc_get_auto_compact); -- fprintf(f, " val = f(ec, self);\n"); --} -- --static void --mjit_compile_invokebuiltin_for_gc_set_auto_compact(FILE *f, long index, unsigned stack_size, bool inlinable_p) --{ -- fprintf(f, " VALUE self = GET_SELF();\n"); -- fprintf(f, " typedef VALUE (*func)(rb_execution_context_t *, VALUE, VALUE);\n"); -- if (index == -1) { -- fprintf(f, " const VALUE *argv = &stack[%d];\n", stack_size - 1); -- } -- else { -- fprintf(f, " const unsigned int lnum = GET_ISEQ()->body->local_table_size;\n"); -- fprintf(f, " const VALUE *argv = GET_EP() - lnum - VM_ENV_DATA_SIZE + 1 + %ld;\n", index); -- } -- fprintf(f, " func f = (func)%"PRIuVALUE"; /* == gc_set_auto_compact */\n", (VALUE)gc_set_auto_compact); -- fprintf(f, " val = f(ec, self, argv[0]);\n"); --} -- --static void - mjit_compile_invokebuiltin_for_gc_enable(FILE *f, long index, unsigned stack_size, bool inlinable_p) - { - fprintf(f, " VALUE self = GET_SELF();\n"); -@@ -161,40 +136,6 @@ - } - - static void --mjit_compile_invokebuiltin_for_gc_compact_stats(FILE *f, long index, unsigned stack_size, bool inlinable_p) --{ -- fprintf(f, " VALUE self = GET_SELF();\n"); -- fprintf(f, " typedef VALUE (*func)(rb_execution_context_t *, VALUE);\n"); -- fprintf(f, " func f = (func)%"PRIuVALUE"; /* == gc_compact_stats */\n", (VALUE)gc_compact_stats); -- fprintf(f, " val = f(ec, self);\n"); --} -- --static void --mjit_compile_invokebuiltin_for_gc_compact(FILE *f, long index, unsigned stack_size, bool inlinable_p) --{ -- fprintf(f, " VALUE self = GET_SELF();\n"); -- fprintf(f, " typedef VALUE (*func)(rb_execution_context_t *, VALUE);\n"); -- fprintf(f, " func f = (func)%"PRIuVALUE"; /* == gc_compact */\n", (VALUE)gc_compact); -- fprintf(f, " val = f(ec, self);\n"); --} -- --static void --mjit_compile_invokebuiltin_for_gc_verify_compaction_references(FILE *f, long index, unsigned stack_size, bool inlinable_p) --{ -- fprintf(f, " VALUE self = GET_SELF();\n"); -- fprintf(f, " typedef VALUE (*func)(rb_execution_context_t *, VALUE, VALUE, VALUE);\n"); -- if (index == -1) { -- fprintf(f, " const VALUE *argv = &stack[%d];\n", stack_size - 2); -- } -- else { -- fprintf(f, " const unsigned int lnum = GET_ISEQ()->body->local_table_size;\n"); -- fprintf(f, " const VALUE *argv = GET_EP() - lnum - VM_ENV_DATA_SIZE + 1 + %ld;\n", index); -- } -- fprintf(f, " func f = (func)%"PRIuVALUE"; /* == gc_verify_compaction_references */\n", (VALUE)gc_verify_compaction_references); -- fprintf(f, " val = f(ec, self, argv[0], argv[1]);\n"); --} -- --static void - mjit_compile_invokebuiltin_for__bi0(FILE *f, long index, unsigned stack_size, bool inlinable_p) - { - fprintf(f, " VALUE self = GET_SELF();\n"); -@@ -202,7 +143,7 @@ - if (inlinable_p) { - fprintf(f, "%s", " {\n"); - fprintf(f, "%s", " MAYBE_UNUSED(const VALUE) flag = rb_vm_lvar(ec, -3);\n"); -- fprintf(f, "%s", "#line 277 \"gc.rb\"\n"); -+ fprintf(f, "%s", "#line 209 \"gc.rb\"\n"); - fprintf(f, "%s", " \n"); - fprintf(f, "%s", " rb_objspace.flags.measure_gc = RTEST(flag) ? TRUE : FALSE;\n"); - fprintf(f, "%s", " return flag;\n"); -@@ -211,7 +152,7 @@ - fprintf(f, "%s", " \n"); - return; - } -- fprintf(f, " func f = (func)%"PRIuVALUE"; /* == builtin_inline_class_277 */\n", (VALUE)builtin_inline_class_277); -+ fprintf(f, " func f = (func)%"PRIuVALUE"; /* == builtin_inline_class_209 */\n", (VALUE)builtin_inline_class_209); - fprintf(f, " val = f(ec, self);\n"); - } - -@@ -222,7 +163,7 @@ - fprintf(f, " typedef VALUE (*func)(rb_execution_context_t *, VALUE);\n"); - if (inlinable_p) { - fprintf(f, "%s", " {\n"); -- fprintf(f, "%s", "#line 289 \"gc.rb\"\n"); -+ fprintf(f, "%s", "#line 221 \"gc.rb\"\n"); - fprintf(f, "%s", " return \n"); - fprintf(f, "%s", " RBOOL(rb_objspace.flags.measure_gc);\n"); - fprintf(f, "%s", "#line 52 \"gc.rbinc\"\n"); -@@ -230,7 +171,7 @@ - fprintf(f, "%s", " \n"); - return; - } -- fprintf(f, " func f = (func)%"PRIuVALUE"; /* == builtin_inline_class_289 */\n", (VALUE)builtin_inline_class_289); -+ fprintf(f, " func f = (func)%"PRIuVALUE"; /* == builtin_inline_class_221 */\n", (VALUE)builtin_inline_class_221); - fprintf(f, " val = f(ec, self);\n"); - } - -@@ -241,7 +182,7 @@ - fprintf(f, " typedef VALUE (*func)(rb_execution_context_t *, VALUE);\n"); - if (inlinable_p) { - fprintf(f, "%s", " {\n"); -- fprintf(f, "%s", "#line 299 \"gc.rb\"\n"); -+ fprintf(f, "%s", "#line 231 \"gc.rb\"\n"); - fprintf(f, "%s", " return \n"); - fprintf(f, "%s", " ULL2NUM(rb_objspace.profile.total_time_ns);\n"); - fprintf(f, "%s", "#line 59 \"gc.rbinc\"\n"); -@@ -249,7 +190,7 @@ - fprintf(f, "%s", " \n"); - return; - } -- fprintf(f, " func f = (func)%"PRIuVALUE"; /* == builtin_inline_class_299 */\n", (VALUE)builtin_inline_class_299); -+ fprintf(f, " func f = (func)%"PRIuVALUE"; /* == builtin_inline_class_231 */\n", (VALUE)builtin_inline_class_231); - fprintf(f, " val = f(ec, self);\n"); - } - -@@ -258,21 +199,16 @@ - // table definition - static const struct rb_builtin_function gc_table[] = { - RB_BUILTIN_FUNCTION(0, gc_start_internal, gc_start_internal, 4, mjit_compile_invokebuiltin_for_gc_start_internal), -- RB_BUILTIN_FUNCTION(1, gc_get_auto_compact, gc_get_auto_compact, 0, mjit_compile_invokebuiltin_for_gc_get_auto_compact), -- RB_BUILTIN_FUNCTION(2, gc_set_auto_compact, gc_set_auto_compact, 1, mjit_compile_invokebuiltin_for_gc_set_auto_compact), -- RB_BUILTIN_FUNCTION(3, gc_enable, gc_enable, 0, mjit_compile_invokebuiltin_for_gc_enable), -- RB_BUILTIN_FUNCTION(4, gc_disable, gc_disable, 0, mjit_compile_invokebuiltin_for_gc_disable), -- RB_BUILTIN_FUNCTION(5, gc_stress_get, gc_stress_get, 0, mjit_compile_invokebuiltin_for_gc_stress_get), -- RB_BUILTIN_FUNCTION(6, gc_stress_set_m, gc_stress_set_m, 1, mjit_compile_invokebuiltin_for_gc_stress_set_m), -- RB_BUILTIN_FUNCTION(7, gc_count, gc_count, 0, mjit_compile_invokebuiltin_for_gc_count), -- RB_BUILTIN_FUNCTION(8, gc_stat, gc_stat, 1, mjit_compile_invokebuiltin_for_gc_stat), -- RB_BUILTIN_FUNCTION(9, gc_latest_gc_info, gc_latest_gc_info, 1, mjit_compile_invokebuiltin_for_gc_latest_gc_info), -- RB_BUILTIN_FUNCTION(10, gc_compact_stats, gc_compact_stats, 0, mjit_compile_invokebuiltin_for_gc_compact_stats), -- RB_BUILTIN_FUNCTION(11, gc_compact, gc_compact, 0, mjit_compile_invokebuiltin_for_gc_compact), -- RB_BUILTIN_FUNCTION(12, gc_verify_compaction_references, gc_verify_compaction_references, 2, mjit_compile_invokebuiltin_for_gc_verify_compaction_references), -- RB_BUILTIN_FUNCTION(13, _bi0, builtin_inline_class_277, 0, mjit_compile_invokebuiltin_for__bi0), -- RB_BUILTIN_FUNCTION(14, _bi1, builtin_inline_class_289, 0, mjit_compile_invokebuiltin_for__bi1), -- RB_BUILTIN_FUNCTION(15, _bi2, builtin_inline_class_299, 0, mjit_compile_invokebuiltin_for__bi2), -+ RB_BUILTIN_FUNCTION(1, gc_enable, gc_enable, 0, mjit_compile_invokebuiltin_for_gc_enable), -+ RB_BUILTIN_FUNCTION(2, gc_disable, gc_disable, 0, mjit_compile_invokebuiltin_for_gc_disable), -+ RB_BUILTIN_FUNCTION(3, gc_stress_get, gc_stress_get, 0, mjit_compile_invokebuiltin_for_gc_stress_get), -+ RB_BUILTIN_FUNCTION(4, gc_stress_set_m, gc_stress_set_m, 1, mjit_compile_invokebuiltin_for_gc_stress_set_m), -+ RB_BUILTIN_FUNCTION(5, gc_count, gc_count, 0, mjit_compile_invokebuiltin_for_gc_count), -+ RB_BUILTIN_FUNCTION(6, gc_stat, gc_stat, 1, mjit_compile_invokebuiltin_for_gc_stat), -+ RB_BUILTIN_FUNCTION(7, gc_latest_gc_info, gc_latest_gc_info, 1, mjit_compile_invokebuiltin_for_gc_latest_gc_info), -+ RB_BUILTIN_FUNCTION(8, _bi0, builtin_inline_class_209, 0, mjit_compile_invokebuiltin_for__bi0), -+ RB_BUILTIN_FUNCTION(9, _bi1, builtin_inline_class_221, 0, mjit_compile_invokebuiltin_for__bi1), -+ RB_BUILTIN_FUNCTION(10, _bi2, builtin_inline_class_231, 0, mjit_compile_invokebuiltin_for__bi2), - RB_BUILTIN_FUNCTION(-1, NULL, NULL, 0, 0), - }; - -@@ -282,8 +218,6 @@ - COMPILER_WARNING_ERROR(-Wincompatible-pointer-types) - #endif - if (0) rb_builtin_function_check_arity4(gc_start_internal); -- if (0) rb_builtin_function_check_arity0(gc_get_auto_compact); -- if (0) rb_builtin_function_check_arity1(gc_set_auto_compact); - if (0) rb_builtin_function_check_arity0(gc_enable); - if (0) rb_builtin_function_check_arity0(gc_disable); - if (0) rb_builtin_function_check_arity0(gc_stress_get); -@@ -291,12 +225,9 @@ - if (0) rb_builtin_function_check_arity0(gc_count); - if (0) rb_builtin_function_check_arity1(gc_stat); - if (0) rb_builtin_function_check_arity1(gc_latest_gc_info); -- if (0) rb_builtin_function_check_arity0(gc_compact_stats); -- if (0) rb_builtin_function_check_arity0(gc_compact); -- if (0) rb_builtin_function_check_arity2(gc_verify_compaction_references); -- if (0) rb_builtin_function_check_arity0(builtin_inline_class_277); -- if (0) rb_builtin_function_check_arity0(builtin_inline_class_289); -- if (0) rb_builtin_function_check_arity0(builtin_inline_class_299); -+ if (0) rb_builtin_function_check_arity0(builtin_inline_class_209); -+ if (0) rb_builtin_function_check_arity0(builtin_inline_class_221); -+ if (0) rb_builtin_function_check_arity0(builtin_inline_class_231); - COMPILER_WARNING_POP - - // load ---- ruby-3.1.3/miniprelude.c 2022-11-24 11:20:33.000000000 +0100 -+++ ruby/miniprelude.c 2022-11-25 11:50:20.012820803 +0100 -@@ -545,11 +545,10 @@ - - static const char prelude_name2[] = ""; - static const struct { -- char L0[479]; /* 1..58 */ -- char L58[508]; /* 59..204 */ -- char L204[504]; /* 205..275 */ -- char L275[490]; /* 276..306 */ -- char L306[128]; /* 307..312 */ -+ char L0[492]; /* 1..70 */ -+ char L70[468]; /* 71..197 */ -+ char L197[470]; /* 198..237 */ -+ char L237[211]; /* 238..244 */ - } prelude_code2 = { - #line 1 "gc.rb" - ""/* for gc.c */ -@@ -593,29 +592,6 @@ - " end\n" - "\n" - "\n"/* call-seq: */ --"\n"/* GC.auto_compact -> true or false */ --"\n"/* */ --"\n"/* Returns whether or not automatic compaction has been enabled. */ --"\n"/* */ --" def self.auto_compact\n" --" Primitive.gc_get_auto_compact\n" --" end\n" --"\n" --"\n"/* call-seq: */ --"\n"/* GC.auto_compact = flag */ --"\n"/* */ --"\n"/* Updates automatic compaction mode. */ --"\n"/* */ --"\n"/* When enabled, the compactor will execute on every major collection. */ --"\n"/* */ --"\n"/* Enabling compaction will degrade performance on major collections. */ --" def self.auto_compact=(flag)\n" --, --#line 59 "gc.rb" --" Primitive.gc_set_auto_compact(flag)\n" --" end\n" --"\n" --"\n"/* call-seq: */ - "\n"/* GC.enable -> true or false */ - "\n"/* */ - "\n"/* Enables garbage collection, returning +true+ if garbage */ -@@ -645,6 +621,8 @@ - "\n"/* GC.stress -> integer, true or false */ - "\n"/* */ - "\n"/* Returns current status of GC stress mode. */ -+, -+#line 71 "gc.rb" - " def self.stress\n" - " Primitive.gc_stress_get\n" - " end\n" -@@ -758,8 +736,6 @@ - "\n"/* GC.latest_gc_info(:major_by) -> :malloc */ - "\n"/* */ - "\n"/* Returns information about the most recent garbage collection. */ --, --#line 205 "gc.rb" - "\n"/* */ - "\n"/* If the optional argument, hash, is given, */ - "\n"/* it is overwritten and returned. */ -@@ -768,59 +744,14 @@ - " Primitive.gc_latest_gc_info hash_or_key\n" - " end\n" - "\n" --"\n"/* call-seq: */ --"\n"/* GC.latest_compact_info -> {:considered=>{:T_CLASS=>11}, :moved=>{:T_CLASS=>11}} */ --"\n"/* */ --"\n"/* Returns information about object moved in the most recent GC compaction. */ --"\n"/* */ --"\n"/* The returned hash has two keys :considered and :moved. The hash for */ --"\n"/* :considered lists the number of objects that were considered for movement */ --"\n"/* by the compactor, and the :moved hash lists the number of objects that */ --"\n"/* were actually moved. Some objects can't be moved (maybe they were pinned) */ --"\n"/* so these numbers can be used to calculate compaction efficiency. */ --" def self.latest_compact_info\n" --" Primitive.gc_compact_stats\n" --" end\n" --"\n" --"\n"/* call-seq: */ --"\n"/* GC.compact */ --"\n"/* */ --"\n"/* This function compacts objects together in Ruby's heap. It eliminates */ --"\n"/* unused space (or fragmentation) in the heap by moving objects in to that */ --"\n"/* unused space. This function returns a hash which contains statistics about */ --"\n"/* which objects were moved. See `GC.latest_gc_info` for details about */ --"\n"/* compaction statistics. */ --"\n"/* */ --"\n"/* This method is implementation specific and not expected to be implemented */ --"\n"/* in any implementation besides MRI. */ --" def self.compact\n" --" Primitive.gc_compact\n" --" end\n" --"\n" --"\n"/* call-seq: */ --"\n"/* GC.verify_compaction_references(toward: nil, double_heap: false) -> hash */ --"\n"/* */ --"\n"/* Verify compaction reference consistency. */ --"\n"/* */ --"\n"/* This method is implementation specific. During compaction, objects that */ --"\n"/* were moved are replaced with T_MOVED objects. No object should have a */ --"\n"/* reference to a T_MOVED object after compaction. */ --"\n"/* */ --"\n"/* This function doubles the heap to ensure room to move all objects, */ --"\n"/* compacts the heap to make sure everything moves, updates all references, */ --"\n"/* then performs a full GC. If any object contains a reference to a T_MOVED */ --"\n"/* object, that object should be pushed on the mark stack, and will */ --"\n"/* make a SEGV. */ --" def self.verify_compaction_references(toward: nil, double_heap: false)\n" --" Primitive.gc_verify_compaction_references(double_heap, toward == :empty)\n" --" end\n" --"\n" - "\n"/* call-seq: */ - "\n"/* GC.using_rvargc? -> true or false */ - "\n"/* */ - "\n"/* Returns true if using experimental feature Variable Width Allocation, false */ - "\n"/* otherwise. */ - " def self.using_rvargc?\n"/* :nodoc: */ -+, -+#line 198 "gc.rb" - " GC::INTERNAL_CONSTANTS[:SIZE_POOL_COUNT] > 1\n" - " end\n" - "\n" -@@ -831,8 +762,6 @@ - "\n"/* Enable to measure GC time. */ - "\n"/* You can get the result with GC.stat(:time). */ - "\n"/* Note that GC time measurement can cause some performance overhead. */ --, --#line 276 "gc.rb" - " def self.measure_total_time=(flag)\n" - " Primitive.cstmt! %{\n" - " rb_objspace.flags.measure_gc = RTEST(flag) ? TRUE : FALSE;\n" -@@ -863,15 +792,15 @@ - "end\n" - "\n" - "module ObjectSpace\n" --" def garbage_collect full_mark: true, immediate_mark: true, immediate_sweep: true\n" - , --#line 307 "gc.rb" -+#line 238 "gc.rb" -+" def garbage_collect full_mark: true, immediate_mark: true, immediate_sweep: true\n" - " Primitive.gc_start_internal full_mark, immediate_mark, immediate_sweep, false\n" - " end\n" - "\n" - " module_function :garbage_collect\n" - "end\n" --#line 875 "miniprelude.c" -+#line 804 "miniprelude.c" - }; - - static const char prelude_name3[] = ""; -@@ -1223,7 +1152,7 @@ - " end\n" - "\n" - "end\n" --#line 1227 "miniprelude.c" -+#line 1156 "miniprelude.c" - }; - - static const char prelude_name4[] = ""; -@@ -1354,7 +1283,7 @@ - " Primitive.io_write_nonblock(buf, exception)\n" - " end\n" - "end\n" --#line 1358 "miniprelude.c" -+#line 1287 "miniprelude.c" - }; - - static const char prelude_name5[] = ""; -@@ -1402,7 +1331,7 @@ - " alias restore load\n" - " end\n" - "end\n" --#line 1406 "miniprelude.c" -+#line 1335 "miniprelude.c" - }; - - static const char prelude_name6[] = ""; -@@ -1724,7 +1653,7 @@ - " Primitive.pack_unpack1(fmt, offset)\n" - " end\n" - "end\n" --#line 1728 "miniprelude.c" -+#line 1657 "miniprelude.c" - }; - - static const char prelude_name7[] = ""; -@@ -2111,7 +2040,7 @@ - " Primitive.tracepoint_attr_instruction_sequence\n" - " end\n" - "end\n" --#line 2115 "miniprelude.c" -+#line 2044 "miniprelude.c" - }; - - static const char prelude_name8[] = ""; -@@ -2172,7 +2101,7 @@ - " Primitive.rb_warn_m(msgs, uplevel, category)\n" - " end\n" - "end\n" --#line 2176 "miniprelude.c" -+#line 2105 "miniprelude.c" - }; - - static const char prelude_name9[] = ""; -@@ -2249,7 +2178,7 @@ - " end\n" - " end\n" - "end\n" --#line 2253 "miniprelude.c" -+#line 2182 "miniprelude.c" - }; - - static const char prelude_name10[] = ""; -@@ -2438,7 +2367,7 @@ - " end\n" - " end\n" - "end\n" --#line 2442 "miniprelude.c" -+#line 2371 "miniprelude.c" - }; - - static const char prelude_name11[] = ""; -@@ -3309,7 +3238,7 @@ - " }\n" - " end\n" - "end\n" --#line 3313 "miniprelude.c" -+#line 3242 "miniprelude.c" - }; - - static const char prelude_name12[] = ""; -@@ -3632,7 +3561,7 @@ - " Primitive.time_init_args(year, mon, mday, hour, min, sec, zone)\n" - " end\n" - "end\n" --#line 3636 "miniprelude.c" -+#line 3565 "miniprelude.c" - }; - - static const char prelude_name13[] = ""; -@@ -3665,7 +3594,7 @@ - " return 0.0\n" - " end\n" - "end\n" --#line 3669 "miniprelude.c" -+#line 3598 "miniprelude.c" - }; - - static const char prelude_name14[] = ""; -@@ -3695,7 +3624,7 @@ - "\n" - " private :pp\n" - "end\n" --#line 3699 "miniprelude.c" -+#line 3628 "miniprelude.c" - }; - - static const char prelude_name15[] = ""; -@@ -3722,7 +3651,7 @@ - "rescue LoadError\n" - " warn \"`did_you_mean' was not loaded.\"\n" - "end if defined?(DidYouMean)\n" --#line 3726 "miniprelude.c" -+#line 3655 "miniprelude.c" - }; - - static const char prelude_name16[] = ""; -@@ -4063,7 +3992,7 @@ - " end\n" - " end\n" - "end\n" --#line 4067 "miniprelude.c" -+#line 3996 "miniprelude.c" - }; - - COMPILER_WARNING_POP diff --git a/ruby-3.2.0-ossl-tests-replace-sha1.patch b/ruby-3.2.0-ossl-tests-replace-sha1.patch deleted file mode 100644 index 4b3570e..0000000 --- a/ruby-3.2.0-ossl-tests-replace-sha1.patch +++ /dev/null @@ -1,339 +0,0 @@ -From 32648da2f6f8036581859c12af2c38b0cf7abf08 Mon Sep 17 00:00:00 2001 -From: Jarek Prokop -Date: Tue, 18 Oct 2022 09:52:13 +0200 -Subject: [PATCH] Use SHA256 instead of SHA1 where needed in tests. - -Systems such as RHEL 9 are moving away from SHA1 -disabling it completely in default configuration. ---- - test/openssl/test_asn1.rb | 6 +++--- - test/openssl/test_ns_spki.rb | 2 +- - test/openssl/test_pkey_dsa.rb | 4 ++-- - test/openssl/test_pkey_ec.rb | 4 ++-- - test/openssl/test_pkey_rsa.rb | 18 +++++++++--------- - test/openssl/test_x509cert.rb | 4 +++- - test/openssl/test_x509crl.rb | 20 ++++++++++---------- - test/openssl/test_x509req.rb | 25 +++++++++++++------------ - 8 files changed, 43 insertions(+), 40 deletions(-) - -diff --git a/test/openssl/test_asn1.rb b/test/openssl/test_asn1.rb -index 0fd797158..c79bc1429 100644 ---- a/test/openssl/test_asn1.rb -+++ b/test/openssl/test_asn1.rb -@@ -14,7 +14,7 @@ def test_decode_x509_certificate - ["keyUsage","keyCertSign, cRLSign",true], - ["subjectKeyIdentifier","hash",false], - ] -- dgst = OpenSSL::Digest.new('SHA1') -+ dgst = OpenSSL::Digest.new('SHA256') - cert = OpenSSL::TestUtils.issue_cert( - subj, key, s, exts, nil, nil, digest: dgst, not_before: now, not_after: now+3600) - -@@ -42,7 +42,7 @@ def test_decode_x509_certificate - assert_equal(OpenSSL::ASN1::Sequence, sig.class) - assert_equal(2, sig.value.size) - assert_equal(OpenSSL::ASN1::ObjectId, sig.value[0].class) -- assert_equal("1.2.840.113549.1.1.5", sig.value[0].oid) -+ assert_equal("1.2.840.113549.1.1.11", sig.value[0].oid) - assert_equal(OpenSSL::ASN1::Null, sig.value[1].class) - - dn = tbs_cert.value[3] # issuer -@@ -189,7 +189,7 @@ def test_decode_x509_certificate - assert_equal(OpenSSL::ASN1::Null, pkey.value[0].value[1].class) - - assert_equal(OpenSSL::ASN1::BitString, sig_val.class) -- cululated_sig = key.sign(OpenSSL::Digest.new('SHA1'), tbs_cert.to_der) -+ cululated_sig = key.sign(OpenSSL::Digest.new('SHA256'), tbs_cert.to_der) - assert_equal(cululated_sig, sig_val.value) - end - -diff --git a/test/openssl/test_ns_spki.rb b/test/openssl/test_ns_spki.rb -index ed3be86e2..383931b98 100644 ---- a/test/openssl/test_ns_spki.rb -+++ b/test/openssl/test_ns_spki.rb -@@ -22,7 +22,7 @@ def test_build_data - spki = OpenSSL::Netscape::SPKI.new - spki.challenge = "RandomString" - spki.public_key = key1.public_key -- spki.sign(key1, OpenSSL::Digest.new('SHA1')) -+ spki.sign(key1, OpenSSL::Digest.new('SHA256')) - assert(spki.verify(spki.public_key)) - assert(spki.verify(key1.public_key)) - assert(!spki.verify(key2.public_key)) -diff --git a/test/openssl/test_pkey_dsa.rb b/test/openssl/test_pkey_dsa.rb -index de6aa63e2..d1059093c 100644 ---- a/test/openssl/test_pkey_dsa.rb -+++ b/test/openssl/test_pkey_dsa.rb -@@ -55,8 +55,8 @@ def test_sign_verify - assert_equal true, dsa512.verify(OpenSSL::Digest.new('DSS1'), signature, data) - end - -- signature = dsa512.sign("SHA1", data) -- assert_equal true, dsa512.verify("SHA1", signature, data) -+ signature = dsa512.sign("SHA256", data) -+ assert_equal true, dsa512.verify("SHA256", signature, data) - - signature0 = (<<~'end;').unpack("m")[0] - MCwCFH5h40plgU5Fh0Z4wvEEpz0eE9SnAhRPbkRB8ggsN/vsSEYMXvJwjGg/ -diff --git a/test/openssl/test_pkey_ec.rb b/test/openssl/test_pkey_ec.rb -index 9a4818de8..451bab032 100644 ---- a/test/openssl/test_pkey_ec.rb -+++ b/test/openssl/test_pkey_ec.rb -@@ -100,8 +100,8 @@ def test_check_key - def test_sign_verify - p256 = Fixtures.pkey("p256") - data = "Sign me!" -- signature = p256.sign("SHA1", data) -- assert_equal true, p256.verify("SHA1", signature, data) -+ signature = p256.sign("SHA256", data) -+ assert_equal true, p256.verify("SHA256", signature, data) - - signature0 = (<<~'end;').unpack("m")[0] - MEQCIEOTY/hD7eI8a0qlzxkIt8LLZ8uwiaSfVbjX2dPAvN11AiAQdCYx56Fq -diff --git a/test/openssl/test_pkey_rsa.rb b/test/openssl/test_pkey_rsa.rb -index fa84b76f4..b0ae5784b 100644 ---- a/test/openssl/test_pkey_rsa.rb -+++ b/test/openssl/test_pkey_rsa.rb -@@ -80,8 +80,8 @@ def test_new_break - def test_sign_verify - rsa1024 = Fixtures.pkey("rsa1024") - data = "Sign me!" -- signature = rsa1024.sign("SHA1", data) -- assert_equal true, rsa1024.verify("SHA1", signature, data) -+ signature = rsa1024.sign("SHA256", data) -+ assert_equal true, rsa1024.verify("SHA256", signature, data) - - signature0 = (<<~'end;').unpack("m")[0] - oLCgbprPvfhM4pjFQiDTFeWI9Sk+Og7Nh9TmIZ/xSxf2CGXQrptlwo7NQ28+ -@@ -118,10 +118,10 @@ def test_sign_verify_options - def test_sign_verify_raw - key = Fixtures.pkey("rsa-1") - data = "Sign me!" -- hash = OpenSSL::Digest.digest("SHA1", data) -- signature = key.sign_raw("SHA1", hash) -- assert_equal true, key.verify_raw("SHA1", signature, hash) -- assert_equal true, key.verify("SHA1", signature, data) -+ hash = OpenSSL::Digest.digest("SHA256", data) -+ signature = key.sign_raw("SHA256", hash) -+ assert_equal true, key.verify_raw("SHA256", signature, hash) -+ assert_equal true, key.verify("SHA256", signature, data) - - # Too long data - assert_raise(OpenSSL::PKey::PKeyError) { -@@ -134,9 +134,9 @@ def test_sign_verify_raw - "rsa_pss_saltlen" => 20, - "rsa_mgf1_md" => "SHA256" - } -- sig_pss = key.sign_raw("SHA1", hash, pssopts) -- assert_equal true, key.verify("SHA1", sig_pss, data, pssopts) -- assert_equal true, key.verify_raw("SHA1", sig_pss, hash, pssopts) -+ sig_pss = key.sign_raw("SHA256", hash, pssopts) -+ assert_equal true, key.verify("SHA256", sig_pss, data, pssopts) -+ assert_equal true, key.verify_raw("SHA256", sig_pss, hash, pssopts) - end - - def test_sign_verify_raw_legacy -diff --git a/test/openssl/test_x509cert.rb b/test/openssl/test_x509cert.rb -index d696b98c0..64805504d 100644 ---- a/test/openssl/test_x509cert.rb -+++ b/test/openssl/test_x509cert.rb -@@ -173,13 +173,14 @@ def test_invalid_extension - end - - def test_sign_and_verify_rsa_sha1 -- cert = issue_cert(@ca, @rsa2048, 1, [], nil, nil, digest: "sha1") -+ cert = issue_cert(@ca, @rsa2048, 1, [], nil, nil, digest: "SHA1") - assert_equal(false, cert.verify(@rsa1024)) - assert_equal(true, cert.verify(@rsa2048)) - assert_equal(false, certificate_error_returns_false { cert.verify(@dsa256) }) - assert_equal(false, certificate_error_returns_false { cert.verify(@dsa512) }) - cert.serial = 2 - assert_equal(false, cert.verify(@rsa2048)) -+ rescue OpenSSL::X509::CertificateError # RHEL 9 disables SHA1 - end - - def test_sign_and_verify_rsa_md5 -@@ -229,6 +230,7 @@ def test_dsa_with_sha2 - # SHA1 is allowed from OpenSSL 1.0.0 (0.9.8 requires DSS1) - cert = issue_cert(@ca, @dsa256, 1, [], nil, nil, digest: "sha1") - assert_equal("dsaWithSHA1", cert.signature_algorithm) -+ rescue OpenSSL::X509::CertificateError # RHEL 9 disables SHA1 - end - - def test_check_private_key -diff --git a/test/openssl/test_x509crl.rb b/test/openssl/test_x509crl.rb -index bcdb0a697..146ee0730 100644 ---- a/test/openssl/test_x509crl.rb -+++ b/test/openssl/test_x509crl.rb -@@ -20,7 +20,7 @@ def test_basic - - cert = issue_cert(@ca, @rsa2048, 1, [], nil, nil) - crl = issue_crl([], 1, now, now+1600, [], -- cert, @rsa2048, OpenSSL::Digest.new('SHA1')) -+ cert, @rsa2048, OpenSSL::Digest.new('SHA256')) - assert_equal(1, crl.version) - assert_equal(cert.issuer.to_der, crl.issuer.to_der) - assert_equal(now, crl.last_update) -@@ -57,7 +57,7 @@ def test_revoked - ] - cert = issue_cert(@ca, @rsa2048, 1, [], nil, nil) - crl = issue_crl(revoke_info, 1, Time.now, Time.now+1600, [], -- cert, @rsa2048, OpenSSL::Digest.new('SHA1')) -+ cert, @rsa2048, OpenSSL::Digest.new('SHA256')) - revoked = crl.revoked - assert_equal(5, revoked.size) - assert_equal(1, revoked[0].serial) -@@ -98,7 +98,7 @@ def test_revoked - - revoke_info = (1..1000).collect{|i| [i, now, 0] } - crl = issue_crl(revoke_info, 1, Time.now, Time.now+1600, [], -- cert, @rsa2048, OpenSSL::Digest.new('SHA1')) -+ cert, @rsa2048, OpenSSL::Digest.new('SHA256')) - revoked = crl.revoked - assert_equal(1000, revoked.size) - assert_equal(1, revoked[0].serial) -@@ -124,7 +124,7 @@ def test_extension - - cert = issue_cert(@ca, @rsa2048, 1, cert_exts, nil, nil) - crl = issue_crl([], 1, Time.now, Time.now+1600, crl_exts, -- cert, @rsa2048, OpenSSL::Digest.new('SHA1')) -+ cert, @rsa2048, OpenSSL::Digest.new('SHA256')) - exts = crl.extensions - assert_equal(3, exts.size) - assert_equal("1", exts[0].value) -@@ -160,24 +160,24 @@ def test_extension - assert_equal(false, exts[2].critical?) - - no_ext_crl = issue_crl([], 1, Time.now, Time.now+1600, [], -- cert, @rsa2048, OpenSSL::Digest.new('SHA1')) -+ cert, @rsa2048, OpenSSL::Digest.new('SHA256')) - assert_equal nil, no_ext_crl.authority_key_identifier - end - - def test_crlnumber - cert = issue_cert(@ca, @rsa2048, 1, [], nil, nil) - crl = issue_crl([], 1, Time.now, Time.now+1600, [], -- cert, @rsa2048, OpenSSL::Digest.new('SHA1')) -+ cert, @rsa2048, OpenSSL::Digest.new('SHA256')) - assert_match(1.to_s, crl.extensions[0].value) - assert_match(/X509v3 CRL Number:\s+#{1}/m, crl.to_text) - - crl = issue_crl([], 2**32, Time.now, Time.now+1600, [], -- cert, @rsa2048, OpenSSL::Digest.new('SHA1')) -+ cert, @rsa2048, OpenSSL::Digest.new('SHA256')) - assert_match((2**32).to_s, crl.extensions[0].value) - assert_match(/X509v3 CRL Number:\s+#{2**32}/m, crl.to_text) - - crl = issue_crl([], 2**100, Time.now, Time.now+1600, [], -- cert, @rsa2048, OpenSSL::Digest.new('SHA1')) -+ cert, @rsa2048, OpenSSL::Digest.new('SHA256')) - assert_match(/X509v3 CRL Number:\s+#{2**100}/m, crl.to_text) - assert_match((2**100).to_s, crl.extensions[0].value) - end -@@ -185,7 +185,7 @@ def test_crlnumber - def test_sign_and_verify - cert = issue_cert(@ca, @rsa2048, 1, [], nil, nil) - crl = issue_crl([], 1, Time.now, Time.now+1600, [], -- cert, @rsa2048, OpenSSL::Digest.new('SHA1')) -+ cert, @rsa2048, OpenSSL::Digest.new('SHA256')) - assert_equal(false, crl.verify(@rsa1024)) - assert_equal(true, crl.verify(@rsa2048)) - assert_equal(false, crl_error_returns_false { crl.verify(@dsa256) }) -@@ -195,7 +195,7 @@ def test_sign_and_verify - - cert = issue_cert(@ca, @dsa512, 1, [], nil, nil) - crl = issue_crl([], 1, Time.now, Time.now+1600, [], -- cert, @dsa512, OpenSSL::Digest.new('SHA1')) -+ cert, @dsa512, OpenSSL::Digest.new('SHA256')) - assert_equal(false, crl_error_returns_false { crl.verify(@rsa1024) }) - assert_equal(false, crl_error_returns_false { crl.verify(@rsa2048) }) - assert_equal(false, crl.verify(@dsa256)) -diff --git a/test/openssl/test_x509req.rb b/test/openssl/test_x509req.rb -index ee9c678fb..ff17c4116 100644 ---- a/test/openssl/test_x509req.rb -+++ b/test/openssl/test_x509req.rb -@@ -23,31 +23,31 @@ def issue_csr(ver, dn, key, digest) - end - - def test_public_key -- req = issue_csr(0, @dn, @rsa1024, OpenSSL::Digest.new('SHA1')) -+ req = issue_csr(0, @dn, @rsa1024, OpenSSL::Digest.new('SHA256')) - assert_equal(@rsa1024.public_key.to_der, req.public_key.to_der) - req = OpenSSL::X509::Request.new(req.to_der) - assert_equal(@rsa1024.public_key.to_der, req.public_key.to_der) - -- req = issue_csr(0, @dn, @dsa512, OpenSSL::Digest.new('SHA1')) -+ req = issue_csr(0, @dn, @dsa512, OpenSSL::Digest.new('SHA256')) - assert_equal(@dsa512.public_key.to_der, req.public_key.to_der) - req = OpenSSL::X509::Request.new(req.to_der) - assert_equal(@dsa512.public_key.to_der, req.public_key.to_der) - end - - def test_version -- req = issue_csr(0, @dn, @rsa1024, OpenSSL::Digest.new('SHA1')) -+ req = issue_csr(0, @dn, @rsa1024, OpenSSL::Digest.new('SHA256')) - assert_equal(0, req.version) - req = OpenSSL::X509::Request.new(req.to_der) - assert_equal(0, req.version) - -- req = issue_csr(1, @dn, @rsa1024, OpenSSL::Digest.new('SHA1')) -+ req = issue_csr(1, @dn, @rsa1024, OpenSSL::Digest.new('SHA256')) - assert_equal(1, req.version) - req = OpenSSL::X509::Request.new(req.to_der) - assert_equal(1, req.version) - end - - def test_subject -- req = issue_csr(0, @dn, @rsa1024, OpenSSL::Digest.new('SHA1')) -+ req = issue_csr(0, @dn, @rsa1024, OpenSSL::Digest.new('SHA256')) - assert_equal(@dn.to_der, req.subject.to_der) - req = OpenSSL::X509::Request.new(req.to_der) - assert_equal(@dn.to_der, req.subject.to_der) -@@ -78,9 +78,9 @@ def test_attr - OpenSSL::X509::Attribute.new("msExtReq", attrval), - ] - -- req0 = issue_csr(0, @dn, @rsa1024, OpenSSL::Digest.new('SHA1')) -+ req0 = issue_csr(0, @dn, @rsa1024, OpenSSL::Digest.new('SHA256')) - attrs.each{|attr| req0.add_attribute(attr) } -- req1 = issue_csr(0, @dn, @rsa1024, OpenSSL::Digest.new('SHA1')) -+ req1 = issue_csr(0, @dn, @rsa1024, OpenSSL::Digest.new('SHA256')) - req1.attributes = attrs - assert_equal(req0.to_der, req1.to_der) - -@@ -108,6 +108,7 @@ def test_sign_and_verify_rsa_sha1 - assert_equal(false, request_error_returns_false { req.verify(@dsa512) }) - req.version = 1 - assert_equal(false, req.verify(@rsa1024)) -+ rescue OpenSSL::X509::RequestError # RHEL 9 disables SHA1 - end - - def test_sign_and_verify_rsa_md5 -@@ -122,7 +123,7 @@ def test_sign_and_verify_rsa_md5 - end - - def test_sign_and_verify_dsa -- req = issue_csr(0, @dn, @dsa512, OpenSSL::Digest.new('SHA1')) -+ req = issue_csr(0, @dn, @dsa512, OpenSSL::Digest.new('SHA256')) - assert_equal(false, request_error_returns_false { req.verify(@rsa1024) }) - assert_equal(false, request_error_returns_false { req.verify(@rsa2048) }) - assert_equal(false, req.verify(@dsa256)) -@@ -137,14 +138,14 @@ def test_sign_and_verify_dsa_md5 - end - - def test_dup -- req = issue_csr(0, @dn, @rsa1024, OpenSSL::Digest.new('SHA1')) -+ req = issue_csr(0, @dn, @rsa1024, OpenSSL::Digest.new('SHA256')) - assert_equal(req.to_der, req.dup.to_der) - end - - def test_eq -- req1 = issue_csr(0, @dn, @rsa1024, "sha1") -- req2 = issue_csr(0, @dn, @rsa1024, "sha1") -- req3 = issue_csr(0, @dn, @rsa1024, "sha256") -+ req1 = issue_csr(0, @dn, @rsa1024, "sha256") -+ req2 = issue_csr(0, @dn, @rsa1024, "sha256") -+ req3 = issue_csr(0, @dn, @rsa1024, "sha512") - - assert_equal false, req1 == 12345 - assert_equal true, req1 == req2 diff --git a/ruby-3.2.0-ossl_ocsp-use-null.patch b/ruby-3.2.0-ossl_ocsp-use-null.patch deleted file mode 100644 index 1882a5e..0000000 --- a/ruby-3.2.0-ossl_ocsp-use-null.patch +++ /dev/null @@ -1,61 +0,0 @@ -From a1f6cbc26119244a3556864c5402123666db5376 Mon Sep 17 00:00:00 2001 -From: Jarek Prokop -Date: Tue, 12 Apr 2022 09:44:21 +0200 -Subject: [PATCH 1/2] Let OpenSSL choose the digest if digest for - Openssl::OCSP::Request#sign is nil. - ---- - ext/openssl/ossl_ocsp.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/ext/openssl/ossl_ocsp.c b/ext/openssl/ossl_ocsp.c -index 1e87484a..543df271 100644 ---- a/ext/openssl/ossl_ocsp.c -+++ b/ext/openssl/ossl_ocsp.c -@@ -382,7 +382,7 @@ ossl_ocspreq_sign(int argc, VALUE *argv, VALUE self) - if (!NIL_P(flags)) - flg = NUM2INT(flags); - if (NIL_P(digest)) -- md = EVP_sha1(); -+ md = NULL; - else - md = ossl_evp_get_digestbyname(digest); - if (NIL_P(certs)) - -From 27efcd7e1ccc8afb9bb57f8616e4d01f0656d1dc Mon Sep 17 00:00:00 2001 -From: Jarek Prokop -Date: Tue, 12 Apr 2022 09:44:37 +0200 -Subject: [PATCH 2/2] Let OpenSSL choose the digest if digest for - Openssl::OCSP::BasicResponse#sign is nil. - ---- - ext/openssl/ossl_ocsp.c | 2 +- - test/openssl/test_ocsp.rb | 2 +- - 2 files changed, 2 insertions(+), 2 deletions(-) - -diff --git a/ext/openssl/ossl_ocsp.c b/ext/openssl/ossl_ocsp.c -index 543df271..9c8d768d 100644 ---- a/ext/openssl/ossl_ocsp.c -+++ b/ext/openssl/ossl_ocsp.c -@@ -1033,7 +1033,7 @@ ossl_ocspbres_sign(int argc, VALUE *argv, VALUE self) - if (!NIL_P(flags)) - flg = NUM2INT(flags); - if (NIL_P(digest)) -- md = EVP_sha1(); -+ md = NULL; - else - md = ossl_evp_get_digestbyname(digest); - if (NIL_P(certs)) -diff --git a/test/openssl/test_ocsp.rb b/test/openssl/test_ocsp.rb -index ef7321ab..85f13375 100644 ---- a/test/openssl/test_ocsp.rb -+++ b/test/openssl/test_ocsp.rb -@@ -99,7 +99,7 @@ def test_request_der - request.sign(@cert, @cert_key, [@ca_cert], 0) - asn1 = OpenSSL::ASN1.decode(request.to_der) - assert_equal cid.to_der, asn1.value[0].value.find { |a| a.tag_class == :UNIVERSAL }.value[0].value[0].to_der -- assert_equal OpenSSL::ASN1.ObjectId("sha1WithRSAEncryption").to_der, asn1.value[1].value[0].value[0].value[0].to_der -+ assert_equal OpenSSL::ASN1.ObjectId("sha256WithRSAEncryption").to_der, asn1.value[1].value[0].value[0].value[0].to_der - assert_equal @cert.to_der, asn1.value[1].value[0].value[2].value[0].value[0].to_der - assert_equal @ca_cert.to_der, asn1.value[1].value[0].value[2].value[0].value[1].to_der - assert_equal asn1.to_der, OpenSSL::OCSP::Request.new(asn1.to_der).to_der diff --git a/ruby-3.2.0-ruby-cgi-Fix-test_cgi_cookie_new_with_domain-to-pass.patch b/ruby-3.2.0-ruby-cgi-Fix-test_cgi_cookie_new_with_domain-to-pass.patch deleted file mode 100644 index 21579c5..0000000 --- a/ruby-3.2.0-ruby-cgi-Fix-test_cgi_cookie_new_with_domain-to-pass.patch +++ /dev/null @@ -1,38 +0,0 @@ -From 656f25987cf2885104d5b13c8d3f5b7d32f1b333 Mon Sep 17 00:00:00 2001 -From: Jean Boussier -Date: Wed, 23 Nov 2022 12:10:36 +0100 -Subject: [PATCH] [ruby/cgi] Fix test_cgi_cookie_new_with_domain to pass on - older rubies - -https://github.com/ruby/cgi/commit/05f0c58048 ---- - test/cgi/test_cgi_cookie.rb | 8 ++++---- - 1 file changed, 4 insertions(+), 4 deletions(-) - -diff --git a/test/cgi/test_cgi_cookie.rb b/test/cgi/test_cgi_cookie.rb -index e3ec4bea5286..6d31932d321a 100644 ---- a/test/cgi/test_cgi_cookie.rb -+++ b/test/cgi/test_cgi_cookie.rb -@@ -62,18 +62,18 @@ def test_cgi_cookie_new_complex - - def test_cgi_cookie_new_with_domain - h = {'name'=>'name1', 'value'=>'value1'} -- cookie = CGI::Cookie.new('domain'=>'a.example.com', **h) -+ cookie = CGI::Cookie.new(h.merge('domain'=>'a.example.com')) - assert_equal('a.example.com', cookie.domain) - -- cookie = CGI::Cookie.new('domain'=>'1.example.com', **h) -+ cookie = CGI::Cookie.new(h.merge('domain'=>'1.example.com')) - assert_equal('1.example.com', cookie.domain, 'enhanced by RFC 1123') - - assert_raise(ArgumentError) { -- CGI::Cookie.new('domain'=>'-a.example.com', **h) -+ CGI::Cookie.new(h.merge('domain'=>'-a.example.com')) - } - - assert_raise(ArgumentError) { -- CGI::Cookie.new('domain'=>'a-.example.com', **h) -+ CGI::Cookie.new(h.merge('domain'=>'a-.example.com')) - } - end - diff --git a/ruby-3.2.0-ruby-cgi-Loosen-the-domain-regex-to-accept.patch b/ruby-3.2.0-ruby-cgi-Loosen-the-domain-regex-to-accept.patch deleted file mode 100644 index f217281..0000000 --- a/ruby-3.2.0-ruby-cgi-Loosen-the-domain-regex-to-accept.patch +++ /dev/null @@ -1,44 +0,0 @@ -From 745dcf5326ea2c8e2047a3bddeb0fbb7e7d07649 Mon Sep 17 00:00:00 2001 -From: Xenor Chang -Date: Mon, 28 Nov 2022 12:34:06 +0800 -Subject: [PATCH] [ruby/cgi] Loosen the domain regex to accept '.' - (https://github.com/ruby/cgi/pull/29) - -* Loosen the domain regex to accept '.' - -Co-authored-by: Nobuyoshi Nakada - -https://github.com/ruby/cgi/commit/5e09d632f3 -Co-authored-by: Hiroshi SHIBATA ---- - lib/cgi/cookie.rb | 2 +- - test/cgi/test_cgi_cookie.rb | 3 +++ - 2 files changed, 4 insertions(+), 1 deletion(-) - -diff --git a/lib/cgi/cookie.rb b/lib/cgi/cookie.rb -index 1a9c1a82c123..9498e2f9faf9 100644 ---- a/lib/cgi/cookie.rb -+++ b/lib/cgi/cookie.rb -@@ -42,7 +42,7 @@ class Cookie < Array - - TOKEN_RE = %r"\A[[!-~]&&[^()<>@,;:\\\"/?=\[\]{}]]+\z" - PATH_VALUE_RE = %r"\A[[ -~]&&[^;]]*\z" -- DOMAIN_VALUE_RE = %r"\A(?