diff options
Diffstat (limited to 'config/external/rlbox_wasm2c_sandbox/rlbox_wasm2c_thread_locals.cpp')
-rw-r--r-- | config/external/rlbox_wasm2c_sandbox/rlbox_wasm2c_thread_locals.cpp | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/config/external/rlbox_wasm2c_sandbox/rlbox_wasm2c_thread_locals.cpp b/config/external/rlbox_wasm2c_sandbox/rlbox_wasm2c_thread_locals.cpp new file mode 100644 index 0000000000..f37a868406 --- /dev/null +++ b/config/external/rlbox_wasm2c_sandbox/rlbox_wasm2c_thread_locals.cpp @@ -0,0 +1,48 @@ +/* -*- Mode: C++; tab-width: 20; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +#ifdef MOZ_USING_WASM_SANDBOXING + +// For MOZ_CRASH_UNSAFE_PRINTF +# include "mozilla/Assertions.h" + +# include "mozilla/mozalloc_oom.h" + +// Load general firefox configuration of RLBox +# include "mozilla/rlbox/rlbox_config.h" +# include "mozilla/rlbox/rlbox_wasm2c_tls.hpp" +# include "wasm-rt.h" + +# include "nsExceptionHandler.h" + +// The MingW compiler does not correctly handle static thread_local inline +// members. We instead TLS storage via functions. This can be removed if the +// MingW bug is fixed. +RLBOX_WASM2C_SANDBOX_STATIC_VARIABLES(); + +extern "C" { + +// Any error encountered by the wasm2c runtime or wasm sandboxed library code +// is configured to call the below trap handler. +void moz_wasm2c_trap_handler(wasm_rt_trap_t code) { + MOZ_CRASH_UNSAFE_PRINTF("wasm2c crash: %s", wasm_rt_strerror(code)); +} + +// The below function is called if a malloc in sandboxed code returns null +// This indicates that the sandbox has run out of memory. +void moz_wasm2c_memgrow_failed() { + CrashReporter::AnnotateCrashReport( + CrashReporter::Annotation::WasmLibrarySandboxMallocFailed, true); +} + +// This function is called when mozalloc_handle_oom is called from within +// the sandbox. We redirect to that function, ignoring the ctx argument, which +// is the sandbox itself. +void w2c_env_mozalloc_handle_oom(void* ctx, uint32_t size) { + mozalloc_handle_oom(size); +} +} + +#endif |