@@ -56,9 +56,16 @@ jit_alloc(size_t size)
56
56
int flags = MEM_COMMIT | MEM_RESERVE ;
57
57
unsigned char * memory = VirtualAlloc (NULL , size , flags , PAGE_READWRITE );
58
58
int failed = memory == NULL ;
59
+ #elif defined(__APPLE__ ) && defined(__aarch64__ )
60
+ int flags = MAP_ANONYMOUS | MAP_PRIVATE | MAP_JIT ;
61
+ int prot = PROT_READ | PROT_WRITE | PROT_EXEC ;
62
+ unsigned char * memory = mmap (NULL , size , prot , flags , -1 , 0 );
63
+ int failed = memory == MAP_FAILED ;
64
+ pthread_jit_write_protect_np (0 );
59
65
#else
60
66
int flags = MAP_ANONYMOUS | MAP_PRIVATE ;
61
- unsigned char * memory = mmap (NULL , size , PROT_READ | PROT_WRITE , flags , -1 , 0 );
67
+ int prot = PROT_READ | PROT_WRITE ;
68
+ unsigned char * memory = mmap (NULL , size , prot , flags , -1 , 0 );
62
69
int failed = memory == MAP_FAILED ;
63
70
#endif
64
71
if (failed ) {
@@ -101,6 +108,10 @@ mark_executable(unsigned char *memory, size_t size)
101
108
}
102
109
int old ;
103
110
int failed = !VirtualProtect (memory , size , PAGE_EXECUTE_READ , & old );
111
+ #elif defined(__APPLE__ ) && defined(__aarch64__ )
112
+ int failed = 0 ;
113
+ __builtin___clear_cache ((char * )memory , (char * )memory + size );
114
+ pthread_jit_write_protect_np (1 );
104
115
#else
105
116
__builtin___clear_cache ((char * )memory , (char * )memory + size );
106
117
int failed = mprotect (memory , size , PROT_EXEC | PROT_READ );
0 commit comments