Merge branch 'master' of git://git.infradead.org/users/dedekind/mtd-tests-2.6
[linux-2.6] / include / asm-mn10300 / ptrace.h
1 /* MN10300 Exception frame layout and ptrace constants
2  *
3  * Copyright (C) 2007 Red Hat, Inc. All Rights Reserved.
4  * Written by David Howells (dhowells@redhat.com)
5  *
6  * This program is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU General Public Licence
8  * as published by the Free Software Foundation; either version
9  * 2 of the Licence, or (at your option) any later version.
10  */
11 #ifndef _ASM_PTRACE_H
12 #define _ASM_PTRACE_H
13
14 #define PT_A3           0
15 #define PT_A2           1
16 #define PT_D3           2
17 #define PT_D2           3
18 #define PT_MCVF         4
19 #define PT_MCRL         5
20 #define PT_MCRH         6
21 #define PT_MDRQ         7
22 #define PT_E1           8
23 #define PT_E0           9
24 #define PT_E7           10
25 #define PT_E6           11
26 #define PT_E5           12
27 #define PT_E4           13
28 #define PT_E3           14
29 #define PT_E2           15
30 #define PT_SP           16
31 #define PT_LAR          17
32 #define PT_LIR          18
33 #define PT_MDR          19
34 #define PT_A1           20
35 #define PT_A0           21
36 #define PT_D1           22
37 #define PT_D0           23
38 #define PT_ORIG_D0      24
39 #define PT_EPSW         25
40 #define PT_PC           26
41 #define NR_PTREGS       27
42
43 #ifndef __ASSEMBLY__
44 /*
45  * This defines the way registers are stored in the event of an exception
46  * - the strange order is due to the MOVM instruction
47  */
48 struct pt_regs {
49         unsigned long           a3;             /* syscall arg 3 */
50         unsigned long           a2;             /* syscall arg 4 */
51         unsigned long           d3;             /* syscall arg 5 */
52         unsigned long           d2;             /* syscall arg 6 */
53         unsigned long           mcvf;
54         unsigned long           mcrl;
55         unsigned long           mcrh;
56         unsigned long           mdrq;
57         unsigned long           e1;
58         unsigned long           e0;
59         unsigned long           e7;
60         unsigned long           e6;
61         unsigned long           e5;
62         unsigned long           e4;
63         unsigned long           e3;
64         unsigned long           e2;
65         unsigned long           sp;
66         unsigned long           lar;
67         unsigned long           lir;
68         unsigned long           mdr;
69         unsigned long           a1;
70         unsigned long           a0;             /* syscall arg 1 */
71         unsigned long           d1;             /* syscall arg 2 */
72         unsigned long           d0;             /* syscall ret */
73         struct pt_regs          *next;          /* next frame pointer */
74         unsigned long           orig_d0;        /* syscall number */
75         unsigned long           epsw;
76         unsigned long           pc;
77 };
78 #endif
79
80 extern struct pt_regs *__frame; /* current frame pointer */
81
82 /* Arbitrarily choose the same ptrace numbers as used by the Sparc code. */
83 #define PTRACE_GETREGS            12
84 #define PTRACE_SETREGS            13
85 #define PTRACE_GETFPREGS          14
86 #define PTRACE_SETFPREGS          15
87
88 /* options set using PTRACE_SETOPTIONS */
89 #define PTRACE_O_TRACESYSGOOD     0x00000001
90
91 #if defined(__KERNEL__)
92
93 #if !defined(__ASSEMBLY__)
94 #define user_mode(regs)                 (((regs)->epsw & EPSW_nSL) == EPSW_nSL)
95 #define instruction_pointer(regs)       ((regs)->pc)
96 extern void show_regs(struct pt_regs *);
97 #endif  /*  !__ASSEMBLY  */
98
99 #define profile_pc(regs) ((regs)->pc)
100
101 #endif  /*  __KERNEL__  */
102
103 #endif /* _ASM_PTRACE_H */