VM: merge memory_protection_error() with memory_signal_handler_impl()
parent
39c888230a
commit
cb0bf3b1ce
|
@ -102,7 +102,7 @@ void factor_vm::not_implemented_error() {
|
||||||
|
|
||||||
void factor_vm::verify_memory_protection_error(cell addr) {
|
void factor_vm::verify_memory_protection_error(cell addr) {
|
||||||
/* Called from the OS-specific top halves of the signal handlers to
|
/* Called from the OS-specific top halves of the signal handlers to
|
||||||
make sure it's safe to dispatch to memory_protection_error */
|
make sure it's safe to dispatch to memory_signal_handler_impl. */
|
||||||
if (fatal_erroring_p)
|
if (fatal_erroring_p)
|
||||||
fa_diddly_atal_error();
|
fa_diddly_atal_error();
|
||||||
if (faulting_p && !code->safepoint_p(addr))
|
if (faulting_p && !code->safepoint_p(addr))
|
||||||
|
@ -113,16 +113,6 @@ void factor_vm::verify_memory_protection_error(cell addr) {
|
||||||
fatal_error("Memory protection fault during gc", addr);
|
fatal_error("Memory protection fault during gc", addr);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Allocates memory */
|
|
||||||
void factor_vm::memory_protection_error(cell pc, cell addr) {
|
|
||||||
if (code->safepoint_p(addr))
|
|
||||||
safepoint.handle_safepoint(this, pc);
|
|
||||||
else {
|
|
||||||
vm_error_type type = ctx->address_to_error(addr);
|
|
||||||
general_error(type, from_unsigned_cell(addr), false_object);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Allocates memory */
|
/* Allocates memory */
|
||||||
void factor_vm::divide_by_zero_error() {
|
void factor_vm::divide_by_zero_error() {
|
||||||
general_error(ERROR_DIVIDE_BY_ZERO, false_object, false_object);
|
general_error(ERROR_DIVIDE_BY_ZERO, false_object, false_object);
|
||||||
|
@ -134,7 +124,14 @@ void factor_vm::primitive_unimplemented() { not_implemented_error(); }
|
||||||
|
|
||||||
/* Allocates memory */
|
/* Allocates memory */
|
||||||
void factor_vm::memory_signal_handler_impl() {
|
void factor_vm::memory_signal_handler_impl() {
|
||||||
memory_protection_error(signal_fault_pc, signal_fault_addr);
|
if (code->safepoint_p(signal_fault_addr)) {
|
||||||
|
safepoint.handle_safepoint(this, signal_fault_pc);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
vm_error_type type = ctx->address_to_error(signal_fault_addr);
|
||||||
|
cell number = from_unsigned_cell(signal_fault_addr);
|
||||||
|
general_error(type, number, false_object);
|
||||||
|
}
|
||||||
if (!signal_resumable) {
|
if (!signal_resumable) {
|
||||||
/* In theory we should only get here if the callstack overflowed during a
|
/* In theory we should only get here if the callstack overflowed during a
|
||||||
safepoint */
|
safepoint */
|
||||||
|
|
|
@ -215,7 +215,6 @@ struct factor_vm {
|
||||||
void type_error(cell type, cell tagged);
|
void type_error(cell type, cell tagged);
|
||||||
void not_implemented_error();
|
void not_implemented_error();
|
||||||
void verify_memory_protection_error(cell addr);
|
void verify_memory_protection_error(cell addr);
|
||||||
void memory_protection_error(cell pc, cell addr);
|
|
||||||
void divide_by_zero_error();
|
void divide_by_zero_error();
|
||||||
void primitive_unimplemented();
|
void primitive_unimplemented();
|
||||||
void memory_signal_handler_impl();
|
void memory_signal_handler_impl();
|
||||||
|
|
Loading…
Reference in New Issue