Bug #70360 [Opn]: Segmentation fault for every request
| From: | nikic@php.net | Date: | Mon, 26 Oct 2015 21:14:03 +0000 |
| Subject: | Bug #70360 [Opn]: Segmentation fault for every request | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-196830@lists.php.net to get a copy of this message | ||
Edit report at https://bugs.php.net/bug.php?id=70360&edit=1
ID: 70360
Updated by: nikic@php.net
Reported by: atippett at gmail dot com
Summary: Segmentation fault for every request
Status: Open
Type: Bug
Package: opcache
Operating System: Linux fenrir 3.16.0-4-amd64 #1
PHP Version: 5.6.12
Block user comment: N
Private report: N
New Comment:
As this issue is caused by pass 1_5 and happens in gc_remove_from_buffer() this may be the same
issue as https://bugs.php.net/bug.php?id=70601.
Could you check if 5.6.15RC1 (or 5.6-dev) resolves this issue?
Previous Comments:
------------------------------------------------------------------------
[2015-09-30 15:59:06] aliis dot jh at gmail dot com
Thanks nikic, we've now tested incrementally in the range:
opcache.optimization_level = [0xfffffff0 - 0xffffffff]
All, but the last bit flag work without segfaulting, i.e.,
opcache.optimization_level = [0xfffffff0 - 0xfffffffe] (OK - No Segfaults)
This is equiv:
[0b0000 0000 1111 1111 1111 1111 1111 1111 1111 0000]
to
[0b0000 0000 1111 1111 1111 1111 1111 1111 1111 1110]
Likewise, incrementing from other direction:
0x00000001 - FAIL (segfaults)
0x00000002 - PASS (segfaults)
0x00000003 - FAIL (segfaults)
...
for all bitmasks containing / including the first bit 0x0...1
So only the pass for bit flag: 0x00000001 is causing segfaults.
Any thoughts or solutions for fixing this issue would be greatly appreciated.
------------------------------------------------------------------------
[2015-09-04 10:01:16] nikic@php.net
@aliis: 0xf == 0b1111, so this will enable the first four passes (which is pass 1_5, pass 2 and pass
3 in practice). To further narrow this down you can try 0x1, 0x2 and 0x4.
------------------------------------------------------------------------
[2015-09-04 08:37:09] aliis dot jh at gmail dot com
After further testing on fenrir, we have that all bitmask settings for:
opcache.optimization_level do NOT produce segfaults EXCEPT the first bit.
Working: 0xXXXXXXXX0 // where 'X'=f|0
Segfault: 0xXXXXXXXXf // where 'X'=f|0
So only combinations of bit flags with the first bit enabled result in segfaults, all other
combinations work fine.
From reference, I believe this is the flag for pass 1, operations:
* - substitute persistent constants (true, false, null, etc)
* - perform compile-time evaluation of constant binary and unary operations
* - optimize series of ADD_STRING and/or ADD_CHAR
* - convert CAST(IS_BOOL,x) into BOOL(x)
* - convert INTI_FCALL_BY_NAME + DO_FCALL_BY_NAME into DO_FCALL
Reference:
http://stackoverflow.com/questions/21181045/php-opcache-optimization-levels-what-are-they
https://github.com/zendtech/ZendOptimizerPlus/blob/master/Optimizer/zend_optimizer.c
------------------------------------------------------------------------
[2015-09-04 07:14:42] aliis dot jh at gmail dot com
After updating fenrir to opcache: Zend OPcache v7.0.6-dev
We're still getting segfaults with the php.ini setting:
opcache.optimization_level=0xffffffff
As soon as we set opcache.optimization_level=0 the segfaults stop.
------------------------------------------------------------------------
[2015-08-28 18:17:56] atippett at gmail dot com
I believe this might be related to https://bugs.php.net/bug.php?id=69549 I'll
run some tests tonight with the updated version of php on fenrir.
------------------------------------------------------------------------
The remainder of the comments for this report are too long. To view
the rest of the comments, please view the bug report online at
https://bugs.php.net/bug.php?id=70360
--
Edit this bug report at https://bugs.php.net/bug.php?id=70360&edit=1