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;