[PATCH] mips: task_pt_regs()

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>

authored by Al Viro and committed by Linus Torvalds 40bc9c67 6450578f

+12 -20
+1 -3
arch/mips/kernel/process.c
··· 229 230 int dump_task_regs (struct task_struct *tsk, elf_gregset_t *regs) 231 { 232 - struct thread_info *ti = tsk->thread_info; 233 - long ksp = (unsigned long)ti + THREAD_SIZE - 32; 234 - elf_dump_regs(&(*regs)[0], (struct pt_regs *) ksp - 1); 235 return 1; 236 } 237
··· 229 230 int dump_task_regs (struct task_struct *tsk, elf_gregset_t *regs) 231 { 232 + elf_dump_regs(*regs, task_pt_regs(tsk)); 233 return 1; 234 } 235
+4 -8
arch/mips/kernel/ptrace.c
··· 64 if (!access_ok(VERIFY_WRITE, data, 38 * 8)) 65 return -EIO; 66 67 - regs = (struct pt_regs *) ((unsigned long) child->thread_info + 68 - THREAD_SIZE - 32 - sizeof(struct pt_regs)); 69 70 for (i = 0; i < 32; i++) 71 __put_user (regs->regs[i], data + i); ··· 91 if (!access_ok(VERIFY_READ, data, 38 * 8)) 92 return -EIO; 93 94 - regs = (struct pt_regs *) ((unsigned long) child->thread_info + 95 - THREAD_SIZE - 32 - sizeof(struct pt_regs)); 96 97 for (i = 0; i < 32; i++) 98 __get_user (regs->regs[i], data + i); ··· 196 struct pt_regs *regs; 197 unsigned long tmp = 0; 198 199 - regs = (struct pt_regs *) ((unsigned long) child->thread_info + 200 - THREAD_SIZE - 32 - sizeof(struct pt_regs)); 201 ret = 0; /* Default return value. */ 202 203 switch (addr) { ··· 311 case PTRACE_POKEUSR: { 312 struct pt_regs *regs; 313 ret = 0; 314 - regs = (struct pt_regs *) ((unsigned long) child->thread_info + 315 - THREAD_SIZE - 32 - sizeof(struct pt_regs)); 316 317 switch (addr) { 318 case 0 ... 31:
··· 64 if (!access_ok(VERIFY_WRITE, data, 38 * 8)) 65 return -EIO; 66 67 + regs = task_pt_regs(child); 68 69 for (i = 0; i < 32; i++) 70 __put_user (regs->regs[i], data + i); ··· 92 if (!access_ok(VERIFY_READ, data, 38 * 8)) 93 return -EIO; 94 95 + regs = task_pt_regs(child); 96 97 for (i = 0; i < 32; i++) 98 __get_user (regs->regs[i], data + i); ··· 198 struct pt_regs *regs; 199 unsigned long tmp = 0; 200 201 + regs = task_pt_regs(child); 202 ret = 0; /* Default return value. */ 203 204 switch (addr) { ··· 314 case PTRACE_POKEUSR: { 315 struct pt_regs *regs; 316 ret = 0; 317 + regs = task_pt_regs(child); 318 319 switch (addr) { 320 case 0 ... 31:
+2 -4
arch/mips/kernel/ptrace32.c
··· 126 struct pt_regs *regs; 127 unsigned int tmp; 128 129 - regs = (struct pt_regs *) ((unsigned long) child->thread_info + 130 - THREAD_SIZE - 32 - sizeof(struct pt_regs)); 131 ret = 0; /* Default return value. */ 132 133 switch (addr) { ··· 258 case PTRACE_POKEUSR: { 259 struct pt_regs *regs; 260 ret = 0; 261 - regs = (struct pt_regs *) ((unsigned long) child->thread_info + 262 - THREAD_SIZE - 32 - sizeof(struct pt_regs)); 263 264 switch (addr) { 265 case 0 ... 31:
··· 126 struct pt_regs *regs; 127 unsigned int tmp; 128 129 + regs = task_pt_regs(child); 130 ret = 0; /* Default return value. */ 131 132 switch (addr) { ··· 259 case PTRACE_POKEUSR: { 260 struct pt_regs *regs; 261 ret = 0; 262 + regs = task_pt_regs(child); 263 264 switch (addr) { 265 case 0 ... 31:
+4 -4
include/asm-mips/processor.h
··· 200 201 unsigned long get_wchan(struct task_struct *p); 202 203 - #define __PT_REG(reg) ((long)&((struct pt_regs *)0)->reg - sizeof(struct pt_regs)) 204 #define __KSTK_TOS(tsk) ((unsigned long)(tsk->thread_info) + THREAD_SIZE - 32) 205 - #define KSTK_EIP(tsk) (*(unsigned long *)(__KSTK_TOS(tsk) + __PT_REG(cp0_epc))) 206 - #define KSTK_ESP(tsk) (*(unsigned long *)(__KSTK_TOS(tsk) + __PT_REG(regs[29]))) 207 - #define KSTK_STATUS(tsk) (*(unsigned long *)(__KSTK_TOS(tsk) + __PT_REG(cp0_status))) 208 209 #define cpu_relax() barrier() 210
··· 200 201 unsigned long get_wchan(struct task_struct *p); 202 203 #define __KSTK_TOS(tsk) ((unsigned long)(tsk->thread_info) + THREAD_SIZE - 32) 204 + #define task_pt_regs(tsk) ((struct pt_regs *)__KSTK_TOS(tsk) - 1) 205 + #define KSTK_EIP(tsk) (task_pt_regs(tsk)->cp0_epc) 206 + #define KSTK_ESP(tsk) (task_pt_regs(tsk)->regs[29]) 207 + #define KSTK_STATUS(tsk) (task_pt_regs(tsk)->cp0_status) 208 209 #define cpu_relax() barrier() 210
+1 -1
include/asm-mips/system.h
··· 159 do { \ 160 if (cpu_has_dsp) \ 161 __save_dsp(prev); \ 162 - (last) = resume(prev, next, next->thread_info); \ 163 if (cpu_has_dsp) \ 164 __restore_dsp(current); \ 165 } while(0)
··· 159 do { \ 160 if (cpu_has_dsp) \ 161 __save_dsp(prev); \ 162 + (last) = resume(prev, next, task_thread_info(next)); \ 163 if (cpu_has_dsp) \ 164 __restore_dsp(current); \ 165 } while(0)