X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fthreads%2Fintr-stubs.pl;h=75cde7b6bb8cdf2629357beef89886a00d6eb1ea;hb=c9613f4d1fd208911409de6f82b430e5f9a595ae;hp=c333260eef7a812e4262e783e968fa0a342fe99c;hpb=f6580e9ad405b519dbe85027691bf3c66074b0a4;p=pintos-anon diff --git a/src/threads/intr-stubs.pl b/src/threads/intr-stubs.pl index c333260..75cde7b 100755 --- a/src/threads/intr-stubs.pl +++ b/src/threads/intr-stubs.pl @@ -4,6 +4,7 @@ print <<'EOF'; #include "threads/loader.h" .data + .intel_syntax noprefix .globl intr_stubs intr_stubs: EOF @@ -22,39 +23,43 @@ 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 interrupt handler. - pushl %esp + 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