[prev in list] [next in list] [prev in thread] [next in thread] 

List:       ruby-core
Subject:    [ruby-core:105072] [Ruby master Bug#18133] LTO: TestGCCompact#test_ast_compacts segfaults on i686
From:       "vo.x (Vit Ondruch)" <noreply () ruby-lang ! org>
Date:       2021-08-25 15:30:18
Message-ID: redmine.journal-93479.20210825153017.703 () ruby-lang ! org
[Download RAW message or body]

Issue #18133 has been updated by vo.x (Vit Ondruch).


It actually crashes on c9s:

https://kojihub.stream.rdu2.redhat.com/koji/taskinfo?taskID=636003
https://kojihub.stream.rdu2.redhat.com/kojifiles/work/tasks/6017/636017/build.log

----------------------------------------
Bug #18133: LTO: TestGCCompact#test_ast_compacts segfaults on i686
https://bugs.ruby-lang.org/issues/18133#change-93479

* Author: vo.x (Vit Ondruch)
* Status: Open
* Priority: Normal
* ruby -v: ruby 3.0.2p107 (2021-07-07 revision 0db68f0233) [i386-linux]
* Backport: 2.6: UNKNOWN, 2.7: UNKNOWN, 3.0: UNKNOWN
----------------------------------------
I observe following segfault running the test suite on i686 on RHEL9:

~~~
$ gdb --args ./miniruby -I./lib -I. -I.ext/common  ./tool/runruby.rb --extout=.ext  \
-- --disable-gems ./test/runner.rb --excludes-dir=./test/excludes -v

... snip ...

(gdb) handle SIGPIPE noprint nostop pass
Signal        Stop	Print	Pass to program	Description
SIGPIPE       No	No	Yes		Broken pipe
(gdb) r

... snip ...

[ 8347/20497] TestGBK#test_mbc_enc_len = 0.00 s
[ 8348/20497] TestGBK#test_mbc_to_code = 0.00 s
[ 8349/20497] TestGCCompact#test_ast_compacts--Type <RET> for more, q to quit, c to \
continue without paging--

Thread 1 "ruby" received signal SIGSEGV, Segmentation fault.
0xf7e33fe6 in rb_class_remove_from_super_subclasses (klass=<optimized out>) at \
/builddir/build/BUILD/ruby-3.0.2/class.c:96 96		    \
RCLASS_EXT(entry->next->klass)->parent_subclasses = \
RCLASS_EXT(klass)->parent_subclasses; (gdb) bt
#0  0xf7e33fe6 in rb_class_remove_from_super_subclasses (klass=<optimized out>) at \
/builddir/build/BUILD/ruby-3.0.2/class.c:96 #1  obj_free (obj=<optimized out>, \
objspace=0x5655ac30) at /builddir/build/BUILD/ruby-3.0.2/gc.c:3019 #2  gc_page_sweep \
(sweep_page=0x5a40e1f0, heap=0x5655ac48, objspace=0x5655ac30) at \
/builddir/build/BUILD/ruby-3.0.2/gc.c:4914 #3  gc_sweep_step.isra.0 \
(objspace=<optimized out>, heap=<optimized out>) at \
/builddir/build/BUILD/ruby-3.0.2/gc.c:5134 #4  0xf7ca3f09 in gc_sweep_rest \
(objspace=<optimized out>) at /builddir/build/BUILD/ruby-3.0.2/gc.c:5190 #5  gc_sweep \
(objspace=0x5655ac30) at /builddir/build/BUILD/ruby-3.0.2/gc.c:5313 #6  0xf7ca8250 in \
gc_marks (full_mark=<optimized out>, objspace=<optimized out>) at \
/builddir/build/BUILD/ruby-3.0.2/gc.c:7504 #7  gc_start (objspace=<optimized out>, \
reason=<optimized out>) at /builddir/build/BUILD/ruby-3.0.2/gc.c:8322 #8  0xf7ca8530 \
in garbage_collect (objspace=objspace@entry=0x5655ac30, reason=reason@entry=238592) \
at /builddir/build/BUILD/ruby-3.0.2/gc.c:8210 #9  0xf7caa723 in gc_start_internal \
(compact=2, immediate_sweep=2, immediate_mark=2, full_mark=2, self=1448715280, \
ec=0x5655afac) at /builddir/build/BUILD/ruby-3.0.2/gc.c:8553 #10 gc_compact \
(ec=0x5655afac, self=1448715280) at /builddir/build/BUILD/ruby-3.0.2/gc.c:9468 #11 \
0xf7dfae3c in invoke_bf (argv=0x0, bf=<optimized out>, reg_cfp=<optimized out>, \
ec=0x5655afac) at /builddir/build/BUILD/ruby-3.0.2/vm_insnhelper.c:5583 #12 \
vm_invoke_builtin_delegate (ec=0x5655afac, cfp=<optimized out>, bf=<optimized out>, \
start_index=0) at /builddir/build/BUILD/ruby-3.0.2/vm_insnhelper.c:5607 #13 \
0xf7e0664c in vm_exec_core (ec=0x0, initial=1448732852) at \
/builddir/build/BUILD/ruby-3.0.2/insns.def:1482 #14 0xf7e1d0d5 in rb_vm_exec \
(ec=<optimized out>, mjit_enable_p=<optimized out>) at \
/builddir/build/BUILD/ruby-3.0.2/vm.c:2172 #15 0xf7e0c3c9 in invoke_block \
(captured=<optimized out>, captured=<optimized out>, opt_pc=<optimized out>, \
type=<optimized out>, cref=0x0, self=1450588460, iseq=0x5669174c, ec=0x5655afac)  at \
/builddir/build/BUILD/ruby-3.0.2/vm_insnhelper.c:399 #16 invoke_iseq_block_from_c \
(me=0x0, is_lambda=<optimized out>, cref=0x0, passed_block_handler=0, kw_splat=0, \
argv=0xffffbf00, argc=1, self=1450588460, captured=<optimized out>, ec=0x5655afac)  \
at /builddir/build/BUILD/ruby-3.0.2/vm.c:1335 #17 invoke_block_from_c_bh \
(force_blockarg=<optimized out>, is_lambda=<optimized out>, cref=<optimized out>, \
passed_block_handler=<optimized out>, kw_splat=<optimized out>, argv=<optimized out>, \
  argc=<optimized out>, block_handler=<optimized out>, ec=<optimized out>) at \
/builddir/build/BUILD/ruby-3.0.2/vm.c:1353 #18 vm_yield (kw_splat=0, argv=0xffffbf00, \
argc=1, ec=0x5655afac) at /builddir/build/BUILD/ruby-3.0.2/vm.c:1398 #19 rb_yield_0 \
(argv=0xffffbf00, argc=1) at /builddir/build/BUILD/ruby-3.0.2/vm_eval.c:1333 #20 \
rb_yield (val=<optimized out>) at /builddir/build/BUILD/ruby-3.0.2/vm_eval.c:1349 #21 \
0xf7c2ae74 in rb_ary_collect (ary=1503666180) at \
/builddir/build/BUILD/ruby-3.0.2/array.c:3635 #22 0xf7dfc835 in \
vm_call_cfunc_with_frame (ec=0x5655afac, reg_cfp=0xf77f6d70, calling=0xffffc004) at \
/builddir/build/BUILD/ruby-3.0.2/vm_insnhelper.c:2929 #23 0xf7dfdd31 in vm_sendish \
(ec=0x5655afac, reg_cfp=0xf77f6d70, cd=0x566c8f00, block_handler=4152323453, \
method_explorer=mexp_search_method) at \
/builddir/build/BUILD/ruby-3.0.2/vm_callinfo.h:336 #24 0xf7e0590a in vm_exec_core \
(ec=0x0, initial=1448732852) at /builddir/build/BUILD/ruby-3.0.2/insns.def:770 #25 \
0xf7e1d0d5 in rb_vm_exec (ec=<optimized out>, mjit_enable_p=<optimized out>) at \
/builddir/build/BUILD/ruby-3.0.2/vm.c:2172 #26 0xf7e0c3c9 in invoke_block \
(captured=<optimized out>, captured=<optimized out>, opt_pc=<optimized out>, \
type=<optimized out>, cref=0x0, self=1450588460, iseq=0x56691850, ec=0x5655afac)  at \
/builddir/build/BUILD/ruby-3.0.2/vm_insnhelper.c:399 #27 invoke_iseq_block_from_c \
(me=0x0, is_lambda=<optimized out>, cref=0x0, passed_block_handler=0, kw_splat=0, \
argv=0xffffc2b0, argc=1, self=1450588460, captured=<optimized out>, ec=0x5655afac)  \
at /builddir/build/BUILD/ruby-3.0.2/vm.c:1335 #28 invoke_block_from_c_bh \
(force_blockarg=<optimized out>, is_lambda=<optimized out>, cref=<optimized out>, \
passed_block_handler=<optimized out>, kw_splat=<optimized out>, argv=<optimized out>, \
  argc=<optimized out>, block_handler=<optimized out>, ec=<optimized out>) at \
/builddir/build/BUILD/ruby-3.0.2/vm.c:1353 #29 vm_yield (kw_splat=0, argv=0xffffc2b0, \
argc=1, ec=0x5655afac) at /builddir/build/BUILD/ruby-3.0.2/vm.c:1398 #30 rb_yield_0 \
(argv=0xffffc2b0, argc=1) at /builddir/build/BUILD/ruby-3.0.2/vm_eval.c:1333 #31 \
rb_yield (val=<optimized out>) at /builddir/build/BUILD/ruby-3.0.2/vm_eval.c:1349 #32 \
0xf7c2ac4a in rb_ary_each (ary=<optimized out>) at \
/builddir/build/BUILD/ruby-3.0.2/array.c:2523 #33 rb_ary_each (ary=1501058480) at \
/builddir/build/BUILD/ruby-3.0.2/array.c:2517 #34 0xf7dfc835 in \
vm_call_cfunc_with_frame (ec=0x5655afac, reg_cfp=0xf77f6dfc, calling=0xffffc474) at \
/builddir/build/BUILD/ruby-3.0.2/vm_insnhelper.c:2929 #35 0xf7e00602 in \
vm_call_method_each_type (ec=0x5655afac, cfp=0xf77f6dfc, calling=0xffffc474) at \
/builddir/build/BUILD/ruby-3.0.2/vm_insnhelper.c:3419 #36 0xf7e00a46 in \
vm_call_refined (calling=<optimized out>, cfp=0xf77f6dfc, ec=0x5655afac) at \
/builddir/build/BUILD/ruby-3.0.2/vm_insnhelper.c:3398 #37 vm_call_method_each_type \
(ec=0x5655afac, cfp=0xf77f6dfc, calling=<optimized out>) at \
/builddir/build/BUILD/ruby-3.0.2/vm_insnhelper.c:3476 #38 0xf7dfdd31 in vm_sendish \
(ec=0x5655afac, reg_cfp=0xf77f6dfc, cd=0x5669f510, block_handler=4152323593, \
method_explorer=mexp_search_method) at \
/builddir/build/BUILD/ruby-3.0.2/vm_callinfo.h:336 #39 0xf7e0590a in vm_exec_core \
(ec=0x0, initial=1448732852) at /builddir/build/BUILD/ruby-3.0.2/insns.def:770 #40 \
0xf7e1d0d5 in rb_vm_exec (ec=<optimized out>, mjit_enable_p=<optimized out>) at \
/builddir/build/BUILD/ruby-3.0.2/vm.c:2172 #41 0xf7e0c3c9 in invoke_block \
(captured=<optimized out>, captured=<optimized out>, opt_pc=<optimized out>, \
type=<optimized out>, cref=0x0, self=1450588460, iseq=0x566900cc, ec=0x5655afac)  at \
/builddir/build/BUILD/ruby-3.0.2/vm_insnhelper.c:399 #42 invoke_iseq_block_from_c \
(me=0x0, is_lambda=<optimized out>, cref=0x0, passed_block_handler=0, kw_splat=0, \
argv=0xffffc720, argc=1, self=1450588460, captured=<optimized out>, ec=0x5655afac)  \
at /builddir/build/BUILD/ruby-3.0.2/vm.c:1335 #43 invoke_block_from_c_bh \
(force_blockarg=<optimized out>, is_lambda=<optimized out>, cref=<optimized out>, \
passed_block_handler=<optimized out>, kw_splat=<optimized out>, argv=<optimized out>, \
  argc=<optimized out>, block_handler=<optimized out>, ec=<optimized out>) at \
/builddir/build/BUILD/ruby-3.0.2/vm.c:1353 #44 vm_yield (kw_splat=0, argv=0xffffc720, \
argc=1, ec=0x5655afac) at /builddir/build/BUILD/ruby-3.0.2/vm.c:1398 #45 rb_yield_0 \
(argv=0xffffc720, argc=1) at /builddir/build/BUILD/ruby-3.0.2/vm_eval.c:1333 #46 \
rb_yield (val=<optimized out>) at /builddir/build/BUILD/ruby-3.0.2/vm_eval.c:1349 #47 \
0xf7c2ac4a in rb_ary_each (ary=<optimized out>) at \
                /builddir/build/BUILD/ruby-3.0.2/array.c:2523
--Type <RET> for more, q to quit, c to continue without paging--
#48 rb_ary_each (ary=1501058920) at /builddir/build/BUILD/ruby-3.0.2/array.c:2517
#49 0xf7dfc835 in vm_call_cfunc_with_frame (ec=0x5655afac, reg_cfp=0xf77f6ec0, \
calling=0xffffc8e4) at /builddir/build/BUILD/ruby-3.0.2/vm_insnhelper.c:2929 #50 \
0xf7e00602 in vm_call_method_each_type (ec=0x5655afac, cfp=0xf77f6ec0, \
calling=0xffffc8e4) at /builddir/build/BUILD/ruby-3.0.2/vm_insnhelper.c:3419 #51 \
0xf7e00a46 in vm_call_refined (calling=<optimized out>, cfp=0xf77f6ec0, \
ec=0x5655afac) at /builddir/build/BUILD/ruby-3.0.2/vm_insnhelper.c:3398 #52 \
vm_call_method_each_type (ec=0x5655afac, cfp=0xf77f6ec0, calling=<optimized out>) at \
/builddir/build/BUILD/ruby-3.0.2/vm_insnhelper.c:3476 #53 0xf7dfdd31 in vm_sendish \
(ec=0x5655afac, reg_cfp=0xf77f6ec0, cd=0x566cbca0, block_handler=4152323789, \
method_explorer=mexp_search_method) at \
/builddir/build/BUILD/ruby-3.0.2/vm_callinfo.h:336 #54 0xf7e0590a in vm_exec_core \
(ec=0x0, initial=1448732852) at /builddir/build/BUILD/ruby-3.0.2/insns.def:770 #55 \
0xf7e1d0d5 in rb_vm_exec (ec=<optimized out>, mjit_enable_p=<optimized out>) at \
/builddir/build/BUILD/ruby-3.0.2/vm.c:2172 #56 0xf7e1da4e in rb_iseq_eval \
(iseq=0x5657ad18) at /builddir/build/BUILD/ruby-3.0.2/vm.c:2409 #57 0xf7cdb23e in \
load_iseq_eval (ec=0x5655afac, fname=<optimized out>) at \
/builddir/build/BUILD/ruby-3.0.2/load.c:594 #58 0xf7ce0ef8 in require_internal \
(ec=<optimized out>, fname=<optimized out>, exception=<optimized out>) at \
/builddir/build/BUILD/ruby-3.0.2/load.c:1065 #59 0xf7ce10ce in rb_require_string \
(fname=1448587920) at /builddir/build/BUILD/ruby-3.0.2/load.c:1142 #60 0xf7ce117c in \
rb_f_require_relative (obj=1448845900, fname=1448588380) at \
/builddir/build/BUILD/ruby-3.0.2/load.c:857 #61 0xf7dfc835 in \
vm_call_cfunc_with_frame (ec=0x5655afac, reg_cfp=0xf77f6fd8, calling=0xffffce04) at \
/builddir/build/BUILD/ruby-3.0.2/vm_insnhelper.c:2929 #62 0xf7e00602 in \
vm_call_method_each_type (ec=0x5655afac, cfp=0xf77f6fd8, calling=0xffffce04) at \
/builddir/build/BUILD/ruby-3.0.2/vm_insnhelper.c:3419 #63 0xf7dfdd31 in vm_sendish \
(ec=0x5655afac, reg_cfp=0xf77f6fd8, cd=0x56616828, block_handler=0, \
method_explorer=mexp_search_method) at \
/builddir/build/BUILD/ruby-3.0.2/vm_callinfo.h:336 #64 0xf7e04d92 in vm_exec_core \
(ec=0x0, initial=1448732852) at /builddir/build/BUILD/ruby-3.0.2/insns.def:789 #65 \
0xf7e1d0d5 in rb_vm_exec (ec=<optimized out>, mjit_enable_p=<optimized out>) at \
/builddir/build/BUILD/ruby-3.0.2/vm.c:2172 #66 0xf7e1db19 in rb_iseq_eval_main \
(iseq=0x5657b63c) at /builddir/build/BUILD/ruby-3.0.2/vm.c:2420 #67 0xf7c91b99 in \
rb_ec_exec_node (ec=ec@entry=0x5655afac, n=n@entry=0x5657b63c) at \
/builddir/build/BUILD/ruby-3.0.2/eval.c:317 #68 0xf7c964fa in ruby_run_node \
(n=0x5657b63c) at /builddir/build/BUILD/ruby-3.0.2/eval.c:375 #69 0x56556143 in main \
(argc=<optimized out>, argv=<optimized out>) at ./main.c:50 ~~~

Unfortunately:

1) I don' have better reproducer then to run the whole test suite and even then it is \
not triggered always. I was not successful to hit the issue running just the single \
test case or the test file. 2) I have failed to reproduce this on CentOS Stream 9, \
which is surprising.

Luckily, I can reproduce it on my system.

This is seems to be related to LTO, because I have never faced such issue with LTO \
disabled.



-- 
https://bugs.ruby-lang.org/

Unsubscribe: <mailto:ruby-core-request@ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic