1
0
mirror of https://github.com/php/php-src.git synced 2026-04-21 15:08:16 +02:00
Commit Graph

1691 Commits

Author SHA1 Message Date
David CARLIER 1416961505 opcache JIT support improvements attempts on macOs.
for cases when shared segments switch b/w R/W/X and R/X bits.

Closes #8382.
2022-07-19 13:41:33 +01:00
David CARLIER f6aa7a4960 [ci skip] Follow-up on #8914, usage comments addition. 2022-07-18 13:28:04 +01:00
Arnaud Le Blanc 02a0a8ae26 Merge branch 'PHP-8.1'
* PHP-8.1:
  [ci skip] NEWS
  Fix JIT crash with large number of match/switch arms (#8961)
2022-07-18 12:36:13 +02:00
Arnaud Le Blanc f2381ae4ba Fix JIT crash with large number of match/switch arms (#8961)
Switch statements may generate a large number of exit points. Once the max
number of exit points is reached, get_exit_addr() returns NULL. This was not
checked, and this resulted in a jump table with some 0 addresses.
2022-07-18 12:34:20 +02:00
David CARLIER c56e183226 opcache JIT: Adds initial support for macOs Instruments performance measurement.
By default, it is based on the perf_event Linux api, here
we add the proprietary Apple's format using directly its api.

Closes #8914.
2022-07-15 14:27:07 +01:00
Dmitry Stogov e01586ac4f Merge branch 'PHP-8.1'
* PHP-8.1:
  Fix incorrect condition introdused in 7cf6f17383
2022-06-29 13:09:22 +03:00
Dmitry Stogov af75eab0ef Merge branch 'PHP-8.0' into PHP-8.1
* PHP-8.0:
  Fix incorrect condition introdused in 7cf6f17383
2022-06-29 13:09:14 +03:00
Dmitry Stogov d66d477d6f Fix incorrect condition introdused in 7cf6f17383 2022-06-29 13:08:18 +03:00
Dmitry Stogov 7e32033331 Merge branch 'PHP-8.1'
* PHP-8.1:
  Fixed bug GH-8847 (PHP hanging infinitly at 100% cpu when check php syntaxe of a valid file)
2022-06-29 12:16:20 +03:00
Dmitry Stogov b7693360cb Merge branch 'PHP-8.0' into PHP-8.1
* PHP-8.0:
  Fixed bug GH-8847 (PHP hanging infinitly at 100% cpu when check php syntaxe of a valid file)
2022-06-29 12:13:03 +03:00
Dmitry Stogov 7cf6f17383 Fixed bug GH-8847 (PHP hanging infinitly at 100% cpu when check php syntaxe of a valid file) 2022-06-29 12:10:46 +03:00
Chen, Hu d8de067b0f JIT: Add IBT support (#8774)
Indirect Branch Tracking (IBT) is part of Intel's Control-Flow
Enforcement Technology (CET). IBT is hardware based, forward edge
Control-Flow-Integrity mechanism where any indirect CALL/JMP must target
an ENDBR instruction or suffer #CP.

This commit adds IBT support for JIT:
1. Add endbr32/64 instruction in Dynasm.
2. Insert endbr32/64 in indirect branch target for jitted code.

gcc support CET since v8.1 and set it to default since gcc 11. With this
commit, endbr is inserted in jitted code if PHP is compiled with "gcc
-fcf-protection=full/branch".

Signed-off-by: Chen, Hu <hu1.chen@intel.com>
2022-06-28 08:42:19 +03:00
Dmitry Stogov 7e23c838e2 Fixed Bug GH-8863: RW operation on readonly property doesn't throw with JIT 2022-06-27 16:41:53 +03:00
Dmitry Stogov ad40fffd36 Fixed Bug GH-8863: RW operation on readonly property doesn't throw with JIT 2022-06-27 14:25:30 +03:00
Max Kellermann e67565f54c Zend, ext/opcache: use PR_SET_VMA_ANON_NAME (Linux 5.17) (#8234)
The new Linux 5.17 feature PR_SET_VMA_ANON_NAME can give names to
anonymous private memory, see:

 https://lwn.net/Articles/867818/

It can be useful while debugging, to identify which portion of the
process's memory belongs to which subsystem.

This is how /proc/PID/maps can look like:

 555ccd400000-555ccdc00000 r-xp 00000000 00:00 0                          [anon:huge_code_pages]
 7f6ec6600000-7f6ec6800000 rw-p 00000000 00:00 0                          [anon:zend_alloc]

The first mapping is the PHP executable copied to anonymous memory by
option "opcache.huge_code_pages".  The second one is a memory area for
the "zend_alloc.h" memory allocator library.

Unfortunately, it is not possible to give names to shared memory
(MAP_SHARED),  because Linux MAP_SHARED really maps /dev/zero (see
shmem_zero_setup()), which makes madvise_vma_anon_name() believe this
is a file mapping, failing the prctl() with EBADF.
2022-06-20 12:27:01 +01:00
Dmitry Stogov 3e128eecaa Merge branch 'PHP-8.1'
* PHP-8.1:
  JIT: Fix incorrect reference-counting
2022-06-14 15:04:55 +03:00
Dmitry Stogov 971b07ea60 JIT: Fix incorrect reference-counting
This fixes oss-fuzz #47937
2022-06-14 15:03:50 +03:00
Dmitry Stogov 187319b257 Merge branch 'PHP-8.1'
* PHP-8.1:
  JIT: Fix missing register store
2022-06-14 13:59:55 +03:00
Dmitry Stogov 70e0e1ada6 Merge branch 'PHP-8.0' into PHP-8.1
* PHP-8.0:
  JIT: Fix missing register store
2022-06-14 13:59:47 +03:00
Dmitry Stogov 1cd8074743 JIT: Fix missing register store
This fixes oss-fuzz #48023
2022-06-14 13:57:44 +03:00
George Peter Banyard b40ae80804 Convert iterable into an internal alias for Traversable|array (#7309)
This does a compile time transformation of ``iterable`` into ``Traversable|array`` which simplifies some of the LSP variance handling.

The arginfo generation script from stubs is updated to produce a union type when it encounters the type ``iterable``
Extension functions which do not regenerate the arginfo, or write them manually are still supported by mimicking the compile time transformation while registering the function.

Type Reflection is preserved for single ``iterable`` (and ``?iterable``) to produce a ReflectionNamedType with name ``iterable``, however usage of ``iterable`` in union types will be converted to ``array|Traversable``
2022-06-07 13:35:34 +01:00
Ilija Tovilo 3f557ebd77 Revert "JIT: Add IBT support (#8636)"
This reverts commit c1fcd45eeb.

Closes GH-8711
2022-06-06 11:59:26 +02:00
Levi Morrison 280fd680c8 Make vm_interrupt and timed_out atomic (#8327)
This is done by adding a new zend_atomic_bool type. The type
definition is only available for compiler alignment and size info; it
should be treated as opaque and only the zend_atomic_bool_* family of
functions should be used.

Note that directly using atomic_bool is complicated. All C++ compilers
stdlibs that I checked typedef atomic_bool to std::atomic<bool>, which
can't be used in an extern "C" section, and there's at least one usage
of this in core, and probably more outside of it.

So, instead use platform specific functions, preferring compiler
intrinsics.
2022-06-01 09:43:25 -06:00
Chen, Hu c1fcd45eeb JIT: Add IBT support (#8636)
Indirect Branch Tracking (IBT) is part of Intel's Control-Flow
Enforcement Technology (CET). IBT is hardware based, forward edge
Control-Flow-Integrity mechanism where any indirect CALL/JMP must target
an ENDBR instruction or suffer #CP.

This commit adds IBT support for JIT:
1. Add endbr32/64 instruction in Dynasm.
2. Insert endbr32/64 in indirect branch target for jitted code.

gcc support CET since v8.1 and set it to default since gcc 11. With this
commit, endbr is inserted in jitted code if PHP is compiled with "gcc
-fcf-protection=full/branch".

Signed-off-by: Chen, Hu <hu1.chen@intel.com>
2022-05-31 09:29:40 +03:00
Dmitry Stogov e2e2d29973 Merge branch 'PHP-8.1'
* PHP-8.1:
  Fix memory leak
2022-05-30 11:39:24 +03:00
Dmitry Stogov 7ebda198ea Merge branch 'PHP-8.0' into PHP-8.1
* PHP-8.0:
  Fix memory leak
2022-05-30 11:39:10 +03:00
Dmitry Stogov 3a8912fb7c Fix memory leak
This fixes oss-fuzz #47648
2022-05-30 11:32:17 +03:00
Arnaud Le Blanc 2f78af397c Merge branch 'PHP-8.1'
* PHP-8.1:
  [ci skip] NEWS
  Add JIT guards for INIT_METHOD_CALL when the method may be modified (#8600)
2022-05-27 13:19:31 +02:00
Arnaud Le Blanc 69d263e2a1 Add JIT guards for INIT_METHOD_CALL when the method may be modified (#8600)
Non-polymorphic methods can be modified from one request to an other due to recompilation or conditional declaration.

Fixes GH-8591

Co-authored-by: Oleg Stepanischev <Oleg.Stepanischev@tatar.ru>
2022-05-27 13:15:15 +02:00
Christoph M. Becker 06c3f9b043 Use proper cast
Casting to `void**` silences the compiler, but only works because that
is dereferenced to a generic `void*`.
2022-05-24 14:52:32 +02:00
Michael Voříšek fb1c7eff04 Fix some level 1 MSVC compiler warnings on x86
See GH-8479.
2022-05-24 13:05:16 +02:00
Dmitry Stogov f9483708c7 Merge branch 'PHP-8.1'
* PHP-8.1:
  Add JIT guards for INIT_FCALL instructions and functions that may be modified
2022-05-12 18:46:12 +03:00
Dmitry Stogov 6c25413183 Add JIT guards for INIT_FCALL instructions and functions that may be modified
For methods we reuse mechanism of polymorphic calls.
For regular function we invalidate the whole root trace.

This fixes https://github.com/php/php-src/issues/8461
2022-05-12 18:44:12 +03:00
Dmitry Stogov dc374a0b22 Merge branch 'PHP-8.1'
* PHP-8.1:
  JIT: Fixed incorrect guard
2022-04-18 11:35:08 +03:00
Dmitry Stogov c3a30544ad JIT: Fixed incorrect guard
Fixes oss-fuzz #46704
2022-04-18 11:34:18 +03:00
Dmitry Stogov 106c908db5 Merge branch 'PHP-8.1'
* PHP-8.1:
  JIT: Fix memory lek
2022-04-11 12:21:09 +03:00
Dmitry Stogov 8633893330 Merge branch 'PHP-8.0' into PHP-8.1
* PHP-8.0:
  JIT: Fix memory lek
2022-04-11 12:21:02 +03:00
Dmitry Stogov 3aaf2f6f89 JIT: Fix memory lek
Fixes oss-fuzz #46462
2022-04-11 12:17:05 +03:00
Dmitry Stogov ccef2bc435 Merge branch 'PHP-8.1'
* PHP-8.1:
  Tracing JIT: Fixed incorrect assumption about stack slot type
2022-04-11 11:45:32 +03:00
Dmitry Stogov 69bcd93190 Merge branch 'PHP-8.0' into PHP-8.1
* PHP-8.0:
  Tracing JIT: Fixed incorrect assumption about stack slot type
2022-04-11 11:42:56 +03:00
Dmitry Stogov 5b048dd05c Tracing JIT: Fixed incorrect assumption about stack slot type
Fixes oss-fuzz #46404
2022-04-11 11:42:01 +03:00
Dmitry Stogov db34e2a68e Merge branch 'PHP-8.1'
* PHP-8.1:
  Trcing JIT: remove unchecked type guards om ROPE_* instructions
2022-04-04 15:08:01 +03:00
Dmitry Stogov 33704be5f2 Trcing JIT: remove unchecked type guards om ROPE_* instructions
Fixes oss-fuzz #46209
2022-04-04 15:06:35 +03:00
Dmitry Stogov 6156505697 Merge branch 'PHP-8.1'
* PHP-8.1:
  JIT: Fixed incorrect code generation
2022-04-04 14:24:32 +03:00
Dmitry Stogov 24bb178310 Merge branch 'PHP-8.0' into PHP-8.1
* PHP-8.0:
  JIT: Fixed incorrect code generation
2022-04-04 14:24:10 +03:00
Dmitry Stogov 0d44bbd212 JIT: Fixed incorrect code generation
Fixes oss-fuzz #46328
2022-04-04 14:20:45 +03:00
Dmitry Stogov 2d3415a74a Merge branch 'PHP-8.1'
* PHP-8.1:
  JIT: Fixed memory leak
2022-03-25 16:56:08 +03:00
Dmitry Stogov 7aac1c11ee Merge branch 'PHP-8.0' into PHP-8.1
* PHP-8.0:
  JIT: Fixed memory leak
2022-03-25 16:55:37 +03:00
Dmitry Stogov aa352c2c54 JIT: Fixed memory leak
Fixes oss-fuzz #45981
2022-03-25 16:54:50 +03:00
Dmitry Stogov 0ba92163a0 Merge branch 'PHP-8.1'
* PHP-8.1:
  JIT: Fix register clobbering
2022-03-21 16:13:13 +03:00