> 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.

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

Changes:
  - all: https://git.openjdk.org/jdk/pull/33729/files
  - new: https://git.openjdk.org/jdk/pull/33729/files/8a20a63f..308d4741

Webrevs:
 - full: https://webrevs.openjdk.org/?repo=jdk&pr=33729&range=02
 - incr: https://webrevs.openjdk.org/?repo=jdk&pr=33729&range=01-02

  Stats: 1 line in 1 file changed: 0 ins; 0 del; 1 mod
  Patch: https://git.openjdk.org/jdk/pull/33729.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/33729/head:pull/33729

PR: https://git.openjdk.org/jdk/pull/33729

Reply via email to