Commit Graph

9651 Commits

Author SHA1 Message Date
Anatol Belski
f4311686cc Merge branch 'PHP-5.6'
* PHP-5.6:
  updated NEWS
  Fixed bug #68583 Crash in timeout thread

Conflicts:
	Zend/zend_execute.h
	Zend/zend_execute_API.c
2014-12-12 13:26:17 +01:00
Anatol Belski
c96ffaa653 Merge branch 'PHP-5.5' into PHP-5.6
* PHP-5.5:
  Fixed bug #68583 Crash in timeout thread

Conflicts:
	Zend/zend_execute.h
2014-12-12 12:05:47 +01:00
Gustavo Frederico Temple Pedrosa
5dbeb9e65e PowerPC64 support for add and sub with overflow check
This adds fast architecture-specific implementations of the
following functions for the ppc64:

* fast_add_function
* fast_sub_function
2014-12-12 10:47:54 +01:00
Gustavo Frederico Temple Pedrosa
fd045c7021 PowerPC64 support for operators with overflow check
This adds fast architecture-specific implementations of
the following functions for the ppc64:

* fast_increment_function
* fast_decrement_function
2014-12-12 10:47:50 +01:00
Anatol Belski
3affc0e8a2 Fixed bug #68583 Crash in timeout thread
This replaces the GUI element used for execution timeout handling
on Windows. Instead a timer queue technique is used, which is indeed
a thread pool. A timer queue timer is a lightweight object handled
but that thread pool and the timer thread spends most of the time
sleeping and waiting for an alert.

Please note also that this introduces neither binary nor source
breach. The custom timeout thread functions are deleted, however
they was not exported throug DLL, so couldn't be used by any
external code. As well they couldn't be used anywhere in the core
except in executor api, because those custom timeout thread
functions they used to operate on static variables which would
be overwritten (and that would blow).

So instead a relatively modern technique is used for the timeout
handling. It's still not perfect because the executor still has to
check EX(timed_out). This can be a topic for an improvement in
master. But brobably can be tricky as currently it seems to be not
possible to signal an individual thread. Also note another issue
that static variables aren't thread safe, but the current timer
implementation is.
2014-12-12 10:43:31 +01:00
Dmitry Stogov
14e29f5146 Reduced size of zend_op on 64-bit systems.
the main idea - the smaller the zend_op structure, the lees memory traffic is required to load VM instructions during execution. The patch reduces the size of each opcode from 48 to 32 bytes (saves 16 bytes for each opcode, and applications use thousands of opoceds). This reduced the number of CPU cache misses by 12% and improved performance of real-life apps by 1-2%.

The patch affects how constants and jump targets are represented in VM during execution. Previously they were implemented as absolute 64-bit pointers. Now they are relative 32-bit offsets.

In run-time constant now should be accessed as:
  RT_CONSTANT(op_array, opine->op1) instead of opline->op1.zv
  EX_CONSTANT(opline->op1) instead of opline->op1.zv

Jump targets:
  OP_JMP_ADDR(opline, opline->op2) instead of opline->op2.jmp_addr

The patch doesn't change zend_op representation for 32-bit systems. They still use absolute addresses. The compile-time representation is also kept the same.
2014-12-12 10:19:41 +03:00
Dmitry Stogov
9ea35a37b9 Make ZEND_INIT_FCALL keep predcalculted size of necessary stack space in opline->op1.num to avoid its recalculation on each execution. 2014-12-12 09:01:42 +03:00
Dmitry Stogov
2ea5f7aea4 Removed unused variables 2014-12-12 08:09:42 +03:00
Dmitry Stogov
73458e8f19 Replaced zendi_convert_to_long() with _zval_get_long_func() 2014-12-11 15:01:06 +03:00
Dmitry Stogov
27dc5986df Moved zend_is_true() from zend_execute.h/zend_execute_API.c into zend_operators.h/zend_operators.c.
Splited the most expensive part of inline i_zend_is_true() into a separate zend_object_is_true().
Replaced zendi_convert_to_long() with cals to zend_is_true().
2014-12-11 13:18:40 +03:00
Xinchen Hui
634448e2de Revert "Save one xor instr"
This reverts commit bd5c5d3729.
2014-12-11 03:19:33 -05:00
Xinchen Hui
882741639c Merge branch 'master' of https://git.php.net/repository/php-src 2014-12-11 00:03:45 -05:00
Xinchen Hui
bd5c5d3729 Save one xor instr 2014-12-11 00:03:31 -05:00
Anatol Belski
da78550006 fix TS build and C89 compat 2014-12-10 12:23:46 +01:00
Dmitry Stogov
2f3c79b4bf Improved basic zval copying primitives: ZVAL_COPY_VALUE(), ZVAL_COPY(), ZVAL_DUP() 2014-12-09 18:07:39 +03:00
Dmitry Stogov
29b9105beb Wrap RETURN_VALUE_USED() with EXPECTED() or UNEXPECTED() macros according to more frequent usage patterns. 2014-12-09 17:07:12 +03:00
Dmitry Stogov
5b3a69c29f Improved ASSIGN_<OP>, ASSIGN_DIM and UNSET_DIM 2014-12-09 15:15:24 +03:00
Dmitry Stogov
98e81e13cf simplified code 2014-12-09 12:17:55 +03:00
Dmitry Stogov
0b19a7c235 Move ZVAL_DEREF() and make_real_object() into slow paths. 2014-12-09 03:05:06 +03:00
Dmitry Stogov
f70545678b Pass znode_op structure by value (it fits into one word) instead of pointer to structure. 2014-12-09 03:03:38 +03:00
Dmitry Stogov
11f7854e75 Move checks for references into slow paths. 2014-12-09 01:09:44 +03:00
Dmitry Stogov
b6c6e7960a Improved ASSIGN_DIM and ASSIGN_OBJ 2014-12-09 00:10:23 +03:00
Dmitry Stogov
0bfc9c6979 Fixed typo 2014-12-08 18:40:37 +03:00
Dmitry Stogov
db4271d332 Move checks for references into slow paths of handlers or helpers. Remove duplicate opcode handlers. 2014-12-08 18:11:14 +03:00
Nikita Popov
c6d0c55a23 Fix arrow operator precedence
I accidentially added => as the highest-precedence operator...
2014-12-07 23:00:48 +01:00
Dmitry Stogov
a555bdf7d1 Removed useless handlers 2014-12-06 03:03:48 +03:00
Dmitry Stogov
5ba4ae7f67 Move checks for references into slow paths of operator functions. Remove duplicate opcode handlers. 2014-12-06 02:14:45 +03:00
Andrea Faulds
90d916c4b1 Zend Engine 3 2014-12-05 19:46:30 +00:00
Dmitry Stogov
8ab9396adf Get rid of few more duplicate handlers 2014-12-05 18:23:39 +03:00
Dmitry Stogov
e6180ebb64 Improved BOOL, BOOL_NOT and conditional jumps 2014-12-05 17:04:15 +03:00
Dmitry Stogov
62867f008d Improved ECHO and PRINT 2014-12-05 15:07:49 +03:00
Dmitry Stogov
a417ebfc48 Get rid of duplicare FETCH_DIM_* handlers 2014-12-05 13:45:03 +03:00
Dmitry Stogov
c7f695f311 Get rid of duplicate handlers (where the code for IS_TMP_VAR and IS_VAR operands is the same) 2014-12-05 12:40:47 +03:00
Xinchen Hui
2d89574b58 Make it const as Levi asked for 2014-12-05 12:11:13 +08:00
Michael Wallner
f0a17c293b Fix zend_fcall_info_arg*() to use ZVAL_COPY
As zend_fcall_info_args_clear() calls zval_ptr_dtor() we also have
to increase the refcount of refcounted zvals added as params,
like it is already done in zend_fcall_info_args_ex().
2014-12-04 13:02:30 +01:00
Anatol Belski
e04971ce21 fix TS build 2014-12-03 19:50:02 +01:00
Anatol Belski
463c615dfe Merge branch 'PHP-5.6'
* PHP-5.6:
  updated NEWS
  updated NEWS
  Fixed bug #55541 errors spawn MessageBox, which blocks test automation
2014-12-03 16:49:13 +01:00
Anatol Belski
f3b4c05423 Merge branch 'PHP-5.5' into PHP-5.6
* PHP-5.5:
  updated NEWS
  Fixed bug #55541 errors spawn MessageBox, which blocks test automation
2014-12-03 16:48:07 +01:00
Anatol Belski
65fce7f950 Fixed bug #55541 errors spawn MessageBox, which blocks test automation
With that, also fixed bug #68297 (Application Popup provides too few
information) as a better error message is provided to the event log.

In the second case, the condition for display_startup_error was removed. The
condition was added as a fix for bug #30760 which was preventing the
MessageBox to appear. When display_startup_error=on, the error will be seen
on the console. But when running under a webserver it'll probably get lost,
so we need to log it other way into the event log (would be done automatically
when message box was used, but that would eventually cause issues of blocked
execution).

Generally speaking - any MessageBox or other graphical element is a potential
issue and that was repeatedly reported. Graphical elements shouldn't be used
in the core. Even being a rare one it can cause a bad situation where the
server is blocked. Yet some places have to cleaned up.
2014-12-03 16:33:05 +01:00
Dmitry Stogov
e5716d1b5a Get rid of duplicate handlers (ZEND_ADD_SPEC_TMP_TMP and ZEND_ADD_SPEC_VAR_VAR are absolutely the same). 2014-12-03 18:02:02 +03:00
Dmitry Stogov
5dd427eac2 Use zend_string* for op_array->arg_info[]->name and op_array->arg_info[]->class_name. For internal functions we still use char*. 2014-12-03 16:56:09 +03:00
Dmitry Stogov
631f05f71e Improved POST INC/DEC 2014-12-03 02:47:03 +03:00
Xinchen Hui
1ad5d8d9e7 Merge branch 'master' of https://git.php.net/repository/php-src 2014-12-02 22:21:35 +08:00
Xinchen Hui
5f80df0dbe Missed closed folder mark 2014-12-02 22:21:19 +08:00
Dmitry Stogov
569d8646c0 Revert "Unecessary assignment"
This reverts commit b19333663a.
2014-12-02 16:47:26 +03:00
Dmitry Stogov
072dd32075 Merge branch 'master' of git.php.net:php-src
* 'master' of git.php.net:php-src:
  Unecessary assignment
2014-12-02 16:29:54 +03:00
Dmitry Stogov
9e27a69c2f Fixed improper memory release 2014-12-02 16:29:13 +03:00
Xinchen Hui
e031f212b2 Merge branch 'master' of https://git.php.net/repository/php-src 2014-12-02 21:24:00 +08:00
Xinchen Hui
b19333663a Unecessary assignment 2014-12-02 21:23:39 +08:00
Dmitry Stogov
1982bce1a8 Support for different CPU page sizes 2014-12-02 16:17:26 +03:00