building mlvm

John Rose John.Rose at Sun.COM
Mon May 18 11:41:29 PDT 2009


On May 18, 2009, at 10:40 AM, Christian Thalinger wrote:

> Are the patches in MLVM current?  It seems I'm missing classes and  
> methods:

Yes, the patches are current.  For example, the patch  
indy-6829144.patch contains the (new) definition of InvokeDynamic.   
This is identical with the push to M3 under that bug number.

But perhaps you are not applying any patches at all.  Verify by  
looking in */.hg/patches/status .  The patches are designed by default  
to apply only to the BSD build, and you have to explicitly declare  
that you are using this base by setting up */.hg/patches/guards.  (See  
patches/README.txt.)

> $ /export/home/twisti/projects/mlvm/sources/build/solaris-i586/bin/ 
> javac -XDinvokedynamic Hello.java
> Hello.java:42: cannot find symbol
>            InvokeDynamic.hail(x);               // weakly typed  
> invokedynamic
>            ^
>  symbol:   variable InvokeDynamic
>  location: class Hello
> Hello.java:50: cannot find symbol
>            = MethodHandles.lookup().findStatic(Hello.class, "greeter",
>                           ^
>  symbol:   method lookup()
>  location: class java.dyn.MethodHandles
> Hello.java:59: java.dyn.CallSite is abstract; cannot be instantiated
>        CallSite site = new CallSite(caller, name, type);
>                        ^
> 3 errors

Hmm...  See if InvokeDynamic.class is in rt.jar of your build.  That  
will narrow it down.  I would expect that your javac is looking in  
that rt.jar, but you might verify this with Solaris truss (or ktrace  
or dtruss dependng in the system).

The bsd-port repo should build on Solaris, Linux, etc.  But you might  
be the first person to try this since the latest changes, so maybe  
there's a bug in the patches that's not in the main line.  The current  
promotion of JDK7 (M3, b59) builds JSR 292 code correctly and runs the  
demos, unless something has broken very recently.  When I promote  
something to JDK7, I extract a bug-numbered patch into the mlvm repo  
and then leave it alone.  In theory this means that mlvm tracks JDK7  
accurately, but in practice the baseline (bsd-port) lags JDK7 so the  
patches might mis-apply, causing bugs.

A guess a complete list of the hazards is:
- config error in your local build & run environments
- incomplete or erroneous mvlm patches
- bad patch apply due to skew between JDK7 and bsd-port patch bases
- error in code promoted to JDK7
- error in new mlvm code

-- John

P.S.  In order to apply the mlvm patches to your Solaris build, you  
could (as an alternate tactic) first download the current promotion of  
JDK7 and then selectively apply any mlvm patches that are not already  
promoted (these are the non-numbered ones).  You will probably want to  
set aside the .hg/patches/series file and make your own.

It might be helpful to  commit a series.jdk7 file if this turns out to  
be a tricky or repeated operation; feel free to do this if you want.   
Come to think of it, we might need to move series to series.bsd-port  
at some point.

But I don't recommend moving to JDK7 as a base, unless you have to,  
because people are using Macs for development and we should stick  
together.



More information about the mlvm-dev mailing list