OLD | NEW |
1 // Copyright (c) 2012 Google Inc. | 1 // Copyright (c) 2012 Google Inc. |
2 // All rights reserved. | 2 // All rights reserved. |
3 // | 3 // |
4 // Redistribution and use in source and binary forms, with or without | 4 // Redistribution and use in source and binary forms, with or without |
5 // modification, are permitted provided that the following conditions are | 5 // modification, are permitted provided that the following conditions are |
6 // met: | 6 // met: |
7 // | 7 // |
8 // * Redistributions of source code must retain the above copyright | 8 // * Redistributions of source code must retain the above copyright |
9 // notice, this list of conditions and the following disclaimer. | 9 // notice, this list of conditions and the following disclaimer. |
10 // * Redistributions in binary form must reproduce the above | 10 // * Redistributions in binary form must reproduce the above |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
44 // - Writing a reduced microdump to the console (logcat on Android). | 44 // - Writing a reduced microdump to the console (logcat on Android). |
45 namespace google_breakpad { | 45 namespace google_breakpad { |
46 | 46 |
47 class MinidumpDescriptor { | 47 class MinidumpDescriptor { |
48 public: | 48 public: |
49 struct MicrodumpOnConsole {}; | 49 struct MicrodumpOnConsole {}; |
50 static const MicrodumpOnConsole kMicrodumpOnConsole; | 50 static const MicrodumpOnConsole kMicrodumpOnConsole; |
51 | 51 |
52 MinidumpDescriptor() : mode_(kUninitialized), | 52 MinidumpDescriptor() : mode_(kUninitialized), |
53 fd_(-1), | 53 fd_(-1), |
54 size_limit_(-1) {} | 54 size_limit_(-1), |
| 55 microdump_build_fingerprint_(NULL), |
| 56 microdump_product_info_(NULL) {} |
55 | 57 |
56 explicit MinidumpDescriptor(const string& directory) | 58 explicit MinidumpDescriptor(const string& directory) |
57 : mode_(kWriteMinidumpToFile), | 59 : mode_(kWriteMinidumpToFile), |
58 fd_(-1), | 60 fd_(-1), |
59 directory_(directory), | 61 directory_(directory), |
60 c_path_(NULL), | 62 c_path_(NULL), |
61 size_limit_(-1) { | 63 size_limit_(-1), |
| 64 microdump_build_fingerprint_(NULL), |
| 65 microdump_product_info_(NULL) { |
62 assert(!directory.empty()); | 66 assert(!directory.empty()); |
63 } | 67 } |
64 | 68 |
65 explicit MinidumpDescriptor(int fd) | 69 explicit MinidumpDescriptor(int fd) |
66 : mode_(kWriteMinidumpToFd), | 70 : mode_(kWriteMinidumpToFd), |
67 fd_(fd), | 71 fd_(fd), |
68 c_path_(NULL), | 72 c_path_(NULL), |
69 size_limit_(-1) { | 73 size_limit_(-1), |
| 74 microdump_build_fingerprint_(NULL), |
| 75 microdump_product_info_(NULL) { |
70 assert(fd != -1); | 76 assert(fd != -1); |
71 } | 77 } |
72 | 78 |
73 explicit MinidumpDescriptor(const MicrodumpOnConsole&) | 79 explicit MinidumpDescriptor(const MicrodumpOnConsole&) |
74 : mode_(kWriteMicrodumpToConsole), | 80 : mode_(kWriteMicrodumpToConsole), |
75 fd_(-1), | 81 fd_(-1), |
76 size_limit_(-1) {} | 82 size_limit_(-1), |
| 83 microdump_build_fingerprint_(NULL), |
| 84 microdump_product_info_(NULL) {} |
77 | 85 |
78 explicit MinidumpDescriptor(const MinidumpDescriptor& descriptor); | 86 explicit MinidumpDescriptor(const MinidumpDescriptor& descriptor); |
79 MinidumpDescriptor& operator=(const MinidumpDescriptor& descriptor); | 87 MinidumpDescriptor& operator=(const MinidumpDescriptor& descriptor); |
80 | 88 |
81 static MinidumpDescriptor getMicrodumpDescriptor(); | 89 static MinidumpDescriptor getMicrodumpDescriptor(); |
82 | 90 |
83 bool IsFD() const { return mode_ == kWriteMinidumpToFd; } | 91 bool IsFD() const { return mode_ == kWriteMinidumpToFd; } |
84 | 92 |
85 int fd() const { return fd_; } | 93 int fd() const { return fd_; } |
86 | 94 |
87 string directory() const { return directory_; } | 95 string directory() const { return directory_; } |
88 | 96 |
89 const char* path() const { return c_path_; } | 97 const char* path() const { return c_path_; } |
90 | 98 |
91 bool IsMicrodumpOnConsole() const { | 99 bool IsMicrodumpOnConsole() const { |
92 return mode_ == kWriteMicrodumpToConsole; | 100 return mode_ == kWriteMicrodumpToConsole; |
93 } | 101 } |
94 | 102 |
95 // Updates the path so it is unique. | 103 // Updates the path so it is unique. |
96 // Should be called from a normal context: this methods uses the heap. | 104 // Should be called from a normal context: this methods uses the heap. |
97 void UpdatePath(); | 105 void UpdatePath(); |
98 | 106 |
99 off_t size_limit() const { return size_limit_; } | 107 off_t size_limit() const { return size_limit_; } |
100 void set_size_limit(off_t limit) { size_limit_ = limit; } | 108 void set_size_limit(off_t limit) { size_limit_ = limit; } |
101 | 109 |
| 110 // TODO(primiano): make this and product info (below) just part of the |
| 111 // microdump ctor once it is rolled stably into Chrome. ETA: June 2015. |
| 112 void SetMicrodumpBuildFingerprint(const char* build_fingerprint); |
| 113 const char* microdump_build_fingerprint() const { |
| 114 return microdump_build_fingerprint_; |
| 115 } |
| 116 |
| 117 void SetMicrodumpProductInfo(const char* product_info); |
| 118 const char* microdump_product_info() const { |
| 119 return microdump_product_info_; |
| 120 } |
| 121 |
102 private: | 122 private: |
103 enum DumpMode { | 123 enum DumpMode { |
104 kUninitialized = 0, | 124 kUninitialized = 0, |
105 kWriteMinidumpToFile, | 125 kWriteMinidumpToFile, |
106 kWriteMinidumpToFd, | 126 kWriteMinidumpToFd, |
107 kWriteMicrodumpToConsole | 127 kWriteMicrodumpToConsole |
108 }; | 128 }; |
109 | 129 |
110 // Specifies the dump mode (see DumpMode). | 130 // Specifies the dump mode (see DumpMode). |
111 DumpMode mode_; | 131 DumpMode mode_; |
112 | 132 |
113 // The file descriptor where the minidump is generated. | 133 // The file descriptor where the minidump is generated. |
114 int fd_; | 134 int fd_; |
115 | 135 |
116 // The directory where the minidump should be generated. | 136 // The directory where the minidump should be generated. |
117 string directory_; | 137 string directory_; |
| 138 |
118 // The full path to the generated minidump. | 139 // The full path to the generated minidump. |
119 string path_; | 140 string path_; |
| 141 |
120 // The C string of |path_|. Precomputed so it can be access from a compromised | 142 // The C string of |path_|. Precomputed so it can be access from a compromised |
121 // context. | 143 // context. |
122 const char* c_path_; | 144 const char* c_path_; |
123 | 145 |
124 off_t size_limit_; | 146 off_t size_limit_; |
| 147 |
| 148 // The product name/version and build fingerprint that should be appended to |
| 149 // the dump (microdump only). Microdumps don't have the ability of appending |
| 150 // extra metadata after the dump is generated (as opposite to minidumps |
| 151 // MIME fields), therefore the product details must be provided upfront. |
| 152 // The string pointers are supposed to be valid through all the lifetime of |
| 153 // the process (read: the caller has to guarantee that they are stored in |
| 154 // global static storage). |
| 155 const char* microdump_build_fingerprint_; |
| 156 const char* microdump_product_info_; |
125 }; | 157 }; |
126 | 158 |
127 } // namespace google_breakpad | 159 } // namespace google_breakpad |
128 | 160 |
129 #endif // CLIENT_LINUX_HANDLER_MINIDUMP_DESCRIPTOR_H_ | 161 #endif // CLIENT_LINUX_HANDLER_MINIDUMP_DESCRIPTOR_H_ |
OLD | NEW |