1 #ifndef _SHIM_H_
2 #define _SHIM_H_
3
4 /* random defines needed for core.c to compile */
5 #include <sys/event.h>
6 #include <mach/task_policy.h>
7 #include <sys/mach/host_special_ports.h>
8 #include <sys/proc_info.h>
9 #include <sys/kern_event.h>
10 #include <sys/fileport.h>
11 #include <spawn.h>
12 #include <mach/mach_port.h>
13 #include <mach/mach_vm.h>
14 #include <mach/host_priv.h>
15
16 #define RB_UPSDELAY (RB_PAUSE << 1)
17 #define RB_SAFEBOOT (RB_PAUSE << 2)
18 #define RB_UNIPROC (RB_PAUSE << 3)
19 #define RB_ALTBOOT (RB_PAUSE << 4)
20
21 typedef unsigned int xpc_service_type_t;
22
23 typedef int xpc_jetsam_band_t;
24
25 typedef char event_name_t[64];
26 #define vm_allocate mach_vm_allocate
27 #define vm_deallocate mach_vm_deallocate
28
29 #define O_EVTONLY 0x8000 /* descriptor requested for event notifications only */
30
31 #define _CS_DARWIN_USER_TEMP_DIR 65537
32 #define EBADARCH 86 /* Bad CPU type in executable */
33
34
35 #define VQ_UPDATE VQ_FLAG0100
36
37
38 #define XPC_EVENT_ROUTINE_KEY_STREAM "XPC key stream"
39 #define XPC_EVENT_ROUTINE_KEY_TOKEN "XPC key token"
40 #define XPC_EVENT_ROUTINE_KEY_NAME "XPC key name"
41 #define XPC_EVENT_ROUTINE_KEY_ENTITLEMENTS "XPC key entitlements"
42 #define XPC_EVENT_ROUTINE_KEY_EVENT "XPC key event"
43 #define XPC_EVENT_ROUTINE_KEY_EVENTS "XPC key events"
44 #define XPC_EVENT_ROUTINE_KEY_FLAGS "XPC key flags"
45 #define XPC_EVENT_ROUTINE_KEY_PORT "XPC key port"
46 #define XPC_EVENT_ROUTINE_KEY_STATE "XPC key state"
47 #define XPC_EVENT_ROUTINE_KEY_OP "XPC key op"
48 #define XPC_EVENT_ROUTINE_KEY_ERROR "XPC key error"
49 #define XPC_PROCESS_ROUTINE_KEY_LABEL "XPC process key label"
50 #define XPC_PROCESS_ROUTINE_KEY_ERROR "XPC process key error"
51 #define XPC_PROCESS_ROUTINE_KEY_HANDLE "XPC process key handle"
52 #define XPC_PROCESS_ROUTINE_KEY_NAME "XPC process key name"
53 #define XPC_PROCESS_ROUTINE_KEY_PATH "XPC process key path"
54 #define XPC_PROCESS_ROUTINE_KEY_ARGV "XPC process key argv"
55 #define XPC_PROCESS_ROUTINE_KEY_TYPE "XPC process key type"
56 #define XPC_PROCESS_ROUTINE_KEY_OP "XPC process key op"
57 #define XPC_PROCESS_ROUTINE_KEY_PID "XPC process key pid"
58 #define XPC_PROCESS_ROUTINE_KEY_RCDATA "XPC process key rcdata"
59 #define XPC_PROCESS_ROUTINE_KEY_SIGNAL "XPC process key signal"
60 #define XPC_PROCESS_ROUTINE_KEY_PRIORITY_BAND "XPC process key priority band"
61 #define XPC_PROCESS_ROUTINE_KEY_MEMORY_LIMIT "XPC process key memory limit"
62 #define XPC_SERVICE_ENTITLEMENT_ATTACH "XPC service entitlement attach"
63 #define XPC_SERVICE_RENDEZVOUS_TOKEN "XPC service rendezvous token"
64 #define XPC_PROCESS_ROUTINE_KEY_NEW_INSTANCE_PORT "XPC process key new instance port"
65 #define XPC_SERVICE_ENV_ATTACHED "XPC service env attached"
66
67 #define _POSIX_SPAWN_DISABLE_ASLR 0x8000
68
69 #define XPC_EVENT_FLAG_ENTITLEMENTS 0x000000000000
70
71 typedef enum {
72 XPC_EVENT_GET_NAME,
73 XPC_EVENT_SET,
74 XPC_EVENT_COPY,
75 XPC_EVENT_CHECK_IN,
76 XPC_EVENT_LOOK_UP,
77 XPC_EVENT_PROVIDER_CHECK_IN,
78 XPC_EVENT_PROVIDER_SET_STATE,
79 XPC_EVENT_COPY_ENTITLEMENTS
80 } xpc_event_t;
81
82 typedef enum {
83 XPC_PROCESS_JETSAM_SET_BAND,
84 XPC_PROCESS_JETSAM_SET_MEMORY_LIMIT,
85 XPC_PROCESS_SERVICE_ATTACH,
86 XPC_PROCESS_SERVICE_DETACH,
87 XPC_PROCESS_SERVICE_GET_PROPERTIES,
88 XPC_PROCESS_SERVICE_KILL
89 } xpc_jetsam_t;
90
91 #define XPC_JETSAM_BAND_SUSPENDED 10
92 #define XPC_JETSAM_BAND_LAST 20
93 #define XPC_JETSAM_PRIORITY_RESERVED 1000
94
95 #define XPC_SERVICE_TYPE_BUNDLED 0xBADDCAFE
96 #define XPC_SERVICE_TYPE_LAUNCHD 0xBABECAFE
97 #define XPC_SERVICE_TYPE_APP 0xDEADCAFE
98 #define XPC_SERVICE_TYPE_ENTITLEMENT_ATTACH 0x00DEAD00
99
100 /* I/O type */
101 #define IOPOL_TYPE_DISK 0
102
103 /* scope */
104 #define IOPOL_SCOPE_PROCESS 0
105 #define IOPOL_SCOPE_THREAD 1
106 #define IOPOL_SCOPE_DARWIN_BG 2
107
108 /* I/O Priority */
109 #define IOPOL_DEFAULT 0
110 #define IOPOL_IMPORTANT 1
111 #define IOPOL_PASSIVE 2
112 #define IOPOL_THROTTLE 3
113 #define IOPOL_UTILITY 4
114 #define IOPOL_STANDARD 5
115
116 /* compatibility with older names */
117 #define IOPOL_APPLICATION IOPOL_STANDARD
118 #define IOPOL_NORMAL IOPOL_IMPORTANT
119
120 int setiopolicy_np(int, int, int);
121
122 extern size_t sallocx(void *, int);
123 static inline size_t
malloc_size(void * ptr)124 malloc_size(void * ptr)
125 {
126
127 return (sallocx(ptr, 0));
128 }
129
130 /* domain.defs */
131 kern_return_t
132 xpc_domain_get_service_name(job_t j, event_name_t name);
133 kern_return_t
134 xpc_domain_load_services(job_t j, vm_offset_t services_buff, mach_msg_type_number_t services_sz);
135 kern_return_t
136 xpc_domain_check_in(job_t j, mach_port_t *bsport, mach_port_t *sbsport,
137 mach_port_t *excport, mach_port_t *asport, uint32_t *uid, uint32_t *gid,
138 int32_t *asid, vm_offset_t *ctx, mach_msg_type_number_t *ctx_sz);
139 kern_return_t
140 xpc_domain_set_environment(job_t j, mach_port_t rp, mach_port_t bsport, mach_port_t excport, vm_offset_t ctx, mach_msg_type_number_t ctx_sz);
141 kern_return_t
142 xpc_domain_import2(job_t j, mach_port_t reqport, mach_port_t dport);
143 kern_return_t
144 xpc_domain_add_services(job_t j, vm_offset_t services_buff, mach_msg_type_number_t services_sz);
145 #define XPC_LPI_VERSION 20141120
146
147
148 __inline int
posix_spawnattr_setprocesstype_np(posix_spawnattr_t * a __unused,const int b __unused)149 posix_spawnattr_setprocesstype_np(posix_spawnattr_t * a __unused, const int b __unused)
150 {
151 return 0;
152 }
153
154 __inline int
posix_spawnattr_set_importancewatch_port_np(posix_spawnattr_t * __restrict attr __unused,int count __unused,mach_port_t portarray[]__unused)155 posix_spawnattr_set_importancewatch_port_np(posix_spawnattr_t * __restrict attr __unused,
156 int count __unused, mach_port_t portarray[] __unused)
157 {
158 return 0;
159 }
160
161 __inline int
posix_spawnattr_setcpumonitor_default(posix_spawnattr_t * __restrict a __unused)162 posix_spawnattr_setcpumonitor_default(posix_spawnattr_t * __restrict a __unused)
163 {
164 return 0;
165 }
166
167 #endif
168