if_rubyで、autoloadの下層でrequireするとstack level too deepになる #372

Closed
alpaca-tc opened this Issue Apr 24, 2013 · 72 comments

Projects

None yet
@alpaca-tc
Member

下記配置で、call test#initialize#expect_error()を実行

source code

  • test.vimで、一度ruby空間を開く
  • test/initialize.vimで、requireで標準モジュール以外のモジュールを読み込む
Error detected while processing function test#initialize#expect_error:
SystemStackError: stack level too deep

補足

  • test.vimのruby空間でrequireした場合はエラーが出ない
  • 標準モジュールをrequireした場合はエラーが出ない

環境

  • vim 7.3.905
  • :ruby p RUBY_DESCRIPTION => "ruby 1.9.3p194 (2012-04-20 revision 35410) [x86_64-darwin12.2.0]"
  • MacVim 7.3.754
  • :ruby p RUBY_DESCRIPTION => "ruby 1.8.7 (2012-02-08 patchlevel 358) [universal-darwin12.0]"
  • iMac i5 2.7GHz メモリ12GB
@mattn
Member
mattn commented Apr 24, 2013

WindowsXP SP3、vim 7.3.905 では再現しなかった。if_ruby は 2.0.0-p0

@Shougo
Member
Shougo commented Apr 24, 2013

Ubuntu 13.04、Vim 7.3.905では再現しませんでした。if_rubyは1.9.3-p194

@koron
Member
koron commented Apr 24, 2013

逆に隊長さんが問題を確認できた標準以外のモジュール名(gem)を書くべきでは?

あとみんなrubyのバージョンが違いますね。
隊長さんのだけが古いようなので、新しいのに差し替えて再現するか確認できないでしょうか?
2013/04/24 16:33 "alpaca_taichou" notifications@github.com:

うーん、何のgem読み込んだかも書いてもらえますか?


Reply to this email directly or view it on GitHubhttps://github.com/vim-jp/issues/issues/372#issuecomment-16911946
.

@alpaca-tc
Member

@koron
すみません!
既にGistのコード内でrequire 'rspec'で記述していたので、みなさんもそれでテストしたはずです。
不要な質問だったので削除してますが、メールでは届いてしまったようです。

新しいRubyだとコンパイルが必要なので、週末になら再現出来ると思います。

@ynkdir
Member
ynkdir commented Apr 24, 2013

vim-ruby-devel: Omni completion stack overflow
http://rubyforge.org/pipermail/vim-ruby-devel/2007q1/000697.html
このスレッドの
http://rubyforge.org/pipermail/vim-ruby-devel/2007q1/000698.html
これ。
vimrc に "silent! ruby nil" と書いて直るなら if_ruby の初期化の問題らしいです。
rubyの初期化とコールスタックがどうこういうのなにかで見た気がするようなしないような忘れました。。。

@ynkdir
Member
ynkdir commented Apr 24, 2013

たしかrubyを初期化したコールスタックの位置より浅いところでrubyを使うとダメなんでしたっけ

@ynkdir
Member
ynkdir commented Apr 24, 2013

あーでも他の人は問題ないのか。じゃー勘違いだったかもしれません。すみません。

@heavenshell

私の MacVim(適用済パッチ: 1-754) とデフォルトで入ってる Vim(※)では SEGV しました。
※ Vim7.3(パッチレベルが表示されないからパッチ当たってないのかな…)

Ubuntu12.04 で自分でビルドしたもの(適用済パッチ: 1-915)は以下の通りになりました。

  1. ~/.vim/autoload/test.vim を設置
  2. ~/.vim/autoload/test/initilaize.vim を設置
  3. ~/.vim/autoload/test/initilaize.vim を開く
  4. :call test#initialize#expect_error() を実行
function test#initialize#expect_error の処理中にエラーが検出されました:
行    9:
LoadError: cannot load such file -- rspec

rspec がインストールされてないので、多分正しい動き(ですよね?)。
(Ubuntu の Ruby は ruby 1.9.3p194 (2012-04-20 revision 35410) で aptitude でインストールした)

これが MacVim(Terminal.app から実行) では
4. を実行した段階で、SEGV しました。
ただし、4. の前で :ruby p RUBY_DESCRIPTION と一回 Ruby を実行すると SEGV しませんでした。
また initialize.vim の call test#initialize() をコメントにし実行すると SEGV しませんでした。
(Ubuntu のと同じ動作)

Ruby は MacPorts でインストールした ruby 1.9.3p392 (2013-02-22 revision 39386) [x86_64-darwin12] です。
vimrc には MacVim Kaoriya の設定で let $RUBY_DLL="/opt/local/lib/libruby.1.9.1.dylib" として Mac 組み込みではない Ruby を使ってます。
Mac のデフォルトの Vim の場合 Ruby は ruby 1.8.7 (2012-02-08 patchlevel 358) [universal-darwin12.0] です。
なお Mac OS は最新の 10.8.3 です。

SEGV ってるので報告されたissue の現象と違いますが一応報告まで。
https://gist.github.com/heavenshell/5452911

@koron
Member
koron commented Apr 24, 2013

確かに @ynkdir さんの

rubyを初期化したコールスタックの位置より浅いところでrubyを使うとダメ

は説得力があるように見える。あとこれは autoload じゃなければ起こらないのかしら?

@koron
Member
koron commented Apr 24, 2013

rubyを初期化したコールスタックの位置より浅いところでrubyを使うとダメ

これを検証すべくいろいろやってみたけど再現はせず。どうも本件とは違うっぽい。
Windows な KaoriYa Vim の 7.3.905 + ruby 1.9.2

@koron
Member
koron commented Apr 24, 2013

あ、そうか。オレMBA持ってるからそれで試せば良いんだw

@koron
Member
koron commented Apr 24, 2013

たったこれだけを書いた crash-ruby.vim を source するだけで落とせた。

https://gist.github.com/koron/5453723

function! s:init()
  ruby << EOF
EOF
endfunction

call s:init()
ruby << EOF
require 'net/http'
require 'net/http'
EOF

2つめのrequireで落ちてる。1つだけなら落ちない。

環境は vim-jp にある MacVim (7.3.754) + MacOSX標準の ruby 1.8.7
OSX 10.8.2 で、2011年 MidのMBA

@koron
Member
koron commented Apr 24, 2013

上記スクリプト、Windowsだと落ちないっぽいよ。

@alpaca-tc
Member

@ynkdir 僕はまさにこの現象でした!
直りました。ありがとうございます。

@alpaca-tc alpaca-tc closed this Apr 24, 2013
@koron
Member
koron commented Apr 25, 2013

ん~これ閉じちゃっていいのかなぁ…

@koron
Member
koron commented Apr 25, 2013

なんで MacOSX だけで発生するんだろう。

@koron
Member
koron commented Apr 25, 2013

直すかどうかは別として発生状況を把握しておきたいので

to all: 私のミニマムなスクリプトで発生するかどうか試験をお願いできますか?

function! s:init()
  ruby << EOF
EOF
endfunction

call s:init()
ruby << EOF
require 'net/http'
require 'net/http'
EOF
@koron koron reopened this Apr 25, 2013
@mattn
Member
mattn commented Apr 25, 2013

Windowsだと落ちないすな。

@koron
Member
koron commented Apr 25, 2013

@mattn MinGW でしたよね。

@mattn
Member
mattn commented Apr 25, 2013

ですね

@k-takata
Member

Linux (Ubuntu 12.04 64bit)で落ちました。
Vim 7.3.884, Ruby 1.8.7 p352

Vim: 致命的シグナル ABRT を検知しました
Vim: 終了しました.
中止 (コアダンプ)
@itchyny
itchyny commented Apr 25, 2013

OSX 10.8.3, vim 7.3 1-911

 $ vim --version | head -n 3
VIM - Vi IMproved 7.3 (2010 Aug 15, compiled Apr 24 2013 21:16:33)
MacOS X (unix) version
Included patches: 1-911
 $ vim -u NONE -S crash-ruby.vim
Vim: Caught deadly signal SEGV
Vim: Finished.
zsh: segmentation fault  vim -u NONE -S crash-ruby.vim
                                                %                                                                                                                                                 $

OSX 10.8.3, 最初から入っていたvim

 $ vim/vim@apple --version | head -n 3
VIM - Vi IMproved 7.3 (2010 Aug 15, compiled Jun 20 2012 13:16:02)
Compiled by root@apple.com
Normal version without GUI.  Features included (+) or not (-):
 $ vim/vim@apple -u NONE -S crash-ruby.vim
Vim: Caught deadly signal ABRT
Vim: Finished.
zsh: abort     vim/vim@apple -u NONE -S crash-ruby.vim
                                                          %                                                                                                                                       $

rubyは

 $ ruby --version
ruby 1.9.3p362 (2012-12-25 revision 38607) [x86_64-darwin12.2.0]
@koron
Member
koron commented Apr 25, 2013

うちで過去に配ってたMSVC 64bitなVimでも試してみたが発生せず。753と762。
なのでVim本体に原因がある可能性は考えなくて良さそう。

@koron
Member
koron commented Apr 25, 2013

Thanks all! あとで皆さんの結果をまとめますね。

@k-takata
Ubuntuでも落ちた、ってのは実は朗報?w

@mattn
Member
mattn commented Apr 25, 2013

@ynkdir 遅延ロードしてるのが原因ですよねこれ

@ynkdir
Member
ynkdir commented Apr 25, 2013

そうですね。遅延ロードというよりはruby_initのタイミングなんだと思いますけど。

Ubuntu 12.10
ruby 1.9.3p194 (2012-04-20 revision 35410) [x86_64-linux]
Vim 7.3.917
特に問題なしです。

@mattn
Member
mattn commented Apr 25, 2013

あれ、linuxでも落ちない環境があるのか。

rubyに限った話じゃないですがvimは初回の使い出しまでruby_initを呼び出さないですからね。
困ったな。

@ynkdir
Member
ynkdir commented Apr 25, 2013

すいません実際そのへんは調べたわけではないのでほんとにそれが原因かはわからないです。

@heavenshell

Ubunt 12.04 でも crash-ruby.vim が SEGV しました。
ruby 1.9.3p194 (2012-04-20 revision 35410) [x86_64-linux] だと正常
ruby 1.8.7 (2012-02-08 patchlevel 358) [x86_64-linux] は SEGV

インストールしている Ruby が 1.8.7 だと落ちました。
Mac のデフォルトの Ruby も 1.8.7 なのでここら辺関係してますかね。

Vim は 7.3.918 です。

@k-takata
Member

こちらも ruby 1.9.3p0 に変更したところ、落ちなくなりました。

@alpaca-tc
Member

@mattn
Try adding "silent! ruby nil" to your vimrc. If this hides the problem, the true cause is some other plugin initializing
the ruby interface.
ゆーてるんで、どのプラグインよりも早く、かつコンテキストの外部で初期化を行うコード追加すれば直るのかチェックするのが良いんじゃないでしょうか。
さしずめ、vimrcの先頭か、より良い場所があるとすればプリインストールされているvimのruntimeのどこかでしょうか。

@mattn
Member
mattn commented Apr 25, 2013

2007年の話だしなーw

@koron
Member
koron commented Apr 25, 2013

ここまでをまとめるとruby が1.8.xだと落ちて、1.9以降ならば発生していないと推測されます。
これが真なら本事象は無視して良い、もしくはドキュメント対応で十分だと考えられます。

ただし例外として @heavenshell@itchyny さんの環境は1.9でも落ちているように見受けられます。
でもどちらのケースも 1.9につないだつもりが1.8につながってる可能性 を否定できません。
そのあたりちゃんと切り分けは可能でしょうか? > @heavenshell & @itchyny

Vim から

:ruby p RUBY_DESCRIPTION

を実行してバージョンを確認してもらえると助かります。

@itchyny
itchyny commented Apr 25, 2013

すみません, 私の書き込んだ結果はすべて無視して下さい. (+rubyだからruby入っていると思っていましたが, :ruby p RUBY_DESCRIPTIONでSEGVってVimが落ちました)

@heavenshell

@koron さん
ruby 1.9.3p327 (2012-11-10 revision 37606) [x86_64-darwin10] となってますね。
Mac のクラッシュレポートをみたら、

14  libruby.1.9.dylib               0x0000000106300141 rb_load_internal + 241
15  libruby.1.9.dylib               0x00000001063012ab rb_require_safe + 891
16  libruby.1.9.dylib               0x00000001063f3f8b vm_call_method + 875
17  libruby.1.9.dylib               0x00000001063f6441 vm_exec_core + 7601
18  libruby.1.9.dylib               0x00000001063fc353 vm_exec + 1475
19  libruby.1.9.dylib               0x00000001063fc8e3 eval_string_with_cref + 515
20  libruby.1.9.dylib               0x00000001062fd868 rb_protect + 232
21  Vim                             0x000000010018fb6b ex_ruby + 91
22  Vim                             0x0000000100061db1 do_one_cmd + 10113

と libruby.1.9.dylib を呼んでるから Ruby1.9 だと思います(ちょっと自信がないですが)。

ちょっと時間が出来たら(週末にでも) Mac で Vim をビルドして試したいと思います。

@heavenshell

ちなみに vimrc に execute 'silent! ruby nil' とすると落ちなくなるので、「落ちて困る人はそう設定してね」とすれば救う事は出来ます。
ユーザ自身が if_ruby を使ってるかどうかプラグインの中身まで把握する必要がありますが。

@alpaca-tc
Member

@heavenshell 今回の問題はバグでは無く仕様だと思うので、僕はその設定を教えるだけで良いと思います。

@mattn
Member
mattn commented Apr 25, 2013

仕様でも落ちるはいただけないかな。せめて落ちない要にはしたい。

@heavenshell

私も SEGV するのが仕様と言われるのは違うかと思います。
ただ、現状 Ruby1.8.7 と 1.9.x も Mac でしか起きない。
Mac も Ruby1.8.7 は近い将来に 1.9.x もしくは 2.0.x に置き換わるはずですし、
デフォルトが 1.9.x になるからそうなったら発生しないんじゃないかなーと何の根拠も無く思ってます。
(なので時間が出来たら自分で Vim をビルドして確認したい)

@koron
Member
koron commented Apr 25, 2013

これはオレがVimを1.8にリンクして落ちるかどうか確かめる流れだろうか?

@nakinor
nakinor commented Apr 25, 2013

crash-ruby.vim の :source % 結果。下記の実行環境はすべて vim 7.3.918, ruby 2.0.0p0 です。

MacOSX 10.3.9 (PowerPC 32bit) 落ちない
MacOSX 10.8.3 (i7 64bit?) 落ちる
WindowsXP sp3 (PentiumM 32bit) 落ちない

でした。なお、Vim も Ruby も野良ビルドです。
64 bit CPU だから?

@koron
Member
koron commented Apr 25, 2013

なんか不思議な状況になってまいりましたなぁ…64bitだけが条件ならうちでも落ちるはず。

@koron
Member
koron commented Apr 25, 2013

core とれた人に gdb で見てもらって、どのへんで落ちてるか検証してもらいたいところですが…

@wiredool

こんな情報でお役に立つでしょうか?
Linuxな環境 azure の openlogic cent6.3 64bit です。
新規環境ではないです。

ruby --version
ruby 1.8.7 (2011-06-30 patchlevel 352) [x86_64-linux]
cd vim
make distclean
./configure --enable-rubyinterp
make
make test

./src/vim --version
  VIM - Vi IMproved 7.3 (2010 Aug 15, compiled Apr 25 2013 14:32:07)
  Included patches: 1-918
  ...
  +ruby
  ...

./src/vim -N -u NONE -U NONE -c "ruby p RUBY_DESCRIPTION"
"ruby 1.8.7 (2011-06-30 patchlevel 352) [x86_64-linux]"
ulimit -c 100000000
curl -LO https://gist.github.com/koron/5453723/raw/043553ecff0b6c50c44a61717e09bf28d8a2ec94/crash-ruby.vim

./src/vim -N -u NONE -U NONE -c "so crash-ruby.vim"
  Vim: Caught deadly signal ABRT
  Vim: Finished.
  Aborted (core dumped)
gdb ./src/vim ./core.13220 
GNU gdb (GDB) Red Hat Enterprise Linux (7.2-56.el6)
Copyright (C) 2010 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-redhat-linux-gnu".
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>...
Reading symbols from /home/sola/repos/vim/src/vim...done.
[New Thread 13220]
Missing separate debuginfo for 
Try: yum --disablerepo='*' --enablerepo='*-debug*' install /usr/lib/debug/.build-id/14/99d8c71a6302e08bdecb7747cbed809d001724
Reading symbols from /lib64/libm.so.6...(no debugging symbols found)...done.
Loaded symbols for /lib64/libm.so.6
Reading symbols from /lib64/libtinfo.so.5...(no debugging symbols found)...done.
Loaded symbols for /lib64/libtinfo.so.5
Reading symbols from /lib64/libselinux.so.1...(no debugging symbols found)...done.
Loaded symbols for /lib64/libselinux.so.1
Reading symbols from /usr/lib64/libruby.so.1.8...(no debugging symbols found)...done.
Loaded symbols for /usr/lib64/libruby.so.1.8
Reading symbols from /lib64/libpthread.so.0...(no debugging symbols found)...done.
[Thread debugging using libthread_db enabled]
Loaded symbols for /lib64/libpthread.so.0
Reading symbols from /lib64/libdl.so.2...(no debugging symbols found)...done.
Loaded symbols for /lib64/libdl.so.2
Reading symbols from /lib64/libc.so.6...(no debugging symbols found)...done.
Loaded symbols for /lib64/libc.so.6
Reading symbols from /lib64/ld-linux-x86-64.so.2...(no debugging symbols found)...done.
Loaded symbols for /lib64/ld-linux-x86-64.so.2
Reading symbols from /lib64/librt.so.1...(no debugging symbols found)...done.
Loaded symbols for /lib64/librt.so.1
Reading symbols from /lib64/libcrypt.so.1...(no debugging symbols found)...done.
Loaded symbols for /lib64/libcrypt.so.1
Reading symbols from /lib64/libgcc_s.so.1...(no debugging symbols found)...done.
Loaded symbols for /lib64/libgcc_s.so.1
Reading symbols from /lib64/libfreebl3.so...(no debugging symbols found)...done.
Loaded symbols for /lib64/libfreebl3.so
Reading symbols from /lib64/libnss_files.so.2...(no debugging symbols found)...done.
Loaded symbols for /lib64/libnss_files.so.2
Reading symbols from /usr/lib64/ruby/1.8/x86_64-linux/socket.so...(no debugging symbols found)...done.
Loaded symbols for /usr/lib64/ruby/1.8/x86_64-linux/socket.so
Core was generated by `./src/vim -N -u NONE -U NONE -c so crash-ruby.vim'.
Program terminated with signal 6, Aborted.
#0  0x0000003303032b87 in kill () from /lib64/libc.so.6
Missing separate debuginfos, use: debuginfo-install glibc-2.12-1.80.el6_3.6.x86_64 glibc-2.12-1.80.el6_3.7.x86_64 libgcc-4.4.6-4.el6.x86_64 libselinux-2.0.94-5.3.el6.x86_64 ncurses-libs-5.7-3.20090208.el6.x86_64 nss-softokn-freebl-3.12.9-11.el6.x86_64 ruby-libs-1.8.7.352-7.el6_2.x86_64
(gdb) backtrace
#0  0x0000003303032b87 in kill () from /lib64/libc.so.6
#1  0x00000000004e8ffa in mch_exit (r=1) at os_unix.c:3187
#2  <signal handler called>
#3  0x00000033030328a5 in raise () from /lib64/libc.so.6
#4  0x0000003303034085 in abort () from /lib64/libc.so.6
#5  0x00007f39d1e1bb63 in rb_bug () from /usr/lib64/libruby.so.1.8
#6  0x00007f39d1e1ebcb in ?? () from /usr/lib64/libruby.so.1.8
#7  0x00007f39d1e2459c in ?? () from /usr/lib64/libruby.so.1.8
#8  0x00007f39d1e37089 in ?? () from /usr/lib64/libruby.so.1.8
#9  0x00007f39d1e37ae1 in rb_eval_string () from /usr/lib64/libruby.so.1.8
#10 0x00007f39d1e20469 in rb_protect () from /usr/lib64/libruby.so.1.8
#11 0x000000000054e87b in ex_ruby (eap=0x7fff95512b50) at if_ruby.c:579
#12 0x0000000000473927 in do_one_cmd (cmdlinep=0x7fff95513228, sourcing=1, 
    cstack=0x7fff95512d00, fgetline=0x466de0 <getsourceline>, 
    cookie=<value optimized out>) at ex_docmd.c:2684
#13 0x0000000000471f63 in do_cmdline (cmdline=<value optimized out>, 
    fgetline=0x466de0 <getsourceline>, cookie=0x7fff95513320, flags=7)
    at ex_docmd.c:1122
#14 0x0000000000467358 in do_source (fname=0xd009a3 "crash-ruby.vim", 
    check_other=<value optimized out>, is_vimrc=<value optimized out>)
    at ex_cmds2.c:3260
#15 0x00000000004676b4 in cmd_source (fname=0xd009a3 "crash-ruby.vim", 
    eap=<value optimized out>) at ex_cmds2.c:2869
#16 0x0000000000473927 in do_one_cmd (cmdlinep=0x7fff95513b68, sourcing=1, 
    cstack=0x7fff95513640, fgetline=0, cookie=<value optimized out>)
    at ex_docmd.c:2684
#17 0x0000000000471f63 in do_cmdline (cmdline=<value optimized out>, 
    fgetline=0, cookie=0x0, flags=11) at ex_docmd.c:1122
#18 0x00000000005563c5 in exe_commands (argc=<value optimized out>, 
    argv=<value optimized out>) at main.c:2873
#19 main (argc=<value optimized out>, argv=<value optimized out>) at main.c:924
(gdb) 
@heavenshell

MacOS10.6.8 32bit で Vim を自分でビルド、Ruby は MacPorts から Ruby1.9.3 な環境で crash-ruby.vim を実行したら SEGV しました。

MacOS10.8.3(64bit)で Vim を +ruby19 付きで MacPorts からインストールして crash-ruby.vim を実行したら SEGV しました。
私の Mac は 32bit, 64bit 関係なく 100% 落ちますね…。

@h-east
Member
h-east commented Apr 25, 2013

@heavenshell お疲れ様です。
:ruby p RUBY_DESCRIPTION
の結果もよろしくお願いします。

@heavenshell

MacOS 10.6.6 32bit => ruby 1.9.3p125 (2012-02-16 revision 34643) [x86_64-darwin10]
MacOS 10.8.3 64bit => ruby 1.9.3p392 (2013-02-22 revision 39386) [x86_64-darwin12]

です。

@h-east
Member
h-east commented Apr 25, 2013

@wiredool 情報thanksです。
@heavenshell どもです。

@koron
Member
koron commented Apr 25, 2013

いま thread_pthread.c: ruby_init_stack 読んでたんだけどやばそうな雰囲気がする。
pthread 使ってる、 __ia64 あたりが条件のなるかも。Winはpthreadないから発生しない、とかとか。

@wiredool

デバッグ周りを更新したバージョンのバックトレースです。
debug-info のインストールと、フラグの指定(CFLAGS="-g -O0")をしました。
警告出ていて怪しいですが、一応貼っておきます。

gdb ./src/vim ./core.19780 
GNU gdb (GDB) Red Hat Enterprise Linux (7.2-56.el6)
Copyright (C) 2010 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-redhat-linux-gnu".
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>...
Reading symbols from /home/sola/repos/vim/src/vim...done.
[New Thread 19780]
Missing separate debuginfo for /lib64/libfreebl3.so
Try: yum --disablerepo='*' --enablerepo='*-debug*' install /usr/lib/debug/.build-id/68/195872ecfb188389d29aaf01031a976fd18168
Missing separate debuginfo for 
Try: yum --disablerepo='*' --enablerepo='*-debug*' install /usr/lib/debug/.build-id/14/99d8c71a6302e08bdecb7747cbed809d001724
Reading symbols from /lib64/libm-2.12.so...Reading symbols from /usr/lib/debug/lib64/libm-2.12.so.debug...done.
done.
Loaded symbols for /lib64/libm-2.12.so
Reading symbols from /lib64/libtinfo.so.5...(no debugging symbols found)...done.
Loaded symbols for /lib64/libtinfo.so.5
Reading symbols from /lib64/libselinux.so.1...Reading symbols from /usr/lib/debug/lib64/libselinux.so.1.debug...done.
done.
Loaded symbols for /lib64/libselinux.so.1
Reading symbols from /usr/lib64/libruby.so.1.8.7...Reading symbols from /usr/lib/debug/usr/lib64/libruby.so.1.8.7.debug...done.
done.
Loaded symbols for /usr/lib64/libruby.so.1.8.7
Reading symbols from /lib64/libpthread-2.12.so...Reading symbols from /usr/lib/debug/lib64/libpthread-2.12.so.debug...done.
[Thread debugging using libthread_db enabled]
done.
Loaded symbols for /lib64/libpthread-2.12.so
Reading symbols from /lib64/libdl-2.12.so...Reading symbols from /usr/lib/debug/lib64/libdl-2.12.so.debug...done.
done.
Loaded symbols for /lib64/libdl-2.12.so
Reading symbols from /lib64/libc-2.12.so...Reading symbols from /usr/lib/debug/lib64/libc-2.12.so.debug...done.
done.
Loaded symbols for /lib64/libc-2.12.so
Reading symbols from /lib64/ld-2.12.so...Reading symbols from /usr/lib/debug/lib64/ld-2.12.so.debug...done.
done.
Loaded symbols for /lib64/ld-2.12.so
Reading symbols from /lib64/librt-2.12.so...Reading symbols from /usr/lib/debug/lib64/librt-2.12.so.debug...done.
done.
Loaded symbols for /lib64/librt-2.12.so
Reading symbols from /lib64/libcrypt-2.12.so...Reading symbols from /usr/lib/debug/lib64/libcrypt-2.12.so.debug...done.
done.
Loaded symbols for /lib64/libcrypt-2.12.so
Reading symbols from /lib64/libgcc_s-4.4.6-20120305.so.1...Reading symbols from /usr/lib/debug/lib64/libgcc_s-4.4.6-20120305.so.1.debug...done.
done.
Loaded symbols for /lib64/libgcc_s-4.4.6-20120305.so.1
Reading symbols from /lib64/libfreebl3.so...
warning: the debug information found in "/usr/lib/debug//lib64/libfreebl3.so.debug" does not match "/lib64/libfreebl3.so" (CRC mismatch).


warning: the debug information found in "/usr/lib/debug/lib64/libfreebl3.so.debug" does not match "/lib64/libfreebl3.so" (CRC mismatch).

Missing separate debuginfo for /lib64/libfreebl3.so
Try: yum --disablerepo='*' --enablerepo='*-debug*' install /usr/lib/debug/.build-id/68/195872ecfb188389d29aaf01031a976fd18168.debug
(no debugging symbols found)...done.
Loaded symbols for /lib64/libfreebl3.so
Reading symbols from /lib64/libnss_files-2.12.so...Reading symbols from /usr/lib/debug/lib64/libnss_files-2.12.so.debug...done.
done.
Loaded symbols for /lib64/libnss_files-2.12.so
Reading symbols from /usr/lib64/ruby/1.8/x86_64-linux/socket.so...Reading symbols from /usr/lib/debug/usr/lib64/ruby/1.8/x86_64-linux/socket.so.debug...done.
done.
Loaded symbols for /usr/lib64/ruby/1.8/x86_64-linux/socket.so
Core was generated by `./src/vim -N -u NONE -U NONE -c so crash-ruby.vim'.
Program terminated with signal 6, Aborted.
#0  0x0000003303032b87 in kill () at ../sysdeps/unix/syscall-template.S:82
82  T_PSEUDO (SYSCALL_SYMBOL, SYSCALL_NAME, SYSCALL_NARGS)
Missing separate debuginfos, use: debuginfo-install ncurses-libs-5.7-3.20090208.el6.x86_64
(gdb) backtrace
#0  0x0000003303032b87 in kill () at ../sysdeps/unix/syscall-template.S:82
#1  0x000000000050dd6c in may_core_dump () at os_unix.c:3221
#2  0x000000000050dd24 in mch_exit (r=1) at os_unix.c:3187
#3  0x0000000000591af5 in getout (exitval=1) at main.c:1497
#4  0x00000000004d707e in preserve_exit () at misc1.c:9207
#5  0x000000000050c9a9 in deathtrap (sigarg=6) at os_unix.c:1104
#6  <signal handler called>
#7  0x00000033030328a5 in raise (sig=6) at ../nptl/sysdeps/unix/sysv/linux/raise.c:64
#8  0x0000003303034085 in abort () at abort.c:92
#9  0x00007f2245927b63 in rb_bug (fmt=0x7f22459a9f62 "terminated node (0x%lx)") at error.c:213
#10 0x00007f224592abcb in unknown_node (node=0x7f223f82f8d0) at eval.c:2945
#11 0x00007f224593059c in rb_eval (self=139785071305400, n=0x7f223f82f8d0) at eval.c:4199
#12 0x00007f2245943089 in eval (self=139785071305400, src=139785071164160, scope=4, file=0x16e90c1 "(eval)", line=0) at eval.c:6653
#13 0x00007f2245943ae1 in rb_eval_string (str=0x1687b80 "require 'net/http'\nrequire 'net/http'\n") at eval.c:1721
#14 0x00007f224592c469 in rb_protect (proc=0x7f2245943a80 <rb_eval_string>, data=23624576, state=0x7fff1d633194) at eval.c:5577
#15 0x0000000000588c00 in ex_ruby (eap=0x7fff1d633210) at if_ruby.c:579
#16 0x0000000000478ece in do_one_cmd (cmdlinep=0x7fff1d633878, sourcing=1, cstack=0x7fff1d6333d0, fgetline=0x474c82 <getsourceline>, cookie=0x7fff1d6339f0) at ex_docmd.c:2684
#17 0x00000000004764f8 in do_cmdline (cmdline=0x0, fgetline=0x474c82 <getsourceline>, cookie=0x7fff1d6339f0, flags=7) at ex_docmd.c:1122
#18 0x00000000004749d2 in do_source (fname=0x16749a3 "crash-ruby.vim", check_other=0, is_vimrc=0) at ex_cmds2.c:3260
#19 0x0000000000474319 in cmd_source (fname=0x16749a3 "crash-ruby.vim", eap=0x7fff1d633b30) at ex_cmds2.c:2869
#20 0x0000000000474268 in ex_source (eap=0x7fff1d633b30) at ex_cmds2.c:2842
#21 0x0000000000478ece in do_one_cmd (cmdlinep=0x7fff1d634198, sourcing=1, cstack=0x7fff1d633cf0, fgetline=0, cookie=0x0) at ex_docmd.c:2684
#22 0x00000000004764f8 in do_cmdline (cmdline=0x7fff1d635812 "so crash-ruby.vim", fgetline=0, cookie=0x0, flags=11) at ex_docmd.c:1122
#23 0x0000000000475c50 in do_cmdline_cmd (cmd=0x7fff1d635812 "so crash-ruby.vim") at ex_docmd.c:727
#24 0x00000000005937c6 in exe_commands (parmp=0x7fff1d6342b0) at main.c:2873
#25 0x0000000000591239 in main (argc=8, argv=0x7fff1d6344d8) at main.c:924
#13 0x00007f2245943ae1 in rb_eval_string (str=0x1687b80 "require 'net/http'\nrequire 'net/http'\n") at eval.c:1721
#14 0x00007f224592c469 in rb_protect (proc=0x7f2245943a80 <rb_eval_string>, data=23624576, state=0x7fff1d633194) at eval.c:5577
#15 0x0000000000588c00 in ex_ruby (eap=0x7fff1d633210) at if_ruby.c:579
#16 0x0000000000478ece in do_one_cmd (cmdlinep=0x7fff1d633878, sourcing=1, cstack=0x7fff1d6333d0, fgetline=0x474c82 <getsourceline>, cookie=0x7fff1d6339f0) at ex_docmd.c:2684
#17 0x00000000004764f8 in do_cmdline (cmdline=0x0, fgetline=0x474c82 <getsourceline>, cookie=0x7fff1d6339f0, flags=7) at ex_docmd.c:1122
#18 0x00000000004749d2 in do_source (fname=0x16749a3 "crash-ruby.vim", check_other=0, is_vimrc=0) at ex_cmds2.c:3260
#19 0x0000000000474319 in cmd_source (fname=0x16749a3 "crash-ruby.vim", eap=0x7fff1d633b30) at ex_cmds2.c:2869
#20 0x0000000000474268 in ex_source (eap=0x7fff1d633b30) at ex_cmds2.c:2842
#21 0x0000000000478ece in do_one_cmd (cmdlinep=0x7fff1d634198, sourcing=1, cstack=0x7fff1d633cf0, fgetline=0, cookie=0x0) at ex_docmd.c:2684
#22 0x00000000004764f8 in do_cmdline (cmdline=0x7fff1d635812 "so crash-ruby.vim", fgetline=0, cookie=0x0, flags=11) at ex_docmd.c:1122
#23 0x0000000000475c50 in do_cmdline_cmd (cmd=0x7fff1d635812 "so crash-ruby.vim") at ex_docmd.c:727
#24 0x00000000005937c6 in exe_commands (parmp=0x7fff1d6342b0) at main.c:2873
#25 0x0000000000591239 in main (argc=8, argv=0x7fff1d6344d8) at main.c:924
@koron
Member
koron commented Apr 25, 2013

1.8 と 1.9 で eval.c が大きく変わっててワロタ
1/13 になってるw

@koron
Member
koron commented Apr 25, 2013

core の情報とソースからざっくり推測すると
何らかのトリガーでNODE生成のバグを踏んじゃって、それを検出してrubyが自死した。
バグがありそうなのはeval() から rb_eval() の間…かなぁ。

今夜はここまで。

@koron
Member
koron commented May 3, 2013

++@ynkdir & 👍

@ynkdir
Member
ynkdir commented May 4, 2013

バグレポート出しといてあれですがそもそもスタック初期化からクラッシュにどうつながるのかがまったく理解できてないので全然違うとこつついてる可能性もあります

@koron
Member
koron commented May 4, 2013

コードをざっと眺めた限り、pthreadのとき初期化でスタックポインタ抱えてるので、
実行スレッドのスタックサイズを監視しようとして
引き算が逆になってむちゃくちゃ大きな値でチェックにひっかかるだろうなー
とかそういう推測はしてます。

@ynkdir
Member
ynkdir commented May 6, 2013

ruby の中の人に聞いたところ

  1. ruby の関数を呼び出すときには毎度 RUBY_INIT_STACK が必要。
  2. プログラムの早い段階で RUBY_INIT_STACK を呼んで。
    とのことです。
    私的にはとりあえず vimrc に :ruby nil を書いてもらうという方向でいいかなーと思いました。
@koron
Member
koron commented May 6, 2013

ruby の関数を呼び出すときには毎度 RUBY_INIT_STACK が必要。

これ、そのようにif_rubyを書き換えないとアカンとちゃうのでは?
逆にそうすれば

vimrc に :ruby nil を書いてもらう

これの必要はないわけで。

@ynkdir
Member
ynkdir commented May 6, 2013

vimのコードでは試してませんが再現用のコードでは1は効果がなくて2で落ちなくなりました。
両方必要なのかもしれませんが。
ドキュメントもないしよくわからないのでrubyが分かる人にお任せしたいかなーという感じです。

@k-takata
Member

h.shirosakiさんがvim_devに投げておられます。
https://groups.google.com/d/topic/vim_dev/b9T8fcbJvzU/discussion

@k-takata
Member

7.3.933 で取り込まれました。(が、私自身はまだ動作確認していません。)
https://groups.google.com/d/topic/vim_dev/pDHvzliY_O8/discussion

@ynkdir
Member
ynkdir commented May 11, 2013

ああしまった、1.8 + ia64 + static link でコンパイルエラーになるはず…すんません。
まあいいか…いいのかな…

@ynkdir
Member
ynkdir commented May 11, 2013

Hiroshi Shirosaki さん、ありがとうございました。

@taichouchou2 さん、いちおう確認お願いできますか。
確認できたら close お願いします。

@h-east
Member
h-east commented May 11, 2013

@shirosaki さん、@ynkdir さん、対応ありがとうございます。お疲れ様です。

@alpaca-tc
Member

@shirosaki さん @ynkdir さん @h-east さんありがとうございます。
確認したところ、下記エラーが出ましたので恐らく望んでいる挙動では無い気がします。
うーん、何か僕も協力したいけど知識が足りない気がする...

-- エラーメッセージ pattern1
Error detected while processing /Users/alpaca_tc/crash.vim:
line 10:
NotImplementedError: method `to_str' called on hidden T_ARRAY object (0x007fd702a79190 flags=0x2807 k
lass=0x0)

-- エラーメッセージ pattern2
Error detected while processing /Users/alpaca_tc/crash.vim:
line 10:
TypeError: no implicit conversion of Array into String

-- バージョン情報
vim --version
VIM - Vi IMproved 7.3 (2010 Aug 15, compiled May 12 2013 01:39:59)
MacOS X (unix) version
Included patches: 1-933
Compiled by alpaca_tc@alpaca-air.local

ちなみに、vimrcの先頭に下記コードを追加した場合はエラーが発生しません。
これと同じ状況にすべく修正するんですよね?

if has('ruby')
silent! ruby nil
endif

@ynkdir
Member
ynkdir commented May 11, 2013

もしかして ruby はスタティックリンクですか
であれば 7.3.935 で試してみてください

@alpaca-tc
Member

@ynkdir 大丈夫でした!
ありがとうございます

@alpaca-tc alpaca-tc closed this May 11, 2013
@shirosaki

@ynkdir ありがとうございます。1.8 + ia64 + static link は確かに抜けてそうですね。そのままでも問題ないかもしれませんが、一応報告しておきました。

@ynkdir
Member
ynkdir commented May 11, 2013

すみません。ありがとうございます。

@ynkdir
Member
ynkdir commented May 20, 2013

これもしかしてWindowsビルドでif_ruby壊れてませんか

if_ruby:
 738 #if defined(RUBY_VERSION) && RUBY_VERSION >= 18
 739                 ruby_init_stack(ruby_stack_start);
 740 #endif

Windows用のMakefileだとRUBY_VERSIONが定義されないような…

1.8.5 でビルドできない件でこっそり直したい予定

@koron
Member
koron commented May 20, 2013

rubyがstackみるのはpthreadの時だけだから問題になってない予感w
コンパイルはできてます。

@ynkdir
Member
ynkdir commented May 20, 2013

だいじょうぶでしたか
修正してもらえたのでまーなんにしても一安心

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment