るびまの次回予告を書こうとして
なんか退屈だったので
とつなげたところで正気に戻って修正しといた。
(06:41)
うーむ。-O2 のときだけ起こるってやだなあ。
(gdb) bt #0 0x0000002a95b6fdd0 in raise () from /lib/libc.so.6 #1 0x0000002a95b71280 in abort () from /lib/libc.so.6 #2 0x000000000041dc87 in gc_mark_children (ptr=6732336, lev=2) at gc.c:1017 #3 0x000000000041d87b in gc_mark_children (ptr=6732608, lev=1) at gc.c:929 #4 0x000000000047ca4c in iseq_mark (ptr=0x71f380) at yarvcore.c:401 #5 0x000000000041d9c1 in gc_mark_children (ptr=182902853632, lev=2) at gc.c:968 #6 0x000000000041d95e in gc_mark_children (ptr=9, lev=1) at gc.c:949 #7 0x000000000047ca6a in iseq_mark (ptr=0x71ddb0) at yarvcore.c:401 #8 0x000000000041d9c1 in gc_mark_children (ptr=182902853952, lev=8) at gc.c:968 #9 0x000000000041d61e in mark_entry (key=24148, value=24148, lev=24148) at gc.c:688 #10 0x0000000000465eb0 in st_foreach (table=0x6116d0, func=0x41d610 <mark_entry>, arg=7) at st.c:468 #11 0x000000000041d89e in gc_mark_children (ptr=182904035944, lev=7) at gc.c:934 #12 0x000000000041d61e in mark_entry (key=24148, value=24148, lev=24148) at gc.c:688 #13 0x0000000000465eb0 in st_foreach (table=0x611e00, func=0x41d610 <mark_entry>, arg=6) at st.c:468 #14 0x000000000041d8aa in gc_mark_children (ptr=182904035824, lev=6) at gc.c:935 #15 0x000000000041d87b in gc_mark_children (ptr=182904035904, lev=5) at gc.c:929
まあこれくらい見とけばいいだろ。
frame 2。ptr が壊れてる。
frame 3。T_REGEXP と出たが中身は壊れてる。 だいたい iseq に正規表現が入っているというのがよくわからない。
frame 4。これは本当に iseq なのだろうか。
(gdb) p *$15 $16 = {self = 182902853632, name = 182902853672, iseq = 0x71ff50, iseq_encoded = 0x71ff50, iseq_mark_ary = 182902853592, size = 34, insn_info_tbl = 0x720070, insn_info_size = 10, file_name = 182902888232, local_tbl = 0x71aa90, local_size = 2, jit_compiled = 0x0, iseq_orig = 0x0, argc = 2, arg_simple = 1, arg_rest = 0, arg_block = 0, arg_opts = 0, arg_opt_tbl = 0x0, rewind_frame_size = 3, stack_max = 10, type = 7, klass_nest_stack = 6732608, klass = 0, catch_table_ary = 0, catch_table = 0x7200a0, catch_table_size = 2, parent_iseq = 0x71ddb0, local_iseq = 0x71ddb0, node = 0x2a95e06c18, special_block_builder = 0x0, cached_special_block_builder = 0x0, cached_special_block = 0, compile_data = 0x0}
うーん。これは本物のような気がする。うーん。
(gdb) p *(struct RString*)$15->name $20 = {basic = {flags = 39, klass = 182904016944}, len = 22, ptr = 0x71aa70 "block in install_files", aux = {capa = 22, shared = 22}} (gdb) p *(struct RString*)$15->file_name $21 = {basic = {flags = 39, klass = 182904016944}, len = 31, ptr = 0x67cbb0 "/home/aamine/c/yarv/lib/mkmf.rb", aux = {capa = 31, shared = 31}}
やっぱり本物っぽいなあ……。
あ、T_REGEXP があった。
(gdb) rp $15->klass_nest_stack T_REGEXP $22 = {basic = {flags = 182903892776, klass = 6732336}, ptr = 0x2a95ee2010, len = 131072, str = 0x2a95fe1890 ""}
なぜこんなところに正規表現が。
つづく
(09:08)
longjmp で変数が壊れてる、で解決か? と一瞬思ったが全然関係なかった。くそう。
VALUE が malloc() した何らかの値にすりかわっているらしいことはわかった。 ような気がする。単に壊れてるだけのような気もする。
あーもう! どこで壊れてんだよこれ! わからん! 寝る!
(01:28)
Copyright (c) 2002-2007 青木峰郎 / Minero Aoki. All rights reserved.
中味のスタイルを合わせて、正気のままで、ぜひ。 > べ、別に