[RFC/PATCH 2/5] powerpc: Cleanup ptrace bits
Kumar Gala
galak at kernel.crashing.org
Tue May 29 23:23:59 EST 2007
On May 29, 2007, at 1:45 AM, Benjamin Herrenschmidt wrote:
> The powerpc ptrace code has some weirdness, like a ptrace-common.h
> file that
> is actually ppc64 only and some of the 32 bits code ifdef'ed inside
> ptrace.c.
>
> There are also separate implementations for things like get/
> set_vrregs for
> 32 and 64 bits which is totally unnecessary.
>
> This patch cleans that up a bit by having a ptrace-common.h which
> contains
> really common code (and makes a lot more code common), and ptrace-
> ppc32.h and
> ptrace-ppc64.h files that contain the few remaining different bits.
>
> Signed-off-by: Benjamin Herrenschmidt <benh at kernel.crashing.org>
>
> arch/powerpc/kernel/ptrace-common.h | 89 +++++++---------
> arch/powerpc/kernel/ptrace-ppc32.h | 100 ++++++++++++++++++
> arch/powerpc/kernel/ptrace-ppc64.h | 51 +++++++++
> arch/powerpc/kernel/ptrace.c | 198
> ------------------------------------
> arch/powerpc/kernel/ptrace32.c | 1
> 5 files changed, 197 insertions(+), 242 deletions(-)
>
> Index: linux-cell/arch/powerpc/kernel/ptrace-common.h
> ===================================================================
> --- linux-cell.orig/arch/powerpc/kernel/ptrace-common.h 2007-05-29
> 13:05:55.000000000 +1000
> +++ linux-cell/arch/powerpc/kernel/ptrace-common.h 2007-05-29
> 16:22:00.000000000 +1000
> @@ -1,5 +1,6 @@
> /*
> * Copyright (c) 2002 Stephen Rothwell, IBM Coproration
> + * Copyright (c) 2007 Benjamin Herrenschmidt, IBM Coproration
> * Extracted from ptrace.c and ptrace32.c
> *
> * This file is subject to the terms and conditions of the GNU
> General
> @@ -7,15 +8,8 @@
> * this archive for more details.
> */
>
> -#ifndef _PPC64_PTRACE_COMMON_H
> -#define _PPC64_PTRACE_COMMON_H
> -
> -#include <asm/system.h>
> -
> -/*
> - * Set of msr bits that gdb can change on behalf of a process.
> - */
> -#define MSR_DEBUGCHANGE (MSR_FE0 | MSR_SE | MSR_BE | MSR_FE1)
> +#ifndef _POWERPC_PTRACE_COMMON_H
> +#define _POWERPC_PTRACE_COMMON_H
>
> /*
> * Get contents of register REGNO in task TASK.
> @@ -24,18 +18,18 @@ static inline unsigned long get_reg(stru
> {
> unsigned long tmp = 0;
>
> - /*
> - * Put the correct FP bits in, they might be wrong as a result
> - * of our lazy FP restore.
> - */
Do we do some different lazy save/restore on ppc64 than ppc32? I'm
trying to understand why the comment isn't (or wasn't) valid for
ppc32 as well.
> + if (task->thread.regs == NULL)
> + return -EIO;
> +
> if (regno == PT_MSR) {
> tmp = ((unsigned long *)task->thread.regs)[PT_MSR];
> - tmp |= task->thread.fpexc_mode;
> - } else if (regno < (sizeof(struct pt_regs) / sizeof(unsigned
> long))) {
> - tmp = ((unsigned long *)task->thread.regs)[regno];
> + return PT_MUNGE_MSR(tmp, task);
> }
>
> - return tmp;
> + if (regno < (sizeof(struct pt_regs) / sizeof(unsigned long)))
> + return ((unsigned long *)task->thread.regs)[regno];
> +
> + return -EIO;
> }
More information about the Linuxppc-dev
mailing list