Commit Graph

406 Commits

Author SHA1 Message Date
He Sun
1788f94bfe Fix the poll of channel according to gvisor pipe poll test 2021-01-22 13:22:02 +08:00
He Sun
2ea7fc1ad6 Add Unix socket support for poll
A relay notifier that observes the underlying endpoint is added as the
notifier for the socket. It broadcasts to its observers when either end
of the channel has IoEvents.
2021-01-21 23:45:36 +08:00
He Sun
0b829ca087 Fix the return IoEvents of channel poll 2021-01-21 23:45:36 +08:00
He Sun
3101d8fa88 Resolve the nested block of Unix socket
Read, write, connect and accept have both blocking and nonblocking mode.
It may block after the status lock is acquired resulting in potential
deadlock. This commit resolve the deadlock issue.
2021-01-21 23:45:36 +08:00
He Sun
1101bdf9e7 Fix multiplication overflow 2021-01-21 18:18:57 +08:00
LI Qing
0b51d83811 Add ProcFS 2021-01-20 12:42:00 +08:00
LI Qing
8bfef4086f Polish the function names in FS 2021-01-20 12:42:00 +08:00
LI Qing
d6cd89f03b Add DevFS for device files 2021-01-20 11:40:39 +08:00
He Sun
b5ea09066a Add support for libos code coverage
1. Add OCCLUM_COV to conditionally enable gcov profiling for libos Rust
code;
2. Add a makefile target to locally generate the coverage report in html
format.
2021-01-19 15:30:26 +08:00
zongmin.gu
e304c9fa23 Bump version to 0.19.1 2021-01-13 11:09:16 +08:00
LI Qing
6416692a16 Fix the wrong definition of StructuredIoctlArgType 2021-01-08 15:38:37 +08:00
He Sun
7c4c5dd7e5 Fix wrong SIGPIPE number 2021-01-07 12:45:38 +08:00
zongmin.gu
3cb3165f8b Bump Occlum version to 0.19.0 2020-12-19 19:53:31 +08:00
LI Qing
e1c9739577 Remove the flags argument handling in fchmodat syscall
The flags argument of fchmodat syscall is handled by the wrapper
function in libc already, so Occlum does not need to accept this argument.
2020-12-19 19:53:31 +08:00
He Sun
f1e5f574ca Add support for DCAP
1. Five new ioctl commands of /dev/sgx are added for occlum
applications to securely get and verify DCAP quote;
2. Not all the functions of the intel DCAP package are open to
developers to simplify the DCAP usage;
3. The test may only run on the platform with DCAP driver installed;
4. A macro OCCLUM_DISABLE_DCAP is used to separate the DCAP code from
the other code.
5. Skip DCAP test when DCAP driver is not detected or in simulation mode
2020-12-19 19:53:31 +08:00
LI Qing
a53562adea Add support to mount FS at any existing directories 2020-12-17 15:55:40 +08:00
zongmin.gu
ce174e1496 Fix the UDS path too long issue 2020-12-16 23:28:24 +08:00
LI Qing
1a00884e1c Optimize the loading process of the ELF file
1. Load ld.so according to the executable automatically
2. Add the position-independent check for ELF file
2020-12-16 19:21:22 +08:00
LI Qing
318f1e6a4f Add posix_spawn support for Glibc 2020-12-16 19:21:22 +08:00
LI Qing
40a52b56be Initialize a randon number on stack for the stack protector 2020-12-16 19:21:22 +08:00
He Sun
3b915db774 Refactor Unix socket
1. Implement type-safe functions;
2. Improve the correctness of nearly all the functions;
3. Improve the readability by introducing Listener and Endpoint for StreamUnix;
4. Substitue RingBuf with Channel in Unix socket.
2020-12-16 01:28:53 +08:00
zongmin.gu
1f1502c7d5 Bump to 0.18.1 2020-12-03 10:57:22 +08:00
zongmin.gu
f699ff3efd Fix Occlum memory leak issue
The enable_backtrace function should only be used in the init function.
2020-12-02 15:08:50 +08:00
zongmin.gu
b5e3558f5f Enable EPC usage measurement feature 2020-12-02 15:08:50 +08:00
Tate, Hongliang Tian
9809d81c4e Fix a bug of channels
This bugfix ensures that when an object of Producer/Consumer for
channels is dropped, its shutdown method is called automatically. This ensures
that the peer of a Producer/Consumer gets notified and won't wait indefinitely.
2020-12-02 14:51:26 +08:00
Hui, Chunyang
0a810b9b58 Add return error code for ecall 2020-12-02 13:29:41 +08:00
zongmin.gu
928cfecf9d Change Tcmalloc as optional feature
The current Tcmalloc has memory leak issue. So change it as optional. By
default, dlmalloc is used. Enable tcmalloc with below command:
make TCMALLOC=Y
2020-11-23 21:26:41 +08:00
zongmin.gu
3163a62963 Bump version to 0.18.0 2020-11-20 09:24:24 +08:00
LI Qing
4769a2600e Add FUTEX_WAIT_BITSET and FUTEX_WAKE_BITSET options for futex syscall 2020-11-20 09:24:24 +08:00
Tate, Hongliang Tian
34288a5e37 Use HostFd to manage the lifetime of host OS resources 2020-11-19 08:13:57 +08:00
Tate, Hongliang Tian
83ce318f6c Unregister a file from epoll files when the file is closed
Usually, files are unregistered from an epoll file via the EPOLL_CTL_DEL command
explicitly. But for the sake of users' convenience, Linux supports
unregistering a file automatically from the epoll files that monitor the file
when the file is closed. This commit adds this capability.
2020-11-18 22:17:23 +08:00
Tate, Hongliang Tian
1de089ac7d Rewrite the select syscall using the new poll implementation 2020-11-18 19:35:04 +08:00
Tate, Hongliang Tian
a857cf9bfb Fix a design flaw in handling events of host files 2020-11-18 19:35:04 +08:00
Tate, Hongliang Tian
798cbfd843 Fix pushing/popping zero-length slices to/from Channel 2020-11-18 19:35:04 +08:00
Tate, Hongliang Tian
10f3ffa9e6 Fix Channel's notifier being inconsistent with poll/epoll 2020-11-18 19:35:04 +08:00
Tate, Hongliang Tian
5b6d06b808 Fix a bug in poll's handling of input pollfds 2020-11-18 19:35:04 +08:00
zongmin.gu
0490164a8f Replace dlmalloc with tcmalloc 2020-11-18 16:46:38 +08:00
LI Qing
9bf2a77e16 Add getdents syscall 2020-11-18 16:44:11 +08:00
Hui, Chunyang
72ad448cf9 Fix cargo fmt error 2020-11-18 11:54:22 +08:00
zongmin.gu
d63bfac61c Remove the FP area initialization code
When using the optimized string lib in Occlum, the memset function would
use xmm0 register, as the result, the FP area initialization code would
modify the FP area before saving it. So just ignor the FP area
initialization code.
2020-11-17 14:42:39 +08:00
LI Qing
5f05c16700 Init the memory for elf to zero 2020-11-16 15:04:13 +08:00
Tate, Hongliang Tian
71df1cf2c8 Add the new poll implementation 2020-11-12 15:49:20 +08:00
Tate, Hongliang Tian
7133315f46 Make the IoEvents type to more complete and robust 2020-11-12 15:49:20 +08:00
He Sun
4260a8defc Fix two cpuid bugs
1. >> has higher precedence than &. Use parentheses to conduct & first;
2. In the latest Intel software developer's manual, cpuid leaf 06H EDX
is related to the logical processor.
2020-11-12 15:48:04 +08:00
Tate, Hongliang Tian
6fdfa57a14 Add the new epoll implementation
Before this commit, the epoll implementation works by simply delegating to the
host OS through OCall. One major problem with this implementation is
that it can only handle files that are backed by a file of the host OS
(e.g., sockets), but not those are are mainly implemented by the LibOS
(e.g., pipes). Therefore, a new epoll implementation that can handle all
kinds of files is needed.

This commit completely rewrites the epoll implementation by leveraging
the new event subsystem. Now the new epoll can handle all file types:

1. Host files, e.g., sockets, eventfd;
2. LibOS files, e.g., pipes;
3. Hybrid files, e.g., epoll files.

For a new file type to support epoll, it only neends to implement no
more than four methods of the File trait:

* poll (required for all file types);
* notifier (required for all file files);
* host_fd (only required for host files);
* recv_host_events (only required for host files).
2020-11-10 14:34:40 +08:00
Tate, Hongliang Tian
2ff4b1c776 Reduce the FileRef type to Arc<dyn File>
The FileRef type was defined as Arc<Box<dyn File>>, where the use of Box is
unnecessary. This commit reduces the type to Arc<dyn File>.
2020-11-10 14:34:40 +08:00
LI Qing
6e83595b74 Fix the return value of getcwd syscall 2020-11-09 19:45:21 +08:00
LI Qing
f87bbc586b Fix the alignment of stack entrypoint
Libc ABI requires 16-byte alignment of the stack entrypoint
2020-11-09 19:43:00 +08:00
He Sun
9dd94cdbd6 Fix the conflict of symbols with glibc 2020-11-05 21:57:48 +08:00
He Sun
0bb8f5922e Use sccache to accelerate Rust build 2020-11-05 21:54:57 +08:00