RFR(M): 8166317: InterpreterCodeSize should be computed

Volker Simonis volker.simonis at gmail.com
Tue Oct 10 17:17:40 UTC 2017


On Tue, Oct 10, 2017 at 9:42 AM, Andrew Haley <aph at redhat.com> wrote:
> On 09/10/17 20:24, Volker Simonis wrote:
>> Unfortunately we can't easily generate these stubs during
>> 'stubRoutines_init1()' because
>> 'generate_dirty_card_log_enqueue_if_necessary()' needs the byte map
>> base address which is only initialized in
>> 'CardTableModRefBS::initialize()' during 'univers_init()' which
>> happens after 'stubRoutines_init1()'.
>
> Yes you can, you can do something like we do for narrow_ptrs_base:
>
>     if (Universe::is_fully_initialized()) {
>       mov(rheapbase, Universe::narrow_ptrs_base());
>     } else {
>       lea(rheapbase, ExternalAddress((address)Universe::narrow_ptrs_base_addr()));
>       ldr(rheapbase, Address(rheapbase));
>     }
>

Hi Andrew,

thanks for your suggestion. Yes, I could do that, but that would
replace a constant load in the barrier with a constant load plus a
load from memory, because during stubRoutines_init1() heap won't be
initialized. Not sure about this, but I think we want to avoid this
overhead in the barriers.

Also, Christian proposed in a previous mail to replace the G1 barrier
stubs on SPARC with simple runtime calls like on other platforms.
While I think that it is probably worthwhile thinking about such a
change, I don't know the exact history of these stubs and probably
some GC experts should decide if that's really a good idea. I'd be
happy to open an extra issue for following up on that path.

But for the moments I've simply added a new initialization step
"g1_barrier_stubs_init()" between 'univers_init()' and
interpreter_init() which is empty on all platforms except SPARC where
it generates the corresponding stubs:

http://cr.openjdk.java.net/~simonis/webrevs/2017/8166317.v3/

I've built and smoke-tested the new change on Windows, MacOS,
Solaris/SPARC, AIX, Linux/x86_64/ppc64/ppc64le/s390. Unfortunately I
don't have access to ARM machines so I couldn't check arm,arm64 and
aarch64 although I don't expect any problems there (actually I've just
added an empty method there). But it would be great if somebody could
check that for any case.

@Vladimir: I've also rebased the change for "8187091:
ReturnBlobToWrongHeapTest fails because of problems in
CodeHeap::contains_blob()":

http://cr.openjdk.java.net/~simonis/webrevs/2017/8187091.v2/

Because it changes the same files like 8166317 it should be applied
and pushed only after 8166317 was pushed.

Thank you and best regards,
Volker

> --
> Andrew Haley
> Java Platform Lead Engineer
> Red Hat UK Ltd. <https://www.redhat.com>
> EAC8 43EB D3EF DB98 CC77 2FAD A5CD 6035 332F A671


More information about the hotspot-dev mailing list