1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00
ruby--ruby/tool
k0kubun bdb4268928 _mjit_compile_pc_and_sp.erb: make sure no uninitialized
area on VM stack to prevent SEGV on GC. GC may mark every value in VM
stack.

Unfortunately I couldn't write a test for it... So let me explain the
situation.

SEGV example:
https://gist.github.com/k0kubun/c7cea2b5761ffdff29ec79ea1a8f7f91

```
$ ruby --dump=insns -e 'def oct(num, len); "%0#{len}o" % num; end'
== disasm: #<ISeq:oct@-e:1 (1,0)-(1,41)> (catch: FALSE)
local table (size: 2, argc: 2 [opts: 0, rest: -1, post: 0, block: -1, kw: -1@-1, kwrest: -1])
[ 2] num@0<Arg> [ 1] len@1<Arg>
0000 putobject                    "%0"                                (   1)[LiCa]
0002 getlocal_WC_0                len@1
0004 dup
0005 checktype                    T_STRING
0007 branchif                     14
0009 dup
0010 opt_send_without_block       <callinfo!mid:to_s, argc:0, FCALL|ARGS_SIMPLE>, <callcache>
0013 tostring
0014 putobject                    "o"
0016 concatstrings                3
0018 getlocal_WC_0                num@0
0020 opt_mod                      <callinfo!mid:%, argc:1, ARGS_SIMPLE>, <callcache>
0023 leave                        [Re]
```

Prior to this commit, after arguments are pushed on 0010, stacks were:
VM stack: [uninitialized, uninitialized, len]
JIT stack: ["%0", len, len]

And then, when GC is invoked on 0016, VM stack will be [uninitialized, uninitialized]
and those uninitialized values will be marked by GC.

With this commit, after arguments are pushed on 0010, stacks will be:
VM stack: [len]
JIT stack: ["%0", len, len]

And VM stack will be [] on 0016.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@63360 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2018-05-08 15:06:11 +00:00
..
m4 Honor --silent option 2018-04-03 08:29:51 +00:00
ruby_vm _mjit_compile_pc_and_sp.erb: make sure no uninitialized 2018-05-08 15:06:11 +00:00
test
asm_parse.rb
bisect.sh tool/bisect.sh: extracted build part [ci skip] 2018-03-01 03:26:05 +00:00
build-transcode
change_maker.rb
checksum.rb
colorize.rb distinguish pass and fail by highlight [ci skip] 2017-10-14 02:17:07 +00:00
downloader.rb tool/downloader.rb: retry SocketError 2018-02-05 13:24:00 +00:00
enc-emoji-citrus-gen.rb
enc-emoji4unicode.rb
enc-unicode.rb support gperf 3.1 2017-12-08 05:51:19 +00:00
eval.rb
expand-config.rb
extlibs.rb
fake.rb fake.rb: set libdir 2017-12-27 01:26:22 +00:00
fetch-bundled_gems.rb test-bundled-gems-fetch 2017-10-25 23:35:46 +00:00
file2lastrev.rb file2lastrev.rb: suppress_not_found 2017-12-06 11:18:53 +00:00
gem-unpack.rb
gen_dummy_probes.rb
gen_ruby_tapset.rb
generate-backport-changelog.rb Missed # in usage 2017-08-09 08:17:52 +00:00
generic_erb.rb Refactor ERB version checking for keyword arguments 2018-02-27 11:12:23 +00:00
git-refresh
gperf.sed gperf.sed: static declarations 2017-12-15 14:42:43 +00:00
id2token.rb
ifchange ifchange: --debug option 2018-02-08 02:08:27 +00:00
insns2vm.rb insns2vm.rb: make #generate_parser private 2018-01-27 02:14:20 +00:00
install-sh configure.ac 2017-09-29 13:21:17 +00:00
jisx0208.rb
make-snapshot Prefer to use %x instead of backtick. 2018-02-28 11:12:36 +00:00
make_hgraph.rb
mdoc2man.rb
merger.rb aliases 2017-12-16 01:56:14 +00:00
mk_call_iseq_optimized.rb mk_call_iseq_optimized.rb: add mode string [ci skip] 2017-11-09 23:02:52 +00:00
mkconfig.rb mkconfig.rb: hide MJIT configurations 2018-02-08 15:19:01 +00:00
mkrunnable.rb rename ruby-runner as bin/ruby 2017-09-15 17:42:00 +00:00
node_name.rb
parse.rb
prereq.status
probes_to_wiki.rb
rbinstall.rb rbinstall.rb: fix timing to read stub 2018-04-27 01:58:29 +00:00
rbuninstall.rb
redmine-backporter.rb * tool/redmine-backporter.rb (show): just report and ignore if a feature ticket 2017-07-07 02:14:57 +00:00
release.sh
rmdirs
run-gcov.rb tool/run-gcov.rb: ignore rubyspec_temp directory 2017-07-04 16:02:18 +00:00
run-lcov.rb Revamp method coverage to support define_method 2017-12-05 07:16:42 +00:00
runruby.rb tool/runruby.rb: fix RUNRUBY_USE_GDB case 2017-11-07 11:21:09 +00:00
strip-rdoc.rb
sync_default_gems.rb Support upstream directory structure for ruby/csv. 2018-04-03 05:56:16 +00:00
test-coverage.rb make test-all COVERAGE=true supports directory-separated build 2018-04-05 01:05:16 +00:00
transcode-tblgen.rb Refactor ERB version checking for keyword arguments 2018-02-27 11:12:23 +00:00
transform_mjit_header.rb transform_mjit_header.rb: read output and errors 2018-03-17 02:18:46 +00:00
update-deps mjit_compile.c: merge initial JIT compiler 2018-02-04 11:22:28 +00:00
vcs.rb vcs.rb: .git at export 2018-02-26 06:00:08 +00:00
vpath.rb
vtlh.rb
ytab.sed more ytab.sed fixes 2018-01-15 02:39:32 +00:00