RFR: 8311879: ClassWriter generates invalid invokedynamic code
Daohan Qu
dqu at openjdk.org
Wed Jul 12 13:58:32 UTC 2023
This patch should fix the wrong CP index for `invokedynamic` instruction generated by SA's `ClassWriter`. The buggy code in `sun.jvm.hotspot.tools.jcore.ByteCodeRewriter` should have been up-to-date with the following code snippet in `hotspot`:
https://github.com/openjdk/jdk/blob/753bd563ecca6bb5ff9b5ebc0957bc1854dce78d/src/hotspot/share/interpreter/rewriter.cpp#L291-L294
The comments above seem to be obsolete since the following change made in [JDK-8301995](https://bugs.openjdk.org/browse/JDK-8301995). So I also remove them.
+ // Should do nothing since we are not patching this bytecode
int cache_index = ConstantPool::decode_invokedynamic_index(
Bytes::get_native_u4(p));
// We will reverse the bytecode rewriting _after_ adjusting them.
// Adjust the cache index by offset to the invokedynamic entries in the
// cpCache plus the delta if the invokedynamic bytecodes were adjusted.
- int adjustment = cp_cache_delta() + _first_iteration_cp_cache_limit;
- int cp_index = invokedynamic_cp_cache_entry_pool_index(cache_index - adjustment);
+ int cp_index = _initialized_indy_entries.at(cache_index).constant_pool_index();
assert(_pool->tag_at(cp_index).is_invoke_dynamic(), "wrong index");
This fix is straightforward and thank @asotona for finding this bug!
### Test Results of release build on Linux x64
* `jtreg:test/hotspot/jtreg/serviceability` and `jtreg:test/jdk/sun/tools/`: PASS
* `tier1`: PASS
* `tier2` and `tier3`: Running
-------------
Commit messages:
- Remove obsolete code comments
- Fix wrong CP index for invokedynamic instruction
Changes: https://git.openjdk.org/jdk/pull/14852/files
Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=14852&range=00
Issue: https://bugs.openjdk.org/browse/JDK-8311879
Stats: 8 lines in 2 files changed: 4 ins; 3 del; 1 mod
Patch: https://git.openjdk.org/jdk/pull/14852.diff
Fetch: git fetch https://git.openjdk.org/jdk.git pull/14852/head:pull/14852
PR: https://git.openjdk.org/jdk/pull/14852
More information about the serviceability-dev
mailing list