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