The kselftest-vDSO/vdso_test_abi test encounters failures when built and executed using GCC-13 on armv7 architecture. The issue has been observed on both TI X15 devices and QEMU-armv7. Interestingly, the same test passes without any issues when built using Clang-19.This failure is specific to GCC-13. but test case should have been failed on clang toolchain but it did not. The Clang toolchain likely defaults to the traditional 32-bit time_t on 32-bit Debian Trixie (except x86), leading to an ABI issue similar to older compilers. This is affecting compatibility. This is not a new regression, this report generated on Linux next but also seen on Linux stable tree. Test name: kselftest-vDSO/vdso_test_abi Fails: gcc-13 pass: clang-19 Arnd Bergmann investigated and proposed a patch which fixes the problem. Test regression: selftest-vDSO/vdso_test_abi: Reported-by: Linux Kernel Functional Testing <lkft@xxxxxxxxxx> # selftests: vDSO: vdso_test_abi # TAP version 13 # 1..16 # # [vDSO kselftest] VDSO_VERSION: LINUX_2.6 # # The time is 184285885525887.-5268386858514840748 # ok 1 __vdso_gettimeofday # # clock_id: CLOCK_REALTIME # # The time is 184287230099877759.-1225334784 # ok 2 __vdso_clock_gettime CLOCK_REALTIME # # The vdso resolution is 4294967296 -1225335584 # # The syscall resolution is 4294967296 -1225334784 # not ok 3 __vdso_clock_getres CLOCK_REALTIME # # clock_id: CLOCK_BOOTTIME # # The time is 3253049749439251215.-1225334784 # ok 4 __vdso_clock_gettime CLOCK_BOOTTIME # # The vdso resolution is 4294967296 -1225335584 # # The syscall resolution is 4294967296 -1225334784 # not ok 5 __vdso_clock_getres CLOCK_BOOTTIME # # clock_id: CLOCK_TAI # # The time is 184549377723756415.-1225334784 # ok 6 __vdso_clock_gettime CLOCK_TAI # # The vdso resolution is 4294967296 -1225335584 # # The syscall resolution is 4294967296 -1225334784 # not ok 7 __vdso_clock_getres CLOCK_TAI # # clock_id: CLOCK_REALTIME_COARSE # # The time is 128974845965660031.-1225334784 # ok 8 __vdso_clock_gettime CLOCK_REALTIME_COARSE # # The vdso resolution is 42949672960000000 -1225335584 # # The syscall resolution is 42949672960000000 -1225334784 # not ok 9 __vdso_clock_getres CLOCK_REALTIME_COARSE # # clock_id: CLOCK_MONOTONIC # # The time is 3253311892768162575.-1225334784 # ok 10 __vdso_clock_gettime CLOCK_MONOTONIC # # The vdso resolution is 4294967296 -1225335584 # # The syscall resolution is 4294967296 -1225334784 # not ok 11 __vdso_clock_getres CLOCK_MONOTONIC # # clock_id: CLOCK_MONOTONIC_RAW # # The time is 3253442966580101903.-1225334784 # ok 12 __vdso_clock_gettime CLOCK_MONOTONIC_RAW # # The vdso resolution is 4294967296 -1225335584 # # The syscall resolution is 4294967296 -1225334784 # not ok 13 __vdso_clock_getres CLOCK_MONOTONIC_RAW # # clock_id: CLOCK_MONOTONIC_COARSE # # The time is 3197606291493094159.-1225334784 # ok 14 __vdso_clock_gettime CLOCK_MONOTONIC_COARSE # # The vdso resolution is 42949672960000000 -1225335584 # # The syscall resolution is 42949672960000000 -1225334784 # not ok 15 __vdso_clock_getres CLOCK_MONOTONIC_COARSE # # Couldn't find __vdso_time # ok 16 # SKIP __vdso_time # # 1 skipped test(s) detected. Consider enabling relevant config options to improve coverage. # # Totals: pass:8 fail:7 xfail:0 xpass:0 skip:1 error:0 not ok 3 selftests: vDSO: vdso_test_abi # exit=1 ## Build * test log: https://qa-reports.linaro.org/lkft/linux-next-master/build/next-20241126/testrun/26062838/suite/kselftest-vDSO/test/vDSO_vdso_test_abi/log * TI x15 test log: https://lkft.validation.linaro.org/scheduler/job/8117196#L7091 * build link: https://storage.tuxsuite.com/public/linaro/lkft/builds/2spp0E2mMNQq16RHsbzLSFAlxuM/ ## Source * git tree: https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git * git sha: df5d6180169ae06a2eac57e33b077ad6f6252440 (this not new issue) * architectures: armv7 * toolchain: gcc-13 (13.3.0) - failed * toolchain: clang ( version: 19.1.7) - pass * devices: Armv7 TI beaglebone, qemu-armv7 -- Linaro LKFT https://lkft.linaro.org
diff --git a/tools/testing/selftests/vDSO/vdso_test_abi.c b/tools/testing/selftests/vDSO/vdso_test_abi.c index a54424e2336f4..25778a7f849ce 100644 --- a/tools/testing/selftests/vDSO/vdso_test_abi.c +++ b/tools/testing/selftests/vDSO/vdso_test_abi.c @@ -17,6 +17,7 @@ #define _GNU_SOURCE #include <unistd.h> #include <sys/syscall.h> +#include <linux/time_types.h> #include "../kselftest.h" #include "vdso_config.h" @@ -26,9 +27,9 @@ static const char *version; static const char **name; -typedef long (*vdso_gettimeofday_t)(struct timeval *tv, struct timezone *tz); -typedef long (*vdso_clock_gettime_t)(clockid_t clk_id, struct timespec *ts); -typedef long (*vdso_clock_getres_t)(clockid_t clk_id, struct timespec *ts); +typedef long (*vdso_gettimeofday_t)(struct __kernel_old_timeval *tv, struct timezone *tz); +typedef long (*vdso_clock_gettime_t)(clockid_t clk_id, struct __kernel_old_timespec *ts); +typedef long (*vdso_clock_getres_t)(clockid_t clk_id, struct __kernel_old_timespec *ts); typedef time_t (*vdso_time_t)(time_t *t); const char *vdso_clock_name[12] = { @@ -83,7 +84,7 @@ static void vdso_test_clock_gettime(clockid_t clk_id) return; } - struct timespec ts; + struct __kernel_old_timespec ts; long ret = VDSO_CALL(vdso_clock_gettime, 2, clk_id, &ts); if (ret == 0) { @@ -135,7 +136,7 @@ static void vdso_test_clock_getres(clockid_t clk_id) return; } - struct timespec ts, sys_ts; + struct __kernel_old_timespec ts, sys_ts; long ret = VDSO_CALL(vdso_clock_getres, 2, clk_id, &ts); if (ret == 0) { -- 2.43.0