Redo makefiles.
[pintos-anon] / src / threads / intr-stubs.pl
index 8987c43d9ca8396c44c64d24c68ac31e5bd8606c..c333260eef7a812e4262e783e968fa0a342fe99c 100755 (executable)
@@ -1,9 +1,10 @@
 #! /usr/bin/perl
 
 print <<'EOF';
-#include "mmu.h"
+#include "threads/loader.h"
 
-       .globl intr_stubs
+       .data
+.globl intr_stubs
 intr_stubs:
 EOF
 
@@ -11,20 +12,25 @@ for $i (0...255) {
     $x = sprintf ("%02x", $i);
     print "\t.long intr${x}_stub\n";
 }
-print "\n";
+
+print <<'EOF';
+
+       .text
+EOF
 
 for $i (0...255) {
     $x = sprintf ("%02x", $i);
-    print "\t.globl intr${x}_stub\n";
+    print ".globl intr${x}_stub\n";
     print "intr${x}_stub:\n";
-    print "\tpushl \$0\n" if $i != 8 && $i != 10 && $i != 11 && $i != 13 && $i != 14 && $i != 17;
+    print "\tpushl \$0\n"
+       if ($i != 8 && $i != 10 && $i != 11
+           && $i != 13 && $i != 14 && $i != 17);
     print "\tpushl \$0x$x\n";
     print "\tjmp intr_entry\n";
 }
 
 print <<'EOF';
 intr_entry:
-       # FIXME: build a fake stack frame to improve backtraces.
        # Save caller's registers.
        pushl %ds
        pushl %es
@@ -36,16 +42,20 @@ intr_entry:
        movl %eax, %ds
        movl %eax, %es
 
-       # Call handler.
+       # Call interrupt handler.
        pushl %esp
-       .globl intr_handler
+.globl intr_handler
        call intr_handler
        addl $4, %esp
 
+.globl intr_exit
+intr_exit:
        # Restore caller's registers.
        popal
        popl %es
        popl %ds
        addl $8, %esp
+
+        # Return to caller.
        iret
 EOF