On Sun, 8 Nov 2026 20:32:05 GMT, Ashay Rane <[email protected]> wrote:

>> Without this patch, HotSpot uses `VirtualAlloc()` with `MEM_COMMIT` to
>> make Windows convert stack pages from "reserved" to "committed", but
>> doing so does not update the `StackLimit` field in the Thread
>> Environment Block (TEB) tracked by Windows.  Subsequent use of the stack
>> by HotSpot can cause the stack pointer to be _below_ `StackLimit`, which
>> breaks the invariant expected by the Win32 API functions like
>> `__chkstk()`.
>> 
>> To fix this problem, this patch touches pages one by one, starting from
>> `StackLimit` down to the target address.  This has the intended effect
>> of commiting the pages, but it also correctly updates `StackLimit`.
>> 
>> The included test reliably fails without this patch, and it passes with
>> this patch.  I validated this patch using Tier 1 through 3 tests in the
>> JDK, HotSpot, and LangTools test groups.
>> 
>> ---------
>> - [x] I confirm that I make this contribution in accordance with the 
>> [OpenJDK Interim AI Policy](https://openjdk.org/legal/ai).
>
> Ashay Rane has updated the pull request incrementally with one additional 
> commit since the last revision:
> 
>   Address PR comments
>   
>   1. Mark TEB pointer as `volatile` so that read accesses of `StackLimit`
>      are not optimized away.  Also mark it as constant since the function
>      does not modify the TEB.
>   
>   2. Use the return value of `grow_windows_stack_to()` to decide whether
>      to continue program execution or to show the unrecoverable handler
>      error.
>   
>   3. Attach JBS issue identifier to the test.
>   
>   4. Allow access to native methods in the test.  Also set the stack size
>      to 1MB, so that too small a stack size (e.g. 256KB) does not cause
>      the JVM to crash when running the test.
>   
>   5. Update miscellaneous comments.

My testing passed clean.

-------------

Marked as reviewed by kvn (Reviewer).

PR Review: https://git.openjdk.org/jdk/pull/33729#pullrequestreview-5830529171

Reply via email to