RFR: 8309811: BytecodePrinter cannot handle unlinked classes [v2]
Coleen Phillimore
coleenp at openjdk.org
Tue Jun 27 13:33:06 UTC 2023
On Tue, 27 Jun 2023 05:27:31 GMT, Ioi Lam <iklam at openjdk.org> wrote:
>> `BytecodePrinter` assumes that it's printing a method from a linked class (e.g., it assumes that the two bytes following an `invokestatic` bytecode have been rewritten to be a `ConstantPoolCache` index.)
>>
>> This works fine for `-XX:+TraceBytecodes`, which prints only code from linked classes. However, it doesn't work `Method::print_codes_on()` for a method from an unlinked class.
>>
>> The old code in `BytecodePrinter` uses a very convoluted logic to go from the rewritten index back to the `cp_index`. It's also difficult to understand the type of the indices from the badly named variables like `i` and `orig_i`.
>>
>> I had to rewrite all the logic for fetching the indices. Now they are in this form:
>>
>>
>> case Bytecodes::_putfield:
>> case Bytecodes::_getfield:
>> {
>> int cp_index;
>> if (is_linked()) {
>> int cpcache_index = get_native_index_u2();
>> cp_index = cpcache()->entry_at(cpcache_index)->constant_pool_index();
>> } else {
>> cp_index = get_Java_index_u2();
>> }
>> print_field_or_method(cp_index, st);
>> }
>>
>>
>> The indices have names like `cp_index`, `cpcache_index`, `indy_index` so we know exactly what we are dealing with.
>>
>> Other changes:
>> - Added test cases to cover both linked/unlinked classes for the bytecodes modified by this PR
>> - Fixed the printing of strings to escape unprintable characters (E.g., "\u0001" is very common used by indified string concat)
>> - Added a test case for `-XX:+TraceBytecodes`
>> - Added a develop flag `-XX:TraceBytecodesStopAt=` so the test cases won't produce excessive output.
>
> Ioi Lam has updated the pull request incrementally with one additional commit since the last revision:
>
> @coleenp comments
Ok, looks good.
-------------
Marked as reviewed by coleenp (Reviewer).
PR Review: https://git.openjdk.org/jdk/pull/14623#pullrequestreview-1500880871
More information about the hotspot-runtime-dev
mailing list