diff options
author | Tony Luck <tony.luck@intel.com> | 2005-05-09 16:44:53 -0700 |
---|---|---|
committer | Tony Luck <tony.luck@intel.com> | 2005-05-09 16:44:53 -0700 |
commit | a84f5770170232a48e753e02ee5f0f17ee17b791 (patch) | |
tree | 4efbd8a990df4437fb178c8a705dadc36812f98a /arch/um/sys-ppc | |
parent | 66302f211a21bb9439a2ae7f7b6a4c386bb10ecd (diff) | |
parent | 88d7bd8cb9eb8d64bf7997600b0d64f7834047c5 (diff) | |
download | talos-op-linux-a84f5770170232a48e753e02ee5f0f17ee17b791.tar.gz talos-op-linux-a84f5770170232a48e753e02ee5f0f17ee17b791.zip |
Merge with /home/aegl/GIT/linus
Diffstat (limited to 'arch/um/sys-ppc')
-rw-r--r-- | arch/um/sys-ppc/ptrace.c | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/arch/um/sys-ppc/ptrace.c b/arch/um/sys-ppc/ptrace.c index a971366d3277..8e71b47f2b8e 100644 --- a/arch/um/sys-ppc/ptrace.c +++ b/arch/um/sys-ppc/ptrace.c @@ -8,6 +8,25 @@ int putreg(struct task_struct *child, unsigned long regno, 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; @@ -16,6 +35,27 @@ unsigned long getreg(struct task_struct *child, unsigned long regno) 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 |