Likely a bug in G1BarrierSetAssembler::oop_store_at
Dmitry Samersoff
dms at samersoff.net
Sun Sep 1 16:06:09 UTC 2019
Hello Everybody,
I found a following code in x86 G1BarrierSetAssembler::oop_store_at
It looks like we pass the same register as both new_val and tmp2 to
g1_write_barrier_post.
I don't have x86 setup in hands so can't say how critical it is.
// G1 barrier needs uncompressed oop for region cross check.
if (UseCompressedOops) {
new_val = tmp2;
__ movptr(new_val, val);
}
}
BarrierSetAssembler::store_at(masm, decorators, type, Address(tmp1,
0), val, noreg, noreg);
if (needs_post_barrier) {
g1_write_barrier_post(masm /*masm*/,
tmp1 /* store_adr */,
new_val /* new_val */,
rthread /* thread */,
tmp3 /* tmp */,
tmp2 /* tmp2 */);
}
-Dmitry
More information about the valhalla-dev
mailing list