summaryrefslogtreecommitdiffstats
path: root/llvm/unittests/Object
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/unittests/Object')
-rw-r--r--llvm/unittests/Object/CMakeLists.txt1
-rw-r--r--llvm/unittests/Object/MinidumpTest.cpp263
2 files changed, 130 insertions, 134 deletions
diff --git a/llvm/unittests/Object/CMakeLists.txt b/llvm/unittests/Object/CMakeLists.txt
index e0fc6ce8893..e0be1ba2b2f 100644
--- a/llvm/unittests/Object/CMakeLists.txt
+++ b/llvm/unittests/Object/CMakeLists.txt
@@ -1,4 +1,5 @@
set(LLVM_LINK_COMPONENTS
+ BinaryFormat
Object
)
diff --git a/llvm/unittests/Object/MinidumpTest.cpp b/llvm/unittests/Object/MinidumpTest.cpp
index 6ebb2a98952..97fde12c0f8 100644
--- a/llvm/unittests/Object/MinidumpTest.cpp
+++ b/llvm/unittests/Object/MinidumpTest.cpp
@@ -21,19 +21,20 @@ static Expected<std::unique_ptr<MinidumpFile>> create(ArrayRef<uint8_t> Data) {
}
TEST(MinidumpFile, BasicInterface) {
- // A very simple minidump file which contains just a single stream.
- auto ExpectedFile =
- create({ // Header
- 'M', 'D', 'M', 'P', 0x93, 0xa7, 0, 0, // Signature, Version
- 1, 0, 0, 0, // NumberOfStreams,
- 0x20, 0, 0, 0, // StreamDirectoryRVA
- 0, 1, 2, 3, 4, 5, 6, 7, // Checksum, TimeDateStamp
- 8, 9, 0, 1, 2, 3, 4, 5, // Flags
+ std::vector<uint8_t> Data{ // Header
+ 'M', 'D', 'M', 'P', // Signature
+ 0x93, 0xa7, 0, 0, // Version
+ 1, 0, 0, 0, // NumberOfStreams,
+ 0x20, 0, 0, 0, // StreamDirectoryRVA
+ 0, 1, 2, 3, 4, 5, 6, 7, // Checksum, TimeDateStamp
+ 8, 9, 0, 1, 2, 3, 4, 5, // Flags
// Stream Directory
- 3, 0, 0x67, 0x47, 7, 0, 0, 0, // Type, DataSize,
- 0x2c, 0, 0, 0, // RVA
- // Stream
- 'C', 'P', 'U', 'I', 'N', 'F', 'O'});
+ 3, 0, 0x67, 0x47, 7, 0, 0, 0, // Type, DataSize,
+ 0x2c, 0, 0, 0, // RVA
+ // Stream
+ 'C', 'P', 'U', 'I', 'N', 'F', 'O'};
+ // A very simple minidump file which contains just a single stream.
+ auto ExpectedFile = create(Data);
ASSERT_THAT_EXPECTED(ExpectedFile, Succeeded());
const MinidumpFile &File = **ExpectedFile;
const Header &H = File.header();
@@ -60,135 +61,127 @@ TEST(MinidumpFile, BasicInterface) {
// Use the input from the previous test, but corrupt it in various ways
TEST(MinidumpFile, create_ErrorCases) {
- // File too short
- EXPECT_THAT_EXPECTED(create({'M', 'D', 'M', 'P'}), Failed<BinaryError>());
+ std::vector<uint8_t> FileTooShort{'M', 'D', 'M', 'P'};
+ EXPECT_THAT_EXPECTED(create(FileTooShort), Failed<BinaryError>());
- // Wrong Signature
- EXPECT_THAT_EXPECTED(
- create({ // Header
- '!', 'D', 'M', 'P', 0x93, 0xa7, 0, 0, // Signature, Version
- 1, 0, 0, 0, // NumberOfStreams,
- 0x20, 0, 0, 0, // StreamDirectoryRVA
- 0, 1, 2, 3, 4, 5, 6, 7, // Checksum, TimeDateStamp
- 8, 9, 0, 1, 2, 3, 4, 5, // Flags
- // Stream Directory
- 3, 0, 0x67, 0x47, 7, 0, 0, 0, // Type, DataSize,
- 0x2c, 0, 0, 0, // RVA
- // Stream
- 'C', 'P', 'U', 'I', 'N', 'F', 'O'}),
- Failed<BinaryError>());
-
- // Wrong Version
- EXPECT_THAT_EXPECTED(
- create({ // Header
- 'M', 'D', 'M', 'P', 0x39, 0xa7, 0, 0, // Signature, Version
- 1, 0, 0, 0, // NumberOfStreams,
- 0x20, 0, 0, 0, // StreamDirectoryRVA
- 0, 1, 2, 3, 4, 5, 6, 7, // Checksum, TimeDateStamp
- 8, 9, 0, 1, 2, 3, 4, 5, // Flags
- // Stream Directory
- 3, 0, 0x67, 0x47, 7, 0, 0, 0, // Type, DataSize,
- 0x2c, 0, 0, 0, // RVA
- // Stream
- 'C', 'P', 'U', 'I', 'N', 'F', 'O'}),
- Failed<BinaryError>());
+ std::vector<uint8_t> WrongSignature{
+ // Header
+ '!', 'D', 'M', 'P', 0x93, 0xa7, 0, 0, // Signature, Version
+ 1, 0, 0, 0, // NumberOfStreams,
+ 0x20, 0, 0, 0, // StreamDirectoryRVA
+ 0, 1, 2, 3, 4, 5, 6, 7, // Checksum, TimeDateStamp
+ 8, 9, 0, 1, 2, 3, 4, 5, // Flags
+ // Stream Directory
+ 3, 0, 0x67, 0x47, 7, 0, 0, 0, // Type, DataSize,
+ 0x2c, 0, 0, 0, // RVA
+ // Stream
+ 'C', 'P', 'U', 'I', 'N', 'F', 'O'};
+ EXPECT_THAT_EXPECTED(create(WrongSignature), Failed<BinaryError>());
- // Stream directory after EOF
- EXPECT_THAT_EXPECTED(
- create({ // Header
- 'M', 'D', 'M', 'P', 0x93, 0xa7, 0, 0, // Signature, Version
- 1, 0, 0, 0, // NumberOfStreams,
- 0x20, 1, 0, 0, // StreamDirectoryRVA
- 0, 1, 2, 3, 4, 5, 6, 7, // Checksum, TimeDateStamp
- 8, 9, 0, 1, 2, 3, 4, 5, // Flags
- // Stream Directory
- 3, 0, 0x67, 0x47, 7, 0, 0, 0, // Type, DataSize,
- 0x2c, 0, 0, 0, // RVA
- // Stream
- 'C', 'P', 'U', 'I', 'N', 'F', 'O'}),
- Failed<BinaryError>());
+ std::vector<uint8_t> WrongVersion{
+ // Header
+ 'M', 'D', 'M', 'P', 0x39, 0xa7, 0, 0, // Signature, Version
+ 1, 0, 0, 0, // NumberOfStreams,
+ 0x20, 0, 0, 0, // StreamDirectoryRVA
+ 0, 1, 2, 3, 4, 5, 6, 7, // Checksum, TimeDateStamp
+ 8, 9, 0, 1, 2, 3, 4, 5, // Flags
+ // Stream Directory
+ 3, 0, 0x67, 0x47, 7, 0, 0, 0, // Type, DataSize,
+ 0x2c, 0, 0, 0, // RVA
+ // Stream
+ 'C', 'P', 'U', 'I', 'N', 'F', 'O'};
+ EXPECT_THAT_EXPECTED(create(WrongVersion), Failed<BinaryError>());
- // Truncated stream directory
- EXPECT_THAT_EXPECTED(
- create({ // Header
- 'M', 'D', 'M', 'P', 0x93, 0xa7, 0, 0, // Signature, Version
- 1, 1, 0, 0, // NumberOfStreams,
- 0x20, 0, 0, 0, // StreamDirectoryRVA
- 0, 1, 2, 3, 4, 5, 6, 7, // Checksum, TimeDateStamp
- 8, 9, 0, 1, 2, 3, 4, 5, // Flags
- // Stream Directory
- 3, 0, 0x67, 0x47, 7, 0, 0, 0, // Type, DataSize,
- 0x2c, 0, 0, 0, // RVA
- // Stream
- 'C', 'P', 'U', 'I', 'N', 'F', 'O'}),
- Failed<BinaryError>());
+ std::vector<uint8_t> DirectoryAfterEOF{
+ // Header
+ 'M', 'D', 'M', 'P', 0x93, 0xa7, 0, 0, // Signature, Version
+ 1, 0, 0, 0, // NumberOfStreams,
+ 0x20, 1, 0, 0, // StreamDirectoryRVA
+ 0, 1, 2, 3, 4, 5, 6, 7, // Checksum, TimeDateStamp
+ 8, 9, 0, 1, 2, 3, 4, 5, // Flags
+ // Stream Directory
+ 3, 0, 0x67, 0x47, 7, 0, 0, 0, // Type, DataSize,
+ 0x2c, 0, 0, 0, // RVA
+ // Stream
+ 'C', 'P', 'U', 'I', 'N', 'F', 'O'};
+ EXPECT_THAT_EXPECTED(create(DirectoryAfterEOF), Failed<BinaryError>());
- // Stream0 after EOF
- EXPECT_THAT_EXPECTED(
- create({ // Header
- 'M', 'D', 'M', 'P', 0x93, 0xa7, 0, 0, // Signature, Version
- 1, 0, 0, 0, // NumberOfStreams,
- 0x20, 0, 0, 0, // StreamDirectoryRVA
- 0, 1, 2, 3, 4, 5, 6, 7, // Checksum, TimeDateStamp
- 8, 9, 0, 1, 2, 3, 4, 5, // Flags
- // Stream Directory
- 3, 0, 0x67, 0x47, 7, 0, 0, 0, // Type, DataSize,
- 0x2c, 1, 0, 0, // RVA
- // Stream
- 'C', 'P', 'U', 'I', 'N', 'F', 'O'}),
- Failed<BinaryError>());
+ std::vector<uint8_t> TruncatedDirectory{
+ // Header
+ 'M', 'D', 'M', 'P', 0x93, 0xa7, 0, 0, // Signature, Version
+ 1, 1, 0, 0, // NumberOfStreams,
+ 0x20, 0, 0, 0, // StreamDirectoryRVA
+ 0, 1, 2, 3, 4, 5, 6, 7, // Checksum, TimeDateStamp
+ 8, 9, 0, 1, 2, 3, 4, 5, // Flags
+ // Stream Directory
+ 3, 0, 0x67, 0x47, 7, 0, 0, 0, // Type, DataSize,
+ 0x2c, 0, 0, 0, // RVA
+ // Stream
+ 'C', 'P', 'U', 'I', 'N', 'F', 'O'};
+ EXPECT_THAT_EXPECTED(create(TruncatedDirectory), Failed<BinaryError>());
- // Truncated Stream0
- EXPECT_THAT_EXPECTED(
- create({ // Header
- 'M', 'D', 'M', 'P', 0x93, 0xa7, 0, 0, // Signature, Version
- 1, 0, 0, 0, // NumberOfStreams,
- 0x20, 0, 0, 0, // StreamDirectoryRVA
- 0, 1, 2, 3, 4, 5, 6, 7, // Checksum, TimeDateStamp
- 8, 9, 0, 1, 2, 3, 4, 5, // Flags
- // Stream Directory
- 3, 0, 0x67, 0x47, 8, 0, 0, 0, // Type, DataSize,
- 0x2c, 0, 0, 0, // RVA
- // Stream
- 'C', 'P', 'U', 'I', 'N', 'F', 'O'}),
- Failed<BinaryError>());
+ std::vector<uint8_t> Stream0AfterEOF{
+ // Header
+ 'M', 'D', 'M', 'P', 0x93, 0xa7, 0, 0, // Signature, Version
+ 1, 0, 0, 0, // NumberOfStreams,
+ 0x20, 0, 0, 0, // StreamDirectoryRVA
+ 0, 1, 2, 3, 4, 5, 6, 7, // Checksum, TimeDateStamp
+ 8, 9, 0, 1, 2, 3, 4, 5, // Flags
+ // Stream Directory
+ 3, 0, 0x67, 0x47, 7, 0, 0, 0, // Type, DataSize,
+ 0x2c, 1, 0, 0, // RVA
+ // Stream
+ 'C', 'P', 'U', 'I', 'N', 'F', 'O'};
+ EXPECT_THAT_EXPECTED(create(Stream0AfterEOF), Failed<BinaryError>());
- // Duplicate Stream
- EXPECT_THAT_EXPECTED(
- create({ // Header
- 'M', 'D', 'M', 'P', 0x93, 0xa7, 0, 0, // Signature, Version
- 2, 0, 0, 0, // NumberOfStreams,
- 0x20, 0, 0, 0, // StreamDirectoryRVA
- 0, 1, 2, 3, 4, 5, 6, 7, // Checksum, TimeDateStamp
- 8, 9, 0, 1, 2, 3, 4, 5, // Flags
- // Stream Directory
- 3, 0, 0x67, 0x47, 7, 0, 0, 0, // Type, DataSize,
- 0x40, 0, 0, 0, // RVA
- // Stream
- 3, 0, 0x67, 0x47, 7, 0, 0, 0, // Type, DataSize,
- 0x40, 0, 0, 0, // RVA
- // Stream
- 'C', 'P', 'U', 'I', 'N', 'F', 'O'}),
- Failed<BinaryError>());
+ std::vector<uint8_t> Stream0Truncated{
+ // Header
+ 'M', 'D', 'M', 'P', 0x93, 0xa7, 0, 0, // Signature, Version
+ 1, 0, 0, 0, // NumberOfStreams,
+ 0x20, 0, 0, 0, // StreamDirectoryRVA
+ 0, 1, 2, 3, 4, 5, 6, 7, // Checksum, TimeDateStamp
+ 8, 9, 0, 1, 2, 3, 4, 5, // Flags
+ // Stream Directory
+ 3, 0, 0x67, 0x47, 8, 0, 0, 0, // Type, DataSize,
+ 0x2c, 0, 0, 0, // RVA
+ // Stream
+ 'C', 'P', 'U', 'I', 'N', 'F', 'O'};
+ EXPECT_THAT_EXPECTED(create(Stream0Truncated), Failed<BinaryError>());
- // Stream matching one of the DenseMapInfo magic values
- EXPECT_THAT_EXPECTED(
- create({ // Header
- 'M', 'D', 'M', 'P', 0x93, 0xa7, 0, 0, // Signature, Version
- 1, 0, 0, 0, // NumberOfStreams,
- 0x20, 0, 0, 0, // StreamDirectoryRVA
- 0, 1, 2, 3, 4, 5, 6, 7, // Checksum, TimeDateStamp
- 8, 9, 0, 1, 2, 3, 4, 5, // Flags
- // Stream Directory
- 0xff, 0xff, 0xff, 0xff, 7, 0, 0, 0, // Type, DataSize,
- 0x2c, 0, 0, 0, // RVA
- // Stream
- 'C', 'P', 'U', 'I', 'N', 'F', 'O'}),
- Failed<BinaryError>());
+ std::vector<uint8_t> DuplicateStream{
+ // Header
+ 'M', 'D', 'M', 'P', 0x93, 0xa7, 0, 0, // Signature, Version
+ 2, 0, 0, 0, // NumberOfStreams,
+ 0x20, 0, 0, 0, // StreamDirectoryRVA
+ 0, 1, 2, 3, 4, 5, 6, 7, // Checksum, TimeDateStamp
+ 8, 9, 0, 1, 2, 3, 4, 5, // Flags
+ // Stream Directory
+ 3, 0, 0x67, 0x47, 7, 0, 0, 0, // Type, DataSize,
+ 0x40, 0, 0, 0, // RVA
+ // Stream
+ 3, 0, 0x67, 0x47, 7, 0, 0, 0, // Type, DataSize,
+ 0x40, 0, 0, 0, // RVA
+ // Stream
+ 'C', 'P', 'U', 'I', 'N', 'F', 'O'};
+ EXPECT_THAT_EXPECTED(create(DuplicateStream), Failed<BinaryError>());
+
+ std::vector<uint8_t> DenseMapInfoConflict{
+ // Header
+ 'M', 'D', 'M', 'P', 0x93, 0xa7, 0, 0, // Signature, Version
+ 1, 0, 0, 0, // NumberOfStreams,
+ 0x20, 0, 0, 0, // StreamDirectoryRVA
+ 0, 1, 2, 3, 4, 5, 6, 7, // Checksum, TimeDateStamp
+ 8, 9, 0, 1, 2, 3, 4, 5, // Flags
+ // Stream Directory
+ 0xff, 0xff, 0xff, 0xff, 7, 0, 0, 0, // Type, DataSize,
+ 0x2c, 0, 0, 0, // RVA
+ // Stream
+ 'C', 'P', 'U', 'I', 'N', 'F', 'O'};
+ EXPECT_THAT_EXPECTED(create(DenseMapInfoConflict), Failed<BinaryError>());
}
TEST(MinidumpFile, IngoresDummyStreams) {
- auto ExpectedFile = create({
+ std::vector<uint8_t> TwoDummyStreams{
// Header
'M', 'D', 'M', 'P', 0x93, 0xa7, 0, 0, // Signature, Version
2, 0, 0, 0, // NumberOfStreams,
@@ -200,7 +193,8 @@ TEST(MinidumpFile, IngoresDummyStreams) {
0x20, 0, 0, 0, // RVA
0, 0, 0, 0, 0, 0, 0, 0, // Type, DataSize,
0x20, 0, 0, 0, // RVA
- });
+ };
+ auto ExpectedFile = create(TwoDummyStreams);
ASSERT_THAT_EXPECTED(ExpectedFile, Succeeded());
const MinidumpFile &File = **ExpectedFile;
ASSERT_EQ(2u, File.streams().size());
@@ -210,7 +204,7 @@ TEST(MinidumpFile, IngoresDummyStreams) {
}
TEST(MinidumpFile, getSystemInfo) {
- auto ExpectedFile = create({
+ std::vector<uint8_t> Data{
// Header
'M', 'D', 'M', 'P', 0x93, 0xa7, 0, 0, // Signature, Version
1, 0, 0, 0, // NumberOfStreams,
@@ -229,7 +223,8 @@ TEST(MinidumpFile, getSystemInfo) {
'L', 'L', 'V', 'M', 'L', 'L', 'V', 'M', 'L', 'L', 'V', 'M', // VendorID
1, 2, 3, 4, 5, 6, 7, 8, // VersionInfo, FeatureInfo
9, 0, 1, 2, // AMDExtendedFeatures
- });
+ };
+ auto ExpectedFile = create(Data);
ASSERT_THAT_EXPECTED(ExpectedFile, Succeeded());
const MinidumpFile &File = **ExpectedFile;
OpenPOWER on IntegriCloud