removed vm singleton usage from unix stuff
parent
1e93c766a1
commit
9b013faed4
|
@ -3,9 +3,9 @@
|
||||||
namespace factor
|
namespace factor
|
||||||
{
|
{
|
||||||
|
|
||||||
void c_to_factor_toplevel(cell quot)
|
void factorvm::c_to_factor_toplevel(cell quot)
|
||||||
{
|
{
|
||||||
c_to_factor(quot,vm);
|
c_to_factor(quot,this);
|
||||||
}
|
}
|
||||||
|
|
||||||
void init_signals()
|
void init_signals()
|
||||||
|
|
|
@ -9,7 +9,7 @@ THREADHANDLE start_thread(void *(*start_routine)(void *),void *args)
|
||||||
pthread_t thread;
|
pthread_t thread;
|
||||||
if (pthread_attr_init (&attr) != 0)
|
if (pthread_attr_init (&attr) != 0)
|
||||||
fatal_error("pthread_attr_init() failed",0);
|
fatal_error("pthread_attr_init() failed",0);
|
||||||
if (pthread_attr_setdetachstate (&attr, PTHREAD_CREATE_DETACHED) != 0)
|
if (pthread_attr_setdetachstate (&attr, PTHREAD_CREATE_JOINABLE) != 0)
|
||||||
fatal_error("pthread_attr_setdetachstate() failed",0);
|
fatal_error("pthread_attr_setdetachstate() failed",0);
|
||||||
if (pthread_create (&thread, &attr, start_routine, args) != 0)
|
if (pthread_create (&thread, &attr, start_routine, args) != 0)
|
||||||
fatal_error("pthread_create() failed",0);
|
fatal_error("pthread_create() failed",0);
|
||||||
|
@ -114,17 +114,17 @@ void dealloc_segment(segment *block)
|
||||||
free(block);
|
free(block);
|
||||||
}
|
}
|
||||||
|
|
||||||
static stack_frame *uap_stack_pointer(void *uap)
|
stack_frame *factorvm::uap_stack_pointer(void *uap)
|
||||||
{
|
{
|
||||||
/* There is a race condition here, but in practice a signal
|
/* There is a race condition here, but in practice a signal
|
||||||
delivered during stack frame setup/teardown or while transitioning
|
delivered during stack frame setup/teardown or while transitioning
|
||||||
from Factor to C is a sign of things seriously gone wrong, not just
|
from Factor to C is a sign of things seriously gone wrong, not just
|
||||||
a divide by zero or stack underflow in the listener */
|
a divide by zero or stack underflow in the listener */
|
||||||
if(vm->in_code_heap_p(UAP_PROGRAM_COUNTER(uap)))
|
if(in_code_heap_p(UAP_PROGRAM_COUNTER(uap)))
|
||||||
{
|
{
|
||||||
stack_frame *ptr = (stack_frame *)ucontext_stack_pointer(uap);
|
stack_frame *ptr = (stack_frame *)ucontext_stack_pointer(uap);
|
||||||
if(!ptr)
|
if(!ptr)
|
||||||
vm->critical_error("Invalid uap",(cell)uap);
|
critical_error("Invalid uap",(cell)uap);
|
||||||
return ptr;
|
return ptr;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -133,15 +133,17 @@ static stack_frame *uap_stack_pointer(void *uap)
|
||||||
|
|
||||||
void memory_signal_handler(int signal, siginfo_t *siginfo, void *uap)
|
void memory_signal_handler(int signal, siginfo_t *siginfo, void *uap)
|
||||||
{
|
{
|
||||||
vm->signal_fault_addr = (cell)siginfo->si_addr;
|
factorvm *myvm = lookup_vm(thread_id());
|
||||||
vm->signal_callstack_top = uap_stack_pointer(uap);
|
myvm->signal_fault_addr = (cell)siginfo->si_addr;
|
||||||
|
myvm->signal_callstack_top = myvm->uap_stack_pointer(uap);
|
||||||
UAP_PROGRAM_COUNTER(uap) = (cell)memory_signal_handler_impl;
|
UAP_PROGRAM_COUNTER(uap) = (cell)memory_signal_handler_impl;
|
||||||
}
|
}
|
||||||
|
|
||||||
void misc_signal_handler(int signal, siginfo_t *siginfo, void *uap)
|
void misc_signal_handler(int signal, siginfo_t *siginfo, void *uap)
|
||||||
{
|
{
|
||||||
vm->signal_number = signal;
|
factorvm *myvm = lookup_vm(thread_id());
|
||||||
vm->signal_callstack_top = uap_stack_pointer(uap);
|
myvm->signal_number = signal;
|
||||||
|
myvm->signal_callstack_top = myvm->uap_stack_pointer(uap);
|
||||||
UAP_PROGRAM_COUNTER(uap) = (cell)misc_signal_handler_impl;
|
UAP_PROGRAM_COUNTER(uap) = (cell)misc_signal_handler_impl;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -664,6 +664,7 @@ struct factorvm {
|
||||||
void *ffi_dlsym(dll *dll, symbol_char *symbol);
|
void *ffi_dlsym(dll *dll, symbol_char *symbol);
|
||||||
void ffi_dlclose(dll *dll);
|
void ffi_dlclose(dll *dll);
|
||||||
segment *alloc_segment(cell size);
|
segment *alloc_segment(cell size);
|
||||||
|
void c_to_factor_toplevel(cell quot);
|
||||||
|
|
||||||
// os-windows
|
// os-windows
|
||||||
#if defined(WINDOWS)
|
#if defined(WINDOWS)
|
||||||
|
|
Loading…
Reference in New Issue