prot = PROT_READ | PROT_WRITE;
cell alloc_size = 2 * pagesize + size;
+#if defined(__APPLE__) && defined(FACTOR_ARM64) // FIXME: could be in header file
+ char* array = (char*)mmap(NULL, alloc_size, prot,
+ MAP_ANON | MAP_PRIVATE | MAP_JIT, -1, 0);
+#else
char* array = (char*)mmap(NULL, alloc_size, prot,
MAP_ANON | MAP_PRIVATE, -1, 0);
+#endif
if (array == (char*)-1)
fatal_error("Out of memory in mmap", alloc_size);
}
void memory_signal_handler(int signal, siginfo_t* siginfo, void* uap) {
-
+ (void) signal;
cell fault_addr = (cell)siginfo->si_addr;
cell fault_pc = (cell)UAP_PROGRAM_COUNTER(uap);
factor_vm* vm = current_vm();
}
void synchronous_signal_handler(int signal, siginfo_t* siginfo, void* uap) {
+ (void) siginfo;
if (factor_vm::fatal_erroring_p)
return;
}
void enqueue_signal_handler(int signal, siginfo_t* siginfo, void* uap) {
+ (void) siginfo;
+ (void) uap;
if (factor_vm::fatal_erroring_p)
return;
}
void fep_signal_handler(int signal, siginfo_t* siginfo, void* uap) {
+ (void) siginfo;
+ (void) uap;
if (factor_vm::fatal_erroring_p)
return;
}
void sample_signal_handler(int signal, siginfo_t* siginfo, void* uap) {
+ (void) siginfo;
factor_vm* vm = current_vm_p();
bool foreign_thread = false;
if (vm == NULL) {
enqueue_signal(vm, signal);
}
-void ignore_signal_handler(int signal, siginfo_t* siginfo, void* uap) {}
+void ignore_signal_handler(int signal, siginfo_t* siginfo, void* uap) {
+ (void) signal;
+ (void) siginfo;
+ (void) uap;
+}
void fpe_signal_handler(int signal, siginfo_t* siginfo, void* uap) {
factor_vm* vm = current_vm();
}
void* stdin_loop(void* arg) {
+ (void) arg;
unsigned char buf[4096];
bool loop_running = true;
sigaction_safe(SIGINT, &fep_sigaction, NULL);
}
+void factor_vm::primitive_disable_ctrl_break() {
+ stop_on_ctrl_break = false;
+}
+
+void factor_vm::primitive_enable_ctrl_break() {
+ stop_on_ctrl_break = true;
+}
+
void abort() {
sig_t ret;
do {