| Index: tools/grokdump.py
|
| diff --git a/tools/grokdump.py b/tools/grokdump.py
|
| index 5a5cf4ba68ed351efadb49d0fbabd800a15adfa1..9d7fe16537ff7d4edbc839138ce1c5a256d37289 100755
|
| --- a/tools/grokdump.py
|
| +++ b/tools/grokdump.py
|
| @@ -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:
|
|
|