| "git clone --depth 1 https://github.com/ruby/ruby.git trunk-repeat20" exit with 0. |
| Cloning into 'trunk-repeat20'... |
| Updating files: 83% (10135/12135) |
| "./autogen.sh" exit with 0. |
| "autoconf" exit with 0. |
| "/tmp/ruby/src/trunk-repeat20/configure --prefix=/tmp/ruby/install/trunk-repeat20 --disable-install-doc --enable-shared" exit with 0. |
| configure: WARNING: something wrong with CXXFLAGS="" |
| "make update-unicode -j4" exit with 0. |
| "make update-download -j4" exit with 0. |
| Cloning into '/tmp/ruby/src/trunk-repeat20/gems/src/rbs'... |
| Cloning into '/tmp/ruby/src/trunk-repeat20/gems/src/debug'... |
| From https://github.com/ruby/debug |
| * branch 2d602636d99114d55a32fedd652c9c704446a749 -> FETCH_HEAD |
| HEAD is now at 2d60263 Use ruby/actions workflow for ruby versions |
| From https://github.com/ruby/rbs |
| * branch 0637ef60e13d5ded71d69d5238dbffcaae3d3740 -> FETCH_HEAD |
| HEAD is now at 0637ef60 Revert "Ignore error" |
| "make update-rubyspec -j4" exit with 0. |
| "make update-src -j4" exit with 0. |
| "make after-update -j4" exit with 0. |
| + cp /tmp/ruby/src/trunk-repeat20/enc/jis/props.h.blt /tmp/ruby/src/trunk-repeat20/enc/jis/props.h |
| "make miniruby -j4" exit with 0. |
| "make ruby -j4" exit with 0. |
| "make all -j4" exit with 0. |
| "make install -j4" exit with 0. |
| "make yes-btest TESTOPTS='-q -j4'" exit with 0. |
| |
| "make yes-test-basic TESTS=--repeat-count=20" exit with 0. |
| make yes-test-all TESTOPTS='--stderr-on-failure' TESTS=--repeat-count=20 |
| $$$ #<Timeout::Error: execution expired> |
| ### enter analyzing mode for stuck processes |
| $$$ ps jx |
| PPID PID PGID SID TTY TPGID STAT UID TIME COMMAND |
| 11 12 12 12 ? -1 Ss 1001 0:00 sh build-loop.sh trunk-repeat20 --incremental --process-num=4 |
| 3439119 502791 12 12 ? -1 Rl 1001 0:00 /tmp/ruby/build/trunk-repeat20/ruby --disable-gems --yjit-call-threshold=1 --yjit-stats=quiet -e _test_proc = -> { def compiles(&block) failures = RubyVM::YJIT.runtime_stats[:compilation_failure] block.call failures == RubyVM::YJIT.runtime_stats[:compilation_failure] end def add_pages(num_jits) pages = RubyVM::YJIT.runtime_stats[:live_page_count] num_jits.times { return false unless eval('compiles { nil.to_i }') } pages.nil? || pages < RubyVM::YJIT.runtime_stats[:live_page_count] end fiber = Fiber.new { # Loop to call the same basic block again after Fiber.yield while Fiber.yield(nil.to_i); end } return :not_paged1 unless add_pages(400) # go to a page without initial ocb code return :broken_resume1 if fiber.resume(true) != 0 # JIT the fiber RubyVM::YJIT.code_gc # first code GC, which should not free the fiber page return :not_paged2 unless add_pages(300) # add some stuff to be freed # Not calling fiber.resume here to test the case that the YJIT payload loses some # information at the previous code GC. The payload should still be there, and # thus we could know the fiber ISEQ is still on stack on this second code GC. RubyVM::YJIT.code_gc # second code GC, which should still not free the fiber page return :not_paged3 unless add_pages(200) # attempt to overwrite the fiber page (it shouldn't) return :broken_resume2 if fiber.resume(true) != 0 # The fiber code should be still fine return :broken_resume3 if fiber.resume(false) != nil # terminate the fiber RubyVM::YJIT.code_gc # third code GC, freeing a page that used to be on stack return :not_paged4 unless add_pages(100) # check everything still works code_gc_count = RubyVM::YJIT.runtime_stats[:code_gc_count] return :"code_gc_#{code_gc_count}" if code_gc_count != 3 :ok } RubyVM::YJIT.runtime_stats RubyVM::YJIT.reset_stats! result = _test_proc.call stats = RubyVM::YJIT.runtime_stats def collect_insns(iseq) insns = RubyVM::YJIT.insns_compiled(iseq) iseq.each_child { |c| insns.concat collect_insns(c) } insns end iseq = RubyVM::InstructionSequence.of(_test_proc) IO.open(3).write Marshal.dump({ result: result, stats: stats, insns: collect_insns(iseq), disasm: iseq.disasm }) |
| 3386889 502795 12 12 ? -1 R 1001 0:00 ps jx |
| 12 3386885 12 12 ? -1 Sl 1001 0:00 ruby ./br.rb build_report trunk-repeat20 --incremental --process-num=4 |
| 3386885 3386888 12 12 ? -1 S 1001 0:00 sh -c ruby /home/ko1/build-ruby/build-ruby.rb --target_name=trunk-repeat20 --logfile=/home/ko1/ruby/logs/brlog.trunk-repeat20.20240315-102552 --root_dir=/tmp/ruby --timeout=41600 --test_opts='TESTS=--repeat-count=20' --incremental --process-num=4 |
| 3386888 3386889 12 12 ? -1 Rl 1001 0:00 ruby /home/ko1/build-ruby/build-ruby.rb --target_name=trunk-repeat20 --logfile=/home/ko1/ruby/logs/brlog.trunk-repeat20.20240315-102552 --root_dir=/tmp/ruby --timeout=41600 --test_opts=TESTS=--repeat-count=20 --incremental --process-num=4 |
| 3386889 3438802 12 12 ? -1 S 1001 0:00 sh -c make yes-test-all TESTOPTS='--stderr-on-failure' TESTS=--repeat-count=20 |
| 3438802 3438803 12 12 ? -1 S 1001 0:00 make yes-test-all TESTOPTS=--stderr-on-failure TESTS=--repeat-count=20 |
| 3438803 3439119 12 12 ? -1 Sl 1001 540:41 /tmp/ruby/src/trunk-repeat20/test/runner.rb: TestYJIT#test_on_stack_code_gc_twice |
| {11=>[12], 3439119=>[502791], 3386889=>[502795, 3438802], 12=>[3386885], 3386885=>[3386888], 3386888=>[3386889], 3438802=>[3438803], 3438803=>[3439119]} |
| $ timeout 60 gdb -p 502795 -x /home/ko1/build-ruby/gdbscript -batch -quiet 2> /dev/null |
| >>> Threads |
| No threads. |
| >>> Machine level backtrace |
| >>> Dump Ruby level backtrace (if possible) |
| #<Errno::ESRCH: No such process> |
| $ timeout 60 gdb -p 502791 -x /home/ko1/build-ruby/gdbscript -batch -quiet 2> /dev/null |
| >>> Threads |
| No threads. |
| >>> Machine level backtrace |
| >>> Dump Ruby level backtrace (if possible) |
| #<Errno::ESRCH: No such process> |
| $ timeout 60 gdb -p 3439119 -x /home/ko1/build-ruby/gdbscript -batch -quiet 2> /dev/null |
| >>> Threads |
| No threads. |
| >>> Machine level backtrace |
| >>> Dump Ruby level backtrace (if possible) |
| $ timeout 60 gdb -p 3438803 -x /home/ko1/build-ruby/gdbscript -batch -quiet 2> /dev/null |
| make: *** [uncommon.mk:958: yes-test-all] Killed |
| >>> Threads |
| No threads. |
| >>> Machine level backtrace |
| >>> Dump Ruby level backtrace (if possible) |
| #<Errno::ESRCH: No such process> |
| $ timeout 60 gdb -p 3438802 -x /home/ko1/build-ruby/gdbscript -batch -quiet 2> /dev/null |
| >>> Threads |
| No threads. |
| >>> Machine level backtrace |
| >>> Dump Ruby level backtrace (if possible) |