On 01/12 07:50, Jeremy Evans wrote: > Thank you very much for the testing and analysis. I can confirm the JIT > compilation problems on amd64 because it uses the cached cc path (before > it would even get to the __guard_local issues on gcc). > > Below is a new Makefile that will use dist patches pulled from Ruby's > SVN to handle the random.c and addr2line.c issues, as well as an > additional significant regression. I tested that it also builds with > CC=/usr/bin/gcc. > > I will keep working on the JIT issues to see if I can fix them and get > something that works with both base clang and gcc.
I think was able to fix both JIT issues. Here's an updated Makefile as well as a new patch to mjit_worker.c. I've tested this with both base clang and base gcc on amd64, same results on both. I would appreciate testing to see if this fixes the issues identified, and if so, OKs to import and hookup. Assuming the mjit_worker.c patch fixes the JIT issues on gcc, I'll try to get it upstreamed. Thanks, Jeremy lang/ruby/2.6/Makefile: # $OpenBSD: Makefile,v 1.4 2018/03/31 21:12:45 jeremy Exp $ VERSION = 2.6.0 DISTNAME = ruby-${VERSION} SHARED_LIBS = ruby26 0.0 NEXTVER = 2.7 MASTER_SITES0 = https://svn.ruby-lang.org/cgi-bin/viewvc.cgi/branches/ruby_2_6/ PATCHFILES = ruby26-lib-net-protocol.patch{lib/net/protocol.rb?r1=66799\&r2=66798\&pathrev=66799\&view=patch}:0 \ ruby26-addr2line.patch{addr2line.c?r1=66800\&r2=66799\&pathrev=66800\&view=patch}:0 \ ruby26-random.patch{random.c?r1=66729\&r2=66728\&pathrev=66729\&view=patch}:0 PATCH_DIST_STRIP = -p2 PSEUDO_FLAVORS= no_ri_docs bootstrap # Do not build the RI docs on slow arches .if ${MACHINE_ARCH:Malpha} || ${MACHINE_ARCH:Marm} || ${MACHINE_ARCH:Mhppa} FLAVOR?= no_ri_docs bootstrap .else FLAVOR?= .endif MULTI_PACKAGES = -main -gdbm -ri_docs .include <bsd.port.arch.mk> .if ${BUILD_PACKAGES:M-ri_docs} ALL_TARGET += rdoc INSTALL_TARGET += install-doc .endif # Remove after 2.6.1 BUILD_DEPENDS = archivers/gtar TAR = gtar # Fix path for JIT compiler to not use shims in ports obj bin dir CONFIGURE_ENV += ac_cv_path_MJIT_CC=`which ${CC}` WANTLIB-main += curses post-extract: ${POST_EXTRACT} pre-configure: ${FIX_RIPPER} pre-install: ${PRE_INSTALL} post-install: ${FIX_RBCONFIG} # 20197 tests, 2280013 assertions, 12 failures, 15 errors, 76 skips do-test: -cd ${WRKSRC} && make test-sample -cd ${WRKSRC} && make btest-ruby -cd ${WRKSRC} && make test-spec SPECOPTS="-f s" cd ${WRKSRC} && make test-all TESTOPTS="-v -q" .include <bsd.port.mk> lang/ruby/2.6/patches/patch-mjit_worker_c: $OpenBSD$ Fix JIT compilation when using base gcc. Index: mjit_worker.c --- mjit_worker.c.orig +++ mjit_worker.c @@ -258,7 +258,7 @@ static const char *const CC_OPTIMIZE_ARGS[] = {MJIT_OP static const char *const CC_LDSHARED_ARGS[] = {MJIT_LDSHARED GCC_PIC_FLAGS NULL}; static const char *const CC_DLDFLAGS_ARGS[] = { MJIT_DLDFLAGS -#if defined __GNUC__ && !defined __clang__ +#if defined __GNUC__ && !defined __clang__ && !defined(__OpenBSD__) "-nostartfiles", # if !defined(_WIN32) && !defined(__CYGWIN__) && !defined(_AIX) "-nodefaultlibs", "-nostdlib",