[PATCH 41/59] linux: Fix function point cast on vDSO handling

Sam James sam@gentoo.org
Sat Oct 18 06:41:52 GMT 2025


Adhemerval Zanella <adhemerval.zanella@linaro.org> writes:

> There is no need to cast to avoid, both pointer already have the
> expected type.

Reviewed-by: Sam James <sam@gentoo.org>

>
> 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;                                   \
>       |                                 ^~~~
> ---
>  sysdeps/unix/sysv/linux/gettimeofday.c      | 2 +-
>  sysdeps/unix/sysv/linux/powerpc/libc-vdso.h | 2 +-
>  sysdeps/unix/sysv/linux/time.c              | 2 +-
>  3 files changed, 3 insertions(+), 3 deletions(-)
>
> diff --git a/sysdeps/unix/sysv/linux/gettimeofday.c b/sysdeps/unix/sysv/linux/gettimeofday.c
> index e2a2155358..a6ec07fe59 100644
> --- a/sysdeps/unix/sysv/linux/gettimeofday.c
> +++ b/sysdeps/unix/sysv/linux/gettimeofday.c
> @@ -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
> diff --git a/sysdeps/unix/sysv/linux/powerpc/libc-vdso.h b/sysdeps/unix/sysv/linux/powerpc/libc-vdso.h
> index b9763554ba..82b85dbe0b 100644
> --- a/sysdeps/unix/sysv/linux/powerpc/libc-vdso.h
> +++ b/sysdeps/unix/sysv/linux/powerpc/libc-vdso.h
> @@ -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
> diff --git a/sysdeps/unix/sysv/linux/time.c b/sysdeps/unix/sysv/linux/time.c
> index 5a72481972..fc5631ea0e 100644
> --- a/sysdeps/unix/sysv/linux/time.c
> +++ b/sysdeps/unix/sysv/linux/time.c
> @@ -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


More information about the Libc-alpha mailing list