> 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`: PASS (Failures of > `sun/security/lib/cacerts/VerifyCACerts.java` and > `sun/security/pkcs11/KeyStore/CertChainRemoval.java` seem to be unrelated to > this patch)
Daohan Qu has updated the pull request incrementally with one additional commit since the last revision: Update copyright year ------------- Changes: - all: https://git.openjdk.org/jdk/pull/14852/files - new: https://git.openjdk.org/jdk/pull/14852/files/f4068028..1b94fa8e Webrevs: - full: https://webrevs.openjdk.org/?repo=jdk&pr=14852&range=02 - incr: https://webrevs.openjdk.org/?repo=jdk&pr=14852&range=01-02 Stats: 1 line in 1 file changed: 0 ins; 0 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