RFR (S): 8026478: -XX:+VerifyAdapterSharing is broken

John Rose john.r.rose at oracle.com
Wed Oct 23 09:59:23 PDT 2013


I have a question:  The amended free_entry function indirectly unlinks the selected 'entry', but may also unlink other entries with the same hash and fingerprint.  Isn't this working against the use for free_entry, where a pre-existing shared_entry is to be favored and returned?  Won't the shared_entry be unlinked also?  That would seem to lead to a storage leak.

(Minor style nit:  You code the hash comparison and key comparison as nested ifs; they would be just as readable connected by an '&&', and with less nesting.)

— John

On Oct 23, 2013, at 6:49 AM, Albert Noll <albert.noll at oracle.com> wrote:

> Hi,
> 
> unfortunately, the patch was not correct, as revealed by jprt.
> The problem was that entries into the hashmap are not removed
> correctly. 
> 
> This version fixes the problem. The patch is currently in jprt.
> So far, everything looks good.
> 
> Many thanks for another round. Here is the updated webrev:
> http://cr.openjdk.java.net/~anoll/8026478/webrev.03/
> 
> Best,
> Albert
> 
> 
> On 16.10.2013 19:43, Christian Thalinger wrote:
>> It would be nice to have a comment on this guy:
>> +   bool    _contains_all_checks;
>> No need for another webrev if you decide to add the comment.
>> 
>> Looks good.
>> 
>> On Oct 15, 2013, at 11:02 PM, Albert Noll <albert.noll at oracle.com> wrote:
>> 
>>> Forgot to adjust the comment. This version should be fine.
>>> 
>>> http://cr.openjdk.java.net/~anoll/8026478/webrev.02/
>>> 
>>> Albert
>>> 
>>> On 15.10.2013 21:03, Vladimir Kozlov wrote:
>>>> Albert, 
>>>> 
>>>> contains_all_stubs name is incorrect. It should be contains_all_checks. Adapter code does not have stubs in it. 
>>>> 
>>>> I think the next check should be: 
>>>> 
>>>> bool contains_all_checks = (StubRoutines::code2() != NULL) || !VerifyAdapterCalls; 
>>>> 
>>>> because code does not change when VerifyAdapterCalls is false. 
>>>> Then you don't need to check VerifyAdapterCalls in next condition: 
>>>> 
>>>> +       if ((VerifyAdapterCalls || VerifyAdapterSharing) && !entry->contains_all_checks()) { 
>>>> 
>>>> And we need to regenerate adapter regardless VerifyAdapterSharing because, as you said, VerifyAdapterCalls potentially reports a false error if check for code2 is not generated. 
>>>> 
>>>> So the condition should be simple "if (!entry->contains_all_checks())". 
>>>> 
>>>> Could you leave next lines unchanged (use 2 lines for arguments)?: 
>>>> !       buffer.insts()->initialize_shared_locs((relocInfo*)buffer_locs, 
>>>> 
>>>> sizeof(buffer_locs)/sizeof(relocInfo)); 
>>>>         MacroAssembler _masm(&buffer); 
>>>> 
>>>> Cleanup is fine. 
>>>> 
>>>> Thanks, 
>>>> Vladimir 
>>>> 
>>>> On 10/15/13 4:14 AM, Albert Noll wrote: 
>>>>> Hi, 
>>>>> 
>>>>> could I have reviews for this small patch? 
>>>>> 
>>>>> Bug: https://bugs.openjdk.java.net/browse/JDK-8026478 
>>>>> webrev: http://cr.openjdk.java.net/~anoll/8026478/webrev.00/ 
>>>>> <http://cr.openjdk.java.net/%7Eanoll/8026478/webrev.00/> 
>>>>> 
>>>>> Problem: This flag is broken. The reason is that adapters 
>>>>> (gen_i2c_adapter()) that are generated during VM startup do not include 
>>>>> the range for StubRoutines::code2() if -XX:+VerifyAdapterCalls is 
>>>>> specified. StubRoutines::code2() is only allocated later during startup; 
>>>>> consequently, code2() is NULL. As a result, the size of the generated 
>>>>> adapter as well as the code itself does not mactch. 
>>>>> 
>>>>> Solution: Defer check (VerifyAdapterSharing) until VM is initialzied. 
>>>>> Note that this patch also fixes potential issues with 
>>>>> -XX:+VerifyAdapterCalls, which is a dignostic flag. The patch also 
>>>>> removes some unused field of VerifyAdapterSharing. 
>>>>> 
>>>>> 
>>>>> Many thanks in advance, 
>>>>> Albert 
>>>>> ** 
>>> 
>> 
> 

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mail.openjdk.java.net/pipermail/hotspot-compiler-dev/attachments/20131023/6efbeedf/attachment-0001.html 


More information about the hotspot-compiler-dev mailing list