Grokdump workaround for different layout of *_LIST structures written to minidumps on Mac.
Review URL: https://codereview.chromium.org/902853002 Cr-Commit-Position: refs/heads/master@{#26456}
This commit is contained in:
parent
87c79df973
commit
21b2ea80f7
@ -434,6 +434,12 @@ MINIDUMP_MEMORY_LIST = Descriptor([
|
||||
("ranges", lambda m: MINIDUMP_MEMORY_DESCRIPTOR.ctype * m.range_count)
|
||||
])
|
||||
|
||||
MINIDUMP_MEMORY_LIST_Mac = Descriptor([
|
||||
("range_count", ctypes.c_uint32),
|
||||
("junk", ctypes.c_uint32),
|
||||
("ranges", lambda m: MINIDUMP_MEMORY_DESCRIPTOR.ctype * m.range_count)
|
||||
])
|
||||
|
||||
MINIDUMP_MEMORY_LIST64 = Descriptor([
|
||||
("range_count", ctypes.c_uint64),
|
||||
("base_rva", ctypes.c_uint64),
|
||||
@ -455,6 +461,12 @@ MINIDUMP_THREAD_LIST = Descriptor([
|
||||
("threads", lambda t: MINIDUMP_THREAD.ctype * t.thread_count)
|
||||
])
|
||||
|
||||
MINIDUMP_THREAD_LIST_Mac = Descriptor([
|
||||
("thread_count", ctypes.c_uint32),
|
||||
("junk", ctypes.c_uint32),
|
||||
("threads", lambda t: MINIDUMP_THREAD.ctype * t.thread_count)
|
||||
])
|
||||
|
||||
MINIDUMP_VS_FIXEDFILEINFO = Descriptor([
|
||||
("dwSignature", ctypes.c_uint32),
|
||||
("dwStrucVersion", ctypes.c_uint32),
|
||||
@ -489,6 +501,12 @@ MINIDUMP_MODULE_LIST = Descriptor([
|
||||
("modules", lambda t: MINIDUMP_RAW_MODULE.ctype * t.number_of_modules)
|
||||
])
|
||||
|
||||
MINIDUMP_MODULE_LIST_Mac = Descriptor([
|
||||
("number_of_modules", ctypes.c_uint32),
|
||||
("junk", ctypes.c_uint32),
|
||||
("modules", lambda t: MINIDUMP_RAW_MODULE.ctype * t.number_of_modules)
|
||||
])
|
||||
|
||||
MINIDUMP_RAW_SYSTEM_INFO = Descriptor([
|
||||
("processor_architecture", ctypes.c_uint16)
|
||||
])
|
||||
@ -570,6 +588,9 @@ class MinidumpReader(object):
|
||||
DebugPrint(self.exception_context)
|
||||
elif d.stream_type == MD_THREAD_LIST_STREAM:
|
||||
thread_list = MINIDUMP_THREAD_LIST.Read(self.minidump, d.location.rva)
|
||||
if ctypes.sizeof(thread_list) + 4 == d.location.data_size:
|
||||
thread_list = MINIDUMP_THREAD_LIST_Mac.Read(
|
||||
self.minidump, d.location.rva)
|
||||
assert ctypes.sizeof(thread_list) == d.location.data_size
|
||||
DebugPrint(thread_list)
|
||||
for thread in thread_list.threads:
|
||||
@ -579,12 +600,19 @@ class MinidumpReader(object):
|
||||
assert self.module_list is None
|
||||
self.module_list = MINIDUMP_MODULE_LIST.Read(
|
||||
self.minidump, d.location.rva)
|
||||
if ctypes.sizeof(self.module_list) + 4 == d.location.data_size:
|
||||
self.module_list = MINIDUMP_MODULE_LIST_Mac.Read(
|
||||
self.minidump, d.location.rva)
|
||||
assert ctypes.sizeof(self.module_list) == d.location.data_size
|
||||
DebugPrint(self.module_list)
|
||||
elif d.stream_type == MD_MEMORY_LIST_STREAM:
|
||||
print >>sys.stderr, "Warning: This is not a full minidump!"
|
||||
assert self.memory_list is None
|
||||
self.memory_list = MINIDUMP_MEMORY_LIST.Read(
|
||||
self.minidump, d.location.rva)
|
||||
if ctypes.sizeof(self.memory_list) + 4 == d.location.data_size:
|
||||
self.memory_list = MINIDUMP_MEMORY_LIST_Mac.Read(
|
||||
self.minidump, d.location.rva)
|
||||
assert ctypes.sizeof(self.memory_list) == d.location.data_size
|
||||
DebugPrint(self.memory_list)
|
||||
elif d.stream_type == MD_MEMORY_64_LIST_STREAM:
|
||||
|
Loading…
Reference in New Issue
Block a user