Logo Search packages:      
Sourcecode: linux version File versions  Download package

ptrace.c

#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;
}

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;
}

unsigned long getreg(struct task_struct *child, unsigned long regno)
{
      unsigned long retval = ~0UL;

      retval &= child->thread.process_regs.regs[regno >> 2];
      return retval;
}

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);
}

/*
 * Overrides for Emacs so that we follow Linus's tabbing style.
 * Emacs will notice this stuff at the end of the file and automatically
 * adjust the settings for this buffer only.  This must remain at the end
 * of the file.
 * ---------------------------------------------------------------------------
 * Local variables:
 * c-file-style: "linux"
 * End:
 */

Generated by  Doxygen 1.6.0   Back to index