GCJ 3.3 crash with string handling reproduceable case

Boehm, Hans hans_boehm@hp.com
Wed Feb 26 20:03:00 GMT 2003


Unfortunately, I'm unfamiliar with MingW, and I'm having trouble parsing some of this.

The warnings don't look familiar to me.  Does anyone know what's generating them?

The stack frame in GC_register_dynamic_libraries (dyn_load.c) corresponds to code that is walking the process address space with VirtualQuery to find root segments.  Based on (distant) past experience, VirtualQuery is bug-prone.  (It was broken in win32S, for example.)  If this is doing anything other than just calling the underlying win32 routine, I would look there carefully.

I wasn't able to deduce from the stack trace exactly what generated the bad reference or bad system call.  If someone can read it well enough to deduce that, please enlighten me ...

Hans

> -----Original Message-----
> From: Ranjit Mathew [mailto:rmathew@hotmail.com]
> Sent: Wednesday, February 26, 2003 6:08 AM
> To: aph@redhat.com
> Cc: java@gcc.gnu.org
> Subject: Re: GCJ 3.3 crash with string handling reproduceable case
> 
> 
> >Ranjit Mathew writes:
> >  >
> >  > BTW, as Jeff had pointed out earlier, the "gctest" from the GC
> >  > always crashes immediately for me as well with a GPF.
> >
> >Well, that's the thing to fix first, before doing _anything_ 
> with gcj.
> >If the gc isn't reliable, nothing is reliable.
> >
> >Andrew.
> 
> :-( Yes, it isn't encouraging at all, is it? Especially when
> GCJ/Win32 *seems* to work otherwise...
> 
> I just downloaded Boehm GC 6.1 from:
> 
>    http://www.hpl.hp.com/personal/Hans_Boehm/gc/gc_source/
> 
> and was easily able to compile it with MSYS/MinGW, including
> the gctest application. Sure enough, gctest crashes on me
> (consistently) and here's what DrMinGW (always) tells me:
> ------------------------------- 8< ----------------------------------
> gctest.exe caused an Access Violation at location 77f85c41 in module 
> ntdll.dll Writing to location 00000010.
> 
> Registers:
> eax=00000000 ebx=00000000 ecx=0041e0d0 edx=00000050 esi=0041e0c0 
> edi=00000000
> eip=77f85c41 esp=0022fe30 ebp=0022fe90 iopl=0         nv up 
> ei pl zr na po 
> nc
> cs=001b  ss=0023  ds=0023  es=0023  fs=0038  gs=0000             
> efl=00000246
> 
> Call stack:
> 77F85C41  ntdll.dll:77F85C41  RtlReAllocateHeap
> 77F85BD1  ntdll.dll:77F85BD1  RtlReAllocateHeap
> 00403362  gctest.exe:00403362  WinMain  test.c:1618
> int WinMain(
> 	HINSTANCE instance = &{
> 		int i = 9460301
> 	},
> 	HINSTANCE prev = &{
> 		int i =
> 	},
> 	LPSTR cmd = &0,
> 	int n = 10
> )
> 	...
> 	# endif
> 	# if NTEST > 0
> >	   for (i = 0; i < NTEST; i++) {
> 	    h[i] = GC_CreateThread(NULL, 0, thr_run_one_test, 
> 0, 0, &thread_id);
> 	    if (h[i] == (HANDLE)NULL) {
> 	...
> 
> 00411573  gctest.exe:00411573  GC_register_dynamic_libraries  
> dyn_load.c:837
> void GC_register_dynamic_libraries(
> 
> )
> 	...
> 	    base = p;
> 	}
> >	limit = new_limit;
> 	    }
> 	}
> 	...
> 
> 0040116B  gctest.exe:0040116B
> 00401013  gctest.exe:00401013
> 77EA847C  KERNEL32.dll:77EA847C  DebugBreak
> ------------------------------- 8< ----------------------------------
> 
> The standard output of gctest shows lots of lines like:
> ------------------------------- 8< ----------------------------------
> Warning: changing type size from 8 to 64
> Warning: changing type size from 8 to 64
> Warning: changing type size from 2 to 16
> Warning: changing type size from 2 to 16
> Warning: changing type size from 1 to 8
> Warning: changing type size from 1 to 8
> Warning: changing type size from 8 to 64
> Warning: changing type size from 8 to 64
> Warning: changing type size from 2 to 16
> Warning: changing type size from 2 to 16
> ...
> ------------------------------- 8< ----------------------------------
> 
> Ranjit.
> 
> _________________________________________________________________
> MSN 8 with e-mail virus protection service: 2 months FREE* 
> http://join.msn.com/?page=features/virus
> 



More information about the Java mailing list