2023-08-23 00:42:36 +08:00
|
|
|
#pragma once
|
|
|
|
|
|
|
|
|
|
#include "fs_backend.h"
|
2023-09-11 00:49:51 +08:00
|
|
|
#include "u_types.h"
|
2023-10-03 00:11:44 +08:00
|
|
|
#include <sys/uio.h>
|
2023-12-02 22:02:56 +08:00
|
|
|
#include <sys/stat.h>
|
2025-01-08 20:21:09 +08:00
|
|
|
#include <time.h>
|
2025-02-05 09:10:55 +08:00
|
|
|
#include <sys/socket.h>
|
2025-03-18 21:18:26 +08:00
|
|
|
#include <sys/ipc.h>
|
|
|
|
|
#include "sys/shm.h"
|
2025-03-23 17:35:56 +08:00
|
|
|
#include <poll.h>
|
2025-03-18 21:18:26 +08:00
|
|
|
// typedef int key_t;
|
|
|
|
|
|
2023-09-11 00:49:51 +08:00
|
|
|
#define ARG_1_BE(ap, arg0, type0) \
|
|
|
|
|
do \
|
|
|
|
|
{ \
|
|
|
|
|
arg0 = (type0)va_arg(ap, long); \
|
|
|
|
|
} while (0)
|
|
|
|
|
|
|
|
|
|
#define ARG_2_BE(ap, arg0, type0, arg1, type1) \
|
|
|
|
|
do \
|
|
|
|
|
{ \
|
|
|
|
|
arg0 = (type0)va_arg(ap, long); \
|
|
|
|
|
arg1 = (type1)va_arg(ap, long); \
|
|
|
|
|
} while (0)
|
|
|
|
|
|
|
|
|
|
#define ARG_3_BE(ap, arg0, type0, arg1, type1, arg2, type2) \
|
|
|
|
|
do \
|
|
|
|
|
{ \
|
|
|
|
|
arg0 = (type0)va_arg(ap, long); \
|
|
|
|
|
arg1 = (type1)va_arg(ap, long); \
|
|
|
|
|
arg2 = (type2)va_arg(ap, long); \
|
|
|
|
|
} while (0)
|
|
|
|
|
|
2023-11-20 18:12:37 +08:00
|
|
|
#define ARG_4_BE(ap, arg0, type0, arg1, type1, arg2, type2, arg3, type3) \
|
|
|
|
|
do \
|
|
|
|
|
{ \
|
|
|
|
|
arg0 = (type0)va_arg(ap, long); \
|
|
|
|
|
arg1 = (type1)va_arg(ap, long); \
|
|
|
|
|
arg2 = (type2)va_arg(ap, long); \
|
|
|
|
|
arg3 = (type3)va_arg(ap, long); \
|
|
|
|
|
} while (0)
|
|
|
|
|
|
2024-07-30 09:37:49 +08:00
|
|
|
#define ARG_5_BE(ap, arg0, type0, arg1, type1, arg2, type2, arg3, type3, arg4, type4) \
|
|
|
|
|
do \
|
|
|
|
|
{ \
|
|
|
|
|
arg0 = (type0)va_arg(ap, long); \
|
|
|
|
|
arg1 = (type1)va_arg(ap, long); \
|
|
|
|
|
arg2 = (type2)va_arg(ap, long); \
|
|
|
|
|
arg3 = (type3)va_arg(ap, long); \
|
|
|
|
|
arg4 = (type4)va_arg(ap, long); \
|
|
|
|
|
} while (0)
|
|
|
|
|
|
2023-09-11 00:49:51 +08:00
|
|
|
#define ARG_6_BE(ap, arg0, type0, arg1, type1, arg2, type2, arg3, type3, arg4, type4, arg5, type5) \
|
|
|
|
|
do \
|
|
|
|
|
{ \
|
|
|
|
|
arg0 = (type0)va_arg(ap, long); \
|
|
|
|
|
arg1 = (type1)va_arg(ap, long); \
|
|
|
|
|
arg2 = (type2)va_arg(ap, long); \
|
|
|
|
|
arg3 = (type3)va_arg(ap, long); \
|
|
|
|
|
arg4 = (type4)va_arg(ap, long); \
|
|
|
|
|
arg5 = (type5)va_arg(ap, long); \
|
|
|
|
|
} while (0)
|
2023-08-23 00:42:36 +08:00
|
|
|
|
2024-07-30 09:37:49 +08:00
|
|
|
#define ARG_7_BE(ap, arg0, type0, arg1, type1, arg2, type2, \
|
|
|
|
|
arg3, type3, arg4, type4, arg5, type5, arg6, type6) \
|
|
|
|
|
do \
|
|
|
|
|
{ \
|
|
|
|
|
arg0 = (type0)va_arg(ap, long); \
|
|
|
|
|
arg1 = (type1)va_arg(ap, long); \
|
|
|
|
|
arg2 = (type2)va_arg(ap, long); \
|
|
|
|
|
arg3 = (type3)va_arg(ap, long); \
|
|
|
|
|
arg4 = (type4)va_arg(ap, long); \
|
|
|
|
|
arg5 = (type5)va_arg(ap, long); \
|
|
|
|
|
arg6 = (type6)va_arg(ap, long); \
|
|
|
|
|
} while (0)
|
|
|
|
|
|
2023-08-23 00:42:36 +08:00
|
|
|
long syscall_backend(long sys_inx, ...);
|
2023-09-11 00:49:51 +08:00
|
|
|
|
2023-11-18 23:31:00 +08:00
|
|
|
void fs_backend_init(void);
|
2023-12-02 22:02:56 +08:00
|
|
|
long be_lseek(long fd, long offset, long whence);
|
|
|
|
|
int be_open(const char *path, int flags, mode_t mode);
|
|
|
|
|
int be_close(int fd);
|
2025-01-06 19:07:10 +08:00
|
|
|
void be_exit(long exit_code);
|
|
|
|
|
umword_t be_mmap2(void *start,
|
|
|
|
|
size_t len,
|
|
|
|
|
long prot,
|
|
|
|
|
long flags,
|
|
|
|
|
long fd,
|
|
|
|
|
long _offset);
|
2023-10-03 00:11:44 +08:00
|
|
|
long be_read(long fd, char *buf, long size);
|
|
|
|
|
long be_write(long fd, char *buf, long size);
|
2023-12-02 09:42:22 +08:00
|
|
|
long be_readv(long fd, const struct iovec *iov, long iovcnt);
|
2023-10-03 00:11:44 +08:00
|
|
|
long be_writev(long fd, const struct iovec *iov, long iovcnt);
|
|
|
|
|
long be_ioctl(long fd, long req, void *args);
|
|
|
|
|
long be_set_tid_address(int *val);
|
|
|
|
|
long be_set_thread_area(void *p);
|
2025-01-06 19:07:10 +08:00
|
|
|
long be_getdents(long fd, char *buf, size_t size);
|
2024-11-11 08:59:39 +08:00
|
|
|
long be_mkdir(const char *path, mode_t mode);
|
2025-01-06 19:07:10 +08:00
|
|
|
long be_symlink(const char *src, const char *dst);
|
2025-01-08 20:21:09 +08:00
|
|
|
long be_stat(const char *path, void *buf);
|
2025-01-25 15:29:06 +08:00
|
|
|
long be_unlink(const char *path);
|
2025-01-06 19:07:10 +08:00
|
|
|
int be_clone(int (*func)(void *), void *stack, int flags, void *args, pid_t *ptid, void *tls, pid_t *ctid);
|
2025-01-26 11:54:01 +08:00
|
|
|
long be_munmap(void *start, size_t len);
|
2024-04-06 16:08:27 +00:00
|
|
|
umword_t be_mmap(void *start,
|
2024-07-30 09:37:49 +08:00
|
|
|
size_t len,
|
|
|
|
|
long prot,
|
|
|
|
|
long flags,
|
|
|
|
|
long fd,
|
|
|
|
|
long _offset);
|
2025-02-25 23:59:56 +08:00
|
|
|
int be_fcntl(int fd, int cmd, void *arg);
|
|
|
|
|
long be_chdir(const char *path);
|
2025-03-18 21:18:26 +08:00
|
|
|
long be_ftruncate(int fd, off_t off);
|
2025-03-23 17:35:56 +08:00
|
|
|
long be_poll(struct pollfd *fds, uint32_t n, int timeout);
|
|
|
|
|
long be_fstat(int fd, void *_buf);
|
|
|
|
|
long be_getcwd(char *path, size_t size);
|
|
|
|
|
int be_access(const char *filename, int amode);
|
2025-02-05 09:10:55 +08:00
|
|
|
// net api
|
|
|
|
|
int be_accept(int s, struct sockaddr *addr, socklen_t *addrlen);
|
|
|
|
|
int be_bind(int s, const struct sockaddr *name, socklen_t namelen);
|
|
|
|
|
int be_shutdown(int s, int how);
|
|
|
|
|
int be_getpeername(int s, struct sockaddr *name, socklen_t *namelen);
|
|
|
|
|
int be_getsockname(int s, struct sockaddr *name, socklen_t *namelen);
|
|
|
|
|
int be_getsockopt(int s, int level, int optname, void *optval, socklen_t *optlen);
|
|
|
|
|
int be_setsockopt(int s, int level, int optname, const void *optval, socklen_t optlen);
|
|
|
|
|
int be_connect(int s, const struct sockaddr *name, socklen_t namelen);
|
|
|
|
|
int be_listen(int s, int backlog);
|
|
|
|
|
ssize_t be_recv(int s, void *mem, size_t len, int flags);
|
|
|
|
|
ssize_t be_recvfrom(int s, void *mem, size_t len, int flags,
|
|
|
|
|
struct sockaddr *from, socklen_t *fromlen);
|
|
|
|
|
ssize_t be_send(int s, const void *dataptr, size_t size, int flags);
|
|
|
|
|
ssize_t be_sendto(int s, const void *dataptr, size_t size, int flags,
|
|
|
|
|
const struct sockaddr *to, socklen_t tolen);
|
|
|
|
|
int be_socket(int domain, int type, int protocol);
|
|
|
|
|
// end net api
|
2024-01-07 23:32:30 +08:00
|
|
|
long be_clock_gettime(clockid_t clk_id, struct timespec *tp);
|
2023-10-03 00:11:44 +08:00
|
|
|
|
2025-03-18 21:18:26 +08:00
|
|
|
//shm
|
|
|
|
|
int be_shm_open(const char *name, int flag, mode_t mode);
|
|
|
|
|
int be_inner_shm_ftruncate(sd_t fd, size_t size);
|
|
|
|
|
int be_shm_unlink(const char *path);
|
|
|
|
|
long be_shm_mmap(void *start,
|
|
|
|
|
size_t len,
|
|
|
|
|
long prot,
|
|
|
|
|
long flags,
|
|
|
|
|
sd_t sd,
|
|
|
|
|
long _offset);
|
|
|
|
|
|
|
|
|
|
int be_shmget(key_t key, size_t size, int flag);
|
|
|
|
|
void *be_shmat(int id, const void *addr, int flag);
|
|
|
|
|
int be_shmdt(const void *addr);
|
|
|
|
|
int be_shmctl(int id, int cmd, struct shmid_ds *buf);
|
|
|
|
|
|
2024-04-06 16:08:27 +00:00
|
|
|
long sys_mmap(va_list ap);
|
2023-10-03 00:11:44 +08:00
|
|
|
long sys_set_tid_address(va_list ap);
|
|
|
|
|
long sys_set_thread_area(va_list ap);
|
2024-07-30 09:37:49 +08:00
|
|
|
long sys_exit(va_list ap);
|
2024-04-04 16:51:29 +00:00
|
|
|
long sys_munmap(va_list ap);
|
2024-07-30 09:37:49 +08:00
|
|
|
long sys__clone(va_list ap);
|
|
|
|
|
long sys_futex(va_list ap);
|
|
|
|
|
long sys_clock_nanosleep(va_list ap);
|
|
|
|
|
long sys_nanosleep(va_list ap);
|
2023-11-19 23:01:35 +08:00
|
|
|
int be_futex(uint32_t *uaddr, int futex_op, uint32_t val,
|
|
|
|
|
const struct timespec *timeout, uint32_t uaddr2, uint32_t val3);
|
2023-11-20 16:46:50 +08:00
|
|
|
void pthread_cnt_inc(void);
|
|
|
|
|
int pthread_cnt_dec(void);
|
|
|
|
|
int pthread_get(void);
|