diff options
Diffstat (limited to 'arch/um/sys-i386')
| -rw-r--r-- | arch/um/sys-i386/asm/ptrace.h | 5 | ||||
| -rw-r--r-- | arch/um/sys-i386/ptrace.c | 28 | ||||
| -rw-r--r-- | arch/um/sys-i386/shared/sysdep/ptrace.h | 1 | 
3 files changed, 24 insertions, 10 deletions
diff --git a/arch/um/sys-i386/asm/ptrace.h b/arch/um/sys-i386/asm/ptrace.h index 0273e4d09af..5d2a5911253 100644 --- a/arch/um/sys-i386/asm/ptrace.h +++ b/arch/um/sys-i386/asm/ptrace.h @@ -42,11 +42,6 @@   */  struct user_desc; -extern int get_fpxregs(struct user_fxsr_struct __user *buf, -		       struct task_struct *child); -extern int set_fpxregs(struct user_fxsr_struct __user *buf, -		       struct task_struct *tsk); -  extern int ptrace_get_thread_area(struct task_struct *child, int idx,                                    struct user_desc __user *user_desc); diff --git a/arch/um/sys-i386/ptrace.c b/arch/um/sys-i386/ptrace.c index d23b2d3ea38..3375c271785 100644 --- a/arch/um/sys-i386/ptrace.c +++ b/arch/um/sys-i386/ptrace.c @@ -145,7 +145,7 @@ int peek_user(struct task_struct *child, long addr, long data)  	return put_user(tmp, (unsigned long __user *) data);  } -int get_fpregs(struct user_i387_struct __user *buf, struct task_struct *child) +static int get_fpregs(struct user_i387_struct __user *buf, struct task_struct *child)  {  	int err, n, cpu = ((struct thread_info *) child->stack)->cpu;  	struct user_i387_struct fpregs; @@ -161,7 +161,7 @@ int get_fpregs(struct user_i387_struct __user *buf, struct task_struct *child)  	return n;  } -int set_fpregs(struct user_i387_struct __user *buf, struct task_struct *child) +static int set_fpregs(struct user_i387_struct __user *buf, struct task_struct *child)  {  	int n, cpu = ((struct thread_info *) child->stack)->cpu;  	struct user_i387_struct fpregs; @@ -174,7 +174,7 @@ int set_fpregs(struct user_i387_struct __user *buf, struct task_struct *child)  				    (unsigned long *) &fpregs);  } -int get_fpxregs(struct user_fxsr_struct __user *buf, struct task_struct *child) +static int get_fpxregs(struct user_fxsr_struct __user *buf, struct task_struct *child)  {  	int err, n, cpu = ((struct thread_info *) child->stack)->cpu;  	struct user_fxsr_struct fpregs; @@ -190,7 +190,7 @@ int get_fpxregs(struct user_fxsr_struct __user *buf, struct task_struct *child)  	return n;  } -int set_fpxregs(struct user_fxsr_struct __user *buf, struct task_struct *child) +static int set_fpxregs(struct user_fxsr_struct __user *buf, struct task_struct *child)  {  	int n, cpu = ((struct thread_info *) child->stack)->cpu;  	struct user_fxsr_struct fpregs; @@ -206,5 +206,23 @@ int set_fpxregs(struct user_fxsr_struct __user *buf, struct task_struct *child)  long subarch_ptrace(struct task_struct *child, long request,  		    unsigned long addr, unsigned long data)  { -	return -EIO; +	int ret = -EIO; +	void __user *datap = (void __user *) data; +	switch (request) { +	case PTRACE_GETFPREGS: /* Get the child FPU state. */ +		ret = get_fpregs(datap, child); +		break; +	case PTRACE_SETFPREGS: /* Set the child FPU state. */ +		ret = set_fpregs(datap, child); +		break; +	case PTRACE_GETFPXREGS: /* Get the child FPU state. */ +		ret = get_fpxregs(datap, child); +		break; +	case PTRACE_SETFPXREGS: /* Set the child FPU state. */ +		ret = set_fpxregs(datap, child); +		break; +	default: +		ret = -EIO; +	} +	return ret;  } diff --git a/arch/um/sys-i386/shared/sysdep/ptrace.h b/arch/um/sys-i386/shared/sysdep/ptrace.h index d50e62e0707..c398a507611 100644 --- a/arch/um/sys-i386/shared/sysdep/ptrace.h +++ b/arch/um/sys-i386/shared/sysdep/ptrace.h @@ -53,6 +53,7 @@ extern int sysemu_supported;  struct uml_pt_regs {  	unsigned long gp[MAX_REG_NR]; +	unsigned long fp[HOST_FPX_SIZE];  	struct faultinfo faultinfo;  	long syscall;  	int is_user;  |