Disable iseq-dumped builtin module for universal x86_64/arm64 binaries

During the build, Ruby has special logic to serialize its own builtin
module to disk using the binary iseq format during the build (I assume
for speed so it doesn't have to parse builtin every time it starts
up).

However, since iseq format is architecture-specific, when building on
x86_64 for universal x86_64 + arm64, the serialized builtin module is
written with the x86_64 architecture of the build machine, which fails
this check whenever ruby imports the builtin module on arm64:

1fdaa06660/compile.c (L13243)

Thankfully, there's logic to disable this feature for cross-compiled builds:

1fdaa06660/builtin.c (L6)

This disables the iseq logic for universal builds as well.

Fixes [Bug #18286]
This commit is contained in:
Ben Hamilton 2023-02-23 13:31:53 -07:00 коммит произвёл Aaron Patterson
Родитель a168426881
Коммит 1d5598fe0d
5 изменённых файлов: 6 добавлений и 3 удалений

Просмотреть файл

@ -3,7 +3,7 @@
#include "iseq.h"
#include "builtin.h"
#ifdef CROSS_COMPILING
#if defined(CROSS_COMPILING) || defined(UNIVERSAL_BINARY)
#define INCLUDED_BY_BUILTIN_C 1
#include "mini_builtin.c"

Просмотреть файл

@ -1303,7 +1303,7 @@ preludes: {$(srcdir)}golf_prelude.c
builtin_binary.inc: $(PREP) $(BUILTIN_RB_SRCS) $(srcdir)/template/builtin_binary.inc.tmpl
$(Q) $(MINIRUBY) $(tooldir)/generic_erb.rb -o $@ \
$(srcdir)/template/builtin_binary.inc.tmpl -- --cross=$(CROSS_COMPILING)
$(srcdir)/template/builtin_binary.inc.tmpl -- --cross=$(CROSS_COMPILING) --universal=$(UNIVERSAL_BINARY)
$(BUILTIN_RB_INCS): $(top_srcdir)/tool/mk_builtin_loader.rb

Просмотреть файл

@ -4367,6 +4367,8 @@ AS_IF([test "${universal_binary-no}" = yes ], [
AC_DEFINE_UNQUOTED(RUBY_PLATFORM_OS, "${target_os}")
AC_DEFINE_UNQUOTED(RUBY_ARCH, "universal-" RUBY_PLATFORM_OS)
AC_DEFINE_UNQUOTED(RUBY_PLATFORM, "universal." RUBY_PLATFORM_CPU "-" RUBY_PLATFORM_OS)
AC_DEFINE(UNIVERSAL_BINARY, 1)
AC_SUBST(UNIVERSAL_BINARY, yes)
], [
AS_IF([test "${target_os}-${rb_cv_msvcrt}" = "mingw32-ucrt" ], [
arch="${target_cpu}-mingw-ucrt"

Просмотреть файл

@ -65,6 +65,7 @@ rubyarchhdrdir = @rubyarchhdrdir@
ruby_version = @ruby_version@
RUBY_VERSION_NAME = @RUBY_VERSION_NAME@
UNIVERSAL_ARCHNAMES = @UNIVERSAL_ARCHNAMES@
UNIVERSAL_BINARY = @UNIVERSAL_BINARY@
TESTUI = console
TESTS =

Просмотреть файл

@ -2,7 +2,7 @@
// DO NOT MODIFY THIS FILE DIRECTLY.
// auto-generated file by tool/generic_erb.rb
// with template/builtin_binary.inc.tmpl
% unless ARGV.include?('--cross=yes')
% unless ARGV.include?('--cross=yes') || ARGV.include?('--universal=yes')
% ary = RubyVM.enum_for(:each_builtin).to_a
% ary.each{|feature, iseq|