Still crashity crashing

Rémi Forax forax at univ-mlv.fr
Sun Aug 2 15:21:23 PDT 2009


This is another error here.

GuardWithTest adapter try to report a NPE but
fillInStackTrace() crash when walking the stack to gather all frames.

The good question is how GuardWithTest can throw a NPE
knowing that test, target and fallback are null checked before
its creation.

By the way, John :
in MethodHandleImpl.makeGuardWithTest()
the code :
             MethodHandle gtest = spreadArguments(token, test, 
gtype.changeReturnType(boolean.class), 0);
             MethodHandle gtarget = spreadArguments(token, target, 
gtype, 0);
             MethodHandle gfallback = spreadArguments(token, fallback, 
gtype, 0);
             MethodHandle gguard = new 
GuardWithTest(GuardWithTest.VARARGS_INVOKE, gtest, gtarget, gfallback);
             if (gtest == null || gtarget == null || gfallback == null)  
return null;
             return collectArguments(token, gguard, type, 0, null);

should be :
             MethodHandle gtest = spreadArguments(token, test, 
gtype.changeReturnType(boolean.class), 0);
             MethodHandle gtarget = spreadArguments(token, target, 
gtype, 0);
             MethodHandle gfallback = spreadArguments(token, fallback, 
gtype, 0);
             if (gtest == null || gtarget == null || gfallback == null)  
return null;
             MethodHandle gguard = new 
GuardWithTest(GuardWithTest.VARARGS_INVOKE, gtest, gtarget, gfallback);
             return collectArguments(token, gguard, type, 0, null);

the null check should before the creation of the guard.

Anyway, these doesn't solve the problem.

Charles, could you try with -Xint, just to see if the NPE is still 
thrown or not ?

cheers,
Rémi



Le 02/08/2009 23:42, Attila Szegedi a écrit :
> Specifically, in my case emitting a class through ASM that has this in
> it:
>
>           mv.visitMethodInsn(INVOKEDYNAMIC, "java/dyn/InvokeDynamic",
> "dyn:getprop:helloText", "(Ljava/lang/Object;)Ljava/lang/String");
>
> crashes the JVM sometime after it loads the class. Note how there's no
> semicolon after "Ljava/lang/String"
>
> Attila.
>
> On 2009.08.02., at 23:34, Attila Szegedi wrote:
>
>    
>> I too managed to crash it yesterday, but it turned out I
>> accidentally emitted invalid bytecode from ASM - I forgot to end the
>> binary name of a class with semicolon in method signature of an
>> invokedynamic instruction. Amazingly, neither ASM nor the verifier
>> caught it.  The crash message was something along the lines of
>> "ShouldNotBeHere" or similar :-)
>>
>> All I want to say is, in my case it crashed because I fed it
>> garbage. Not necessarily true in your case, but worth doublechecking
>> what you do (knowing you, you probably did it anyway before posting).
>>
>> Attila.
>>
>> On 2009.08.02., at 22:12, Charles Oliver Nutter wrote:
>>
>>      
>>> Ok, finally circled back around to testing things again. With
>>> Attila's
>>> build, I'm still getting crashes, but more seems to work.
>>>
>>> I've attached the dump from the crash. To reproduce:
>>>
>>> 1. grab and unpack a JRuby nightly from
>>> 2. set MLVM into JAVA_HOME
>>> 3. run bin/jruby -J-Djruby.compile.invokedynamic=true
>>> -J-XX:+EnableInvokeDynamic bench/bench_fib_recursive.rb 100
>>>
>>> It should blow up pretty quickly. I have not had opportunity to
>>> narrow
>>> it down any more than this.
>>>
>>> Because of the crashing, it's difficult for me to move forward on
>>> indy
>>> work :( I'm standing by to do anything I can do to help figure it
>>> out.
>>>
>>> - Charlie
>>>        
> _______________________________________________
> mlvm-dev mailing list
> mlvm-dev at openjdk.java.net
> http://mail.openjdk.java.net/mailman/listinfo/mlvm-dev
>    

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mail.openjdk.java.net/pipermail/mlvm-dev/attachments/20090803/0226cccd/attachment.html 


More information about the mlvm-dev mailing list