On 07/19/2009 02:29 PM, Dave Korn wrote: > Kai Tietz wrote: > >> There are a lot of issues about casting HANDLE values into jint types, >> which is for x86 valid, but for x64 can lead potential to pointer >> truncations. Those part need some review by libjava maintainers. My >> patch simply casts those kind of pointers via __UINTPTR_TYPE__ into >> integer scalar before casting it into jint. I put comments at those >> places, where some rework is necessary. > > Argh. You're replacing a bunch of warnings that draw attention to a real > problem by a bunch of silent fixmes in the code. That's a bit scary to me.
Me too. That patch will not be accepted. >> Index: gcc/libjava/gnu/java/net/natPlainSocketImplWin32.cc >> =================================================================== >> --- gcc.orig/libjava/gnu/java/net/natPlainSocketImplWin32.cc 2009-07-19 >> 12:06:54.200476000 +0200 >> +++ gcc/libjava/gnu/java/net/natPlainSocketImplWin32.cc 2009-07-19 >> 12:13:45.727476500 +0200 >> @@ -58,7 +58,8 @@ >> >> // We use native_fd in place of fd here. From leaving fd null we avoid >> // the double close problem in FileDescriptor.finalize. >> - native_fd = (jint) hSocket; >> + // Fixme, it isn't correct to cast a HANDLE to integer scalar here for x64 >> + native_fd = (jint) (__UINTPTR_TYPE__) hSocket; >> } > > > Question is, can we change the sizes of the members of class objects, such > as gnu::java::net::PlainSocketImpl::native_fd, or do these objects and their > layout form part of an ABI, and/or do they ever get serialised? The Java guys > will be able to tell us. Yes, you can change them. Yes, they are part of an ABI. native_fd should be a jlong. Andrew.