Skip to content

Commit e6d9619

Browse files
SeanTAllendavidchisnall
authored andcommitted
Remove libc dependencies from enclave_util.c
As part of work on #151, this commit breaks enclave_util.c apart into the parts only needed by lkl & sgx-lkl-musl and parts that are also used by the enclave. All parts that aren't needed for the enclave have been moved to lkl_util.c This removes the libc dependency on snprintf from enclave_util and advances towards our goal of removing libc dependencies from src/enclave.
1 parent 4897f06 commit e6d9619

File tree

7 files changed

+417
-304
lines changed

7 files changed

+417
-304
lines changed

src/enclave/enclave_util.c

-290
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
#include "enclave/enclave_util.h"
22

33
#include <stdarg.h>
4-
#include <stdlib.h>
54

65
#include "openenclave/internal/print.h"
76

@@ -39,292 +38,3 @@ void sgxlkl_info(char* msg, ...)
3938
va_start(args, msg);
4039
oe_host_vfprintf(OE_STDERR_FILENO, msg, args);
4140
}
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 */

src/include/enclave/enclave_util.h

-13
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,6 @@
55

66
#define ARRAY_SIZE(x) (sizeof(x) / sizeof(x[0]))
77

8-
#define SGXLKL_LKL_SYSCALL 1
9-
#define SGXLKL_INTERNAL_SYSCALL 3
10-
#define SGXLKL_IGNORED_SYSCALL 4
11-
#define SGXLKL_UNSUPPORTED_SYSCALL 5
12-
#define SGXLKL_REDIRECT_SYSCALL 6
13-
148
__attribute__((noreturn)) void sgxlkl_fail(char* msg, ...);
159

1610
void sgxlkl_error(char* msg, ...);
@@ -25,13 +19,6 @@ int int_log2(unsigned long long arg);
2519

2620
#ifdef DEBUG
2721

28-
#include <inttypes.h>
29-
#include <stdarg.h>
30-
#include <stdio.h>
31-
#include <stdlib.h>
32-
#include <string.h>
33-
#include <unistd.h>
34-
3522
#include "openenclave/internal/print.h"
3623

3724
extern int sgxlkl_verbose;

0 commit comments

Comments
 (0)