RFR(S)[13]: AArch64: float point register corruption in ZBarrierSetAssembler::load_at
Andrew Haley
aph at redhat.com
Fri Jun 21 13:07:12 UTC 2019
On 6/21/19 10:32 AM, Stuart Monteith wrote:
> Apologies - sent prematurely.
>
> The interpreter passes rscratch1, which ultimately ends up in load_at.
>
> The first thing you'll hit is a call from the interpreter.
> TemplateInterpreterGenerator::generate_fixed_frame
> 888 // Get mirror and store it in the frame as GC root for this Method*
> 889 __ load_mirror(rscratch1, rmethod);
> 890 __ stp(rscratch1, zr, Address(sp, 4 * wordSize));
Ah, yes. The interpreter has its own rules. So the problem is not that
rscratch1 is live across the call but that it's actually used as a
parameter.
So how to fix it? There's no need to use scratch1 here, so we could
assert that scratch registers aren't used as args to load_at or make
load_at suitably defensive when it happens.
--
Andrew Haley (he/him)
Java Platform Lead Engineer
Red Hat UK Ltd. <https://www.redhat.com>
https://keybase.io/andrewhaley
EAC8 43EB D3EF DB98 CC77 2FAD A5CD 6035 332F A671
More information about the hotspot-gc-dev
mailing list