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 /* Architecture */ 43 /* --------------------------------------------------------------------- */ 44 45 /* Architecture selection. */ 46 /* #define SLJIT_CONFIG_X86_32 1 */ 47 /* #define SLJIT_CONFIG_X86_64 1 */ 48 /* #define SLJIT_CONFIG_ARM_V5 1 */ 49 /* #define SLJIT_CONFIG_ARM_V7 1 */ 50 /* #define SLJIT_CONFIG_ARM_THUMB2 1 */ 51 /* #define SLJIT_CONFIG_ARM_64 1 */ 52 /* #define SLJIT_CONFIG_PPC_32 1 */ 53 /* #define SLJIT_CONFIG_PPC_64 1 */ 54 /* #define SLJIT_CONFIG_MIPS_32 1 */ 55 /* #define SLJIT_CONFIG_MIPS_64 1 */ 56 /* #define SLJIT_CONFIG_RISCV_32 1 */ 57 /* #define SLJIT_CONFIG_RISCV_64 1 */ 58 /* #define SLJIT_CONFIG_S390X 1 */ 59 60 /* #define SLJIT_CONFIG_AUTO 1 */ 61 /* #define SLJIT_CONFIG_UNSUPPORTED 1 */ 62 63 /* --------------------------------------------------------------------- */ 64 /* Utilities */ 65 /* --------------------------------------------------------------------- */ 66 67 /* Implements a stack like data structure (by using mmap / VirtualAlloc */ 68 /* or a custom allocator). */ 69 #ifndef SLJIT_UTIL_STACK 70 /* Enabled by default */ 71 #define SLJIT_UTIL_STACK 1 72 #endif 73 74 /* Uses user provided allocator to allocate the stack (see SLJIT_UTIL_STACK) */ 75 #ifndef SLJIT_UTIL_SIMPLE_STACK_ALLOCATION 76 /* Disabled by default */ 77 #define SLJIT_UTIL_SIMPLE_STACK_ALLOCATION 0 78 #endif 79 80 /* Single threaded application. Does not require any locks. */ 81 #ifndef SLJIT_SINGLE_THREADED 82 /* Disabled by default. */ 83 #define SLJIT_SINGLE_THREADED 0 84 #endif 85 86 /* --------------------------------------------------------------------- */ 87 /* Configuration */ 88 /* --------------------------------------------------------------------- */ 89 90 /* If SLJIT_STD_MACROS_DEFINED is not defined, the application should 91 define SLJIT_MALLOC, SLJIT_FREE, SLJIT_MEMCPY, and NULL. */ 92 #ifndef SLJIT_STD_MACROS_DEFINED 93 /* Disabled by default. */ 94 #define SLJIT_STD_MACROS_DEFINED 0 95 #endif 96 97 /* Executable code allocation: 98 If SLJIT_EXECUTABLE_ALLOCATOR is not defined, the application should 99 define SLJIT_MALLOC_EXEC, SLJIT_FREE_EXEC, and SLJIT_EXEC_OFFSET. */ 100 #ifndef SLJIT_EXECUTABLE_ALLOCATOR 101 /* Enabled by default. */ 102 #define SLJIT_EXECUTABLE_ALLOCATOR 1 103 104 /* When SLJIT_PROT_EXECUTABLE_ALLOCATOR is enabled SLJIT uses 105 an allocator which does not set writable and executable 106 permission flags at the same time. 107 Instead, it creates a shared memory segment (usually backed by a file) 108 and maps it twice, with different permissions, depending on the use 109 case. 110 The trade-off is increased use of virtual memory, incompatibility with 111 fork(), and some possible additional security risks by the use of 112 publicly accessible files for the generated code. */ 113 #ifndef SLJIT_PROT_EXECUTABLE_ALLOCATOR 114 /* Disabled by default. */ 115 #define SLJIT_PROT_EXECUTABLE_ALLOCATOR 0 116 #endif 117 118 /* When SLJIT_WX_EXECUTABLE_ALLOCATOR is enabled SLJIT uses an 119 allocator which does not set writable and executable permission 120 flags at the same time. 121 Instead, it creates a new independent map on each invocation and 122 switches permissions at the underlying pages as needed. 123 The trade-off is increased memory use and degraded performance. */ 124 #ifndef SLJIT_WX_EXECUTABLE_ALLOCATOR 125 /* Disabled by default. */ 126 #define SLJIT_WX_EXECUTABLE_ALLOCATOR 0 127 #endif 128 129 #endif /* !SLJIT_EXECUTABLE_ALLOCATOR */ 130 131 /* Return with error when an invalid argument is passed. */ 132 #ifndef SLJIT_ARGUMENT_CHECKS 133 /* Disabled by default */ 134 #define SLJIT_ARGUMENT_CHECKS 0 135 #endif 136 137 /* Debug checks (assertions, etc.). */ 138 #ifndef SLJIT_DEBUG 139 /* Enabled by default */ 140 #define SLJIT_DEBUG 1 141 #endif 142 143 /* Verbose operations. */ 144 #ifndef SLJIT_VERBOSE 145 /* Enabled by default */ 146 #define SLJIT_VERBOSE 1 147 #endif 148 149 /* 150 SLJIT_IS_FPU_AVAILABLE 151 The availability of the FPU can be controlled by SLJIT_IS_FPU_AVAILABLE. 152 zero value - FPU is NOT present. 153 nonzero value - FPU is present. 154 */ 155 156 /* For further configurations, see the beginning of sljitConfigInternal.h */ 157 158 #ifdef __cplusplus 159 } /* extern "C" */ 160 #endif 161 162 #endif /* SLJIT_CONFIG_H_ */ 163