// Copyright 2018 the V8 project authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef V8_WASM_TRAP_HANDLER_POSIX_H_
#define V8_WASM_TRAP_HANDLER_POSIX_H_

#include <signal.h>

namespace v8 {
/**
 * This function determines whether a memory access violation has been an
 * out-of-bounds memory access in WebAssembly. If so, it will modify the context
 * parameter and add a return address where the execution can continue after the
 * signal handling, and return true. Otherwise, false will be returned.
 *
 * The parameters to this function correspond to those passed to a Posix signal
 * handler. Use this function only on Linux and Mac.
 *
 * \param sig_code The signal code, e.g. SIGSEGV.
 * \param info A pointer to the siginfo_t struct provided to the signal handler.
 * \param context A pointer to a ucontext_t struct provided to the signal
 * handler.
 */
bool TryHandleWebAssemblyTrapPosix(int sig_code, siginfo_t* info,
                                   void* context);

}  // namespace v8
#endif  // V8_WASM_TRAP_HANDLER_POSIX_H_
