Blame view
arch/um/sys-ppc/ptrace.c
1.4 KB
1da177e4c Linux-2.6.12-rc2 |
1 2 3 4 5 6 7 8 9 |
#include "linux/sched.h" #include "asm/ptrace.h" int putreg(struct task_struct *child, unsigned long regno, unsigned long value) { child->thread.process_regs.regs[regno >> 2] = value; return 0; } |
82c1c11bd [PATCH] uml: S390... |
10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
int poke_user(struct task_struct *child, long addr, long data) { if ((addr & 3) || addr < 0) return -EIO; if (addr < MAX_REG_OFFSET) return putreg(child, addr, data); else if((addr >= offsetof(struct user, u_debugreg[0])) && (addr <= offsetof(struct user, u_debugreg[7]))){ addr -= offsetof(struct user, u_debugreg[0]); addr = addr >> 2; if((addr == 4) || (addr == 5)) return -EIO; child->thread.arch.debugregs[addr] = data; return 0; } return -EIO; } |
1da177e4c Linux-2.6.12-rc2 |
28 29 30 31 32 33 34 |
unsigned long getreg(struct task_struct *child, unsigned long regno) { unsigned long retval = ~0UL; retval &= child->thread.process_regs.regs[regno >> 2]; return retval; } |
82c1c11bd [PATCH] uml: S390... |
35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
int peek_user(struct task_struct *child, long addr, long data) { /* read the word at location addr in the USER area. */ unsigned long tmp; if ((addr & 3) || addr < 0) return -EIO; tmp = 0; /* Default return condition */ if(addr < MAX_REG_OFFSET){ tmp = getreg(child, addr); } else if((addr >= offsetof(struct user, u_debugreg[0])) && (addr <= offsetof(struct user, u_debugreg[7]))){ addr -= offsetof(struct user, u_debugreg[0]); addr = addr >> 2; tmp = child->thread.arch.debugregs[addr]; } return put_user(tmp, (unsigned long *) data); } |