Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

JIT for PHP based on DynAsm #3792

Closed
wants to merge 904 commits into from
Closed
Show file tree
Hide file tree
Changes from 250 commits
Commits
Show all changes
904 commits
Select commit Hold shift + click to select a range
b46a6bc
Fixed handling of smart branch instruction pairs splitted across basi…
dstogov Aug 16, 2017
d463fc1
unused label
dstogov Aug 16, 2017
082f7c9
Merge branch 'master' into jit-dynasm
dstogov Aug 17, 2017
e45fb6e
Fixed checking of should_send_by_ref in zend_send_var_ex
laruence Aug 17, 2017
b204fa5
Fixed test title
laruence Aug 17, 2017
c6d93d9
Merge branch 'master' into jit-dynasm
laruence Aug 17, 2017
61aa611
Added test for FETCH_DIM_FUNC_ARG fix
laruence Aug 17, 2017
2eb6e02
Merge branch 'master' into jit-dynasm
dstogov Aug 17, 2017
49d4342
Added missing symbols
dstogov Aug 18, 2017
86f8545
Make JIT for HYBRID VM to use only function opcode handlers.
dstogov Aug 18, 2017
8ebdf14
Merge branch 'master' into jit-dynasm
dstogov Aug 18, 2017
ee8849e
Fixed segfault caused by FETCH_DIM_UNSET type infer(from drupal tests)
laruence Aug 19, 2017
b3029ec
Merge branch 'master' into jit-dynasm
laruence Aug 19, 2017
1eec656
Fixed incomplete fix
laruence Aug 20, 2017
64ce622
Merge branch 'master' into jit-dynasm
laruence Aug 21, 2017
f591d31
Change to assertion (could make potential problems more visible)
laruence Aug 22, 2017
ebbacf4
Merge branch 'master' into jit-dynasm
dstogov Aug 22, 2017
fed0c64
Merge branch 'master' into jit-dynasm
dstogov Aug 25, 2017
1db5375
Merge branch 'master' into jit-dynasm
dstogov Aug 30, 2017
b594ad7
Merge branch 'master' into jit-dynasm
dstogov Aug 30, 2017
c9b5ad0
Merge branch 'master' into jit-dynasm
dstogov Aug 30, 2017
8792cc5
Merge branch 'master' into jit-dynasm
dstogov Aug 30, 2017
d92113d
Merge branch 'master' into jit-dynasm
dstogov Aug 31, 2017
27b8e1b
Merge branch 'master' into jit-dynasm
dstogov Aug 31, 2017
95ef078
Merge branch 'master' into jit-dynasm
dstogov Sep 4, 2017
d5ac3d7
Merge branch 'master' into jit-dynasm
dstogov Sep 4, 2017
a60bc06
Allow registr allocation for math instructions, if at least one of op…
dstogov Sep 4, 2017
be2efb9
Merge branch 'master' into jit-dynasm
dstogov Sep 4, 2017
368c729
Merge branch 'master' into jit-dynasm
dstogov Sep 4, 2017
baef1a5
Merge branch 'master' into jit-dynasm
dstogov Sep 4, 2017
b8265fb
Merge branch 'master' into jit-dynasm
dstogov Sep 4, 2017
8b31f8a
Merge branch 'master' into jit-dynasm
dstogov Sep 4, 2017
3bcc9f9
Merge branch 'master' into jit-dynasm
dstogov Sep 5, 2017
b2e10ea
Merge branch 'master' into jit-dynasm
dstogov Sep 5, 2017
fd1f3d6
Merge branch 'master' into jit-dynasm
laruence Sep 8, 2017
d93e7ea
Merge branch 'master' into jit-dynasm
dstogov Sep 8, 2017
2cc7df9
Merge branch 'master' into jit-dynasm
dstogov Sep 11, 2017
1a75df1
Merge branch 'master' into jit-dynasm
dstogov Sep 11, 2017
5ba3d04
Merge branch 'master' into jit-dynasm
dstogov Sep 11, 2017
11dc911
Merge branch 'master' into jit-dynasm
dstogov Sep 11, 2017
4736bdc
Merge branch 'master' into jit-dynasm
dstogov Sep 11, 2017
a4983d8
Merge branch 'master' into jit-dynasm
dstogov Sep 12, 2017
da669a2
Merge branch 'master' into jit-dynasm
dstogov Sep 13, 2017
f514300
Merge branch 'master' into jit-dynasm
dstogov Sep 13, 2017
89e9231
Merge branch 'master' into jit-dynasm
dstogov Sep 13, 2017
81f9499
Merge branch 'master' into jit-dynasm
dstogov Sep 14, 2017
b5648fc
Merge branch 'master' into jit-dynasm
dstogov Sep 18, 2017
56b1dd7
Adopt JIT for property access changes in master branch
dstogov Sep 18, 2017
4c9556e
Merge branch 'master' into jit-dynasm
dstogov Sep 18, 2017
4c9b1d5
Merge branch 'master' into jit-dynasm
dstogov Sep 18, 2017
4ac572b
Merge branch 'master' into jit-dynasm
dstogov Sep 19, 2017
c6e7dc6
Merge branch 'master' into jit-dynasm
dstogov Sep 19, 2017
79b7598
JIT support for new array creation API.
dstogov Sep 19, 2017
ca2b67c
Merge branch 'master' into jit-dynasm
dstogov Sep 26, 2017
49881aa
Merge branch 'master' into jit-dynasm
dstogov Sep 26, 2017
fd7abe3
Generate better code for functions with type hints
dstogov Sep 26, 2017
e2bebba
JIT for RECV handler
dstogov Sep 26, 2017
cdf3621
Avoid useless stores
dstogov Sep 27, 2017
99ea28e
Merge branch 'master' into jit-dynasm
dstogov Sep 27, 2017
f4ea4e0
Merge branch 'master' into jit-dynasm
dstogov Oct 3, 2017
0112661
Removed experemental code
dstogov Oct 3, 2017
7f64a7f
Merge branch 'master' into jit-dynasm
dstogov Oct 3, 2017
09f047a
Merge branch 'master' into jit-dynasm
dstogov Oct 4, 2017
7f1a2b1
Fixed support for new run-time constant operands addressing
dstogov Oct 4, 2017
c7e6a3c
typo
dstogov Oct 4, 2017
87ebd12
Merge branch 'master' into jit-dynasm
dstogov Oct 9, 2017
42cb293
Merge branch 'master' into jit-dynasm
dstogov Oct 9, 2017
faa48e6
Merge branch 'master' into jit-dynasm
dstogov Oct 10, 2017
4f45c4b
Merge branch 'master' into jit-dynasm
laruence Oct 15, 2017
1561f83
Fixed infinite loop after enable RECV(typo?)
laruence Oct 15, 2017
0d4035f
Merge branch 'master' into jit-dynasm
dstogov Oct 16, 2017
236f569
Fixed buggy ZEND_DEFINED handler
laruence Oct 17, 2017
4fe8666
Fixed segfault in X64
laruence Oct 17, 2017
9739861
Merge branch 'master' into jit-dynasm
laruence Oct 17, 2017
5ea0884
Merge branch 'master' into jit-dynasm
dstogov Oct 18, 2017
5d9e0f7
Avoid code generation for dynamic property access if the property is …
dstogov Oct 18, 2017
461d023
Avoid repeatable checks for $this.
dstogov Oct 18, 2017
e502aed
Merge branch 'master' into jit-dynasm
laruence Oct 18, 2017
7e31b13
Disable JIT for functions with extened_infos
laruence Oct 18, 2017
996a3f5
Merge branch 'master' into jit-dynasm
dstogov Oct 18, 2017
bd3b7f4
Merge branch 'master' into jit-dynasm
laruence Oct 19, 2017
61d6f41
Merge branch 'master' into jit-dynasm
dstogov Oct 24, 2017
8f38270
JIT support for dynamic property caching
dstogov Oct 24, 2017
9553a3e
Merge branch 'master' into jit-dynasm
laruence Oct 26, 2017
71c3d78
Merge branch 'master' into jit-dynasm
laruence Oct 28, 2017
9b5fe73
Merge branch 'master' into jit-dynasm
laruence Oct 29, 2017
16d6d73
Merge branch 'master' into jit-dynasm
laruence Oct 31, 2017
373e3f9
Fixed build
laruence Oct 31, 2017
b26570b
Merge branch 'master' into jit-dynasm
laruence Nov 2, 2017
d91dcac
Merge branch 'master' into jit-dynasm
laruence Nov 2, 2017
b0b450e
Merge branch 'master' into jit-dynasm
dstogov Nov 3, 2017
6332197
Merge branch 'master' into jit-dynasm
dstogov Nov 21, 2017
14e4d6d
Merge branch 'master' into jit-dynasm
dstogov Dec 11, 2017
8110461
Merge branch 'master' into jit-dynasm
dstogov Dec 11, 2017
36fcb38
Fixed JIT for TYPE_CHECK
dstogov Dec 11, 2017
b92fd17
Fixed error message
dstogov Dec 11, 2017
abb1059
Use "fastcal" calling convention for internal PHP functions on x86
dstogov Dec 11, 2017
d6df17f
Merge branch 'master' into jit-dynasm
dstogov Jan 12, 2018
56bf880
Fixed JIT support for recent "master" changes
dstogov Jan 12, 2018
3e4d687
Disable file cache while JIT effects
laruence Jan 13, 2018
ca77f1f
Merge branch 'master' into jit-dynasm
laruence Jan 16, 2018
9c1f2ba
Use zend_cpu_supports
laruence Jan 16, 2018
a7f0ef8
Merge branch 'master' into jit-dynasm
dstogov Jan 18, 2018
48fd9b0
Merge branch 'master' into jit-dynasm
dstogov Jan 24, 2018
ed6f8d6
Fixed JIT support for recent master changes
dstogov Jan 24, 2018
5c3fea8
Merge branch 'master' into jit-dynasm
dstogov Jan 29, 2018
7726583
Strings are not COPYABLE anymore.
dstogov Jan 29, 2018
a2426d1
Merge branch 'master' into jit-dynasm
dstogov Jan 30, 2018
2f4d3bc
Merge branch 'master' into jit-dynasm
dstogov Jan 31, 2018
64af789
Merge branch 'master' into jit-dynasm
dstogov Jan 31, 2018
668fafe
Merge branch 'master' into jit-dynasm
dstogov Jan 31, 2018
3a9b81a
Merge branch 'master' into jit-dynasm
dstogov Jan 31, 2018
fd6170a
Merge branch 'master' into jit-dynasm
dstogov Jan 31, 2018
99dd8ea
Merge branch 'master' into jit-dynasm
dstogov Jan 31, 2018
1cddf9c
Merge branch 'master' into jit-dynasm
dstogov Feb 2, 2018
74bac5d
Merge branch 'master' into jit-dynasm
dstogov Feb 5, 2018
005a9ee
Merge branch 'master' into jit-dynasm
dstogov Feb 5, 2018
4e8b398
Fixed JIT support for recent master changes.
dstogov Feb 5, 2018
5f48569
Merge branch 'master' into jit-dynasm
dstogov Feb 7, 2018
e36b0e4
Merge branch 'master' into jit-dynasm
dstogov Feb 13, 2018
3c898db
Merge branch 'master' into jit-dynasm
dstogov Mar 2, 2018
d66680f
Fixed support for recent "master" changes
dstogov Mar 2, 2018
23dea8f
Merge branch 'master' into jit-dynasm
dstogov Mar 12, 2018
c662674
ws
dstogov Mar 12, 2018
c2a48cc
Cleanup
dstogov Mar 12, 2018
64a1c02
Merge branch 'master' into jit-dynasm
dstogov Mar 19, 2018
9c70524
Fixed register-allocation bug
dstogov Mar 19, 2018
29cb549
Merge branch 'master' into jit-dynasm
dstogov May 31, 2018
c838635
Fixed compatibility with recent "master" changes
dstogov May 31, 2018
9890e3e
Merge branch 'master' into jit-dynasm
dstogov Jun 26, 2018
4cd5635
Merge branch 'master' into jit-dynasm
dstogov Jun 26, 2018
277cedf
Added support for new master changes (incomplete)
dstogov Jun 26, 2018
316f83f
Merge branch 'master' into jit-dynasm
dstogov Jun 26, 2018
56382e2
Added support for new master changes (incomplete)
dstogov Jun 26, 2018
e43b6cf
Added support for new master changes (incomplete)
dstogov Jun 26, 2018
60c7b9e
Fixed JIT support for new master changes
dstogov Jun 26, 2018
fb92f58
Fixed CPU stack alignment
dstogov Jun 26, 2018
dcdcd70
Merge branch 'master' into jit-dynasm
dstogov Jul 23, 2018
11629c9
Merge branch 'master' into jit-dynasm
dstogov Jul 23, 2018
fd69f1e
Fixed JIT support for recent master changes
dstogov Jul 23, 2018
4225ed9
Merge branch 'master' into jit-dynasm
dstogov Jul 23, 2018
00f9d6d
Removed useless filename and lineno arguments, used in DEBUG build.
dstogov Jul 23, 2018
2e6eb22
Use better function
dstogov Jul 23, 2018
957ccf5
Merge branch 'master' into jit-dynasm
dstogov Jul 31, 2018
b413c52
fixed support for recent master changes
dstogov Jul 31, 2018
8f5acd7
Merge branch 'master' into jit-dynasm
dstogov Sep 10, 2018
be190cb
Merge branch 'master' into jit-dynasm
dstogov Sep 18, 2018
d1ef1f7
Merge branch 'master' into jit-dynasm
dstogov Sep 18, 2018
e4678ec
Merge branch 'master' into jit-dynasm
dstogov Sep 19, 2018
57ba6a6
Merge branch 'master' into jit-dynasm
dstogov Sep 25, 2018
d9814b7
Merge branch 'master' into jit-dynasm
dstogov Sep 26, 2018
e1b8165
Merge branch 'master' into jit-dynasm
dstogov Sep 26, 2018
01e98a1
Merge branch 'master' into jit-dynasm
dstogov Oct 1, 2018
35ff060
Merge branch 'master' into jit-dynasm
dstogov Oct 1, 2018
a230e17
Merge branch 'master' into jit-dynasm
dstogov Oct 8, 2018
ec91aa7
Merge branch 'master' into jit-dynasm
dstogov Oct 9, 2018
5076f17
Merge branch 'master' into jit-dynasm
dstogov Oct 10, 2018
c88b6f5
Merge branch 'master' into jit-dynasm
dstogov Oct 16, 2018
649f695
Merge branch 'master' into jit-dynasm
dstogov Oct 17, 2018
b49c339
JIT support for immutable op_arrays
dstogov Oct 17, 2018
3bf03b4
Merge branch 'master' into jit-dynasm
dstogov Oct 18, 2018
d916064
Merge branch 'master' into jit-dynasm
dstogov Oct 22, 2018
7b92995
Merge branch 'master' into jit-dynasm
dstogov Nov 15, 2018
a9881b6
Merge branch 'master' into jit-dynasm
dstogov Nov 15, 2018
a55e477
Merge branch 'master' into jit-dynasm
dstogov Nov 28, 2018
0d4a825
Merge branch 'master' into jit-dynasm
dstogov Dec 7, 2018
e08b392
Merge branch 'master' into jit-dynasm
dstogov Dec 27, 2018
99b0c4d
Merge branch 'master' into jit-dynasm
dstogov Dec 27, 2018
40690c3
Peform run-time constructor check for non-linked classes
dstogov Dec 27, 2018
03f0878
Peform run-time property pffset resolution for non-linked classes
dstogov Dec 27, 2018
f21c977
Fixed ext/spl/tests/bug73686.phpt failure
dstogov Dec 27, 2018
6f335ed
Merge branch 'master' into jit-dynasm
dstogov Jan 15, 2019
57ad25b
Partial typed properties support (incomplete)
dstogov Jan 15, 2019
862d748
Merge branch 'master' into jit-dynasm
dstogov Jan 15, 2019
14cb8a2
Merge branch 'master' into jit-dynasm
dstogov Jan 15, 2019
2d2cff1
JIT support for typed properties (incomplete)
dstogov Jan 15, 2019
8a6ed36
Merge branch 'master' into jit-dynasm
dstogov Jan 15, 2019
22428e8
Merge branch 'master' into jit-dynasm
dstogov Jan 17, 2019
78a30ae
JIT support for typed properties.
dstogov Jan 17, 2019
9eb666f
Merge branch 'master' into jit-dynasm
dstogov Jan 22, 2019
0492173
Merge branch 'master' into jit-dynasm
dstogov Jan 22, 2019
3a2ee90
Merge branch 'master' into jit-dynasm
dstogov Jan 28, 2019
7b62b62
Merge branch 'master' into jit-dynasm
dstogov Jan 28, 2019
ba60567
Merge branch 'master' into jit-dynasm
dstogov Jan 29, 2019
94a79d4
Merge branch 'master' into jit-dynasm
dstogov Jan 31, 2019
00bc2f1
Fixed compatibility with master
dstogov Jan 31, 2019
7757702
Merge branch 'master' into jit-dynasm
dstogov Feb 4, 2019
20c4fec
Merge branch 'master' into jit-dynasm
dstogov Feb 4, 2019
f939bd0
Fixed support for changes in object handlers API.
dstogov Feb 4, 2019
5ebee5c
Fixed compatibility with changes intriduced by typed properties patch
dstogov Feb 4, 2019
597aa20
- renumber ZEND_JIT_DEBUG_* codes
dstogov Feb 4, 2019
2436437
Fixed possible incorrect code generation for ZEND_SL, ZEND_SR and ZEN…
dstogov Feb 4, 2019
08c891d
--disable-opcache-jit just an option (not an extension)
dstogov Feb 4, 2019
baf3db2
Remove editors "Local Variales" and "$Id:$" attibute.
dstogov Feb 5, 2019
b154736
Merge branch 'master' into jit-dynasm
dstogov Feb 5, 2019
161e940
Merge branch 'master' into jit-dynasm
dstogov Feb 5, 2019
f8dd0fe
Remove copyright years and change email address
dstogov Feb 5, 2019
9ae9384
Reverted unintentional change.
dstogov Feb 6, 2019
df2f9ce
typo
dstogov Feb 6, 2019
f3fd52d
typo
dstogov Feb 6, 2019
5caca8d
We no longer allow persistent strings in user zvals
dstogov Feb 6, 2019
277fce7
Separation is handled by operation functions (e.g. add_function) sinc…
dstogov Feb 7, 2019
5ad142a
Merge branch 'master' into jit-dynasm
dstogov Feb 7, 2019
821c76c
Merge removing --disable-opcache-filecache option
dstogov Feb 7, 2019
77be4ad
Merge branch 'master' into jit-dynasm
dstogov Feb 7, 2019
9274dcb
Removed JIT support for overloaded functions
dstogov Feb 7, 2019
4343103
Merge branch 'master' into jit-dynasm
dstogov Feb 8, 2019
35b5c0d
Fixed resolution of stub names in disassemble output
dstogov Feb 8, 2019
fb83a68
Merge branch 'master' into jit-dynasm
dstogov Feb 12, 2019
dd5ad82
Merge branch 'master' into jit-dynasm
dstogov Feb 12, 2019
dd47535
Merge branch 'master' into jit-dynasm
dstogov Feb 13, 2019
755ca65
ws
dstogov Feb 13, 2019
b895271
Added asserts
dstogov Feb 13, 2019
99a3752
Added comments
dstogov Feb 13, 2019
1c8fb1e
Added comments about CPU stack alignment
dstogov Feb 13, 2019
4d2bd07
Added comments.
dstogov Feb 13, 2019
a287ade
Merge branch 'master' into jit-dynasm
dstogov Feb 18, 2019
77e42ca
It's not a problem to generate JIT for op_array with debug info, it's…
dstogov Feb 19, 2019
44428f9
Base work for Windows compatibility
weltling Sep 2, 2016
df34d48
Merge pull request #3 from weltling/jit-dynasm
dstogov Feb 19, 2019
89ba2af
Fixed test
dstogov Feb 19, 2019
a1b07dc
Merge branch 'master' into jit-dynasm
dstogov Feb 21, 2019
17d7dad
Make JIT VM helpers to be compatible with VM without GCC global regis…
dstogov Feb 21, 2019
6124901
Use fastcall calling convention
dstogov Feb 21, 2019
b6ce247
Use macros for IP regiser access
dstogov Feb 21, 2019
8ebe985
Implemented JIT supprt for VM without GCC global register variables
dstogov Feb 21, 2019
7492c28
Merge branch 'master' into jit-dynasm
dstogov Feb 22, 2019
3aa1756
Fixed JIT after first profiling request
dstogov Feb 22, 2019
b84e926
typo
dstogov Feb 22, 2019
5466d2d
Fixed MSVC compatibility, with explicit type casting
dstogov Feb 25, 2019
d239f81
Merge branch 'master' into jit-dynasm
dstogov Feb 25, 2019
7f1fff8
Support for WIN64 (incomplete)
dstogov Feb 28, 2019
7441924
Fixed size calculation
dstogov Feb 28, 2019
678cd53
Support for WIN64
dstogov Mar 1, 2019
65215c3
typo
dstogov Mar 1, 2019
eaf0973
Merge branch 'master' into jit-dynasm
dstogov Mar 1, 2019
b5e2ae2
Merge branch 'master' into jit-dynasm
dstogov Mar 4, 2019
bc47dc9
Merge branch 'master' into jit-dynasm
dstogov Mar 5, 2019
1c6d1bf
JIT support for Windows
dstogov Mar 5, 2019
ae158c0
Merge branch 'master' into jit-dynasm
dstogov Mar 12, 2019
4358e7d
Merge branch 'master' into jit-dynasm
dstogov Mar 13, 2019
5ebafb6
Fixed ELF symbol type and binding checks
dstogov Mar 13, 2019
f8c9f47
ZTS detection
dstogov Mar 13, 2019
33a4e1f
Merge branch 'master' into jit-dynasm
dstogov Mar 14, 2019
801617a
JIT ZTS support (incomplete)
dstogov Mar 14, 2019
1fc22f3
JIT ZTS support (only Linux)
dstogov Mar 14, 2019
0a1d718
JIT ZTS support (Linux and Windows)
dstogov Mar 15, 2019
9e79cb2
Merge branch 'master' into jit-dynasm
dstogov Mar 15, 2019
33db42b
Merge branch 'master' into jit-dynasm
dstogov Mar 21, 2019
f82e5b3
Merge branch 'master' into jit-dynasm
dstogov Mar 28, 2019
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
140 changes: 140 additions & 0 deletions Zend/zend_gdb.c
@@ -0,0 +1,140 @@
/*
+----------------------------------------------------------------------+
| Zend Engine |
+----------------------------------------------------------------------+
| Copyright (c) Zend Technologies Ltd. (http://www.zend.com) |
+----------------------------------------------------------------------+
| This source file is subject to version 2.00 of the Zend license, |
| that is bundled with this package in the file LICENSE, and is |
| available through the world-wide-web at the following url: |
| http://www.zend.com/license/2_00.txt. |
| If you did not receive a copy of the Zend license and are unable to |
| obtain it through the world-wide-web, please send a note to |
| license@zend.com so we can mail you a copy immediately. |
+----------------------------------------------------------------------+
| Authors: Dmitry Stogov <dmitry@zend.com> |
| Xinchen Hui <xinchen.h@zend.com> |
+----------------------------------------------------------------------+
*/

#include "zend.h"
#include "zend_gdb.h"

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>

enum {
ZEND_GDBJIT_NOACTION,
ZEND_GDBJIT_REGISTER,
ZEND_GDBJIT_UNREGISTER
};

typedef struct _zend_gdbjit_code_entry {
struct _zend_gdbjit_code_entry *next_entry;
struct _zend_gdbjit_code_entry *prev_entry;
const char *symfile_addr;
uint64_t symfile_size;
} zend_gdbjit_code_entry;

typedef struct _zend_gdbjit_descriptor {
uint32_t version;
uint32_t action_flag;
struct _zend_gdbjit_code_entry *relevant_entry;
struct _zend_gdbjit_code_entry *first_entry;
} zend_gdbjit_descriptor;

ZEND_API zend_gdbjit_descriptor __jit_debug_descriptor = {
1, ZEND_GDBJIT_NOACTION, NULL, NULL
};

ZEND_API zend_never_inline void __jit_debug_register_code()
{
__asm__ __volatile__("");
}

ZEND_API int zend_gdb_register_code(const void *object, size_t size)
{
zend_gdbjit_code_entry *entry;

entry = malloc(sizeof(zend_gdbjit_code_entry) + size);
if (entry == NULL) {
return 0;
}

entry->symfile_addr = ((char*)entry) + sizeof(zend_gdbjit_code_entry);
entry->symfile_size = size;

memcpy((char *)entry->symfile_addr, object, size);

entry->prev_entry = NULL;
entry->next_entry = __jit_debug_descriptor.first_entry;

if (entry->next_entry) {
entry->next_entry->prev_entry = entry;
}
__jit_debug_descriptor.first_entry = entry;

/* Notify GDB */
__jit_debug_descriptor.relevant_entry = entry;
__jit_debug_descriptor.action_flag = ZEND_GDBJIT_REGISTER;
__jit_debug_register_code();

return 1;
}

ZEND_API void zend_gdb_unregister_all(void)
{
zend_gdbjit_code_entry *entry;

__jit_debug_descriptor.action_flag = ZEND_GDBJIT_UNREGISTER;
while ((entry = __jit_debug_descriptor.first_entry)) {
__jit_debug_descriptor.first_entry = entry->next_entry;
if (entry->next_entry) {
entry->next_entry->prev_entry = NULL;
}
/* Notify GDB */
__jit_debug_descriptor.relevant_entry = entry;
__jit_debug_register_code();

free(entry);
}
}

ZEND_API int zend_gdb_present(void)
{
int ret = 0;
int fd = open("/proc/self/status", O_RDONLY);

if (fd > 0) {
char buf[1024];
ssize_t n = read(fd, buf, sizeof(buf) - 1);
char *s;
pid_t pid;

if (n > 0) {
buf[n] = 0;
s = strstr(buf, "TracerPid:");
if (s) {
s += sizeof("TracerPid:") - 1;
while (*s == ' ' || *s == '\t') {
s++;
}
pid = atoi(s);
if (pid) {
sprintf(buf, "/proc/%d/exe", (int)pid);
if (readlink(buf, buf, sizeof(buf) - 1) > 0) {
if (strstr(buf, "gdb")) {
ret = 1;
}
}
}
}
}

close(fd);
}

return ret;
}
27 changes: 27 additions & 0 deletions Zend/zend_gdb.h
@@ -0,0 +1,27 @@
/*
+----------------------------------------------------------------------+
| Zend Engine |
+----------------------------------------------------------------------+
| Copyright (c) Zend Technologies Ltd. (http://www.zend.com) |
+----------------------------------------------------------------------+
| This source file is subject to version 2.00 of the Zend license, |
| that is bundled with this package in the file LICENSE, and is |
| available through the world-wide-web at the following url: |
| http://www.zend.com/license/2_00.txt. |
| If you did not receive a copy of the Zend license and are unable to |
| obtain it through the world-wide-web, please send a note to |
| license@zend.com so we can mail you a copy immediately. |
+----------------------------------------------------------------------+
| Authors: Dmitry Stogov <dmitry@zend.com> |
| Xinchen Hui <xinchen.h@zend.com> |
+----------------------------------------------------------------------+
*/

#ifndef ZEND_GDB
#define ZEND_GDB

ZEND_API int zend_gdb_register_code(const void *object, size_t size);
ZEND_API void zend_gdb_unregister_all(void);
ZEND_API int zend_gdb_present(void);

#endif
2 changes: 1 addition & 1 deletion acinclude.m4
Expand Up @@ -2119,7 +2119,7 @@ dnl
dnl Common setup macro for ICU
dnl
AC_DEFUN([PHP_SETUP_ICU],[
PKG_CHECK_MODULES([ICU], [icu-io >= 50.1])
PKG_CHECK_MODULES([ICU], [icu-uc >= 50.1 icu-io icu-i18n])

PHP_EVAL_INCLINE($ICU_CFLAGS)
PHP_EVAL_LIBLINE($ICU_LIBS, $1)
Expand Down
2 changes: 1 addition & 1 deletion configure.ac
Expand Up @@ -1522,7 +1522,7 @@ PHP_ADD_SOURCES(Zend, \
zend_iterators.c zend_interfaces.c zend_exceptions.c zend_strtod.c zend_gc.c \
zend_closures.c zend_float.c zend_string.c zend_signal.c zend_generators.c \
zend_virtual_cwd.c zend_ast.c zend_objects.c zend_object_handlers.c zend_objects_API.c \
zend_default_classes.c zend_inheritance.c zend_smart_str.c zend_cpuinfo.c, \
zend_default_classes.c zend_inheritance.c zend_smart_str.c zend_cpuinfo.c zend_gdb.c, \
-DZEND_ENABLE_STATIC_TSRMLS_CACHE=1)

dnl Selectively disable optimization due to high RAM usage during
Expand Down