Compare commits

..

2 Commits

Author SHA1 Message Date
090b997d35
add sys_add_three_integers 2024-09-12 14:17:38 -04:00
f5117281a3
add sys_printchar 2024-09-12 13:22:02 -04:00
12 changed files with 86 additions and 2 deletions

View File

@ -110,6 +110,16 @@ void syscall(struct trapframe *tf) {
thread_exit();
break;
case SYS_printchar:
err = sys_printchar((char)tf->tf_a0);
break;
case SYS_add_three_integers:
err = sys_add_three_integers((int)tf->tf_a0, (int)tf->tf_a1, (int)tf->tf_a2,
&retval);
kprintf("%d\n", retval);
break;
/* Add stuff here */
default:

View File

@ -379,6 +379,8 @@ file vfs/devnull.c
file syscall/loadelf.c
file syscall/runprogram.c
file syscall/time_syscalls.c
file syscall/printchar.c
file syscall/add_three_integers.c
#
# Startup and initialization

View File

@ -94,6 +94,8 @@
// #define SYS_getpriority 38
// #define SYS_setpriority 39
// (process groups, sessions, and job control)
#define SYS_printchar 41
#define SYS_add_three_integers 42
// #define SYS_getpgid 40
// #define SYS_setpgid 41
// #define SYS_getsid 42

View File

@ -57,4 +57,8 @@ __DEAD void enter_new_process(int argc, userptr_t argv, userptr_t env,
int sys_reboot(int code);
int sys___time(userptr_t user_seconds, userptr_t user_nanoseconds);
int sys_printchar(char c);
int sys_add_three_integers(int a, int b, int c, int *ret);
#endif /* _SYSCALL_H_ */

View File

@ -0,0 +1,8 @@
#include <types.h>
#include <lib.h>
#include <syscall.h>
int sys_add_three_integers(int a, int b, int c, int *ret) {
*ret = a + b + c;
return 0;
}

7
kern/syscall/printchar.c Normal file
View File

@ -0,0 +1,7 @@
#include <types.h>
#include <lib.h>
#include <syscall.h>
int sys_printchar(char c) {
kprintf("%c", c);
return 0;
}

View File

@ -156,4 +156,7 @@ int execvp(const char *prog, char *const *args); /* calls execv */
char *getcwd(char *buf, size_t buflen); /* calls __getcwd */
time_t time(time_t *seconds); /* calls __time */
int printchar(char c);
int add_three_integers(int a, int b, int c);
#endif /* _UNISTD_H_ */

View File

@ -5,10 +5,10 @@
TOP=../..
.include "$(TOP)/mk/os161.config.mk"
SUBDIRS=add argtest badcall bigexec bigfile bigfork bigseek bloat conman \
SUBDIRS=add add_three_integers argtest badcall bigexec bigfile bigfork bigseek bloat conman \
crash ctest dirconc dirseek dirtest f_test factorial farm faulter \
filetest forkbomb forktest frack hash hog huge \
malloctest matmult multiexec palin parallelvm poisondisk psort \
malloctest matmult multiexec palin parallelvm poisondisk printchartest psort \
randcall redirect rmdirtest rmtest \
sbrktest schedpong sort sparsefile tail tictac triplehuge \
triplemat triplesort usemtest zero

View File

@ -0,0 +1,10 @@
# Makefile for add_three_integers
TOP=../../..
.include "$(TOP)/mk/os161.config.mk"
PROG=add_three_integers
SRCS=add_three_integers.c
BINDIR=/testbin
.include "$(TOP)/mk/os161.prog.mk"

View File

@ -0,0 +1,10 @@
#include <unistd.h>
extern int add_three_integers(int a, int b, int c);
int main() {
add_three_integers(3, 5, 2); // should output 10
add_three_integers(-5, 3, 1); // should output -1
return 0;
}

View File

@ -0,0 +1,11 @@
# Makefile for printchartest
TOP=../../..
.include "$(TOP)/mk/os161.config.mk"
PROG=printchartest
SRCS=printchartest.c
BINDIR=/testbin
.include "$(TOP)/mk/os161.prog.mk"

View File

@ -0,0 +1,17 @@
#include <unistd.h>
extern int printchar(char c);
int main() {
printchar('C');
printchar('S');
printchar('E');
printchar('4');
printchar('0');
printchar('0');
printchar('1');
printchar('\n');
return 0;
}