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