linux/arch/um/sys-x86_64/ptrace_user.c
Jeff Dike e2216feb37 [PATCH] uml: initialize process FP registers properly
We weren't making sure that we initialized the FP registers of new processes
to sane values.

This patch also moves some defines in the affected area closer to where they
are used.

Signed-off-by: Jeff Dike <jdike@addtoit.com>
Cc: Paolo 'Blaisorblade' Giarrusso <blaisorblade@yahoo.it>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
2006-02-07 16:12:32 -08:00

59 lines
1.1 KiB
C

/*
* Copyright 2003 PathScale, Inc.
*
* Licensed under the GPL
*/
#include <stddef.h>
#include <errno.h>
#include "ptrace_user.h"
#include "user.h"
#include "kern_constants.h"
int ptrace_getregs(long pid, unsigned long *regs_out)
{
if(ptrace(PTRACE_GETREGS, pid, 0, regs_out) < 0)
return(-errno);
return(0);
}
int ptrace_setregs(long pid, unsigned long *regs)
{
if(ptrace(PTRACE_SETREGS, pid, 0, regs) < 0)
return(-errno);
return(0);
}
int ptrace_setfpregs(long pid, unsigned long *regs)
{
if (ptrace(PTRACE_SETFPREGS, pid, 0, regs) < 0)
return -errno;
return 0;
}
void ptrace_pokeuser(unsigned long addr, unsigned long data)
{
panic("ptrace_pokeuser");
}
#define DS 184
#define ES 192
#define __USER_DS 0x2b
void arch_enter_kernel(void *task, int pid)
{
}
void arch_leave_kernel(void *task, int pid)
{
#ifdef UM_USER_CS
if(ptrace(PTRACE_POKEUSR, pid, CS, UM_USER_CS) < 0)
printk("POKEUSR CS failed");
#endif
if(ptrace(PTRACE_POKEUSR, pid, DS, __USER_DS) < 0)
printk("POKEUSR DS failed");
if(ptrace(PTRACE_POKEUSR, pid, ES, __USER_DS) < 0)
printk("POKEUSR ES failed");
}