]> 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)
committerEugene Gershnik <gershnik@users.noreply.github.com>
Sun, 24 Nov 2024 21:41:48 +0000 (13:41 -0800)
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

libuuid/src/uuid_time.c

index 9b415b3ee73a20788d372673f5425f970b6ac879..df0478e190937292a4dd6ac52a16e32d6b5b6563 100644 (file)
@@ -85,6 +85,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