Subject: How to make JIT work with lang/sun-jre13
To: None <tech-pkg@netbsd.org>
From: Todd Vierling <tv@pobox.com>
List: port-i386
Date: 02/13/2003 22:25:49
This is a mini-howto with glue code that currently is not yet fit for pkgsrc
consumption.  I've Bcc:'d to netbsd-java and port-i386, but any discussion
should be on tech-pkg.  (I am on neither of the other two lists.)

There's a long-standing deficiency in the Sun JDK/JRE 1.3.1 that prevents
the use of conventional JITs (such as lang/jbuilder-jit) with the Classic
VM.  Under NetBSD's Linux emulation, the Classic VM with green_threads is
the most reliable mode of operation, and pkgsrc sets this mode by default.

Normally, if you try to set JAVA_COMPILER in the environment or use
-Djava.compiler on the command line, you'll receive the message:

    Warning: JIT compiler "javacomp" not found. Will use interpreter.

Which means that JIT is not in use.  The problem stems from the fact that
the Sun 1.3.1 JIT compiler initialization code doesn't install the
java.lang.Compiler.initialize() JNI hook, preventing use of any JIT at all.

The Blackdown JRE doesn't have this problem, although the Blackdown JRE has
not been updated for several security fixes since its last release in March
2002.  (Since I originally created the jbuilder-jit package to work with
blackdown-jre13 and took a hiatus from Java work soon thereafter, I never
checked to see that JITs did not work on Sun's distribution.  8-)

So, you'll find a small piece of glue code attached to this message in
uuencode format that will bridge the gap by ensuring that the missing
initialize() method is registered.  Inside the .tgz is a jitwrap.c and
Makefile which can only be compiled on a Linux machine or cross-compiler,
and a precompiled "libjitwrap.so".  Most users will only need the
precompiled version.

This will be made more aesthetically pleasing and pkgsrc-worthy in the
future.  I'm playing with an attempt to hook it in via JVMPI (i.e.
"-Xrunjitwrap") so that it won't have to pretend to be the JIT compiler at
all, and will automatically step out of the way if no compiler is desired.

*****

To use the following JIT compiler glue library, assuming the installed JRE
is at least sun-jdk13-1.0.7, copy libjitwrap.so and the JIT .so into
/usr/pkg/java/sun-1.3.1/lib/i386/.  Here, I'll assume that lang/jbuilder-jit
is installed (shuJIT -- http://www.shudo.net/jit/ -- also works).

Then set the following in the environment:

    JAVA_COMPILER=jitwrap
    JAVA_COMPILER_WRAP=libjavacomp.so

Note that JAVA_COMPILER_WRAP is the full library name, with "lib" and ".so",
so set it to "libshujit.so" if using shuJIT.  When "java" is invoked after
this point, the desired JIT will indeed be loaded and work as expected,
although "java -version" will say that the JIT in use is "jitwrap".

begin 644 jdk13comp.tgz
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
08156X?F"_P&WF4VK`"@``'C/
`
end

-- 
-- Todd Vierling <tv@pobox.com>