php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #75854 The mistake occurs when php7 executes as by command line as by webserver.
Submitted: 2018-01-21 19:12 UTC Modified: 2018-01-31 19:34 UTC
From: shamardin74 at rambler dot ru Assigned:
Status: Wont fix Package: Performance problem
PHP Version: 7.0.27 OS: Windows 7 (32 bit)
Private report: No CVE-ID: None
 [2018-01-21 19:12 UTC] shamardin74 at rambler dot ru
Description:
------------
 The name of the event of the problem: APPCRASH;
 The name of application: php.exe; (also httpd.exe)
 The version of application: 7.0.27.0;
 The name of the module with mistake: php7ts.dll;
 The version of the module with mistake: 7.0.27.0;
 The code of the exception: c000001d;
 The offset of the exception: 000dd820;
 The version OS: 6.1 (Windows 7 x86)
This mistake occurs when php executes in command line (php -i; php -v), so and when executes by apache web-server. In case of "php -?" available options list are displayed.


Patches

Pull Requests

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2018-01-22 12:01 UTC] ab@php.net
-Status: Open +Status: Feedback
 [2018-01-22 12:01 UTC] ab@php.net
Thank you for this bug report. To properly diagnose the problem, we
need a backtrace to see what is happening behind the scenes. To
find out how to generate a backtrace, please read
http://bugs.php.net/bugs-generating-backtrace.php for *NIX and
http://bugs.php.net/bugs-generating-backtrace-win32.php for Win32

Once you have generated a backtrace, please submit it to this bug
report and change the status back to "Open". Thank you for helping
us make PHP better.

Also, is some reproduce script available?

Thanks.
 [2018-01-24 12:32 UTC] shamardin74 at rambler dot ru
-Status: Feedback +Status: Open
 [2018-01-24 12:32 UTC] shamardin74 at rambler dot ru
When run php-7.0.27 on windows 7 32-bit occurs the error in module php7ts.dll. This occurs in step of initialization of application.

call_stack:
-> php7ts.dll!sapi_activate()  line 457 + 0x11 bytes
   php7ts.dll!php_module_startup(_sapi_module_struct * sf, _zend_module_entry * additional_modules, unsigned int num_additional_modules)  line 2072
   php.exe!php_cli_startup(_sapi_module_struct * sapi_module)  line 426 + 0xe bytes
   php.exe!main(int argc, char * * argv)  line 1327 + 0x2 bytes
   php.exe!__scrt_common_main_seh()  line 253 + 0x1d bytes
   kernel32.dll!775aed6c()
   [Specified below frames can be invalid and (or) be absent, symbols for kernel32.dll not loaded]
   ntdll.dll!77b637eb()
   ntdll.dll!77b637be()

disassembled_source:
      456: 	SG(request_info).proto_num = 1000; /* Default to HTTP 1.0 */
   6A0B8E8D 8B 47 04             mov         eax,dword ptr [edi+4]
   6A0B8E90 8B 08                mov         ecx,dword ptr [eax]
   6A0B8E92 A1 58 DB 78 6A       mov         eax,dword ptr [_sapi_globals_id (6A78DB58h)]
   6A0B8E97 8B 44 81 FC          mov         eax,dword ptr [ecx+eax*4-4]
   6A0B8E9B C7 40 50 E8 03 00 00 mov         dword ptr [eax+50h],3E8h
      457: 	SG(global_request_time) = 0;
   6A0B8EA2 8B 47 04             mov         eax,dword ptr [edi+4]
   6A0B8EA5 8B 08                mov         ecx,dword ptr [eax]
   6A0B8EA7 0F 57 C0             xorps       xmm0,xmm0
   6A0B8EAA A1 58 DB 78 6A       mov         eax,dword ptr [_sapi_globals_id (6A78DB58h)]
   6A0B8EAF 8B 44 81 FC          mov         eax,dword ptr [ecx+eax*4-4]
-> 6A0B8EB3 F2 0F 11 80 C8 00 00 00 movsd       mmword ptr [eax+0C8h],xmm0
      458: 	SG(post_read) = 0;
   6A0B8EBB 8B 47 04             mov         eax,dword ptr [edi+4]
   6A0B8EBE 8B 08                mov         ecx,dword ptr [eax]
   6A0B8EC0 A1 58 DB 78 6A       mov         eax,dword ptr [_sapi_globals_id (6A78DB58h)]
   6A0B8EC5 8B 44 81 FC          mov         eax,dword ptr [ecx+eax*4-4]
   6A0B8EC9 88 98 88 00 00 00    mov         byte ptr [eax+88h],bl
      459: 	/* It's possible to override this general case in the activate() callback, if necessary. */
      460: 	if (SG(request_info).request_method && !strcmp(SG(request_info).request_method, "HEAD")) {

registers_content: (intel)
   eax	0x0021afa0
   ebx	0x00000000
   ecx	0x00212560
   edx	0x00212c30
   esi	0x00d95020
   edi	0x00212c30
   mm0	0x0000000000000000
   mm1	0x0000000000000000
   mm2	0x0000000000000000

Perhaps that is instruction SSE2 which is not supported by 32-bit processor.
 [2018-01-25 09:32 UTC] ab@php.net
Thanks for more info! If the processor is older than Pentium 4 or alike, then it's the movsd instruction for sure. Please check with https://docs.microsoft.com/en-us/sysinternals/downloads/coreinfo or any other suitable tool for more clarity.

The 32-bit builds supplied by windows.php.net already default to SSE2 starting with PHP 5.5 actually. No much issues was seen since then, however. If it's confirmed to be a pre SSE2 processor, then i'd say it's a won't fix case. I it won't be able to run many other binaries produced last couple of years.

Thanks.
 [2018-01-27 03:22 UTC] mattficken@php.net
I test all php releases across Win7+, but all my hardware has SSE2 support (most are SSE4) so I can't reproduce this issue.

PHP 7.0+ requires VC14. AFAIR VC14 requires SSE2, therefore supporting pre-SSE2 would be really hard. 

PHP 7.0+ requires Win7. While Win7 doesn't require SSE2, Win7 isn't supported anymore, so fixing the issue for the few pre-SSE2 Win7 machines would still result in an unsupported situation anyway. 

Provided this issue is just not having SSE2 support, this issue should be closed as a `dont fix`. Maybe try PHP 5.6 or 5.5. Its not supported, but then neither is Win7 and probably other apps on that machine.
 [2018-01-29 17:42 UTC] ab@php.net
-Status: Open +Status: Wont fix
 [2018-01-29 17:42 UTC] ab@php.net
Ok, setting to won't fix now. As SSE2 builds are default for long already, suddenly changing the build options would sure show performance impacts to existing apps. Also, in the light of the latest security vulnerabilities regarding Meltdown and Spectre, the mitigation requires SSE2.

Thanks.
 [2018-01-31 19:34 UTC] ab@php.net
@shamardin74 just in the case you want to build yourself, what you could do perhaps is to patch the CFLAGS. What you basically want is as per

https://msdn.microsoft.com/en-us/library/7t5yh4fd.aspx

either /arch:IA32 or /arch:SSE, depending on your old CPU capabilities. You can do that directly in the Makefile, after the configure script is run. Though, please note, that you'll eventually need to rebuild all the dependencies required, as the dependencies are likely to contain SSE2 instructions, too.

Thanks.
 
PHP Copyright © 2001-2024 The PHP Group
All rights reserved.
Last updated: Thu Oct 31 23:01:28 2024 UTC