aboutsummaryrefslogtreecommitdiffstats
path: root/src/tests/filst
diff options
context:
space:
mode:
authorFilip Strömbäck <filip.stromback@liu.se>2016-05-18 14:18:55 +0200
committerFilip Strömbäck <filip.stromback@liu.se>2016-05-18 14:53:17 +0200
commit2858b834ded475881c48360187481f54c30c49eb (patch)
tree133ee32ade5b8b4d985ae2abf0f61a080694ef1f /src/tests/filst
parenteb423363986defac4fa8eebd9baf4f84fac36bf9 (diff)
downloadpintos-rs-2858b834ded475881c48360187481f54c30c49eb.tar.gz
Fixed sc-bad-write test to be more precise.
Signed-off-by: Filip Strömbäck <filip.stromback@liu.se>
Diffstat (limited to 'src/tests/filst')
-rw-r--r--src/tests/filst/sc-bad-write.c30
-rw-r--r--src/tests/filst/sc-bad-write.ck1
2 files changed, 27 insertions, 4 deletions
diff --git a/src/tests/filst/sc-bad-write.c b/src/tests/filst/sc-bad-write.c
index 55927e7..28e0409 100644
--- a/src/tests/filst/sc-bad-write.c
+++ b/src/tests/filst/sc-bad-write.c
@@ -28,23 +28,45 @@ void test_main(void)
// Get the addres of the first unmapped page in the system.
unsigned page = (unsigned)pg_round_up(&global);
+ // Reserve space for 4 parameters.
+ unsigned base = page - sizeof(int) * 4;
+
+ // Call write() with space for 4 parameters (should be fine).
+ asm volatile (
+ "movl %%esp, %%edi;"
+ "movl %0, %%esp;" // Set stack pointer to right below page boundary.
+ "movl %1, (%%esp);" // Try to call SYS_WRITE
+ "movl %2, 4(%%esp);" // Write to STDOUT
+ "movl %3, 8(%%esp);" // Load buffer.
+ "movl $6, 12(%%esp);" // Write length of string
+ "int $0x30;"
+ "movl %%edi, %%esp;" // Restore esp.
+ :
+ : "r" (base),
+ "i" (SYS_WRITE),
+ "i" (STDOUT_FILENO),
+ "i" ("WORKS\n")
+ : "%esp", "%eax", "%edi");
+
+
// Reserve space for 3 parameters (write requires 4).
- page -= sizeof(int) * 3;
+ base = page - sizeof(int) * 3;
+ // Call write() with space for 3 parameters (the kernel should kill us for doing this).
asm volatile (
"movl %%esp, %%edi;"
"movl %0, %%esp;" // Set stack pointer to right below page boundary.
"movl %1, (%%esp);" // Try to call SYS_WRITE
"movl %2, 4(%%esp);" // Write to STDOUT
"movl %3, 8(%%esp);" // Load buffer.
- //"movl $5, 12(%%esp);" // Can not write the last parameter as we would get a pagefault.
+ //"movl $6, 12(%%esp);" // Can not write the last parameter as we would get a pagefault.
"int $0x30;"
"movl %%edi, %%esp;" // Restore esp in case we do not crash (as we should).
:
- : "r" (page),
+ : "r" (base),
"i" (SYS_WRITE),
"i" (STDOUT_FILENO),
- "i" ("TEST\n")
+ "i" ("FAIL!\n")
: "%esp", "%eax", "%edi");
fail("should have died.");
diff --git a/src/tests/filst/sc-bad-write.ck b/src/tests/filst/sc-bad-write.ck
index bd393c0..b23175a 100644
--- a/src/tests/filst/sc-bad-write.ck
+++ b/src/tests/filst/sc-bad-write.ck
@@ -4,6 +4,7 @@ use warnings;
use tests::tests;
check_expected ([<<'EOF']);
(sc-bad-write) begin
+WORKS
sc-bad-write: exit(-1)
EOF
pass;