summaryrefslogtreecommitdiffstats
path: root/chrome/app/breakpad_linuxish.cc
diff options
context:
space:
mode:
authorthestig@chromium.org <thestig@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-04-24 20:33:29 +0000
committerthestig@chromium.org <thestig@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-04-24 20:33:29 +0000
commita388369d947de7f2562cd66781af8aa40c704bea (patch)
treeb109b9699cd0992d12c7226508d35634b37ca809 /chrome/app/breakpad_linuxish.cc
parent2b2ea8b59cdf704aa4b1606318bb990507492148 (diff)
downloadchromium_src-a388369d947de7f2562cd66781af8aa40c704bea.zip
chromium_src-a388369d947de7f2562cd66781af8aa40c704bea.tar.gz
chromium_src-a388369d947de7f2562cd66781af8aa40c704bea.tar.bz2
Linux: Clean up Breakpad code after r131662.
BUG=none TEST=none Review URL: http://codereview.chromium.org/10205008 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@133756 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/app/breakpad_linuxish.cc')
-rw-r--r--chrome/app/breakpad_linuxish.cc114
1 files changed, 63 insertions, 51 deletions
diff --git a/chrome/app/breakpad_linuxish.cc b/chrome/app/breakpad_linuxish.cc
index f058ee1..a9a7211 100644
--- a/chrome/app/breakpad_linuxish.cc
+++ b/chrome/app/breakpad_linuxish.cc
@@ -46,13 +46,22 @@
#if defined(OS_ANDROID)
#include <android/log.h>
#include <sys/stat.h>
-#include "base/android/path_utils.h"
+
#include "base/android/build_info.h"
+#include "base/android/path_utils.h"
#include "third_party/lss/linux_syscall_support.h"
#else
#include "seccompsandbox/linux_syscall_support.h"
#endif
+#if defined(OS_ANDROID)
+#define STAT_STRUCT struct stat
+#define FSTAT_FUNC fstat
+#else
+#define STAT_STRUCT struct kernel_stat
+#define FSTAT_FUNC sys_fstat
+#endif
+
#ifndef PR_SET_PTRACER
#define PR_SET_PTRACER 0x59616d61
#endif
@@ -144,8 +153,8 @@ static char* my_strncpy(char* dst, const char* src, size_t len) {
return dst;
}
-static char* my_strncat(char *dest, const char *src, size_t len) {
- char *ret = dest;
+static char* my_strncat(char *dest, const char* src, size_t len) {
+ char* ret = dest;
while (*dest)
dest++;
while (len--)
@@ -159,13 +168,12 @@ static char* my_strncat(char *dest, const char *src, size_t len) {
namespace {
// MIME substrings.
-static const char g_rn[] = "\r\n";
-static const char g_form_data_msg[] = "Content-Disposition: form-data; name=\"";
-static const char g_quote_msg[] = "\"";
-static const char g_dashdash_msg[] = "--";
-static const char g_dump_msg[] = "upload_file_minidump\"; filename=\"dump\"";
-static const char g_content_type_msg[] =
- "Content-Type: application/octet-stream";
+const char g_rn[] = "\r\n";
+const char g_form_data_msg[] = "Content-Disposition: form-data; name=\"";
+const char g_quote_msg[] = "\"";
+const char g_dashdash_msg[] = "--";
+const char g_dump_msg[] = "upload_file_minidump\"; filename=\"dump\"";
+const char g_content_type_msg[] = "Content-Type: application/octet-stream";
// MimeWriter manages an iovec for writing MIMEs to a file.
class MimeWriter {
@@ -343,9 +351,11 @@ void DumpProcess() {
g_breakpad->WriteMinidump();
}
+const char kGoogleBreakpad[] = "google-breakpad";
+
size_t WriteLog(const char* buf, size_t nbytes) {
#if defined(OS_ANDROID)
- return __android_log_write(ANDROID_LOG_WARN, "google-breakpad", buf);
+ return __android_log_write(ANDROID_LOG_WARN, kGoogleBreakpad, buf);
#else
return sys_write(2, buf, nbytes);
#endif
@@ -363,13 +373,8 @@ void HandleCrashDump(const BreakpadInfo& info) {
WriteLog(msg, sizeof(msg));
return;
}
-#if defined(OS_ANDROID)
- struct stat st;
- if (fstat(dumpfd, &st) != 0) {
-#else
- struct kernel_stat st;
- if (sys_fstat(dumpfd, &st) != 0) {
-#endif
+ STAT_STRUCT st;
+ if (FSTAT_FUNC(dumpfd, &st) != 0) {
static const char msg[] = "Cannot upload crash dump: stat failed\n";
WriteLog(msg, sizeof(msg));
IGNORE_RET(sys_close(dumpfd));
@@ -540,11 +545,6 @@ void HandleCrashDump(const BreakpadInfo& info) {
base::android::BuildInfo::GetInstance();
static const char* version_msg =
android_build_info->package_version_code();
- static const char android_build_id[] = "android_build_id";
- static const char android_build_fp[] = "android_build_fp";
- static const char device[] = "device";
- static const char model[] = "model";
- static const char brand[] = "brand";
#else
static const char version_msg[] = PRODUCT_VERSION;
#endif
@@ -557,14 +557,20 @@ void HandleCrashDump(const BreakpadInfo& info) {
writer.AddPairString("guid", info.guid);
writer.AddBoundary();
if (info.pid > 0) {
+ char pid_buf[kUint64StringSize];
uint64_t pid_str_len = my_uint64_len(info.pid);
- char* pid_buf = reinterpret_cast<char*>(allocator.Alloc(pid_str_len));
my_uint64tos(pid_buf, info.pid, pid_str_len);
writer.AddPairString("pid", pid_buf);
writer.AddBoundary();
}
#if defined(OS_ANDROID)
// Addtional MIME blocks are added for logging on Android devices.
+ static const char android_build_id[] = "android_build_id";
+ static const char android_build_fp[] = "android_build_fp";
+ static const char device[] = "device";
+ static const char model[] = "model";
+ static const char brand[] = "brand";
+
writer.AddPairString(
android_build_id, android_build_info->android_build_id());
writer.AddBoundary();
@@ -725,17 +731,19 @@ void HandleCrashDump(const BreakpadInfo& info) {
writer.Flush();
IGNORE_RET(sys_close(temp_file_fd));
+
#if defined(OS_ANDROID)
+ __android_log_write(ANDROID_LOG_WARN,
+ kGoogleBreakpad,
+ "Output crash dump file:");
+ __android_log_write(ANDROID_LOG_WARN, kGoogleBreakpad, info.filename);
+
+ char pid_buf[kUint64StringSize];
uint64_t pid_str_len = my_uint64_len(info.pid);
- char* pid_buf = reinterpret_cast<char*>(allocator.Alloc(pid_str_len));
my_uint64tos(pid_buf, info.pid, pid_str_len);
- static const char* output_msg = "Output crash dump file:";
- WriteLog(output_msg, my_strlen(output_msg));
- unsigned filename_len = my_strlen(info.filename);
- WriteLog(info.filename, filename_len);
// -1 because we won't need the null terminator on the original filename.
- size_t done_filename_len = filename_len - 1 + pid_str_len;
+ size_t done_filename_len = my_strlen(info.filename) + pid_str_len - 1;
char* done_filename = reinterpret_cast<char*>(
allocator.Alloc(done_filename_len));
// Rename the file such that the pid is the suffix in order to signal other
@@ -749,10 +757,10 @@ void HandleCrashDump(const BreakpadInfo& info) {
my_strncat(done_filename, pid_buf, pid_str_len);
// Rename the minidump file to signal that it is complete.
if (rename(info.filename, done_filename)) {
- __android_log_write(ANDROID_LOG_WARN, "chromium", "Failed to rename:");
- __android_log_write(ANDROID_LOG_WARN, "chromium", info.filename);
- __android_log_write(ANDROID_LOG_WARN, "chromium", "to");
- __android_log_write(ANDROID_LOG_WARN, "chromium", done_filename);
+ __android_log_write(ANDROID_LOG_WARN, kGoogleBreakpad, "Failed to rename:");
+ __android_log_write(ANDROID_LOG_WARN, kGoogleBreakpad, info.filename);
+ __android_log_write(ANDROID_LOG_WARN, kGoogleBreakpad, "to");
+ __android_log_write(ANDROID_LOG_WARN, kGoogleBreakpad, done_filename);
}
#endif
@@ -820,7 +828,7 @@ void HandleCrashDump(const BreakpadInfo& info) {
// Wget process.
IGNORE_RET(sys_close(fds[0]));
IGNORE_RET(sys_dup2(fds[1], 3));
- static const char* const kWgetBinary = "/usr/bin/wget";
+ static const char kWgetBinary[] = "/usr/bin/wget";
const char* args[] = {
kWgetBinary,
header,
@@ -950,23 +958,23 @@ static bool CrashDone(const char* dump_path,
// Wrapper function, do not add more code here.
static bool CrashDoneNoUpload(const char* dump_path,
- const char* minidump_id,
- void* context,
- bool succeeded) {
+ const char* minidump_id,
+ void* context,
+ bool succeeded) {
return CrashDone(dump_path, minidump_id, false, succeeded);
}
#if !defined(OS_ANDROID)
// Wrapper function, do not add more code here.
static bool CrashDoneUpload(const char* dump_path,
- const char* minidump_id,
- void* context,
- bool succeeded) {
+ const char* minidump_id,
+ void* context,
+ bool succeeded) {
return CrashDone(dump_path, minidump_id, true, succeeded);
}
#endif
-void EnableCrashDumping(bool unattended) {
+static void EnableCrashDumping(bool unattended) {
g_is_crash_reporter_enabled = true;
FilePath tmp_path("/tmp");
@@ -983,7 +991,7 @@ void EnableCrashDumping(bool unattended) {
}
DCHECK(!g_breakpad);
#if defined(OS_ANDROID)
- unattended = true;
+ unattended = true; // Android never uploads directly.
#endif
if (unattended) {
g_breakpad = new google_breakpad::ExceptionHandler(
@@ -992,14 +1000,18 @@ void EnableCrashDumping(bool unattended) {
CrashDoneNoUpload,
NULL,
true /* install handlers */);
- } else {
- g_breakpad = new google_breakpad::ExceptionHandler(
- tmp_path.value().c_str(),
- NULL,
- CrashDoneUpload,
- NULL,
- true /* install handlers */);
+ return;
}
+
+#if !defined(OS_ANDROID)
+ // Attended mode
+ g_breakpad = new google_breakpad::ExceptionHandler(
+ tmp_path.value().c_str(),
+ NULL,
+ CrashDoneUpload,
+ NULL,
+ true /* install handlers */);
+#endif
}
// Non-Browser = Extension, Gpu, Plugins, Ppapi and Renderer
@@ -1101,7 +1113,7 @@ static bool NonBrowserCrashHandler(const void* crash_context,
return true;
}
-void EnableNonBrowserCrashDumping() {
+static void EnableNonBrowserCrashDumping() {
const int fd = base::GlobalDescriptors::GetInstance()->Get(kCrashDumpSignal);
g_is_crash_reporter_enabled = true;
// We deliberately leak this object.