5#ifndef V8_TRAP_HANDLER_TRAP_HANDLER_H_
6#define V8_TRAP_HANDLER_TRAP_HANDLER_H_
19#if V8_HOST_ARCH_X64 && V8_TARGET_ARCH_X64 && \
20 ((V8_OS_LINUX && !V8_OS_ANDROID) || V8_OS_WIN || V8_OS_DARWIN || \
22#define V8_TRAP_HANDLER_SUPPORTED true
24#elif V8_TARGET_ARCH_ARM64 && V8_HOST_ARCH_ARM64 && \
25 ((V8_OS_LINUX && !V8_OS_ANDROID) || V8_OS_WIN || V8_OS_DARWIN)
26#define V8_TRAP_HANDLER_SUPPORTED true
33#elif V8_TARGET_ARCH_ARM64 && V8_HOST_ARCH_X64 && \
34 (V8_OS_LINUX || V8_OS_DARWIN || V8_OS_WIN) && \
35 (!defined(_MSC_VER) || defined(__clang__))
36#define V8_TRAP_HANDLER_VIA_SIMULATOR
37#define V8_TRAP_HANDLER_SUPPORTED true
39#elif V8_TARGET_ARCH_LOONG64 && V8_HOST_ARCH_LOONG64 && V8_OS_LINUX
40#define V8_TRAP_HANDLER_SUPPORTED true
42#elif V8_TARGET_ARCH_LOONG64 && V8_HOST_ARCH_X64 && V8_OS_LINUX
43#define V8_TRAP_HANDLER_VIA_SIMULATOR
44#define V8_TRAP_HANDLER_SUPPORTED true
46#elif V8_TARGET_ARCH_RISCV64 && V8_HOST_ARCH_RISCV64 && V8_OS_LINUX && \
48#define V8_TRAP_HANDLER_SUPPORTED true
50#elif V8_TARGET_ARCH_RISCV64 && V8_HOST_ARCH_X64 && V8_OS_LINUX
51#define V8_TRAP_HANDLER_VIA_SIMULATOR
52#define V8_TRAP_HANDLER_SUPPORTED true
55#define V8_TRAP_HANDLER_SUPPORTED false
58#if V8_OS_ANDROID && V8_TRAP_HANDLER_SUPPORTED
63#error "The V8 trap handler should not be enabled on Android"
69#if defined(BUILDING_V8_SHARED_PRIVATE)
70#define TH_EXPORT_PRIVATE __declspec(dllexport)
71#elif defined(USING_V8_SHARED_PRIVATE)
72#define TH_EXPORT_PRIVATE __declspec(dllimport)
74#define TH_EXPORT_PRIVATE __attribute__((visibility("default")))
79#if defined(BUILDING_V8_SHARED_PRIVATE) || defined(USING_V8_SHARED_PRIVATE)
80#define TH_EXPORT_PRIVATE __attribute__((visibility("default")))
82#define TH_EXPORT_PRIVATE
87#define TH_CHECK(condition) \
88 if (!(condition)) IMMEDIATE_CRASH();
90#define TH_DCHECK(condition) TH_CHECK(condition)
92#define TH_DCHECK(condition) void(0)
95#if defined(__has_feature)
96#if __has_feature(address_sanitizer)
97#define TH_DISABLE_ASAN __attribute__((no_sanitize_address))
99#define TH_DISABLE_ASAN
102#define TH_DISABLE_ASAN
118 uintptr_t base,
size_t size,
size_t num_protected_instructions,
170#if defined(V8_OS_AIX)
213#if defined(BUILDING_V8_SHARED_PRIVATE) || defined(USING_V8_SHARED_PRIVATE)
std::atomic< bool > g_can_enable_trap_handler
int * GetThreadInWasmThreadLocalAddress()
bool RegisterDefaultTrapHandler()
void AssertThreadNotInWasm()
bool IsTrapHandlerEnabled()
bool g_is_trap_handler_enabled
void ReleaseHandlerData(int index)
thread_local int g_thread_in_wasm_code
void SetLandingPad(uintptr_t landing_pad)
size_t GetRecoveredTrapCount()
int RegisterHandlerData(uintptr_t base, size_t size, size_t num_protected_instructions, const ProtectedInstructionData *protected_instructions)
bool EnableTrapHandler(bool use_v8_handler)
TH_DISABLE_ASAN bool IsThreadInWasm()
void UnregisterV8Sandbox(uintptr_t base, size_t size)
bool RegisterV8Sandbox(uintptr_t base, size_t size)
#define TH_EXPORT_PRIVATE
#define V8_TRAP_HANDLER_SUPPORTED
#define TH_DCHECK(condition)