Shenandoah: SBSA::load_at() should save/restore registers when calling SATB barrier

Roman Kennke rkennke at redhat.com
Mon Oct 7 08:36:01 UTC 2019


>>>> Is it ok for that particular piece of code to not push/pop rax and rbx?
>>>
>>> save_registers()/restore_registers() do not push/pop rax and rbx.
>>
>> Yes, that's what I mean. Do you require this particular behaviour? If
>> not, i.e. if you're good to simply push/pop all registers, then you can
>> use push_CPU_state() and pop_CPU_state() instead.
>>
>> The LRB stub doesn't push/pop rax because that's where the result comes
>> back.
> 
> Right, we should save rax and rbx, as from c2i_entry_barrier, rbx has
> Method pointer, which needs to be preserved.
> 
> Webrev:
> http://cr.openjdk.java.net/~zgu/shenandoah/load_at_keepalive_fix/webrev.01/

Is that the same patch as before?

Roman


>>>>> This fix also fixes the intermittent is_loader_alive() assertion we
>>>>> have
>>>>> seen in nightly tests. While this assertion is relative rare on
>>>>> x86_64,
>>>>> but it is quite reproducible on x86_32 (because of it has less
>>>>> registers(?)). With this fix, I have yet seen once.
> 
> Unfortunately, this assertion failure came back during stress runs (put
> tier3 tests in loop) over the weekend, sigh! But I think they are
> different issues and this change should stay.
> 
> Thanks,
> 
> -Zhengyu
> 
> 
>>>>>
>>>>>
>>>>> Webrev:
>>>>> http://cr.openjdk.java.net/~zgu/shenandoah/load_at_keepalive_fix/webrev.00/
>>>>>
>>>>>
>>>>>
>>>>> Test:
>>>>>     hotspot_gc_shenandoah (fastdebug and release) x86_64 and x86_32 on
>>>>> Linux
>>>>>
>>>>> Thanks,
>>>>>
>>>>> -Zhengyu
>>>>>
>>>>
>>



More information about the shenandoah-dev mailing list