45f4fa320de011addd823ec6c354b45d95530ec6
[pintos-anon] / src / threads / intr-stubs.pl
1 #! /usr/bin/perl
2
3 print <<'EOF';
4 #include "mmu.h"
5
6         .globl intr_stubs
7 intr_stubs:
8 EOF
9
10 for $i (0...255) {
11     $x = sprintf ("%02x", $i);
12     print "\t.long intr${x}_stub\n";
13 }
14 print "\n";
15
16 for $i (0...255) {
17     $x = sprintf ("%02x", $i);
18     print "\t.globl intr${x}_stub\n";
19     print "intr${x}_stub:\n";
20     print "\tpushl \$0\n" if $i != 8 && $i != 10 && $i != 11 && $i != 13 && $i != 14 && $i != 17;
21     print "\tpushl \$0x$x\n";
22     print "\tjmp intr_entry\n";
23 }
24
25 print <<'EOF';
26 intr_entry:
27         # Save caller's registers.
28         pushl %ds
29         pushl %es
30         pushal
31
32         # Set up kernel environment.
33         cld
34         movl $SEL_KDSEG, %eax
35         movl %eax, %ds
36         movl %eax, %es
37
38         # Call handler.
39         pushl %esp
40         .globl intr_handler
41         call intr_handler
42         addl $4, %esp
43
44         # Restore caller's registers.
45         popal
46         popl %es
47         popl %ds
48         addl $8, %esp
49         iret
50 EOF