From: xtkoba+ruby@... Date: 2021-03-05T01:38:51+00:00 Subject: [ruby-core:102737] [Ruby master Bug#16810] ruby segfaults on s390x with musl libc Issue #16810 has been updated by xtkoba (Tee KOBAYASHI). I cannot reproduce this issue with mruby-2.1.0 + ruby-2.7.1p83 on my QEMU user emulated environment. Is it still reproducible with the latest toolchain and libucontext? Of course it might be a case that it reproduces only on native environments, which I do not have access to. ---------------------------------------- Bug #16810: ruby segfaults on s390x with musl libc https://bugs.ruby-lang.org/issues/16810#change-90745 * Author: ncopa (Natanael Copa) * Status: Open * Priority: Normal * ruby -v: ruby 2.7.1p83 (2020-03-31 revision a0c7c23c9c) [s390x-linux-musl] * Backport: 2.5: UNKNOWN, 2.6: UNKNOWN, 2.7: UNKNOWN ---------------------------------------- When trying to build mruby-2.1.0 ruby segfaults when running `ruby ./minirake -v`. I was able to get a backtrace with gdb: ``` Program received signal SIGSEGV, Segmentation fault. vm_call_cfunc_with_frame (empty_kw_splat=0, cd=0x2aa0009f108, calling=, reg_cfp=0x3fffd9fea70, ec=0x3fffb8d45e8) at vm_insnhelper.c:2505 2505 vm_insnhelper.c: No such file or directory. (gdb) bt #0 vm_call_cfunc_with_frame (empty_kw_splat=0, cd=0x2aa0009f108, calling=, reg_cfp=0x3fffd9fea70, ec=0x3fffb8d45e8) at vm_insnhelper.c:2505 #1 vm_call_cfunc (ec=0x3fffb8d45e8, reg_cfp=0x3fffd9fea70, calling=, cd=0x2aa0009f108) at vm_insnhelper.c:2539 #2 0x000003fffdd79578 in vm_call_method (ec=0x3fffb8d45e8, cfp=0x3fffd9fea70, calling=0x3ffffffb028, cd=0x2aa00583490) at vm_insnhelper.c:3026 #3 0x000003fffdd5e452 in vm_sendish (ec=0x3fffb8d45e8, ec@entry=, reg_cfp=reg_cfp@entry=0x3fffd9fea70, cd=0x2aa00583490, block_handler=block_handler@entry=0, method_explorer=method_explorer@entry=0x3fffdd66568 ) at vm_insnhelper.c:4023 #4 0x000003fffdd6e0a2 in vm_exec_core (ec=, ec@entry=0x0, initial=initial@entry=0) at insns.def:801 #5 0x000003fffdd71fc8 in rb_vm_exec (ec=ec@entry=0x2aa00002a50, mjit_enable_p=mjit_enable_p@entry=1) at vm.c:1929 #6 0x000003fffdd72810 in invoke_block (ec=ec@entry=0x2aa00002a50, iseq=iseq@entry=0x2aa00585f50, self=self@entry=2929175261440, cref=cref@entry=0x0, type=572653569, opt_pc=0, captured=) at vm.c:1044 #7 0x000003fffdd729a8 in invoke_iseq_block_from_c (me=0x0, is_lambda=, cref=0x0, passed_block_handler=4398011476064, kw_splat=-17920, argv=0x3ffffffb5b8, argc=1, self=2929175261440, captured=0x3fffd9feb30, ec=0x2aa00002a50) at vm.c:1116 #8 invoke_block_from_c_bh (ec=ec@entry=0x2aa00002a50, block_handler=, argc=argc@entry=1, argv=argv@entry=0x3ffffffb5b8, kw_splat=kw_splat@entry=0, passed_block_handler=0, cref=0x0, is_lambda=, force_blockarg=0) at vm.c:1134 #9 0x000003fffdd73152 in vm_yield (kw_splat=0, argv=0x3ffffffb5b8, argc=1, ec=0x2aa00002a50) at vm.c:1179 #10 rb_yield_0 (argc=argc@entry=1, argv=argv@entry=0x3ffffffb5b8) at vm_eval.c:1227 #11 0x000003fffdd73184 in rb_yield_1 (val=) at vm_eval.c:1233 #12 0x000003fffdd731bc in rb_yield (val=) at vm_eval.c:1243 #13 0x000003fffdbbb6a0 in rb_ary_each (ary=2929175260720) at array.c:2135 #14 0x000003fffdd6376a in vm_call_cfunc_with_frame (empty_kw_splat=, cd=0x2aa0008e678, calling=, reg_cfp=0x3fffd9feae0, ec=0x2aa00002a50) at vm_insnhelper.c:2514 #15 vm_call_cfunc (ec=0x2aa00002a50, reg_cfp=0x3fffd9feae0, calling=, cd=0x2aa0008e678) at vm_insnhelper.c:2539 #16 0x000003fffdd79578 in vm_call_method (ec=0x2aa00002a50, cfp=0x3fffd9feae0, calling=0x3ffffffb8e8, cd=0x2aa00583aa0) at vm_insnhelper.c:3026 #17 0x000003fffdd5e452 in vm_sendish (ec=0x2aa00002a50, ec@entry=, reg_cfp=reg_cfp@entry=0x3fffd9feae0, cd=cd@entry=0x2aa00583aa0, block_handler=, method_explorer=method_explorer@entry=0x3fffdd66568 ) at vm_insnhelper.c:4023 #18 0x000003fffdd701c8 in vm_exec_core (ec=, ec@entry=0x0, initial=initial@entry=0) at insns.def:782 #19 0x000003fffdd71fc8 in rb_vm_exec (ec=ec@entry=0x2aa00002a50, mjit_enable_p=mjit_enable_p@entry=1) at vm.c:1929 #20 0x000003fffdd72810 in invoke_block (ec=ec@entry=0x2aa00002a50, iseq=iseq@entry=0x2aa00586180, self=self@entry=2929173767640, cref=cref@entry=0x0, type=572653569, opt_pc=0, captured=) at vm.c:1044 #21 0x000003fffdd729a8 in invoke_iseq_block_from_c (me=0x0, is_lambda=, cref=0x0, passed_block_handler=4398011476064, kw_splat=-15680, argv=0x3ffffffbe78, argc=1, self=2929173767640, captured=0x3fffd9febd8, ec=0x2aa00002a50) at vm.c:1116 #22 invoke_block_from_c_bh (ec=ec@entry=0x2aa00002a50, block_handler=, argc=argc@entry=1, argv=argv@entry=0x3ffffffbe78, kw_splat=kw_splat@entry=0, passed_block_handler=0, cref=0x0, is_lambda=, force_blockarg=0) at vm.c:1134 #23 0x000003fffdd73152 in vm_yield (kw_splat=0, argv=0x3ffffffbe78, argc=1, ec=0x2aa00002a50) at vm.c:1179 #24 rb_yield_0 (argc=argc@entry=1, argv=argv@entry=0x3ffffffbe78) at vm_eval.c:1227 #25 0x000003fffdd73184 in rb_yield_1 (val=) at vm_eval.c:1233 #26 0x000003fffdd731bc in rb_yield (val=) at vm_eval.c:1243 #27 0x000003fffdbbe7aa in rb_ary_collect (ary=2929173762560) at array.c:3065 #28 0x000003fffdd6376a in vm_call_cfunc_with_frame (empty_kw_splat=, cd=0x2aa0008e678, calling=, reg_cfp=0x3fffd9febc0, ec=0x2aa00002a50) at vm_insnhelper.c:2514 #29 vm_call_cfunc (ec=0x2aa00002a50, reg_cfp=0x3fffd9febc0, calling=, cd=0x2aa0008e678) at vm_insnhelper.c:2539 #30 0x000003fffdd79578 in vm_call_method (ec=0x2aa00002a50, cfp=0x3fffd9febc0, calling=0x3ffffffc1a8, cd=0x2aa00596980) at vm_insnhelper.c:3026 #31 0x000003fffdd5e452 in vm_sendish (ec=0x2aa00002a50, ec@entry=, reg_cfp=reg_cfp@entry=0x3fffd9febc0, cd=cd@entry=0x2aa00596980, block_handler=, method_explorer=method_explorer@entry=0x3fffdd66568 ) at vm_insnhelper.c:4023 #32 0x000003fffdd701c8 in vm_exec_core (ec=, ec@entry=0x0, initial=initial@entry=0) at insns.def:782 #33 0x000003fffdd71fc8 in rb_vm_exec (ec=ec@entry=0x2aa00002a50, mjit_enable_p=mjit_enable_p@entry=1) at vm.c:1929 #34 0x000003fffdd72810 in invoke_block (ec=ec@entry=0x2aa00002a50, iseq=iseq@entry=0x2aa00585460, self=self@entry=2929173439960, cref=cref@entry=0x0, type=572653569, opt_pc=0, captured=) at vm.c:1044 #35 0x000003fffdd729a8 in invoke_iseq_block_from_c (me=0x0, is_lambda=, cref=0x0, passed_block_handler=4398008493928, kw_splat=-13696, argv=0x3ffffffc738, argc=1, self=2929173439960, captured=0x3fffd9fec80, ec=0x2aa00002a50) at vm.c:1116 #36 invoke_block_from_c_bh (ec=ec@entry=0x2aa00002a50, block_handler=, argc=argc@entry=1, argv=argv@entry=0x3ffffffc738, kw_splat=kw_splat@entry=0, passed_block_handler=0, cref=0x0, is_lambda=, force_blockarg=0) at vm.c:1134 #37 0x000003fffdd73152 in vm_yield (kw_splat=0, argv=0x3ffffffc738, argc=1, ec=0x2aa00002a50) at vm.c:1179 #38 rb_yield_0 (argc=argc@entry=1, argv=argv@entry=0x3ffffffc738) at vm_eval.c:1227 #39 0x000003fffdd73184 in rb_yield_1 (val=) at vm_eval.c:1233 #40 0x000003fffdd731bc in rb_yield (val=) at vm_eval.c:1243 #41 0x000003fffdbbb6a0 in rb_ary_each (ary=2929173764040) at array.c:2135 #42 0x000003fffdd6376a in vm_call_cfunc_with_frame (empty_kw_splat=, cd=0x3fffddc49c8, calling=, reg_cfp=0x3fffd9fec68, ec=0x2aa00002a50) at vm_insnhelper.c:2514 #43 vm_call_cfunc (ec=0x2aa00002a50, reg_cfp=0x3fffd9fec68, calling=, cd=0x3fffddc49c8) at vm_insnhelper.c:2539 #44 0x000003fffdd5e452 in vm_sendish (ec=0x2aa00002a50, ec@entry=, reg_cfp=reg_cfp@entry=0x3fffd9fec68, cd=cd@entry=0x2aa005a0270, block_handler=, method_explorer=method_explorer@entry=0x3fffdd66568 ) at vm_insnhelper.c:4023 #45 0x000003fffdd701c8 in vm_exec_core (ec=, ec@entry=0x0, initial=initial@entry=0) at insns.def:782 #46 0x000003fffdd71fc8 in rb_vm_exec (ec=ec@entry=0x2aa00002a50, mjit_enable_p=mjit_enable_p@entry=1) at vm.c:1929 #47 0x000003fffdd72810 in invoke_block (ec=ec@entry=0x2aa00002a50, iseq=iseq@entry=0x2aa005854b0, self=self@entry=2929173439960, cref=cref@entry=0x0, type=572653569, opt_pc=0, captured=) at vm.c:1044 #48 0x000003fffdd729a8 in invoke_iseq_block_from_c (me=0x0, is_lambda=, cref=0x0, passed_block_handler=4393751543814, kw_splat=-11712, argv=0x3ffffffcef8, argc=1, self=2929173439960, captured=0x3fffd9fed28, ec=0x2aa00002a50) at vm.c:1116 #49 invoke_block_from_c_bh (ec=ec@entry=0x2aa00002a50, block_handler=, argc=argc@entry=1, argv=argv@entry=0x3ffffffcef8, kw_splat=kw_splat@entry=0, passed_block_handler=0, cref=0x0, is_lambda=, force_blockarg=0) at vm.c:1134 #50 0x000003fffdd73152 in vm_yield (kw_splat=0, argv=0x3ffffffcef8, argc=1, ec=0x2aa00002a50) at vm.c:1179 #51 rb_yield_0 (argc=argc@entry=1, argv=argv@entry=0x3ffffffcef8) at vm_eval.c:1227 #52 0x000003fffdd73184 in rb_yield_1 (val=) at vm_eval.c:1233 #53 0x000003fffdd731bc in rb_yield (val=) at vm_eval.c:1243 #54 0x000003fffdbbb6a0 in rb_ary_each (ary=2929173439920) at array.c:2135 #55 0x000003fffdd6376a in vm_call_cfunc_with_frame (empty_kw_splat=, cd=0x72720f9fffc06371, calling=, reg_cfp=0x3fffd9fecd8, ec=0x2aa00002a50) at vm_insnhelper.c:2514 #56 vm_call_cfunc (ec=0x2aa00002a50, reg_cfp=0x3fffd9fecd8, calling=, cd=0x72720f9fffc06371) at vm_insnhelper.c:2539 #57 0x000003fffdd5e452 in vm_sendish (ec=0x2aa00002a50, ec@entry=, reg_cfp=reg_cfp@entry=0x3fffd9fecd8, cd=cd@entry=0x2aa0058b2c0, block_handler=, method_explorer=method_explorer@entry=0x3fffdd66568 ) at vm_insnhelper.c:4023 #58 0x000003fffdd701c8 in vm_exec_core (ec=, ec@entry=0x0, initial=initial@entry=0) at insns.def:782 #59 0x000003fffdd71fc8 in rb_vm_exec (ec=ec@entry=0x2aa00002a50, mjit_enable_p=mjit_enable_p@entry=1) at vm.c:1929 #60 0x000003fffdd72810 in invoke_block (ec=ec@entry=0x2aa00002a50, iseq=iseq@entry=0x2aa003d72f8, self=self@entry=2929171614160, cref=cref@entry=0x2aa003d5278, type=572653569, opt_pc=0, captured=) at vm.c:1044 #61 0x000003fffdd729a8 in invoke_iseq_block_from_c (me=0x0, is_lambda=, cref=0x2aa003d5278, passed_block_handler=2929171614160, kw_splat=5743888, argv=0x3ffffffd6f8, argc=1, self=2929171614160, captured=0x3ffffffd630, ec=0x2aa00002a50) at vm.c:1116 #62 invoke_block_from_c_bh (ec=ec@entry=0x2aa00002a50, block_handler=, argc=, argv=0x3ffffffd6f8, kw_splat=kw_splat@entry=0, passed_block_handler=0, cref=0x2aa003d5278, is_lambda=, force_blockarg=0) at vm.c:1134 #63 0x000003fffdd72f2c in vm_yield_with_cref (is_lambda=, cref=0x2aa003d5278, kw_splat=, argv=, argc=, ec=0x2aa00002a50) at vm.c:1171 #64 yield_under (under=under@entry=2929173439760, self=2929171614160, argc=, argc@entry=1, argv=, argv@entry=0x3ffffffd6f8, kw_splat=, kw_splat@entry=3) at vm_eval.c:1879 #65 0x000003fffdd7a0a4 in specific_eval (argc=argc@entry=0, argv=argv@entry=0x3fffd8ff1c0, klass=2929173439760, self=, self@entry=2929171614160, kw_splat=kw_splat@entry=3) at vm_eval.c:1920 #66 0x000003fffdd7a2a0 in rb_obj_instance_eval_internal (argc=, argv=0x3fffd8ff1c0, self=2929171614160) at vm_eval.c:1993 #67 0x000003fffdd6376a in vm_call_cfunc_with_frame (empty_kw_splat=, cd=0x0, calling=, reg_cfp=0x3fffd9fedf0, ec=0x2aa00002a50) at vm_insnhelper.c:2514 #68 vm_call_cfunc (ec=0x2aa00002a50, reg_cfp=0x3fffd9fedf0, calling=, cd=0x0) at vm_insnhelper.c:2539 #69 0x000003fffdd5e452 in vm_sendish (ec=0x2aa00002a50, ec@entry=, reg_cfp=reg_cfp@entry=0x3fffd9fedf0, cd=cd@entry=0x2aa00480360, block_handler=, method_explorer=method_explorer@entry=0x3fffdd66568 ) at vm_insnhelper.c:4023 #70 0x000003fffdd701c8 in vm_exec_core (ec=, ec@entry=0x0, initial=initial@entry=0) at insns.def:782 #71 0x000003fffdd71fc8 in rb_vm_exec (ec=ec@entry=0x2aa00002a50, mjit_enable_p=mjit_enable_p@entry=1) at vm.c:1929 #72 0x000003fffdd72810 in invoke_block (ec=ec@entry=0x2aa00002a50, iseq=iseq@entry=0x2aa003e9f70, self=self@entry=2929172774640, cref=cref@entry=0x0, type=572653569, opt_pc=0, captured=) at vm.c:1044 #73 0x000003fffdd729a8 in invoke_iseq_block_from_c (me=0x0, is_lambda=, cref=0x0, passed_block_handler=4398011476064, kw_splat=224568, argv=0x3ffffffded8, argc=2, self=2929172774640, captured=0x3fffd9fee78, ec=0x2aa00002a50) at vm.c:1116 #74 invoke_block_from_c_bh (ec=ec@entry=0x2aa00002a50, block_handler=, argc=argc@entry=2, argv=argv@entry=0x3ffffffded8, kw_splat=kw_splat@entry=0, passed_block_handler=0, cref=0x0, is_lambda=, force_blockarg=0) at vm.c:1134 #75 0x000003fffdd73152 in vm_yield (kw_splat=0, argv=0x3ffffffded8, argc=2, ec=0x2aa00002a50) at vm.c:1179 #76 rb_yield_0 (argc=, argv=argv@entry=0x3ffffffded8) at vm_eval.c:1227 #77 0x000003fffdd732c2 in rb_yield_values2 (argc=argc@entry=2, argv=argv@entry=0x3ffffffded8) at vm_eval.c:1273 #78 0x000003fffdc4175e in each_pair_i_fast (key=, value=, _=) at hash.c:3057 #79 0x000003fffdc42eb2 in hash_ar_foreach_iter (error=0, argp=4398046503384, value=, key=) at hash.c:1337 #80 ar_foreach_check (func=, never=52, arg=4398046503384, hash=2929171613960) at hash.c:962 #81 hash_foreach_call (arg=4398046503384) at hash.c:1485 #82 0x000003fffdc252dc in rb_ensure (b_proc=0x3fffdc2531e , b_proc@entry=0x3fffdc42de8 , data1=4398046503160, data1@entry=4398046503384, e_proc=e_proc@entry=0x3fffdc41008 , data2=data2@entry=2929171613960) at eval.c:1129 #83 0x000003fffdc44be2 in rb_hash_foreach (farg=0, func=0x3fffdc41720 , hash=2929171613960) at hash.c:1509 #84 rb_hash_foreach (hash=2929171613960, func=0x3fffdc41720 , farg=0) at hash.c:1499 #85 0x000003fffdc455e2 in rb_hash_each_pair (hash=) at hash.c:3088 #86 rb_hash_each_pair (hash=2929171613960) at hash.c:3084 #87 0x000003fffdd6376a in vm_call_cfunc_with_frame (empty_kw_splat=, cd=0x3fffdfa4828, calling=, reg_cfp=0x3fffd9fee60, ec=0x2aa00002a50) at vm_insnhelper.c:2514 #88 vm_call_cfunc (ec=0x2aa00002a50, reg_cfp=0x3fffd9fee60, calling=, cd=0x3fffdfa4828) at vm_insnhelper.c:2539 #89 0x000003fffdd5e452 in vm_sendish (ec=0x2aa00002a50, ec@entry=, reg_cfp=reg_cfp@entry=0x3fffd9fee60, cd=cd@entry=0x2aa00477d80, block_handler=, method_explorer=method_explorer@entry=0x3fffdd66568 ) at vm_insnhelper.c:4023 #90 0x000003fffdd701c8 in vm_exec_core (ec=, ec@entry=0x0, initial=initial@entry=0) at insns.def:782 #91 0x000003fffdd71fc8 in rb_vm_exec (ec=, mjit_enable_p=mjit_enable_p@entry=1) at vm.c:1929 #92 0x000003fffdd7a5fa in rb_iseq_eval (iseq=iseq@entry=0x2aa003d7348) at vm.c:2168 #93 0x000003fffdc6907a in load_iseq_eval (ec=0x2aa00002a50, fname=2929171806840) at load.c:585 #94 0x000003fffdc692d0 in rb_load_internal (fname=, wrap=) at load.c:643 #95 0x000003fffdc69fce in rb_f_load (argc=, argv=, _=) at load.c:701 #96 0x000003fffdd6376a in vm_call_cfunc_with_frame (empty_kw_splat=, cd=0x2aa000bce88, calling=, reg_cfp=0x3fffd9fef08, ec=0x2aa00002a50) at vm_insnhelper.c:2514 #97 vm_call_cfunc (ec=0x2aa00002a50, reg_cfp=0x3fffd9fef08, calling=, cd=0x2aa000bce88) at vm_insnhelper.c:2539 #98 0x000003fffdd79578 in vm_call_method (ec=0x2aa00002a50, cfp=0x3fffd9fef08, calling=0x3ffffffec10, cd=0x2aa004c67f0) at vm_insnhelper.c:3026 #99 0x000003fffdd5e452 in vm_sendish (ec=0x2aa00002a50, ec@entry=, reg_cfp=reg_cfp@entry=0x3fffd9fef08, cd=0x2aa004c67f0, block_handler=block_handler@entry=0, method_explorer=method_explorer@entry=0x3fffdd66568 ) at vm_insnhelper.c:4023 #100 0x000003fffdd6e0a2 in vm_exec_core (ec=, ec@entry=0x0, initial=initial@entry=0) at insns.def:801 #101 0x000003fffdd71fc8 in rb_vm_exec (ec=, mjit_enable_p=mjit_enable_p@entry=1) at vm.c:1929 #102 0x000003fffdd7a5fa in rb_iseq_eval (iseq=iseq@entry=0x2aa0006f228) at vm.c:2168 #103 0x000003fffdc6907a in load_iseq_eval (ec=0x2aa00002a50, fname=2929169827160) at load.c:585 #104 0x000003fffdc692d0 in rb_load_internal (fname=, wrap=) at load.c:643 #105 0x000003fffdc69fce in rb_f_load (argc=, argv=, _=) at load.c:701 #106 0x000003fffdd6376a in vm_call_cfunc_with_frame (empty_kw_splat=, cd=0x2aa000bce88, calling=, reg_cfp=0x3fffd9fef78, ec=0x2aa00002a50) at vm_insnhelper.c:2514 #107 vm_call_cfunc (ec=0x2aa00002a50, reg_cfp=0x3fffd9fef78, calling=, cd=0x2aa000bce88) at vm_insnhelper.c:2539 #108 0x000003fffdd79578 in vm_call_method (ec=0x2aa00002a50, cfp=0x3fffd9fef78, calling=0x3fffffff400, cd=0x2aa0045d590) at vm_insnhelper.c:3026 #109 0x000003fffdd5e452 in vm_sendish (ec=0x2aa00002a50, ec@entry=, reg_cfp=reg_cfp@entry=0x3fffd9fef78, cd=0x2aa0045d590, block_handler=block_handler@entry=0, method_explorer=method_explorer@entry=0x3fffdd66568 ) at vm_insnhelper.c:4023 #110 0x000003fffdd6e0a2 in vm_exec_core (ec=, ec@entry=0x0, initial=initial@entry=0) at insns.def:801 #111 0x000003fffdd71fc8 in rb_vm_exec (ec=, mjit_enable_p=mjit_enable_p@entry=1) at vm.c:1929 #112 0x000003fffdd7a6d2 in rb_iseq_eval_main (iseq=iseq@entry=0x0) at vm.c:2179 #113 0x000003fffdc22672 in rb_ec_exec_node (ec=ec@entry=0x2aa00002a50, n=n@entry=0x2aa0007d418) at eval.c:278 #114 0x000003fffdc26f5c in ruby_run_node (n=0x2aa0007d418) at eval.c:336 #115 0x000002aa00000994 in main (argc=, argv=) at ./main.c:50 ``` This ruby build was built with [libucontext](https://github.com/kaniini/libucontext/), and ruby's testsuite passed (which it didn't with --with-coroutines=copy. see #16809) -- https://bugs.ruby-lang.org/ Unsubscribe: