powerpc: uninline common ptrace bits
Subsystems (2)
PATCH 4/6 powerpc: uninline common ptrace bits
This folds back the ptrace-common.h bits back into ptrace.c and removes that file. The FSL SPE bits from ptrace-ppc32.h are folded back in as well.
Signed-off-by Benjamin Herrenschmidt <[email protected]>
---
arch/powerpc/kernel/ptrace-common.h | 177 --------------------------- arch/powerpc/kernel/ptrace-ppc32.h | 65 ---------- arch/powerpc/kernel/ptrace.c | 233 +++++++++++++++++++++++++++++++++++- arch/powerpc/kernel/ptrace32.c | 11 - include/asm-powerpc/ptrace.h | 5 5 files changed, 237 insertions(+), 254 deletions(-)
arch/powerpc/kernel/ptrace-common.h deleted +0 -177
@@ -1,177 +0,0 @@ -/* -* Copyright (c) 2002 Stephen Rothwell, IBM Coproration -* Copyright (c) 2007 Benjamin Herrenschmidt, IBM Coproration -* Extracted from ptrace.c and ptrace32.c -* -* This file is subject to the terms and conditions of the GNU General -* Public License. See the file README.legal in the main directory of -* this archive for more details. -*/ - -#ifndef _POWERPC_PTRACE_COMMON_H -#define _POWERPC_PTRACE_COMMON_H - -/* -* Get contents of register REGNO in task TASK. -*/ -static inline unsigned long get_reg (struct task_struct *task,int regno) -{ -unsigned long tmp =0 ; - -if (task->thread.regs ==NULL ) -return -EIO ; - -if (regno ==PT_MSR ) { - tmp = ((unsigned long *)task->thread.regs)[PT_MSR ]; -return PT_MUNGE_MSR (tmp, task); - } - -if (regno < (sizeof (struct pt_regs ) /sizeof (unsigned long ))) -return ((unsigned long *)task->thread.regs)[regno]; - -return -EIO ; -} - -/* -* Write contents of register REGNO in task TASK. -*/ -static inline int put_reg (struct task_struct *task,int regno, -unsigned long data) -{ -if (task->thread.regs ==NULL ) -return -EIO ; - -if (regno <=PT_MAX_PUT_REG ) { -if (regno ==PT_MSR ) - data = (data &MSR_DEBUGCHANGE ) - | (task->thread.regs->msr & ~MSR_DEBUGCHANGE ); - ((unsigned long *)task->thread.regs)[regno] = data; -return 0 ; - } -return -EIO ; -} - - -static inline int get_fpregs (void __user *data, -struct task_struct *task, -int has_fpscr) -{ -unsigned int count = has_fpscr ?33 :32 ; - -if (copy_to_user (data, task->thread.fpr, count *sizeof (double ))) -return -EFAULT ; -return 0 ; -} - -static inline int set_fpregs (void __user *data, -struct task_struct *task, -int has_fpscr) -{ -unsigned int count = has_fpscr ?33 :32 ; - -if (copy_from_user (task->thread.fpr, data, count *sizeof (double ))) -return -EFAULT ; -return 0 ; -} - - -#ifdef CONFIG_ALTIVEC -/* -* Get/set all the altivec registers vr0..vr31, vscr, vrsave, in one go. -* The transfer totals 34 quadword. Quadwords 0-31 contain the -* corresponding vector registers. Quadword 32 contains the vscr as the -* last word (offset 12) within that quadword. Quadword 33 contains the -* vrsave as the first word (offset 0) within the quadword. -* -* This definition of the VMX state is compatible with the current PPC32 -* ptrace interface. This allows signal handling and ptrace to use the -* same structures. This also simplifies the implementation of a bi-arch -* (combined (32- and 64-bit) gdb. -*/ - -/* -* Get contents of AltiVec register state in task TASK -*/ -static inline int get_vrregs (unsigned long __user *data, -struct task_struct *task) -{ -unsigned long regsize; - -/* copy AltiVec registers VR[0] .. VR[31] */ - regsize =32 *sizeof (vector128); -if (copy_to_user (data, task->thread.vr, regsize)) -return -EFAULT ; - data += (regsize /sizeof (unsigned long )); - -/* copy VSCR */ - regsize =1 *sizeof (vector128); -if (copy_to_user (data, &task->thread.vscr, regsize)) -return -EFAULT ; - data += (regsize /sizeof (unsigned long )); - -/* copy VRSAVE */ -if (put_user (task->thread.vrsave, (u32 __user *)data)) -return -EFAULT ; - -return 0 ; -} - -/* -* Write contents of AltiVec register state into task TASK. -*/ -static inline int set_vrregs (struct task_struct *task, -unsigned long __user *data) -{ -unsigned long regsize; - -/* copy AltiVec registers VR[0] .. VR[31] */ - regsize =32 *sizeof (vector128); -if (copy_from_user (task->thread.vr, data, regsize)) -return -EFAULT ; - data += (regsize /sizeof (unsigned long )); - -/* copy VSCR */ - regsize =1 *sizeof (vector128); -if (copy_from_user (&task->thread.vscr, data, regsize)) -return -EFAULT ; - data += (regsize /sizeof (unsigned long )); - -/* copy VRSAVE */ -if (get_user (task->thread.vrsave, (u32 __user *)data)) -return -EFAULT ; - -return 0 ; -} -#endif /* CONFIG_ALTIVEC */ - -static inline void set_single_step (struct task_struct *task) -{ -struct pt_regs *regs = task->thread.regs; - -if (regs !=NULL ) { -#if defined(CONFIG_40x) || defined(CONFIG_BOOKE ) - task->thread.dbcr0 =DBCR0_IDM |DBCR0_IC ; - regs->msr |=MSR_DE ; -#else - regs->msr |=MSR_SE ; -#endif - } -set_tsk_thread_flag (task,TIF_SINGLESTEP ); -} - -static inline void clear_single_step (struct task_struct *task) -{ -struct pt_regs *regs = task->thread.regs; - -if (regs !=NULL ) { -#if defined(CONFIG_40x) || defined(CONFIG_BOOKE ) - task->thread.dbcr0 =0 ; - regs->msr &= ~MSR_DE ; -#else - regs->msr &= ~MSR_SE ; -#endif - } -clear_tsk_thread_flag (task,TIF_SINGLESTEP ); -} - -#endif /* _POWERPC_PTRACE_COMMON_H */
arch/powerpc/kernel/ptrace-ppc32.h +0 -65
69 lines not on this page · raw message
arch/powerpc/kernel/ptrace.c +227 -6
269 lines not on this page · raw message
arch/powerpc/kernel/ptrace32.c +5 -6
@@ -34,7 +34,6 @@#include <asm/system.h> #include "ptrace-ppc64.h" -#include "ptrace-common.h" /* * does not yet catch signals sent when the child dies.
@@ -168,7 +167,7 @@ long compat_sys_ptrace(int request, intbreak ;if (index <PT_FPR0 ) { - tmp =get_reg (child, index); + tmp =ptrace_get_reg (child, index); }else {flush_fp_to_thread (child);/*
@@ -215,7 +214,7 @@ long compat_sys_ptrace(int request, intflush_fp_to_thread (child); tmp = ((unsigned long int *)child->thread.fpr)[numReg -PT_FPR0 ]; }else {/* register within PT_REGS struct */ - tmp =get_reg (child, numReg); + tmp =ptrace_get_reg (child, numReg); } reg32bits = ((u32 *)&tmp)[part]; ret =put_user (reg32bits, (u32 __user *)data);
@@ -274,7 +273,7 @@ long compat_sys_ptrace(int request, intif (index ==PT_ORIG_R3 )break ;if (index <PT_FPR0 ) { - ret =put_reg (child, index, data); + ret =ptrace_put_reg (child, index, data); }else {flush_fp_to_thread (child);/*
@@ -346,7 +345,7 @@ long compat_sys_ptrace(int request, int } ret =0 ;for (ui =0 ; ui <PT_REGS_COUNT ; ui ++) { - ret |=__put_user (get_reg (child, ui), + ret |=__put_user (ptrace_get_reg (child, ui), (unsigned int __user *) data); data +=sizeof (int ); }
@@ -366,7 +365,7 @@ long compat_sys_ptrace(int request, int ret =__get_user (tmp, (unsigned int __user *) data);if (ret)break ; -put_reg (child, ui, tmp); +ptrace_put_reg (child, ui, tmp); data +=sizeof (int ); }break ;
include/asm-powerpc/ptrace.h +5 -0
@@ -92,6 +92,11 @@ extern unsigned long profile_pc(struct pset_thread_flag (TIF_NOERROR ); \ }while (0 ) +struct task_struct; +extern unsigned long ptrace_get_reg (struct task_struct *task,int regno); +extern int ptrace_put_reg (struct task_struct *task,int regno, +unsigned long data); +/* * We use the least-significant bit of the trap field to indicate * whether we have saved the full set of registers, or only a