From 4c27aa020309f756de85b39b9879dfe2f544b123 Mon Sep 17 00:00:00 2001 From: EDiasAlberto Date: Mon, 4 Nov 2024 00:57:19 +0000 Subject: [PATCH] Complete syscall lookup table, and syscall stubs and skeletons w/ S. --- src/userprog/syscall.c | 97 ++++++++++++++++++++++++++++++++++++++++++ src/userprog/syscall.h | 2 + 2 files changed, 99 insertions(+) diff --git a/src/userprog/syscall.c b/src/userprog/syscall.c index 5e53cd3..0e0a050 100644 --- a/src/userprog/syscall.c +++ b/src/userprog/syscall.c @@ -16,6 +16,17 @@ typedef uintptr_t (*syscall_function) (uintptr_t, uintptr_t, uintptr_t); /* System Call Functions */ static void halt (void); static void exit (int status); +static pid_t exec (const char *cmd_line); +static int wait (pid_t pid); +static bool file_create (const char *file, unsigned initial_size); +static bool file_remove (const char *file); +static int open (const char *file); +static int filesize (int fd); +static int read (int fd, void *buffer, unsigned size); +static int write (int fd, const void *buffer, unsigned size); +static void seek (int fd, unsigned position); +static unsigned tell (int fd); +static void close (int fd); static void *validate_user_pointer(void *ptr, size_t size); @@ -29,6 +40,17 @@ typedef struct { static const syscall_arguments syscall_lookup[] = { [SYS_HALT] = {(syscall_function) halt, 0}, [SYS_EXIT] = {(syscall_function) exit, 1}, + [SYS_EXEC] = {(syscall_function) exec, 1}, + [SYS_WAIT] = {(syscall_function) wait, 1}, + [SYS_CREATE] = {(syscall_function) file_create, 2}, + [SYS_REMOVE] = {(syscall_function) file_remove, 1}, + [SYS_OPEN] = {(syscall_function) open, 1}, + [SYS_FILESIZE] = {(syscall_function) filesize, 1}, + [SYS_READ] = {(syscall_function) read, 3}, + [SYS_WRITE] = {(syscall_function) write, 3}, + [SYS_SEEK] = {(syscall_function) seek, 2}, + [SYS_TELL] = {(syscall_function) tell, 1}, + [SYS_CLOSE] = {(syscall_function) close, 1}, }; static const int lookup_size @@ -72,6 +94,81 @@ exit (int status) //TODO } +static pid_t +exec (const char *cmd_line) +{ + //TODO + return 0; +} + +static int +wait (pid_t pid) +{ + //TODO + return 0; +} + +static bool +file_create (const char *file, unsigned initial_size) +{ + //TODO + return 0; +} + +static bool +file_remove (const char *file) +{ + //TODO + return 0; +} + +static int +open (const char *file) +{ + //TODO + return 0; +} + +static int +filesize (int fd) +{ + //TODO + return 0; +} + +static int +read (int fd, void *buffer, unsigned size) +{ + //TODO + return 0; +} + +static int +write (int fd, const void *buffer, unsigned size) +{ + //TODO + return 0; +} + +static void +seek (int fd, unsigned position) +{ + //TODO +} + +static unsigned +tell (int fd) +{ + //TODO + return 0; +} + +static void +close (int fd) +{ + //TODO +} + /* A function to validate if a block of memory starting at PTR and of size SIZE bytes is fully contained within user virtual memory. */ static void * diff --git a/src/userprog/syscall.h b/src/userprog/syscall.h index 9059096..702a6c7 100644 --- a/src/userprog/syscall.h +++ b/src/userprog/syscall.h @@ -1,6 +1,8 @@ #ifndef USERPROG_SYSCALL_H #define USERPROG_SYSCALL_H +typedef int pid_t; + void syscall_init (void); #endif /* userprog/syscall.h */