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