]> gitweb.factorcode.org Git - factor.git/blob - vm/mach_signal.hpp
Put brackets around ipv6 addresses in `inet6 present`
[factor.git] / vm / mach_signal.hpp
1 // Fault handler information.  MacOSX version.
2 // Copyright (C) 1993-1999, 2002-2003  Bruno Haible <clisp.org at bruno>
3 // Copyright (C) 2003  Paolo Bonzini <gnu.org at bonzini>
4
5 // Used under BSD license with permission from Paolo Bonzini and Bruno Haible,
6 // 2005-03-10:
7
8 // http://sourceforge.net/mailarchive/message.php?msg_name=200503102200.32002.bruno%40clisp.org
9
10 // Modified for Factor by Slava Pestov
11 #include <stdio.h>
12 #include <stdlib.h>
13 #include <errno.h>
14 #include <signal.h>
15
16 #include <mach/mach.h>
17 #include <mach/mach_error.h>
18 #include <mach/thread_status.h>
19 #include <mach/exception.h>
20 #include <mach/task.h>
21 #include <pthread.h>
22
23 // This is not defined in any header, although documented.
24
25 // http://web.mit.edu/darwin/src/modules/xnu/osfmk/man/exc_server.html says:
26 // The exc_server function is the MIG generated server handling function
27 // to handle messages from the kernel relating to the occurrence of an
28 // exception in a thread. Such messages are delivered to the exception port
29 // set via thread_set_exception_ports or task_set_exception_ports. When an
30 // exception occurs in a thread, the thread sends an exception message to its
31 // exception port, blocking in the kernel waiting for the receipt of a reply.
32 // The exc_server function performs all necessary argument handling for this
33 // kernel message and calls catch_exception_raise, catch_exception_raise_state
34 // or catch_exception_raise_state_identity, which should handle the exception.
35 // If the called routine returns KERN_SUCCESS, a reply message will be sent,
36 // allowing the thread to continue from the point of the exception; otherwise,
37 // no reply message is sent and the called routine must have dealt with the
38 // exception thread directly.
39 extern "C" boolean_t exc_server(mach_msg_header_t* request_msg,
40                                 mach_msg_header_t* reply_msg);
41
42 // http://web.mit.edu/darwin/src/modules/xnu/osfmk/man/catch_exception_raise.html
43 // These functions are defined in this file, and called by exc_server.
44 // FIXME: What needs to be done when this code is put into a shared library?
45 extern "C" kern_return_t catch_exception_raise(
46     mach_port_t exception_port, mach_port_t thread, mach_port_t task,
47     exception_type_t exception, exception_data_t code,
48     mach_msg_type_number_t code_count);
49 extern "C" kern_return_t catch_exception_raise_state(
50     mach_port_t exception_port, exception_type_t exception,
51     exception_data_t code, mach_msg_type_number_t code_count,
52     thread_state_flavor_t* flavor, thread_state_t in_state,
53     mach_msg_type_number_t in_state_count, thread_state_t out_state,
54     mach_msg_type_number_t* out_state_count);
55
56 extern "C" kern_return_t catch_exception_raise_state_identity(
57     mach_port_t exception_port, mach_port_t thread, mach_port_t task,
58     exception_type_t exception, exception_data_t code,
59     mach_msg_type_number_t codeCnt, thread_state_flavor_t* flavor,
60     thread_state_t in_state, mach_msg_type_number_t in_state_count,
61     thread_state_t out_state, mach_msg_type_number_t* out_state_count);
62
63 namespace factor { void mach_initialize(); }