diff options
author | David CARLIER <devnexen@gmail.com> | 2021-01-20 20:03:56 +0000 |
---|---|---|
committer | Nikita Popov <nikita.ppv@gmail.com> | 2021-01-26 10:51:33 +0100 |
commit | 4414fd93d06490e726dc04814ba412822170b712 (patch) | |
tree | 4405f0a4c557dd611e7a4aa462425263193a039b | |
parent | 5a0e4067b606d0d1b1b8c1825b5397abbfd718d4 (diff) | |
download | php-git-4414fd93d06490e726dc04814ba412822170b712.tar.gz |
Distinguishing opcache SHM on stats tools for Mac
Closes GH-6628.
-rw-r--r-- | ext/opcache/shared_alloc_mmap.c | 22 |
1 files changed, 15 insertions, 7 deletions
diff --git a/ext/opcache/shared_alloc_mmap.c b/ext/opcache/shared_alloc_mmap.c index 3d2884e948..389c79114a 100644 --- a/ext/opcache/shared_alloc_mmap.c +++ b/ext/opcache/shared_alloc_mmap.c @@ -29,6 +29,10 @@ #include <stdlib.h> #include <sys/mman.h> +#ifdef __APPLE__ +#include <mach/vm_statistics.h> +#endif + #if defined(MAP_ANON) && !defined(MAP_ANONYMOUS) # define MAP_ANONYMOUS MAP_ANON #endif @@ -39,10 +43,14 @@ static int create_segments(size_t requested_size, zend_shared_segment ***shared_segments_p, int *shared_segments_count, char **error_in) { zend_shared_segment *shared_segment; - int flags = PROT_READ | PROT_WRITE; + int flags = PROT_READ | PROT_WRITE, fd = -1; void *p; #ifdef PROT_MPROTECT - flags |= PROT_MPROTECT(PROT_EXEC); + flags |= PROT_MPROTECT(PROT_EXEC); +#endif +#ifdef VM_MAKE_TAG + /* allows tracking segments via tools such as vmmap */ + fd = VM_MAKE_TAG(251); #endif #ifdef MAP_HUGETLB size_t huge_page_size = 2 * 1024 * 1024; @@ -62,7 +70,7 @@ static int create_segments(size_t requested_size, zend_shared_segment ***shared_ /* to got HUGE PAGES in low 32-bit address we have to reserve address space and then remap it using MAP_HUGETLB */ - p = mmap(NULL, requested_size, flags, MAP_SHARED|MAP_ANONYMOUS|MAP_32BIT, -1, 0); + p = mmap(NULL, requested_size, flags, MAP_SHARED|MAP_ANONYMOUS|MAP_32BIT, fd, 0); if (p != MAP_FAILED) { munmap(p, requested_size); p = (void*)(ZEND_MM_ALIGNED_SIZE_EX((ptrdiff_t)p, huge_page_size)); @@ -70,26 +78,26 @@ static int create_segments(size_t requested_size, zend_shared_segment ***shared_ if (p != MAP_FAILED) { goto success; } else { - p = mmap(NULL, requested_size, flags, MAP_SHARED|MAP_ANONYMOUS|MAP_32BIT, -1, 0); + p = mmap(NULL, requested_size, flags, MAP_SHARED|MAP_ANONYMOUS|MAP_32BIT, fd, 0); if (p != MAP_FAILED) { goto success; } } } # endif - p = mmap(0, requested_size, flags, MAP_SHARED|MAP_ANONYMOUS|MAP_HUGETLB, -1, 0); + p = mmap(0, requested_size, flags, MAP_SHARED|MAP_ANONYMOUS|MAP_HUGETLB, fd, 0); if (p != MAP_FAILED) { goto success; } } #elif defined(PREFER_MAP_32BIT) && defined(__x86_64__) && defined(MAP_32BIT) - p = mmap(NULL, requested_size, flags, MAP_SHARED|MAP_ANONYMOUS|MAP_32BIT, -1, 0); + p = mmap(NULL, requested_size, flags, MAP_SHARED|MAP_ANONYMOUS|MAP_32BIT, fd, 0); if (p != MAP_FAILED) { goto success; } #endif - p = mmap(0, requested_size, flags, MAP_SHARED|MAP_ANONYMOUS, -1, 0); + p = mmap(0, requested_size, flags, MAP_SHARED|MAP_ANONYMOUS, fd, 0); if (p == MAP_FAILED) { *error_in = "mmap"; return ALLOC_FAILURE; |