• Paul Mackerras's avatar
    powerpc: Don't corrupt user registers on 32-bit · 955c1cab
    Paul Mackerras authored
    Commit de79f7b9 ("powerpc: Put FP/VSX and VR state into structures")
    modified load_up_fpu() and load_up_altivec() in such a way that they
    now use r7 and r8.  Unfortunately, the callers of these functions on
    32-bit machines then return to userspace via fast_exception_return,
    which doesn't restore all of the volatile GPRs, but only r1, r3 -- r6
    and r9 -- r12.  This was causing userspace segfaults and other
    userspace misbehaviour on 32-bit machines.
    
    This fixes the problem by changing the register usage of load_up_fpu()
    and load_up_altivec() to avoid using r7 and r8 and instead use r6 and
    r10.  This also adds comments to those functions saying which registers
    may be used.
    Signed-off-by: default avatarPaul Mackerras <paulus@samba.org>
    Tested-by: Scott Wood <scottwood@freescale.com> (on e500mc, so no altivec)
    Signed-off-by: default avatarBenjamin Herrenschmidt <benh@kernel.crashing.org>
    955c1cab
fpu.S 5.88 KB