RFR: 8309634: Resolve CONSTANT_MethodRef at CDS dump time [v2]
Ioi Lam
iklam at openjdk.org
Wed Jun 26 03:14:20 UTC 2024
On Tue, 25 Jun 2024 16:45:49 GMT, Matias Saavedra Silva <matsaave at openjdk.org> wrote:
>> Ioi Lam has updated the pull request with a new target base due to a merge or a rebase. The incremental webrev excludes the unrelated changes brought in by the merge/rebase. The pull request contains four additional commits since the last revision:
>>
>> - Merge branch 'master' into 8309634-resolve-methods-at-dumptime
>> - @calvinccheung and @matias9927 comments
>> - Fixed whitespaces
>> - 8309634: Resolve CONSTANT_MethodRef at CDS dump time
>
> src/hotspot/share/interpreter/interpreterRuntime.cpp line 930:
>
>> 928: CallInfo call_info;
>> 929: switch (bytecode) {
>> 930: case Bytecodes::_invokevirtual: LinkResolver::cds_resolve_virtual_call (call_info, link_info, CHECK); break;
>
> I think the the `cds_resolve_xyz_call()` methods might be unnecessary. You can just call the existing methods from LinkResolver besides `resolve_virtual_call`
I updated the code to make it easier to read. `cds_resolve_virtual_call()` needs to pass `is_abstract_interpretation=true` to `linktime_resolve_virtual_method()`. The reason is explained in this new comment:
// is_abstract_interpretation is true IFF CDS is resolving method references without
// running any actual bytecode. Therefore, we don't have an actual recv/recv_klass, so
// we cannot check the actual selected_method (which is not needed by CDS anyway).
Without this guard, we will dereference `recv_klass->method_at_vtable(vtable_index)` and will get a SEGV because `recv_klass` is null.
-------------
PR Review Comment: https://git.openjdk.org/jdk/pull/19866#discussion_r1653865166
More information about the build-dev
mailing list