[prev in list] [next in list] [prev in thread] [next in thread] 

List:       openjdk-hotspot-runtime-dev
Subject:    RFR: JDK-8211279: Verify missing object equals barriers
From:       Roman Kennke <rkennke () redhat ! com>
Date:       2018-09-28 14:59:54
Message-ID: 935559b9-6df2-e337-97b5-5807cf57a154 () redhat ! com
[Download RAW message or body]

GCs like Shenandoah require an extra barrier for comparing objects
(oop==oop). It is easy to forget or overlook this. It would be very
useful to have a flag to turn on extra verification that catches missing
object equality barriers.

This change inserts an assert into == and != operators for the oop class
in oopsHierarchy.hpp. This only gets compiled in fastdebug builds (when
CHECK_UNHANDLED_OOPS is on).

It also adds a develop flag VerifyObjectEquals that is used to turn on
this verification.

It also adds a method oopDesc::unsafe_equals(..) to be used in cases
where you know what what you are doing, and really want to use direct ==
comparison without using barriers. This is used in e.g.
ReferenceProcessor or all over the place in ShenandoahGC.

The change also fixes a couple of places where oops are compared to
non-oops like Universe::non_oop_word() to use the oop==void* operator
instead, so those don't falsely trip the verification.

It doesn't make sense to turn this check on if you're not running a GC
that needs it, unless you want to go fix all the oop==oop in the GC itself.

Bug:
https://bugs.openjdk.java.net/browse/JDK-8211279
Webrev:
http://cr.openjdk.java.net/~rkennke/JDK-8211279/webrev.00/

What do you think?
Roman

[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic