RFR: 8272563: Possible assertion failure in CardTableBarrierSetC1
Fairoz Matte
fmatte at openjdk.java.net
Wed Aug 18 12:45:41 UTC 2021
This patch is proposed by the submitter of the bug - ugawa at ci.i.u-tokyo.ac.jp
The method CardTableBarrierSetC1::post_barrier generates a move LIR when TwoOperandLIRForm flag is true to move the address to be marked in the card table to a temporary register.
> __ move(addr, tmp);
However, this code only guarantees that `addr` is a valid register for LIR, which can be a virtual register. If the virtual register for `addr` is spilled to the stack by chance, the `move(addr, tmp)` is compiled to a memory-to-register which causes an assertion failure because a memory-to-register move requires their arguments to have the same size.
The fix is to check if it is is_oop() and call the mov appropriately.
No issues found in local testing and Mach5 tier1-3
-------------
Commit messages:
- 8272563: Possible assertion failure in CardTableBarrierSetC1
Changes: https://git.openjdk.java.net/jdk/pull/5164/files
Webrev: https://webrevs.openjdk.java.net/?repo=jdk&pr=5164&range=00
Issue: https://bugs.openjdk.java.net/browse/JDK-8272563
Stats: 7 lines in 1 file changed: 6 ins; 0 del; 1 mod
Patch: https://git.openjdk.java.net/jdk/pull/5164.diff
Fetch: git fetch https://git.openjdk.java.net/jdk pull/5164/head:pull/5164
PR: https://git.openjdk.java.net/jdk/pull/5164
More information about the hotspot-gc-dev
mailing list