Issue #16694 has been updated by k0kubun (Takashi Kokubun).
Sorry for not fixing this for a while, but I replaced the implementation in [Feature
#19420] and it should indeed remove this problem. Closing.
----------------------------------------
Bug #16694: JIT vs hardened GCC with PCH
https://bugs.ruby-lang.org/issues/16694#change-102191
* Author: vo.x (Vit Ondruch)
* Status: Assigned
* Priority: Normal
* Assignee: k0kubun (Takashi Kokubun)
* ruby -v: ruby 2.6.3p62 (2019-04-16 revision 67580) [x86_64-linux]
* Backport: 2.5: UNKNOWN, 2.6: UNKNOWN, 2.7: UNKNOWN
----------------------------------------
Preparing Ruby package for RHEL 8, I observe the following error:
~~~
$ cd /builddir/build/BUILD/ruby-2.6.3/
$ make test-all TESTS=test/ruby/test_rubyvm_mjit.rb
Run options: "--ruby=./miniruby -I./lib -I. -I.ext/common ./tool/runruby.rb
--extout=.ext -- --disable-gems" --excludes-dir=./test/excludes
--name=!/memory_leak/
# Running tests:
[1/4] TestRubyVMMJIT#test_pause = 0.24 s
1) Failure:
TestRubyVMMJIT#test_pause
[/builddir/build/BUILD/ruby-2.6.3/test/ruby/test_rubyvm_mjit.rb:32]:
unexpected stdout:
'''
truefalsefalse```
stderr:
'''
/tmp/_ruby_mjit_p712u0.c:1:37: error: one or more PCH files were found, but they were
invalid
#include "/tmp/_ruby_mjit_hp712u0.h"
^
compilation terminated due to -Wfatal-errors.
/tmp/_ruby_mjit_p712u1.c:1:37: error: one or more PCH files were found, but they were
invalid
#include "/tmp/_ruby_mjit_hp712u0.h"
^
compilation terminated due to -Wfatal-errors.
/tmp/_ruby_mjit_p712u2.c:1:37: error: one or more PCH files were found, but they were
invalid
#include "/tmp/_ruby_mjit_hp712u0.h"
^
compilation terminated due to -Wfatal-errors.
/tmp/_ruby_mjit_p712u3.c:1:37: error: one or more PCH files were found, but they were
invalid
#include "/tmp/_ruby_mjit_hp712u0.h"
^
compilation terminated due to -Wfatal-errors.
/tmp/_ruby_mjit_p712u4.c:1:37: error: one or more PCH files were found, but they were
invalid
#include "/tmp/_ruby_mjit_hp712u0.h"
^
compilation terminated due to -Wfatal-errors.
Successful MJIT finish
```.
<5> expected but was
<0>.
Finished tests in 0.937667s, 4.2659 tests/s, 24.5290 assertions/s.
4 tests, 23 assertions, 1 failures, 0 errors, 0 skips
ruby -v: ruby 2.6.3p62 (2019-04-16 revision 67580) [x86_64-linux]
make: *** [uncommon.mk:761: yes-test-all] Error 1
~~~
As it turns out, this is because GCC in RHEL is fully hardened. Unfortunately, due to GCC
design, when GCC is fully hardened, it cannot properly handle PCH due to memory address
relocation. Moreover, PCH are also security risk, so it seems they are going to be
disabled entirely on RHEL.
Now I wonder what is the impact on Ruby JIT. I worry that with disabled PCH, the Ruby
performance with JIT will be even worser without JIT. May be it is not good idea to use
GCC for JIT. What are your thoughts?
The original ticket with all the details is here [1].
[1]:
https://bugzilla.redhat.com/show_bug.cgi?id=1721553
--
https://bugs.ruby-lang.org/