Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(856)

Unified Diff: snapshot/mac/process_types/custom.cc

Issue 1277513003: Recognize crashreporter_annotations_t version 5 found on OS X 10.11 (Closed) Base URL: https://chromium.googlesource.com/crashpad/crashpad@master
Patch Set: ExpectedSizeForVersion(), ReadIntoVersioned() Created 5 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « snapshot/mac/process_types/crashreporterclient.proctype ('k') | snapshot/snapshot_test.gyp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: snapshot/mac/process_types/custom.cc
diff --git a/snapshot/mac/process_types/custom.cc b/snapshot/mac/process_types/custom.cc
index 49553cf95f1cc6f9c25880a04c6e89d286dbf8b4..ba055c0e8573138701f2d038ecd029195b2cd667 100644
--- a/snapshot/mac/process_types/custom.cc
+++ b/snapshot/mac/process_types/custom.cc
@@ -16,6 +16,7 @@
#include <string.h>
+#include "base/logging.h"
#include "snapshot/mac/process_types/internal.h"
#include "util/mach/task_memory.h"
@@ -23,47 +24,17 @@ namespace crashpad {
namespace process_types {
namespace internal {
-template <typename Traits>
-bool dyld_all_image_infos<Traits>::ReadInto(
- ProcessReader* process_reader,
- mach_vm_address_t address,
- dyld_all_image_infos<Traits>* specific) {
+template <typename T>
+bool ReadIntoVersioned(ProcessReader* process_reader,
+ mach_vm_address_t address,
+ T* specific) {
TaskMemory* task_memory = process_reader->Memory();
if (!task_memory->Read(
address, sizeof(specific->version), &specific->version)) {
return false;
}
- mach_vm_size_t size;
- if (specific->version >= 14) {
- size = sizeof(dyld_all_image_infos<Traits>);
- } else if (specific->version >= 13) {
- size = offsetof(dyld_all_image_infos<Traits>, reserved);
- } else if (specific->version >= 12) {
- size = offsetof(dyld_all_image_infos<Traits>, sharedCacheUUID);
- } else if (specific->version >= 11) {
- size = offsetof(dyld_all_image_infos<Traits>, sharedCacheSlide);
- } else if (specific->version >= 10) {
- size = offsetof(dyld_all_image_infos<Traits>, errorKind);
- } else if (specific->version >= 9) {
- size = offsetof(dyld_all_image_infos<Traits>, initialImageCount);
- } else if (specific->version >= 8) {
- size = offsetof(dyld_all_image_infos<Traits>, dyldAllImageInfosAddress);
- } else if (specific->version >= 7) {
- size = offsetof(dyld_all_image_infos<Traits>, uuidArrayCount);
- } else if (specific->version >= 6) {
- size = offsetof(dyld_all_image_infos<Traits>, systemOrderFlag);
- } else if (specific->version >= 5) {
- size = offsetof(dyld_all_image_infos<Traits>, coreSymbolicationShmPage);
- } else if (specific->version >= 3) {
- size = offsetof(dyld_all_image_infos<Traits>, dyldVersion);
- } else if (specific->version >= 2) {
- size = offsetof(dyld_all_image_infos<Traits>, jitInfo);
- } else if (specific->version >= 1) {
- size = offsetof(dyld_all_image_infos<Traits>, libSystemInitialized);
- } else {
- size = offsetof(dyld_all_image_infos<Traits>, infoArrayCount);
- }
+ mach_vm_size_t size = T::ExpectedSizeForVersion(specific->version);
if (!task_memory->Read(address, size, specific)) {
return false;
@@ -80,11 +51,96 @@ bool dyld_all_image_infos<Traits>::ReadInto(
return true;
}
-#define PROCESS_TYPE_FLAVOR_TRAITS(lp_bits) \
- template bool dyld_all_image_infos<Traits##lp_bits>::ReadInto( \
- ProcessReader*, \
- mach_vm_address_t, \
- dyld_all_image_infos<Traits##lp_bits>*);
+// static
+template <typename Traits>
+size_t dyld_all_image_infos<Traits>::ExpectedSizeForVersion(uint64_t version) {
+ if (version >= 14) {
+ return sizeof(dyld_all_image_infos<Traits>);
+ }
+ if (version >= 13) {
+ return offsetof(dyld_all_image_infos<Traits>, reserved);
+ }
+ if (version >= 12) {
+ return offsetof(dyld_all_image_infos<Traits>, sharedCacheUUID);
+ }
+ if (version >= 11) {
+ return offsetof(dyld_all_image_infos<Traits>, sharedCacheSlide);
+ }
+ if (version >= 10) {
+ return offsetof(dyld_all_image_infos<Traits>, errorKind);
+ }
+ if (version >= 9) {
+ return offsetof(dyld_all_image_infos<Traits>, initialImageCount);
+ }
+ if (version >= 8) {
+ return offsetof(dyld_all_image_infos<Traits>, dyldAllImageInfosAddress);
+ }
+ if (version >= 7) {
+ return offsetof(dyld_all_image_infos<Traits>, uuidArrayCount);
+ }
+ if (version >= 6) {
+ return offsetof(dyld_all_image_infos<Traits>, systemOrderFlag);
+ }
+ if (version >= 5) {
+ return offsetof(dyld_all_image_infos<Traits>, coreSymbolicationShmPage);
+ }
+ if (version >= 3) {
+ return offsetof(dyld_all_image_infos<Traits>, dyldVersion);
+ }
+ if (version >= 2) {
+ return offsetof(dyld_all_image_infos<Traits>, jitInfo);
+ }
+ if (version >= 1) {
+ return offsetof(dyld_all_image_infos<Traits>, libSystemInitialized);
+ }
+ return offsetof(dyld_all_image_infos<Traits>, infoArrayCount);
+}
+
+// static
+template <typename Traits>
+bool dyld_all_image_infos<Traits>::ReadInto(
+ ProcessReader* process_reader,
+ mach_vm_address_t address,
+ dyld_all_image_infos<Traits>* specific) {
+ return ReadIntoVersioned(process_reader, address, specific);
+}
+
+// static
+template <typename Traits>
+size_t crashreporter_annotations_t<Traits>::ExpectedSizeForVersion(
+ uint64_t version) {
+ if (version >= 5) {
+ return sizeof(crashreporter_annotations_t<Traits>);
+ }
+ if (version >= 4) {
+ return offsetof(crashreporter_annotations_t<Traits>, unknown_0);
+ }
+ return offsetof(crashreporter_annotations_t<Traits>, message);
+}
+
+// static
+template <typename Traits>
+bool crashreporter_annotations_t<Traits>::ReadInto(
+ ProcessReader* process_reader,
+ mach_vm_address_t address,
+ crashreporter_annotations_t<Traits>* specific) {
+ return ReadIntoVersioned(process_reader, address, specific);
+}
+
+#define PROCESS_TYPE_FLAVOR_TRAITS(lp_bits) \
+ template size_t \
+ dyld_all_image_infos<Traits##lp_bits>::ExpectedSizeForVersion(uint64_t); \
+ template bool dyld_all_image_infos<Traits##lp_bits>::ReadInto( \
+ ProcessReader*, \
+ mach_vm_address_t, \
+ dyld_all_image_infos<Traits##lp_bits>*); \
+ template size_t \
+ crashreporter_annotations_t<Traits##lp_bits>::ExpectedSizeForVersion( \
+ uint64_t); \
+ template bool crashreporter_annotations_t<Traits##lp_bits>::ReadInto( \
+ ProcessReader*, \
+ mach_vm_address_t, \
+ crashreporter_annotations_t<Traits##lp_bits>*);
#include "snapshot/mac/process_types/flavors.h"
« no previous file with comments | « snapshot/mac/process_types/crashreporterclient.proctype ('k') | snapshot/snapshot_test.gyp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698