From: Masaya TARUI Date: 2012-12-02T11:52:31+09:00 Subject: [ruby-dev:46682] Re: [ruby-trunk - Bug #7468] GC_GUARD漏れもしくはmark漏れっぽいエラーが発生してます。 最適化?(手間が増えてるように見える)によって前に飛ばされてたんですね。 そこまで気が回ってませんでした。再現しない事を確認したのでticketを閉じました。 修正ありがとうございます。 2012年12月2日 6:23 kosaki (Motohiro KOSAKI) : > > Issue #7468 has been updated by kosaki (Motohiro KOSAKI). > > > SET_MACHINE_STACK_ENDの実体が > > #if defined(__x86_64__) && defined(__GNUC__) && !defined(__native_client__) > #define SET_MACHINE_STACK_END(p) __asm__ ("movq\t%%rsp, %0" : "=r" (*(p))) > > のように volatileなしasmで、かつオペランド制約にrspを使うということが一切記述されてないので > どういう最適化されても文句はいえないのではないでしょうか。 > > とりあえず r38134 で volatileつけときました。この結果アセンブリは > > 3f92: e8 00 00 00 00 callq 3f97 > 3f97: 48 89 e0 mov %rsp,%rax > 3f9a: 49 8b 7c 24 08 mov 0x8(%r12),%rdi > 3f9f: 49 89 84 24 b0 01 00 mov %rax,0x1b0(%r12) > 3fa6: 00 > 3fa7: 4c 89 e6 mov %r12,%rsi > 3faa: e8 c1 fa ff ff callq 3a70 > > という感じになって、意図した通り gvl_yield()の直前に%rspをメモリに書いているように見えます。問題が再現出来る人がいれば > 誰か確認お願いできませんか。 > > # たとえ直ってなくても r38134 は1.9.3にバックポート必要でしょうね。現状危なすぎる > > ---------------------------------------- > Bug #7468: GC_GUARD漏れもしくはmark漏れっぽいエラーが発生してます。 > https://bugs.ruby-lang.org/issues/7468#change-34296 > > Author: tarui (Masaya Tarui) > Status: Open > Priority: High > Assignee: authorNari (Narihiro Nakamura) > Category: core > Target version: 2.0.0 > ruby -v: ruby -v: ruby 2.0.0dev (2012-11-30 trunk 37999) [x86_64-linux] > > > いつからかtest-allで時々エラーが発生するようになってます。 > > make test-all TESTS="-qv -n /test_string\$$/" > > でsegvや > 1) Error: > test_string(DL::TestFunc): > ArgumentError: assertion message must be String or Proc, but Thread::Backtrace was given. > などと言われるようになりました。 > GC.stress = true なのと、Thread::Backtraceが通常のpassでは入る事はないっぽいのでGC周りのバグだと思います。 > > > > -- > http://bugs.ruby-lang.org/ > -- 樽家昌也(Masaya TARUI) No Tool,No Life.