Forum: Ruby-dev [ruby-trunk - Bug #7591][Open] SEGV on sparc Solaris10 when Marshal.dump

Posted by ngoto (Naohisa Goto) (Guest)
on 2012-12-19 15:27
(Received via mailing list)
Issue #7591 has been reported by ngoto (Naohisa Goto).

----------------------------------------
Bug #7591: SEGV on sparc Solaris10 when Marshal.dump
https://bugs.ruby-lang.org/issues/7591

Author: ngoto (Naohisa Goto)
Status: Open
Priority: Normal
Assignee:
Category:
Target version:
ruby -v: ruby 2.0.0dev (2012-12-16) [sparc64-solaris2.10]


sparc Solaris10 上にて、Oracle Solaris Studio 12.3 にてデフォルトの最適化オプションである -O 
(-xO4 相当)を付けて make すると、rdoc作成時に Marshal.dump 内にて SEGV が発生します。make 
test-all すると、 TestMarshal が Failure になります。

marshal.c の marshal_dump および marshal_load 関数にて、変数 wrapper 
が最適化のためスタックに乗らないようで、w_object 
などの呼び出した先の関数の中で走ったGCによって消されてしまい、SEGVに至るようです。関数の最後のほうにある 
RB_GC_GUARD(wrapper) は効果が無いようです。

添付のパッチのように修正すると治りました。
添付のパッチ適用後は、関数末尾の RB_GC_GUARD(wrapper) は無くても動くようですが、念のため残しています。
Please log in before posting. Registration is free and takes only a minute.
Existing account (Switch to SSL-encrypted connection)
NEW: Do you have a Google/GoogleMail or Yahoo account? No registration required!
Log in with Google account | Log in with Yahoo account
No account? Register here.