rem: if (user_debug_fault_occurred(B_SEGMENT_VIOLATION)) kill_team(team_get_current_team_id());
add: if (user_debug_exception_occurred(B_SEGMENT_VIOLATION, SIGSEGV)) send_signal(team_get_current_team_id(), SIGSEGV);
context: vm_page_fault(addr_t address, addr_t fault_address, bool is_write, bool is_user, addr_t *newip){	int err;	FTRACE(("vm_page_fault: page fault at 0x%lx, ip 0x%lx\n", address, fault_address));	*newip = 0;	err = vm_soft_fault(address, is_write, is_user);	if (err < 0) {		dprintf("vm_page_fault: vm_soft_fault returned error %d on fault at 0x%lx, ip 0x%lx, write %d, user %d, thread 0x%lx\n",			err, address, fault_address, is_write, is_user, thread_get_current_thread_id());		if (!is_user) {			struct thread *t = thread_get_current_thread();			if (t && t->fault_handler != 0) {				// this will cause the arch dependant page fault handler to				// modify the IP on the interrupt frame or whatever to return				// to this address				*newip = t->fault_handler;			} else {				// unhandled page fault in the kernel				panic("vm_page_fault: unhandled page fault in kernel space at 0x%lx, ip 0x%lx\n",					address, fault_address);			}		} else {#if 1			// ToDo: remove me once we have proper userland debugging support (and tools)			vm_address_space *aspace = vm_get_current_user_aspace();			vm_virtual_map *map = &aspace->virtual_map;			vm_area *area;			acquire_sem_etc(map->sem, READ_COUNT, 0, 0);			area = vm_virtual_map_lookup(map, fault_address);			dprintf("vm_page_fault: killing team 0x%lx, ip %#lx (\"%s\" +%#lx)\n",				thread_get_current_thread()->team->id, fault_address,				area ? area->name : "???", fault_address - (area ? area->base : 0x0));			release_sem_etc(map->sem, READ_COUNT, 0);			vm_put_aspace(aspace);#endif			if (user_debug_fault_occurred(B_SEGMENT_VIOLATION))				kill_team(team_get_current_team_id());				// bonefish: ToDo: Shouldn't we send a SIGSEGV instead of				// killing the team straight away?		}	}	return B_HANDLED_INTERRUPT;}