| /* |
| * 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"); |
| } |