root/arch/alpha/kernel/traps.c

/* [previous][next][first][last][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. die_if_kernel
  2. do_entArith
  3. do_entIF
  4. do_entUna
  5. trap_init

   1 /*
   2  * kernel/traps.c
   3  *
   4  * (C) Copyright 1994 Linus Torvalds
   5  */
   6 
   7 /*
   8  * This file initializes the trap entry points
   9  */
  10 
  11 #include <linux/sched.h>
  12 
  13 void die_if_kernel(char * str, struct pt_regs * regs, long err)
     /* [previous][next][first][last][top][bottom][index][help] */
  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                 /* pause */;
  21         halt();
  22 }
  23 
  24 asmlinkage void do_entArith(unsigned long summary, unsigned long write_mask, unsigned long a2, struct pt_regs * regs)
     /* [previous][next][first][last][top][bottom][index][help] */
  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)
     /* [previous][next][first][last][top][bottom][index][help] */
  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)
     /* [previous][next][first][last][top][bottom][index][help] */
  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)
     /* [previous][next][first][last][top][bottom][index][help] */
  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 }

/* [previous][next][first][last][top][bottom][index][help] */