From owner-freebsd-java Tue Mar 21 15:38:30 2000 Delivered-To: freebsd-java@freebsd.org Received: from ares.maths.adelaide.edu.au (ares.maths.adelaide.edu.au [129.127.246.5]) by hub.freebsd.org (Postfix) with ESMTP id D502037BD2F for ; Tue, 21 Mar 2000 15:38:21 -0800 (PST) (envelope-from glewis@ares.maths.adelaide.edu.au) Received: (from glewis@localhost) by ares.maths.adelaide.edu.au (8.9.3/8.9.3) id KAA04014 for freebsd-java@freebsd.org; Wed, 22 Mar 2000 10:08:18 +1030 (CST) (envelope-from glewis) From: Greg Lewis Message-Id: <200003212338.KAA04014@ares.maths.adelaide.edu.au> Subject: Pre-alpha JDK 1.2.2 patches -- issues To: freebsd-java@freebsd.org Date: Wed, 22 Mar 2000 10:08:18 +1030 (CST) X-Mailer: ELM [version 2.4ME+ PL70 (25)] MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Sender: owner-freebsd-java@FreeBSD.ORG Precedence: bulk X-Loop: FreeBSD.org [I'm posting this to the list too, in the hope that someone who may not have time to download and play with the patches will have some clues about fixes for these just from reading this list :] 1. FreeBSD 4.0 support. I currently have no access to a FreeBSD 4.0 system to test this work on. However, Victor Salaman has kindly done some testing on his 4.0 system. Based on his reports there are a few conditional compilation sections, although these in general only avoid the problematic areas rather than fixing them. Victor believes that the chief cause of problems is the ability of 4.0 to support more than 32 signals. If you're interested in helping out here (I think this is important now that 4.0 is out) then you'll need to (at least) take a look in src/freebsd/hpi/green_threads/src/interrupt_md.c 2. FreeBSD 2.2.8 support. For technical reasons (the ports version of gcc 2.95.x doesn't assign a number to __FreeBSD__, it just defines it) much of the support for 2.2.8 was taken out (yes, I was impatient at the time) getting to this point. I am looking to put it back in at the moment in a commented out form (and lodge a PR about the gcc 2.95.x ports). However, I have no access to a 2.2.8 system, so things won't get any further than this commented out status at the moment. If you're interested in helping out here you'll obviously need a 2.2.8 system. I don't know the state of Linux emulation on 2.2.8 but I'm guessing that it won't run the Linux JDK, so you'll need another JDK to bootstrap the compilation. I believe that the minimal JDK 1.2 available on Keith White's web pages is an a.out version and could be used to bootstrap things. 3. Alpha support. I have no access to an machine running the FreeBSD alpha port. If someone wants to test things out on one that would be great, as I'd love to get alpha support working. I suspect that things won't work unfortunately, but I could be way wrong about that :). 4. Assembler version of executeJava As the comments say, "This is the very heart of the interpreter. This can be re-written in assembly language for speed on a specific platform, ..." (src/share/javavm/runtime/executeJava.c). And indeed, there is a an assembly version for the x86. Unfortunately, it causes seg faults when its used so currently the C version is being used. You probably need to understand some assembler to look at this. And possibly m4 as well, as things start off as an m4 file. This appears to be processed to yield assembler code for the Windows assembler, which is then converted for as using a masm2as converter. The build process for this is in build/freebsd/java/jvm/GNUmakefile and is currently avoided by setting QUANTIFY=1 near the top. The build process currently assumes GNU m4 (I tested it with 1.4), but it may also work with the standard FreeBSD m4 processor (this is worth testing). 5. Sun JIT compiler. It appears that the Sun JIT compiler (libsunwjit.so) is supplied as a precompiled Solaris x86 binary without source code. This leaves us rather hamstrung in getting this to work. I can only assume that the Blackdown folk got access to the source code from Sun. It does, however, mean that one gets a lot of annoying messages about it not being able to be loaded. Whats needed here, for the moment, is for someone to look into preventing this attempt to load it as the default JIT (to avoid those annoying messages :). 6. Font setup. The font properties set up during the JDK build (build/freebsd/lib/font.properties) are the default Solaris set up, which is possibly not what we want for FreeBSD. For example, the Blackdown JDK uses a set of font properties based on those for Solaris 2.5.1 (build/freebsd/lib/font.properties.5.5.1). This needs looking into, and probably will mean some Makefile adjustments to load the font.properties that we want. There also needs to be some discussion of what the correct set up for FreeBSD is -- should we mimic Blackdown on this one? 7. DPS and postscript fonts. As part of the build of libfontmanager.so (see build/freebsd/sun/font/GNUmakefile) one can optionally enable linking with a Display Postscript library (this is the default for the Solaris build). I can only assume that this is to enable the use of Postscript fonts in Java. While this compilation option is turned off in the current set of patches (HAVE_DPS=no) I've experimentally compiled this against the Display Ghostscript library (ports/x11/dgs). This will be in the next set of patches but before then I'd be grateful if someone could have a go at actually getting some Postscript fonts working to verifies that dgs is an workable substitute. I will happily provide additional patches with regards to getting things compiling for anyone interested in taking this on. 8. Missing shared libraries. As Thomas said, when releasing his initial set of patches for JDK 1.2, "I had to leave out a couple of less important subdirectories in the $(BUILDDIR)/sun subdirectory". Unfortunately this is still pretty much the case, although some progress has been made (the font subdirectory is back in at least, albeit currently without postscript font support). These extra shared libraries all need to be looked into. a. audio This is presumably for Java Audio :). Many of the files appear to compile, but, not surprisingly, get stuck when trying to compile the Solaris specific sound support. These Solaris specific files need to be replaced with versions which support the FreeBSD sound architecture. b. jdga I'm not sure what actually uses this, but it appears to be an interface to the the Solaris libdga, a direct graphics access library for Sparc frame buffers. While its not hard to get libsunwjdga.so itself to compile, looking at the code a bit and the Solaris JDK leads me to believe there needs to be another shared library which actually provides some of the functional bindings. This could possibly be modified to work with the XFree86 DGA extensions. The first step is to find out what uses it though and how important it is! c. cmm Again, I'm not sure what uses this library, but both the Solaris and Blackdown JDKs include it. Porting this appears to involve supplying some definitions appropriate for FreeBSD (look in src/share/native/sun/awt/cmm/kcmsos.h -- I have an initial attempt at this if you're interested) and also providing some wrapper functions for threads. The current choices (src/share/native/sun/awt/cmm/sithread.h and thread.c) are Win32 threads or Solaris native threads. The option for FreeBSD is probably to introduce pthreads support, so this work mainly needs someone who knows a bit about pthreads or is ready to learn :). d. jdbc This is the JDBC-ODBC bridge code. Although this is disabled in the current set of patches, I've actually got a compiled version of this using the unixODBC package (http://www.unixodbc.org -- there is no FreeBSD port yet, but it compiles fairly easily). Like the Postscript font support though, this needs to someone to test it out and verify that its working. If you're interested, contact me for the additional patches, including a small one to get unixODBC to find the FreeBSD pthreads implementation in libc_r. 9. Merging from 1.1.8 patches. Thomas' initial patches came out in June of 1999, prior to the most recent JDK 1.1.8 releases by the port team. I haven't had the time to stop and make sure I've merged all the appropriate patches from the 1.1.8 patches. The task here is to get the patches for 1.1.8 from the FreeBSD java site (http://www.freebsd.org/java) and make sure all the relevant bits have made it into the current set of patches for 1.2. 10. FIXMEs Thomas' patches contained some FIXME notes and I've introduced more myself. Anyone who feels energetic (these are not all difficult) is welcome to look into one or more of these and generate some fixes, which will be gratefully received :). 11. Code correctness. The main focus of things so far has to been to make things work. This has almost certainly meant that sometimes sub-optimal fixes have been employed. Eventually the patches need review to make sure they not only DTRT but do it in the right way. 12. Rounding bug. Kees Jan Koster has kindly taken the time to run the JDK through the Mauve test suite (http://sourceware.cygnus.com/mauve/). Apart from voting Kees Jan many thanks for this, I was pleased to find that this uncovered only two differences with the Solaris reference implementation. One of these has since been fixed, but the other remains. As Kees Jan says: "There seems to be a well-known rounding error in the string conversions in type double. The Mauve test suite converts the double -3.5 to a string and back and expects -4.0 to come out. In the JDK1.2 reference implementation does also return -4.0, but the current FreeBSD native port displays the correct -3.5, which is an error. %-)" This is more a compatibility issue for 1.2 rather than a bug (Kees Jan's research indicates that 1.3 also returns -3.5) but is important nonetheless, especially for people developing on multiple platforms. If you're interested in looking into this, I can pass on some simple test code from Kees Jan (which I think is from Mauve) that demonstrates the problem. 13. Debug graphics pane in SwingSet. My limited testing with the SwingSet demo (build/freebsd/demo/jfc/SwingSet) has been quite successful. I have, however, noticed that the Debug Graphics pane will hang things. This definitely needs to be looked into. 14. Other JIT compilers. Both SHUjit and the TYA jit have both supported the FreeBSD 1.1.8 JDK releases. It would be great if they also worked with 1.2. I'd be very grateful if someone could take the time to investigate how well they work with the current version of the JDK. These two JITs can be found in ports/java/shujit and ports/java/tya respectively. 15. GCC versions. Kees Jan is currently having problems running Swing / AWT stuff with an unresolved reference to "__pure_virtual". He is, however, using a different version of gcc. This will be less of a problem when there is a reasonable compiled version to distribute, but even so, people who want to compile things up and help out need to know which versions of the necessary tools work (and which have known problems). Naturally it would also be good if there was a fix for this :). -- Greg Lewis glewis@trc.adelaide.edu.au Computing Officer +61 8 8303 5083 Teletraffic Research Centre To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-java" in the body of the message