mirror of
https://github.com/php/php-src.git
synced 2025-08-15 21:48:51 +02:00
Respect EG(vm_stack_page_size)
This commit is contained in:
parent
1ce7cbe590
commit
b45774eed0
2 changed files with 14 additions and 3 deletions
|
@ -170,9 +170,9 @@ ZEND_API const zend_internal_function zend_pass_function = {
|
|||
|
||||
#define ZEND_VM_STACK_PAGE_SIZE (ZEND_VM_STACK_PAGE_SLOTS * sizeof(zval))
|
||||
|
||||
#define ZEND_VM_STACK_PAGE_ALIGNED_SIZE(size) \
|
||||
#define ZEND_VM_STACK_PAGE_ALIGNED_SIZE(size, page_size) \
|
||||
(((size) + ZEND_VM_STACK_HEADER_SLOTS * sizeof(zval) \
|
||||
+ (ZEND_VM_STACK_PAGE_SIZE - 1)) & ~(ZEND_VM_STACK_PAGE_SIZE - 1))
|
||||
+ ((page_size) - 1)) & ~((page_size) - 1))
|
||||
|
||||
static zend_always_inline zend_vm_stack zend_vm_stack_new_page(size_t size, zend_vm_stack prev) {
|
||||
zend_vm_stack page = (zend_vm_stack)emalloc(size);
|
||||
|
@ -192,6 +192,16 @@ ZEND_API void zend_vm_stack_init(void)
|
|||
EG(vm_stack_end) = EG(vm_stack)->end;
|
||||
}
|
||||
|
||||
ZEND_API void zend_vm_stack_init_ex(size_t page_size)
|
||||
{
|
||||
/* page_size must be a power of 2 */
|
||||
ZEND_ASSERT(page_size > 0 && (page_size & (page_size - 1)) == 0);
|
||||
EG(vm_stack_page_size) = page_size;
|
||||
EG(vm_stack) = zend_vm_stack_new_page(page_size, NULL);
|
||||
EG(vm_stack_top) = EG(vm_stack)->top;
|
||||
EG(vm_stack_end) = EG(vm_stack)->end;
|
||||
}
|
||||
|
||||
ZEND_API void zend_vm_stack_destroy(void)
|
||||
{
|
||||
zend_vm_stack stack = EG(vm_stack);
|
||||
|
@ -212,7 +222,7 @@ ZEND_API void* zend_vm_stack_extend(size_t size)
|
|||
stack->top = EG(vm_stack_top);
|
||||
EG(vm_stack) = stack = zend_vm_stack_new_page(
|
||||
EXPECTED(size < EG(vm_stack_page_size) - (ZEND_VM_STACK_HEADER_SLOTS * sizeof(zval))) ?
|
||||
EG(vm_stack_page_size) : ZEND_VM_STACK_PAGE_ALIGNED_SIZE(size),
|
||||
EG(vm_stack_page_size) : ZEND_VM_STACK_PAGE_ALIGNED_SIZE(size, EG(vm_stack_page_size)),
|
||||
stack);
|
||||
ptr = stack->top;
|
||||
EG(vm_stack_top) = (void*)(((char*)ptr) + size);
|
||||
|
|
|
@ -168,6 +168,7 @@ struct _zend_vm_stack {
|
|||
#endif
|
||||
|
||||
ZEND_API void zend_vm_stack_init(void);
|
||||
ZEND_API void zend_vm_stack_init_ex(size_t page_size);
|
||||
ZEND_API void zend_vm_stack_destroy(void);
|
||||
ZEND_API void* zend_vm_stack_extend(size_t size);
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue