aboutsummaryrefslogtreecommitdiff
path: root/src/client/linux/handler
diff options
context:
space:
mode:
Diffstat (limited to 'src/client/linux/handler')
-rw-r--r--src/client/linux/handler/exception_handler.cc3
-rw-r--r--src/client/linux/handler/microdump_extra_info.h48
-rw-r--r--src/client/linux/handler/minidump_descriptor.cc17
-rw-r--r--src/client/linux/handler/minidump_descriptor.h56
4 files changed, 73 insertions, 51 deletions
diff --git a/src/client/linux/handler/exception_handler.cc b/src/client/linux/handler/exception_handler.cc
index 5bd2d8cc..148d61f9 100644
--- a/src/client/linux/handler/exception_handler.cc
+++ b/src/client/linux/handler/exception_handler.cc
@@ -592,8 +592,7 @@ bool ExceptionHandler::DoDump(pid_t crashing_process, const void* context,
context,
context_size,
mapping_list_,
- minidump_descriptor_.microdump_build_fingerprint(),
- minidump_descriptor_.microdump_product_info());
+ *minidump_descriptor_.microdump_extra_info());
}
if (minidump_descriptor_.IsFD()) {
return google_breakpad::WriteMinidump(minidump_descriptor_.fd(),
diff --git a/src/client/linux/handler/microdump_extra_info.h b/src/client/linux/handler/microdump_extra_info.h
new file mode 100644
index 00000000..b9c3d30d
--- /dev/null
+++ b/src/client/linux/handler/microdump_extra_info.h
@@ -0,0 +1,48 @@
+// Copyright 2015 Google Inc.
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+// * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+// * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+#ifndef CLIENT_LINUX_HANDLER_MICRODUMP_EXTRA_INFO_H_
+#define CLIENT_LINUX_HANDLER_MICRODUMP_EXTRA_INFO_H_
+
+namespace google_breakpad {
+
+struct MicrodumpExtraInfo {
+ // Strings pointed to by this struct are not copied, and are
+ // expected to remain valid for the lifetime of the process.
+ const char* build_fingerprint;
+ const char* product_info;
+ const char* gpu_fingerprint;
+
+ MicrodumpExtraInfo()
+ : build_fingerprint(NULL), product_info(NULL), gpu_fingerprint(NULL) {}
+};
+
+}
+
+#endif // CLIENT_LINUX_HANDLER_MICRODUMP_EXTRA_INFO_H_
diff --git a/src/client/linux/handler/minidump_descriptor.cc b/src/client/linux/handler/minidump_descriptor.cc
index c601d35f..ce09153d 100644
--- a/src/client/linux/handler/minidump_descriptor.cc
+++ b/src/client/linux/handler/minidump_descriptor.cc
@@ -45,8 +45,7 @@ MinidumpDescriptor::MinidumpDescriptor(const MinidumpDescriptor& descriptor)
directory_(descriptor.directory_),
c_path_(NULL),
size_limit_(descriptor.size_limit_),
- microdump_build_fingerprint_(descriptor.microdump_build_fingerprint_),
- microdump_product_info_(descriptor.microdump_product_info_) {
+ microdump_extra_info_(descriptor.microdump_extra_info_) {
// The copy constructor is not allowed to be called on a MinidumpDescriptor
// with a valid path_, as getting its c_path_ would require the heap which
// can cause problems in compromised environments.
@@ -67,8 +66,7 @@ MinidumpDescriptor& MinidumpDescriptor::operator=(
UpdatePath();
}
size_limit_ = descriptor.size_limit_;
- microdump_build_fingerprint_ = descriptor.microdump_build_fingerprint_;
- microdump_product_info_ = descriptor.microdump_product_info_;
+ microdump_extra_info_ = descriptor.microdump_extra_info_;
return *this;
}
@@ -86,15 +84,4 @@ void MinidumpDescriptor::UpdatePath() {
c_path_ = path_.c_str();
}
-void MinidumpDescriptor::SetMicrodumpBuildFingerprint(
- const char* build_fingerprint) {
- assert(mode_ == kWriteMicrodumpToConsole);
- microdump_build_fingerprint_ = build_fingerprint;
-}
-
-void MinidumpDescriptor::SetMicrodumpProductInfo(const char* product_info) {
- assert(mode_ == kWriteMicrodumpToConsole);
- microdump_product_info_ = product_info;
-}
-
} // namespace google_breakpad
diff --git a/src/client/linux/handler/minidump_descriptor.h b/src/client/linux/handler/minidump_descriptor.h
index 3584c692..782a60a4 100644
--- a/src/client/linux/handler/minidump_descriptor.h
+++ b/src/client/linux/handler/minidump_descriptor.h
@@ -35,6 +35,7 @@
#include <string>
+#include "client/linux/handler/microdump_extra_info.h"
#include "common/using_std_string.h"
// This class describes how a crash dump should be generated, either:
@@ -49,20 +50,17 @@ class MinidumpDescriptor {
struct MicrodumpOnConsole {};
static const MicrodumpOnConsole kMicrodumpOnConsole;
- MinidumpDescriptor() : mode_(kUninitialized),
- fd_(-1),
- size_limit_(-1),
- microdump_build_fingerprint_(NULL),
- microdump_product_info_(NULL) {}
+ MinidumpDescriptor()
+ : mode_(kUninitialized),
+ fd_(-1),
+ size_limit_(-1) {}
explicit MinidumpDescriptor(const string& directory)
: mode_(kWriteMinidumpToFile),
fd_(-1),
directory_(directory),
c_path_(NULL),
- size_limit_(-1),
- microdump_build_fingerprint_(NULL),
- microdump_product_info_(NULL) {
+ size_limit_(-1) {
assert(!directory.empty());
}
@@ -70,18 +68,14 @@ class MinidumpDescriptor {
: mode_(kWriteMinidumpToFd),
fd_(fd),
c_path_(NULL),
- size_limit_(-1),
- microdump_build_fingerprint_(NULL),
- microdump_product_info_(NULL) {
+ size_limit_(-1) {
assert(fd != -1);
}
explicit MinidumpDescriptor(const MicrodumpOnConsole&)
: mode_(kWriteMicrodumpToConsole),
fd_(-1),
- size_limit_(-1),
- microdump_build_fingerprint_(NULL),
- microdump_product_info_(NULL) {}
+ size_limit_(-1) {}
explicit MinidumpDescriptor(const MinidumpDescriptor& descriptor);
MinidumpDescriptor& operator=(const MinidumpDescriptor& descriptor);
@@ -107,17 +101,10 @@ class MinidumpDescriptor {
off_t size_limit() const { return size_limit_; }
void set_size_limit(off_t limit) { size_limit_ = limit; }
- // TODO(primiano): make this and product info (below) just part of the
- // microdump ctor once it is rolled stably into Chrome. ETA: June 2015.
- void SetMicrodumpBuildFingerprint(const char* build_fingerprint);
- const char* microdump_build_fingerprint() const {
- return microdump_build_fingerprint_;
- }
-
- void SetMicrodumpProductInfo(const char* product_info);
- const char* microdump_product_info() const {
- return microdump_product_info_;
- }
+ MicrodumpExtraInfo* microdump_extra_info() {
+ assert(IsMicrodumpOnConsole());
+ return &microdump_extra_info_;
+ };
private:
enum DumpMode {
@@ -145,15 +132,16 @@ class MinidumpDescriptor {
off_t size_limit_;
- // The product name/version and build fingerprint that should be appended to
- // the dump (microdump only). Microdumps don't have the ability of appending
- // extra metadata after the dump is generated (as opposite to minidumps
- // MIME fields), therefore the product details must be provided upfront.
- // The string pointers are supposed to be valid through all the lifetime of
- // the process (read: the caller has to guarantee that they are stored in
- // global static storage).
- const char* microdump_build_fingerprint_;
- const char* microdump_product_info_;
+ // The extra microdump data (e.g. product name/version, build
+ // fingerprint, gpu fingerprint) that should be appended to the dump
+ // (microdump only). Microdumps don't have the ability of appending
+ // extra metadata after the dump is generated (as opposite to
+ // minidumps MIME fields), therefore the extra data must be provided
+ // upfront. Any memory pointed to by members of the
+ // MicrodumpExtraInfo struct must be valid for the lifetime of the
+ // process (read: the caller has to guarantee that it is stored in
+ // global static storage.)
+ MicrodumpExtraInfo microdump_extra_info_;
};
} // namespace google_breakpad