Module Name: src Committed By: alnsn Date: Mon Oct 1 21:34:03 UTC 2012
Modified Files: src/external/bsd/sljit/dist/sljit_src: sljitConfig.h sljitConfigInternal.h sljitUtils.c Log Message: Adapt code to compile with -D_KERNEL. To generate a diff of this commit: cvs rdiff -u -r1.1.1.1 -r1.2 \ src/external/bsd/sljit/dist/sljit_src/sljitConfig.h \ src/external/bsd/sljit/dist/sljit_src/sljitConfigInternal.h \ src/external/bsd/sljit/dist/sljit_src/sljitUtils.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/external/bsd/sljit/dist/sljit_src/sljitConfig.h diff -u src/external/bsd/sljit/dist/sljit_src/sljitConfig.h:1.1.1.1 src/external/bsd/sljit/dist/sljit_src/sljitConfig.h:1.2 --- src/external/bsd/sljit/dist/sljit_src/sljitConfig.h:1.1.1.1 Mon Oct 1 21:16:45 2012 +++ src/external/bsd/sljit/dist/sljit_src/sljitConfig.h Mon Oct 1 21:34:03 2012 @@ -47,6 +47,7 @@ /* #define SLJIT_CONFIG_PPC_32 1 */ /* #define SLJIT_CONFIG_PPC_64 1 */ /* #define SLJIT_CONFIG_MIPS_32 1 */ +#include <machine/sljitarch.h> /* #define SLJIT_CONFIG_AUTO 1 */ /* #define SLJIT_CONFIG_UNSUPPORTED 1 */ @@ -88,20 +89,28 @@ If SLJIT_EXECUTABLE_ALLOCATOR is not defined, the application should define both SLJIT_MALLOC_EXEC and SLJIT_FREE_EXEC. */ #ifndef SLJIT_EXECUTABLE_ALLOCATOR +#ifdef _KERNEL +#define SLJIT_EXECUTABLE_ALLOCATOR 0 +#define SLJIT_MALLOC_EXEC(sz) SLJIT_MALLOC(sz) +#define SLJIT_FREE_EXEC(ptr) SLJIT_FREE(ptr) +#else /* Enabled by default. */ #define SLJIT_EXECUTABLE_ALLOCATOR 1 #endif +#endif /* Debug checks (assertions, etc.). */ #ifndef SLJIT_DEBUG -/* Enabled by default */ +#if defined(_KERNEL) && defined(DIAGNOSTIC) #define SLJIT_DEBUG 1 +#else +#define SLJIT_DEBUG 0 +#endif #endif /* Verbose operations */ #ifndef SLJIT_VERBOSE -/* Enabled by default */ -#define SLJIT_VERBOSE 1 +#define SLJIT_VERBOSE 0 #endif /* See the beginning of sljitConfigInternal.h */ Index: src/external/bsd/sljit/dist/sljit_src/sljitConfigInternal.h diff -u src/external/bsd/sljit/dist/sljit_src/sljitConfigInternal.h:1.1.1.1 src/external/bsd/sljit/dist/sljit_src/sljitConfigInternal.h:1.2 --- src/external/bsd/sljit/dist/sljit_src/sljitConfigInternal.h:1.1.1.1 Mon Oct 1 21:16:44 2012 +++ src/external/bsd/sljit/dist/sljit_src/sljitConfigInternal.h Mon Oct 1 21:34:03 2012 @@ -123,9 +123,14 @@ #if !(defined SLJIT_STD_MACROS_DEFINED && SLJIT_STD_MACROS_DEFINED) +#ifdef _KERNEL +#include <sys/cdefs.h> +#include <sys/malloc.h> +#else /* These libraries are needed for the macros below. */ #include <stdlib.h> #include <string.h> +#endif #endif /* STD_MACROS_DEFINED */ @@ -136,12 +141,20 @@ */ #ifndef SLJIT_MALLOC +#ifdef _KERNEL +#define SLJIT_MALLOC(size) malloc((size), M_TEMP, M_WAITOK) +#else #define SLJIT_MALLOC(size) malloc(size) #endif +#endif #ifndef SLJIT_FREE +#ifdef _KERNEL +#define SLJIT_FREE(ptr) free((ptr), M_TEMP) +#else #define SLJIT_FREE(ptr) free(ptr) #endif +#endif #ifndef SLJIT_MEMMOVE #define SLJIT_MEMMOVE(dest, src, len) memmove(dest, src, len) @@ -216,9 +229,18 @@ #else +#ifdef _KERNEL +/* + * SLJIT_CACHE_FLUSH can be defined in <machine/sljitarch.h> + */ +#ifndef SLJIT_CACHE_FLUSH +#define SLJIT_CACHE_FLUSH(from, to) +#endif +#else /* Calls __ARM_NR_cacheflush on ARM-Linux. */ #define SLJIT_CACHE_FLUSH(from, to) \ __clear_cache((char*)(from), (char*)(to)) +#endif #endif @@ -378,8 +400,12 @@ SLJIT_API_FUNC_ATTRIBUTE void sljit_free #endif #if (defined SLJIT_DEBUG && SLJIT_DEBUG) || (defined SLJIT_VERBOSE && SLJIT_VERBOSE) +#ifdef _KERNEL +#include <sys/systm.h> +#else #include <stdio.h> #endif +#endif #if (defined SLJIT_DEBUG && SLJIT_DEBUG) Index: src/external/bsd/sljit/dist/sljit_src/sljitUtils.c diff -u src/external/bsd/sljit/dist/sljit_src/sljitUtils.c:1.1.1.1 src/external/bsd/sljit/dist/sljit_src/sljitUtils.c:1.2 --- src/external/bsd/sljit/dist/sljit_src/sljitUtils.c:1.1.1.1 Mon Oct 1 21:16:42 2012 +++ src/external/bsd/sljit/dist/sljit_src/sljitUtils.c Mon Oct 1 21:34:03 2012 @@ -104,7 +104,49 @@ SLJIT_API_FUNC_ATTRIBUTE void SLJIT_CALL #endif /* SLJIT_UTIL_GLOBAL_LOCK */ -#else /* _WIN32 */ +#elif defined(_KERNEL) /* _WIN32 */ + +#include <sys/mutex.h> + +#if (defined SLJIT_EXECUTABLE_ALLOCATOR && SLJIT_EXECUTABLE_ALLOCATOR) + +/* + * Defined in sys/modules/sljit/sljit_mod.c. + */ +extern kmutex_t sljit_allocator_mutex; + +static SLJIT_INLINE void allocator_grab_lock(void) +{ + mutex_enter(&sljit_allocator_mutex); +} + +static SLJIT_INLINE void allocator_release_lock(void) +{ + mutex_exit(&sljit_allocator_mutex); +} + +#endif /* SLJIT_EXECUTABLE_ALLOCATOR */ + +#if (defined SLJIT_UTIL_GLOBAL_LOCK && SLJIT_UTIL_GLOBAL_LOCK) + +/* + * Defined in sys/modules/sljit/sljit_mod.c. + */ +extern kmutex_t sljit_global_mutex; + +SLJIT_API_FUNC_ATTRIBUTE void SLJIT_CALL sljit_grab_lock(void) +{ + mutex_enter(&sljit_global_mutex); +} + +SLJIT_API_FUNC_ATTRIBUTE void SLJIT_CALL sljit_release_lock(void) +{ + mutex_exit(&sljit_global_mutex); +} + +#endif /* SLJIT_UTIL_GLOBAL_LOCK */ + +#else /* _KERNEL */ #include <pthread.h> @@ -148,7 +190,10 @@ SLJIT_API_FUNC_ATTRIBUTE void SLJIT_CALL #if (defined SLJIT_UTIL_STACK && SLJIT_UTIL_STACK) -#ifdef _WIN32 +#ifdef _KERNEL +#include <sys/param.h> +#include <uvm/uvm.h> +#elif defined(_WIN32) #include "windows.h" #else #include <sys/mman.h> @@ -168,6 +213,9 @@ SLJIT_API_FUNC_ATTRIBUTE struct sljit_st #ifdef _WIN32 SYSTEM_INFO si; #endif +#ifdef _KERNEL + vaddr_t v; +#endif if (limit > max_limit || limit < 1) return NULL; @@ -179,7 +227,12 @@ SLJIT_API_FUNC_ATTRIBUTE struct sljit_st } #else if (!sljit_page_align) { - sljit_page_align = sysconf(_SC_PAGESIZE); + sljit_page_align = +#ifdef _KERNEL + PAGE_SIZE; +#else + sysconf(_SC_PAGESIZE); +#endif /* Should never happen. */ if (sljit_page_align < 0) sljit_page_align = 4096; @@ -194,7 +247,17 @@ SLJIT_API_FUNC_ATTRIBUTE struct sljit_st if (!stack) return NULL; -#ifdef _WIN32 +#ifdef _KERNEL + v = uvm_km_alloc(kernel_map, max_limit, PAGE_SIZE, UVM_KMF_WIRED|UVM_KMF_ZERO); + base.ptr = (void *)v; + if (base.ptr == NULL) { + SLJIT_FREE(stack); + return NULL; + } + stack->base = base.uw; + stack->limit = stack->base + limit; + stack->max_limit = stack->base + max_limit; +#elif defined(_WIN32) base.ptr = VirtualAlloc(0, max_limit, MEM_RESERVE, PAGE_READWRITE); if (!base.ptr) { SLJIT_FREE(stack); @@ -225,7 +288,10 @@ SLJIT_API_FUNC_ATTRIBUTE struct sljit_st SLJIT_API_FUNC_ATTRIBUTE void SLJIT_CALL sljit_free_stack(struct sljit_stack* stack) { -#ifdef _WIN32 +#ifdef _KERNEL + uvm_km_free(kernel_map, (vaddr_t)stack->base, + stack->max_limit - stack->base, UVM_KMF_WIRED); +#elif defined(_WIN32) VirtualFree((void*)stack->base, 0, MEM_RELEASE); #else munmap((void*)stack->base, stack->max_limit - stack->base);