1 /* 2 * Stack-less Just-In-Time compiler 3 * 4 * Copyright Zoltan Herczeg (hzmester@freemail.hu). All rights reserved. 5 * 6 * Redistribution and use in source and binary forms, with or without modification, are 7 * permitted provided that the following conditions are met: 8 * 9 * 1. Redistributions of source code must retain the above copyright notice, this list of 10 * conditions and the following disclaimer. 11 * 12 * 2. Redistributions in binary form must reproduce the above copyright notice, this list 13 * of conditions and the following disclaimer in the documentation and/or other materials 14 * provided with the distribution. 15 * 16 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER(S) AND CONTRIBUTORS ``AS IS'' AND ANY 17 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 18 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT 19 * SHALL THE COPYRIGHT HOLDER(S) OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 20 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED 21 * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR 22 * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 23 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN 24 * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 25 */ 26 27 #ifndef SLJIT_CONFIG_H_ 28 #define SLJIT_CONFIG_H_ 29 30 #ifdef __cplusplus 31 extern "C" { 32 #endif 33 34 /* 35 This file contains the basic configuration options for the SLJIT compiler 36 and their default values. These options can be overridden in the 37 sljitConfigPre.h header file when SLJIT_HAVE_CONFIG_PRE is set to a 38 non-zero value. 39 */ 40 41 /* --------------------------------------------------------------------- */ 42 /* Utilities */ 43 /* --------------------------------------------------------------------- */ 44 45 /* Implements a stack like data structure (by using mmap / VirtualAlloc */ 46 /* or a custom allocator). */ 47 #ifndef SLJIT_UTIL_STACK 48 /* Enabled by default */ 49 #define SLJIT_UTIL_STACK 1 50 #endif 51 52 /* Uses user provided allocator to allocate the stack (see SLJIT_UTIL_STACK) */ 53 #ifndef SLJIT_UTIL_SIMPLE_STACK_ALLOCATION 54 /* Disabled by default */ 55 #define SLJIT_UTIL_SIMPLE_STACK_ALLOCATION 0 56 #endif 57 58 /* Single threaded application. Does not require any locks. */ 59 #ifndef SLJIT_SINGLE_THREADED 60 /* Disabled by default. */ 61 #define SLJIT_SINGLE_THREADED 0 62 #endif 63 64 /* --------------------------------------------------------------------- */ 65 /* Configuration */ 66 /* --------------------------------------------------------------------- */ 67 68 /* If SLJIT_STD_MACROS_DEFINED is not defined, the application should 69 define SLJIT_MALLOC, SLJIT_FREE, SLJIT_MEMCPY, and NULL. */ 70 #ifndef SLJIT_STD_MACROS_DEFINED 71 /* Disabled by default. */ 72 #define SLJIT_STD_MACROS_DEFINED 0 73 #endif 74 75 /* Executable code allocation: 76 If SLJIT_EXECUTABLE_ALLOCATOR is not defined, the application should 77 define SLJIT_MALLOC_EXEC and SLJIT_FREE_EXEC. 78 Optionally, depending on the implementation used for the allocator, 79 SLJIT_EXEC_OFFSET and SLJIT_UPDATE_WX_FLAGS might also be needed. */ 80 #ifndef SLJIT_EXECUTABLE_ALLOCATOR 81 /* Enabled by default. */ 82 #define SLJIT_EXECUTABLE_ALLOCATOR 1 83 84 /* When SLJIT_PROT_EXECUTABLE_ALLOCATOR is enabled SLJIT uses 85 an allocator which does not set writable and executable 86 permission flags at the same time. 87 Instead, it creates a shared memory segment (usually backed by a file) 88 and maps it twice, with different permissions, depending on the use 89 case. 90 The trade-off is increased use of virtual memory, incompatibility with 91 fork(), and some possible additional security risks by the use of 92 publicly accessible files for the generated code. */ 93 #ifndef SLJIT_PROT_EXECUTABLE_ALLOCATOR 94 /* Disabled by default. */ 95 #define SLJIT_PROT_EXECUTABLE_ALLOCATOR 0 96 #endif 97 98 /* When SLJIT_WX_EXECUTABLE_ALLOCATOR is enabled SLJIT uses an 99 allocator which does not set writable and executable permission 100 flags at the same time. 101 Instead, it creates a new independent map on each invocation and 102 switches permissions at the underlying pages as needed. 103 The trade-off is increased memory use and degraded performance. */ 104 #ifndef SLJIT_WX_EXECUTABLE_ALLOCATOR 105 /* Disabled by default. */ 106 #define SLJIT_WX_EXECUTABLE_ALLOCATOR 0 107 #endif 108 109 #endif /* !SLJIT_EXECUTABLE_ALLOCATOR */ 110 111 /* Return with error when an invalid argument is passed. */ 112 #ifndef SLJIT_ARGUMENT_CHECKS 113 /* Disabled by default */ 114 #define SLJIT_ARGUMENT_CHECKS 0 115 #endif 116 117 /* Debug checks (assertions, etc.). */ 118 #ifndef SLJIT_DEBUG 119 /* Enabled by default */ 120 #define SLJIT_DEBUG 1 121 #endif 122 123 /* Verbose operations. */ 124 #ifndef SLJIT_VERBOSE 125 /* Enabled by default */ 126 #define SLJIT_VERBOSE 1 127 #endif 128 129 /* 130 SLJIT_IS_FPU_AVAILABLE 131 The availability of the FPU can be controlled by SLJIT_IS_FPU_AVAILABLE. 132 zero value - FPU is NOT present. 133 nonzero value - FPU is present. 134 */ 135 136 /* For further configurations, see the beginning of sljitConfigInternal.h */ 137 138 #ifdef __cplusplus 139 } /* extern "C" */ 140 #endif 141 142 #endif /* SLJIT_CONFIG_H_ */ 143