<div dir="ltr">Have you seen this build failure?<div><br></div><div><a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__lab.llvm.org-3A8011_builders_sanitizer-5Fx86-5F64-2Dfreebsd_builds_5766_steps_compile_logs_stdio&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=wS0xG9s1ZEIo6IIOMRxS7lHukpiw6jB0MhiCtlJuS9Y&s=89nYR9KV-6Gl-1aGw2VTYl49_k1qrj3VgqeJUzsAkXo&e=">http://lab.llvm.org:8011/builders/sanitizer_x86_64-freebsd/builds/5766/steps/compile/logs/stdio</a><br></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Thu, Jul 23, 2015 at 3:05 PM, Evgeniy Stepanov <span dir="ltr"><<a href="mailto:eugeni.stepanov@gmail.com" target="_blank">eugeni.stepanov@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: eugenis<br>
Date: Thu Jul 23 17:05:20 2015<br>
New Revision: 243051<br>
<br>
URL: <a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject-3Frev-3D243051-26view-3Drev&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=wS0xG9s1ZEIo6IIOMRxS7lHukpiw6jB0MhiCtlJuS9Y&s=sp0tcRnB4q9a0552QSwlARY5aBoKnFCF-UbN7vP1NR4&e=" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project?rev=243051&view=rev</a><br>
Log:<br>
[sanitizer] Implement logging to syslog.<br>
<br>
Previously, Android target had a logic of duplicating all sanitizer<br>
output to logcat. This change extends it to all posix platforms via<br>
the use of syslog, controlled by log_to_syslog flag. Enabled by<br>
default on Android, off everywhere else.<br>
<br>
A bit of cmake magic is required to allow Printf() to call a libc<br>
function. I'm adding a stub implementation to support no-libc builds<br>
like dfsan and safestack.<br>
<br>
This is a second attempt. I believe I've fixed all the issues that<br>
prompted the revert: Mac build, and all kinds of non-CMake builds<br>
(there are 3 of those).<br>
<br>
Added:<br>
    compiler-rt/trunk/lib/sanitizer_common/sanitizer_common_nolibc.cc<br>
Modified:<br>
    compiler-rt/trunk/lib/dfsan/CMakeLists.txt<br>
    compiler-rt/trunk/lib/safestack/CMakeLists.txt<br>
    compiler-rt/trunk/lib/sanitizer_common/CMakeLists.txt<br>
    compiler-rt/trunk/lib/sanitizer_common/Makefile.mk<br>
    compiler-rt/trunk/lib/sanitizer_common/sanitizer_common.h<br>
    compiler-rt/trunk/lib/sanitizer_common/sanitizer_flags.inc<br>
    compiler-rt/trunk/lib/sanitizer_common/sanitizer_linux.cc<br>
    compiler-rt/trunk/lib/sanitizer_common/sanitizer_linux_libcdep.cc<br>
    compiler-rt/trunk/lib/sanitizer_common/sanitizer_posix_libcdep.cc<br>
    compiler-rt/trunk/lib/sanitizer_common/sanitizer_printf.cc<br>
    compiler-rt/trunk/lib/sanitizer_common/tests/CMakeLists.txt<br>
    compiler-rt/trunk/lib/tsan/go/buildgo.sh<br>
    compiler-rt/trunk/lib/tsan/rtl/Makefile.old<br>
<br>
Modified: compiler-rt/trunk/lib/dfsan/CMakeLists.txt<br>
URL: <a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject_compiler-2Drt_trunk_lib_dfsan_CMakeLists.txt-3Frev-3D243051-26r1-3D243050-26r2-3D243051-26view-3Ddiff&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=wS0xG9s1ZEIo6IIOMRxS7lHukpiw6jB0MhiCtlJuS9Y&s=wD8iGSbPsWm28XyzRMoGcS9AD6OjInmtzbCRHY5Rckc&e=" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/dfsan/CMakeLists.txt?rev=243051&r1=243050&r2=243051&view=diff</a><br>
==============================================================================<br>
--- compiler-rt/trunk/lib/dfsan/CMakeLists.txt (original)<br>
+++ compiler-rt/trunk/lib/dfsan/CMakeLists.txt Thu Jul 23 17:05:20 2015<br>
@@ -25,6 +25,7 @@ foreach(arch ${DFSAN_SUPPORTED_ARCH})<br>
   add_compiler_rt_runtime(clang_rt.dfsan-libc-${arch} ${arch} STATIC<br>
     SOURCES ${DFSAN_RTL_SOURCES}<br>
             $<TARGET_OBJECTS:RTSanitizerCommon.${arch}><br>
+            $<TARGET_OBJECTS:RTSanitizerCommonNoLibc.${arch}><br>
             CFLAGS ${DFSAN_NOLIBC_CFLAGS})<br>
   add_sanitizer_rt_symbols(clang_rt.dfsan-${arch} dfsan.syms.extra)<br>
   add_dependencies(dfsan<br>
<br>
Modified: compiler-rt/trunk/lib/safestack/CMakeLists.txt<br>
URL: <a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject_compiler-2Drt_trunk_lib_safestack_CMakeLists.txt-3Frev-3D243051-26r1-3D243050-26r2-3D243051-26view-3Ddiff&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=wS0xG9s1ZEIo6IIOMRxS7lHukpiw6jB0MhiCtlJuS9Y&s=UvFpNs7I--Ybvwpdg8EaoA7DS7UKhxzTBh_aiuEfisc&e=" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/safestack/CMakeLists.txt?rev=243051&r1=243050&r2=243051&view=diff</a><br>
==============================================================================<br>
--- compiler-rt/trunk/lib/safestack/CMakeLists.txt (original)<br>
+++ compiler-rt/trunk/lib/safestack/CMakeLists.txt Thu Jul 23 17:05:20 2015<br>
@@ -22,6 +22,7 @@ else()<br>
       SOURCES ${SAFESTACK_SOURCES}<br>
               $<TARGET_OBJECTS:RTInterception.${arch}><br>
               $<TARGET_OBJECTS:RTSanitizerCommon.${arch}><br>
+              $<TARGET_OBJECTS:RTSanitizerCommonNoLibc.${arch}><br>
       CFLAGS ${SAFESTACK_CFLAGS})<br>
     add_dependencies(safestack clang_rt.safestack-${arch})<br>
   endforeach()<br>
<br>
Modified: compiler-rt/trunk/lib/sanitizer_common/CMakeLists.txt<br>
URL: <a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject_compiler-2Drt_trunk_lib_sanitizer-5Fcommon_CMakeLists.txt-3Frev-3D243051-26r1-3D243050-26r2-3D243051-26view-3Ddiff&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=wS0xG9s1ZEIo6IIOMRxS7lHukpiw6jB0MhiCtlJuS9Y&s=SIkwv9Gm-Po8Ne8y1MPr87XAj99Cv5hVbsJTgz_xWdE&e=" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/CMakeLists.txt?rev=243051&r1=243050&r2=243051&view=diff</a><br>
==============================================================================<br>
--- compiler-rt/trunk/lib/sanitizer_common/CMakeLists.txt (original)<br>
+++ compiler-rt/trunk/lib/sanitizer_common/CMakeLists.txt Thu Jul 23 17:05:20 2015<br>
@@ -33,6 +33,12 @@ set(SANITIZER_SOURCES<br>
   sanitizer_thread_registry.cc<br>
   sanitizer_win.cc)<br>
<br>
+# Libc functions stubs. These sources should be linked instead of<br>
+# SANITIZER_LIBCDEP_SOURCES when sanitizer_common library must not depend on<br>
+# libc.<br>
+set(SANITIZER_NOLIBC_SOURCES<br>
+  sanitizer_common_nolibc.cc)<br>
+<br>
 set(SANITIZER_LIBCDEP_SOURCES<br>
   sanitizer_common_libcdep.cc<br>
   sanitizer_coverage_libcdep.cc<br>
@@ -145,6 +151,10 @@ else()<br>
     ARCHS ${SANITIZER_COMMON_SUPPORTED_ARCH}<br>
     SOURCES ${SANITIZER_SOURCES} CFLAGS ${SANITIZER_CFLAGS}<br>
     DEFS ${SANITIZER_COMMON_DEFINITIONS})<br>
+  add_compiler_rt_object_libraries(RTSanitizerCommonNoLibc<br>
+    ARCHS ${SANITIZER_COMMON_SUPPORTED_ARCH}<br>
+    SOURCES ${SANITIZER_NOLIBC_SOURCES} CFLAGS ${SANITIZER_CFLAGS}<br>
+    DEFS ${SANITIZER_COMMON_DEFINITIONS})<br>
   add_compiler_rt_object_libraries(RTSanitizerCommonLibc<br>
     ARCHS ${SANITIZER_COMMON_SUPPORTED_ARCH}<br>
     SOURCES ${SANITIZER_LIBCDEP_SOURCES} CFLAGS ${SANITIZER_CFLAGS}<br>
<br>
Modified: compiler-rt/trunk/lib/sanitizer_common/Makefile.mk<br>
URL: <a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject_compiler-2Drt_trunk_lib_sanitizer-5Fcommon_Makefile.mk-3Frev-3D243051-26r1-3D243050-26r2-3D243051-26view-3Ddiff&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=wS0xG9s1ZEIo6IIOMRxS7lHukpiw6jB0MhiCtlJuS9Y&s=6Ah-bAWJ35Zpge5p6UN26H1f7FnqhQO49PuOhkwQwcE&e=" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/Makefile.mk?rev=243051&r1=243050&r2=243051&view=diff</a><br>
==============================================================================<br>
--- compiler-rt/trunk/lib/sanitizer_common/Makefile.mk (original)<br>
+++ compiler-rt/trunk/lib/sanitizer_common/Makefile.mk Thu Jul 23 17:05:20 2015<br>
@@ -11,6 +11,7 @@ ModuleName := sanitizer_common<br>
 SubDirs :=<br>
<br>
 Sources := $(foreach file,$(wildcard $(Dir)/*.cc),$(notdir $(file)))<br>
+Sources := $(filter-out $(wildcard $(Dir)/*_nolibc.cc),$(Sources))<br>
 ObjNames := $(Sources:%.cc=%.o)<br>
<br>
 Implementation := Generic<br>
<br>
Modified: compiler-rt/trunk/lib/sanitizer_common/sanitizer_common.h<br>
URL: <a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject_compiler-2Drt_trunk_lib_sanitizer-5Fcommon_sanitizer-5Fcommon.h-3Frev-3D243051-26r1-3D243050-26r2-3D243051-26view-3Ddiff&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=wS0xG9s1ZEIo6IIOMRxS7lHukpiw6jB0MhiCtlJuS9Y&s=qG5wgl1rpQygSjJVskdA6wI5CsCLxBTkquBn8A0gulY&e=" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_common.h?rev=243051&r1=243050&r2=243051&view=diff</a><br>
==============================================================================<br>
--- compiler-rt/trunk/lib/sanitizer_common/sanitizer_common.h (original)<br>
+++ compiler-rt/trunk/lib/sanitizer_common/sanitizer_common.h Thu Jul 23 17:05:20 2015<br>
@@ -628,15 +628,20 @@ enum AndroidApiLevel {<br>
   ANDROID_POST_LOLLIPOP = 23<br>
 };<br>
<br>
-#if SANITIZER_ANDROID<br>
+#if SANITIZER_LINUX<br>
 // Initialize Android logging. Any writes before this are silently lost.<br>
 void AndroidLogInit();<br>
-void AndroidLogWrite(const char *buffer);<br>
+void WriteToSyslog(const char *buffer);<br>
+#else<br>
+INLINE void AndroidLogInit() {}<br>
+INLINE void WriteToSyslog(const char *buffer) {}<br>
+#endif<br>
+<br>
+#if SANITIZER_ANDROID<br>
 void GetExtraActivationFlags(char *buf, uptr size);<br>
 void SanitizerInitializeUnwinder();<br>
 AndroidApiLevel AndroidGetApiLevel();<br>
 #else<br>
-INLINE void AndroidLogInit() {}<br>
 INLINE void AndroidLogWrite(const char *buffer_unused) {}<br>
 INLINE void GetExtraActivationFlags(char *buf, uptr size) { *buf = '\0'; }<br>
 INLINE void SanitizerInitializeUnwinder() {}<br>
<br>
Added: compiler-rt/trunk/lib/sanitizer_common/sanitizer_common_nolibc.cc<br>
URL: <a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject_compiler-2Drt_trunk_lib_sanitizer-5Fcommon_sanitizer-5Fcommon-5Fnolibc.cc-3Frev-3D243051-26view-3Dauto&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=wS0xG9s1ZEIo6IIOMRxS7lHukpiw6jB0MhiCtlJuS9Y&s=zHpsZbigVrTbelCOtSAA0MiQBbHWodcfUVkMZ5yqSjc&e=" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_common_nolibc.cc?rev=243051&view=auto</a><br>
==============================================================================<br>
--- compiler-rt/trunk/lib/sanitizer_common/sanitizer_common_nolibc.cc (added)<br>
+++ compiler-rt/trunk/lib/sanitizer_common/sanitizer_common_nolibc.cc Thu Jul 23 17:05:20 2015<br>
@@ -0,0 +1,21 @@<br>
+//===-- sanitizer_common_nolibc.cc ----------------------------------------===//<br>
+//<br>
+//                     The LLVM Compiler Infrastructure<br>
+//<br>
+// This file is distributed under the University of Illinois Open Source<br>
+// License. See LICENSE.TXT for details.<br>
+//<br>
+//===----------------------------------------------------------------------===//<br>
+//<br>
+// This file contains stubs for libc function to facilitate optional use of<br>
+// libc in no-libcdep sources.<br>
+//===----------------------------------------------------------------------===//<br>
+<br>
+#include "sanitizer_platform.h"<br>
+#include "sanitizer_common.h"<br>
+<br>
+namespace __sanitizer {<br>
+<br>
+void WriteToSyslog(const char *buffer) {}<br>
+<br>
+}<br>
<br>
Modified: compiler-rt/trunk/lib/sanitizer_common/sanitizer_flags.inc<br>
URL: <a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject_compiler-2Drt_trunk_lib_sanitizer-5Fcommon_sanitizer-5Fflags.inc-3Frev-3D243051-26r1-3D243050-26r2-3D243051-26view-3Ddiff&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=wS0xG9s1ZEIo6IIOMRxS7lHukpiw6jB0MhiCtlJuS9Y&s=NL6SJOVA-J0-8TH5U5VT_-DOR_HnGilqnpkk9vrC5rU&e=" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_flags.inc?rev=243051&r1=243050&r2=243051&view=diff</a><br>
==============================================================================<br>
--- compiler-rt/trunk/lib/sanitizer_common/sanitizer_flags.inc (original)<br>
+++ compiler-rt/trunk/lib/sanitizer_common/sanitizer_flags.inc Thu Jul 23 17:05:20 2015<br>
@@ -55,6 +55,10 @@ COMMON_FLAG(<br>
     "Mention name of executable when reporting error and "<br>
     "append executable name to logs (as in \"log_path.exe_name.pid\").")<br>
 COMMON_FLAG(<br>
+    bool, log_to_syslog, SANITIZER_ANDROID,<br>
+    "Write all sanitizer output to syslog in addition to other means of "<br>
+    "logging.")<br>
+COMMON_FLAG(<br>
     int, verbosity, 0,<br>
     "Verbosity level (0 - silent, 1 - a bit of output, 2+ - more output).")<br>
 COMMON_FLAG(bool, detect_leaks, true, "Enable memory leak detection.")<br>
<br>
Modified: compiler-rt/trunk/lib/sanitizer_common/sanitizer_linux.cc<br>
URL: <a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject_compiler-2Drt_trunk_lib_sanitizer-5Fcommon_sanitizer-5Flinux.cc-3Frev-3D243051-26r1-3D243050-26r2-3D243051-26view-3Ddiff&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=wS0xG9s1ZEIo6IIOMRxS7lHukpiw6jB0MhiCtlJuS9Y&s=9bAUGK0dWxND_ORIIGvgoVqJhGPnLs16WREAEBmCaBk&e=" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_linux.cc?rev=243051&r1=243050&r2=243051&view=diff</a><br>
==============================================================================<br>
--- compiler-rt/trunk/lib/sanitizer_common/sanitizer_linux.cc (original)<br>
+++ compiler-rt/trunk/lib/sanitizer_common/sanitizer_linux.cc Thu Jul 23 17:05:20 2015<br>
@@ -15,7 +15,6 @@<br>
 #include "sanitizer_platform.h"<br>
 #if SANITIZER_FREEBSD || SANITIZER_LINUX<br>
<br>
-#include "sanitizer_allocator_internal.h"<br>
 #include "sanitizer_common.h"<br>
 #include "sanitizer_flags.h"<br>
 #include "sanitizer_internal_defs.h"<br>
@@ -75,7 +74,6 @@ extern char **environ;  // provided by c<br>
 #endif<br>
<br>
 #if SANITIZER_ANDROID<br>
-#include <android/log.h><br>
 #include <sys/system_properties.h><br>
 #endif<br>
<br>
@@ -920,33 +918,6 @@ uptr internal_clone(int (*fn)(void *), v<br>
 #endif  // defined(__x86_64__) && SANITIZER_LINUX<br>
<br>
 #if SANITIZER_ANDROID<br>
-static atomic_uint8_t android_log_initialized;<br>
-<br>
-void AndroidLogInit() {<br>
-  atomic_store(&android_log_initialized, 1, memory_order_release);<br>
-}<br>
-// This thing is not, strictly speaking, async signal safe, but it does not seem<br>
-// to cause any issues. Alternative is writing to log devices directly, but<br>
-// their location and message format might change in the future, so we'd really<br>
-// like to avoid that.<br>
-void AndroidLogWrite(const char *buffer) {<br>
-  if (!atomic_load(&android_log_initialized, memory_order_acquire))<br>
-    return;<br>
-<br>
-  char *copy = internal_strdup(buffer);<br>
-  char *p = copy;<br>
-  char *q;<br>
-  // __android_log_write has an implicit message length limit.<br>
-  // Print one line at a time.<br>
-  do {<br>
-    q = internal_strchr(p, '\n');<br>
-    if (q) *q = '\0';<br>
-    __android_log_write(ANDROID_LOG_INFO, NULL, p);<br>
-    if (q) p = q + 1;<br>
-  } while (q);<br>
-  InternalFree(copy);<br>
-}<br>
-<br>
 void GetExtraActivationFlags(char *buf, uptr size) {<br>
   CHECK(size > PROP_VALUE_MAX);<br>
   __system_property_get("asan.options", buf);<br>
<br>
Modified: compiler-rt/trunk/lib/sanitizer_common/sanitizer_linux_libcdep.cc<br>
URL: <a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject_compiler-2Drt_trunk_lib_sanitizer-5Fcommon_sanitizer-5Flinux-5Flibcdep.cc-3Frev-3D243051-26r1-3D243050-26r2-3D243051-26view-3Ddiff&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=wS0xG9s1ZEIo6IIOMRxS7lHukpiw6jB0MhiCtlJuS9Y&s=k9U8HWnFIKhHTEs88PpsRHICU3WvW1LKPVmYqnm44Y4&e=" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_linux_libcdep.cc?rev=243051&r1=243050&r2=243051&view=diff</a><br>
==============================================================================<br>
--- compiler-rt/trunk/lib/sanitizer_common/sanitizer_linux_libcdep.cc (original)<br>
+++ compiler-rt/trunk/lib/sanitizer_common/sanitizer_linux_libcdep.cc Thu Jul 23 17:05:20 2015<br>
@@ -15,6 +15,7 @@<br>
 #include "sanitizer_platform.h"<br>
 #if SANITIZER_FREEBSD || SANITIZER_LINUX<br>
<br>
+#include "sanitizer_allocator_internal.h"<br>
 #include "sanitizer_atomic.h"<br>
 #include "sanitizer_common.h"<br>
 #include "sanitizer_flags.h"<br>
@@ -47,6 +48,12 @@<br>
 #include <android/api-level.h><br>
 #endif<br>
<br>
+#if SANITIZER_ANDROID && __ANDROID_API__ < 21<br>
+#include <android/log.h><br>
+#else<br>
+#include <syslog.h><br>
+#endif<br>
+<br>
 #if !SANITIZER_ANDROID<br>
 #include <elf.h><br>
 #include <unistd.h><br>
@@ -161,7 +168,7 @@ bool SanitizerGetThreadName(char *name,<br>
 #endif<br>
 }<br>
<br>
-#if !SANITIZER_FREEBSD<br>
+#if !SANITIZER_FREEBSD && !SANITIZER_ANDROID && !SANITIZER_GO<br>
 static uptr g_tls_size;<br>
 #endif<br>
<br>
@@ -198,7 +205,7 @@ void InitTlsSize() {<br>
   size_t tls_align = 0;<br>
   get_tls(&tls_size, &tls_align);<br>
   g_tls_size = tls_size;<br>
-#endif  // !SANITIZER_FREEBSD && !SANITIZER_ANDROID<br>
+#endif  // !SANITIZER_FREEBSD && !SANITIZER_ANDROID && !SANITIZER_GO<br>
 }<br>
<br>
 #if (defined(__x86_64__) || defined(__i386__) || defined(__mips__)) \<br>
@@ -341,7 +348,7 @@ static void GetTls(uptr *addr, uptr *siz<br>
<br>
 #if !SANITIZER_GO<br>
 uptr GetTlsSize() {<br>
-#if SANITIZER_FREEBSD<br>
+#if SANITIZER_FREEBSD || SANITIZER_ANDROID<br>
   uptr addr, size;<br>
   GetTls(&addr, &size);<br>
   return size;<br>
@@ -376,6 +383,7 @@ void GetThreadStackAndTls(bool main, upt<br>
 #endif<br>
 }<br>
<br>
+#if !SANITIZER_GO<br>
 void AdjustStackSize(void *attr_) {<br>
   pthread_attr_t *attr = (pthread_attr_t *)attr_;<br>
   uptr stackaddr = 0;<br>
@@ -400,6 +408,7 @@ void AdjustStackSize(void *attr_) {<br>
     }<br>
   }<br>
 }<br>
+#endif // !SANITIZER_GO<br>
<br>
 # if !SANITIZER_FREEBSD<br>
 typedef ElfW(Phdr) Elf_Phdr;<br>
@@ -510,6 +519,50 @@ uptr GetRSS() {<br>
   return rss * GetPageSizeCached();<br>
 }<br>
<br>
+// 64-bit Android targets don't provide the deprecated __android_log_write.<br>
+// Starting with the L release, syslog() works and is preferable to<br>
+// __android_log_write.<br>
+#if SANITIZER_ANDROID && __ANDROID_API__ < 21<br>
+static atomic_uint8_t android_log_initialized;<br>
+<br>
+void AndroidLogInit() {<br>
+  atomic_store(&android_log_initialized, 1, memory_order_release);<br>
+}<br>
+<br>
+static bool IsSyslogAvailable() {<br>
+  return atomic_load(&android_log_initialized, memory_order_acquire);<br>
+}<br>
+<br>
+static void WriteOneLineToSyslog(const char *s) {<br>
+  __android_log_write(ANDROID_LOG_INFO, NULL, s);<br>
+}<br>
+#else<br>
+void AndroidLogInit() {}<br>
+<br>
+static bool IsSyslogAvailable() { return true; }<br>
+<br>
+static void WriteOneLineToSyslog(const char *s) { syslog(LOG_INFO, "%s", s); }<br>
+#endif<br>
+<br>
+void WriteToSyslog(const char *buffer) {<br>
+  if (!IsSyslogAvailable())<br>
+    return;<br>
+  char *copy = internal_strdup(buffer);<br>
+  char *p = copy;<br>
+  char *q;<br>
+  // syslog, at least on Android, has an implicit message length limit.<br>
+  // Print one line at a time.<br>
+  do {<br>
+    q = internal_strchr(p, '\n');<br>
+    if (q)<br>
+      *q = '\0';<br>
+    WriteOneLineToSyslog(p);<br>
+    if (q)<br>
+      p = q + 1;<br>
+  } while (q);<br>
+  InternalFree(copy);<br>
+}<br>
+<br>
 }  // namespace __sanitizer<br>
<br>
 #endif  // SANITIZER_FREEBSD || SANITIZER_LINUX<br>
<br>
Modified: compiler-rt/trunk/lib/sanitizer_common/sanitizer_posix_libcdep.cc<br>
URL: <a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject_compiler-2Drt_trunk_lib_sanitizer-5Fcommon_sanitizer-5Fposix-5Flibcdep.cc-3Frev-3D243051-26r1-3D243050-26r2-3D243051-26view-3Ddiff&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=wS0xG9s1ZEIo6IIOMRxS7lHukpiw6jB0MhiCtlJuS9Y&s=fc0Vb5dkwHFmIG3IQaaiBTG7jNiKrxLt59WIFUeNTNg&e=" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_posix_libcdep.cc?rev=243051&r1=243050&r2=243051&view=diff</a><br>
==============================================================================<br>
--- compiler-rt/trunk/lib/sanitizer_common/sanitizer_posix_libcdep.cc (original)<br>
+++ compiler-rt/trunk/lib/sanitizer_common/sanitizer_posix_libcdep.cc Thu Jul 23 17:05:20 2015<br>
@@ -30,9 +30,9 @@<br>
 #include <stdlib.h><br>
 #include <sys/mman.h><br>
 #include <sys/resource.h><br>
+#include <sys/stat.h><br>
 #include <sys/time.h><br>
 #include <sys/types.h><br>
-#include <sys/stat.h><br>
 #include <unistd.h><br>
<br>
 #if SANITIZER_FREEBSD<br>
@@ -274,7 +274,6 @@ void *MmapNoAccess(uptr fixed_addr, uptr<br>
   return (void *)internal_mmap((void *)fixed_addr, size, PROT_NONE, flags, fd,<br>
                                0);<br>
 }<br>
-<br>
-}  // namespace __sanitizer<br>
+} // namespace __sanitizer<br>
<br>
 #endif  // SANITIZER_POSIX<br>
<br>
Modified: compiler-rt/trunk/lib/sanitizer_common/sanitizer_printf.cc<br>
URL: <a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject_compiler-2Drt_trunk_lib_sanitizer-5Fcommon_sanitizer-5Fprintf.cc-3Frev-3D243051-26r1-3D243050-26r2-3D243051-26view-3Ddiff&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=wS0xG9s1ZEIo6IIOMRxS7lHukpiw6jB0MhiCtlJuS9Y&s=ZsEqUDhcxzy5GI38Kibg2PaRTnJcGltgiq94-8lC_lM&e=" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_printf.cc?rev=243051&r1=243050&r2=243051&view=diff</a><br>
==============================================================================<br>
--- compiler-rt/trunk/lib/sanitizer_common/sanitizer_printf.cc (original)<br>
+++ compiler-rt/trunk/lib/sanitizer_common/sanitizer_printf.cc Thu Jul 23 17:05:20 2015<br>
@@ -279,7 +279,8 @@ static void SharedPrintfCode(bool append<br>
 #   undef CHECK_NEEDED_LENGTH<br>
   }<br>
   RawWrite(buffer);<br>
-  AndroidLogWrite(buffer);<br>
+  if (common_flags()->log_to_syslog)<br>
+    WriteToSyslog(buffer);<br>
   CallPrintfAndReportCallback(buffer);<br>
   // If we had mapped any memory, clean up.<br>
   if (buffer != local_buffer)<br>
<br>
Modified: compiler-rt/trunk/lib/sanitizer_common/tests/CMakeLists.txt<br>
URL: <a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject_compiler-2Drt_trunk_lib_sanitizer-5Fcommon_tests_CMakeLists.txt-3Frev-3D243051-26r1-3D243050-26r2-3D243051-26view-3Ddiff&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=wS0xG9s1ZEIo6IIOMRxS7lHukpiw6jB0MhiCtlJuS9Y&s=aci2dYOkjc2_mocOMz5CX-k6u_peRYpFqVKFmQKndY8&e=" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/tests/CMakeLists.txt?rev=243051&r1=243050&r2=243051&view=diff</a><br>
==============================================================================<br>
--- compiler-rt/trunk/lib/sanitizer_common/tests/CMakeLists.txt (original)<br>
+++ compiler-rt/trunk/lib/sanitizer_common/tests/CMakeLists.txt Thu Jul 23 17:05:20 2015<br>
@@ -172,7 +172,8 @@ if(COMPILER_RT_CAN_EXECUTE_TESTS AND NOT<br>
   else()<br>
     if(CAN_TARGET_x86_64)<br>
       add_sanitizer_common_lib("RTSanitizerCommon.test.nolibc.x86_64"<br>
-                               $<TARGET_OBJECTS:RTSanitizerCommon.x86_64>)<br>
+                               $<TARGET_OBJECTS:RTSanitizerCommon.x86_64><br>
+                               $<TARGET_OBJECTS:RTSanitizerCommonNoLibc.x86_64>)<br>
     endif()<br>
     foreach(arch ${SANITIZER_UNITTEST_SUPPORTED_ARCH})<br>
       add_sanitizer_common_lib("RTSanitizerCommon.test.${arch}"<br>
<br>
Modified: compiler-rt/trunk/lib/tsan/go/buildgo.sh<br>
URL: <a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject_compiler-2Drt_trunk_lib_tsan_go_buildgo.sh-3Frev-3D243051-26r1-3D243050-26r2-3D243051-26view-3Ddiff&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=wS0xG9s1ZEIo6IIOMRxS7lHukpiw6jB0MhiCtlJuS9Y&s=kXOnJbhMTYdFKgAnZJCmM4XYjB_aabcAKSiVH7mU2fE&e=" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/tsan/go/buildgo.sh?rev=243051&r1=243050&r2=243051&view=diff</a><br>
==============================================================================<br>
--- compiler-rt/trunk/lib/tsan/go/buildgo.sh (original)<br>
+++ compiler-rt/trunk/lib/tsan/go/buildgo.sh Thu Jul 23 17:05:20 2015<br>
@@ -45,6 +45,7 @@ if [ "`uname -a | grep Linux`" != "" ];<br>
                ../../sanitizer_common/sanitizer_procmaps_common.cc<br>
                ../../sanitizer_common/sanitizer_procmaps_linux.cc<br>
                ../../sanitizer_common/sanitizer_linux.cc<br>
+               ../../sanitizer_common/sanitizer_linux_libcdep.cc<br>
                ../../sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cc<br>
        "<br>
 elif [ "`uname -a | grep FreeBSD`" != "" ]; then<br>
<br>
Modified: compiler-rt/trunk/lib/tsan/rtl/Makefile.old<br>
URL: <a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject_compiler-2Drt_trunk_lib_tsan_rtl_Makefile.old-3Frev-3D243051-26r1-3D243050-26r2-3D243051-26view-3Ddiff&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=wS0xG9s1ZEIo6IIOMRxS7lHukpiw6jB0MhiCtlJuS9Y&s=d7hCcxnk5Ya7Mv45Lkn-IlRV10XBCoUeRRSJ4Ipr44A&e=" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/tsan/rtl/Makefile.old?rev=243051&r1=243050&r2=243051&view=diff</a><br>
==============================================================================<br>
--- compiler-rt/trunk/lib/tsan/rtl/Makefile.old (original)<br>
+++ compiler-rt/trunk/lib/tsan/rtl/Makefile.old Thu Jul 23 17:05:20 2015<br>
@@ -35,7 +35,7 @@ LIBTSAN_HEADERS=$(wildcard *.h) \<br>
 LIBTSAN_SRC=$(wildcard *.cc)<br>
 LIBTSAN_ASM_SRC=$(wildcard *.S)<br>
 INTERCEPTION_SRC=$(wildcard $(INTERCEPTION)/*.cc)<br>
-COMMON_SRC=$(wildcard $(COMMON)/*.cc)<br>
+COMMON_SRC=$(filter-out $(wildcard $(COMMON)/*_nolibc.cc),$(wildcard $(COMMON)/*.cc))<br>
<br>
 LIBTSAN_OBJ=$(patsubst %.cc,%.o,$(LIBTSAN_SRC)) \<br>
            $(patsubst %.S,%.o,$(LIBTSAN_ASM_SRC)) \<br>
<br>
<br>
_______________________________________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@cs.uiuc.edu">llvm-commits@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits" rel="noreferrer" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits</a><br>
</blockquote></div><br><br clear="all"><div><br></div>-- <br><div class="gmail_signature"><div dir="ltr">Alexey Samsonov<br><a href="mailto:vonosmas@gmail.com" target="_blank">vonosmas@gmail.com</a></div></div>
</div>