• Breno Leitao's avatar
    selftests/powerpc: Fix ptrace tm failure · 48dc0ef1
    Breno Leitao authored
    Test ptrace-tm-spd-gpr fails on current kernel (4.19) due to a segmentation
    fault that happens on the child process prior to setting cptr[2] = 1. This
    causes the parent process to wait forever at 'while (!pptr[2])' and the test to
    be killed by the test harness framework by timeout, thus, failing.
    
    The segmentation fault happens because of a inline assembly being
    generated as:
    
    	0x10000355c <tm_spd_gpr+492>    lfs    f0, 0(0)
    
    This is reading memory position 0x0 and causing the segmentation fault.
    
    This code is being generated by ASM_LOAD_FPR_SINGLE_PRECISION(flt_4), where
    flt_4 is passed to the inline assembly block as:
    
    	[flt_4] "r" (&d)
    
    Since the inline assembly 'r' constraint means any GPR, gpr0 is being
    chosen, thus causing this issue when issuing a Load Floating-Point Single
    instruction.
    
    This patch simply changes the constraint to 'b', which specify that this
    register will be used as base, and r0 is not allowed to be used, avoiding
    this issue.
    
    Other than that, removing flt_2 register from the input operands, since it
    is not used by the inline assembly code at all.
    
    Cc: stable@vger.kernel.org
    Signed-off-by: default avatarBreno Leitao <leitao@debian.org>
    Acked-by: default avatarSegher Boessenkool <segher@kernel.crashing.org>
    Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
    48dc0ef1
ptrace-tm-spd-gpr.c 3.4 KB