Project

General

Profile

Bug #17583

Segfault on large stack(RUBY_THREAD_VM_STACK_SIZE)

Added by yoshiokatsuneo (Tsuneo Yoshioka) about 1 month ago. Updated 5 days ago.

Status:
Assigned
Priority:
Normal
Target version:
-
ruby -v:
ruby 3.0.0p0 (2020-12-25 revision 95aff21468) [x86_64-linux]
[ruby-core:102249]

Description

When I set large stack size like 100MB using RUBY_THREAD_VM_STACK_SIZE,
I get the segmentation fault.
The error looks happens when RUBY_THREAD_VM_STACK_SIZE is larger than around 17MB.

How to reproduce:

$ RUBY_THREAD_VM_STACK_SIZE=17000000 ruby -e ''  

Output:

# RUBY_THREAD_VM_STACK_SIZE=17000000 ruby -e ''  
/usr/local/rbenv/versions/3.0.0/lib/ruby/3.0.0/x86_64-linux/enc/encdb.so: [BUG] Segmentation fault at 0x0000000000000048
ruby 3.0.0p0 (2020-12-25 revision 95aff21468) [x86_64-linux]

-- Control frame information -----------------------------------------------
c:0002 p:-972860 s:0006 e:000005 TOP    [FINISH]
c:0001 p:0000 s:0003 E:0008e0 (none) [FINISH]


-- Machine register context ------------------------------------------------
 RIP: 0x00007f9a84541143 RBP: 0x0000000000000051 RSP: 0x00007ffca756efe8
 RAX: 0x0000000000000000 RBX: 0x000000000070bf98 RCX: 0x000000000000080c
 RDX: 0x0000000000000000 RDI: 0x000000000070bf98 RSI: 0x0000000000000000
  R8: 0x0000000000000000  R9: 0xd0f4b751468f8b02 R10: 0x0000000000000000
 R11: 0x3f3c0feefeb77f71 R12: 0x0000000000773a00 R13: 0x00000000006cc8f0
 R14: 0x000000000070bf98 R15: 0x00000000000000f3 EFL: 0x0000000000010202

-- C level backtrace information -------------------------------------------
/usr/local/rbenv/versions/3.0.0/lib/libruby.so.3.0(rb_print_backtrace+0x14) [0x7f9a8478c33f] vm_dump.c:758
/usr/local/rbenv/versions/3.0.0/lib/libruby.so.3.0(rb_vm_bugreport) vm_dump.c:998
/usr/local/rbenv/versions/3.0.0/lib/libruby.so.3.0(bug_report_end+0x0) [0x7f9a845b0d73] error.c:786
/usr/local/rbenv/versions/3.0.0/lib/libruby.so.3.0(rb_bug_for_fatal_signal) error.c:786
/usr/local/rbenv/versions/3.0.0/lib/libruby.so.3.0(sigsegv+0x51) [0x7f9a846e5e71] signal.c:960
/lib/x86_64-linux-gnu/libpthread.so.0(__restore_rt+0x0) [0x7f9a844933c0] ../sysdeps/pthread/funlockfile.c:28
/usr/local/rbenv/versions/3.0.0/lib/libruby.so.3.0(rb_freeze_singleton_class+0x13) [0x7f9a84541143] class.c:1865
/usr/local/rbenv/versions/3.0.0/lib/libruby.so.3.0(rb_obj_freeze_inline+0x23) [0x7f9a84651934] ./include/ruby/internal/fl_type.h:466
/usr/local/rbenv/versions/3.0.0/lib/libruby.so.3.0(rb_obj_freeze) object.c:1281
/usr/local/rbenv/versions/3.0.0/lib/libruby.so.3.0(rbimpl_fl_set_raw_raw+0x0) [0x7f9a845999ae] encoding.c:125
/usr/local/rbenv/versions/3.0.0/lib/libruby.so.3.0(RB_FL_SET_RAW) ./include/ruby/internal/fl_type.h:298
/usr/local/rbenv/versions/3.0.0/lib/libruby.so.3.0(enc_new) encoding.c:126
/usr/local/rbenv/versions/3.0.0/lib/libruby.so.3.0(enc_list_update) encoding.c:137
/usr/local/rbenv/versions/3.0.0/lib/libruby.so.3.0(enc_register_at) encoding.c:392
/usr/local/rbenv/versions/3.0.0/lib/libruby.so.3.0(rb_encdb_replicate+0xc9bd8) [0x7f9a8459a605]
/usr/local/rbenv/versions/3.0.0/lib/libruby.so.3.0(rb_encdb_replicate) encoding.c:612
/usr/local/rbenv/versions/3.0.0/lib/ruby/3.0.0/x86_64-linux/enc/encdb.so(Init_encdb+0x5c1) [0x7f9a844cb731] ./encdb.h:101
/usr/local/rbenv/versions/3.0.0/lib/ruby/3.0.0/x86_64-linux/enc/encdb.so(Init_encdb) (null):0
/usr/local/rbenv/versions/3.0.0/lib/libruby.so.3.0(dln_load+0xf8) [0x7f9a84505588] dln.c:1374
/usr/local/rbenv/versions/3.0.0/lib/libruby.so.3.0(rb_vm_call_cfunc+0x11a) [0x7f9a84775b6a] vm.c:2466
/usr/local/rbenv/versions/3.0.0/lib/libruby.so.3.0(require_internal+0x3ae) [0x7f9a846155ee] load.c:1071
/usr/local/rbenv/versions/3.0.0/lib/libruby.so.3.0(ruby_require_internal+0x45) [0x7f9a84615845] load.c:1133
/usr/local/rbenv/versions/3.0.0/lib/libruby.so.3.0(Init_enc+0x12) [0x7f9a847993a2] dmyenc.c:7
/usr/local/rbenv/versions/3.0.0/lib/libruby.so.3.0(process_options+0x20e59b) [0x7f9a846de2f6] ruby.c:1840
/usr/local/rbenv/versions/3.0.0/lib/libruby.so.3.0(ruby_process_options) ruby.c:2571
/usr/local/rbenv/versions/3.0.0/lib/libruby.so.3.0(ruby_options+0x1a2) [0x7f9a845bb862] eval.c:138
/usr/local/rbenv/versions/3.0.0/bin/ruby(main+0x55) [0x4011e5] ./main.c:50

-- Other runtime information -----------------------------------------------

* Loaded script: ruby

* Loaded features:

    0 enumerator.so
    1 thread.rb
    2 rational.so
    3 complex.so
    4 ruby2_keywords.rb

* Process memory map:

00400000-00401000 r--p 00000000 fe:01 5111                               /usr/local/rbenv/versions/3.0.0/bin/ruby
00401000-00402000 r-xp 00001000 fe:01 5111                               /usr/local/rbenv/versions/3.0.0/bin/ruby
00402000-00403000 r--p 00002000 fe:01 5111                               /usr/local/rbenv/versions/3.0.0/bin/ruby
00403000-00404000 r--p 00002000 fe:01 5111                               /usr/local/rbenv/versions/3.0.0/bin/ruby
00404000-00405000 rw-p 00003000 fe:01 5111                               /usr/local/rbenv/versions/3.0.0/bin/ruby
0064b000-00790000 rw-p 00000000 00:00 0                                  [heap]
7f9a7d5e7000-7f9a7e679000 r--s 00000000 fe:01 942375                     /usr/lib/debug/lib/x86_64-linux-gnu/libc-2.31.so
7f9a7e679000-7f9a7e869000 r--s 00000000 fe:01 3310011                    /usr/lib/x86_64-linux-gnu/libc-2.31.so
7f9a7e869000-7f9a7eadd000 r--s 00000000 fe:01 942368                     /usr/lib/debug/.build-id/4f/c5fc33f4429136a494c640b113d76f610e4abc.debug
7f9a7eadd000-7f9a7eb04000 r--s 00000000 fe:01 3310068                    /usr/lib/x86_64-linux-gnu/libpthread-2.31.so
7f9a7eb04000-7f9a7f2dc000 rw-p 00000000 00:00 0 
7f9a7f2dc000-7f9a7fb5a000 r--s 00000000 fe:01 9797                       /usr/local/rbenv/versions/3.0.0/lib/libruby.so.3.0.0
7f9a7fb5a000-7f9a7fb5d000 r--p 00000000 fe:01 655755                     /usr/lib/x86_64-linux-gnu/libgcc_s.so.1
7f9a7fb5d000-7f9a7fb6f000 r-xp 00003000 fe:01 655755                     /usr/lib/x86_64-linux-gnu/libgcc_s.so.1
7f9a7fb6f000-7f9a7fb73000 r--p 00015000 fe:01 655755                     /usr/lib/x86_64-linux-gnu/libgcc_s.so.1
7f9a7fb73000-7f9a7fb74000 r--p 00018000 fe:01 655755                     /usr/lib/x86_64-linux-gnu/libgcc_s.so.1
7f9a7fb74000-7f9a7fb75000 rw-p 00019000 fe:01 655755                     /usr/lib/x86_64-linux-gnu/libgcc_s.so.1
7f9a7fb87000-7f9a7fb88000 ---p 00000000 00:00 0 
7f9a7fb88000-7f9a7fc29000 rw-p 00000000 00:00 0 
7f9a7fc29000-7f9a7fc2a000 ---p 00000000 00:00 0 
7f9a7fc2a000-7f9a7fccb000 rw-p 00000000 00:00 0 
7f9a7fccb000-7f9a7fccc000 ---p 00000000 00:00 0 
7f9a7fccc000-7f9a7fd6d000 rw-p 00000000 00:00 0 
7f9a7fd6d000-7f9a7fd6e000 ---p 00000000 00:00 0 
7f9a7fd6e000-7f9a7fe0f000 rw-p 00000000 00:00 0 
7f9a7fe0f000-7f9a7fe10000 ---p 00000000 00:00 0 
7f9a7fe10000-7f9a7feb1000 rw-p 00000000 00:00 0 
7f9a7feb1000-7f9a7feb2000 ---p 00000000 00:00 0 
7f9a7feb2000-7f9a7ff53000 rw-p 00000000 00:00 0 
7f9a7ff53000-7f9a7ff54000 ---p 00000000 00:00 0 
7f9a7ff54000-7f9a7fff5000 rw-p 00000000 00:00 0 
7f9a7fff5000-7f9a7fff6000 ---p 00000000 00:00 0 
7f9a7fff6000-7f9a80097000 rw-p 00000000 00:00 0 
7f9a80097000-7f9a80098000 ---p 00000000 00:00 0 
7f9a80098000-7f9a80139000 rw-p 00000000 00:00 0 
7f9a80139000-7f9a8013a000 ---p 00000000 00:00 0 
7f9a8013a000-7f9a801db000 rw-p 00000000 00:00 0 
7f9a801db000-7f9a801dc000 ---p 00000000 00:00 0 
7f9a801dc000-7f9a8027d000 rw-p 00000000 00:00 0 
7f9a8027d000-7f9a8027e000 ---p 00000000 00:00 0 
7f9a8027e000-7f9a8031f000 rw-p 00000000 00:00 0 
7f9a8031f000-7f9a80320000 ---p 00000000 00:00 0 
7f9a80320000-7f9a803c1000 rw-p 00000000 00:00 0 
7f9a803c1000-7f9a803c2000 ---p 00000000 00:00 0 
7f9a803c2000-7f9a80463000 rw-p 00000000 00:00 0 
7f9a80463000-7f9a80464000 ---p 00000000 00:00 0 
7f9a80464000-7f9a80505000 rw-p 00000000 00:00 0 
7f9a80505000-7f9a80506000 ---p 00000000 00:00 0 
7f9a80506000-7f9a805a7000 rw-p 00000000 00:00 0 
7f9a805a7000-7f9a805a8000 ---p 00000000 00:00 0 
7f9a805a8000-7f9a80649000 rw-p 00000000 00:00 0 
7f9a80649000-7f9a8064a000 ---p 00000000 00:00 0 
7f9a8064a000-7f9a806eb000 rw-p 00000000 00:00 0 
7f9a806eb000-7f9a806ec000 ---p 00000000 00:00 0 
7f9a806ec000-7f9a8078d000 rw-p 00000000 00:00 0 
7f9a8078d000-7f9a8078e000 ---p 00000000 00:00 0 
7f9a8078e000-7f9a8082f000 rw-p 00000000 00:00 0 
7f9a8082f000-7f9a80830000 ---p 00000000 00:00 0 
7f9a80830000-7f9a808d1000 rw-p 00000000 00:00 0 
7f9a808d1000-7f9a808d2000 ---p 00000000 00:00 0 
7f9a808d2000-7f9a80973000 rw-p 00000000 00:00 0 
7f9a80973000-7f9a80974000 ---p 00000000 00:00 0 
7f9a80974000-7f9a80a15000 rw-p 00000000 00:00 0 
7f9a80a15000-7f9a80a16000 ---p 00000000 00:00 0 
7f9a80a16000-7f9a80ab7000 rw-p 00000000 00:00 0 
7f9a80ab7000-7f9a80ab8000 ---p 00000000 00:00 0 
7f9a80ab8000-7f9a80b59000 rw-p 00000000 00:00 0 
7f9a80b59000-7f9a80b5a000 ---p 00000000 00:00 0 
7f9a80b5a000-7f9a80bfb000 rw-p 00000000 00:00 0 
7f9a80bfb000-7f9a80bfc000 ---p 00000000 00:00 0 
7f9a80bfc000-7f9a80c9d000 rw-p 00000000 00:00 0 
7f9a80c9d000-7f9a80c9e000 ---p 00000000 00:00 0 
7f9a80c9e000-7f9a80d3f000 rw-p 00000000 00:00 0 
7f9a80d3f000-7f9a80d40000 ---p 00000000 00:00 0 
7f9a80d40000-7f9a80de1000 rw-p 00000000 00:00 0 
7f9a80de1000-7f9a80de2000 ---p 00000000 00:00 0 
7f9a80de2000-7f9a80e83000 rw-p 00000000 00:00 0 
7f9a80e83000-7f9a80e84000 ---p 00000000 00:00 0 
7f9a80e84000-7f9a80f25000 rw-p 00000000 00:00 0 
7f9a80f25000-7f9a80f26000 ---p 00000000 00:00 0 
7f9a80f26000-7f9a8406b000 rw-p 00000000 00:00 0 
7f9a8406b000-7f9a84090000 r--p 00000000 fe:01 3310011                    /usr/lib/x86_64-linux-gnu/libc-2.31.so
7f9a84090000-7f9a84208000 r-xp 00025000 fe:01 3310011                    /usr/lib/x86_64-linux-gnu/libc-2.31.so
7f9a84208000-7f9a84252000 r--p 0019d000 fe:01 3310011                    /usr/lib/x86_64-linux-gnu/libc-2.31.so
7f9a84252000-7f9a84253000 ---p 001e7000 fe:01 3310011                    /usr/lib/x86_64-linux-gnu/libc-2.31.so
7f9a84253000-7f9a84256000 r--p 001e7000 fe:01 3310011                    /usr/lib/x86_64-linux-gnu/libc-2.31.so
7f9a84256000-7f9a84259000 rw-p 001ea000 fe:01 3310011                    /usr/lib/x86_64-linux-gnu/libc-2.31.so
7f9a84259000-7f9a8425d000 rw-p 00000000 00:00 0 
7f9a8425d000-7f9a8426c000 r--p 00000000 fe:01 3310030                    /usr/lib/x86_64-linux-gnu/libm-2.31.so
7f9a8426c000-7f9a84313000 r-xp 0000f000 fe:01 3310030                    /usr/lib/x86_64-linux-gnu/libm-2.31.so
7f9a84313000-7f9a843aa000 r--p 000b6000 fe:01 3310030                    /usr/lib/x86_64-linux-gnu/libm-2.31.so
7f9a843aa000-7f9a843ab000 r--p 0014c000 fe:01 3310030                    /usr/lib/x86_64-linux-gnu/libm-2.31.so
7f9a843ab000-7f9a843ac000 rw-p 0014d000 fe:01 3310030                    /usr/lib/x86_64-linux-gnu/libm-2.31.so
7f9a843ac000-7f9a843ae000 r--p 00000000 fe:01 655737                     /usr/lib/x86_64-linux-gnu/libcrypt.so.1.1.0
7f9a843ae000-7f9a843c3000 r-xp 00002000 fe:01 655737                     /usr/lib/x86_64-linux-gnu/libcrypt.so.1.1.0
7f9a843c3000-7f9a843dd000 r--p 00017000 fe:01 655737                     /usr/lib/x86_64-linux-gnu/libcrypt.so.1.1.0
7f9a843dd000-7f9a843de000 r--p 00030000 fe:01 655737                     /usr/lib/x86_64-linux-gnu/libcrypt.so.1.1.0
7f9a843de000-7f9a843df000 rw-p 00031000 fe:01 655737                     /usr/lib/x86_64-linux-gnu/libcrypt.so.1.1.0
7f9a843df000-7f9a843e9000 rw-p 00000000 00:00 0 
7f9a843e9000-7f9a843ea000 r--p 00000000 fe:01 3310016                    /usr/lib/x86_64-linux-gnu/libdl-2.31.so
7f9a843ea000-7f9a843ec000 r-xp 00001000 fe:01 3310016                    /usr/lib/x86_64-linux-gnu/libdl-2.31.so
7f9a843ec000-7f9a843ed000 r--p 00003000 fe:01 3310016                    /usr/lib/x86_64-linux-gnu/libdl-2.31.so
7f9a843ed000-7f9a843ee000 r--p 00003000 fe:01 3310016                    /usr/lib/x86_64-linux-gnu/libdl-2.31.so
7f9a843ee000-7f9a843ef000 rw-p 00004000 fe:01 3310016                    /usr/lib/x86_64-linux-gnu/libdl-2.31.so
7f9a843ef000-7f9a843f9000 r--p 00000000 fe:01 3310021                    /usr/lib/x86_64-linux-gnu/libgmp.so.10.4.0
7f9a843f9000-7f9a84459000 r-xp 0000a000 fe:01 3310021                    /usr/lib/x86_64-linux-gnu/libgmp.so.10.4.0
7f9a84459000-7f9a84470000 r--p 0006a000 fe:01 3310021                    /usr/lib/x86_64-linux-gnu/libgmp.so.10.4.0
7f9a84470000-7f9a84471000 ---p 00081000 fe:01 3310021                    /usr/lib/x86_64-linux-gnu/libgmp.so.10.4.0
7f9a84471000-7f9a84472000 r--p 00081000 fe:01 3310021                    /usr/lib/x86_64-linux-gnu/libgmp.so.10.4.0
7f9a84472000-7f9a84473000 rw-p 00082000 fe:01 3310021                    /usr/lib/x86_64-linux-gnu/libgmp.so.10.4.0
7f9a84473000-7f9a84476000 r--p 00000000 fe:01 3310072                    /usr/lib/x86_64-linux-gnu/librt-2.31.so
7f9a84476000-7f9a8447a000 r-xp 00003000 fe:01 3310072                    /usr/lib/x86_64-linux-gnu/librt-2.31.so
7f9a8447a000-7f9a8447b000 r--p 00007000 fe:01 3310072                    /usr/lib/x86_64-linux-gnu/librt-2.31.so
7f9a8447b000-7f9a8447c000 ---p 00008000 fe:01 3310072                    /usr/lib/x86_64-linux-gnu/librt-2.31.so
7f9a8447c000-7f9a8447d000 r--p 00008000 fe:01 3310072                    /usr/lib/x86_64-linux-gnu/librt-2.31.so
7f9a8447d000-7f9a8447e000 rw-p 00009000 fe:01 3310072                    /usr/lib/x86_64-linux-gnu/librt-2.31.so
7f9a8447e000-7f9a84485000 r--p 00000000 fe:01 3310068                    /usr/lib/x86_64-linux-gnu/libpthread-2.31.so
7f9a84485000-7f9a84496000 r-xp 00007000 fe:01 3310068                    /usr/lib/x86_64-linux-gnu/libpthread-2.31.so
7f9a84496000-7f9a8449b000 r--p 00018000 fe:01 3310068                    /usr/lib/x86_64-linux-gnu/libpthread-2.31.so
7f9a8449b000-7f9a8449c000 r--p 0001c000 fe:01 3310068                    /usr/lib/x86_64-linux-gnu/libpthread-2.31.so
7f9a8449c000-7f9a8449d000 rw-p 0001d000 fe:01 3310068                    /usr/lib/x86_64-linux-gnu/libpthread-2.31.so
7f9a8449d000-7f9a844a1000 rw-p 00000000 00:00 0 
7f9a844a1000-7f9a844a3000 r--p 00000000 fe:01 655860                     /usr/lib/x86_64-linux-gnu/libz.so.1.2.11
7f9a844a3000-7f9a844b4000 r-xp 00002000 fe:01 655860                     /usr/lib/x86_64-linux-gnu/libz.so.1.2.11
7f9a844b4000-7f9a844ba000 r--p 00013000 fe:01 655860                     /usr/lib/x86_64-linux-gnu/libz.so.1.2.11
7f9a844ba000-7f9a844bb000 ---p 00019000 fe:01 655860                     /usr/lib/x86_64-linux-gnu/libz.so.1.2.11
7f9a844bb000-7f9a844bc000 r--p 00019000 fe:01 655860                     /usr/lib/x86_64-linux-gnu/libz.so.1.2.11
7f9a844bc000-7f9a844bd000 rw-p 0001a000 fe:01 655860                     /usr/lib/x86_64-linux-gnu/libz.so.1.2.11
7f9a844c0000-7f9a844c5000 r--s 00000000 fe:01 18174                      /usr/local/rbenv/versions/3.0.0/lib/ruby/3.0.0/x86_64-linux/enc/encdb.so
7f9a844c5000-7f9a844ca000 r--s 00000000 fe:01 5111                       /usr/local/rbenv/versions/3.0.0/bin/ruby
7f9a844ca000-7f9a844cb000 r--p 00000000 fe:01 18174                      /usr/local/rbenv/versions/3.0.0/lib/ruby/3.0.0/x86_64-linux/enc/encdb.so
7f9a844cb000-7f9a844cc000 r-xp 00001000 fe:01 18174                      /usr/local/rbenv/versions/3.0.0/lib/ruby/3.0.0/x86_64-linux/enc/encdb.so
7f9a844cc000-7f9a844cd000 r--p 00002000 fe:01 18174                      /usr/local/rbenv/versions/3.0.0/lib/ruby/3.0.0/x86_64-linux/enc/encdb.so
7f9a844cd000-7f9a844ce000 r--p 00002000 fe:01 18174                      /usr/local/rbenv/versions/3.0.0/lib/ruby/3.0.0/x86_64-linux/enc/encdb.so
7f9a844ce000-7f9a844cf000 rw-p 00003000 fe:01 18174                      /usr/local/rbenv/versions/3.0.0/lib/ruby/3.0.0/x86_64-linux/enc/encdb.so
7f9a844cf000-7f9a84500000 r--p 00000000 fe:01 9797                       /usr/local/rbenv/versions/3.0.0/lib/libruby.so.3.0.0
7f9a84500000-7f9a8479a000 r-xp 00031000 fe:01 9797                       /usr/local/rbenv/versions/3.0.0/lib/libruby.so.3.0.0
7f9a8479a000-7f9a84892000 r--p 002cb000 fe:01 9797                       /usr/local/rbenv/versions/3.0.0/lib/libruby.so.3.0.0
7f9a84892000-7f9a84893000 ---p 003c3000 fe:01 9797                       /usr/local/rbenv/versions/3.0.0/lib/libruby.so.3.0.0
7f9a84893000-7f9a8489a000 r--p 003c3000 fe:01 9797                       /usr/local/rbenv/versions/3.0.0/lib/libruby.so.3.0.0
7f9a8489a000-7f9a8489d000 rw-p 003ca000 fe:01 9797                       /usr/local/rbenv/versions/3.0.0/lib/libruby.so.3.0.0
7f9a8489d000-7f9a848b0000 rw-p 00000000 00:00 0 
7f9a848b0000-7f9a848b1000 r--p 00000000 fe:01 3310000                    /usr/lib/x86_64-linux-gnu/ld-2.31.so
7f9a848b1000-7f9a848d4000 r-xp 00001000 fe:01 3310000                    /usr/lib/x86_64-linux-gnu/ld-2.31.so
7f9a848d4000-7f9a848dc000 r--p 00024000 fe:01 3310000                    /usr/lib/x86_64-linux-gnu/ld-2.31.so
7f9a848dd000-7f9a848de000 r--p 0002c000 fe:01 3310000                    /usr/lib/x86_64-linux-gnu/ld-2.31.so
7f9a848de000-7f9a848df000 rw-p 0002d000 fe:01 3310000                    /usr/lib/x86_64-linux-gnu/ld-2.31.so
7f9a848df000-7f9a848e0000 rw-p 00000000 00:00 0 
7ffc6a4e4000-7ffca7573000 rw-p 00000000 00:00 0                          [stack]
7ffca75e1000-7ffca75e4000 r--p 00000000 00:00 0                          [vvar]
7ffca75e4000-7ffca75e6000 r-xp 00000000 00:00 0                          [vdso]
ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0                  [vsyscall]


Aborted

I confirmed that the problem happens on both Ubuntu 20.04 and macOS(Big Sur/11.1) .


Related issues

Has duplicate Ruby master - Bug #17668: Large RUBY_THREAD_VM_STACK_SIZE causes segmentation fault (again)OpenActions
#1

Updated by yoshiokatsuneo (Tsuneo Yoshioka) about 1 month ago

  • ruby -v changed from 3.0.0 to ruby 3.0.0p0 (2020-12-25 revision 95aff21468) [x86_64-linux]
#3

Updated by yoshiokatsuneo (Tsuneo Yoshioka) about 1 month ago

  • Description updated (diff)

Updated by nobu (Nobuyoshi Nakada) about 1 month ago

Seems mark_object_ary broken?
This should be the array of arrays.

* thread #1, queue = 'com.apple.main-thread', stop reason = EXC_BAD_ACCESS (code=1, address=0x10)
    frame #0: 0x00000001007698a9 miniruby`lookup_method_table(klass=108645493675760, id=3281) at vm_method.c:699:33
   696  lookup_method_table(VALUE klass, ID id)
   697  {
   698      st_data_t body;
-> 699      struct rb_id_table *m_tbl = RCLASS_M_TBL(klass);
   700  
   701      if (rb_id_table_lookup(m_tbl, id, &body)) {
   702      return (rb_method_entry_t *) body;
Target 0: (miniruby) stopped.
(lldb) p ruby_current_vm_ptr->mark_object_ary
(VALUE) $0 = 108645493686200
(lldb) rp ruby_current_vm_ptr->mark_object_ary
bits [     ]
T_ARRAY: len=1 (ownership) capa=128
(const VALUE *) $2 = 0x0000619000001e80 {
  (const VALUE) [0] = 0x000062d0000ebf68
}
(lldb) rp $2[0]
bits [     ]
T_STRING: (const char [73]) $4 = "  def self.verify_compaction_references(toward: nil, double_heap: false)\n"

Updated by xtkoba (Tee KOBAYASHI) about 1 month ago

The crash threshold of RUBY_THREAD_VM_STACK_SIZE seems to coincide with the default value of GC_MALLOC_LIMIT_MIN (which is 16MB).

I think something is messed up by GC in an early stage of initialization. In fact, the crash seems to disappear when the function garbage_collect is made to do nothing other than returning TRUE.

Updated by ko1 (Koichi Sasada) about 1 month ago

  • Assignee set to ko1 (Koichi Sasada)
  • Status changed from Open to Assigned

Updated by xtkoba (Tee KOBAYASHI) 5 days ago

Bug #17668 seems to be a duplicate of this bug.

As I wrote in #note-5, this issue seems to be caused by running GC during initialization. If so, a straightforward workaround would be to suppress GC during init:

--- a/eval.c
+++ b/eval.c
@@ -99,6 +99,8 @@
     return state;
 }

+extern int suppress_garbage_collection;
+
 /*!
  * Calls ruby_setup() and check error.
  *
@@ -107,6 +109,7 @@
 void
 ruby_init(void)
 {
+    suppress_garbage_collection = 1;
     int state = ruby_setup();
     if (state) {
         if (RTEST(ruby_debug))
@@ -365,6 +368,7 @@
 int
 ruby_run_node(void *n)
 {
+    suppress_garbage_collection = 0;
     rb_execution_context_t *ec = GET_EC();
     int status;
     if (!ruby_executable_node(n, &status)) {
--- a/gc.c
+++ b/gc.c
@@ -8214,11 +8214,15 @@
 #endif
 }

+int suppress_garbage_collection;
+
 static int
 garbage_collect(rb_objspace_t *objspace, int reason)
 {
     int ret;

+    if (suppress_garbage_collection) return TRUE;
+
     RB_VM_LOCK_ENTER();
     {
 #if GC_PROFILE_MORE_DETAIL

An alternative workaround would be to set GC_ENABLE_LAZY_SWEEP to 0, but this is not good because it disables lazy sweeping throughout the entire lifecycle. It would be better if we could suppress lazy sweeping during initialization only.

#8

Updated by jeremyevans0 (Jeremy Evans) 3 days ago

  • Has duplicate Bug #17668: Large RUBY_THREAD_VM_STACK_SIZE causes segmentation fault (again) added

Also available in: Atom PDF