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