Index: src/processor/minidump_unittest.cc |
=================================================================== |
--- src/processor/minidump_unittest.cc (revision 1208) |
+++ src/processor/minidump_unittest.cc (working copy) |
@@ -1150,4 +1150,117 @@ |
EXPECT_EQ(0x2e951ef7U, raw_context.cpsr); |
} |
+TEST(Dump, OneExceptionMIPS) { |
+ Dump dump(0, kLittleEndian); |
+ |
+ MDRawContextMIPS raw_context; |
+ raw_context.context_flags = MD_CONTEXT_MIPS_INTEGER; |
+ raw_context.iregs[0] = 0x3ecba80d; |
+ raw_context.iregs[1] = 0x382583b9; |
+ raw_context.iregs[2] = 0x7fccc03f; |
+ raw_context.iregs[3] = 0xf62f8ec2; |
+ raw_context.iregs[4] = 0x46a6a6a8; |
+ raw_context.iregs[5] = 0x6a5025e2; |
+ raw_context.iregs[6] = 0xd9fabb4a; |
+ raw_context.iregs[7] = 0x6913f540; |
+ raw_context.iregs[8] = 0xbffe6eda; |
+ raw_context.iregs[9] = 0xb2ce1e2d; |
+ raw_context.iregs[10] = 0x659caaa4; |
+ raw_context.iregs[11] = 0xf0e0d0c0; |
+ raw_context.iregs[12] = 0xa9b8c7d6; |
+ raw_context.iregs[13] = 0x12345678; |
+ raw_context.iregs[14] = 0xabcd1234; |
+ raw_context.iregs[15] = 0x10203040; |
+ raw_context.iregs[16] = 0xa80d3ecb; |
+ raw_context.iregs[17] = 0x83b93825; |
+ raw_context.iregs[18] = 0xc03f7fcc; |
+ raw_context.iregs[19] = 0x8ec2f62f; |
+ raw_context.iregs[20] = 0xa6a846a6; |
+ raw_context.iregs[21] = 0x25e26a50; |
+ raw_context.iregs[22] = 0xbb4ad9fa; |
+ raw_context.iregs[23] = 0xf5406913; |
+ raw_context.iregs[24] = 0x6edabffe; |
+ raw_context.iregs[25] = 0x1e2db2ce; |
+ raw_context.iregs[26] = 0xaaa4659c; |
+ raw_context.iregs[27] = 0xd0c0f0e0; |
+ raw_context.iregs[28] = 0xc7d6a9b8; |
+ raw_context.iregs[29] = 0x56781234; |
+ raw_context.iregs[30] = 0x1234abcd; |
+ raw_context.iregs[31] = 0x30401020; |
+ |
+ Context context(dump, raw_context); |
+ |
+ Exception exception(dump, context, |
+ 0x1234abcd, // Thread id. |
+ 0xdcba4321, // Exception code. |
+ 0xf0e0d0c0, // Exception flags. |
+ 0x0919a9b9); // Exception address. |
+ |
+ dump.Add(&context); |
+ dump.Add(&exception); |
+ dump.Finish(); |
+ |
+ string contents; |
+ ASSERT_TRUE(dump.GetContents(&contents)); |
+ |
+ istringstream minidump_stream(contents); |
+ Minidump minidump(minidump_stream); |
+ ASSERT_TRUE(minidump.Read()); |
+ ASSERT_EQ(1U, minidump.GetDirectoryEntryCount()); |
+ |
+ MinidumpException *md_exception = minidump.GetException(); |
+ ASSERT_TRUE(md_exception != NULL); |
+ |
+ uint32_t thread_id; |
+ ASSERT_TRUE(md_exception->GetThreadID(&thread_id)); |
+ ASSERT_EQ(0x1234abcdU, thread_id); |
+ |
+ const MDRawExceptionStream* raw_exception = md_exception->exception(); |
+ ASSERT_TRUE(raw_exception != NULL); |
+ EXPECT_EQ(0xdcba4321, raw_exception->exception_record.exception_code); |
+ EXPECT_EQ(0xf0e0d0c0, raw_exception->exception_record.exception_flags); |
+ EXPECT_EQ(0x0919a9b9U, |
+ raw_exception->exception_record.exception_address); |
+ |
+ MinidumpContext* md_context = md_exception->GetContext(); |
+ ASSERT_TRUE(md_context != NULL); |
+ ASSERT_EQ((uint32_t) MD_CONTEXT_MIPS, md_context->GetContextCPU()); |
+ const MDRawContextMIPS* md_raw_context = md_context->GetContextMIPS(); |
+ ASSERT_TRUE(md_raw_context != NULL); |
+ ASSERT_EQ((uint32_t) MD_CONTEXT_MIPS_INTEGER, |
+ (md_raw_context->context_flags & MD_CONTEXT_MIPS_INTEGER)); |
+ EXPECT_EQ(0x3ecba80dU, raw_context.iregs[0]); |
+ EXPECT_EQ(0x382583b9U, raw_context.iregs[1]); |
+ EXPECT_EQ(0x7fccc03fU, raw_context.iregs[2]); |
+ EXPECT_EQ(0xf62f8ec2U, raw_context.iregs[3]); |
+ EXPECT_EQ(0x46a6a6a8U, raw_context.iregs[4]); |
+ EXPECT_EQ(0x6a5025e2U, raw_context.iregs[5]); |
+ EXPECT_EQ(0xd9fabb4aU, raw_context.iregs[6]); |
+ EXPECT_EQ(0x6913f540U, raw_context.iregs[7]); |
+ EXPECT_EQ(0xbffe6edaU, raw_context.iregs[8]); |
+ EXPECT_EQ(0xb2ce1e2dU, raw_context.iregs[9]); |
+ EXPECT_EQ(0x659caaa4U, raw_context.iregs[10]); |
+ EXPECT_EQ(0xf0e0d0c0U, raw_context.iregs[11]); |
+ EXPECT_EQ(0xa9b8c7d6U, raw_context.iregs[12]); |
+ EXPECT_EQ(0x12345678U, raw_context.iregs[13]); |
+ EXPECT_EQ(0xabcd1234U, raw_context.iregs[14]); |
+ EXPECT_EQ(0x10203040U, raw_context.iregs[15]); |
+ EXPECT_EQ(0xa80d3ecbU, raw_context.iregs[16]); |
+ EXPECT_EQ(0x83b93825U, raw_context.iregs[17]); |
+ EXPECT_EQ(0xc03f7fccU, raw_context.iregs[18]); |
+ EXPECT_EQ(0x8ec2f62fU, raw_context.iregs[19]); |
+ EXPECT_EQ(0xa6a846a6U, raw_context.iregs[20]); |
+ EXPECT_EQ(0x25e26a50U, raw_context.iregs[21]); |
+ EXPECT_EQ(0xbb4ad9faU, raw_context.iregs[22]); |
+ EXPECT_EQ(0xf5406913U, raw_context.iregs[23]); |
+ EXPECT_EQ(0x6edabffeU, raw_context.iregs[24]); |
+ EXPECT_EQ(0x1e2db2ceU, raw_context.iregs[25]); |
+ EXPECT_EQ(0xaaa4659cU, raw_context.iregs[26]); |
+ EXPECT_EQ(0xd0c0f0e0U, raw_context.iregs[27]); |
+ EXPECT_EQ(0xc7d6a9b8U, raw_context.iregs[28]); |
+ EXPECT_EQ(0x56781234U, raw_context.iregs[29]); |
+ EXPECT_EQ(0x1234abcdU, raw_context.iregs[30]); |
+ EXPECT_EQ(0x30401020U, raw_context.iregs[31]); |
+} |
+ |
} // namespace |