Skip to content

Commit 4414fd9

Browse files
devnexennikic
authored andcommitted
Distinguishing opcache SHM on stats tools for Mac
Closes GH-6628.
1 parent 5a0e406 commit 4414fd9

File tree

1 file changed

+15
-7
lines changed

1 file changed

+15
-7
lines changed

ext/opcache/shared_alloc_mmap.c

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,10 @@
2929
#include <stdlib.h>
3030
#include <sys/mman.h>
3131

32+
#ifdef __APPLE__
33+
#include <mach/vm_statistics.h>
34+
#endif
35+
3236
#if defined(MAP_ANON) && !defined(MAP_ANONYMOUS)
3337
# define MAP_ANONYMOUS MAP_ANON
3438
#endif
@@ -39,10 +43,14 @@
3943
static int create_segments(size_t requested_size, zend_shared_segment ***shared_segments_p, int *shared_segments_count, char **error_in)
4044
{
4145
zend_shared_segment *shared_segment;
42-
int flags = PROT_READ | PROT_WRITE;
46+
int flags = PROT_READ | PROT_WRITE, fd = -1;
4347
void *p;
4448
#ifdef PROT_MPROTECT
45-
flags |= PROT_MPROTECT(PROT_EXEC);
49+
flags |= PROT_MPROTECT(PROT_EXEC);
50+
#endif
51+
#ifdef VM_MAKE_TAG
52+
/* allows tracking segments via tools such as vmmap */
53+
fd = VM_MAKE_TAG(251);
4654
#endif
4755
#ifdef MAP_HUGETLB
4856
size_t huge_page_size = 2 * 1024 * 1024;
@@ -62,34 +70,34 @@ static int create_segments(size_t requested_size, zend_shared_segment ***shared_
6270
/* to got HUGE PAGES in low 32-bit address we have to reserve address
6371
space and then remap it using MAP_HUGETLB */
6472

65-
p = mmap(NULL, requested_size, flags, MAP_SHARED|MAP_ANONYMOUS|MAP_32BIT, -1, 0);
73+
p = mmap(NULL, requested_size, flags, MAP_SHARED|MAP_ANONYMOUS|MAP_32BIT, fd, 0);
6674
if (p != MAP_FAILED) {
6775
munmap(p, requested_size);
6876
p = (void*)(ZEND_MM_ALIGNED_SIZE_EX((ptrdiff_t)p, huge_page_size));
6977
p = mmap(p, requested_size, flags, MAP_SHARED|MAP_ANONYMOUS|MAP_32BIT|MAP_HUGETLB|MAP_FIXED, -1, 0);
7078
if (p != MAP_FAILED) {
7179
goto success;
7280
} else {
73-
p = mmap(NULL, requested_size, flags, MAP_SHARED|MAP_ANONYMOUS|MAP_32BIT, -1, 0);
81+
p = mmap(NULL, requested_size, flags, MAP_SHARED|MAP_ANONYMOUS|MAP_32BIT, fd, 0);
7482
if (p != MAP_FAILED) {
7583
goto success;
7684
}
7785
}
7886
}
7987
# endif
80-
p = mmap(0, requested_size, flags, MAP_SHARED|MAP_ANONYMOUS|MAP_HUGETLB, -1, 0);
88+
p = mmap(0, requested_size, flags, MAP_SHARED|MAP_ANONYMOUS|MAP_HUGETLB, fd, 0);
8189
if (p != MAP_FAILED) {
8290
goto success;
8391
}
8492
}
8593
#elif defined(PREFER_MAP_32BIT) && defined(__x86_64__) && defined(MAP_32BIT)
86-
p = mmap(NULL, requested_size, flags, MAP_SHARED|MAP_ANONYMOUS|MAP_32BIT, -1, 0);
94+
p = mmap(NULL, requested_size, flags, MAP_SHARED|MAP_ANONYMOUS|MAP_32BIT, fd, 0);
8795
if (p != MAP_FAILED) {
8896
goto success;
8997
}
9098
#endif
9199

92-
p = mmap(0, requested_size, flags, MAP_SHARED|MAP_ANONYMOUS, -1, 0);
100+
p = mmap(0, requested_size, flags, MAP_SHARED|MAP_ANONYMOUS, fd, 0);
93101
if (p == MAP_FAILED) {
94102
*error_in = "mmap";
95103
return ALLOC_FAILURE;

0 commit comments

Comments
 (0)