OS X kernel support (see https://github.com/aquynh/capstone/pull/528)
diff --git a/Makefile b/Makefile
index a646cb0..0599ac3 100644
--- a/Makefile
+++ b/Makefile
@@ -45,6 +45,12 @@
ifeq ($(CAPSTONE_HAS_OSXKERNEL), yes)
CFLAGS += -DCAPSTONE_HAS_OSXKERNEL
+SDKROOT ?= $(shell xcodebuild -version -sdk macosx Path)
+CFLAGS += -mmacosx-version-min=10.5 \
+ -isysroot$(SDKROOT) \
+ -I$(SDKROOT)/System/Library/Frameworks/Kernel.framework/Headers \
+ -mkernel \
+ -fno-builtin
endif
CFLAGS += $(foreach arch,$(LIBARCHS),-arch $(arch))
diff --git a/config.mk b/config.mk
index a757904..e529cdc 100644
--- a/config.mk
+++ b/config.mk
@@ -73,3 +73,10 @@
# a shared library.
CAPSTONE_SHARED ?= yes
+
+################################################################################
+# Change 'CAPSTONE_HAS_OSXKERNEL = no' to 'CAPSTONE_HAS_OSXKERNEL = yes' to
+# enable OS X kernel embedding support. If 'CAPSTONE_USE_SYS_DYN_MEM = yes',
+# then kern_os_* functions are used for memory management.
+
+CAPSTONE_HAS_OSXKERNEL ?= no
diff --git a/cs.c b/cs.c
index cd10d80..574b52f 100644
--- a/cs.c
+++ b/cs.c
@@ -79,12 +79,29 @@
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* cs_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 = cs_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;
diff --git a/make.sh b/make.sh
index cc912f7..1a36589 100755
--- a/make.sh
+++ b/make.sh
@@ -169,5 +169,6 @@
"ios_armv7" ) build_iOS armv7 $*;;
"ios_armv7s" ) build_iOS armv7s $*;;
"ios_arm64" ) build_iOS arm64 $*;;
+ "osx-kernel" ) CAPSTONE_USE_SYS_DYN_MEM=yes CAPSTONE_HAS_OSXKERNEL=yes CAPSTONE_ARCHS=x86 CAPSTONE_SHARED=no CAPSTONE_BUILD_CORE_ONLY=yes build $*;;
* ) echo "Usage: make.sh [nix32|cross-win32|cross-win64|cygwin-mingw32|cygwin-mingw64|ios|ios_armv7|ios_armv7s|ios_arm64|cross-android arm|cross-android arm64|clang|gcc|install|uninstall]"; exit 1;;
esac