Closed as not planned
Description
Description
Hi,
Just trying to run PHP 8.3.0 on Windows 7 (after successfully compiling it on Win11 vs17 x64) and it's failed with message
According to https://learn.microsoft.com/en-us/windows/win32/api/processthreadsapi/nf-processthreadsapi-getcurrentthreadstacklimits it's normal as requirements are:
- Minimum supported client Windows 8 [desktop apps | UWP apps]
- Minimum supported server Windows Server 2012 [desktop apps | UWP apps]
It had also been clearly mentioned on #9104 (comment)
Looking to the source code, I found GetCurrentThreadStackLimits
used in Zend/zend_call_stack.c
Based on https://stackoverflow.com/a/52404641 I dirtily applied the patch and now PHP 8.3.0 run fine on windows 7
diff --git "a/Zend/zend_call_stack.c" "b/Zend/zend_call_stack.c"
index 06ee521911..9fc2b570bc 100644
--- "a/Zend/zend_call_stack.c"
+++ "b/Zend/zend_call_stack.c"
@@ -376,7 +376,22 @@ static bool zend_call_stack_get_win32(zend_call_stack *stack)
* v Lower addresses v
*/
- GetCurrentThreadStackLimits(&low_limit, &high_limit);
+ static void (WINAPI* GetCurrentThreadStackLimits)(PULONG_PTR , PULONG_PTR);
+ if (!GetCurrentThreadStackLimits) {
+ *(void**)&GetCurrentThreadStackLimits = GetProcAddress(GetModuleHandle(L"kernel32"), "GetCurrentThreadStackLimits");
+ if (!GetCurrentThreadStackLimits) {
+ NT_TIB* tib = (NT_TIB*)NtCurrentTeb();
+ high_limit = (ULONG_PTR)tib->StackBase;
+ MEMORY_BASIC_INFORMATION mbi;
+ if (VirtualQuery(tib->StackLimit, &mbi, sizeof(mbi))) {
+ low_limit = (ULONG_PTR)mbi.AllocationBase;
+ }
+ } else {
+ GetCurrentThreadStackLimits(&low_limit, &high_limit);
+ }
+ } else {
+ GetCurrentThreadStackLimits(&low_limit, &high_limit);
+ }
result_size = VirtualQuery((void*)low_limit,
&uncommitted_region, sizeof(uncommitted_region));
So... Does this patch (or a corrected one as I don't really master all the elements) would make sense to ensure PHP a long life on old Windows OS ?
PHP Version
PHP 8.3.0
Operating System
Windows 7 x64