|
1 | 1 | #include "enclave/enclave_util.h"
|
2 | 2 |
|
3 | 3 | #include <stdarg.h>
|
4 |
| -#include <stdlib.h> |
5 | 4 |
|
6 | 5 | #include "openenclave/internal/print.h"
|
7 | 6 |
|
@@ -39,292 +38,3 @@ void sgxlkl_info(char* msg, ...)
|
39 | 38 | va_start(args, msg);
|
40 | 39 | oe_host_vfprintf(OE_STDERR_FILENO, msg, args);
|
41 | 40 | }
|
42 |
| - |
43 |
| -// Integer base 2 logarithm. |
44 |
| -int int_log2(unsigned long long arg) |
45 |
| -{ |
46 |
| - int l = 0; |
47 |
| - while (arg >>= 1) |
48 |
| - l++; |
49 |
| - return l; |
50 |
| -} |
51 |
| - |
52 |
| -#ifdef DEBUG |
53 |
| - |
54 |
| -#include <assert.h> |
55 |
| -#include <errno.h> |
56 |
| -#include <inttypes.h> |
57 |
| -#include <stdarg.h> |
58 |
| -#include <stdio.h> |
59 |
| -#include <stdlib.h> |
60 |
| -#include <string.h> |
61 |
| -#include <sys/epoll.h> |
62 |
| -#include <sys/stat.h> |
63 |
| -#include <sys/syscall.h> |
64 |
| -#include <unistd.h> |
65 |
| - |
66 |
| -#include <enclave/lthread.h> |
67 |
| -#include <openenclave/internal/print.h> |
68 |
| -#include "lkl_host.h" |
69 |
| - |
70 |
| -#define EPOLL_EVENT_FLAG_BUFFER_LEN 256 |
71 |
| - |
72 |
| -#undef __LKL_SYSCALL |
73 |
| -#define __LKL_SYSCALL(nr) {(const char*)(__lkl__NR_##nr), #nr}, |
74 |
| -#include <lkl.h> |
75 |
| -static const char* __lkl_syscall_names[][2] = { |
76 |
| -#include <lkl/syscalls.h> |
77 |
| - {NULL, NULL}, |
78 |
| -#undef __LKL_SYSCALL |
79 |
| -}; |
80 |
| - |
81 |
| -static void parse_epoll_event_flags( |
82 |
| - char* buf, |
83 |
| - size_t buf_len, |
84 |
| - struct epoll_event* evt) |
85 |
| -{ |
86 |
| - size_t written = 0; |
87 |
| - if (evt->events & EPOLLIN) |
88 |
| - { |
89 |
| - written = snprintf(buf, buf_len - written, "EPOLLIN"); |
90 |
| - buf += written; |
91 |
| - } |
92 |
| - if (evt->events & EPOLLOUT) |
93 |
| - { |
94 |
| - written = |
95 |
| - snprintf(buf, buf_len - written, "%sEPOLLOUT", written ? "|" : ""); |
96 |
| - buf += written; |
97 |
| - } |
98 |
| - if (evt->events & EPOLLRDHUP) |
99 |
| - { |
100 |
| - written = snprintf( |
101 |
| - buf, buf_len - written, "%sEPOLLRDHUP", written ? "|" : ""); |
102 |
| - buf += written; |
103 |
| - } |
104 |
| - if (evt->events & EPOLLPRI) |
105 |
| - { |
106 |
| - written = |
107 |
| - snprintf(buf, buf_len - written, "%sEPOLLPRI", written ? "|" : ""); |
108 |
| - buf += written; |
109 |
| - } |
110 |
| - if (evt->events & EPOLLERR) |
111 |
| - { |
112 |
| - written = |
113 |
| - snprintf(buf, buf_len - written, "%sEPOLLERR", written ? "|" : ""); |
114 |
| - buf += written; |
115 |
| - } |
116 |
| - if (evt->events & EPOLLHUP) |
117 |
| - { |
118 |
| - written = |
119 |
| - snprintf(buf, buf_len - written, "%sEPOLLHUP", written ? "|" : ""); |
120 |
| - buf += written; |
121 |
| - } |
122 |
| - if (evt->events & EPOLLET) |
123 |
| - { |
124 |
| - written = |
125 |
| - snprintf(buf, buf_len - written, "%sEPOLLET", written ? "|" : ""); |
126 |
| - buf += written; |
127 |
| - } |
128 |
| - if (evt->events & EPOLLONESHOT) |
129 |
| - { |
130 |
| - written = snprintf( |
131 |
| - buf, buf_len - written, "%sEPOLLONESHOT", written ? "|" : ""); |
132 |
| - buf += written; |
133 |
| - } |
134 |
| - if (evt->events & EPOLLWAKEUP) |
135 |
| - { |
136 |
| - written = snprintf( |
137 |
| - buf, buf_len - written, "%sEPOLLWAKEUP", written ? "|" : ""); |
138 |
| - buf += written; |
139 |
| - } |
140 |
| - |
141 |
| - buf[0] = '\0'; |
142 |
| -} |
143 |
| - |
144 |
| -void __sgxlkl_log_syscall(int type, long n, long res, int params_len, ...) |
145 |
| -{ |
146 |
| - const char* name = NULL; |
147 |
| - char errmsg[255] = {0}; |
148 |
| - |
149 |
| - if (!sgxlkl_trace_ignored_syscall && type == SGXLKL_IGNORED_SYSCALL) |
150 |
| - return; |
151 |
| - |
152 |
| - if (!sgxlkl_trace_unsupported_syscall && type == SGXLKL_UNSUPPORTED_SYSCALL) |
153 |
| - return; |
154 |
| - |
155 |
| - if (!sgxlkl_trace_lkl_syscall && type == SGXLKL_LKL_SYSCALL) |
156 |
| - return; |
157 |
| - |
158 |
| - if (!sgxlkl_trace_internal_syscall && type == SGXLKL_INTERNAL_SYSCALL) |
159 |
| - return; |
160 |
| - |
161 |
| - long params[6] = {0}; |
162 |
| - va_list valist; |
163 |
| - va_start(valist, params_len); |
164 |
| - for (int i = 0; i < params_len; i++) |
165 |
| - { |
166 |
| - params[i] = va_arg(valist, long); |
167 |
| - } |
168 |
| - va_end(valist); |
169 |
| - |
170 |
| - for (int i = 0; __lkl_syscall_names[i][1] != NULL; i++) |
171 |
| - { |
172 |
| - if ((long)__lkl_syscall_names[i][0] == n) |
173 |
| - { |
174 |
| - name = __lkl_syscall_names[i][1]; |
175 |
| - break; |
176 |
| - } |
177 |
| - } |
178 |
| - |
179 |
| - if (name == NULL) |
180 |
| - name = "### INVALID ###"; |
181 |
| - if (res < 0) |
182 |
| - snprintf(errmsg, sizeof(errmsg), " (%s) <--- !", lkl_strerror(res)); |
183 |
| - |
184 |
| - int tid = lthread_self() ? lthread_self()->tid : 0; |
185 |
| - if (type == SGXLKL_REDIRECT_SYSCALL) |
186 |
| - { |
187 |
| - // n is x64 syscall number, name is not available. |
188 |
| - SGXLKL_TRACE_SYSCALL( |
189 |
| - type, |
190 |
| - "[tid=%-3d] \t%ld\t(%ld, %ld, %ld, %ld, %ld, %ld) = %ld%s\n", |
191 |
| - tid, |
192 |
| - n, |
193 |
| - params[0], |
194 |
| - params[1], |
195 |
| - params[2], |
196 |
| - params[3], |
197 |
| - params[4], |
198 |
| - params[5], |
199 |
| - res, |
200 |
| - errmsg); |
201 |
| - } |
202 |
| - else if (n == SYS_newfstatat) |
203 |
| - { |
204 |
| - SGXLKL_TRACE_SYSCALL( |
205 |
| - type, |
206 |
| - "[tid=%-3d] %s\t%ld\t(%ld, %s, %ld, %ld) = %ld %s\n", |
207 |
| - tid, |
208 |
| - name, |
209 |
| - n, |
210 |
| - params[0], |
211 |
| - (const char*)params[1], |
212 |
| - params[2], |
213 |
| - params[3], |
214 |
| - res, |
215 |
| - errmsg); |
216 |
| - } |
217 |
| - else if (n == SYS_openat) |
218 |
| - { |
219 |
| - SGXLKL_TRACE_SYSCALL( |
220 |
| - type, |
221 |
| - "[tid=%-3d] %s\t%ld\t(%ld, %s, %ld, %ld) = %ld %s\n", |
222 |
| - tid, |
223 |
| - name, |
224 |
| - n, |
225 |
| - params[0], |
226 |
| - (const char*)params[1], |
227 |
| - params[2], |
228 |
| - params[3], |
229 |
| - res, |
230 |
| - errmsg); |
231 |
| - } |
232 |
| - else if (n == SYS_execve) |
233 |
| - { |
234 |
| - SGXLKL_TRACE_SYSCALL( |
235 |
| - type, |
236 |
| - "[tid=%-3d] %s\t%ld\t(%s, %s, %s, %ld, %ld) = %ld %s\n", |
237 |
| - tid, |
238 |
| - name, |
239 |
| - n, |
240 |
| - (const char*)(params[0]), |
241 |
| - ((const char**)params[1])[0], |
242 |
| - ((const char**)params[1])[1], |
243 |
| - params[2], |
244 |
| - params[3], |
245 |
| - res, |
246 |
| - errmsg); |
247 |
| - } |
248 |
| - else if (n == SYS_statx) |
249 |
| - { |
250 |
| - SGXLKL_TRACE_SYSCALL( |
251 |
| - type, |
252 |
| - "[tid=%-3d] %s\t%ld\t(%ld, %s, %ld, %ld, %ld) = %ld %s\n", |
253 |
| - tid, |
254 |
| - name, |
255 |
| - n, |
256 |
| - params[0], |
257 |
| - (const char*)params[1], |
258 |
| - params[2], |
259 |
| - params[3], |
260 |
| - params[4], |
261 |
| - res, |
262 |
| - errmsg); |
263 |
| - } |
264 |
| - else if (n == SYS_epoll_ctl) |
265 |
| - { |
266 |
| - char event_flags[EPOLL_EVENT_FLAG_BUFFER_LEN]; |
267 |
| - struct epoll_event* evt = (struct epoll_event*)params[3]; |
268 |
| - parse_epoll_event_flags(event_flags, EPOLL_EVENT_FLAG_BUFFER_LEN, evt); |
269 |
| - SGXLKL_TRACE_SYSCALL( |
270 |
| - type, |
271 |
| - "[tid=%-3d] %s\t%ld\t(%d, %d, %d, %p {%s}) = %ld %s\n", |
272 |
| - tid, |
273 |
| - name, |
274 |
| - n, |
275 |
| - (int)params[0], |
276 |
| - (int)params[1], |
277 |
| - (int)params[2], |
278 |
| - evt, |
279 |
| - event_flags, |
280 |
| - res, |
281 |
| - errmsg); |
282 |
| - } |
283 |
| - else if (n == SYS_epoll_pwait) |
284 |
| - { |
285 |
| - char event_flags[EPOLL_EVENT_FLAG_BUFFER_LEN]; |
286 |
| - struct epoll_event* evt = (struct epoll_event*)params[1]; |
287 |
| - parse_epoll_event_flags(event_flags, EPOLL_EVENT_FLAG_BUFFER_LEN, evt); |
288 |
| - SGXLKL_TRACE_SYSCALL( |
289 |
| - type, |
290 |
| - "[tid=%-3d] %s\t%ld\t(%d, %p {%s}, %d, %d, %ld) = %ld %s\n", |
291 |
| - tid, |
292 |
| - name, |
293 |
| - n, |
294 |
| - (int)params[0], |
295 |
| - evt, |
296 |
| - event_flags, |
297 |
| - (int)params[2], |
298 |
| - (int)params[3], |
299 |
| - params[4], |
300 |
| - res, |
301 |
| - errmsg); |
302 |
| - } |
303 |
| - else |
304 |
| - { |
305 |
| - SGXLKL_TRACE_SYSCALL( |
306 |
| - type, |
307 |
| - "[tid=%-3d] %s\t%ld\t(%ld, %ld, %ld, %ld, %ld, %ld) = %ld%s\n", |
308 |
| - tid, |
309 |
| - name, |
310 |
| - n, |
311 |
| - params[0], |
312 |
| - params[1], |
313 |
| - params[2], |
314 |
| - params[3], |
315 |
| - params[4], |
316 |
| - params[5], |
317 |
| - res, |
318 |
| - errmsg); |
319 |
| - } |
320 |
| -} |
321 |
| -#else |
322 |
| -inline void __sgxlkl_log_syscall( |
323 |
| - int type, |
324 |
| - long n, |
325 |
| - long res, |
326 |
| - int params_len, |
327 |
| - ...) |
328 |
| -{ /* empty */ |
329 |
| -} |
330 |
| -#endif /* DEBUG */ |
0 commit comments