RFR: 8189170: Add option to disable stack overflow checking in primordial thread for use with JNI_CreateJavaJVM
David Holmes
david.holmes at oracle.com
Fri Nov 17 02:40:35 UTC 2017
Looking for a runtime Reviewer please.
Also Tomas: are you able to test this patch with R?
Thanks,
David
On 14/11/2017 8:39 PM, David Holmes wrote:
> Bug: https://bugs.openjdk.java.net/browse/JDK-8189170
>
> webrev: http://cr.openjdk.java.net/~dholmes/8189170/webrev/
>
>
> There are three parts to this which made it somewhat more complicated
> than I had envisaged:
>
> 1. Add the flag and disable the guards.
>
> This is relatively straight-forward:
>
> void JavaThread::create_stack_guard_pages() {
> if (!os::uses_stack_guard_pages() ||
> _stack_guard_state != stack_guard_unused ||
> (DisablePrimordialThreadGuardPages &&
> os::is_primordial_thread())) {
> log_info(os, thread)("Stack guard page creation for thread "
> UINTX_FORMAT " disabled",
> os::current_thread_id());
> return;
>
> with a tweak in JavaThread::stack_guards_enabled as well.
>
> 2. Promote os::XXX::is_initial_thread to os::is_primordial_thread()
>
> We have three platforms that already implement this functionality:
> Linux, Solaris and AIX. For BSD/OSX and Windows we don't attempt to do
> anything different for the primordial thread, and we don't have a way to
> detect the primordial thread - so is_primordial_thread() just returns
> false.
>
> I also tidied up some comments regarding terminology.
>
> 3. Thomas noticed that we unconditionally subtract 2*page_size() from
> the rlimit stack size, without checking it was bigger than 2*page_size()
> to start with. I was unsure how to tackle this. It's no good leaving
> stack_size at zero so I opted to ensure we would have at least one page
> left. Of course in such cases we would hit the bug in libc (if it still
> exists, which seems unlikely but time consuming to establish).
>
> Testing:
> - Tier 1 (JPRT) testing with a modified launcher that uses the
> primordial thread
> - with guard pages enabled
> - with guard pages disabled
> - Tier 1 (JPRT) normal JDK build (which should be unaffected by this
> change)
>
> The testing was primarily to ensure that disabling the stack guards on
> the primordial thread wasn't totally broken. A number of tests fail:
> - setting -Xss32m fails for the primordial thread when guards are
> enabled and the rlimit is 8m
> - tests that would hit StackOverflowError crash the VM when guards are
> disabled (as you would expect).
> - runtime/execstack/Testexecstack.java crashes when the guards are disabled
>
> Thanks,
> David
More information about the hotspot-runtime-dev
mailing list