diff options
author | Pavel Labath <pavel@labath.sk> | 2019-05-16 15:17:30 +0000 |
---|---|---|
committer | Pavel Labath <pavel@labath.sk> | 2019-05-16 15:17:30 +0000 |
commit | 2d29e16c308699d19c591675deb10fa3c544558b (patch) | |
tree | c31a014ca26f6ca1f108dc67988ddbfd17b98994 /llvm/unittests/Object | |
parent | 738e42efb3c48d27d482a2093df912cf870cd396 (diff) | |
download | bcm5719-llvm-2d29e16c308699d19c591675deb10fa3c544558b.tar.gz bcm5719-llvm-2d29e16c308699d19c591675deb10fa3c544558b.zip |
Minidump: Add support for the MemoryList stream
Summary:
the stream format is exactly the same as for ThreadList and ModuleList
streams, only the entry types are slightly different, so the changes in
this patch are just straight-forward applications of established
patterns.
Reviewers: amccarth, jhenderson, clayborg
Subscribers: markmentovai, lldb-commits, llvm-commits
Tags: #llvm
Differential Revision: https://reviews.llvm.org/D61885
llvm-svn: 360908
Diffstat (limited to 'llvm/unittests/Object')
-rw-r--r-- | llvm/unittests/Object/MinidumpTest.cpp | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/llvm/unittests/Object/MinidumpTest.cpp b/llvm/unittests/Object/MinidumpTest.cpp index 98e31323c99..ba9af5a8247 100644 --- a/llvm/unittests/Object/MinidumpTest.cpp +++ b/llvm/unittests/Object/MinidumpTest.cpp @@ -463,3 +463,51 @@ TEST(MinidumpFile, getThreadList) { EXPECT_EQ(0x08070605u, T.Context.RVA); } } + +TEST(MinidumpFile, getMemoryList) { + std::vector<uint8_t> OneRange{ + // Header + 'M', 'D', 'M', 'P', 0x93, 0xa7, 0, 0, // Signature, Version + 1, 0, 0, 0, // NumberOfStreams, + 32, 0, 0, 0, // StreamDirectoryRVA + 0, 1, 2, 3, 4, 5, 6, 7, // Checksum, TimeDateStamp + 0, 0, 0, 0, 0, 0, 0, 0, // Flags + // Stream Directory + 5, 0, 0, 0, 20, 0, 0, 0, // Type, DataSize, + 44, 0, 0, 0, // RVA + // MemoryDescriptor + 1, 0, 0, 0, // NumberOfMemoryRanges + 5, 6, 7, 8, 9, 0, 1, 2, // StartOfMemoryRange + 3, 4, 5, 6, 7, 8, 9, 0, // DataSize, RVA + }; + // Same as before, but with a padded memory list. + std::vector<uint8_t> PaddedRange{ + // Header + 'M', 'D', 'M', 'P', 0x93, 0xa7, 0, 0, // Signature, Version + 1, 0, 0, 0, // NumberOfStreams, + 32, 0, 0, 0, // StreamDirectoryRVA + 0, 1, 2, 3, 4, 5, 6, 7, // Checksum, TimeDateStamp + 0, 0, 0, 0, 0, 0, 0, 0, // Flags + // Stream Directory + 5, 0, 0, 0, 24, 0, 0, 0, // Type, DataSize, + 44, 0, 0, 0, // RVA + // MemoryDescriptor + 1, 0, 0, 0, // NumberOfMemoryRanges + 0, 0, 0, 0, // Padding + 5, 6, 7, 8, 9, 0, 1, 2, // StartOfMemoryRange + 3, 4, 5, 6, 7, 8, 9, 0, // DataSize, RVA + }; + + for (ArrayRef<uint8_t> Data : {OneRange, PaddedRange}) { + auto ExpectedFile = create(Data); + ASSERT_THAT_EXPECTED(ExpectedFile, Succeeded()); + const MinidumpFile &File = **ExpectedFile; + Expected<ArrayRef<MemoryDescriptor>> ExpectedRanges = File.getMemoryList(); + ASSERT_THAT_EXPECTED(ExpectedRanges, Succeeded()); + ASSERT_EQ(1u, ExpectedRanges->size()); + const MemoryDescriptor &MD = ExpectedRanges.get()[0]; + EXPECT_EQ(0x0201000908070605u, MD.StartOfMemoryRange); + EXPECT_EQ(0x06050403u, MD.Memory.DataSize); + EXPECT_EQ(0x00090807u, MD.Memory.RVA); + } +} |