lose("sunos major version=%d (which isn't 5!)", major_version);
}
minor_version = atoi(name.release+2);
- if (minor_version == 8) {
+ if ((minor_version == 8) || (minor_version == 9)) {
KLUDGE_MAYBE_MAP_ANON = 0x100;
- } else if (minor_version > 8) {
- FSHOW((stderr, "os_init: Solaris version greater than 8?\nUnknown MAP_ANON behaviour.\n"));
+ } else if (minor_version > 9) {
+ FSHOW((stderr, "os_init: Solaris version greater than 9?\nUnknown MAP_ANON behaviour.\n"));
lose("Unknown mmap() interaction with MAP_ANON");
} else { /* minor_version < 8 */
kludge_mmap_fd = open("/dev/zero",O_RDONLY);
os_vm_address_t addr;
addr = arch_get_bad_addr(signal, info, context);
- /* There's some complicated recovery code in linux-os.c here
- that I'm currently too confused to understand. FIXME. */
if(!interrupt_maybe_gc(signal, info, context)) {
- interrupt_handle_now(signal, info, context);
+ if(!handle_control_stack_guard_triggered(context,addr))
+ interrupt_handle_now(signal, info, context);
}
}
void
os_install_interrupt_handlers()
{
- undoably_install_low_level_interrupt_handler(SIGSEGV,sigsegv_handler);
+ undoably_install_low_level_interrupt_handler(SIG_MEMORY_FAULT,
+ sigsegv_handler);
}