X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fthreads%2Fintr-stubs.pl;h=75cde7b6bb8cdf2629357beef89886a00d6eb1ea;hb=e5c7df720147528ab310fe5ac983cc5115b998da;hp=22eaf59d339f4ee216e77cf9938f82140a5f6b70;hpb=6c5c6fdfe80bad40c90c19b67f00226610d59a38;p=pintos-anon diff --git a/src/threads/intr-stubs.pl b/src/threads/intr-stubs.pl index 22eaf59..75cde7b 100755 --- a/src/threads/intr-stubs.pl +++ b/src/threads/intr-stubs.pl @@ -1,9 +1,10 @@ #! /usr/bin/perl print <<'EOF'; -#include "loader.h" +#include "threads/loader.h" .data + .intel_syntax noprefix .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"; - print "\tpushl \$0\n" + print "\tpush 0\n" if ($i != 8 && $i != 10 && $i != 11 && $i != 13 && $i != 14 && $i != 17); - print "\tpushl \$0x$x\n"; + print "\tpush 0x$x\n"; 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 - movl $SEL_KDSEG, %eax - movl %eax, %ds - movl %eax, %es + mov eax, SEL_KDSEG + mov ds, eax + mov es, eax - # Call handler. - pushl %esp + # Call interrupt handler. + push esp .globl intr_handler call intr_handler - addl $4, %esp + add esp, 4 .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