On Mon, 9 Nov 2026 23:12:29 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:
> 
>   Fix `tib` type declaration
>   
>   From Dean's comment, which was helpful to understand the difference:
>   
>   > The problem is PNT_TIB is a typedef of a pointer type, so "const
>   > volatile PNT_TIB" is the same as "PNT_TIB const volatile". I think
>   > what you need is "const volatile TEB *" or an equivalent
>   > VOLATILE_PNT_TIB typedef.

Marked as reviewed by dlong (Reviewer).

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

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

Reply via email to