RFR: 8311879: SA ClassWriter generates invalid invokedynamic code [v3]
Daohan Qu
dqu at openjdk.org
Fri Jul 14 06:16:17 UTC 2023
On Fri, 14 Jul 2023 02:45:36 GMT, Daohan Qu <dqu at openjdk.org> wrote:
>> 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
The test error in `jdk/javadoc/doclet/testLinkPlatform/TestLinkPlatform.java` on Linux x86 seems to be unrelated to this patch.
-------------
PR Comment: https://git.openjdk.org/jdk/pull/14852#issuecomment-1635331573
More information about the serviceability-dev
mailing list