37#if defined(PHP_WIN32) && defined(HAVE_OPENSSL_EXT)
38# include "openssl/applink.c"
41#if defined(PHP_WIN32) && defined(ZTS)
48static
bool phpdbg_booted = 0;
49static
bool phpdbg_fully_started = 0;
50static
bool use_mm_wrappers = 1;
52static
void php_phpdbg_destroy_bp_file(
zval *brake)
58static void php_phpdbg_destroy_bp_symbol(
zval *brake)
64static void php_phpdbg_destroy_bp_opcode(
zval *brake)
70static void php_phpdbg_destroy_bp_opline(
zval *brake)
75static void php_phpdbg_destroy_bp_methods(
zval *brake)
81static void php_phpdbg_destroy_bp_condition(
zval *
data)
89 efree((
char*) brake->code);
93static void php_phpdbg_destroy_file_source(
zval *
data)
103static inline void php_phpdbg_globals_ctor(zend_phpdbg_globals *pg)
105 pg->prompt[0] =
NULL;
106 pg->prompt[1] =
NULL;
108 pg->colors[0] =
NULL;
109 pg->colors[1] =
NULL;
110 pg->colors[2] =
NULL;
116 pg->last_was_newline = 1;
119 pg->in_execution = 0;
122 memset(pg->io, 0,
sizeof(pg->io));
124 pg->sapi_name_ptr =
NULL;
125 pg->unclean_eval = 0;
128 pg->err_buf.active = 0;
129 pg->err_buf.type = 0;
131 pg->input_buflen = 0;
132 pg->sigsafe_mem.mem =
NULL;
133 pg->sigsegv_bailout =
NULL;
135 pg->oplog_list =
NULL;
136 pg->stdin_file =
NULL;
138 pg->cur_command =
NULL;
141#ifdef HAVE_USERFAULTFD_WRITEFAULT
142 pg->watch_userfaultfd = 0;
143 pg->watch_userfault_thread = 0;
169 register_phpdbg_symbols(module_number);
184 if (use_mm_wrappers) {
205 }
while (cur !=
NULL);
212 if (
SG(request_info).argv0) {
213 free(
SG(request_info).argv0);
214 SG(request_info).argv0 =
NULL;
224 EG(symtable_cache_limit) =
EG(symtable_cache);
267 if (sb.st_mode & (S_IFREG|
S_IFLNK)) {
301 ex =
EG(current_execute_data);
303 ex =
ex->prev_execute_data;
330 char *
class, *method;
399 size_t prompt_len = 0;
456 for (; cur <
end; cur++) {
457 uint8_t opcode = cur->
opcode;
458 if (phpdbg_is_ignored_opcode(opcode)) {
463 insert_idx = cur - op_array->
opcodes;
491 bool by_function =
false;
492 bool by_opcode =
false;
537 if (zend_hash_exists(files,
func->op_array.filename)) {
541 insert_ht = phpdbg_add_empty_array(insert_ht,
name);
544 phpdbg_oplog_fill_executable(&
func->op_array, insert_ht, by_opcode);
558 insert_ht = phpdbg_add_empty_array(insert_ht, fn_name);
559 zend_string_release(fn_name);
562 phpdbg_oplog_fill_executable(&
func->op_array, insert_ht, by_opcode);
572 phpdbg_oplog_fill_executable(
592 bool by_function =
false;
593 bool by_opcode =
false;
625 zend_string *last_function = (
void *)~(uintptr_t)0;
642 if (last_function !=
NULL) {
645 last_function =
NULL;
649 last_scope = cur->
scope;
650 if (last_scope ==
NULL) {
651 fn_name = zend_string_copy(last_function);
656 zend_string_release(fn_name);
663 if (phpdbg_is_ignored_opcode(cur->
op->
opcode)) {
679 }
while ((cur = cur->
next));
711static char* php_sapi_phpdbg_read_cookies(
void)
730static void php_sapi_phpdbg_send_header(
sapi_header_struct *sapi_header,
void *server_context)
735static void php_sapi_phpdbg_log_message(
const char *message,
int syslog_type_int)
756 zend_string_release(
file);
758 if (!phpdbg_fully_started) {
773 fprintf(stdout,
"%s\n", message);
778static int php_sapi_phpdbg_activate(
void)
783static int php_sapi_phpdbg_deactivate(
void)
809static void php_sapi_phpdbg_register_vars(
zval *track_vars_array)
843static inline size_t php_sapi_phpdbg_ub_write(
const char *message,
size_t length)
854static ssize_t phpdbg_stdiop_write(
php_stream *stream,
const char *
buf,
size_t count) {
857 while (
data->fd >= 0) {
860 int stat_stderr =
fstat(fileno(stderr), &
stat[2]);
861 int stat_stdout =
fstat(fileno(stdout), &
stat[0]);
863 if ((stat_stderr < 0 && stat_stdout < 0) || stat_datafd < 0) {
884 zval zin, zout, zerr;
935 php_sapi_phpdbg_module_startup,
938 php_sapi_phpdbg_activate,
939 php_sapi_phpdbg_deactivate,
941 php_sapi_phpdbg_ub_write,
948 php_sapi_phpdbg_header_handler,
949 php_sapi_phpdbg_send_headers,
950 php_sapi_phpdbg_send_header,
953 php_sapi_phpdbg_read_cookies,
955 php_sapi_phpdbg_register_vars,
956 php_sapi_phpdbg_log_message,
964 {
'c', 1,
"ini path override"},
965 {
'd', 1,
"define ini entry on command line"},
966 {
'n', 0,
"no php.ini"},
967 {
'z', 1,
"load zend_extension"},
969 {
'q', 0,
"no banner"},
970 {
'v', 0,
"disable quietness"},
971 {
'b', 0,
"boring colours"},
972 {
'i', 1,
"specify init"},
973 {
'I', 0,
"ignore init"},
974 {
'O', 1,
"opline log"},
976 {
'e', 0,
"generate ext_stmt opcodes"},
977 {
'E', 0,
"step-through-eval"},
978 {
's', 1,
"script from stdin"},
979 {
'S', 1,
"sapi-name"},
980 {
'p', 2,
"show opcodes"},
988"register_argc_argv=On\n"
990"display_errors=Off\n"
992"max_execution_time=0\n"
995"output_buffering=off\n";
997static void phpdbg_welcome(
bool cleaning)
1002 phpdbg_writeln(
"To get help using phpdbg type \"help\" and press enter");
1010 zend_hash_num_elements(
EG(class_table)),
1011 zend_hash_num_elements(
EG(function_table)),
1012 zend_hash_num_elements(
EG(zend_constants)),
1013 zend_hash_num_elements(&
EG(included_files)));
1017static inline void phpdbg_sigint_handler(
int signo)
1046static void phpdbg_signal_handler(
int sig, siginfo_t *info,
void *
context)
1106 if (blocking_pipes) {
1128 char *first_command =
NULL;
1130 size_t init_file_len;
1131 bool init_file_default;
1134 int php_optind, opt, show_banner = 1;
1136 volatile bool quit_immediately = 0;
1137 zend_phpdbg_globals *settings =
NULL;
1138 char *bp_tmp =
NULL;
1139 char *print_opline_func;
1143 char *read_from_stdin =
NULL;
1145 bool show_help = 0, show_version = 0;
1154 _setmode(_fileno(stdin),
O_BINARY);
1155 _setmode(_fileno(stdout),
O_BINARY);
1156 _setmode(_fileno(stderr),
O_BINARY);
1158 struct sigaction signal_struct;
1159 signal_struct.sa_sigaction = phpdbg_signal_handler;
1160 signal_struct.sa_flags = SA_SIGINFO | SA_NODEFER;
1173 php_ini_builder_init(&ini_builder);
1175 ini_override =
NULL;
1177 zend_extensions_len = 0L;
1180 init_file_default = 1;
1189 exec = settings->exec;
1192 while ((opt =
php_getopt(argc, argv, OPTIONS, &php_optarg, &php_optind, 0, 2)) != -1) {
1195 if (settings ==
NULL) {
1206 ini_override = strdup(php_optarg);
1214 zend_extensions_len++;
1224 if (settings ==
NULL) {
1225 read_from_stdin = strdup(php_optarg);
1230 sapi_name = strdup(php_optarg);
1234 init_file_default = 0;
1243 init_file_len =
strlen(php_optarg);
1244 if (init_file_len) {
1245 init_file = strdup(php_optarg);
1270 print_opline_func = php_optarg;
1272 settings = (
void *) 0x1;
1290 if (!read_from_stdin && argc > php_optind) {
1292 exec = strdup(argv[php_optind]);
1298 phpdbg->name = sapi_name;
1302 phpdbg->phpinfo_as_text = 1;
1303 phpdbg->php_ini_ignore_cwd = 1;
1307 phpdbg->executable_location = argv[0];
1308 phpdbg->phpinfo_as_text = 1;
1309 phpdbg->php_ini_ignore = ini_ignore;
1310 phpdbg->php_ini_path_override = ini_override;
1314 if (zend_extensions_len) {
1319 size_t ze_len =
strlen(ze);
1330 phpdbg->ini_entries = php_ini_builder_finish(&ini_builder);
1339 if (settings > (zend_phpdbg_globals *) 0x2) {
1341 zend_phpdbg_globals *
ptr = TSRMG_BULK_STATIC(phpdbg_globals_id, zend_phpdbg_globals *);
1344 phpdbg_globals = *settings;
1358 EXCEPTION_POINTERS *xp;
1362 if (show_version || show_help) {
1368 }
else if (show_version) {
1371 char *prepended_version_info;
1372 spprintf(&prepended_version_info, 0,
1375 efree(prepended_version_info);
1376 efree(version_info);
1382 php_ini_builder_deinit(&ini_builder);
1392 goto free_and_return;
1406 use_mm_wrappers = !_malloc && !_realloc && !_free;
1411 if (use_mm_wrappers) {
1435 if (
SG(sapi_headers).mimetype) {
1436 efree(
SG(sapi_headers).mimetype);
1437 SG(sapi_headers).mimetype =
NULL;
1445 SG(request_info).argc = argc - php_optind + 1;
1446 SG(request_info).argv =
emalloc(
SG(request_info).argc *
sizeof(
char *));
1447 for (i =
SG(request_info).argc; --i;) {
1448 SG(request_info).argv[i] =
estrdup(argv[php_optind - 1 + i]);
1454 PUTS(
"Could not startup");
1459#ifdef HAVE_USERFAULTFD_WRITEFAULT
1483 memcpy(&wrapper, tmp_wrapper,
sizeof(wrapper));
1484 memcpy(&wops, tmp_wrapper->
wops,
sizeof(wops));
1495 if (show_banner && cleaning < 2) {
1497 phpdbg_welcome(cleaning == 1);
1509 phpdbg_init(init_file, init_file_len, init_file_default);
1519 if (read_from_stdin) {
1520 if (!read_from_stdin[0]) {
1521 if (!quit_immediately) {
1522 phpdbg_error(
"Impossible to not specify a stdin delimiter without -rr");
1527 if (show_banner || read_from_stdin[0]) {
1528 phpdbg_notice(
"Reading input from stdin; put '%s' followed by a newline on an own line after code to end input", read_from_stdin);
1537 cmd.
str = read_from_stdin;
1549 if (backup_phpdbg_compile) {
1555 backup_phpdbg_compile =
NULL;
1568 if (settings == (
void *) 0x1) {
1577 PG(during_request_startup) = 0;
1579 phpdbg_fully_started = 1;
1586 if (quit_immediately) {
1592 if (first_command) {
1598 if (quit_immediately) {
1601 exit_status =
EG(exit_status);
1606 CG(unclean_shutdown) = 0;
1615 bp_tmp = strdup(bp_tmp_str);
1627 phpdbg_error(
"Segmentation fault encountered\ntrying to abort cleanly...");
1634 if (first_command) {
1635 free(first_command);
1636 first_command =
NULL;
1639 if (cleaning <= 0) {
1647 for (i =
SG(request_info).argc; i--;) {
1648 efree(
SG(request_info).argv[i]);
1653 php_ini_builder_deinit(&ini_builder);
1673 backup_phpdbg_compile = zend_string_alloc(
size, 1);
1683 if ((cleaning > 0) && !quit_immediately) {
1684 settings = calloc(1,
sizeof(zend_phpdbg_globals));
1686 php_phpdbg_globals_ctor(settings);
1711 if (exit_status == 0) {
1712 exit_status =
EG(exit_status);
1751 if (read_from_stdin) {
1752 free(read_from_stdin);
1753 read_from_stdin =
NULL;
1758 if (!use_mm_wrappers) {
1762 ts_free_id(phpdbg_globals_id);
1767 if ((cleaning > 0) && !quit_immediately) {
1774 if (backup_phpdbg_compile) {
1775 zend_string_free(backup_phpdbg_compile);
SAPI_API sapi_module_struct sapi_module
SAPI_API void sapi_deactivate(void)
SAPI_API void sapi_startup(sapi_module_struct *sf)
SAPI_API void sapi_shutdown(void)
#define SAPI_HEADER_SENT_SUCCESSFULLY
#define STANDARD_SAPI_MODULE_PROPERTIES
struct _sapi_module_struct sapi_module_struct
PHPAPI void php_free_shutdown_functions(void)
fprintf($stream, string $format, mixed ... $values)
file(string $filename, int $flags=0, $context=null)
prev(array|object &$array)
count(Countable|array $value, int $mode=COUNT_NORMAL)
memset(ptr, 0, type->size)
zend_ffi_ctype_name_buf buf
const php_stream_filter_ops * ops
PHPAPI int php_getopt(int argc, char *const *argv, const opt_struct opts[], char **optarg, int *optind, int show_err, int arg_start)
foreach($dp as $el) foreach( $dp as $el) if( $pass2< 2) echo ""
void php_request_shutdown(void *dummy)
zend_result php_module_startup(sapi_module_struct *sf, zend_module_entry *additional_module)
PHPAPI char * php_get_version(sapi_module_struct *sapi_module)
void php_module_shutdown(void)
zend_result php_request_startup(void)
int php_module_shutdown_wrapper(sapi_module_struct *sapi_globals)
PHPAPI int php_output_activate(void)
PHPAPI void php_output_deactivate(void)
#define PHP_MSHUTDOWN_FUNCTION
#define PHP_MINIT_FUNCTION
#define PHP_RINIT_FUNCTION
#define PHP_RSHUTDOWN_FUNCTION
unsigned const char * end
struct _opt_struct opt_struct
PHPAPI void php_ini_builder_define(struct php_ini_builder *b, const char *arg)
PHPAPI void php_ini_builder_unquoted(struct php_ini_builder *b, const char *name, size_t name_length, const char *value, size_t value_length)
#define php_ini_builder_prepend_literal(b, l)
PHP_JSON_API size_t int options
unsigned char key[REFLECTION_KEY_LEN]
PHPAPI zval * php_stream_context_get_option(php_stream_context *context, const char *wrappername, const char *optionname)
#define php_stream_fopen_from_fd(fd, mode, persistent_id)
PHPAPI php_stream_ops php_stream_stdio_ops
struct _php_stream_wrapper_ops php_stream_wrapper_ops
struct _php_stream php_stream
struct _php_stream_context php_stream_context
#define PHP_STREAM_FLAG_NO_CLOSE
#define php_stream_to_zval(stream, zval)
#define php_stream_open_wrapper_ex(path, mode, options, opened, context)
#define php_stream_close(stream)
#define php_stream_get_url_stream_wrappers_hash()
struct _php_stream_wrapper php_stream_wrapper
#define php_stream_set_option(stream, option, value, ptrvalue)
#define PHP_STREAM_OPTION_PIPE_BLOCKING
PHPAPI void(* php_import_environment_variables)(zval *array_ptr)
PHPAPI void php_register_variable(const char *var, const char *strval, zval *track_vars_array)
void phpdbg_register_file_handles(void)
const char phpdbg_ini_hardcoded[]
void phpdbg_free_wrapper(void *p ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC)
void * phpdbg_realloc_wrapper(void *ptr, size_t size ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC)
php_stream * phpdbg_stream_url_wrap_php(php_stream_wrapper *wrapper, const char *path, const char *mode, int options, zend_string **opened_path, php_stream_context *context STREAMS_DC)
struct _phpdbg_oplog_entry phpdbg_oplog_entry
HashTable bp[PHPDBG_BREAK_TABLES]
#define PHPDBG_DEFAULT_PROMPT
struct @234323133100145062121301312242002332057146367313 io[PHPDBG_IO_FDS]
ssize_t(* php_stdiop_write)(php_stream *, const char *, size_t)
#define PHPDBG_IS_STEPONEVAL
#define PHPDBG_PRESERVE_FLAGS_MASK
#define PHPDBG_IS_INTERACTIVE
#define PHPDBG_DISCARD_OUTPUT
#define PHPDBG_IS_INITIALIZING
char input_buffer[PHPDBG_MAX_CMD]
#define PHPDBG_HAS_PAGINATION
#define PHPDBG_IS_COLOURED
JMP_BUF * sigsegv_bailout
struct sigaction old_sigsegv_signal
const php_stream_wrapper * orig_url_wrap_php
const phpdbg_color_t * colors[PHPDBG_COLORS]
#define PHPDBG_DEFAULT_FLAGS
#define PHPDBG_IS_SIGNALED
#define PHPDBG_PREVENT_INTERACTIVE
#define PHPDBG_IS_RUNNING
#define PHPDBG_IS_QUITTING
phpdbg_oplog_list * oplog_list
void(* original_free_function)(void *ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC)
#define PHPDBG_IS_STOPPING
#define PHPDBG_IS_CLEANING
phpdbg_oplog_entry * oplog_cur
struct _phpdbg_oplog_list phpdbg_oplog_list
phpdbg_break_function(string $function)
phpdbg_prompt(string $string)
phpdbg_exec(string $context)
phpdbg_break_method(string $class, string $method)
phpdbg_end_oplog(array $options=[])
phpdbg_get_executable(array $options=[])
phpdbg_color(int $element, string $color)
phpdbg_break_file(string $file, int $line)
PHPDBG_API void phpdbg_set_breakpoint_file(const char *path, size_t path_len, zend_ulong line_num)
PHPDBG_API void phpdbg_set_breakpoint_opline_ex(phpdbg_opline_ptr_t opline)
PHPDBG_API void phpdbg_export_breakpoints_to_string(char **str)
PHPDBG_API void phpdbg_set_breakpoint_symbol(const char *name, size_t name_len)
PHPDBG_API void phpdbg_set_breakpoint_method(const char *class_name, const char *func_name)
#define PHPDBG_BREAK_FUNCTION_OPLINE
#define PHPDBG_BREAK_COND
#define PHPDBG_BREAK_FILE_OPLINE
#define PHPDBG_BREAK_OPLINE
#define PHPDBG_BREAK_FILE_PENDING
#define PHPDBG_BREAK_METHOD
#define PHPDBG_BREAK_OPCODE
#define PHPDBG_BREAK_METHOD_OPLINE
struct _phpdbg_breakop_t phpdbg_breakop_t
struct _zend_op * phpdbg_opline_ptr_t
#define PHPDBG_BREAK_FILE
struct _phpdbg_breakcond_t phpdbg_breakcond_t
struct _phpdbg_breaksymbol_t phpdbg_breaksymbol_t
struct _phpdbg_param phpdbg_param_t
#define PHPDBG_COMMAND_HANDLER(name)
void phpdbg_do_help_cmd(const char *type)
void phpdbg_init_list(void)
void phpdbg_list_update(void)
void phpdbg_list_file(zend_string *filename, uint32_t count, int offset, uint32_t highlight)
int phpdbg_process_print(int fd, int type, const char *msg, int msglen)
#define phpdbg_error(strfmt,...)
#define phpdbg_out(fmt,...)
#define phpdbg_write(strfmt,...)
#define phpdbg_script(type, strfmt,...)
#define phpdbg_notice(strfmt,...)
#define phpdbg_writeln(strfmt,...)
void phpdbg_print_opcodes(const char *function)
void phpdbg_init(char *init_file, size_t init_file_len, bool use_default)
void phpdbg_string_init(char *buffer)
int phpdbg_compile_stdin(zend_string *code)
void phpdbg_force_interruption(void)
void phpdbg_execute_ex(zend_execute_data *execute_data)
int phpdbg_interactive(bool allow_async_unsafe, char *input)
void phpdbg_clear_sigsafe_mem(void)
void phpdbg_set_sigsafe_mem(char *buffer)
#define PHPDBG_SIGSAFE_MEM_SIZE
PHPDBG_API char * phpdbg_resolve_path(const char *path)
PHPDBG_API void phpdbg_set_color_ex(int element, const char *name, size_t name_length)
PHPDBG_API void phpdbg_set_prompt(const char *prompt)
PHPDBG_API uint32_t phpdbg_get_terminal_height(void)
#define PHPDBG_COLOR_PROMPT
#define PHPDBG_COLOR_NOTICE
#define PHPDBG_COLOR_ERROR
int phpdbg_watchpoint_segfault_handler(siginfo_t *info, void *context)
void phpdbg_purge_watchpoint_tree(void)
void phpdbg_destroy_watchpoints(void)
void phpdbg_watch_efree(void *ptr ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC)
void phpdbg_setup_watchpoints(void)
int phpdbg_exception_handler_win32(EXCEPTION_POINTERS *xp)
php_stream *(* stream_opener)(php_stream_wrapper *wrapper, const char *filename, const char *mode, int options, zend_string **opened_path, php_stream_context *context STREAMS_DC)
const php_stream_wrapper_ops * wops
zend_string * function_name
phpdbg_oplog_entry * next
struct _zend_class_entry::@126215362204241324314155352336150042254204116267::@166057154351252324007362117353350250255142166322 user
union _zend_class_entry::@126215362204241324314155352336150042254204116267 info
zend_string * function_name
ZEND_API ZEND_COLD void zend_error(int type, const char *format,...)
#define ZEND_TSRMLS_CACHE_UPDATE()
#define ZEND_TSRMLS_CACHE_DEFINE()
ZEND_API zend_result zend_parse_parameters(uint32_t num_args, const char *type_spec,...)
ZEND_API ZEND_COLD void zend_argument_value_error(uint32_t arg_num, const char *format,...)
#define ZEND_INIT_MODULE_GLOBALS(module_name, globals_ctor, globals_dtor)
#define ZEND_DECLARE_MODULE_GLOBALS(module_name)
#define zend_parse_parameters_none()
#define ZVAL_STRINGL(z, s, l)
ZEND_API void ZEND_FASTCALL _zend_mm_free(zend_mm_heap *heap, void *ptr ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC)
ZEND_API char *ZEND_FASTCALL zend_strndup(const char *s, size_t length)
void *ZEND_FASTCALL _zend_mm_realloc(zend_mm_heap *heap, void *ptr, size_t size ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC)
ZEND_API void zend_mm_set_custom_handlers(zend_mm_heap *heap, void *(*_malloc)(size_t ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC), void(*_free)(void *ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC), void *(*_realloc)(void *, size_t ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC))
ZEND_API void zend_mm_get_custom_handlers(zend_mm_heap *heap, void *(**_malloc)(size_t ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC), void(**_free)(void *ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC), void *(**_realloc)(void *, size_t ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC))
ZEND_API zend_mm_heap * zend_mm_get_heap(void)
ZEND_API void *ZEND_FASTCALL _zend_mm_alloc(zend_mm_heap *heap, size_t size ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC)
struct _zend_mm_heap zend_mm_heap
exit(string|int $status=0)
strcmp(string $string1, string $string2)
zend_string_release_ex(func->internal_function.function_name, 0)
#define ZEND_USER_CODE(type)
ZEND_API void destroy_op_array(zend_op_array *op_array)
#define ZEND_COMPILE_EXTENDED_INFO
#define ZEND_USER_FUNCTION
struct _zend_op_array zend_op_array
#define ZEND_ACC_VARIADIC
#define strncasecmp(s1, s2, n)
ZEND_API zend_result zend_register_constant(zend_constant *c)
struct _zend_constant zend_constant
ZEND_API void(ZEND_FASTCALL *zend_touch_vm_stack_data)(void *vm_stack_data)
ZEND_API uint32_t zend_get_executed_lineno(void)
ZEND_API const char * zend_get_executed_filename(void)
ZEND_API void(* zend_execute_ex)(zend_execute_data *execute_data)
ZEND_API zend_llist zend_extensions
struct _zend_extension zend_extension
union _zend_function zend_function
ZEND_API void ZEND_FASTCALL zend_hash_destroy(HashTable *ht)
ZEND_API zval *ZEND_FASTCALL zend_hash_str_find(const HashTable *ht, const char *str, size_t len)
ZEND_API zval *ZEND_FASTCALL zend_hash_index_add_new(HashTable *ht, zend_ulong h, zval *pData)
ZEND_API void ZEND_FASTCALL zend_hash_clean(HashTable *ht)
ZEND_API zval *ZEND_FASTCALL zend_hash_add_new(HashTable *ht, zend_string *key, zval *pData)
ZEND_API zval *ZEND_FASTCALL zend_hash_index_update(HashTable *ht, zend_ulong h, zval *pData)
ZEND_API zval *ZEND_FASTCALL zend_hash_add_empty_element(HashTable *ht, zend_string *key)
ZEND_API zend_result ZEND_FASTCALL zend_hash_del(HashTable *ht, zend_string *key)
ZEND_API zval *ZEND_FASTCALL zend_hash_find(const HashTable *ht, zend_string *key)
ZEND_API zval *ZEND_FASTCALL zend_hash_index_find(const HashTable *ht, zend_ulong h)
#define zend_hash_init(ht, nSize, pHashFunction, pDestructor, persistent)
#define ZEND_HASH_MAP_FOREACH_PTR(ht, _ptr)
#define ZEND_HASH_MAP_FOREACH_STR_KEY(ht, _key)
#define ZEND_HASH_MAP_FOREACH_STR_KEY_PTR(ht, _key, _ptr)
#define ZEND_HASH_FOREACH_END()
#define ZEND_HASH_FOREACH_VAL(ht, _val)
ZEND_API zend_result zend_alter_ini_entry_ex(zend_string *name, zend_string *new_value, int modify_type, int stage, bool force_change)
#define ZEND_INI_STAGE_STARTUP
struct _zend_string zend_string
#define STANDARD_MODULE_HEADER
struct _zend_module_entry zend_module_entry
#define STANDARD_MODULE_PROPERTIES
ZEND_API void ZEND_FASTCALL zend_objects_store_mark_destructed(zend_objects_store *objects)
ZEND_API bool ZEND_FASTCALL zend_is_true(const zval *op)
ZEND_API void ZEND_FASTCALL convert_to_long(zval *op)
#define zend_quiet_write(...)
#define ZEND_FILE_LINE_DC
#define zend_always_inline
#define ZEND_FILE_LINE_ORIG_RELAY_CC
#define ZEND_ATTRIBUTE_MALLOC
#define ZEND_ATTRIBUTE_ALLOC_SIZE(X)
#define UNEXPECTED(condition)
#define ZEND_FILE_LINE_RELAY_CC
#define ZEND_FILE_LINE_ORIG_DC
struct _zend_class_entry zend_class_entry
#define zend_signal_activate()
#define zend_signal_startup()
#define zend_sigaction(signo, act, oldact)
#define zend_signal(signo, handler)
#define Z_CONSTANT_FLAGS(zval)
#define Z_ARRVAL_P(zval_p)
struct _zend_array HashTable
#define GC_MAKE_PERSISTENT_LOCAL(p)
struct _zend_execute_data zend_execute_data
#define VCWD_STAT(path, buff)
ZEND_API int zend_vm_kind(void)
function(EX_VAR(opline->result.var))
#define ZEND_DECLARE_ANON_CLASS
#define ZEND_EXT_FCALL_END
#define ZEND_VERIFY_RETURN_TYPE
#define ZEND_ASSERT_CHECK
#define ZEND_RETURN_BY_REF
#define ZEND_DECLARE_CONST
#define ZEND_DECLARE_CLASS_DELAYED
#define ZEND_DECLARE_FUNCTION
#define ZEND_EXT_FCALL_BEGIN
#define ZEND_VM_KIND_HYBRID
#define ZEND_BIND_INIT_STATIC_OR_JMP
#define ZEND_GENERATOR_RETURN
#define ZEND_DECLARE_CLASS