Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
traps_32.h
Go to the documentation of this file.
1 #ifndef __ASM_SH_TRAPS_32_H
2 #define __ASM_SH_TRAPS_32_H
3 
4 #include <linux/types.h>
5 #include <asm/mmu.h>
6 
7 #ifdef CONFIG_CPU_HAS_SR_RB
8 #define lookup_exception_vector() \
9 ({ \
10  unsigned long _vec; \
11  \
12  __asm__ __volatile__ ( \
13  "stc r2_bank, %0\n\t" \
14  : "=r" (_vec) \
15  ); \
16  \
17  _vec; \
18 })
19 #else
20 #define lookup_exception_vector() \
21 ({ \
22  unsigned long _vec; \
23  __asm__ __volatile__ ( \
24  "mov r4, %0\n\t" \
25  : "=r" (_vec) \
26  ); \
27  \
28  _vec; \
29 })
30 #endif
31 
32 static inline void trigger_address_error(void)
33 {
34  __asm__ __volatile__ (
35  "ldc %0, sr\n\t"
36  "mov.l @%1, %0"
37  :
38  : "r" (0x10000000), "r" (0x80000001)
39  );
40 }
41 
43  unsigned long writeaccess,
44  unsigned long address);
45 asmlinkage void do_divide_error(unsigned long r4, unsigned long r5,
46  unsigned long r6, unsigned long r7,
47  struct pt_regs __regs);
48 asmlinkage void do_reserved_inst(unsigned long r4, unsigned long r5,
49  unsigned long r6, unsigned long r7,
50  struct pt_regs __regs);
51 asmlinkage void do_illegal_slot_inst(unsigned long r4, unsigned long r5,
52  unsigned long r6, unsigned long r7,
53  struct pt_regs __regs);
54 asmlinkage void do_exception_error(unsigned long r4, unsigned long r5,
55  unsigned long r6, unsigned long r7,
56  struct pt_regs __regs);
57 
58 #define BUILD_TRAP_HANDLER(name) \
59 asmlinkage void name##_trap_handler(unsigned long r4, unsigned long r5, \
60  unsigned long r6, unsigned long r7, \
61  struct pt_regs __regs)
62 
63 #define TRAP_HANDLER_DECL \
64  struct pt_regs *regs = RELOC_HIDE(&__regs, 0); \
65  unsigned int vec = regs->tra; \
66  (void)vec;
67 
68 #endif /* __ASM_SH_TRAPS_32_H */