summaryrefslogtreecommitdiffstats
path: root/llvm/unittests/Object
diff options
context:
space:
mode:
authorPavel Labath <pavel@labath.sk>2019-05-16 15:17:30 +0000
committerPavel Labath <pavel@labath.sk>2019-05-16 15:17:30 +0000
commit2d29e16c308699d19c591675deb10fa3c544558b (patch)
treec31a014ca26f6ca1f108dc67988ddbfd17b98994 /llvm/unittests/Object
parent738e42efb3c48d27d482a2093df912cf870cd396 (diff)
downloadbcm5719-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.cpp48
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);
+ }
+}
OpenPOWER on IntegriCloud