1
0
mirror of https://github.com/php/php-src.git synced 2026-04-07 16:13:32 +02:00
Commit Graph

5652 Commits

Author SHA1 Message Date
Máté Kocsis
9f4bd3040d Revert "Remove name field from the zend_constant struct (#10954)"
This reverts commit f42992f580.

Fix GH-11423
2023-07-03 15:16:24 +02:00
Dmitry Stogov
1949151935 Merge branch 'PHP-8.2'
* PHP-8.2:
  Fixed incorrect VM stack overflow checks elimination
2023-06-20 12:00:32 +03:00
Dmitry Stogov
e50ed0f1a2 Merge branch 'PHP-8.1' into PHP-8.2
* PHP-8.1:
  Fixed incorrect VM stack overflow checks elimination
2023-06-20 12:00:20 +03:00
Dmitry Stogov
1a96d64828 Fixed incorrect VM stack overflow checks elimination 2023-06-20 11:59:36 +03:00
George Peter Banyard
d5ad75108e More usage of known zend_str instead of C string (#11381) 2023-06-08 13:03:29 +01:00
nielsdos
919f27babc Merge branch 'PHP-8.2'
* PHP-8.2:
  Fix test failure for init_fcall_003.phpt without opcache
2023-06-06 20:21:57 +02:00
nielsdos
1de5c50069 Merge branch 'PHP-8.1' into PHP-8.2
* PHP-8.1:
  Fix test failure for init_fcall_003.phpt without opcache
2023-06-06 20:21:46 +02:00
nielsdos
cced0ddf9d Fix test failure for init_fcall_003.phpt without opcache
If opcache isn't loaded, then opcache_invalidate() will fail.
Reproducible when you compile PHP without opcache, or run PHP without
opcache loaded, and try to run this test.

Closes GH-11378.
2023-06-06 20:21:19 +02:00
Dmitry Stogov
376b1efa7f Merge branch 'PHP-8.2'
* PHP-8.2:
  Fixed deoptimization info for interrupt handler
2023-06-06 13:30:35 +03:00
Dmitry Stogov
724e64fbda Merge branch 'PHP-8.1' into PHP-8.2
* PHP-8.1:
  Fixed deoptimization info for interrupt handler
2023-06-06 13:30:21 +03:00
Dmitry Stogov
8f06febedf Fixed deoptimization info for interrupt handler 2023-06-06 13:29:55 +03:00
George Peter Banyard
99fa740acb Use common function for TypeError on illegal offset access (#10544)
This merges all usages of emitting an offset TypeError into a new ZEND_API function
zend_illegal_container_offset(const zend_string* container, const zval *offset, int type);

Where the container should represent the type on which the access is attempted (e.g. string, array)
The offset zval that is used, where the error message will display its type
The type of access, which should be a BP_VAR_* constant, to get special message for isset/empty/unset
2023-06-06 11:28:19 +01:00
nielsdos
1ed68686de Merge branch 'PHP-8.2'
* PHP-8.2:
  Fix DOMElement::append() and DOMElement::prepend() hierarchy checks
  Fix spec compliance error for DOMDocument::getElementsByTagNameNS
  Fix GH-11336: php still tries to unlock the shared memory ZendSem with opcache.file_cache_only=1 but it was never locked
  Fix GH-11338: SplFileInfo empty getBasename with more than one slash
2023-05-30 17:41:54 +02:00
nielsdos
0e7ad40900 Merge branch 'PHP-8.1' into PHP-8.2
* PHP-8.1:
  Fix DOMElement::append() and DOMElement::prepend() hierarchy checks
  Fix spec compliance error for DOMDocument::getElementsByTagNameNS
  Fix GH-11336: php still tries to unlock the shared memory ZendSem with opcache.file_cache_only=1 but it was never locked
  Fix GH-11338: SplFileInfo empty getBasename with more than one slash
2023-05-30 17:38:18 +02:00
Niels Dossche
9c59d22a7b Fix GH-11336: php still tries to unlock the shared memory ZendSem with opcache.file_cache_only=1 but it was never locked
I chose to check for the value of lock_file instead of checking the
file_cache_only, because it is probably a little bit faster and we're
going to access the lock_file variable anyway. It's also more generic.

Closes GH-11341.
2023-05-30 17:32:02 +02:00
Ilija Tovilo
2d86e95238 Merge branch 'PHP-8.2'
* PHP-8.2:
  Fix zend_jit_stop_counter_handlers() performance issues with protect_memory=1
2023-05-26 10:55:46 +02:00
Ilija Tovilo
5b033b0def Fix zend_jit_stop_counter_handlers() performance issues with protect_memory=1
The function repeatedly calls mprotect() which is extremely slow. In our
community build, the Laravel tests went from ~6 minutes to ~4 hours. This issue
only occurs with opcache.protect_memory=1.

Closes GH-11323
2023-05-26 10:55:11 +02:00
Ilija Tovilo
adb3d5240b Merge branch 'PHP-8.2'
* PHP-8.2:
  Access violation when ALLOC_FALLBACK fixed
2023-05-25 11:02:09 +02:00
Ilija Tovilo
5b8e941095 Merge branch 'PHP-8.1' into PHP-8.2
* PHP-8.1:
  Access violation when ALLOC_FALLBACK fixed
2023-05-25 11:01:58 +02:00
KoudelkaB
8946b7b141 Access violation when ALLOC_FALLBACK fixed
Close GH-11312
2023-05-25 11:01:17 +02:00
Ilija Tovilo
0b1d750d91 Allow arbitrary expressions in static variable initializer
Closes GH-9301
2023-05-24 20:17:31 +02:00
nielsdos
3189a9f94a Merge branch 'PHP-8.2'
* PHP-8.2:
  Fix allocation loop in zend_shared_alloc_startup()
2023-05-24 20:11:48 +02:00
nielsdos
bbcf9e7107 Merge branch 'PHP-8.1' into PHP-8.2
* PHP-8.1:
  Fix allocation loop in zend_shared_alloc_startup()
2023-05-24 20:09:56 +02:00
nielsdos
6267601f84 Fix allocation loop in zend_shared_alloc_startup()
The break is outside the if, so if it succeeds or not this will always
stop after the first loop iteration instead of trying more allocators if
the first one fails.

Closes GH-11306.
2023-05-24 20:09:14 +02:00
LoongT4o
a2af8ac371 Fix the JIT buffer relocation failure at the corner case (#11266)
Avoid missing possible candidates due to the large address range of the free segment.
Eg, 

48000000-49400000 r-xs 08000000 00:0f 39322841               segment1
7ffff2ec8000-7ffff2f49000 rw-p 00000000 00:00 0              segment2
7ffff6fae000-7ffff735c000 r-xp 00200000 08:02 11538515       /usr/local/sbin/php-fpm

original code will miss the opportunity between [7ffff2ec** - 7ffff2ec8000].

Fix issue #11265.

Signed-off-by: Long, Tao <tao.long@intel.com>
Signed-off-by: Dmitry Stogov <dmitrystogov@gmail.com>
2023-05-23 14:49:19 +03:00
nielsdos
24ff7eee3f Merge branch 'PHP-8.2'
* PHP-8.2:
  Fix GH-11245 (In some specific cases SWITCH with one default statement will cause segfault)
2023-05-23 00:36:55 +02:00
nielsdos
f6563442db Merge branch 'PHP-8.1' into PHP-8.2
* PHP-8.1:
  Fix GH-11245 (In some specific cases SWITCH with one default statement will cause segfault)
2023-05-23 00:34:33 +02:00
Niels Dossche
5cad1a7176 Fix GH-11245 (In some specific cases SWITCH with one default statement will cause segfault)
The block optimizer pass allows the use of sources of the preceding
block if the block is a follower and not a target. This causes issues
when trying to remove FREE instructions: if the source is not in the
block of the FREE, then the FREE and source are still removed. Therefore
the other successor blocks, which must consume or FREE the temporary,
will still contain the FREE opline. This opline will now refer to a
temporary that doesn't exist anymore, which most of the time results in
a crash. For these kind of non-local scenarios, we'll let the SSA
based optimizations handle those cases.

Closes GH-11251.
2023-05-23 00:33:25 +02:00
Ilija Tovilo
0600f513b3 Implement delayed early binding for classes without parents
Normally, we add classes without parents (and no interfaces or traits) directly
to the class map, early binding the class. However, if the same class has
already been registered, we would instead just add a ZEND_DECLARE_CLASS
instruction and let the handler throw a duplicate class declaration exception.

However, with opcache, if on the next request the files are included in the
opposite order, we won't perform early binding. To fix this, create a
ZEND_DECLARE_CLASS_DELAYED instruction instead and handle classes without
parents accordingly, skipping any linking for classes that are already linked in
delayed early binding.

Fixes GH-8846
2023-05-15 10:25:33 +02:00
Sara
6bd546462c Cacheline demote to improve performance (#11101)
Once code is emitted to JIT buffer, hint the hardware to
demote the corresponding cache lines to more distant level
so other CPUs can access them more quickly.
This gets nearly 1% performance gain on our workload.

Signed-off-by: Xue,Wang   <xue1.wang@intel.com>
Signed-off-by: Tao,Su     <tao.su@intel.com>
Signed-off-by: Hu,chen    <hu1.chen@intel.com>
2023-05-15 10:28:43 +03:00
Ilija Tovilo
e0af7c332d Merge branch 'PHP-8.2'
* PHP-8.2:
  Fix delayed early binding class redeclaration error
2023-05-12 19:29:27 +02:00
Ilija Tovilo
e3499130f1 Fix delayed early binding class redeclaration error
If we bind the class to the runtime slot even if we're not the ones who have
performed early binding we'll miss the redeclaration error in the
ZEND_DECLARE_CLASS_DELAYED handler.

Closes GH-11226
2023-05-12 19:29:04 +02:00
nielsdos
41cda46b70 Merge branch 'PHP-8.2'
* PHP-8.2:
  Fix too wide OR and AND range inference
2023-05-02 20:20:15 +02:00
nielsdos
e1fc246444 Merge branch 'PHP-8.1' into PHP-8.2
* PHP-8.1:
  Fix too wide OR and AND range inference
2023-05-02 20:18:05 +02:00
nielsdos
fbf5216ca0 Fix too wide OR and AND range inference
There is a typo which causes the AND and OR range inference to infer a
wider range than necessary. Fix this typo. There are many ranges for
which the inference is too wide, I just picked one for AND and one for
OR that I found through symbolic execution.

In this example test, the previous range inferred for test_or was [-27..-1]
instead of [-20..-1].
And the previous range inferred for test_and was [-32..-25]
instead of [-28..-25].

Closes GH-11170.
2023-05-02 20:08:59 +02:00
Dmitry Stogov
56d1cc7842 Merge branch 'PHP-8.2'
* PHP-8.2:
  Fixed GH-11127 (JIT fault)
2023-05-02 20:33:34 +03:00
Dmitry Stogov
c155949905 Merge branch 'PHP-8.1' into PHP-8.2
* PHP-8.1:
  Fixed GH-11127 (JIT fault)
2023-05-02 20:33:19 +03:00
Dmitry Stogov
ed0b593c11 Fixed GH-11127 (JIT fault)
* Fixed GH-11127 (JIT fault)

* Added test

* Add new line
2023-05-02 20:32:48 +03:00
Sara
0e5ac62f4e Add configuration opcache.jit_max_trace_length (#11173)
Max length of a single trace. A long trace generates long JITTed
code, which influences the performance slightly.
opcache.jit_max_trace_length range is [4,1024], the default value
is 1024.


Reviewed-by:   Su, Tao   <tao.su@intel.com>

Signed-off-by: Wang, Xue <xue1.wang@intel.com>
2023-05-02 18:47:13 +03:00
yang yuhan
f127e6581a JIT: Align JIT stubs (#11149)
Fixed phpGH-11120

Signed-off-by: PeterYang12 <yuhan.yang@intel.com>
2023-05-02 12:34:49 +03:00
Dmitry Stogov
f0122664fe Merge branch 'PHP-8.2'
* PHP-8.2:
  JIT: Fixed inaccurate range inference usage for UNDEF/NULL/FALSE
2023-05-02 12:04:11 +03:00
Dmitry Stogov
7e50735140 Merge branch 'PHP-8.1' into PHP-8.2
* PHP-8.1:
  JIT: Fixed inaccurate range inference usage for UNDEF/NULL/FALSE
2023-05-02 12:04:03 +03:00
Dmitry Stogov
25ad171f63 JIT: Fixed inaccurate range inference usage for UNDEF/NULL/FALSE
Fixes oss-fuzz #58459
2023-05-02 12:02:20 +03:00
nielsdos
56f916e703 Merge branch 'PHP-8.2'
* PHP-8.2:
  Set error_log to an empty value if the test relies on that feature
2023-04-24 23:25:27 +02:00
nielsdos
7300659391 Merge branch 'PHP-8.1' into PHP-8.2
* PHP-8.1:
  Set error_log to an empty value if the test relies on that feature
2023-04-24 23:23:45 +02:00
Niels Dossche
691ff9f845 Set error_log to an empty value if the test relies on that feature
Some tests fail if the error_log is overriden by the loaded ini
configuration. Explicitly set it to an empty value to prevent the
failures.
See https://github.com/php/php-src/issues/10737#issuecomment-1452899299

Closes GH-10772.
2023-04-24 23:19:15 +02:00
Máté Kocsis
414f71a902 Typed class constants (#10444)
RFC: https://wiki.php.net/rfc/typed_class_constants

Co-Authored-By: Ben <7127204+moliata@users.noreply.github.com>
Co-Authored-By: Bob Weinand <3154871+bwoebi@users.noreply.github.com>
Co-Authored-By: Ilija Tovilo <ilija.tovilo@me.com>
2023-04-16 22:20:26 +02:00
Dmitry Stogov
0660fb5282 Merge branch 'PHP-8.2'
* PHP-8.2:
  Allow FETCH_OBJ_W and FETCH_STATIC_PROP_W to return INDIRECT/UNDEF zval for uninitialized typed properties (#11048)
2023-04-10 23:25:42 +03:00
Dmitry Stogov
e14ac1caee Merge branch 'PHP-8.1' into PHP-8.2
* PHP-8.1:
  Allow FETCH_OBJ_W and FETCH_STATIC_PROP_W to return INDIRECT/UNDEF zval for uninitialized typed properties (#11048)
2023-04-10 23:25:08 +03:00
Dmitry Stogov
0c65b396d6 Allow FETCH_OBJ_W and FETCH_STATIC_PROP_W to return INDIRECT/UNDEF zval for uninitialized typed properties (#11048) 2023-04-10 23:19:17 +03:00