Bug #3295

make test aborted

Added by Kazuhiro NISHIYAMA almost 4 years ago. Updated about 1 year ago.

[ruby-dev:41316]
Status:Closed
Priority:Normal
Assignee:Koichi Sasada
Category:-
Target version:1.9.2
ruby -v:ruby 1.9.3dev (2010-05-14 trunk 27796) [i686-linux] Backport:

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

testattr.rb ..
test
autoload.rb ...........
testblock.rb .......................................................
test
class.rb ............................................
testeval.rb ....................................
test
exception.rb .................................
testfinalizer.rb .
test
flip.rb .
testflow.rb ................................................
test
fork.rb ....
testgc.rb ..
test
io.rb .................
testjump.rb .............................
test
literal.rb ......................................................................................................................................................
testload.rb ..
test
marshal.rb .
testmassign.rb ..................................
test
method.rb ............................................................................................................................................................................................................................
testobjectspace.rb ...
test
proc.rb ..................................
teststruct.rb .
test
syntax.rb .........................................................................................................................................................
testthread.rb .................................*** longjmp causes uninitialized stack frame ***: /home/kazu/tmp/ruby/ruby-trunk/build/ruby terminated
======= Backtrace: =========
/lib/tls/i686/cmov/libc.so.6(fortifyfail+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(rbfiberresume+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(rbrescue2+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(rbiseqevalmain+0x1c7)[0x815dcd7]
/home/kazu/tmp/ruby/ruby-trunk/build/ruby[0x805e422]
/home/kazu/tmp/ruby/ruby-trunk/
build/ruby(rubyrunnode+0x32)[0x805fc32]
/home/kazu/tmp/ruby/ruby-trunk/_build/ruby(main+0x5a)[0x805d65a]
/lib/tls/i686/cmov/libc.so.6(
libcstartmain+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/jaJP.utf8/LCCTYPE
40295000-40326000 rw-p 00000000 00:00 0
4033f000-4035c000 r-xp 00000000 08:01 10045150 /lib/libgccs.so.1
4035c000-4035d000 r--p 0001c000 08:01 10045150 /lib/libgcc
s.so.1
4035d000-4035e000 rw-p 0001d000 08:01 10045150 /lib/libgccs.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(fortifyfail+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(rbfiberresume+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(rbrescue2+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(rbiseqevalmain+0x1c7)[0x815dcd7]
/home/kazu/tmp/ruby/ruby-trunk/build/ruby[0x805e422]
/home/kazu/tmp/ruby/ruby-trunk/
build/ruby(rubyrunnode+0x32)[0x805fc32]
/home/kazu/tmp/ruby/ruby-trunk/_build/ruby(main+0x5a)[0x805d65a]
/lib/tls/i686/cmov/libc.so.6(
libcstartmain+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/jaJP.utf8/LCCTYPE
40295000-40326000 rw-p 00000000 00:00 0
4033f000-4035c000 r-xp 00000000 08:01 10045150 /lib/libgccs.so.1
4035c000-4035d000 r--p 0001c000 08:01 10045150 /lib/libgcc
s.so.1
4035d000-4035e000 rw-p 0001d000 08:01 10045150 /lib/libgccs.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)
#916 test_thread.rb:312:in
':
g = Module.enum_for(:new)
loop { g.next }
#=> killed by SIGABRT (signal 6)
FAIL 2/931 tests failed
make: *** [yes-btest-ruby] エラー 1
%
=end


Related issues

Duplicated by ruby-trunk - Bug #3311: make test-all fails with *** stack smashing detected *** Closed 05/18/2010

Associated revisions

Revision 27949
Added by Motohiro KOSAKI almost 4 years ago

  • cont.c (fiber_setcontext): Use swapcontext() instead longjmp(). [Bug #3295]

History

#1 Updated by Yusuke Endoh almost 4 years ago

  • Due date set to 05/31/2010
  • Assignee set to 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 FIBERUSENATIVE

#ifdef FIBERUSENATIVE
#ifndef _WIN32

--
Yusuke Endoh mame@tsg.ne.jp
=end

#2 Updated by Motohiro KOSAKI almost 4 years ago

=begin
小崎です
こんにちは

今回、Ubuntu-10.0.4 環境で Fiber が原因で Abort するのは Ubuntu-10.0.4で
は、最適化オプションを O3 としたときに _longjmpchk という関数を使用す
るためのようです。
(O0 のときは _longjmp が使用されるようです。そのため、cont.c を O0 でコ
ンパイルすると、make test に通ります。)

軽く調べたところ、Ubuntuのgccではデフォルトで-DFORTIFYSOURCE=2
されているためのようです。
手元にUbuntuがないのですが、cont.c だけコンパイルオプションを変更することで
回避できませんでしょうか?

そのため、revertして Fiber のパッチを 1.9.3送りにするという提案に、私も
賛成します。
Fiber のパッチを、trunk にてテストさせていただきたいです。
ご検討、よろしくお願いします。

いただいたパッチはこちらでtrunkに入れておくので、コンパイルオプションで
逃げる事が出来そうなら、再度上書きしてくださいませ

=end

#3 Updated by Motohiro KOSAKI almost 4 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

#4 Updated by Koichi Sasada almost 4 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) FIBERUSENATIVE を 0 にしとく

の2種類が考えられます.

--
// SASADA Koichi at atdot dot net

=end

#5 Updated by Motohiro KOSAKI almost 4 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) FIBERUSENATIVE を 0 にしとく

の2種類が考えられます.

卜部さんに(1)がよいという意見をもらったので、そういうパッチをコミットしときます。

=end

#6 Updated by Motohiro KOSAKI about 1 year ago

  • Description updated (diff)

あれ、この議論って結論どうなったんでしたっけ?
いまのtrunkだとささださんが遅いと反対していた、swapcontext()のコードが生き残っているように見えるんですけど

Also available in: Atom PDF