RFR: 8300255: Introduce interface for GC oop verification in the assembler [v3]

Erik Österlund eosterlund at openjdk.org
Wed Feb 8 10:45:45 UTC 2023


On Tue, 7 Feb 2023 15:08:34 GMT, Erik Österlund <eosterlund at openjdk.org> wrote:

>> Hi, seems we need two extra small changes to build on linux-riscv. Thanks.
>
>> Hi, seems we need two extra small changes to build on linux-riscv. Thanks.
> 
> Thanks for having a look! Hopefully fixed in the latest commit.

> @fisk : Hi, I think we should also add following changes for riscv to make it work:
> 
> ```
> diff --git a/src/hotspot/cpu/riscv/gc/shared/barrierSetAssembler_riscv.cpp b/src/hotspot/cpu/riscv/gc/shared/barrierSetAssembler_riscv.cpp
> index ed53fbf22c8..662de44de29 100644
> --- a/src/hotspot/cpu/riscv/gc/shared/barrierSetAssembler_riscv.cpp
> +++ b/src/hotspot/cpu/riscv/gc/shared/barrierSetAssembler_riscv.cpp
> @@ -316,8 +316,7 @@ void BarrierSetAssembler::check_oop(MacroAssembler* masm, Register obj, Register
>    __ mv(tmp2, (intptr_t) Universe::verify_oop_bits());
> 
>    // Compare tmp1 and tmp2.
> -  __ xorr(tmp1, tmp1, tmp2);
> -  __ bnez(tmp1, error);
> +  __ bne(tmp1, tmp2, error);
> 
>    // Make sure klass is 'reasonable', which is not zero.
>    __ load_klass(obj, obj, tmp1); // get klass
> diff --git a/src/hotspot/cpu/riscv/gc/z/zBarrierSetAssembler_riscv.cpp b/src/hotspot/cpu/riscv/gc/z/zBarrierSetAssembler_riscv.cpp
> index 0741869ddaf..1ebfb8f9e23 100644
> --- a/src/hotspot/cpu/riscv/gc/z/zBarrierSetAssembler_riscv.cpp
> +++ b/src/hotspot/cpu/riscv/gc/z/zBarrierSetAssembler_riscv.cpp
> @@ -449,10 +449,10 @@ void ZBarrierSetAssembler::generate_c1_load_barrier_runtime_stub(StubAssembler*
> 
>  void ZBarrierSetAssembler::check_oop(MacroAssembler* masm, Register obj, Register tmp1, Register tmp2, Label& error) {
>    // Check if mask is good.
> -  // verifies that ZAddressBadMask & x10 == 0
> -  __ ld(c_rarg3, Address(xthread, ZThreadLocalData::address_bad_mask_offset()));
> -  __ andr(c_rarg2, x10, c_rarg3);
> -  __ bnez(c_rarg2, error);
> +  // verifies that ZAddressBadMask & obj == 0
> +  __ ld(tmp2, Address(xthread, ZThreadLocalData::address_bad_mask_offset()));
> +  __ andr(tmp1, obj, tmp2);
> +  __ bnez(tmp1, error);
> 
>    BarrierSetAssembler::check_oop(masm, obj, tmp1, tmp2, error);
>  }
> ```

Fixed!

-------------

PR: https://git.openjdk.org/jdk/pull/12443


More information about the hotspot-dev mailing list