freebsd: Fix TIMESPEC_OVERFLOW for PowerPC

Once upon a time, 32-bit PowerPC did indeed have a 32-bit time_t, but
FreeBSD 12.0 switched to a 64-bit time_t for PowerPC as an ABI break,
which predates the addition of FreeBSD support to OpenZFS. Moreover,
64-bit PowerPC has existed since FreeBSD 9.0, where __powerpc__ is also
defined (alongside __powerpc64__ to disambiguate), which has always had
a 64-bit time_t. This code has therefore always been wrong for all
PowerPC variants. Fix this by limiting the 32-bit case to just i386,
which is the only architecture in FreeBSD to have a 32-bit time_t and
not have broken ABI, due to its special legacy compatibility status.

Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Reviewed-by: Alexander Motin <alexander.motin@TrueNAS.com>
Signed-off-by: Jessica Clarke <jrtc27@jrtc27.com>
Closes #18217
Closes #18218
This commit is contained in:
Jessica Clarke 2026-02-18 00:46:02 +00:00 committed by GitHub
parent bee53d8c10
commit bfb276e55c
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -51,7 +51,7 @@ extern int hz;
typedef longlong_t hrtime_t; typedef longlong_t hrtime_t;
#if defined(__i386__) || defined(__powerpc__) #ifdef __i386__
#define TIMESPEC_OVERFLOW(ts) \ #define TIMESPEC_OVERFLOW(ts) \
((ts)->tv_sec < INT32_MIN || (ts)->tv_sec > INT32_MAX) ((ts)->tv_sec < INT32_MIN || (ts)->tv_sec > INT32_MAX)
#else #else