• Christophe Leroy's avatar
    selftests: vDSO: fix the way vDSO functions are called for powerpc · 6eda706a
    Christophe Leroy authored
    vdso_test_correctness test fails on powerpc:
    
    ~ # ./vdso_test_correctness
    ...
    [RUN]	Testing clock_gettime for clock CLOCK_REALTIME_ALARM (8)...
    [FAIL]	No such clock, but __vdso_clock_gettime returned 22
    [RUN]	Testing clock_gettime for clock CLOCK_BOOTTIME_ALARM (9)...
    [FAIL]	No such clock, but __vdso_clock_gettime returned 22
    [RUN]	Testing clock_gettime for clock CLOCK_SGI_CYCLE (10)...
    [FAIL]	No such clock, but __vdso_clock_gettime returned 22
    ...
    [RUN]	Testing clock_gettime for clock invalid (-1)...
    [FAIL]	No such clock, but __vdso_clock_gettime returned 22
    [RUN]	Testing clock_gettime for clock invalid (-2147483648)...
    [FAIL]	No such clock, but __vdso_clock_gettime returned 22
    [RUN]	Testing clock_gettime for clock invalid (2147483647)...
    [FAIL]	No such clock, but __vdso_clock_gettime returned 22
    
    On powerpc, a call to a VDSO function is not an ordinary C function
    call. Unlike several architectures which returns a negative error code
    in case of an error, powerpc sets CR[SO] and returns the error code
    as a positive value.
    
    Define and use a macro called VDSO_CALL() which takes a pointer
    to the function to call, the number of arguments and the arguments.
    
    Also update ABI vdso documentation to reflect this subtlety.
    
    Provide a specific version of VDSO_CALL() for powerpc that negates
    the error code on return when CR[SO] is set.
    
    Fixes: c7e5789b ("kselftest: Move test_vdso to the vDSO test suite")
    Fixes: 2e9a9725 ("selftests: vdso: Add a selftest for vDSO getcpu()")
    Fixes: 693f5ca0 ("kselftest: Extend vDSO selftest")
    Fixes: b2f1c3db ("kselftest: Extend vdso correctness test to clock_gettime64")
    Fixes: 4920a259 ("selftests/vDSO: add tests for vgetrandom")
    Signed-off-by: default avatarChristophe Leroy <christophe.leroy@csgroup.eu>
    Acked-by: default avatarShuah Khan <skhan@linuxfoundation.org>
    Signed-off-by: default avatarJason A. Donenfeld <Jason@zx2c4.com>
    6eda706a
vdso_test_gettimeofday.c 1.36 KB