|
|
|
This is a patch for system call user library. By using this patch, you
|
|
should be able to run pintos project 2 on linux.cs and CSIL machines.
|
|
|
|
To apply the patch :
|
|
|
|
1. Backup the original src/lib/user/syscall.c code
|
|
|
|
2. Replace that syscall.c with syscall-hacked.c (inside p2 guideline folder)
|
|
|
|
3. Go to src/userprog and run make clean
|
|
|
|
4. Run make or make check
|
|
|
|
|
|
If you still see any problem, please let us know.
|
|
|
|
|
|
# Riza's explanation:
|
|
|
|
What I do in syscall.c is to make sure that userprogram sets up the
|
|
argument stack correctly when passing it to syscall handler. When I did
|
|
some experiment that adds the argument by 1, it somehow setups the stack
|
|
correctly (but not with the original value), I feel like this can be fixed
|
|
by copying the argument value to a local variable inside the syscall
|
|
function, and then passing it to syscall handler via asm command. But my
|
|
previous attempt was failed. I think it is because of compiler optimization
|
|
that didn't copy the argument value to local variable, but directly passing
|
|
it to asm command (the local variable itself is not used for any
|
|
calculation, just temporary container). So I make it a little bit
|
|
complicated by wrapping it into a static struct and somehow it success and
|
|
set the stack correctly.
|
|
|
|
I have test it on linux.cs, cicero.cs, machoke.cs (one of CSIL machines),
|
|
and my own laptop. The solution passed all the tests with this
|
|
modification.
|