bug return long/doubel is fixed!
Submitted by thebubble on Wed, 04/14/2004 - 23:14.
Hi,
i have found a patch for this bug, but not the bug! grrr
lreturn/dreturn use two register T0(EAX) and T1(EDX), EDX is corrupted! I have not found what overwrite the registre (jmp address ?) i don't no.
We need juste use an others registre, i have tested with S1, it is ok.
The patch are aviable in next one/two day.
- Login to post comments
Fix is in CVS!
I've fixed the l1 compiler with respect to synchronized long/double methods.
I've been able to reproduce the bug with a synchronized method and fixed the compiler for it.
Thanks for those finding the problem. Great work!
Ewout
can comme from monitor.exit?
now i thinks edx can be corrupted by some asm method use for synchonize (monitor.exit).
; protected static native boolean atomicAnd(Address address, int value)
Q43org5jnode2vm6Unsafe23atomicAnd2e28Lorg2fjnode2fvm2fAddress3bI29Z:
mov ecx,[esp+4] ; value
mov edx,[esp+8] ; address
lock and dword [edx], ecx
ret 8
; protected static native boolean atomicSub(Address address, int value)
Q43org5jnode2vm6Unsafe23atomicSub2e28Lorg2fjnode2fvm2fAddress3bI29Z:
mov ecx,[esp+4] ; value
mov edx,[esp+8] ; address
lock sub dword [edx], ecx
ret 8
Yves