GCC Bugzilla – Attachment 4764 Details for
Bug 10746
[3.3 regression] [win32] garbage collection crash in GCJ
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
Annotated debugging log based on Oyvind's executable
gdb_log.txt (text/plain), 20.38 KB, created by
Hans Boehm
on 2003-09-15 23:59:27 UTC
(
hide
)
Description:
Annotated debugging log based on Oyvind's executable
Filename:
MIME Type:
Creator:
Hans Boehm
Created:
2003-09-15 23:59:27 UTC
Size:
20.38 KB
patch
obsolete
>first thread 3469000 fgfgff >second thread 2076000 fbfd >first thread 3470000 cccgecab >second thread 2077000 fdcdd > >Program received signal SIGSEGV, Segmentation fault. >0x00410a99 in java::lang::Object::getClass() () >(gdb) where >#0 0x00410a99 in java::lang::Object::getClass() () >#1 0x0040145e in Test.replaceAll(java.lang.String, java.lang.String, java.lang. >String) (in=0x1062000, a=0x1025fd8, b=0xb5efd8) at Test.java:12 >#2 0x00401aec in Test.stressGB(java.lang.String) (thread=0xb5b930) > at Test.java:64 >#3 0x0040173d in Test.main(java.lang.String[]) (args=0xb56fe0) at Test.java:40 >#4 0x004147d2 in gnu::gcj::runtime::FirstThread::run() () >#5 0x0041de67 in _Jv_ThreadRun(java::lang::Thread*) () >#6 0x0040381f in _Jv_RunMain(java::lang::Class*, char const*, int, char const** >, bool) () >#7 0x004038ef in JvRunMain () >#8 0x004012e2 in main (argc=1, argv=0x3f24c8) at c:/temp/cc2Fbaaa.i:11 >(gdb) x/20i 0x00410a80 >... >0x410a90 <_ZN4java4lang6Object8getClassEv>: push %ebp >0x410a91 <_ZN4java4lang6Object8getClassEv+1>: mov %esp,%ebp >0x410a93 <_ZN4java4lang6Object8getClassEv+3>: mov 0x8(%ebp),%eax >0x410a96 <_ZN4java4lang6Object8getClassEv+6>: pop %ebp >0x410a97 <_ZN4java4lang6Object8getClassEv+7>: mov (%eax),%eax >0x410a99 <_ZN4java4lang6Object8getClassEv+9>: mov (%eax),%eax >0x410a9b <_ZN4java4lang6Object8getClassEv+11>: ret >0x410a9c <_ZN4java4lang6Object8getClassEv+12>: lea 0x0(%esi,1),%esi >0x410aa0 <_ZN4java4lang6Object8hashCodeEv>: push %ebp >0x410aa1 <_ZN4java4lang6Object8hashCodeEv+1>: mov $0x3,%ecx >0x410aa6 <_ZN4java4lang6Object8hashCodeEv+6>: mov %esp,%ebp >0x410aa8 <_ZN4java4lang6Object8hashCodeEv+8>: sub $0xc,%esp >0x410aab <_ZN4java4lang6Object8hashCodeEv+11>: mov %ebx,(%esp,1) >(gdb) p/x $ebp >$1 = 0x22fd08 >[The following is the wrong address for the argument. But it's an example of a normal string rep] >(gdb) x/wx 8+$ebp >0x22fd10: 0x01024f90 >(gdb) x/8wx 0x01024f90 >0x1024f90: 0x005a6288 0x01024f90 0x00000014 0x00000000 >0x1024fa0: 0x00000000 0x00000065 0x005a6288 0x01024fa8 >(gdb) x/8wx 0x005a6288 >0x5a6288 <_ZTVN4java4lang6StringE+8>: 0x005a6300 0x00000008 0x00405650 0x00409d40 >0x5a6298 <_ZTVN4java4lang6StringE+24>: 0x0040ae20 0x0040c9f0 0x00410af0 0x005a8e50 >[And now back to more interesting things:] >(gdb) p/x $eax >$2 = 0x0 >(gdb) p GC_gc_no >$3 = 15039 >(gdb) x/4wx $esp >0x22fcec: 0x0040ae49 0x01025fd8 0x01021ff0 0x00000000 >(gdb) x/8wx 0x01025fd8 >0x1025fd8: 0x00000000 0x00000000 0x00000000 0x00000000 >0x1025fe8: 0x00000000 0x00000000 0x00000000 0x00000000 >(gdb) p GC_find_header(0x01025fd8) > >Program received signal SIGSEGV, Segmentation fault. >0x00410a99 in java::lang::Object::getClass() () ... > > >[New crash, same addresses!:] >second thread 163000 cbcbgc >first thread 331000 ddggffca >second thread 164000 cegcc >first thread 332000 fggadac >second thread 165000 ggdgdfcce > >Program received signal SIGSEGV, Segmentation fault. >0x00410a99 in java::lang::Object::getClass() () >(gdb) where 5 >#0 0x00410a99 in java::lang::Object::getClass() () >#1 0x0040145e in Test.replaceAll(java.lang.String, java.lang.String, java.lang. >String) (in=0x106a000, a=0x1025fd8, b=0xb5efd8) at Test.java:12 >#2 0x00401aec in Test.stressGB(java.lang.String) (thread=0xb5b930) > at Test.java:64 >#3 0x0040173d in Test.main(java.lang.String[]) (args=0xb56fe0) at Test.java:40 >#4 0x004147d2 in gnu::gcj::runtime::FirstThread::run() () >(More stack frames follow...) >(gdb) p/x $esp >$1 = 0x22fcec >(gdb) x/4wx $esp >0x22fcec: 0x0040ae49 0x01025fd8 0x77f8f2eb 0x00000001 >(gdb) x/wx $esp-4 >0x22fce8: 0x0022fd08 >(gdb) x/20wx 0x01025fb0 >0x1025fb0: 0x00000000 0x00000000 0x00000000 0x00000000 >0x1025fc0: 0x00000000 0x00000000 0x005f92e0 0x00000010 >0x1025fd0: 0x00630062 0x00000000 0x00000000 0x0106ea00 >0x1025fe0: 0x00000008 0x00000001 0x00000000 0x00000000 >0x1025ff0: 0x00000000 0x00000000 0x00000000 0x00000000 >(gdb) x/8wx 0x01025fd8 >0x1025fd8: 0x00000000 0x0106ea00 0x00000008 0x00000001 >0x1025fe8: 0x00000000 0x00000000 0x00000000 0x00000000 >(gdb) p GC_gc_no >$2 = 1212 >(gdb) p/x $eax >$3 = 0x0 >(gdb) p &GC_arrays >$4 = (<data variable, no debug info> *) 0x606a30 >(gdb) x/100wx $4 [with annotations] >0x606a30 <GC_arrays>: 0x0009d000[heapsize] 0x00000000 0x00000000 0x01050000[last_heap_addr] >0x606a40 <GC_arrays+16>: 0x01030000[prev_heap_addr] 0x00063000[large_free] 0x00003000[large_allocd] 0x00003000 >0x606a50 <GC_arrays+32>: 0x086dc12d[allocd_before] 0x0000000c[words_allocd] 0x00000000[wasted] 0x00000000[finalized] >0x606a60 <GC_arrays+48>: 0x00000000 0x00000000 0x00000000 0x01000000[scratch_end] >0x606a70 <GC_arrays+64>: 0x01000000 0x0041be80 0x00000000 0x00000000 >0x606a80 <GC_arrays+80>: 0x00000000 0x00000000 0x00000000 0x00000000 >0x606a90 <GC_arrays+96>: 0x00000000 0x0041c790 0x00000000 0x00000000 >0x606aa0 <GC_arrays+112>: 0x00000000 0x00000000 0x00000000 0x00000000 >0x606ab0 <GC_arrays+128>: 0x00000000 0x00000000 0x00000000 0x00000000 >0x606ac0 <GC_arrays+144>: 0x00000000 0x00000000 0x00000000 0x00000000 >0x606ad0 <GC_arrays+160>: 0x00000000 0x00000000 0x00000000 0x00000000 >0x606ae0 <GC_arrays+176>: 0x00000000 0x00000000 0x00000000 0x00000000 >---Type <return> to continue, or q <return> to quit---q >Quit >[Looks like it occurred just after (12 bytes after!) GC] >(gdb) x/100wx 0x1025000 >0x1025000: 0x005f92e0 0x00000010 0x00000062 0x00000000 >0x1025010: 0x00000000 0x00000000 0x00000000 0x00000000 >0x1025020: 0x00000000 0x00000000 0x005f92e0 0x00000010 >0x1025030: 0x00610061 0x00630061 0x00650061 0x00000061 >0x1025040: 0x00000000 0x00000000 0x00000000 0x00000000 >0x1025050: 0x005f92e0 0x00000010 0x00610061 0x00630061 >0x1025060: 0x00650061 0x00000000 0x00000000 0x00000000 >0x1025070: 0x00000000 0x00000000 0x005f92e0 0x00000010 >0x1025080: 0x00610061 0x00630061 0x00000061 0x00000000 >0x1025090: 0x00000000 0x00000000 0x00000000 0x00000000 >0x10250a0: 0x005f92e0 0x00000010 0x00610061 0x00630061 >0x10250b0: 0x00000000 0x00000000 0x00000000 0x00000000 >0x10250c0: 0x00000000 0x00000000 0x005f92e0 0x00000010 >0x10250d0: 0x00610061 0x00000061 0x00000000 0x00000000 >[Definitely looks like 10 word objects. Unfortunately the debugger doesn't work well enough to get >at block header.] >(gdb) p 0xfd8/40 >$7 = 101 >(gdb) p/x $7*40 >$8 = 0xfc8 >(gdb) >[0x1025fd8 points to 8 bytes past the start of an object! Where did this pointer come from? ] > > >[Third crash:] >first thread 4109000 abeg >second thread 2876000 gccbag >first thread 4110000 ccggaeee >first thread 4111000 ffebabfd >second thread 2877000 dddddecbbde > >Program received signal SIGSEGV, Segmentation fault. >0x00410a99 in java::lang::Object::getClass() () >(gdb) p GC_gc_no >$1 = 17032 >(gdb) where 8 >#0 0x00410a99 in java::lang::Object::getClass() () >#1 0x0040145e in Test.replaceAll(java.lang.String, java.lang.String, java.lang. >String) (in=0x1020000, a=0x1014fd8, b=0xb5efd8) at Test.java:12 >#2 0x00401aec in Test.stressGB(java.lang.String) (thread=0xb5b930) > at Test.java:64 >#3 0x0040173d in Test.main(java.lang.String[]) (args=0xb56fe0) at Test.java:40 >#4 0x004147d2 in gnu::gcj::runtime::FirstThread::run() () >#5 0x0041de67 in _Jv_ThreadRun(java::lang::Thread*) () >#6 0x0040381f in _Jv_RunMain(java::lang::Class*, char const*, int, char const** >, bool) () >#7 0x004038ef in JvRunMain () >(More stack frames follow...) >(gdb) x/4wx $esp >0x22fcec: 0x0040ae49 0x01014fd8 0x77f8f2eb 0x00000001 >(gdb) x/i 0x0040ae49 >0x40ae49 <_ZN4java4lang6String6equalsEPNS0_6ObjectE+41>: > xor %edx,%edx >(gdb) info line *0x0040ae49 >No line number information available for address > 0x40ae49 <_ZN4java4lang6String6equalsEPNS0_6ObjectE+41> >(gdb) x/32wx 0x01014000 >0x1014000: 0x005f92e0 0x00000010 0x00000067 0x00000000 >0x1014010: 0x00000000 0x00000000 0x00000000 0x00000000 >0x1014020: 0x00000000 0x00000000 0x005f92e0 0x00000010 >0x1014030: 0x00650062 0x00670061 0x00610066 0x00000064 >0x1014040: 0x00000000 0x00000000 0x00000000 0x00000000 >0x1014050: 0x005f92e0 0x00000010 0x00650062 0x00670061 >0x1014060: 0x00610066 0x00000000 0x00000000 0x00000000 >0x1014070: 0x00000000 0x00000000 0x005f92e0 0x00000010 >(gdb) p 0xfd8/40 >$2 = 101 >(gdb) p 0x1014000+$2*40 >$3 = 16863176 >(gdb) x/10wx $3 >0x1014fc8: 0x005f92e0 0x00000010 0x00670061 0x00000000 >0x1014fd8: 0x00000000 0x01024a28 0x00000008 0x00000001 >0x1014fe8: 0x00000000 0x00000000 >[Again failed on "object" with trailing address bits fd8, though this time >in a different page. The actual 10 byte object start appears to be at >fc8, and it looks like a valid character object. It looks like the call >stack is missing a frame, since %ebp has already been popped, and gdb >can't compensate without debug info.] >(gdb) x/16wx &GC_arrays >0x606a30 <GC_arrays>: 0x0009d000[heap_size] 0x00000000 0x00000000 0x01050000[last_heap_addr] >0x606a40 <GC_arrays+16>: 0x01030000 0x0001f000 0x00003000 0x00003000 >0x606a50 <GC_arrays+32>: 0x765f948b[allocd_before] 0x00014a52[words_allocd] 0x00000000 0x00000000 >0x606a60 <GC_arrays+48>: 0x00000000 0x00000000 0x00000000 0x01000000 >(gdb) up >#1 0x0040145e in Test.replaceAll(java.lang.String, java.lang.String, java.lang. >String) (in=@1020000, a=@1014fd8, b=@b5efd8) at Test.java:12 >12 if (c.equals(a)) >[Note that the last two string addresses end in fd8.] >(gdb) x/16wx 0xb5efd8 >0xb5efd8: 0x005a6288 0x00b5efd8 0x00000014 0x00000000 >0xb5efe8: 0x00000000 0x00000000 0x00000000 0x00000000 >0xb5eff8: 0x00000000 0x00000000 0x00000000 0x00000022 >0xb5f008: 0x00610061 0x00610061 0x00610061 0x00610061 >(gdb) x/32wx 0xb5e000 >0xb5e000: 0x005a6288 0x00b5e000 0x00000014 0x00000001 >0xb5e010: 0x00000000 0x00000062 0x005a6288 0x00b5e018 >0xb5e020: 0x00000014 0x00000001 0x00000000 0x00000062 >0xb5e030: 0x005a6288 0x00b5e030 0x00000014 0x00000001 >0xb5e040: 0x00000000 0x00000065 0x005a6288 0x00b5e048 >0xb5e050: 0x00000014 0x00000001 0x00000000 0x00000065 >0xb5e060: 0x005a6288 0x00b5e060 0x00000014 0x00000001 >0xb5e070: 0x00000000 0x00000062 0x005a6288 0x00b5e078 >(gdb) p 0xfd8/24 >$6 = 169 >(gdb) p 169*24 >$7 = 4056 >(gdb) p/x $7 >$8 = 0xfd8 >[It looks like b is a valid string, the last one in a block of objects 6 words in size. >Clearly a is not. But perhaps it was. Could we be reclaiming entire pages with >the last object still in use?] >(gdb) x/30i GC_block_empty >0x471030 <GC_block_empty>: push %ebp >0x471031 <GC_block_empty+1>: mov %esp,%ebp >0x471033 <GC_block_empty+3>: mov 0x8(%ebp),%eax >0x471036 <GC_block_empty+6>: lea 0x18(%eax),%edx >0x471039 <GC_block_empty+9>: lea 0x98(%eax),%ecx >0x47103f <GC_block_empty+15>: jmp 0x47104a <GC_block_empty+26> >0x471041 <GC_block_empty+17>: mov (%edx),%eax >0x471043 <GC_block_empty+19>: add $0x4,%edx >0x471046 <GC_block_empty+22>: test %eax,%eax >0x471048 <GC_block_empty+24>: jne 0x471055 <GC_block_empty+37> >0x47104a <GC_block_empty+26>: cmp %ecx,%edx >0x47104c <GC_block_empty+28>: jb 0x471041 <GC_block_empty+17> >0x47104e <GC_block_empty+30>: pop %ebp >0x47104f <GC_block_empty+31>: mov $0x1,%eax >0x471054 <GC_block_empty+36>: ret >0x471055 <GC_block_empty+37>: xor %eax,%eax >0x471057 <GC_block_empty+39>: pop %ebp >0x471058 <GC_block_empty+40>: ret >0x471059 <GC_block_empty+41>: lea 0x0(%esi,1),%esi >... >[Looks correct.] >(gdb) x/30i GC_find_header >0x473240 <GC_find_header>: push %ebp >0x473241 <GC_find_header+1>: mov %esp,%ebp >0x473243 <GC_find_header+3>: mov 0x8(%ebp),%eax >0x473246 <GC_find_header+6>: pop %ebp >0x473247 <GC_find_header+7>: mov %eax,%edx >0x473249 <GC_find_header+9>: shr $0x16,%edx >0x47324c <GC_find_header+12>: mov 0x6145a4(,%edx,4),%edx [Address of top_index] >0x473253 <GC_find_header+19>: shr $0xc,%eax >0x473256 <GC_find_header+22>: and $0x3ff,%eax >0x47325b <GC_find_header+27>: mov (%edx,%eax,4),%eax >0x47325e <GC_find_header+30>: ret >0x47325f <GC_find_header+31>: nop >[And now to do this manually for the block including 0x1014fd8: >(gdb) p/x 0x1014fd8>>22 >$9 = 0x4 [Index in top_index] >(gdb) p/x 0x6145a4+16 >$10 = 0x6145b4 >(gdb) x/wx $10 >0x6145b4 <GC_arrays+56196>: 0x00ff1a28 [Pointer to bottom_index] >(gdb) p/x 0x00ff1a28+(4*0x14) >$11 = 0xff1a78 [Address of pointer to header] >(gdb) x/wx $11 >0xff1a78: 0x00ff4d40 [Pointer to header] >(gdb) x/38wx 0x00ff4d40 [Header] >0xff4d40: 0x0000000a[size] 0x00000000 0x00000000 0x00000000[descr] >0xff4d50: 0x00b3bc40[map] 0x4288[last_reclaimed]0000[kind,flags] 0x00000000 0x00000000 >0xff4d60: 0x00000000 0x00000000 0x00000000 0x00000000 >0xff4d70: 0x00000000 0x00000000 0x00000000 0x00000000 >0xff4d80: 0x00000000 0x00000000 0x00000000 0x00000000 >0xff4d90: 0x00000000 0x00000000 0x00000000 0x00000000 >0xff4da0: 0x00000000 0x00000000 0x00000000 0x00000000 >0xff4db0: 0x00000000 0x00000000 0x00000000 0x00000000 >0xff4dc0: 0x00000000 0x00000000 0x00000000 0x00000000 >0xff4dd0: 0x00000000 0x00000000 >[A block of completely unmareked pointerfree objects of size 10, last reclaimed, and presumably >determined to be empty this cycle.] >[Could also be caused by failure to mark just allocated object?] >(gdb) x/100i GC_malloc_atomic >0x432e90 <GC_malloc_atomic>: push %ebp >0x432e91 <GC_malloc_atomic+1>: mov $0x800,%eax >0x432e96 <GC_malloc_atomic+6>: mov %esp,%ebp >0x432e98 <GC_malloc_atomic+8>: sub $0x18,%esp >0x432e9b <GC_malloc_atomic+11>: mov %ebx,0xfffffff4(%ebp) >0x432e9e <GC_malloc_atomic+14>: mov 0x8(%ebp),%ebx >0x432ea1 <GC_malloc_atomic+17>: mov %esi,0xfffffff8(%ebp) >0x432ea4 <GC_malloc_atomic+20>: mov %edi,0xfffffffc(%ebp) >0x432ea7 <GC_malloc_atomic+23>: mov 0x5b32f0,%edx [GC_all_interior_pointers] >0x432ead <GC_malloc_atomic+29>: sub %edx,%eax >0x432eaf <GC_malloc_atomic+31>: cmp %eax,%ebx >0x432eb1 <GC_malloc_atomic+33>: jb 0x432ed7 <GC_malloc_atomic+71> >0x432eb3 <GC_malloc_atomic+35>: mov %ebx,(%esp,1) >0x432eb6 <GC_malloc_atomic+38>: movl $0x0,0x4(%esp,1) >0x432ebe <GC_malloc_atomic+46>: call 0x432d10 <GC_generic_malloc> >0x432ec3 <GC_malloc_atomic+51>: mov %eax,0x8(%ebp) >0x432ec6 <GC_malloc_atomic+54>: mov 0xfffffff4(%ebp),%ebx >0x432ec9 <GC_malloc_atomic+57>: mov 0xfffffff8(%ebp),%esi >0x432ecc <GC_malloc_atomic+60>: mov 0xfffffffc(%ebp),%edi >0x432ecf <GC_malloc_atomic+63>: mov %ebp,%esp >0x432ed1 <GC_malloc_atomic+65>: pop %ebp >0x432ed2 <GC_malloc_atomic+66>: jmp 0x464820 <GC_clear_stack> >0x432ed7 <GC_malloc_atomic+71>: mov 0x608b84(,%ebx,4),%eax [GC_size_map entry] >0x432ede <GC_malloc_atomic+78>: mov %eax,%edi >0x432ee0 <GC_malloc_atomic+80>: shl $0x2,%edi >0x432ee3 <GC_malloc_atomic+83>: mov %eax,0xfffffff0(%ebp) >0x432ee6 <GC_malloc_atomic+86>: movl $0x606a10,(%esp,1) >0x432eed <GC_malloc_atomic+93>: call 0x57ee10 <EnterCriticalSection@4> >0x432ef2 <GC_malloc_atomic+98>: mov 0x607378(%edi),%esi [Load from free list] >0x432ef8 <GC_malloc_atomic+104>: sub $0x4,%esp >0x432efb <GC_malloc_atomic+107>: test %esi,%esi >0x432efd <GC_malloc_atomic+109>: je 0x432f30 <GC_malloc_atomic+160> >0x432eff <GC_malloc_atomic+111>: mov (%esi),%eax >0x432f01 <GC_malloc_atomic+113>: mov %eax,0x607378(%edi) >0x432f07 <GC_malloc_atomic+119>: mov 0xfffffff0(%ebp),%eax >0x432f0a <GC_malloc_atomic+122>: add %eax,0x606a54 >0x432f10 <GC_malloc_atomic+128>: movl $0x606a10,(%esp,1) >0x432f17 <GC_malloc_atomic+135>: > call 0x57ee40 <LeaveCriticalSection@4> >0x432f1c <GC_malloc_atomic+140>: sub $0x4,%esp >0x432f1f <GC_malloc_atomic+143>: mov %esi,%eax >0x432f21 <GC_malloc_atomic+145>: mov 0xfffffff4(%ebp),%ebx >0x432f24 <GC_malloc_atomic+148>: mov 0xfffffff8(%ebp),%esi >0x432f27 <GC_malloc_atomic+151>: mov 0xfffffffc(%ebp),%edi >0x432f2a <GC_malloc_atomic+154>: mov %ebp,%esp >0x432f2c <GC_malloc_atomic+156>: pop %ebp >0x432f2d <GC_malloc_atomic+157>: ret >0x432f2e <GC_malloc_atomic+158>: mov %esi,%esi >0x432f30 <GC_malloc_atomic+160>: movl $0x606a10,(%esp,1) >0x432f37 <GC_malloc_atomic+167>: > call 0x57ee40 <LeaveCriticalSection@4> >0x432f3c <GC_malloc_atomic+172>: sub $0x4,%esp >0x432f3f <GC_malloc_atomic+175>: mov %ebx,(%esp,1) >0x432f42 <GC_malloc_atomic+178>: movl $0x0,0x4(%esp,1) >0x432f4a <GC_malloc_atomic+186>: call 0x432d10 <GC_generic_malloc> >0x432f4f <GC_malloc_atomic+191>: mov %eax,0x8(%ebp) >0x432f52 <GC_malloc_atomic+194>: mov 0xfffffff4(%ebp),%ebx >0x432f55 <GC_malloc_atomic+197>: mov 0xfffffff8(%ebp),%esi >0x432f58 <GC_malloc_atomic+200>: mov 0xfffffffc(%ebp),%edi >0x432f5b <GC_malloc_atomic+203>: mov %ebp,%esp >0x432f5d <GC_malloc_atomic+205>: pop %ebp >0x432f5e <GC_malloc_atomic+206>: jmp 0x464820 <GC_clear_stack> >0x432f63 <GC_malloc_atomic+211>: lea 0x0(%esi),%esi >0x432f69 <GC_malloc_atomic+217>: lea 0x0(%edi,1),%edi >... >[Atomic object free list:] >(gdb) x/20wx 0x607378 >0x607378 <GC_arrays+2376>: 0x00000000 0x00000000 0x00000000 0x00000000 >0x607388 <GC_arrays+2392>: 0x00000000 0x00000000 0x00fdc2a0 0x00000000 >0x607398 <GC_arrays+2408>: 0x00000000 0x00000000 0x00fdd5c8 0x00000000 >0x6073a8 <GC_arrays+2424>: 0x00000000 0x00000000 0x00000000 0x00000000 >0x6073b8 <GC_arrays+2440>: 0x00000000 0x00000000 0x00000000 0x00000000 >(gdb) x/4wx 0x00fdc2a0 >0xfdc2a0: 0x00fdc288 0x00fde988 0x00000008 0x00000004 >(gdb) x/4wx 0x00fdd5c8 >0xfdd5c8: 0x00fdd5a0 0x00000000 0x005a4cd8 0x00000004 >(gdb) x/4wx 0x00fdc000 >0xfdc000: 0x00000000 0x00fde528 0x00000008 0x00000003 >(gdb) x/4wx 0x00fdd000 >0xfdd000: 0x00000000 0x00000000 0x01032618 0x00000000 >[Only size 6 and 10 entries are non-null. They look as expected.] >(gdb) x/20i GC_push_regs >No symbol "GC_push_regs" in current context. >(gdb) x/50i GC_generic_push_regs >0x501690 <GC_generic_push_regs>: push %ebp >0x501691 <GC_generic_push_regs+1>: mov %esp,%ebp >0x501693 <GC_generic_push_regs+3>: sub $0xc,%esp >0x501696 <GC_generic_push_regs+6>: mov %ebx,(%esp,1) >0x501699 <GC_generic_push_regs+9>: mov (%esp,1),%ebx >0x50169c <GC_generic_push_regs+12>: mov %esi,0x4(%esp,1) >0x5016a0 <GC_generic_push_regs+16>: mov 0x4(%esp,1),%esi >0x5016a4 <GC_generic_push_regs+20>: mov %edi,0x8(%esp,1) >0x5016a8 <GC_generic_push_regs+24>: mov 0x8(%esp,1),%edi >0x5016ac <GC_generic_push_regs+28>: mov %ebp,%esp >0x5016ae <GC_generic_push_regs+30>: pop %ebp >0x5016af <GC_generic_push_regs+31>: jmp 0x4b9e50 <GC_push_current_stack> >0x5016b4 <GC_generic_push_regs+36>: nop >0x5016b5 <GC_generic_push_regs+37>: nop >0x5016b6 <GC_generic_push_regs+38>: nop >0x5016b7 <GC_generic_push_regs+39>: nop >0x5016b8 <GC_generic_push_regs+40>: nop >... >[This looks very fishy. The registers are pushed on the stack, but they are popped >off again before the tail call. Oops.]
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Raw
Actions:
View
Attachments on
bug 10746
:
4528
|
4716
|
4732
|
4733
| 4764 |
4765
|
4783
|
4888