On 5/13/21 10:26 PM, Iain Sandoe wrote:
Hi,
The update to libsanitizer broke bootstrap on Darwin, since the upstream
sources assume building with clang on Darwin and make use of a header
depending on a builtin that GCC does not currently implement.
Hello.
Thank you for the fix. Btw. is it something that can be suggested to upstream?
Martin
This patch fixes the build. Whether to implement the missing builtin is
something to consider another day,
bootstrapped on Darwin16 and smoke-tested the sanitizer,
pushed to master,
thanks
Iain
I pushed also r12-781-g1f6fc2826d19136bb5ab97a4bdac07e6736b6869 which
adds this patch to libsanitizer LOCAL_PATCHES.
=====
GCC does not, currently, define __builtin_os_log_format, which
is needed by os/log.h. Do not include that header unless the
builtin is defined (since the header errors out on the same
condition). Provide a work-around solution to the missing API
provided via the header.
libsanitizer/ChangeLog:
* sanitizer_common/sanitizer_mac.cpp : Check for the
availability of __builtin_os_log_format before trying to
include a header depending on it.
(OS_LOG_DEFAULT): New.
(os_log_error): Define to a fall-back using an older API.
---
libsanitizer/sanitizer_common/sanitizer_mac.cpp | 10 +++++++++-
1 file changed, 9 insertions(+), 1 deletion(-)
diff --git a/libsanitizer/sanitizer_common/sanitizer_mac.cpp
b/libsanitizer/sanitizer_common/sanitizer_mac.cpp
index f455856c85d..30a94fcba14 100644
--- a/libsanitizer/sanitizer_common/sanitizer_mac.cpp
+++ b/libsanitizer/sanitizer_common/sanitizer_mac.cpp
@@ -70,7 +70,15 @@ extern "C" {
#include <mach/mach_time.h>
#include <mach/vm_statistics.h>
#include <malloc/malloc.h>
-#include <os/log.h>
+#if defined(__has_builtin) && __has_builtin(__builtin_os_log_format)
+# include <os/log.h>
+#else
+ /* Without support for __builtin_os_log_format, fall back to the older
+ method. */
+# define OS_LOG_DEFAULT 0
+# define os_log_error(A,B,C) \
+ asl_log(nullptr, nullptr, ASL_LEVEL_ERR, "%s", (C));
+#endif
#include <pthread.h>
#include <sched.h>
#include <signal.h>