|
|
1.1 root 1: #ifndef _DYLD_DEBUG_
2: #define _DYLD_DEBUG_
3:
4: #import <mach/mach.h>
5: /*
6: * The dyld debugging API.
7: */
8: enum dyld_debug_return {
9: DYLD_SUCCESS,
10: DYLD_INCONSISTENT_DATA,
11: DYLD_INVALID_ARGUMENTS,
12: DYLD_FAILURE
13: };
14:
15: struct dyld_debug_module {
16: struct mach_header *header;
17: unsigned long vmaddr_slide;
18: unsigned long module_index;
19: };
20:
21: enum dyld_event_type {
22: DYLD_IMAGE_ADDED,
23: DYLD_MODULE_BOUND,
24: DYLD_MODULE_REMOVED,
25: DYLD_MODULE_REPLACED,
26: DYLD_PAST_EVENTS_END
27: };
28:
29: struct dyld_event {
30: enum dyld_event_type type;
31: struct dyld_debug_module arg[2];
32: };
33:
34: extern enum dyld_debug_return _dyld_debug_defining_module(
35: task_t target_task,
36: unsigned long send_timeout,
37: unsigned long rcv_timeout,
38: boolean_t inconsistent_data_ok,
39: char *name,
40: struct dyld_debug_module *module);
41:
42: extern enum dyld_debug_return _dyld_debug_is_module_bound(
43: task_t target_task,
44: unsigned long send_timeout,
45: unsigned long rcv_timeout,
46: boolean_t inconsistent_data_ok,
47: struct dyld_debug_module module,
48: boolean_t *bound);
49:
50: extern enum dyld_debug_return _dyld_debug_bind_module(
51: task_t target_task,
52: unsigned long send_timeout,
53: unsigned long rcv_timeout,
54: boolean_t inconsistent_data_ok,
55: struct dyld_debug_module module);
56:
57: extern enum dyld_debug_return _dyld_debug_subscribe_to_events(
58: task_t target_task,
59: unsigned long send_timeout,
60: unsigned long rcv_timeout,
61: boolean_t inconsistent_data_ok,
62: void (*dyld_event_routine)(struct dyld_event event));
63:
64: /*
65: * _dyld_debug_add_event_subscriber() uses the mig interface functions below
66: * to dispatch the dyld event messages from the subscriber port specified.
67: */
68: extern enum dyld_debug_return _dyld_debug_add_event_subscriber(
69: task_t target_task,
70: unsigned long send_timeout,
71: unsigned long rcv_timeout,
72: boolean_t inconsistent_data_ok,
73: port_t subscriber);
74: /*
75: * These structures should be produced by mig(1) from the mig generated files
76: * but they are not. These are really only needed so the correct size of the
77: * request and reply messages can be allocated.
78: */
79: struct _dyld_event_message_request {
80: msg_header_t head;
81: msg_type_t eventType;
82: struct dyld_event event;
83: };
84: struct _dyld_event_message_reply {
85: msg_header_t head;
86: msg_type_t RetCodeType;
87: kern_return_t RetCode;
88: };
89: #ifndef mig_internal
90: /*
91: * _dyld_event_server() is the mig generated routine to dispatch dyld event
92: * messages.
93: */
94: extern boolean_t _dyld_event_server(
95: struct _dyld_event_message_request *request,
96: struct _dyld_event_message_reply *reply);
97: #endif
98: /*
99: * _dyld_event_server_callback() is the routine called by _dyld_event_server()
100: * that must be written by users of _dyld_event_server().
101: */
102: extern void _dyld_event_server_callback(
103: port_t subscriber,
104: struct dyld_event event);
105:
106: #endif /* _DYLD_DEBUG_ */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.