From 4bcd0f6a77e20c78632b64fe6ee57129556a531d Mon Sep 17 00:00:00 2001
From: rsc <rsc>
Date: Fri, 24 Aug 2007 20:04:53 +0000
Subject: [PATCH] Add yield system call, for zombie test program (bad idea?).

---
 syscall.c | 2 ++
 syscall.h | 1 +
 sysproc.c | 7 +++++++
 usys.S    | 1 +
 zombie.c  | 6 +++++-
 5 files changed, 16 insertions(+), 1 deletion(-)

diff --git a/syscall.c b/syscall.c
index eddf725..4853e35 100644
--- a/syscall.c
+++ b/syscall.c
@@ -105,6 +105,7 @@ extern int sys_sbrk(void);
 extern int sys_unlink(void);
 extern int sys_wait(void);
 extern int sys_write(void);
+extern int sys_yield(void);
 
 static int (*syscalls[])(void) = {
 [SYS_chdir]   sys_chdir,
@@ -126,6 +127,7 @@ static int (*syscalls[])(void) = {
 [SYS_unlink]  sys_unlink,
 [SYS_wait]    sys_wait,
 [SYS_write]   sys_write,
+[SYS_yield]   sys_yield,
 };
 
 void
diff --git a/syscall.h b/syscall.h
index c4e90ab..85ea220 100644
--- a/syscall.h
+++ b/syscall.h
@@ -18,3 +18,4 @@
 #define SYS_dup    17
 #define SYS_getpid 18
 #define SYS_sbrk   19
+#define SYS_yield  20
diff --git a/sysproc.c b/sysproc.c
index 9d599de..8cf3291 100644
--- a/sysproc.c
+++ b/sysproc.c
@@ -68,3 +68,10 @@ sys_sbrk(void)
   setupsegs(cp);
   return addr;
 }
+
+int
+sys_yield(void)
+{
+  yield();
+  return 0;
+}
diff --git a/usys.S b/usys.S
index 2f6141d..210774d 100644
--- a/usys.S
+++ b/usys.S
@@ -27,3 +27,4 @@ STUB(chdir)
 STUB(dup)
 STUB(getpid)
 STUB(sbrk)
+STUB(yield)
diff --git a/zombie.c b/zombie.c
index 952f77a..883ea75 100644
--- a/zombie.c
+++ b/zombie.c
@@ -7,6 +7,10 @@
 int
 main(void)
 {
-  fork();
+  int i;
+
+  if(fork() > 0)
+    for(i=0; i<10; i++)
+      yield();
   exit();
 }
-- 
GitLab