Please do not reply to this email- if you want to comment on the bug, go to the URL shown below and enter your comments there.
Changed by [EMAIL PROTECTED] http://bugzilla.ximian.com/show_bug.cgi?id=77787 --- shadow/77787 2006-05-11 09:51:35.000000000 -0400 +++ shadow/77787.tmp.13601 2006-05-12 04:13:00.000000000 -0400 @@ -1061,6 +1061,89 @@ ------- Additional Comments From [EMAIL PROTECTED] 2006-05-11 09:51 ------- So the problem here is that GC_base(obj) returns 0, which it shouldn't. Could you step into the GC_base () call with gdb to see why it returns that ? + +------- Additional Comments From [EMAIL PROTECTED] 2006-05-12 04:12 ------- +I did not understand how GC_base was run. +Is it consequence of optimization ? + +Starting program: /home/users/gramuser2/m-1.1.14/bin/mono +/home/users/gramuser2/m-1.1.14/lib/mono/1.0/mcs.exe +[Thread debugging using libthread_db enabled] +[New Thread 2305843009219573216 (LWP 11785)] +[Switching to Thread 2305843009219573216 (LWP 11785)] + +Breakpoint 3, GC_base (p=<value optimized out>) at misc.c:395 +395 r = (word)p; +(gdb) l +390 register struct hblk *h; +391 register bottom_index *bi; +392 register hdr *candidate_hdr; +393 register word limit; +394 +395 r = (word)p; +396 if (!GC_is_initialized) return 0; +397 h = HBLKPTR(r); +398 GET_BI(r, bi); +399 candidate_hdr = HDR_FROM_BI(bi, r); +(gdb) +400 if (candidate_hdr == 0) return(0); +401 /* If it's a pointer to the middle of a large object, move +it */ +402 /* to the beginning. + */ +403 while (IS_FORWARDING_ADDR_OR_NIL(candidate_hdr)) { +404 h = FORWARDED_ADDR(h,candidate_hdr); +405 r = (word)h; +406 candidate_hdr = HDR(h); +407 } +408 if (candidate_hdr -> hb_map == GC_invalid_map) return(0); +409 /* Make sure r points to the beginning of the object */ +(gdb) +410 r &= ~(WORDS_TO_BYTES(1) - 1); +411 { +412 register int offset = HBLKDISPL(r); +413 register signed_word sz = candidate_hdr -> hb_sz; +414 register signed_word map_entry; +415 +416 map_entry = MAP_ENTRY((candidate_hdr -> hb_map), +offset); +417 if (map_entry > CPP_MAX_OFFSET) { +418 map_entry = +(signed_word)(BYTES_TO_WORDS(offset)) % sz; +419 } +(gdb) +420 r -= WORDS_TO_BYTES(map_entry); +421 limit = r + WORDS_TO_BYTES(sz); +422 if (limit > (word)(h + 1) +423 && sz <= BYTES_TO_WORDS(HBLKSIZE)) { +424 return(0); +425 } +426 if ((word)p >= limit) return(0); +427 } +428 return((GC_PTR)r); +429 } +(gdb) display r +1: r = 6917529027641185568 +(gdb) n +398 GET_BI(r, bi); +1: r = 6917529027641185568 +(gdb) n +396 if (!GC_is_initialized) return 0; +1: r = 6917529027641185568 +(gdb) n +397 h = HBLKPTR(r); +1: r = 6917529027641185568 +(gdb) n +396 if (!GC_is_initialized) return 0; +1: r = 6917529027641185568 +(gdb) n +424 return(0); +1: r = 6917529027641185568 +(gdb) n +429 } +1: r = 6917529027641185568 +(gdb) + _______________________________________________ mono-bugs maillist - [email protected] http://lists.ximian.com/mailman/listinfo/mono-bugs
