Bug #3295
closedmake test aborted
Description
=begin
Ubuntu lucid の環境で
https://wiki.ubuntu.com/CompilerFlags
の stack smashing protector (GccSsp) の影響だと思うのですが、
make test で abort します。
% lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 10.04 LTS
Release: 10.04
Codename: lucid
% gcc -v
Using built-in specs.
Target: i486-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Ubuntu 4.4.3-4ubuntu5' --with-bugurl=file:///usr/share/doc/gcc-4.4/README.Bugs --enable-languages=c,c++,fortran,objc,obj-c++ --prefix=/usr --enable-shared --enable-multiarch --enable-linker-build-id --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --with-gxx-include-dir=/usr/include/c++/4.4 --program-suffix=-4.4 --enable-nls --enable-clocale=gnu --enable-libstdcxx-debug --enable-plugin --enable-objc-gc --enable-targets=all --disable-werror --with-arch-32=i486 --with-tune=generic --enable-checking=release --build=i486-linux-gnu --host=i486-linux-gnu --target=i486-linux-gnu
Thread model: posix
gcc version 4.4.3 (Ubuntu 4.4.3-4ubuntu5)
% make test
sample/test.rb:assignment ....................................................................................................................................................................................................................................................................................................................................................................................
sample/test.rb:condition ..
sample/test.rb:if/unless ...
sample/test.rb:case .....
sample/test.rb:while/until ........
sample/test.rb:exception ..........
sample/test.rb:array .......................................
sample/test.rb:hash ...........................
sample/test.rb:iterator ...............................................................................................................
sample/test.rb:float ................................................................................
sample/test.rb:bignum ...............................
sample/test.rb:string & char ..............................................................
sample/test.rb:assignment ..........
sample/test.rb:call ......
sample/test.rb:proc .........
sample/test.rb:signal ..
sample/test.rb:eval .............................
sample/test.rb:system .........
sample/test.rb:const .....
sample/test.rb:clone .....
sample/test.rb:marshal ....
sample/test.rb:pack ....
sample/test.rb:math ..
sample/test.rb:struct ......
sample/test.rb:variable ...........
sample/test.rb:trace ...
sample/test.rb:defined? ............
sample/test.rb:alias ......
sample/test.rb:path .......................
sample/test.rb:gc ....
test succeeded
test_attr.rb ..
test_autoload.rb ...........
test_block.rb .......................................................
test_class.rb ............................................
test_eval.rb ....................................
test_exception.rb .................................
test_finalizer.rb .
test_flip.rb .
test_flow.rb ................................................
test_fork.rb ....
test_gc.rb ..
test_io.rb .................
test_jump.rb .............................
test_literal.rb ......................................................................................................................................................
test_load.rb ..
test_marshal.rb .
test_massign.rb ..................................
test_method.rb ............................................................................................................................................................................................................................
test_objectspace.rb ...
test_proc.rb ..................................
test_struct.rb .
test_syntax.rb .........................................................................................................................................................
test_thread.rb .................................*** longjmp causes uninitialized stack frame : /home/kazu/tmp/ruby/ruby-trunk/_build/ruby terminated
======= Backtrace: =========
/lib/tls/i686/cmov/libc.so.6(__fortify_fail+0x50)[0x4019a350]
/lib/tls/i686/cmov/libc.so.6(+0xe22ba)[0x4019a2ba]
/home/kazu/tmp/ruby/ruby-trunk/_build/ruby[0x8168ed4]
/home/kazu/tmp/ruby/ruby-trunk/_build/ruby[0x8169083]
/home/kazu/tmp/ruby/ruby-trunk/_build/ruby(rb_fiber_resume+0xaf)[0x8169c4f]
/home/kazu/tmp/ruby/ruby-trunk/_build/ruby[0x819c74f]
/home/kazu/tmp/ruby/ruby-trunk/_build/ruby[0x819d507]
/home/kazu/tmp/ruby/ruby-trunk/_build/ruby[0x8157b91]
/home/kazu/tmp/ruby/ruby-trunk/_build/ruby[0x8159f38]
/home/kazu/tmp/ruby/ruby-trunk/_build/ruby[0x815d906]
/home/kazu/tmp/ruby/ruby-trunk/_build/ruby[0x815f26e]
/home/kazu/tmp/ruby/ruby-trunk/_build/ruby(rb_rescue2+0x141)[0x805e1d1]
/home/kazu/tmp/ruby/ruby-trunk/_build/ruby[0x814d4c4]
/home/kazu/tmp/ruby/ruby-trunk/_build/ruby[0x8157b91]
/home/kazu/tmp/ruby/ruby-trunk/_build/ruby[0x8159f38]
/home/kazu/tmp/ruby/ruby-trunk/_build/ruby[0x815d906]
/home/kazu/tmp/ruby/ruby-trunk/_build/ruby(rb_iseq_eval_main+0x1c7)[0x815dcd7]
/home/kazu/tmp/ruby/ruby-trunk/_build/ruby[0x805e422]
/home/kazu/tmp/ruby/ruby-trunk/_build/ruby(ruby_run_node+0x32)[0x805fc32]
/home/kazu/tmp/ruby/ruby-trunk/_build/ruby(main+0x5a)[0x805d65a]
/lib/tls/i686/cmov/libc.so.6(__libc_start_main+0xe6)[0x400cebd6]
/home/kazu/tmp/ruby/ruby-trunk/_build/ruby[0x805d561]
======= Memory map: ========
08048000-08212000 r-xp 00000000 fb:00 538613665 /home/kazu/tmp/ruby/ruby-trunk/_build/ruby
08212000-08213000 r--p 001c9000 fb:00 538613665 /home/kazu/tmp/ruby/ruby-trunk/_build/ruby
08213000-08214000 rw-p 001ca000 fb:00 538613665 /home/kazu/tmp/ruby/ruby-trunk/_build/ruby
08214000-08221000 rw-p 00000000 00:00 0
09654000-0977f000 rw-p 00000000 00:00 0 [heap]
40000000-4001b000 r-xp 00000000 08:01 10043411 /lib/ld-2.11.1.so
4001b000-4001c000 r--p 0001a000 08:01 10043411 /lib/ld-2.11.1.so
4001c000-4001d000 rw-p 0001b000 08:01 10043411 /lib/ld-2.11.1.so
4001d000-4001e000 r-xp 00000000 00:00 0 [vdso]
4001e000-40020000 rw-p 00000000 00:00 0
40020000-40027000 r--s 00000000 08:01 1647078 /usr/lib/gconv/gconv-modules.cache
40027000-40028000 ---p 00000000 00:00 0
40028000-4002b000 rw-p 00000000 00:00 0
4002b000-4002d000 r-xp 00000000 fb:00 807287925 /home/kazu/tmp/ruby/ruby-trunk/_build/.ext/i686-linux/enc/encdb.so
4002d000-4002e000 r--p 00001000 fb:00 807287925 /home/kazu/tmp/ruby/ruby-trunk/_build/.ext/i686-linux/enc/encdb.so
4002e000-4002f000 rw-p 00002000 fb:00 807287925 /home/kazu/tmp/ruby/ruby-trunk/_build/.ext/i686-linux/enc/encdb.so
4002f000-40031000 r-xp 00000000 fb:00 269946659 /home/kazu/tmp/ruby/ruby-trunk/_build/.ext/i686-linux/enc/trans/transdb.so
40031000-40032000 r--p 00001000 fb:00 269946659 /home/kazu/tmp/ruby/ruby-trunk/_build/.ext/i686-linux/enc/trans/transdb.so
40032000-40033000 rw-p 00002000 fb:00 269946659 /home/kazu/tmp/ruby/ruby-trunk/_build/.ext/i686-linux/enc/trans/transdb.so
40039000-4004e000 r-xp 00000000 08:01 10044432 /lib/tls/i686/cmov/libpthread-2.11.1.so
4004e000-4004f000 r--p 00014000 08:01 10044432 /lib/tls/i686/cmov/libpthread-2.11.1.so
4004f000-40050000 rw-p 00015000 08:01 10044432 /lib/tls/i686/cmov/libpthread-2.11.1.so
40050000-40052000 rw-p 00000000 00:00 0
40052000-40059000 r-xp 00000000 08:01 10044434 /lib/tls/i686/cmov/librt-2.11.1.so
40059000-4005a000 r--p 00006000 08:01 10044434 /lib/tls/i686/cmov/librt-2.11.1.so
4005a000-4005b000 rw-p 00007000 08:01 10044434 /lib/tls/i686/cmov/librt-2.11.1.so
4005b000-4005c000 rw-p 00000000 00:00 0
4005c000-4005e000 r-xp 00000000 08:01 10044421 /lib/tls/i686/cmov/libdl-2.11.1.so
4005e000-4005f000 r--p 00001000 08:01 10044421 /lib/tls/i686/cmov/libdl-2.11.1.so
4005f000-40060000 rw-p 00002000 08:01 10044421 /lib/tls/i686/cmov/libdl-2.11.1.so
40060000-40069000 r-xp 00000000 08:01 10044420 /lib/tls/i686/cmov/libcrypt-2.11.1.so
40069000-4006a000 r--p 00008000 08:01 10044420 /lib/tls/i686/cmov/libcrypt-2.11.1.so
4006a000-4006b000 rw-p 00009000 08:01 10044420 /lib/tls/i686/cmov/libcrypt-2.11.1.so
4006b000-40092000 rw-p 00000000 00:00 0
40092000-400b6000 r-xp 00000000 08:01 10044422 /lib/tls/i686/cmov/libm-2.11.1.so
400b6000-400b7000 r--p 00023000 08:01 10044422 /lib/tls/i686/cmov/libm-2.11.1.so
400b7000-400b8000 rw-p 00024000 08:01 10044422 /lib/tls/i686/cmov/libm-2.11.1.so
400b8000-4020b000 r-xp 00000000 08:01 10044418 /lib/tls/i686/cmov/libc-2.11.1.so
4020b000-4020c000 ---p 00153000 08:01 10044418 /lib/tls/i686/cmov/libc-2.11.1.so
4020c000-4020e000 r--p 00153000 08:01 10044418 /lib/tls/i686/cmov/libc-2.11.1.so
4020e000-4020f000 rw-p 00155000 08:01 10044418 /lib/tls/i686/cmov/libc-2.11.1.so
4020f000-40214000 rw-p 00000000 00:00 0
40214000-40295000 r--p 00000000 08:01 9767830 /usr/lib/locale/ja_JP.utf8/LC_CTYPE
40295000-40326000 rw-p 00000000 00:00 0
4033f000-4035c000 r-xp 00000000 08:01 10045150 /lib/libgcc_s.so.1
4035c000-4035d000 r--p 0001c000 08:01 10045150 /lib/libgcc_s.so.1
4035d000-4035e000 rw-p 0001d000 08:01 10045150 /lib/libgcc_s.so.1
bfc61000-bfc77000 rw-p 00000000 00:00 0 [stack]
F longjmp causes uninitialized stack frame ***: /home/kazu/tmp/ruby/ruby-trunk/_build/ruby terminated
======= Backtrace: =========
/lib/tls/i686/cmov/libc.so.6(__fortify_fail+0x50)[0x4019a350]
/lib/tls/i686/cmov/libc.so.6(+0xe22ba)[0x4019a2ba]
/home/kazu/tmp/ruby/ruby-trunk/_build/ruby[0x8168ed4]
/home/kazu/tmp/ruby/ruby-trunk/_build/ruby[0x8169083]
/home/kazu/tmp/ruby/ruby-trunk/_build/ruby(rb_fiber_resume+0xaf)[0x8169c4f]
/home/kazu/tmp/ruby/ruby-trunk/_build/ruby[0x819c74f]
/home/kazu/tmp/ruby/ruby-trunk/_build/ruby[0x819d507]
/home/kazu/tmp/ruby/ruby-trunk/_build/ruby[0x8157b91]
/home/kazu/tmp/ruby/ruby-trunk/_build/ruby[0x8159f38]
/home/kazu/tmp/ruby/ruby-trunk/_build/ruby[0x815d906]
/home/kazu/tmp/ruby/ruby-trunk/_build/ruby[0x815f26e]
/home/kazu/tmp/ruby/ruby-trunk/_build/ruby(rb_rescue2+0x141)[0x805e1d1]
/home/kazu/tmp/ruby/ruby-trunk/_build/ruby[0x814d4c4]
/home/kazu/tmp/ruby/ruby-trunk/_build/ruby[0x8157b91]
/home/kazu/tmp/ruby/ruby-trunk/_build/ruby[0x8159f38]
/home/kazu/tmp/ruby/ruby-trunk/_build/ruby[0x815d906]
/home/kazu/tmp/ruby/ruby-trunk/_build/ruby(rb_iseq_eval_main+0x1c7)[0x815dcd7]
/home/kazu/tmp/ruby/ruby-trunk/_build/ruby[0x805e422]
/home/kazu/tmp/ruby/ruby-trunk/_build/ruby(ruby_run_node+0x32)[0x805fc32]
/home/kazu/tmp/ruby/ruby-trunk/_build/ruby(main+0x5a)[0x805d65a]
/lib/tls/i686/cmov/libc.so.6(__libc_start_main+0xe6)[0x400cebd6]
/home/kazu/tmp/ruby/ruby-trunk/_build/ruby[0x805d561]
======= Memory map: ========
08048000-08212000 r-xp 00000000 fb:00 538613665 /home/kazu/tmp/ruby/ruby-trunk/_build/ruby
08212000-08213000 r--p 001c9000 fb:00 538613665 /home/kazu/tmp/ruby/ruby-trunk/_build/ruby
08213000-08214000 rw-p 001ca000 fb:00 538613665 /home/kazu/tmp/ruby/ruby-trunk/_build/ruby
08214000-08221000 rw-p 00000000 00:00 0
08b7a000-08ca5000 rw-p 00000000 00:00 0 [heap]
40000000-4001b000 r-xp 00000000 08:01 10043411 /lib/ld-2.11.1.so
4001b000-4001c000 r--p 0001a000 08:01 10043411 /lib/ld-2.11.1.so
4001c000-4001d000 rw-p 0001b000 08:01 10043411 /lib/ld-2.11.1.so
4001d000-4001e000 r-xp 00000000 00:00 0 [vdso]
4001e000-40020000 rw-p 00000000 00:00 0
40020000-40027000 r--s 00000000 08:01 1647078 /usr/lib/gconv/gconv-modules.cache
40027000-40028000 ---p 00000000 00:00 0
40028000-4002b000 rw-p 00000000 00:00 0
4002b000-4002d000 r-xp 00000000 fb:00 807287925 /home/kazu/tmp/ruby/ruby-trunk/_build/.ext/i686-linux/enc/encdb.so
4002d000-4002e000 r--p 00001000 fb:00 807287925 /home/kazu/tmp/ruby/ruby-trunk/_build/.ext/i686-linux/enc/encdb.so
4002e000-4002f000 rw-p 00002000 fb:00 807287925 /home/kazu/tmp/ruby/ruby-trunk/_build/.ext/i686-linux/enc/encdb.so
4002f000-40031000 r-xp 00000000 fb:00 269946659 /home/kazu/tmp/ruby/ruby-trunk/_build/.ext/i686-linux/enc/trans/transdb.so
40031000-40032000 r--p 00001000 fb:00 269946659 /home/kazu/tmp/ruby/ruby-trunk/_build/.ext/i686-linux/enc/trans/transdb.so
40032000-40033000 rw-p 00002000 fb:00 269946659 /home/kazu/tmp/ruby/ruby-trunk/_build/.ext/i686-linux/enc/trans/transdb.so
40039000-4004e000 r-xp 00000000 08:01 10044432 /lib/tls/i686/cmov/libpthread-2.11.1.so
4004e000-4004f000 r--p 00014000 08:01 10044432 /lib/tls/i686/cmov/libpthread-2.11.1.so
4004f000-40050000 rw-p 00015000 08:01 10044432 /lib/tls/i686/cmov/libpthread-2.11.1.so
40050000-40052000 rw-p 00000000 00:00 0
40052000-40059000 r-xp 00000000 08:01 10044434 /lib/tls/i686/cmov/librt-2.11.1.so
40059000-4005a000 r--p 00006000 08:01 10044434 /lib/tls/i686/cmov/librt-2.11.1.so
4005a000-4005b000 rw-p 00007000 08:01 10044434 /lib/tls/i686/cmov/librt-2.11.1.so
4005b000-4005c000 rw-p 00000000 00:00 0
4005c000-4005e000 r-xp 00000000 08:01 10044421 /lib/tls/i686/cmov/libdl-2.11.1.so
4005e000-4005f000 r--p 00001000 08:01 10044421 /lib/tls/i686/cmov/libdl-2.11.1.so
4005f000-40060000 rw-p 00002000 08:01 10044421 /lib/tls/i686/cmov/libdl-2.11.1.so
40060000-40069000 r-xp 00000000 08:01 10044420 /lib/tls/i686/cmov/libcrypt-2.11.1.so
40069000-4006a000 r--p 00008000 08:01 10044420 /lib/tls/i686/cmov/libcrypt-2.11.1.so
4006a000-4006b000 rw-p 00009000 08:01 10044420 /lib/tls/i686/cmov/libcrypt-2.11.1.so
4006b000-40092000 rw-p 00000000 00:00 0
40092000-400b6000 r-xp 00000000 08:01 10044422 /lib/tls/i686/cmov/libm-2.11.1.so
400b6000-400b7000 r--p 00023000 08:01 10044422 /lib/tls/i686/cmov/libm-2.11.1.so
400b7000-400b8000 rw-p 00024000 08:01 10044422 /lib/tls/i686/cmov/libm-2.11.1.so
400b8000-4020b000 r-xp 00000000 08:01 10044418 /lib/tls/i686/cmov/libc-2.11.1.so
4020b000-4020c000 ---p 00153000 08:01 10044418 /lib/tls/i686/cmov/libc-2.11.1.so
4020c000-4020e000 r--p 00153000 08:01 10044418 /lib/tls/i686/cmov/libc-2.11.1.so
4020e000-4020f000 rw-p 00155000 08:01 10044418 /lib/tls/i686/cmov/libc-2.11.1.so
4020f000-40214000 rw-p 00000000 00:00 0
40214000-40295000 r--p 00000000 08:01 9767830 /usr/lib/locale/ja_JP.utf8/LC_CTYPE
40295000-40326000 rw-p 00000000 00:00 0
4033f000-4035c000 r-xp 00000000 08:01 10045150 /lib/libgcc_s.so.1
4035c000-4035d000 r--p 0001c000 08:01 10045150 /lib/libgcc_s.so.1
4035d000-4035e000 rw-p 0001d000 08:01 10045150 /lib/libgcc_s.so.1
bff00000-bff16000 rw-p 00000000 00:00 0 [stack]
F...............
#915 test_thread.rb:307:in <top (required)>': g = "abc".enum_for(:scan, /./) loop { g.next } #=> killed by SIGABRT (signal 6) [ruby-dev:34128] #916 test_thread.rb:312:in
<top (required)>':
g = Module.enum_for(:new)
loop { g.next }
#=> killed by SIGABRT (signal 6) [ruby-dev:34128]
FAIL 2/931 tests failed
make: *** [yes-btest-ruby] エラー 1
%
=end
Updated by mame (Yusuke Endoh) over 14 years ago
- Due date set to 05/31/2010
- Assignee set to ko1 (Koichi Sasada)
=begin
遠藤です。
Fiber の高速化のせいのようです。以下のパッチで現象が消えます。
早急に直してください。できなければ 1.9.2 は見送りとします。
release plan に基づき、期限は 5 月末です。
diff --git a/cont.c b/cont.c
index c0c3619..8ca47be 100644
--- a/cont.c
+++ b/cont.c
@@ -35,6 +35,8 @@
*/
#endif
+#undef FIBER_USE_NATIVE
#ifdef FIBER_USE_NATIVE
#ifndef _WIN32
--
Yusuke Endoh mame@tsg.ne.jp
=end
Updated by kosaki (Motohiro KOSAKI) over 14 years ago
=begin
小崎です
こんにちは
今回、Ubuntu-10.0.4 環境で Fiber が原因で Abort するのは Ubuntu-10.0.4で
は、最適化オプションを O3 としたときに __longjmp_chk という関数を使用す
るためのようです。
(O0 のときは _longjmp が使用されるようです。そのため、cont.c を O0 でコ
ンパイルすると、make test に通ります。)
軽く調べたところ、Ubuntuのgccではデフォルトで-D_FORTIFY_SOURCE=2
されているためのようです。
手元にUbuntuがないのですが、cont.c だけコンパイルオプションを変更することで
回避できませんでしょうか?
そのため、revertして Fiber のパッチを 1.9.3送りにするという提案に、私も
賛成します。
Fiber のパッチを、trunk にてテストさせていただきたいです。
ご検討、よろしくお願いします。
いただいたパッチはこちらでtrunkに入れておくので、コンパイルオプションで
逃げる事が出来そうなら、再度上書きしてくださいませ
=end
Updated by kosaki (Motohiro KOSAKI) over 14 years ago
- Status changed from Open to Closed
- % Done changed from 0 to 100
=begin
This issue was solved with changeset r27949.
Kazuhiro, thank you for reporting this issue.
Your contribution to Ruby is greatly appreciated.
May Ruby be with you.
=end
Updated by ko1 (Koichi Sasada) over 14 years ago
=begin
ささだです.
(2010/05/22 3:45), KOSAKI Motohiro wrote::
いただいたパッチはこちらでtrunkに入れておくので、コンパイルオプションで
逃げる事が出来そうなら、再度上書きしてくださいませ
ええと,swapcontext() 使うと,結局速くならないので(signal mask の設定
でシステムコール発行するので遅い),このパッチをそのまま入れるのは反対で
す.configure とか Makefile とかでなんとかするべきかなぁ,とおもいます.
芝君の主張は,swapcontext() 化パッチを trunk に取り込んでくれ,じゃな
くて,Fiber の高速化自体を trunk でもう少し試させてくれ,ってことなん
じゃないかと.
ちなみに,1.9.2 で Fiber の高速化を無効にするのは賛成ですが,どうやっ
て無効化しましょう.というのも,
(1) revert する
(2) FIBER_USE_NATIVE を 0 にしとく
の2種類が考えられます.
--
// SASADA Koichi at atdot dot net
=end
Updated by kosaki (Motohiro KOSAKI) over 14 years ago
=begin
小崎です
ささだです.
(2010/05/22 3:45), KOSAKI Motohiro wrote::
いただいたパッチはこちらでtrunkに入れておくので、コンパイルオプションで
逃げる事が出来そうなら、再度上書きしてくださいませええと,swapcontext() 使うと,結局速くならないので(signal mask の設定
でシステムコール発行するので遅い),このパッチをそのまま入れるのは反対で
す.configure とか Makefile とかでなんとかするべきかなぁ,とおもいます.芝君の主張は,swapcontext() 化パッチを trunk に取り込んでくれ,じゃな
くて,Fiber の高速化自体を trunk でもう少し試させてくれ,ってことなん
じゃないかと.
しまった。もう入れちゃった。ごめんなさい。
実は裏の意図があって、make testが通らないのはけしからんから一時的に
無効化しようという高度に政治的な判断がされたのだ。とか誤読してください。
ぜひ。
僕もswapcontext()で逃げるのは筋悪だと思うので、Makefileでなんとか
なって欲しいです。
ちなみに,1.9.2 で Fiber の高速化を無効にするのは賛成ですが,どうやっ
て無効化しましょう.というのも,(1) revert する
(2) FIBER_USE_NATIVE を 0 にしとくの2種類が考えられます.
卜部さんに(1)がよいという意見をもらったので、そういうパッチをコミットしときます。
=end
Updated by kosaki (Motohiro KOSAKI) over 11 years ago
- Description updated (diff)
あれ、この議論って結論どうなったんでしたっけ?
いまのtrunkだとささださんが遅いと反対していた、swapcontext()のコードが生き残っているように見えるんですけど