[vlc-commits] [Git][videolan/vlc][master] linux: use futex_time64 where applicable
Rémi Denis-Courmont (@Courmisch)
gitlab at videolan.org
Sat Jan 29 16:46:03 UTC 2022
Rémi Denis-Courmont pushed to branch master at VideoLAN / VLC
Commits:
949fb1d0 by Rémi Denis-Courmont at 2022-01-29T16:26:15+00:00
linux: use futex_time64 where applicable
This adds support for 32-bit RISC-V, which only supports 64-bit time_t,
and thus lacks a plain futex system call. This also adds (future)
support for building with a 64-bit time_t ABI on a 32-bit platform.
- - - - -
1 changed file:
- src/linux/thread.c
Changes:
=====================================
src/linux/thread.c
=====================================
@@ -53,7 +53,27 @@ unsigned long vlc_thread_id(void)
static int sys_futex(void *addr, int op, unsigned val,
const struct timespec *to, void *addr2, int val3)
{
- return syscall(__NR_futex, addr, op, val, to, addr2, val3);
+ /* The futex Linux kernel system call exists in two variants:
+ * - the original one for use with long time_t, which suffers from the
+ * year 2038 problem on 32-bit architectures,
+ * - the "time64" one for use with 64-bit time_t, which lacks backward
+ * binary compatibility with 32-bit long time_t on 32-bit architectures.
+ */
+ static_assert (sizeof (time_t) == sizeof (long) || sizeof (time_t) == 8,
+ "Unrecognised time_t type definition");
+
+#if !defined (__NR_futex)
+ /* Recent 32-bit platforms (e.g. riscv32) only support 64-bit time_t. */
+ static_assert (sizeof (time_t) == 8, "Expected 64-bit time_t");
+ const long num = __NR_futex_time64;
+#elif !defined (__NR_futex_time64)
+ static_assert (sizeof (time_t) == sizeof (long), "Expected long time_t");
+ const long num = __NR_futex;
+#else
+ const long num = sizeof (time_t) == sizeof (long)
+ ? __NR_futex : __NR_futex_time64;
+#endif
+ return syscall(num, addr, op, val, to, addr2, val3);
}
static int vlc_futex_wake(void *addr, int nr)
View it on GitLab: https://code.videolan.org/videolan/vlc/-/commit/949fb1d03d57d18009e20bb821f9d3e70db17ab8
--
View it on GitLab: https://code.videolan.org/videolan/vlc/-/commit/949fb1d03d57d18009e20bb821f9d3e70db17ab8
You're receiving this email because of your account on code.videolan.org.
More information about the vlc-commits
mailing list