Replaces SYS_open with SYS_openat (XCC)
authorBarret Rhoden <brho@cs.berkeley.edu>
Tue, 15 Sep 2015 20:21:59 +0000 (16:21 -0400)
committerBarret Rhoden <brho@cs.berkeley.edu>
Mon, 28 Sep 2015 19:14:00 +0000 (15:14 -0400)
openat() is now available as a syscall and through glibc's shims.

Rebuild glibc and anything that may have called open().  Go probably
needs changed too, since SYS_open is gone.

kern/include/ros/bits/syscall.h
kern/src/syscall.c
tools/compilers/gcc-glibc/glibc-2.19-akaros/sysdeps/akaros/open.c
tools/compilers/gcc-glibc/glibc-2.19-akaros/sysdeps/akaros/openat.c

index 0a5c243..9c4a800 100644 (file)
@@ -49,7 +49,7 @@
 /* FS Syscalls */
 #define SYS_read                               100
 #define SYS_write                              101
-#define SYS_open                               102
+#define SYS_openat                             102
 #define SYS_close                              103
 #define SYS_fstat                              104
 #define SYS_stat                               105
index 0b75d14..0a4361f 100644 (file)
@@ -1425,12 +1425,6 @@ static intreg_t sys_openat(struct proc *p, int fromfd, const char *path,
        return fd;
 }
 
-static intreg_t sys_open(struct proc *p, const char *path, size_t path_l,
-                         int oflag, int mode)
-{
-       return sys_openat(p, AT_FDCWD, path, path_l, oflag, mode);
-}
-
 static intreg_t sys_close(struct proc *p, int fd)
 {
        struct file *file = get_file_from_fd(&p->open_files, fd);
@@ -2416,7 +2410,7 @@ const struct sys_table_entry syscall_table[] = {
 
        [SYS_read] = {(syscall_t)sys_read, "read"},
        [SYS_write] = {(syscall_t)sys_write, "write"},
-       [SYS_open] = {(syscall_t)sys_open, "open"},
+       [SYS_openat] = {(syscall_t)sys_openat, "openat"},
        [SYS_close] = {(syscall_t)sys_close, "close"},
        [SYS_fstat] = {(syscall_t)sys_fstat, "fstat"},
        [SYS_stat] = {(syscall_t)sys_stat, "stat"},
index 44069bd..225cd26 100644 (file)
@@ -45,7 +45,7 @@ __libc_open (const char* file, int oflag, ...)
       va_end(arg);
     }
 
-  return ros_syscall(SYS_open, file, strlen(file), oflag, mode, 0, 0);
+  return ros_syscall(SYS_openat, AT_FDCWD, file, strlen(file), oflag, mode, 0);
 }
 libc_hidden_def (__libc_open)
 weak_alias (__libc_open, __open)
index 7c1344b..322d7a5 100644 (file)
@@ -68,15 +68,7 @@ __openat (fd, file, oflag)
       va_end (arg);
     }
 
-
-       /* TODO: actually implement openat as the primary kernel interface.  for
-        * now, only allow absolute or relative-to-CWD paths. */
-       if (fd != AT_FDCWD && file[0] != '/') {
-               werrstr("openat not implemented");
-               __set_errno (ENOSYS);
-               return -1;
-       }
-       return ros_syscall(SYS_open, file, strlen(file), oflag, mode, 0, 0);
+       return ros_syscall(SYS_openat, fd, file, strlen(file), oflag, mode, 0);
 }
 libc_hidden_def (__openat)
 weak_alias (__openat, openat)