This source file includes following definitions.
- die_if_kernel
- do_entArith
- do_entIF
- do_entUna
- trap_init
1
2
3
4
5
6
7
8
9
10
11 #include <linux/sched.h>
12
13 void die_if_kernel(char * str, struct pt_regs * regs, long err)
14 {
15 unsigned long i;
16
17 printk("%s %ld\n", str, err);
18 printk("PC = %016lx PS = %04lx\n", regs->pc, regs->ps);
19 for (i = 0 ; i < 5000000000 ; i++)
20 ;
21 halt();
22 }
23
24 asmlinkage void do_entArith(unsigned long summary, unsigned long write_mask, unsigned long a2, struct pt_regs * regs)
25 {
26 printk("Arithmetic trap: %02lx %016lx\n", summary, write_mask);
27 die_if_kernel("Arithmetic fault", regs, 0);
28 }
29
30 asmlinkage void do_entIF(unsigned long type, unsigned long a1, unsigned long a2, struct pt_regs * regs)
31 {
32 die_if_kernel("Instruction fault", regs, type);
33 }
34
35 asmlinkage void do_entUna(unsigned long va, unsigned long opcode, unsigned long reg, struct pt_regs * regs)
36 {
37 printk("Unaligned trap: %016lx %ld %ld\n", va, opcode, reg);
38 die_if_kernel("Unaligned", regs, 0);
39 }
40
41 extern asmlinkage void entMM(void);
42 extern asmlinkage void entIF(void);
43 extern asmlinkage void entArith(void);
44 extern asmlinkage void entUna(void);
45
46 void trap_init(void)
47 {
48 unsigned long gptr;
49
50 __asm__("br %0,___tmp\n"
51 "___tmp:\tldgp %0,0(%0)"
52 : "=r" (gptr));
53 wrkgp(gptr);
54
55 wrent(entArith, 1);
56 wrent(entMM, 2);
57 wrent(entIF, 3);
58 wrent(entUna, 4);
59 }