Add support for a custom, per-instance signal handler (#620)
* Per Instance signal handler * add custom signal handler test * add instance signal handling to callable.rs * extend signal handler test to test callable.rs * test multiple instances, multiple signal handlers * support more than one current instance import_calling_export.rs is a good example of why this is needed: execution switches from one instance to another before the first one has finished running * add another custom signal handler test case * move and update custom signal handler tests * fmt * fix libc version to 0.2 * call the correct instance signal handler We keep a stack of instances so should call last() not first(). * move custom signal handler test to top level dir * windows/mac signal handling wip * os-specific signal handling wip * disable custom signal handler test on windows * fmt * unify signal handling on mac and linux
This commit is contained in:
@@ -7,6 +7,8 @@
|
||||
#include <stdbool.h>
|
||||
#endif
|
||||
|
||||
#include <signal.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
@@ -15,6 +17,17 @@ int8_t CheckIfTrapAtAddress(const uint8_t* pc);
|
||||
// Record the Trap code and wasm bytecode offset in TLS somewhere
|
||||
void RecordTrap(const uint8_t* pc, bool reset_guard_page);
|
||||
|
||||
#if defined(_WIN32)
|
||||
#include <windows.h>
|
||||
#include <winternl.h>
|
||||
bool InstanceSignalHandler(LPEXCEPTION_POINTERS);
|
||||
#elif defined(USE_APPLE_MACH_PORTS)
|
||||
bool InstanceSignalHandler(int, siginfo_t *, void *);
|
||||
#else
|
||||
#include <sys/ucontext.h>
|
||||
bool InstanceSignalHandler(int, siginfo_t *, ucontext_t *);
|
||||
#endif
|
||||
|
||||
void* EnterScope(void*);
|
||||
void LeaveScope(void*);
|
||||
void* GetScope(void);
|
||||
|
||||
Reference in New Issue
Block a user