1 /* 2 * Copyright (c) 2022 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16 #ifndef ECMASCRIPT_BASE_CONFIG_H 17 #define ECMASCRIPT_BASE_CONFIG_H 18 19 #include "common_components/base/config.h" 20 #include "common_interfaces/base/common.h" 21 #include <cstdint> 22 23 namespace panda::ecmascript { 24 extern uint32_t g_isEnableCMCGC; 25 extern uint32_t g_isEnableCMCGCConcurrentRootMarking; 26 27 enum class PUBLIC_API RBMode : uint8_t { 28 DEFAULT_RB = 0, // Default read barrier mode to support both gc. 29 FAST_NO_RB, // Use to old gc read barrier mode. 30 FAST_CMC_RB, // Use to cmc gc read barrier mode. 31 }; 32 33 #define ARK_INLINE __attribute__((always_inline)) 34 #define ARK_NOINLINE __attribute__((noinline)) 35 36 #define ECMASCRIPT_ENABLE_DEBUG_MODE 0 37 #define ECMASCRIPT_ENABLE_ARK_CONTAINER 1 38 #define ECMASCRIPT_ENABLE_VERBOSE_LEVEL_LOG 0 39 40 #define ECMASCRIPT_ENABLE_BUILTIN_LOG 0 41 42 #define ECMASCRIPT_ENABLE_SNAPSHOT 0 43 #define ECMASCRIPT_ENABLE_HEAP_DETAIL_STATISTICS 0 44 #define ECMASCRIPT_ENABLE_OPT_CODE_PROFILER 0 45 #define ECMASCRIPT_ENABLE_JIT_WARMUP_PROFILER 0 46 #define ECMASCRIPT_ENABLE_FUNCTION_CALL_TIMER 0 47 #define ECMASCRIPT_ENABLE_ELEMENTSKIND_ALWAY_GENERIC 0 48 #define ECMASCRIPT_ENABLE_SCOPE_LOCK_STAT 0 49 #define ECMASCRIPT_ENABLE_TRACE_IC 0 50 #define ECMASCRIPT_ENABLE_MEGA_PROFILER 0 51 #define ECMASCRIPT_ENABLE_TRACE_LOAD 0 52 #define ECMASCRIPT_ENABLE_TRACE_LOAD_MORE 0 53 #define ECMASCRIPT_ENABLE_TRACE_LOAD_VALUE 0 54 #define ECMASCRIPT_ENABLE_TRACE_STORE 0 55 #define ECMASCRIPT_ENABLE_LAZY_DEOPT_TRACE 0 56 #define ECMASCRIPT_ENABLE_TRACE_CALL 0 57 #define ECMASCRIPT_ENABLE_TRACE_DEFINEFUNC 0 58 59 #ifndef NDEBUG 60 #define ECMASCRIPT_ENABLE_INTERPRETER_LOG 1 61 #define ECMASCRIPT_ENABLE_RUNTIME_STAT 1 62 #define ECMASCRIPT_ENABLE_INTERPRETER_RUNTIME_STAT 1 63 #define ECMASCRIPT_ENABLE_BUILTINS_RUNTIME_STAT 1 64 #define ECMASCRIPT_ENABLE_ALLOCATE_AND_GC_RUNTIME_STAT 1 65 #define ECMASCRIPT_ENABLE_THREAD_STATE_CHECK 1 66 #define ECMASCRIPT_ENABLE_COLLECTING_OPCODES 1 67 #define ECMASCRIPT_ENABLE_INTERPRETER_ARKUINAITVE_TRACE 1 68 #else 69 #define ECMASCRIPT_ENABLE_INTERPRETER_LOG 0 70 #define ECMASCRIPT_ENABLE_BASELINE_LOG 0 71 #define ECMASCRIPT_ENABLE_RUNTIME_STAT 0 72 #define ECMASCRIPT_ENABLE_INTERPRETER_RUNTIME_STAT 0 73 #define ECMASCRIPT_ENABLE_BUILTINS_RUNTIME_STAT 0 74 #define ECMASCRIPT_ENABLE_ALLOCATE_AND_GC_RUNTIME_STAT 0 75 #define ECMASCRIPT_ENABLE_THREAD_STATE_CHECK 0 76 #define ECMASCRIPT_ENABLE_COLLECTING_OPCODES 0 77 #define ECMASCRIPT_ENABLE_INTERPRETER_ARKUINAITVE_TRACE 0 78 #endif 79 /* 80 * 1. close ic 81 * 2. enable handle-scope zap, zap reclaimed regions 82 * 3. switch gc mode to full gc 83 * 4. enable Cast() check 84 * 5. enable new handle check 85 * 6. enable barrier check 86 * 7. enable special value check in jsnapi 87 */ 88 #if ECMASCRIPT_ENABLE_DEBUG_MODE 89 #define ECMASCRIPT_ENABLE_IC 0 90 #define ECMASCRIPT_ENABLE_ZAP_MEM 1 91 #define ECMASCRIPT_SWITCH_GC_MODE_TO_FULL_GC 1 92 #define ECMASCRIPT_ENABLE_CAST_CHECK 1 93 #define ECMASCRIPT_ENABLE_NEW_HANDLE_CHECK 1 94 #define ECMASCRIPT_ENABLE_BARRIER_CHECK 1 95 #define ECMASCRIPT_ENABLE_NAPI_SPECIAL_CHECK 1 96 #define ECMASCRIPT_ENABLE_STUB_ARGV_CHECK 1 97 #define ECMASCRIPT_ENABLE_STUB_RESULT_CHECK 1 98 #elif defined(ECMASCRIPT_ENABLE_ASAN_DFX_CONFIG) 99 #define ECMASCRIPT_ENABLE_IC 1 100 #define ECMASCRIPT_ENABLE_ZAP_MEM 0 101 #define ECMASCRIPT_SWITCH_GC_MODE_TO_FULL_GC 0 102 #define ECMASCRIPT_ENABLE_CAST_CHECK 0 103 #define ECMASCRIPT_ENABLE_NEW_HANDLE_CHECK 0 104 #define ECMASCRIPT_ENABLE_BARRIER_CHECK 0 105 #define ECMASCRIPT_ENABLE_NAPI_SPECIAL_CHECK 1 106 #define ECMASCRIPT_ENABLE_STUB_ARGV_CHECK 0 107 #define ECMASCRIPT_ENABLE_STUB_RESULT_CHECK 0 108 #elif defined(ECMASCRIPT_ENABLE_GC_DFX_OPTIONS) 109 #define ECMASCRIPT_ENABLE_IC 1 110 #define ECMASCRIPT_ENABLE_ZAP_MEM 1 111 #define ECMASCRIPT_SWITCH_GC_MODE_TO_FULL_GC 0 112 #define ECMASCRIPT_ENABLE_CAST_CHECK 1 113 #define ECMASCRIPT_ENABLE_NEW_HANDLE_CHECK 1 114 #define ECMASCRIPT_ENABLE_BARRIER_CHECK 1 115 #define ECMASCRIPT_ENABLE_NAPI_SPECIAL_CHECK 0 116 #define ECMASCRIPT_ENABLE_STUB_ARGV_CHECK 1 117 #define ECMASCRIPT_ENABLE_STUB_RESULT_CHECK 1 118 #else 119 #define ECMASCRIPT_ENABLE_IC 1 120 #define ECMASCRIPT_ENABLE_ZAP_MEM 0 121 #define ECMASCRIPT_SWITCH_GC_MODE_TO_FULL_GC 0 122 #define ECMASCRIPT_ENABLE_CAST_CHECK 0 123 #define ECMASCRIPT_ENABLE_NEW_HANDLE_CHECK 0 124 #define ECMASCRIPT_ENABLE_BARRIER_CHECK 0 125 #define ECMASCRIPT_ENABLE_NAPI_SPECIAL_CHECK 0 126 #define ECMASCRIPT_ENABLE_STUB_ARGV_CHECK 0 127 #define ECMASCRIPT_ENABLE_STUB_RESULT_CHECK 0 128 #endif 129 130 #if ECMASCRIPT_ENABLE_ZAP_MEM 131 constexpr int INVALID_VALUE = 0x7; 132 #endif 133 134 #if defined(PANDA_TARGET_32) 135 #define ECMASCRIPT_DISABLE_CONCURRENT_MARKING 1 136 #else 137 #define ECMASCRIPT_DISABLE_CONCURRENT_MARKING 0 138 #endif 139 140 #define UNSHARED_CONSTANTPOOL_COUNT 1024 141 142 #define TARGET_X64 "x86_64-unknown-linux-gnu" 143 #define TARGET_AARCH64 "aarch64-unknown-linux-gnu" 144 #define TARGET_ARM32 "arm-unknown-linux-gnu" 145 146 } // namespace panda::ecmascript 147 148 #endif // ECMASCRIPT_BASE_CONFIG_H 149