diff --git a/code/test/start.S b/code/test/start.S index 52911f8..d79b2f4 100644 --- a/code/test/start.S +++ b/code/test/start.S @@ -198,6 +198,21 @@ GetInt: j $31 .end GetInt + .globl ThreadCreate + .ent ThreadCreate +ThreadCreate: + addiu $2,$0,SC_ThreadCreate + syscall + j $31 + .end ThreadCreate + + .globl ThreadExit + .ent ThreadExit +ThreadExit: + addiu $2,$0,SC_ThreadExit + syscall + j $31 + .end ThreadExit #endif diff --git a/code/userprog/exception.cc b/code/userprog/exception.cc index 9177801..c4d751e 100644 --- a/code/userprog/exception.cc +++ b/code/userprog/exception.cc @@ -208,6 +208,14 @@ ExceptionHandler (ExceptionType which) machine->WriteMem(addr,sizeof(n),n); break; } + case SC_ThreadCreate: + { + break; + } + case SC_ThreadExit: + { + break; + } #endif default: { diff --git a/code/userprog/syscall.h b/code/userprog/syscall.h index 96c9d33..94c598a 100644 --- a/code/userprog/syscall.h +++ b/code/userprog/syscall.h @@ -38,6 +38,8 @@ #define SC_GetString 14 #define SC_PutInt 15 #define SC_GetInt 16 +#define SC_ThreadCreate 17 +#define SC_ThreadExit 18 #endif #ifdef IN_USER_MODE @@ -144,6 +146,8 @@ char GetChar(); void GetString(char *s, int n ); void PutInt(int n); void GetInt( int * n); +int ThreadCreate(void f(void * args), void * args); +void ThreadExit(void); #endif // CHANGED