[LLVMdev] Function materializing in Java

Nicolas Geoffray nicolas.geoffray at lip6.fr
Sun Apr 20 01:38:50 PDT 2008


Great! The goal is now to make vmkit execute without a patch'ed llvm 
before 2.3.

Nicolas

Chris Lattner wrote:
> On Apr 18, 2008, at 1:40 PM, Nicolas Geoffray wrote:
>
>   
>> Hi everyone,
>>
>> I would like to apply the following patch (java-materialize.patch)  
>> in order to materialize Java functions in vmkit. The current  
>> implementation is not satisfactory because the materializeFunction  
>> of a module provider is not supposed to do anything but read the  
>> bitcode, which is not the case in Java. In Java, materializing a  
>> function Foo can possibly trigger class loading (hence executing  
>> Java code), do static initialization of classes that may even invoke  
>> Foo. Hence after materializing a function, it's possible that the  
>> function has already been codegen'd.
>>     
>
> Ok
>
>   
>> So that's the first part of the patch: after materializing a  
>> function, the JIT checks if the function has already been codegened.
>>     
>
> This is fine, as is moving the lock in getPointerToFunction.
>
>   
>> The second part of the patch involves multi-threading. Since  
>> materializing a Java function involves executing Java code,  
>> synchronizations may occur. And one can imagine a scenario where:
>>
>> 1) thread A requires the compilation of a function Bar.Foo, hence  
>> the LLVM JIT takes its lock and invokes matieralizeFunction on the  
>> Java module provider. Materializing Foo triggers the execution of  
>> Java code that will load the class Bar. During class loading, the  
>> code synchronizes on a object Obj already locked by another thread, B.
>>
>> 2) thread B is doing class loading and has locked Obj. It then calls  
>> a function that needs to be jitted. Since thread A already owns the  
>> lock of the JIT, thread A and B will be interlocked.
>>
>> So the second part of the patch does not take the jit lock before  
>> materializing a function. The lock is taken after the materialization.
>>     
>
> Yeah, this is fine.
>
>   
>> I also provide a patch for the BitcodeReader (the only module  
>> provider implemented in llvm, right?) in order to be thread-safe.  
>> Just tell me if you think this should be applied too.
>>     
>
> I don't think this should be applied.  Sync should be done at a higher  
> level than in the bitcode reader.
>
> -Chris
>
> _______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
>   




More information about the llvm-dev mailing list