lkml.org 
[lkml]   [2007]   [Dec]   [20]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH -mm 15/43] powerpc user_regset_view
    Date
    This provides the task_user_regset_view entry point and support for all the
    native-mode (64 on CONFIG_PPC64, 32 on CONFIG_PPC32) thread register state.
    This will enable generic machine-independent code to access user-mode
    threads' registers for debugging and dumping.

    Signed-off-by: Roland McGrath <roland@redhat.com>
    ---
    arch/powerpc/kernel/Makefile | 2 +
    arch/powerpc/kernel/ptrace.c | 52 ++++++++++++++++++++++++++++++++++++++++++
    2 files changed, 54 insertions(+), 0 deletions(-)

    diff --git a/arch/powerpc/kernel/Makefile b/arch/powerpc/kernel/Makefile
    index ca51f0c..615ed96 100644
    --- a/arch/powerpc/kernel/Makefile
    +++ b/arch/powerpc/kernel/Makefile
    @@ -2,6 +2,8 @@
    # Makefile for the linux kernel.
    #

    +CFLAGS_ptrace.o += -DUTS_MACHINE='"$(UTS_MACHINE)"'
    +
    ifeq ($(CONFIG_PPC64),y)
    EXTRA_CFLAGS += -mno-minimal-toc
    endif
    diff --git a/arch/powerpc/kernel/ptrace.c b/arch/powerpc/kernel/ptrace.c
    index e493fc0..b32ac5f 100644
    --- a/arch/powerpc/kernel/ptrace.c
    +++ b/arch/powerpc/kernel/ptrace.c
    @@ -455,6 +455,58 @@ static int set_evrregs(struct task_struct *task, unsigned long *data)
    #endif /* CONFIG_SPE */


    +/*
    + * These are our native regset flavors.
    + */
    +enum powerpc_regset {
    + REGSET_GPR,
    + REGSET_FPR,
    +#ifdef CONFIG_ALTIVEC
    + REGSET_VMX,
    +#endif
    +#ifdef CONFIG_SPE
    + REGSET_SPE,
    +#endif
    +};
    +
    +static const struct user_regset native_regsets[] = {
    + [REGSET_GPR] = {
    + .core_note_type = NT_PRSTATUS, .n = ELF_NGREG,
    + .size = sizeof(long), .align = sizeof(long),
    + .get = gpr_get, .set = gpr_set
    + },
    + [REGSET_FPR] = {
    + .core_note_type = NT_PRFPREG, .n = ELF_NFPREG,
    + .size = sizeof(double), .align = sizeof(double),
    + .get = fpr_get, .set = fpr_set
    + },
    +#ifdef CONFIG_ALTIVEC
    + [REGSET_VMX] = {
    + .core_note_type = NT_PPC_VMX, .n = 34,
    + .size = sizeof(vector128), .align = sizeof(vector128),
    + .active = vr_active, .get = vr_get, .set = vr_set
    + },
    +#endif
    +#ifdef CONFIG_SPE
    + [REGSET_SPE] = {
    + .n = 35,
    + .size = sizeof(u32), .align = sizeof(u32),
    + .active = evr_active, .get = evr_get, .set = evr_set
    + },
    +#endif
    +};
    +
    +static const struct user_regset_view user_ppc_native_view = {
    + .name = UTS_MACHINE, .e_machine = ELF_ARCH, .ei_osabi = ELF_OSABI,
    + .regsets = native_regsets, .n = ARRAY_SIZE(native_regsets)
    +};
    +
    +const struct user_regset_view *task_user_regset_view(struct task_struct *task)
    +{
    + return &user_ppc_native_view;
    +}
    +
    +
    void user_enable_single_step(struct task_struct *task)
    {
    struct pt_regs *regs = task->thread.regs;
    --
    1.5.3.6


    \
     
     \ /
      Last update: 2007-12-20 13:13    [W:4.608 / U:0.036 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site