| Index: minidump/minidump_thread_writer_test.cc
|
| diff --git a/minidump/minidump_thread_writer_test.cc b/minidump/minidump_thread_writer_test.cc
|
| index 76087a377c8c6112904265c19acc392423b5dc0a..9571f7c2b959c0bdcf2bdde804c8f91adcaa8762 100644
|
| --- a/minidump/minidump_thread_writer_test.cc
|
| +++ b/minidump/minidump_thread_writer_test.cc
|
| @@ -18,6 +18,8 @@
|
| #include <dbghelp.h>
|
| #include <sys/types.h>
|
|
|
| +#include <string>
|
| +
|
| #include "base/compiler_specific.h"
|
| #include "base/format_macros.h"
|
| #include "base/strings/stringprintf.h"
|
| @@ -527,6 +529,9 @@ void RunInitializeFromSnapshotTest(bool thread_id_collision) {
|
| uint64_t thread_ids[arraysize(expect_threads)] = {};
|
| uint8_t memory_values[arraysize(expect_threads)] = {};
|
| uint32_t context_seeds[arraysize(expect_threads)] = {};
|
| + MINIDUMP_MEMORY_DESCRIPTOR tebs[arraysize(expect_threads)] = {};
|
| +
|
| + const size_t kTebSize = 1024;
|
|
|
| expect_threads[0].ThreadId = 1;
|
| expect_threads[0].SuspendCount = 2;
|
| @@ -537,6 +542,8 @@ void RunInitializeFromSnapshotTest(bool thread_id_collision) {
|
| expect_threads[0].ThreadContext.DataSize = sizeof(MinidumpContextType);
|
| memory_values[0] = 'A';
|
| context_seeds[0] = 0x80000000;
|
| + tebs[0].StartOfMemoryRange = expect_threads[0].Teb;
|
| + tebs[0].Memory.DataSize = kTebSize;
|
|
|
| // The thread at index 1 has no stack.
|
| expect_threads[1].ThreadId = 11;
|
| @@ -545,6 +552,8 @@ void RunInitializeFromSnapshotTest(bool thread_id_collision) {
|
| expect_threads[1].Teb = 0xfedcba9876543210;
|
| expect_threads[1].ThreadContext.DataSize = sizeof(MinidumpContextType);
|
| context_seeds[1] = 0x40000001;
|
| + tebs[1].StartOfMemoryRange = expect_threads[1].Teb;
|
| + tebs[1].Memory.DataSize = kTebSize;
|
|
|
| expect_threads[2].ThreadId = 21;
|
| expect_threads[2].SuspendCount = 22;
|
| @@ -555,6 +564,8 @@ void RunInitializeFromSnapshotTest(bool thread_id_collision) {
|
| expect_threads[2].ThreadContext.DataSize = sizeof(MinidumpContextType);
|
| memory_values[2] = 'd';
|
| context_seeds[2] = 0x20000002;
|
| + tebs[2].StartOfMemoryRange = expect_threads[2].Teb;
|
| + tebs[2].Memory.DataSize = kTebSize;
|
|
|
| if (thread_id_collision) {
|
| thread_ids[0] = 0x0123456700000001;
|
| @@ -595,6 +606,12 @@ void RunInitializeFromSnapshotTest(bool thread_id_collision) {
|
| Traits::InitializeCPUContext(thread_snapshot->MutableContext(),
|
| context_seeds[index]);
|
|
|
| + auto teb_snapshot = make_scoped_ptr(new TestMemorySnapshot());
|
| + teb_snapshot->SetAddress(expect_threads[index].Teb);
|
| + teb_snapshot->SetSize(kTebSize);
|
| + teb_snapshot->SetValue(static_cast<char>('t' + index));
|
| + thread_snapshot->AddExtraMemory(teb_snapshot.Pass());
|
| +
|
| thread_snapshots.push_back(thread_snapshot);
|
| }
|
|
|
| @@ -617,7 +634,7 @@ void RunInitializeFromSnapshotTest(bool thread_id_collision) {
|
| GetThreadListStream(string_file.string(), &thread_list, &memory_list));
|
|
|
| ASSERT_EQ(3u, thread_list->NumberOfThreads);
|
| - ASSERT_EQ(2u, memory_list->NumberOfMemoryRanges);
|
| + ASSERT_EQ(5u, memory_list->NumberOfMemoryRanges);
|
|
|
| size_t memory_index = 0;
|
| for (size_t index = 0; index < thread_list->NumberOfThreads; ++index) {
|
| @@ -643,7 +660,7 @@ void RunInitializeFromSnapshotTest(bool thread_id_collision) {
|
| observed_stack,
|
| string_file.string(),
|
| memory_values[index],
|
| - index == thread_list->NumberOfThreads - 1));
|
| + false));
|
|
|
| ASSERT_NO_FATAL_FAILURE(ExpectMinidumpMemoryDescriptor(
|
| observed_stack, &memory_list->MemoryRanges[memory_index]));
|
| @@ -651,6 +668,18 @@ void RunInitializeFromSnapshotTest(bool thread_id_collision) {
|
| ++memory_index;
|
| }
|
| }
|
| +
|
| + for (size_t index = 0; index < thread_list->NumberOfThreads; ++index) {
|
| + const MINIDUMP_MEMORY_DESCRIPTOR* memory =
|
| + &memory_list->MemoryRanges[memory_index];
|
| + ASSERT_NO_FATAL_FAILURE(
|
| + ExpectMinidumpMemoryDescriptor(&tebs[index], memory));
|
| + std::string expected_data(kTebSize, static_cast<char>('t' + index));
|
| + std::string observed_data(&string_file.string()[memory->Memory.Rva],
|
| + memory->Memory.DataSize);
|
| + EXPECT_EQ(expected_data, observed_data);
|
| + ++memory_index;
|
| + }
|
| }
|
|
|
| TEST(MinidumpThreadWriter, InitializeFromSnapshot_x86) {
|
|
|