The _rval register variable is meant to be an output operand of the asm
statement but is instead used as input operand.
clang 20.1 notices this and triggers -Wuninitialized warnings:

tools/testing/selftests/timers/auxclock.c:154:10: error: variable '_rval' is 
uninitialized when used here [-Werror,-Wuninitialized]
  154 |                 return VDSO_CALL(self->vdso_clock_gettime64, 2, 
clockid, ts);
      |                        
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
tools/testing/selftests/timers/../vDSO/vdso_call.h:59:10: note: expanded from 
macro 'VDSO_CALL'
   59 |                 : "r" (_rval)                                           
\
      |                        ^~~~~
tools/testing/selftests/timers/auxclock.c:154:10: note: variable '_rval' is 
declared here
tools/testing/selftests/timers/../vDSO/vdso_call.h:47:2: note: expanded from 
macro 'VDSO_CALL'
   47 |         register long _rval asm ("r3");                                 
\
      |         ^

It seems the list of input and output operands have been switched around.
However as the argument registers are not always initialized they can not
be marked as pure inputs as that would trigger -Wuninitialized warnings.
Adding _rval as another input and output operand does also not work as it
would collide with the existing _r3 variable.

Instead reuse _r3 for both the argument and the return value.

Reported-by: kernel test robot <l...@intel.com>
Closes: 
https://lore.kernel.org/oe-kbuild-all/202506180223.book5jdk-...@intel.com/
Fixes: 6eda706a535c ("selftests: vDSO: fix the way vDSO functions are called 
for powerpc")
Signed-off-by: Thomas Weißschuh <thomas.weisssc...@linutronix.de>
---
 tools/testing/selftests/vDSO/vdso_call.h | 7 +++----
 1 file changed, 3 insertions(+), 4 deletions(-)

diff --git a/tools/testing/selftests/vDSO/vdso_call.h 
b/tools/testing/selftests/vDSO/vdso_call.h
index 
bb237d771051bd4103367fc60b54b505b7586965..e7205584cbdca5e10c13c1e9425d2023b02cda7f
 100644
--- a/tools/testing/selftests/vDSO/vdso_call.h
+++ b/tools/testing/selftests/vDSO/vdso_call.h
@@ -44,7 +44,6 @@
        register long _r6 asm ("r6");                                   \
        register long _r7 asm ("r7");                                   \
        register long _r8 asm ("r8");                                   \
-       register long _rval asm ("r3");                                 \
                                                                        \
        LOADARGS_##nr(fn, args);                                        \
                                                                        \
@@ -54,13 +53,13 @@
                "       bns+    1f\n"                                   \
                "       neg     3, 3\n"                                 \
                "1:"                                                    \
-               : "+r" (_r0), "=r" (_r3), "+r" (_r4), "+r" (_r5),       \
+               : "+r" (_r0), "+r" (_r3), "+r" (_r4), "+r" (_r5),       \
                  "+r" (_r6), "+r" (_r7), "+r" (_r8)                    \
-               : "r" (_rval)                                           \
+               :                                                       \
                : "r9", "r10", "r11", "r12", "cr0", "cr1", "cr5",       \
                  "cr6", "cr7", "xer", "lr", "ctr", "memory"            \
        );                                                              \
-       _rval;                                                          \
+       _r3;                                                            \
 })
 
 #else

-- 
2.50.1


Reply via email to