sgx_wamr.edl 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158
  1. /*
  2. * Copyright (C) 2019 Intel Corporation. All rights reserved.
  3. * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
  4. */
  5. enclave {
  6. include "stdint.h"
  7. include "stdbool.h"
  8. include "unistd.h"
  9. untrusted {
  10. int ocall_open([in, string]const char *pathname, int flags,
  11. bool has_mode, unsigned mode);
  12. int ocall_openat(int dirfd,
  13. [in, string]const char *pathname, int flags,
  14. bool has_mode, unsigned mode);
  15. int ocall_close(int fd);
  16. ssize_t ocall_read(int fd, [out, size=read_size]void *buf,
  17. size_t read_size);
  18. off_t ocall_lseek(int fd, off_t offset, int whence);
  19. int ocall_ftruncate(int fd, off_t length);
  20. int ocall_fsync(int fd);
  21. int ocall_fdatasync(int fd);
  22. int ocall_isatty(int fd);
  23. void ocall_fdopendir(int fd, [out]void **p_dirp);
  24. /* implementation related to multiple thread */
  25. void *ocall_readdir([user_check]void *dirp);
  26. void ocall_rewinddir([user_check]void *dirp);
  27. void ocall_seekdir([user_check]void *dirp, long loc);
  28. long ocall_telldir([user_check]void *dirp);
  29. int ocall_closedir([user_check]void *dirp);
  30. int ocall_stat([in, string]const char *pathname,
  31. [out, size=buf_len]void *buf,
  32. unsigned int buf_len);
  33. int ocall_fstat(int fd, [out, size=buf_len]void *buf,
  34. unsigned int buf_len);
  35. int ocall_fstatat(int dirfd, [in, string]const char *pathname,
  36. [out, size=buf_len]void *buf,
  37. unsigned int buf_len, int flags);
  38. int ocall_mkdirat(int dirfd, [in, string]const char *pathname,
  39. unsigned mode);
  40. int ocall_link([in, string] const char *oldpath,
  41. [in, string] const char *newpath);
  42. int ocall_linkat(int olddirfd, [in, string]const char *oldpath,
  43. int newdirfd, [in, string]const char *newpath,
  44. int flags);
  45. int ocall_unlinkat(int dirfd, [in, string]const char *pathname,
  46. int flags);
  47. ssize_t ocall_readlink([in, string]const char *pathname,
  48. [out, size=bufsiz]char *buf,
  49. size_t bufsiz);
  50. ssize_t ocall_readlinkat(int dirfd,
  51. [in, string]const char *pathname,
  52. [out, size=bufsiz]char *buf,
  53. size_t bufsiz);
  54. int ocall_renameat(int olddirfd,
  55. [in, string]const char *oldpath,
  56. int newdirfd,
  57. [in, string]const char *newpath);
  58. int ocall_symlinkat([in ,string]const char *target,
  59. int newdirfd,
  60. [in, string]const char *linkpath);
  61. int ocall_ioctl(int fd, unsigned long request,
  62. [out, size=arg_len]void *arg,
  63. unsigned int arg_len);
  64. int ocall_fcntl(int fd, int cmd);
  65. int ocall_fcntl_long(int fd, int cmd, long arg);
  66. int ocall_realpath([in, string]const char *path,
  67. [out, size=buf_len]char *buf,
  68. unsigned int buf_len);
  69. int ocall_posix_fallocate(int fd, off_t offset, off_t len);
  70. int ocall_poll([in, out, size=fds_len]void *fds, unsigned nfds,
  71. int timeout, unsigned int fds_len);
  72. int ocall_getopt(int argc,
  73. [in, size=argv_buf_len]char *argv_buf,
  74. unsigned int argv_buf_len,
  75. [in, string]const char *optstring);
  76. ssize_t ocall_readv(int fd,
  77. [in, out, size=buf_size]char *iov_buf,
  78. unsigned int buf_size, int iovcnt,
  79. bool has_offset, off_t offset);
  80. ssize_t ocall_writev(int fd,
  81. [in, size=buf_size]char *iov_buf,
  82. unsigned int buf_size, int iovcnt,
  83. bool has_offset, off_t offset);
  84. /* time clock */
  85. int ocall_clock_gettime(unsigned clock_id,
  86. [out, size=tp_buf_size]void *tp_buf,
  87. unsigned int tp_buf_size);
  88. int ocall_clock_getres(int clock_id,
  89. [out, size=res_buf_size]void *res_buf,
  90. unsigned int res_buf_size);
  91. int ocall_utimensat(int dirfd, [in, string]const char *pathname,
  92. [in, size=times_buf_size]const void *times_buf,
  93. unsigned int times_buf_size, int flags);
  94. int ocall_futimens(int fd, [in, size=times_buf_size]const void *times_buf,
  95. unsigned int times_buf_size);
  96. int ocall_clock_nanosleep(unsigned clock_id, int flags,
  97. [in, size=req_buf_size]const void *req_buf,
  98. unsigned int req_buf_size,
  99. [out, size=rem_buf_size]void *rem_buf,
  100. unsigned int rem_buf_size);
  101. int ocall_raise(int sig);
  102. int ocall_sched_yield();
  103. int ocall_pthread_rwlock_init([out]void **rwlock, [user_check]void *attr);
  104. int ocall_pthread_rwlock_destroy([user_check]void *rwlock);
  105. int ocall_pthread_rwlock_rdlock([user_check]void *rwlock);
  106. int ocall_pthread_rwlock_wrlock([user_check]void *rwlock);
  107. int ocall_pthread_rwlock_unlock([user_check]void *rwlock);
  108. int ocall_get_errno();
  109. /* sockets */
  110. int ocall_accept(int sockfd, [in, size=addr_size]void *addr,
  111. [in, size=4] uint32_t *addrlen, uint32_t addr_size);
  112. int ocall_bind(int sockfd, [in, size=addrlen]const void *addr,
  113. uint32_t addrlen);
  114. int ocall_connect(int sockfd, [in, size=addrlen]void *addr, uint32_t addrlen);
  115. int ocall_getsockname(int sockfd, [out, size=addr_size]void *addr,
  116. [in, out, size=4]uint32_t *addrlen, uint32_t addr_size);
  117. int ocall_getpeername(int sockfd, [out, size=addr_size]void *addr,
  118. [in, out, size=4]uint32_t *addrlen, uint32_t addr_size);
  119. int ocall_getsockopt(int sockfd, int level, int optname,
  120. [out, size=val_buf_size]void *val_buf,
  121. unsigned int val_buf_size,
  122. [in, out, size=4]void *len_buf);
  123. int ocall_listen(int sockfd, int backlog);
  124. int ocall_recv(int sockfd, [out, size=len]void *buf, size_t len, int flags);
  125. ssize_t ocall_recvfrom(int sockfd, [out, size=len]void *buf, size_t len, int flags,
  126. [out, size=addr_size]void *src_addr,
  127. [in, out, size=4]uint32_t *addrlen, uint32_t addr_size);
  128. ssize_t ocall_recvmsg(int sockfd,
  129. [in, out, size=msg_buf_size]void *msg_buf,
  130. unsigned int msg_buf_size,
  131. int flags);
  132. int ocall_send(int sockfd, [in, size=len]const void *buf, size_t len, int flags);
  133. ssize_t ocall_sendto(int sockfd, [in, size=len]const void *buf, size_t len, int flags,
  134. [in, size=addrlen]void *dest_addr, uint32_t addrlen);
  135. ssize_t ocall_sendmsg(int sockfd,
  136. [in, size=msg_buf_size]void *msg_buf,
  137. unsigned int msg_buf_size,
  138. int flags);
  139. int ocall_setsockopt(int sockfd, int level, int optname,
  140. [in, size=optlen]void *optval,
  141. unsigned int optlen);
  142. int ocall_shutdown(int sockfd, int how);
  143. int ocall_socket(int domain, int type, int protocol);
  144. };
  145. };