RFR: 8266330: itableMethodEntry::initialize() asserts with archived old classes

Calvin Cheung ccheung at openjdk.java.net
Fri May 7 23:30:15 UTC 2021


#ifdef ASSERT 
  if (MetaspaceShared::is_in_shared_metaspace((void*)&_method) && 
     !MetaspaceShared::remapped_readwrite() && 
     !MetaspaceShared::is_old_class(m->method_holder())) { 
    // At runtime initialize_itable is rerun as part of link_class_impl() 
    // for a shared class loaded by the non-boot loader. 
    // The dumptime itable method entry should be the same as the runtime entry. 
    assert(_method == m, "sanity"); 
  } 
#endif


The above includes the check for !MetaspaceShared::is_old_class(m->method_holder()).
While the method_holder() is not an old class, the _klass in the klassITable could be an old class.
The proposed fix is to have the caller of the above function pass in the _klass and add another check
making sure the _klass is not an old class before the assert.

Testing:
- [x] tiers 1 and 2 (including the new test)

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

Commit messages:
 - 8266330: itableMethodEntry::initialize() asserts with archived old classes

Changes: https://git.openjdk.java.net/jdk/pull/3930/files
 Webrev: https://webrevs.openjdk.java.net/?repo=jdk&pr=3930&range=00
  Issue: https://bugs.openjdk.java.net/browse/JDK-8266330
  Stats: 175 lines in 6 files changed: 169 ins; 0 del; 6 mod
  Patch: https://git.openjdk.java.net/jdk/pull/3930.diff
  Fetch: git fetch https://git.openjdk.java.net/jdk pull/3930/head:pull/3930

PR: https://git.openjdk.java.net/jdk/pull/3930


More information about the hotspot-runtime-dev mailing list