diff options
author | Pavel Chupin <pavel.v.chupin@intel.com> | 2013-11-21 23:17:20 +0400 |
---|---|---|
committer | Elliott Hughes <enh@google.com> | 2014-01-30 17:15:24 -0800 |
commit | c6c194ced095df5e777b8fa24527ebd29c8fef54 (patch) | |
tree | e8c2872d11d30743d38f915b90ce394d2773ccf2 /debuggerd/utility.cpp | |
parent | e97dad0d95ae1305686bf4294029da947fc2dcf2 (diff) | |
download | system_core-c6c194ced095df5e777b8fa24527ebd29c8fef54.zip system_core-c6c194ced095df5e777b8fa24527ebd29c8fef54.tar.gz system_core-c6c194ced095df5e777b8fa24527ebd29c8fef54.tar.bz2 |
LP64: Enable debuggerd/libbacktrace/libunwind.
Change-Id: I2e432839f86c33c2adbaac8cc12ca8961956044b
Signed-off-by: Pavel Chupin <pavel.v.chupin@intel.com>
Diffstat (limited to 'debuggerd/utility.cpp')
-rw-r--r-- | debuggerd/utility.cpp | 47 |
1 files changed, 19 insertions, 28 deletions
diff --git a/debuggerd/utility.cpp b/debuggerd/utility.cpp index 100324a..9b20914 100644 --- a/debuggerd/utility.cpp +++ b/debuggerd/utility.cpp @@ -14,19 +14,17 @@ * limitations under the License. */ -#include <stddef.h> -#include <stdio.h> -#include <string.h> +#include "utility.h" + #include <errno.h> -#include <unistd.h> #include <signal.h> -#include <log/logd.h> +#include <string.h> +#include <unistd.h> #include <sys/ptrace.h> #include <sys/wait.h> -#include <arpa/inet.h> -#include <assert.h> -#include "utility.h" +#include <backtrace/Backtrace.h> +#include <log/logd.h> const int sleep_time_usec = 50000; // 0.05 seconds const int max_total_sleep_usec = 10000000; // 10 seconds @@ -34,7 +32,7 @@ const int max_total_sleep_usec = 10000000; // 10 seconds static int write_to_am(int fd, const char* buf, int len) { int to_write = len; while (to_write > 0) { - int written = TEMP_FAILURE_RETRY( write(fd, buf + len - to_write, to_write) ); + int written = TEMP_FAILURE_RETRY(write(fd, buf + len - to_write, to_write)); if (written < 0) { // hard failure LOG("AM write failure (%d / %s)\n", errno, strerror(errno)); @@ -46,34 +44,28 @@ static int write_to_am(int fd, const char* buf, int len) { } void _LOG(log_t* log, int scopeFlags, const char* fmt, ...) { - char buf[512]; - bool want_tfd_write; - bool want_log_write; - bool want_amfd_write; - int len = 0; + bool want_tfd_write = log && log->tfd >= 0; + bool want_log_write = IS_AT_FAULT(scopeFlags) && (!log || !log->quiet); + bool want_amfd_write = IS_AT_FAULT(scopeFlags) && !IS_SENSITIVE(scopeFlags) && log && log->amfd >= 0; + char buf[512]; va_list ap; va_start(ap, fmt); + vsnprintf(buf, sizeof(buf), fmt, ap); + va_end(ap); - // where is the information going to go? - want_tfd_write = log && log->tfd >= 0; - want_log_write = IS_AT_FAULT(scopeFlags) && (!log || !log->quiet); - want_amfd_write = IS_AT_FAULT(scopeFlags) && !IS_SENSITIVE(scopeFlags) && log && log->amfd >= 0; - - // if we're going to need the literal string, generate it once here - if (want_tfd_write || want_amfd_write) { - vsnprintf(buf, sizeof(buf), fmt, ap); - len = strlen(buf); + size_t len = strlen(buf); + if (len <= 0) { + return; } if (want_tfd_write) { - write(log->tfd, buf, len); + TEMP_FAILURE_RETRY(write(log->tfd, buf, len)); } if (want_log_write) { - // whatever goes to logcat also goes to the Activity Manager - __android_log_vprint(ANDROID_LOG_INFO, "DEBUG", fmt, ap); - if (want_amfd_write && len > 0) { + __android_log_write(ANDROID_LOG_INFO, "DEBUG", buf); + if (want_amfd_write) { int written = write_to_am(log->amfd, buf, len); if (written <= 0) { // timeout or other failure on write; stop informing the activity manager @@ -81,7 +73,6 @@ void _LOG(log_t* log, int scopeFlags, const char* fmt, ...) { } } } - va_end(ap); } int wait_for_signal(pid_t tid, int* total_sleep_time_usec) { |