RFR: 8254125: Assertion in cppVtables.cpp during builds on 32bit Windows
Ioi Lam
iklam at openjdk.java.net
Sun Oct 11 04:37:15 UTC 2020
**Problem:** when iterating over the cloned vtables, the original code assumes that they are laid out consecutively in
memory. However, since [JDK-8224509](https://bugs.openjdk.java.net/browse/JDK-8224509), the memory allocated for each
of the the cloned vtables is now 8-byte aligned. This introduces gaps between the cloned vtables, and causes the assert
to fail.
**Fix:** the fix is to no longer assume the consecutive memory layout. Instead, use the CppVtables::_index array to
access each individual cloned vtable.
**Note:** I also cleaned up the code significantly. I feel the original code is pretty hard to understand, so if I just
do the bare minimum to fix the bug, it will be pretty hard to review.
I would suggest that the reviewers look at just the new version of the code and see if it's working as described
(instead of looking at the diff to understand what the bug was and how it has been fixed).
This version still uses the x-macro CPP_VTABLE_TYPES_DO to enumerate over the classes whose vtables need to be cloned.
I plan to change that into templates in a future RFE.
-------------
Commit messages:
- 8254125: Assertion in cppVtables.cpp during builds on 32bit Windows
Changes: https://git.openjdk.java.net/jdk/pull/591/files
Webrev: https://webrevs.openjdk.java.net/?repo=jdk&pr=591&range=00
Issue: https://bugs.openjdk.java.net/browse/JDK-8254125
Stats: 136 lines in 5 files changed: 18 ins; 59 del; 59 mod
Patch: https://git.openjdk.java.net/jdk/pull/591.diff
Fetch: git fetch https://git.openjdk.java.net/jdk pull/591/head:pull/591
PR: https://git.openjdk.java.net/jdk/pull/591
More information about the serviceability-dev
mailing list