php-src/ext/opcache/zend_shared_alloc.h

206 lines
6.8 KiB
C
Raw Normal View History

2013-02-13 12:26:47 +00:00
/*
+----------------------------------------------------------------------+
| Zend OPcache |
2013-02-13 12:26:47 +00:00
+----------------------------------------------------------------------+
2019-02-05 07:33:28 +00:00
| Copyright (c) The PHP Group |
2013-02-13 12:26:47 +00:00
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP 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.php.net/license/3_01.txt |
| If you did not receive a copy of the PHP license and are unable to |
| obtain it through the world-wide-web, please send a note to |
| license@php.net so we can mail you a copy immediately. |
+----------------------------------------------------------------------+
2018-11-01 16:30:28 +00:00
| Authors: Andi Gutmans <andi@php.net> |
| Zeev Suraski <zeev@php.net> |
2013-02-13 12:26:47 +00:00
| Stanislav Malyshev <stas@zend.com> |
2018-11-01 16:30:28 +00:00
| Dmitry Stogov <dmitry@php.net> |
2013-02-13 12:26:47 +00:00
+----------------------------------------------------------------------+
*/
#ifndef ZEND_SHARED_ALLOC_H
#define ZEND_SHARED_ALLOC_H
#include "zend.h"
#include "ZendAccelerator.h"
2013-02-13 12:26:47 +00:00
#if defined(__APPLE__) && defined(__MACH__) /* darwin */
# ifdef HAVE_SHM_MMAP_POSIX
# define USE_SHM_OPEN 1
# endif
# ifdef HAVE_SHM_MMAP_ANON
# define USE_MMAP 1
# endif
2013-02-13 12:26:47 +00:00
#elif defined(__linux__) || defined(_AIX)
2019-03-01 09:15:56 +00:00
# ifdef HAVE_SHM_MMAP_POSIX
# define USE_SHM_OPEN 1
# endif
# ifdef HAVE_SHM_IPC
# define USE_SHM 1
# endif
# ifdef HAVE_SHM_MMAP_ANON
# define USE_MMAP 1
# endif
2013-02-13 12:26:47 +00:00
#elif defined(__sparc) || defined(__sun)
# ifdef HAVE_SHM_MMAP_POSIX
# define USE_SHM_OPEN 1
# endif
# ifdef HAVE_SHM_IPC
# define USE_SHM 1
# endif
2013-02-13 12:26:47 +00:00
# if defined(__i386)
# ifdef HAVE_SHM_MMAP_ANON
# define USE_MMAP 1
# endif
# endif
#else
# ifdef HAVE_SHM_MMAP_POSIX
# define USE_SHM_OPEN 1
# endif
# ifdef HAVE_SHM_MMAP_ANON
2013-02-13 12:26:47 +00:00
# define USE_MMAP 1
# endif
# ifdef HAVE_SHM_IPC
# define USE_SHM 1
# endif
2013-02-13 12:26:47 +00:00
#endif
#define ALLOC_FAILURE 0
#define ALLOC_SUCCESS 1
#define FAILED_REATTACHED 2
#define SUCCESSFULLY_REATTACHED 4
#define ALLOC_FAIL_MAPPING 8
#define ALLOC_FALLBACK 9
2013-02-13 12:26:47 +00:00
typedef struct _zend_shared_segment {
size_t size;
2019-04-01 07:27:11 +00:00
size_t end;
2013-02-13 12:26:47 +00:00
size_t pos; /* position for simple stack allocator */
void *p;
} zend_shared_segment;
typedef int (*create_segments_t)(size_t requested_size, zend_shared_segment ***shared_segments, int *shared_segment_count, char **error_in);
typedef int (*detach_segment_t)(zend_shared_segment *shared_segment);
typedef struct {
create_segments_t create_segments;
detach_segment_t detach_segment;
size_t (*segment_type_size)(void);
} zend_shared_memory_handlers;
typedef struct _handler_entry {
const char *name;
zend_shared_memory_handlers *handler;
} zend_shared_memory_handler_entry;
typedef struct _zend_shared_memory_state {
int *positions; /* current positions for each segment */
2015-02-20 07:31:24 +00:00
size_t shared_free; /* amount of free shared memory */
2013-02-13 12:26:47 +00:00
} zend_shared_memory_state;
typedef struct _zend_smm_shared_globals {
/* Shared Memory Manager */
zend_shared_segment **shared_segments;
/* Number of allocated shared segments */
int shared_segments_count;
/* Amount of free shared memory */
size_t shared_free;
/* Amount of shared memory allocated by garbage */
2014-12-08 12:14:15 +00:00
size_t wasted_shared_memory;
2013-02-13 12:26:47 +00:00
/* No more shared memory flag */
zend_bool memory_exhausted;
/* Saved Shared Allocator State */
zend_shared_memory_state shared_memory_state;
/* Pointer to the application's shared data structures */
void *app_shared_globals;
2019-04-01 07:27:11 +00:00
/* Reserved shared memory */
void *reserved;
size_t reserved_size;
2013-02-13 12:26:47 +00:00
} zend_smm_shared_globals;
extern zend_smm_shared_globals *smm_shared_globals;
#define ZSMMG(element) (smm_shared_globals->element)
#define SHARED_ALLOC_REATTACHED (SUCCESS+1)
2019-04-01 07:27:11 +00:00
int zend_shared_alloc_startup(size_t requested_size, size_t reserved_size);
2013-02-13 12:26:47 +00:00
void zend_shared_alloc_shutdown(void);
/* allocate shared memory block */
2019-04-01 07:27:11 +00:00
void *zend_shared_alloc_pages(size_t requested_size);
2013-02-13 12:26:47 +00:00
void *zend_shared_alloc(size_t size);
/* copy into shared memory */
void *zend_shared_memdup_get_put_free(void *source, size_t size);
void *zend_shared_memdup_put_free(void *source, size_t size);
void *zend_shared_memdup_free(void *source, size_t size);
void *zend_shared_memdup_get_put(void *source, size_t size);
void *zend_shared_memdup_put(void *source, size_t size);
void *zend_shared_memdup(void *source, size_t size);
Immutable clases and op_arrays. Squashed commit of the following: commit cd0c36c3f943849e5b97a8dbe2dd029fbeab3df9 Merge: 4740dabb84 ad6738e886 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Oct 17 14:43:38 2018 +0300 Merge branch 'master' into immutable * master: Remove the "auto" encoding Fixed bug #77025 Add vtbls for EUC-TW encoding commit 4740dabb843c6d4f7f866b4a2456073c9eaf4c77 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Oct 17 14:12:28 2018 +0300 Reverted back ce->iterator_funcs_ptr. Initialize ce->iterator_funcs_ptr fields in immutable classes. commit ad7a78b253be970db70c2251e66f9297d8e7f829 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Oct 17 11:46:30 2018 +0300 Added comment commit 0276ea51875bab37be01a4dc5e5a047c5698c571 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Oct 17 11:42:43 2018 +0300 Added type cast commit c63fc5d5f19c58498108d1698055b2b442227eb3 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Oct 17 11:36:51 2018 +0300 Moved static class members initialization into the proper place. commit b945548e9306b1826c881918858b5e5aa3eb3002 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Oct 17 11:21:03 2018 +0300 Removed redundand assertion commit d5a41088401814c829847db212488f8aae39bcd2 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Oct 17 11:19:13 2018 +0300 Removed duplicate code commit 8dadca8864e66de70a24bdf1181bcf7dd8fb27d7 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Oct 17 11:05:43 2018 +0300 Hide offset encoding magic in ZEND_MAP_PTR_IS_OFFSET(), ZEND_MAP_PTR_OFFSET2PTR() and ZEND_MAP_PTR_PTR2OFFSET() macros. commit 9ef07c88bd76801e2d4fbfeab3ebfd6e6a67ac5f Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Oct 17 10:48:29 2018 +0300 typo commit a06f0f3d3aba53e766046221ee44fb9720389ecc Merge: 94099586ec 3412345ffe Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Oct 17 10:47:07 2018 +0300 Merge branch 'master' into immutable * master: Remove unused variable makefile_am_files Classify object handlers are required/optional Add support for getting SKIP_TAGSTART and SKIP_WHITE options Remove some obsolete config_vars.mk occurrences Remove bsd_converted from .gitignore Remove configuration parser and scanners ignores Remove obsolete buildconf.stamp from .gitignore [ci skip] Add magicdata.patch exception to .gitignore Remove outdated ext/spl/examples items from .gitignore Remove unused test.inc in ext/iconv/tests commit 94099586ec599117581ca01c15b1f6c5f749e23a Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Oct 15 23:34:01 2018 +0300 Immutable clases and op_arrays
2018-10-17 12:52:50 +00:00
void *zend_shared_memdup_arena_put(void *source, size_t size);
void *zend_shared_memdup_arena(void *source, size_t size);
2013-02-13 12:26:47 +00:00
int zend_shared_memdup_size(void *p, size_t size);
int zend_accel_in_shm(void *ptr);
2013-02-13 12:26:47 +00:00
typedef union _align_test {
void *ptr;
double dbl;
2014-08-25 17:24:55 +00:00
zend_long lng;
2013-02-13 12:26:47 +00:00
} align_test;
#if ZEND_GCC_VERSION >= 2000
2015-08-31 10:56:42 +00:00
# define PLATFORM_ALIGNMENT (__alignof__(align_test) < 8 ? 8 : __alignof__(align_test))
2013-02-13 12:26:47 +00:00
#else
# define PLATFORM_ALIGNMENT (sizeof(align_test))
#endif
#define ZEND_ALIGNED_SIZE(size) \
2015-08-31 10:56:42 +00:00
ZEND_MM_ALIGNED_SIZE_EX(size, PLATFORM_ALIGNMENT)
2013-02-13 12:26:47 +00:00
/* exclusive locking */
2014-12-13 22:06:14 +00:00
void zend_shared_alloc_lock(void);
void zend_shared_alloc_unlock(void); /* returns the allocated size during lock..unlock */
void zend_shared_alloc_safe_unlock(void);
2013-02-13 12:26:47 +00:00
/* old/new mapping functions */
void zend_shared_alloc_init_xlat_table(void);
void zend_shared_alloc_destroy_xlat_table(void);
2013-02-13 12:26:47 +00:00
void zend_shared_alloc_clear_xlat_table(void);
Immutable clases and op_arrays. Squashed commit of the following: commit cd0c36c3f943849e5b97a8dbe2dd029fbeab3df9 Merge: 4740dabb84 ad6738e886 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Oct 17 14:43:38 2018 +0300 Merge branch 'master' into immutable * master: Remove the "auto" encoding Fixed bug #77025 Add vtbls for EUC-TW encoding commit 4740dabb843c6d4f7f866b4a2456073c9eaf4c77 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Oct 17 14:12:28 2018 +0300 Reverted back ce->iterator_funcs_ptr. Initialize ce->iterator_funcs_ptr fields in immutable classes. commit ad7a78b253be970db70c2251e66f9297d8e7f829 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Oct 17 11:46:30 2018 +0300 Added comment commit 0276ea51875bab37be01a4dc5e5a047c5698c571 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Oct 17 11:42:43 2018 +0300 Added type cast commit c63fc5d5f19c58498108d1698055b2b442227eb3 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Oct 17 11:36:51 2018 +0300 Moved static class members initialization into the proper place. commit b945548e9306b1826c881918858b5e5aa3eb3002 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Oct 17 11:21:03 2018 +0300 Removed redundand assertion commit d5a41088401814c829847db212488f8aae39bcd2 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Oct 17 11:19:13 2018 +0300 Removed duplicate code commit 8dadca8864e66de70a24bdf1181bcf7dd8fb27d7 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Oct 17 11:05:43 2018 +0300 Hide offset encoding magic in ZEND_MAP_PTR_IS_OFFSET(), ZEND_MAP_PTR_OFFSET2PTR() and ZEND_MAP_PTR_PTR2OFFSET() macros. commit 9ef07c88bd76801e2d4fbfeab3ebfd6e6a67ac5f Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Oct 17 10:48:29 2018 +0300 typo commit a06f0f3d3aba53e766046221ee44fb9720389ecc Merge: 94099586ec 3412345ffe Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Oct 17 10:47:07 2018 +0300 Merge branch 'master' into immutable * master: Remove unused variable makefile_am_files Classify object handlers are required/optional Add support for getting SKIP_TAGSTART and SKIP_WHITE options Remove some obsolete config_vars.mk occurrences Remove bsd_converted from .gitignore Remove configuration parser and scanners ignores Remove obsolete buildconf.stamp from .gitignore [ci skip] Add magicdata.patch exception to .gitignore Remove outdated ext/spl/examples items from .gitignore Remove unused test.inc in ext/iconv/tests commit 94099586ec599117581ca01c15b1f6c5f749e23a Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Oct 15 23:34:01 2018 +0300 Immutable clases and op_arrays
2018-10-17 12:52:50 +00:00
uint32_t zend_shared_alloc_checkpoint_xlat_table(void);
void zend_shared_alloc_restore_xlat_table(uint32_t checkpoint);
2013-02-13 12:26:47 +00:00
void zend_shared_alloc_register_xlat_entry(const void *old, const void *new);
void *zend_shared_alloc_get_xlat_entry(const void *old);
size_t zend_shared_alloc_get_free_memory(void);
void zend_shared_alloc_save_state(void);
void zend_shared_alloc_restore_state(void);
2013-02-25 12:06:38 +00:00
const char *zend_accel_get_shared_model(void);
2013-02-13 12:26:47 +00:00
/* memory write protection */
2014-12-13 22:06:14 +00:00
void zend_accel_shared_protect(int mode);
2013-02-13 12:26:47 +00:00
#ifdef USE_MMAP
extern zend_shared_memory_handlers zend_alloc_mmap_handlers;
#endif
#ifdef USE_SHM
extern zend_shared_memory_handlers zend_alloc_shm_handlers;
#endif
#ifdef USE_SHM_OPEN
extern zend_shared_memory_handlers zend_alloc_posix_handlers;
#endif
#ifdef ZEND_WIN32
extern zend_shared_memory_handlers zend_alloc_win32_handlers;
2013-02-25 12:06:38 +00:00
void zend_shared_alloc_create_lock(void);
void zend_shared_alloc_lock_win32(void);
void zend_shared_alloc_unlock_win32(void);
2013-02-13 12:26:47 +00:00
#endif
#endif /* ZEND_SHARED_ALLOC_H */