Skip to content

Commit 95d8e05

Browse files
committed
Merge branch 'PHP-7.3'
* PHP-7.3: Respect EG(vm_stack_page_size)
2 parents cbf642b + b45774e commit 95d8e05

File tree

2 files changed

+14
-3
lines changed

2 files changed

+14
-3
lines changed

Zend/zend_execute.c

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -170,9 +170,9 @@ ZEND_API const zend_internal_function zend_pass_function = {
170170

171171
#define ZEND_VM_STACK_PAGE_SIZE (ZEND_VM_STACK_PAGE_SLOTS * sizeof(zval))
172172

173-
#define ZEND_VM_STACK_PAGE_ALIGNED_SIZE(size) \
173+
#define ZEND_VM_STACK_PAGE_ALIGNED_SIZE(size, page_size) \
174174
(((size) + ZEND_VM_STACK_HEADER_SLOTS * sizeof(zval) \
175-
+ (ZEND_VM_STACK_PAGE_SIZE - 1)) & ~(ZEND_VM_STACK_PAGE_SIZE - 1))
175+
+ ((page_size) - 1)) & ~((page_size) - 1))
176176

177177
static zend_always_inline zend_vm_stack zend_vm_stack_new_page(size_t size, zend_vm_stack prev) {
178178
zend_vm_stack page = (zend_vm_stack)emalloc(size);
@@ -191,6 +191,16 @@ ZEND_API void zend_vm_stack_init(void)
191191
EG(vm_stack_end) = EG(vm_stack)->end;
192192
}
193193

194+
ZEND_API void zend_vm_stack_init_ex(size_t page_size)
195+
{
196+
/* page_size must be a power of 2 */
197+
ZEND_ASSERT(page_size > 0 && (page_size & (page_size - 1)) == 0);
198+
EG(vm_stack_page_size) = page_size;
199+
EG(vm_stack) = zend_vm_stack_new_page(page_size, NULL);
200+
EG(vm_stack_top) = EG(vm_stack)->top;
201+
EG(vm_stack_end) = EG(vm_stack)->end;
202+
}
203+
194204
ZEND_API void zend_vm_stack_destroy(void)
195205
{
196206
zend_vm_stack stack = EG(vm_stack);
@@ -211,7 +221,7 @@ ZEND_API void* zend_vm_stack_extend(size_t size)
211221
stack->top = EG(vm_stack_top);
212222
EG(vm_stack) = stack = zend_vm_stack_new_page(
213223
EXPECTED(size < EG(vm_stack_page_size) - (ZEND_VM_STACK_HEADER_SLOTS * sizeof(zval))) ?
214-
EG(vm_stack_page_size) : ZEND_VM_STACK_PAGE_ALIGNED_SIZE(size),
224+
EG(vm_stack_page_size) : ZEND_VM_STACK_PAGE_ALIGNED_SIZE(size, EG(vm_stack_page_size)),
215225
stack);
216226
ptr = stack->top;
217227
EG(vm_stack_top) = (void*)(((char*)ptr) + size);

Zend/zend_execute.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -168,6 +168,7 @@ struct _zend_vm_stack {
168168
#endif
169169

170170
ZEND_API void zend_vm_stack_init(void);
171+
ZEND_API void zend_vm_stack_init_ex(size_t page_size);
171172
ZEND_API void zend_vm_stack_destroy(void);
172173
ZEND_API void* zend_vm_stack_extend(size_t size);
173174

0 commit comments

Comments
 (0)