aboutsummaryrefslogtreecommitdiff
path: root/src/processor/minidump_unittest.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/processor/minidump_unittest.cc')
-rw-r--r--src/processor/minidump_unittest.cc113
1 files changed, 113 insertions, 0 deletions
diff --git a/src/processor/minidump_unittest.cc b/src/processor/minidump_unittest.cc
index d16bbc62..bb7dac64 100644
--- a/src/processor/minidump_unittest.cc
+++ b/src/processor/minidump_unittest.cc
@@ -1150,4 +1150,117 @@ TEST(Dump, OneExceptionARMOldFlags) {
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