From 0f395b7ba056ccec3915737cfece81ca2161e980 Mon Sep 17 00:00:00 2001 From: Elliott Hughes Date: Tue, 8 Oct 2013 13:19:00 -0700 Subject: [PATCH] Make logging fall back to /dev/stderr if we're on the host. Otherwise you get no logging, which sucks. Change-Id: Iea1e8f996461afbb217a55711b7967005c39cfcb --- libc/bionic/libc_logging.cpp | 25 +++++++++++++++++++++++++ linker/linker_debug.h | 5 ----- 2 files changed, 25 insertions(+), 5 deletions(-) diff --git a/libc/bionic/libc_logging.cpp b/libc/bionic/libc_logging.cpp index 6bf7415d7..635f8d11a 100644 --- a/libc/bionic/libc_logging.cpp +++ b/libc/bionic/libc_logging.cpp @@ -419,9 +419,34 @@ int __libc_format_fd(int fd, const char* format, ...) { return os.total; } +static int __libc_write_stderr(const char* tag, const char* msg) { + int fd = TEMP_FAILURE_RETRY(open("/dev/stderr", O_CLOEXEC | O_WRONLY)); + if (fd == -1) { + return -1; + } + + iovec vec[4]; + vec[0].iov_base = const_cast(tag); + vec[0].iov_len = strlen(tag); + vec[1].iov_base = const_cast(": "); + vec[1].iov_len = 2; + vec[2].iov_base = const_cast(msg); + vec[2].iov_len = strlen(msg) + 1; + vec[3].iov_base = const_cast("\n"); + vec[3].iov_len = 1; + + int result = TEMP_FAILURE_RETRY(writev(fd, vec, 4)); + close(fd); + return result; +} + static int __libc_write_log(int priority, const char* tag, const char* msg) { int main_log_fd = TEMP_FAILURE_RETRY(open("/dev/log/main", O_CLOEXEC | O_WRONLY)); if (main_log_fd == -1) { + if (errno == ENOTDIR) { + // /dev/log isn't a directory? Maybe we're running on the host? Try stderr instead. + return __libc_write_stderr(tag, msg); + } return -1; } diff --git a/linker/linker_debug.h b/linker/linker_debug.h index 7d2485342..2bf6cec22 100644 --- a/linker/linker_debug.h +++ b/linker/linker_debug.h @@ -29,8 +29,6 @@ #ifndef _LINKER_DEBUG_H_ #define _LINKER_DEBUG_H_ -#include - // You can increase the verbosity of debug traces by defining the LD_DEBUG // environment variable to a numeric value from 0 to 2 (corresponding to // INFO, TRACE, and DEBUG calls in the source). This will only @@ -55,9 +53,6 @@ * To enable/disable specific debug options, change the defines above *********************************************************************/ - -/*********************************************************************/ - #include "private/libc_logging.h" __LIBC_HIDDEN__ extern int gLdDebugVerbosity;