]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
linux: Fix function point cast on vDSO handling
authorAdhemerval Zanella <adhemerval.zanella@linaro.org>
Fri, 17 Oct 2025 19:13:16 +0000 (16:13 -0300)
committerAdhemerval Zanella <adhemerval.zanella@linaro.org>
Mon, 20 Oct 2025 14:33:54 +0000 (11:33 -0300)
There is no need to cast to avoid, both pointer already have the
expected type.

It fixes the clang -Wpointer-type-mismatch error:

../sysdeps/unix/sysv/linux/gettimeofday.c:43:6: error: pointer type mismatch ('int (*)(struct timeval *, void *)' and 'void *') [-Werror,-Wpointer-type-mismatch]
   41 | libc_ifunc (__gettimeofday,
      | ~~~~~~~~~~~~~~~~~~~~~~~~~~~
   42 |             GLRO(dl_vdso_gettimeofday) != NULL
      |             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   43 |             ? VDSO_IFUNC_RET (GLRO(dl_vdso_gettimeofday))
      |             ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   44 |             : (void*) __gettimeofday_syscall)
      |             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
./../include/libc-symbols.h:789:53: note: expanded from macro 'libc_ifunc'
  789 | #define libc_ifunc(name, expr) __ifunc (name, name, expr, void, INIT_ARCH)
      |                                ~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~
./../include/libc-symbols.h:705:34: note: expanded from macro '__ifunc'
  705 |   __ifunc_args (type_name, name, expr, init, arg)
      |   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~
./../include/libc-symbols.h:677:38: note: expanded from macro '__ifunc_args'
  677 |   __ifunc_resolver (type_name, name, expr, init, static, __VA_ARGS__);  \
      |   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
./../include/libc-symbols.h:667:33: note: expanded from macro '__ifunc_resolver'
  667 |     __typeof (type_name) *res = expr;                                   \
      |                                 ^~~~

Reviewed-by: Sam James <sam@gentoo.org>
sysdeps/unix/sysv/linux/gettimeofday.c
sysdeps/unix/sysv/linux/powerpc/libc-vdso.h
sysdeps/unix/sysv/linux/time.c

index e2a2155358ffa0914c557db90184c2643892c5e9..a6ec07fe59f1621860da1ba6b843e44f084382e4 100644 (file)
@@ -41,7 +41,7 @@ __gettimeofday_syscall (struct timeval *restrict tv, void *restrict tz)
 libc_ifunc (__gettimeofday,
            GLRO(dl_vdso_gettimeofday) != NULL
            ? VDSO_IFUNC_RET (GLRO(dl_vdso_gettimeofday))
-           : (void *) __gettimeofday_syscall)
+           : __gettimeofday_syscall)
 
 # else
 int
index b9763554ba8b16612bc25950ede745262105620a..82b85dbe0b9ed86b85afb0cec40cd957b484a230 100644 (file)
@@ -47,7 +47,7 @@
   ({                                                     \
     static Elf64_FuncDesc vdso_opd = { .fd_toc = ~0x0 }; \
     vdso_opd.fd_func = (Elf64_Addr)value;                \
-    &vdso_opd;                                           \
+    (void *) &vdso_opd;                                  \
   })
 
 #else
index 5a72481972121ce9e1920c59f8c2970071b8094a..fc5631ea0ebade6711bfd8e99dccf1a1f204bda3 100644 (file)
@@ -36,7 +36,7 @@ time_syscall (time_t *t)
 # define INIT_ARCH()
 libc_ifunc (time,
            GLRO(dl_vdso_time) != NULL ? VDSO_IFUNC_RET (GLRO(dl_vdso_time))
-                                      : (void *) time_syscall);
+                                      : time_syscall);
 
 # else
 time_t