]> git.ipfire.org Git - thirdparty/util-linux.git/commitdiff
libuuid: fix uuid_time on macOS without attribute((alias))
authorEugene Gershnik <gershnik@users.noreply.github.com>
Mon, 6 May 2024 16:29:39 +0000 (09:29 -0700)
committerKarel Zak <kzak@redhat.com>
Tue, 15 Apr 2025 10:53:06 +0000 (12:53 +0200)
Weak aliases are not supported by clang on Darwin.
Instead this fix uses inline asm to make `_uuid_time` an alias to
`___uuid_time`

It appears that on macOS the time API is purely 32 or 64 bit depending
on the build type. There is no ABI issue on that platform and `uuid_time`
can be unconditionally aliased to `_uuid_time`. This is all conjectural,
however, since I have no ability to make 32-bit builds for macOS - the
Apple toolchain doesn't support this since 2019.

Fixes util-linux/util-linux#2873

(cherry picked from commit e47c6f751a7ef87640c61316ada774e8e9cc6b07)

libuuid/src/uuid_time.c

index d52c2f3070ffeeb663aaaaaca36eee9dba5d939f..c7516152b53aa521529dcad200a430c6a91d20cf 100644 (file)
@@ -144,6 +144,10 @@ time_t __uuid_time(const uuid_t uu, struct timeval *ret_tv)
 }
 #if defined(__USE_TIME_BITS64) && defined(__GLIBC__)
 extern time_t uuid_time64(const uuid_t uu, struct timeval *ret_tv) __attribute__((weak, alias("__uuid_time")));
+#elif defined(__clang__) && defined(__APPLE__)
+__asm__(".globl _uuid_time");
+__asm__(".set _uuid_time, ___uuid_time");
+extern time_t uuid_time(const uuid_t uu, struct timeval *ret_tv);
 #else
 extern time_t uuid_time(const uuid_t uu, struct timeval *ret_tv) __attribute__((weak, alias("__uuid_time")));
 #endif