projects
/
pintos-anon
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Save and restore user processes' FS and GS registers.
[pintos-anon]
/
src
/
threads
/
intr-stubs.pl
diff --git
a/src/threads/intr-stubs.pl
b/src/threads/intr-stubs.pl
index 472b125b316d5176d567b81616c19335f5dd38e2..75cde7b6bb8cdf2629357beef89886a00d6eb1ea 100755
(executable)
--- a/
src/threads/intr-stubs.pl
+++ b/
src/threads/intr-stubs.pl
@@
-1,9
+1,10
@@
#! /usr/bin/perl
print <<'EOF';
#! /usr/bin/perl
print <<'EOF';
-#include "
mmu
.h"
+#include "
threads/loader
.h"
.data
.data
+ .intel_syntax noprefix
.globl intr_stubs
intr_stubs:
EOF
.globl intr_stubs
intr_stubs:
EOF
@@
-22,38
+23,44
@@
for $i (0...255) {
$x = sprintf ("%02x", $i);
print ".globl intr${x}_stub\n";
print "intr${x}_stub:\n";
$x = sprintf ("%02x", $i);
print ".globl intr${x}_stub\n";
print "intr${x}_stub:\n";
- print "\tpush
l \$
0\n"
+ print "\tpush
0\n"
if ($i != 8 && $i != 10 && $i != 11
&& $i != 13 && $i != 14 && $i != 17);
if ($i != 8 && $i != 10 && $i != 11
&& $i != 13 && $i != 14 && $i != 17);
- print "\tpush
l \$
0x$x\n";
+ print "\tpush
0x$x\n";
print "\tjmp intr_entry\n";
}
print <<'EOF';
intr_entry:
# Save caller's registers.
print "\tjmp intr_entry\n";
}
print <<'EOF';
intr_entry:
# Save caller's registers.
- pushl %ds
- pushl %es
- pushal
+ push ds
+ push es
+ push fs
+ push gs
+ pusha
# Set up kernel environment.
cld
# Set up kernel environment.
cld
- mov
l $SEL_KDSEG, %eax
- mov
l %eax, %ds
- mov
l %eax, %es
+ mov
eax, SEL_KDSEG
+ mov
ds, eax
+ mov
es, eax
- # Call handler.
- push
l %
esp
+ # Call
interrupt
handler.
+ push
esp
.globl intr_handler
call intr_handler
.globl intr_handler
call intr_handler
- add
l $4, %esp
+ add
esp, 4
.globl intr_exit
intr_exit:
# Restore caller's registers.
.globl intr_exit
intr_exit:
# Restore caller's registers.
- popal
- popl %es
- popl %ds
- addl $8, %esp
+ popa
+ pop gs
+ pop fs
+ pop es
+ pop ds
+ add esp, 8
+
+ # Return to caller.
iret
EOF
iret
EOF