diff --git a/libc/bionic/libc_logging.cpp b/libc/bionic/libc_logging.cpp index 8966a5f5e..8b3d3f1fc 100644 --- a/libc/bionic/libc_logging.cpp +++ b/libc/bionic/libc_logging.cpp @@ -619,7 +619,8 @@ static void __libc_fatal(const char* format, va_list args) { BufferOutputStream os(msg, sizeof(msg)); out_vformat(os, format, args); - // TODO: log to stderr for the benefit of "adb shell" users. + // log to stderr for the benefit of "adb shell" users. + write(2, msg, strlen(msg)); // Log to the log for the benefit of regular app developers (whose stdout and stderr are closed). __libc_write_log(ANDROID_LOG_FATAL, "libc", msg); diff --git a/linker/linker.cpp b/linker/linker.cpp index 442f7cede..bf923c197 100644 --- a/linker/linker.cpp +++ b/linker/linker.cpp @@ -168,10 +168,7 @@ static unsigned bitmask[4096]; #define DISALLOW_ALLOCATION(return_type, name, ...) \ return_type name __VA_ARGS__ \ { \ - const char* msg = "ERROR: " #name " called from the dynamic linker!\n"; \ - __libc_format_log(ANDROID_LOG_FATAL, "linker", "%s", msg); \ - write(2, msg, strlen(msg)); \ - abort(); \ + __libc_fatal("ERROR: " #name " called from the dynamic linker!\n"); \ } DISALLOW_ALLOCATION(void*, malloc, (size_t u __unused)); DISALLOW_ALLOCATION(void, free, (void* u __unused)); @@ -467,10 +464,8 @@ static ElfW(Sym)* soinfo_elf_lookup(soinfo* si, unsigned hash, const char* name, static_cast(s->st_size)); return s; default: - const char* msg = "FATAL: Unexpected ST_BIND\n"; - __libc_format_log(ANDROID_LOG_FATAL, "linker", "%s", msg); - write(2, msg, strlen(msg)); - abort(); + __libc_fatal("ERROR: Unexpected ST_BIND value: %d for '%s' in '%s'", + ELF_ST_BIND(s->st_info), name, si->name); } }