Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
ptrace.h
Go to the documentation of this file.
1 /*
2  * OpenRISC Linux
3  *
4  * Linux architectural port borrowing liberally from similar works of
5  * others. All original copyrights apply as per the original source
6  * declaration.
7  *
8  * OpenRISC implementation:
9  * Copyright (C) 2003 Matjaz Breskvar <[email protected]>
10  * Copyright (C) 2010-2011 Jonas Bonn <[email protected]>
11  * et al.
12  *
13  * This program is free software; you can redistribute it and/or modify
14  * it under the terms of the GNU General Public License as published by
15  * the Free Software Foundation; either version 2 of the License, or
16  * (at your option) any later version.
17  */
18 #ifndef __ASM_OPENRISC_PTRACE_H
19 #define __ASM_OPENRISC_PTRACE_H
20 
21 
22 #include <asm/spr_defs.h>
23 #include <uapi/asm/ptrace.h>
24 
25 /*
26  * Make kernel PTrace/register structures opaque to userspace... userspace can
27  * access thread state via the regset mechanism. This allows us a bit of
28  * flexibility in how we order the registers on the stack, permitting some
29  * optimizations like packing call-clobbered registers together so that
30  * they share a cacheline (not done yet, though... future optimization).
31  */
32 
33 #ifndef __ASSEMBLY__
34 /*
35  * This struct describes how the registers are laid out on the kernel stack
36  * during a syscall or other kernel entry.
37  *
38  * This structure should always be cacheline aligned on the stack.
39  * FIXME: I don't think that's the case right now. The alignment is
40  * taken care of elsewhere... head.S, process.c, etc.
41  */
42 
43 struct pt_regs {
44  union {
45  struct {
46  /* Named registers */
47  long sr; /* Stored in place of r0 */
48  long sp; /* r1 */
49  };
50  struct {
51  /* Old style */
52  long offset[2];
53  long gprs[30];
54  };
55  struct {
56  /* New style */
57  long gpr[32];
58  };
59  };
60  long pc;
61  /* For restarting system calls:
62  * Set to syscall number for syscall exceptions,
63  * -1 for all other exceptions.
64  */
65  long orig_gpr11; /* For restarting system calls */
66  long dummy; /* Cheap alignment fix */
67  long dummy2; /* Cheap alignment fix */
68 };
69 
70 /* TODO: Rename this to REDZONE because that's what it is */
71 #define STACK_FRAME_OVERHEAD 128 /* size of minimum stack frame */
72 
73 #define instruction_pointer(regs) ((regs)->pc)
74 #define user_mode(regs) (((regs)->sr & SPR_SR_SM) == 0)
75 #define user_stack_pointer(regs) ((unsigned long)(regs)->sp)
76 #define profile_pc(regs) instruction_pointer(regs)
77 
78 static inline long regs_return_value(struct pt_regs *regs)
79 {
80  return regs->gpr[11];
81 }
82 
83 #endif /* __ASSEMBLY__ */
84 
85 /*
86  * Offsets used by 'ptrace' system call interface.
87  */
88 #define PT_SR 0
89 #define PT_SP 4
90 #define PT_GPR2 8
91 #define PT_GPR3 12
92 #define PT_GPR4 16
93 #define PT_GPR5 20
94 #define PT_GPR6 24
95 #define PT_GPR7 28
96 #define PT_GPR8 32
97 #define PT_GPR9 36
98 #define PT_GPR10 40
99 #define PT_GPR11 44
100 #define PT_GPR12 48
101 #define PT_GPR13 52
102 #define PT_GPR14 56
103 #define PT_GPR15 60
104 #define PT_GPR16 64
105 #define PT_GPR17 68
106 #define PT_GPR18 72
107 #define PT_GPR19 76
108 #define PT_GPR20 80
109 #define PT_GPR21 84
110 #define PT_GPR22 88
111 #define PT_GPR23 92
112 #define PT_GPR24 96
113 #define PT_GPR25 100
114 #define PT_GPR26 104
115 #define PT_GPR27 108
116 #define PT_GPR28 112
117 #define PT_GPR29 116
118 #define PT_GPR30 120
119 #define PT_GPR31 124
120 #define PT_PC 128
121 #define PT_ORIG_GPR11 132
122 #define PT_SYSCALLNO 136
123 
124 #endif /* __ASM_OPENRISC_PTRACE_H */