.. | .. |
---|
30 | 30 | #include <asm/fpu.h> |
---|
31 | 31 | #include <asm/mipsregs.h> |
---|
32 | 32 | #include <asm/mipsmtregs.h> |
---|
33 | | -#include <asm/pgtable.h> |
---|
34 | 33 | #include <asm/page.h> |
---|
35 | 34 | #include <asm/reg.h> |
---|
36 | 35 | #include <asm/syscall.h> |
---|
.. | .. |
---|
82 | 81 | /* Read the word at location addr in the USER area. */ |
---|
83 | 82 | case PTRACE_PEEKUSR: { |
---|
84 | 83 | struct pt_regs *regs; |
---|
85 | | - union fpureg *fregs; |
---|
86 | 84 | unsigned int tmp; |
---|
87 | 85 | |
---|
88 | 86 | regs = task_pt_regs(child); |
---|
.. | .. |
---|
92 | 90 | case 0 ... 31: |
---|
93 | 91 | tmp = regs->regs[addr]; |
---|
94 | 92 | break; |
---|
95 | | - case FPR_BASE ... FPR_BASE + 31: |
---|
| 93 | +#ifdef CONFIG_MIPS_FP_SUPPORT |
---|
| 94 | + case FPR_BASE ... FPR_BASE + 31: { |
---|
| 95 | + union fpureg *fregs; |
---|
| 96 | + |
---|
96 | 97 | if (!tsk_used_math(child)) { |
---|
97 | 98 | /* FP not yet used */ |
---|
98 | 99 | tmp = -1; |
---|
.. | .. |
---|
111 | 112 | } |
---|
112 | 113 | tmp = get_fpr64(&fregs[addr - FPR_BASE], 0); |
---|
113 | 114 | break; |
---|
| 115 | + } |
---|
| 116 | + case FPC_CSR: |
---|
| 117 | + tmp = child->thread.fpu.fcr31; |
---|
| 118 | + break; |
---|
| 119 | + case FPC_EIR: |
---|
| 120 | + /* implementation / version register */ |
---|
| 121 | + tmp = boot_cpu_data.fpu_id; |
---|
| 122 | + break; |
---|
| 123 | +#endif /* CONFIG_MIPS_FP_SUPPORT */ |
---|
114 | 124 | case PC: |
---|
115 | 125 | tmp = regs->cp0_epc; |
---|
116 | 126 | break; |
---|
.. | .. |
---|
125 | 135 | break; |
---|
126 | 136 | case MMLO: |
---|
127 | 137 | tmp = regs->lo; |
---|
128 | | - break; |
---|
129 | | - case FPC_CSR: |
---|
130 | | - tmp = child->thread.fpu.fcr31; |
---|
131 | | - break; |
---|
132 | | - case FPC_EIR: |
---|
133 | | - /* implementation / version register */ |
---|
134 | | - tmp = boot_cpu_data.fpu_id; |
---|
135 | 138 | break; |
---|
136 | 139 | case DSP_BASE ... DSP_BASE + 5: { |
---|
137 | 140 | dspreg_t *dregs; |
---|
.. | .. |
---|
203 | 206 | mips_syscall_is_indirect(child, regs)) |
---|
204 | 207 | mips_syscall_update_nr(child, regs); |
---|
205 | 208 | break; |
---|
| 209 | +#ifdef CONFIG_MIPS_FP_SUPPORT |
---|
206 | 210 | case FPR_BASE ... FPR_BASE + 31: { |
---|
207 | 211 | union fpureg *fregs = get_fpu_regs(child); |
---|
208 | 212 | |
---|
.. | .. |
---|
225 | 229 | set_fpr64(&fregs[addr - FPR_BASE], 0, data); |
---|
226 | 230 | break; |
---|
227 | 231 | } |
---|
| 232 | + case FPC_CSR: |
---|
| 233 | + child->thread.fpu.fcr31 = data; |
---|
| 234 | + break; |
---|
| 235 | +#endif /* CONFIG_MIPS_FP_SUPPORT */ |
---|
228 | 236 | case PC: |
---|
229 | 237 | regs->cp0_epc = data; |
---|
230 | 238 | break; |
---|
.. | .. |
---|
233 | 241 | break; |
---|
234 | 242 | case MMLO: |
---|
235 | 243 | regs->lo = data; |
---|
236 | | - break; |
---|
237 | | - case FPC_CSR: |
---|
238 | | - child->thread.fpu.fcr31 = data; |
---|
239 | 244 | break; |
---|
240 | 245 | case DSP_BASE ... DSP_BASE + 5: { |
---|
241 | 246 | dspreg_t *dregs; |
---|
.. | .. |
---|
274 | 279 | (struct user_pt_regs __user *) (__u64) data); |
---|
275 | 280 | break; |
---|
276 | 281 | |
---|
| 282 | +#ifdef CONFIG_MIPS_FP_SUPPORT |
---|
277 | 283 | case PTRACE_GETFPREGS: |
---|
278 | 284 | ret = ptrace_getfpregs(child, (__u32 __user *) (__u64) data); |
---|
279 | 285 | break; |
---|
.. | .. |
---|
281 | 287 | case PTRACE_SETFPREGS: |
---|
282 | 288 | ret = ptrace_setfpregs(child, (__u32 __user *) (__u64) data); |
---|
283 | 289 | break; |
---|
284 | | - |
---|
| 290 | +#endif |
---|
285 | 291 | case PTRACE_GET_THREAD_AREA: |
---|
286 | 292 | ret = put_user(task_thread_info(child)->tp_value, |
---|
287 | 293 | (unsigned int __user *) (unsigned long) data); |
---|