Clean up interrupt handling.
authorBen Pfaff <blp@cs.stanford.edu>
Fri, 27 Aug 2004 00:05:15 +0000 (00:05 +0000)
committerBen Pfaff <blp@cs.stanford.edu>
Fri, 27 Aug 2004 00:05:15 +0000 (00:05 +0000)
src/threads/interrupt.c
src/threads/interrupt.h
src/threads/intr-stubs.h [new file with mode: 0644]
src/threads/intr-stubs.pl

index 4ab0050c9ceff522dedc962c3f4fb7c91f106a14..6250f817fec9010e9e23dae3ed5849d5f4ac587a 100644 (file)
@@ -1,5 +1,6 @@
 #include "interrupt.h"
 #include <stdint.h>
+#include "intr-stubs.h"
 #include "debug.h"
 #include "io.h"
 #include "lib.h"
@@ -94,8 +95,6 @@ pic_eoi (void)
 \f
 uint64_t idt[256];
 
-extern void (*intr_stubs[256]) (void);
-
 intr_handler_func *intr_handlers[256];
 
 void intr_handler (struct intr_frame *args);
index 917fc7591bf4cb61bd2212f2d09cb012b26b49b8..a40276a5852340ef5dd54f969c9346ba5dcca281 100644 (file)
@@ -37,7 +37,7 @@ struct intr_frame
     void (*eip) (void);
     uint16_t cs, :16;
     uint32_t eflags;
-    uint32_t esp;
+    void *esp;
     uint16_t ss, :16;
   };
 
diff --git a/src/threads/intr-stubs.h b/src/threads/intr-stubs.h
new file mode 100644 (file)
index 0000000..5ff9164
--- /dev/null
@@ -0,0 +1,9 @@
+#ifndef HEADER_INTR_STUBS_H
+#define HEADER_INTR_STUBS_H
+
+extern void (*intr_stubs[256]) (void);
+
+void intr_entry (void);
+void intr_exit (void);
+
+#endif /* intr-stubs.h */
index 8987c43d9ca8396c44c64d24c68ac31e5bd8606c..ea20e9668ede5de1669138957c5e205079c6e3f4 100755 (executable)
@@ -17,7 +17,9 @@ for $i (0...255) {
     $x = sprintf ("%02x", $i);
     print "\t.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";
 }
@@ -40,6 +42,9 @@ intr_entry:
        pushl %esp
        .globl intr_handler
        call intr_handler
+
+       .globl intr_exit
+intr_exit:
        addl $4, %esp
 
        # Restore caller's registers.