Support of xnu memory allocator
diff --git a/cs.c b/cs.c
index 9d745cf..5f75557 100644
--- a/cs.c
+++ b/cs.c
@@ -83,12 +83,28 @@
 unsigned int all_arch = 0;
 
 #ifdef CAPSTONE_USE_SYS_DYN_MEM
+#ifndef CAPSTONE_HAS_OSXKERNEL
 cs_malloc_t cs_mem_malloc = malloc;
 cs_calloc_t cs_mem_calloc = calloc;
 cs_realloc_t cs_mem_realloc = realloc;
 cs_free_t cs_mem_free = free;
 cs_vsnprintf_t cs_vsnprintf = vsnprintf;
 #else
+extern void* kern_os_malloc(size_t size);
+extern void kern_os_free(void* addr);
+extern void* kern_os_realloc(void* addr, size_t nsize);
+
+static void* kern_os_calloc(size_t num, size_t size) {
+	return kern_os_malloc(num * size); // malloc bzeroes the buffer
+}
+
+cs_malloc_t cs_mem_malloc = kern_os_malloc;
+cs_calloc_t cs_mem_calloc = kern_os_calloc;
+cs_realloc_t cs_mem_realloc = kern_os_realloc;
+cs_free_t cs_mem_free = kern_os_free;
+cs_vsnprintf_t cs_vsnprintf = vsnprintf;
+#endif
+#else
 cs_malloc_t cs_mem_malloc = NULL;
 cs_calloc_t cs_mem_calloc = NULL;
 cs_realloc_t cs_mem_realloc = NULL;