• Benjamin Herrenschmidt's avatar
    [POWERPC] ptrace updates & new, better requests · e17666ba
    Benjamin Herrenschmidt authored
    The powerpc ptrace interface is dodgy at best. We have defined our
    "own" versions of GETREGS/SETREGS/GETFPREGS/SETFPREGS that strangely
    take arguments in reverse order from other archs (in addition to having
    different request numbers) and have subtle issue, like not accessing
    all of the registers in their respective categories.
    
    This patch moves the implementation of those to a separate function
    in order to facilitate their deprecation in the future, and provides
    new ptrace requests that mirror the x86 and sparc ones and use the
    same numbers:
    
       PTRACE_GETREGS    : returns an entire pt_regs (the whole thing,
                           not only the 32 GPRs, though that doesn't
                           include the FPRs etc... There's a compat version
                           for 32 bits that returns a 32 bits compatible
                           pt_regs (44 uints)
    
       PTRACE_SETREGS    : sets an entire pt_regs (the whole thing,
                           not only the 32 GPRs, though that doesn't
                           include the FPRs etc... Some registers cannot be
                           written to and will just be dropped, this is the
                           same as with POKEUSR, that is anything above MQ
                           on 32 bits and CCR on 64 bits. There is a compat
                           version as well.
    
       PTRACE_GETFPREGS  : returns all the FP registers -including- the FPSCR
                           that is 33 doubles (regardless of 32/64 bits)
    
       PTRACE_SETFPREGS  : sets all the FP registers -including- the FPSCR
                           that is 33 doubles (regardless of 32/64 bits)
    
    And two that only exist on 64 bits kernels:
    
       PTRACE_GETREGS64  : Same as PTRACE_GETREGS, except there is no compat
                           function, a 32 bits process will obtain the full 64
                           bits registers
    
       PTRACE_SETREGS64  : Same as PTRACE_SETREGS, except there is no compat
                           function, a 32 bits process will set the full 64
                           bits registers
    
    The two later ones makes things easier to have a 32 bits debugger on a
    64 bits program (or on a 32 bits program that uses the full 64 bits of
    the GPRs, which is possible though has issues that will be fixed in a
    later patch).
    
    Finally, while at it, the patch removes a whole bunch of code duplication
    between ptrace32.c and ptrace.c, in large part by having the former call
    into the later for all requests that don't need any special "compat"
    treatment.
    Signed-off-by: default avatarBenjamin Herrenschmidt <benh@kernel.crashing.org>
    Signed-off-by: default avatarPaul Mackerras <paulus@samba.org>
    e17666ba
ptrace32.c 10 KB