提交 56e43c9b 创建 作者: Austin Clements's avatar Austin Clements

Make kernel and user syscall signatures match for sysfile

Except for the pointer argument to sys_exec, which is an opaque uptr in the kernel.
上级 e42b00c6
...@@ -18,36 +18,37 @@ extern struct segdesc bootgdt[NSEGS]; ...@@ -18,36 +18,37 @@ extern struct segdesc bootgdt[NSEGS];
// syscalls // syscalls
struct stat; struct stat;
struct sockaddr;
long sys_chdir(const char*); int sys_chdir(const char*);
long sys_close(int); int sys_close(int);
long sys_dup(int); int sys_dup(int);
long sys_exec(const char*, u64); int sys_exec(const char*, u64);
int sys_exit(void) __attribute__((noreturn)); int sys_exit(void) __attribute__((noreturn));
int sys_fork(int); int sys_fork(int);
long sys_fstat(int, struct stat*); int sys_fstat(int, struct stat*);
int sys_getpid(void); int sys_getpid(void);
int sys_kill(int); int sys_kill(int);
long sys_link(const char*, const char*); int sys_link(const char*, const char*);
long sys_mkdirat(int, const char*); int sys_mkdirat(int, const char*);
long sys_mknod(const char*, int, int); int sys_mknod(const char*, int, int);
long sys_openat(int, const char*, int); int sys_openat(int, const char*, int);
long sys_pipe(int*); int sys_pipe(int*);
long sys_read(int, char*, int); ssize_t sys_read(int, void*, size_t);
char* sys_sbrk(int); char* sys_sbrk(int);
int sys_nsleep(u64); int sys_nsleep(u64);
long sys_unlink(const char*); int sys_unlink(const char*);
int sys_wait(void); int sys_wait(void);
long sys_write(int, const void*, int); ssize_t sys_write(int, const void*, size_t);
u64 sys_uptime(void); u64 sys_uptime(void);
int sys_map(uptr, size_t); int sys_map(uptr, size_t);
int sys_unmap(uptr, size_t); int sys_unmap(uptr, size_t);
int sys_halt(void); int sys_halt(void);
long sys_socket(int, int, int); int sys_socket(int, int, int);
long sys_bind(int, void*, int); int sys_bind(int xsock, const struct sockaddr *xaddr, int xaddrlen);
long sys_listen(int, int); int sys_listen(int, int);
long sys_accept(int, void*, void*); int sys_accept(int, struct sockaddr*, int*);
long sys_pread(int fd, void *ubuf, size_t count, off_t offset); ssize_t sys_pread(int fd, void *ubuf, size_t count, off_t offset);
long sys_async(int, size_t, off_t, u32, u32); long sys_async(int, size_t, off_t, u32, u32);
long sys_script(void *addr, u64 len, u64 chunk); long sys_script(void *addr, u64 len, u64 chunk);
int sys_setfs(u64 base); int sys_setfs(u64 base);
......
...@@ -5,9 +5,9 @@ extern "C" { ...@@ -5,9 +5,9 @@ extern "C" {
// system calls // system calls
extern int socket(int domain, int type, int protocol); extern int socket(int domain, int type, int protocol);
extern int bind(int sockfd, const struct sockaddr *addr, extern int bind(int sockfd, const struct sockaddr *addr,
socklen_t addrlen); int addrlen);
extern int listen(int sockfd, int backlog); extern int listen(int sockfd, int backlog);
extern int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen); extern int accept(int sockfd, struct sockaddr *addr, int *addrlen);
} }
static inline const char * static inline const char *
......
...@@ -9,13 +9,13 @@ int fork(int); ...@@ -9,13 +9,13 @@ int fork(int);
int exit(void) __attribute__((noreturn)); int exit(void) __attribute__((noreturn));
int wait(void); int wait(void);
int pipe(int*); int pipe(int*);
int write(int, const void*, int); ssize_t write(int, const void*, size_t);
int read(int, void*, int); ssize_t read(int, void*, size_t);
int close(int); int close(int);
int kill(int); int kill(int);
int exec(const char*, const char**); int exec(const char*, const char**);
int openat(int dirfd, const char *pathname, int omode); int openat(int dirfd, const char *pathname, int omode);
int mknod(const char*, short, short); int mknod(const char*, int, int);
int unlink(const char*); int unlink(const char*);
int fstat(int fd, struct stat*); int fstat(int fd, struct stat*);
int link(const char*, const char*); int link(const char*, const char*);
......
...@@ -273,9 +273,9 @@ netsocket(int domain, int type, int protocol) ...@@ -273,9 +273,9 @@ netsocket(int domain, int type, int protocol)
} }
long long
netbind(int sock, void *xaddr, int xaddrlen) netbind(int sock, const sockaddr *xaddr, int xaddrlen)
{ {
void *addr; const sockaddr *addr;
long r; long r;
addr = kmalloc(xaddrlen, "sockaddr"); addr = kmalloc(xaddrlen, "sockaddr");
...@@ -286,7 +286,7 @@ netbind(int sock, void *xaddr, int xaddrlen) ...@@ -286,7 +286,7 @@ netbind(int sock, void *xaddr, int xaddrlen)
return -1; return -1;
lwip_core_lock(); lwip_core_lock();
r = lwip_bind(sock, (const sockaddr*) addr, xaddrlen); r = lwip_bind(sock, addr, xaddrlen);
lwip_core_unlock(); lwip_core_unlock();
kmfree(addr, xaddrlen); kmfree(addr, xaddrlen);
return r; return r;
...@@ -304,14 +304,13 @@ netlisten(int sock, int backlog) ...@@ -304,14 +304,13 @@ netlisten(int sock, int backlog)
} }
long long
netaccept(int sock, void *xaddr, void *xaddrlen) netaccept(int sock, struct sockaddr *xaddr, int *xaddrlen)
{ {
socklen_t *lenptr = (socklen_t*) xaddrlen;
socklen_t len; socklen_t len;
void *addr; void *addr;
int ss; int ss;
if (fetchmem(&len, lenptr, sizeof(*lenptr))) if (fetchmem(&len, xaddrlen, sizeof(*xaddrlen)))
return -1; return -1;
addr = kmalloc(len, "sockaddr"); addr = kmalloc(len, "sockaddr");
...@@ -413,7 +412,7 @@ netsocket(int domain, int type, int protocol) ...@@ -413,7 +412,7 @@ netsocket(int domain, int type, int protocol)
} }
long long
netbind(int sock, void *xaddr, int xaddrlen) netbind(int sock, const struct sockaddr *xaddr, int xaddrlen)
{ {
return -1; return -1;
} }
...@@ -425,7 +424,7 @@ netlisten(int sock, int backlog) ...@@ -425,7 +424,7 @@ netlisten(int sock, int backlog)
} }
long long
netaccept(int sock, void *xaddr, void *xaddrlen) netaccept(int sock, struct sockaddr *xaddr, int *xaddrlen)
{ {
return -1; return -1;
} }
......
...@@ -28,7 +28,7 @@ fdalloc(file *f) ...@@ -28,7 +28,7 @@ fdalloc(file *f)
return myproc()->ftable->allocfd(f); return myproc()->ftable->allocfd(f);
} }
long int
sys_dup(int ofd) sys_dup(int ofd)
{ {
sref<file> f; sref<file> f;
...@@ -44,14 +44,14 @@ sys_dup(int ofd) ...@@ -44,14 +44,14 @@ sys_dup(int ofd)
return fd; return fd;
} }
s64 ssize_t
sys_read(int fd, char *p, int n) sys_read(int fd, void *p, size_t n)
{ {
sref<file> f; sref<file> f;
if(!getfile(fd, &f) || argcheckptr(p, n) < 0) if(!getfile(fd, &f) || argcheckptr(p, n) < 0)
return -1; return -1;
return f->read(p, n); return f->read(static_cast<char*>(p), n);
} }
ssize_t ssize_t
...@@ -70,8 +70,8 @@ sys_pread(int fd, void *ubuf, size_t count, off_t offset) ...@@ -70,8 +70,8 @@ sys_pread(int fd, void *ubuf, size_t count, off_t offset)
return f->pread((char*)ubuf, count, offset); return f->pread((char*)ubuf, count, offset);
} }
long ssize_t
sys_write(int fd, const void *p, int n) sys_write(int fd, const void *p, size_t n)
{ {
sref<file> f; sref<file> f;
...@@ -80,7 +80,7 @@ sys_write(int fd, const void *p, int n) ...@@ -80,7 +80,7 @@ sys_write(int fd, const void *p, int n)
return f->write(static_cast<const char*>(p), n); return f->write(static_cast<const char*>(p), n);
} }
long int
sys_close(int fd) sys_close(int fd)
{ {
sref<file> f; sref<file> f;
...@@ -91,7 +91,7 @@ sys_close(int fd) ...@@ -91,7 +91,7 @@ sys_close(int fd)
return 0; return 0;
} }
long int
sys_fstat(int fd, struct stat *st) sys_fstat(int fd, struct stat *st)
{ {
sref<file> f; sref<file> f;
...@@ -102,7 +102,7 @@ sys_fstat(int fd, struct stat *st) ...@@ -102,7 +102,7 @@ sys_fstat(int fd, struct stat *st)
} }
// Create the path new as a link to the same inode as old. // Create the path new as a link to the same inode as old.
long int
sys_link(const char *old, const char *newn) sys_link(const char *old, const char *newn)
{ {
char name[DIRSIZ]; char name[DIRSIZ];
...@@ -155,7 +155,7 @@ isdirempty(struct inode *dp) ...@@ -155,7 +155,7 @@ isdirempty(struct inode *dp)
return empty; return empty;
} }
long int
sys_unlink(const char *path) sys_unlink(const char *path)
{ {
struct inode *ip, *dp; struct inode *ip, *dp;
...@@ -266,7 +266,7 @@ create(inode *cwd, const char *path, short type, short major, short minor) ...@@ -266,7 +266,7 @@ create(inode *cwd, const char *path, short type, short major, short minor)
return ip; return ip;
} }
long int
sys_openat(int dirfd, const char *path, int omode) sys_openat(int dirfd, const char *path, int omode)
{ {
int fd; int fd;
...@@ -363,7 +363,7 @@ sys_openat(int dirfd, const char *path, int omode) ...@@ -363,7 +363,7 @@ sys_openat(int dirfd, const char *path, int omode)
return fd; return fd;
} }
long int
sys_mkdirat(int dirfd, const char *path) sys_mkdirat(int dirfd, const char *path)
{ {
struct inode *cwd; struct inode *cwd;
...@@ -388,7 +388,7 @@ sys_mkdirat(int dirfd, const char *path) ...@@ -388,7 +388,7 @@ sys_mkdirat(int dirfd, const char *path)
return 0; return 0;
} }
long int
sys_mknod(const char *path, int major, int minor) sys_mknod(const char *path, int major, int minor)
{ {
struct inode *ip; struct inode *ip;
...@@ -401,7 +401,7 @@ sys_mknod(const char *path, int major, int minor) ...@@ -401,7 +401,7 @@ sys_mknod(const char *path, int major, int minor)
return 0; return 0;
} }
long int
sys_chdir(const char *path) sys_chdir(const char *path)
{ {
struct inode *ip; struct inode *ip;
...@@ -419,7 +419,7 @@ sys_chdir(const char *path) ...@@ -419,7 +419,7 @@ sys_chdir(const char *path)
return 0; return 0;
} }
long int
sys_exec(const char *upath, u64 uargv) sys_exec(const char *upath, u64 uargv)
{ {
ANON_REGION(__func__, &perfgroup); ANON_REGION(__func__, &perfgroup);
...@@ -456,7 +456,7 @@ clean: ...@@ -456,7 +456,7 @@ clean:
return r; return r;
} }
long int
sys_pipe(int *fd) sys_pipe(int *fd)
{ {
struct file *rf, *wf; struct file *rf, *wf;
...@@ -522,7 +522,7 @@ allocsocket(struct file **rf, int *rfd) ...@@ -522,7 +522,7 @@ allocsocket(struct file **rf, int *rfd)
return 0; return 0;
} }
long int
sys_socket(int domain, int type, int protocol) sys_socket(int domain, int type, int protocol)
{ {
extern long netsocket(int domain, int type, int protocol); extern long netsocket(int domain, int type, int protocol);
...@@ -543,10 +543,10 @@ sys_socket(int domain, int type, int protocol) ...@@ -543,10 +543,10 @@ sys_socket(int domain, int type, int protocol)
return fd; return fd;
} }
long int
sys_bind(int xsock, void *xaddr, int xaddrlen) sys_bind(int xsock, const struct sockaddr *xaddr, int xaddrlen)
{ {
extern long netbind(int, void*, int); extern long netbind(int, const struct sockaddr*, int);
sref<file> f; sref<file> f;
if (!getsocket(xsock, &f)) if (!getsocket(xsock, &f))
...@@ -555,7 +555,7 @@ sys_bind(int xsock, void *xaddr, int xaddrlen) ...@@ -555,7 +555,7 @@ sys_bind(int xsock, void *xaddr, int xaddrlen)
return netbind(f->socket, xaddr, xaddrlen); return netbind(f->socket, xaddr, xaddrlen);
} }
long int
sys_listen(int xsock, int backlog) sys_listen(int xsock, int backlog)
{ {
extern long netlisten(int, int); extern long netlisten(int, int);
...@@ -567,10 +567,10 @@ sys_listen(int xsock, int backlog) ...@@ -567,10 +567,10 @@ sys_listen(int xsock, int backlog)
return netlisten(f->socket, backlog); return netlisten(f->socket, backlog);
} }
long int
sys_accept(int xsock, void *xaddr, void *xaddrlen) sys_accept(int xsock, struct sockaddr *xaddr, int *xaddrlen)
{ {
extern long netaccept(int, void*, void*); extern long netaccept(int, struct sockaddr*, int*);
file *cf; file *cf;
sref<file> f; sref<file> f;
int cfd; int cfd;
......
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论