> Hi, > > Many thanks to @stefank for finding the issue and helping investigating it. > This PR fixes a couple of issues: > > - On Aarch64, `g1StoreLSpecialOneOop` does not save `mem` and `src` during > the GC pre-barrier, this risks clobber these values, which may lead to > crashes or memory corruption when doing the store instruction. > - It seems that the value passed to the post-barrier should be an > uncompressed oop, this requires us to decode the narrow oop instead of simply > zero-extending it. > - Relax the restriction on the `src` register to be an arbitrary register. > - Split the rule into 2 so that we can avoid cloberring an additional > register on Aarch64 when the offset of the oop inside the payload is 0, it > also makes the implementation a little easier to read. > > Testing: > - [x] tier1-4, valhalla-comp-stress, linux-aarch64 > - [x] tier1-4, valhalla-comp-stress, linux-aarch64, with `-XX:+StressGCM > -XX:InitiatingHeapOccupancyPercent=0 -Xmn10m` > - [ ] tier1-4, valhalla-comp-stress, linux-x64 > - [ ] tier1-4, valhalla-comp-stress, linux-x64, with `-XX:+StressGCM > -XX:InitiatingHeapOccupancyPercent=0 -Xmn10m` > > Please take a look and leave your reviews, thanks a lot.
Quan Anh Mai has updated the pull request incrementally with one additional commit since the last revision: Fix x64, add assert in StoreFlatNode::expand_atomic ------------- Changes: - all: https://git.openjdk.org/valhalla/pull/2013/files - new: https://git.openjdk.org/valhalla/pull/2013/files/fb475fc6..a9978bf0 Webrevs: - full: https://webrevs.openjdk.org/?repo=valhalla&pr=2013&range=02 - incr: https://webrevs.openjdk.org/?repo=valhalla&pr=2013&range=01-02 Stats: 68 lines in 3 files changed: 42 ins; 8 del; 18 mod Patch: https://git.openjdk.org/valhalla/pull/2013.diff Fetch: git fetch https://git.openjdk.org/valhalla.git pull/2013/head:pull/2013 PR: https://git.openjdk.org/valhalla/pull/2013
