RFR: 8278871: [JVMCI] assert((uint)reason < 2* _trap_hist_limit) failed: oob

Doug Simon dnsimon at openjdk.java.net
Thu Dec 16 09:04:14 UTC 2021


This PR fixes a discrepancy between `MethodData::_trap_hist_list` and `Deoptimization::Reason_LIMIT` in terms of JVMCI specific usage.

JVMCI doubles the size of the deopt history for a method so that it can distinguish deopts in a normal method compilation from deopts in an OSR compilation:

    union {
      intptr_t _align;
      u1 _array[JVMCI_ONLY(2 *) MethodData::_trap_hist_limit];
    } _trap_hist;


To access the history for OSR deopts, the index for a deopt reason needs to be adjusted to the upper half of the history array. The amount used for the adjustment was incorrect and this PR fixes it:


  if (update_total_trap_count) {
    uint idx = reason;
#if INCLUDE_JVMCI
    if (is_osr) {
      idx += Reason_TRAP_HISTORY_LENGTH;
    }
#endif


I introduced `Reason_TRAP_HISTORY_LENGTH` as a replacement for `25 JVMCI_ONLY(+5),  // decoupled from Deoptimization::Reason_LIMIT` as this decoupling is unnecessary (as dangerous) as far as I can see.

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

Commit messages:
 - fix index used to access trap history in OSR compiled method

Changes: https://git.openjdk.java.net/jdk/pull/6855/files
 Webrev: https://webrevs.openjdk.java.net/?repo=jdk&pr=6855&range=00
  Issue: https://bugs.openjdk.java.net/browse/JDK-8278871
  Stats: 17 lines in 5 files changed: 7 ins; 4 del; 6 mod
  Patch: https://git.openjdk.java.net/jdk/pull/6855.diff
  Fetch: git fetch https://git.openjdk.java.net/jdk pull/6855/head:pull/6855

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


More information about the hotspot-dev mailing list