diff options
author | Pavel Labath <pavel@labath.sk> | 2019-04-05 07:56:39 +0000 |
---|---|---|
committer | Pavel Labath <pavel@labath.sk> | 2019-04-05 07:56:39 +0000 |
commit | 98edcd9b9c28adf36b085c1a33e10328552ae1d4 (patch) | |
tree | 58a8c07841d07fd033dab15f12451af0cd3abb0a /lldb/unittests/Process | |
parent | 546bccf61c620893c0f94c84adf542b0bbad24bb (diff) | |
download | bcm5719-llvm-98edcd9b9c28adf36b085c1a33e10328552ae1d4.tar.gz bcm5719-llvm-98edcd9b9c28adf36b085c1a33e10328552ae1d4.zip |
MinidumpParser: use minidump parser in llvm/Object
This patch removes the lower layers of the minidump parsing code from
the MinidumpParser class, and replaces it with the minidump parser in
llvm.
Not all functionality is already avaiable in the llvm class, but it is
enough for us to be able to stop enumerating streams manually, and rely
on the minidump directory parsing code from the llvm class.
This also removes some checked-in binaries which were used to test error
handling in the parser, as the error handling is now done (and tested)
in llvm. Instead I just add one test that ensures we correctly propagate
the errors reported by the llvm parser. The input for this test can be
written in yaml instead of a checked-in binary.
llvm-svn: 357748
Diffstat (limited to 'lldb/unittests/Process')
-rw-r--r-- | lldb/unittests/Process/minidump/CMakeLists.txt | 3 | ||||
-rw-r--r-- | lldb/unittests/Process/minidump/Inputs/bad_duplicate_streams.dmp | bin | 32976 -> 0 bytes | |||
-rw-r--r-- | lldb/unittests/Process/minidump/Inputs/bad_overlapping_streams.dmp | bin | 32976 -> 0 bytes | |||
-rw-r--r-- | lldb/unittests/Process/minidump/MinidumpParserTest.cpp | 41 |
4 files changed, 22 insertions, 22 deletions
diff --git a/lldb/unittests/Process/minidump/CMakeLists.txt b/lldb/unittests/Process/minidump/CMakeLists.txt index 9e3a18e740b..9cbd7a9d9f3 100644 --- a/lldb/unittests/Process/minidump/CMakeLists.txt +++ b/lldb/unittests/Process/minidump/CMakeLists.txt @@ -11,12 +11,11 @@ add_lldb_unittest(LLDBMinidumpTests lldbUtilityHelpers LLVMTestingSupport LINK_COMPONENTS + ObjectYAML Support ) set(test_inputs - bad_duplicate_streams.dmp - bad_overlapping_streams.dmp fizzbuzz_no_heap.dmp fizzbuzz_wow64.dmp linux-i386.dmp diff --git a/lldb/unittests/Process/minidump/Inputs/bad_duplicate_streams.dmp b/lldb/unittests/Process/minidump/Inputs/bad_duplicate_streams.dmp Binary files differdeleted file mode 100644 index d9be8e28571..00000000000 --- a/lldb/unittests/Process/minidump/Inputs/bad_duplicate_streams.dmp +++ /dev/null diff --git a/lldb/unittests/Process/minidump/Inputs/bad_overlapping_streams.dmp b/lldb/unittests/Process/minidump/Inputs/bad_overlapping_streams.dmp Binary files differdeleted file mode 100644 index f131ae7d105..00000000000 --- a/lldb/unittests/Process/minidump/Inputs/bad_overlapping_streams.dmp +++ /dev/null diff --git a/lldb/unittests/Process/minidump/MinidumpParserTest.cpp b/lldb/unittests/Process/minidump/MinidumpParserTest.cpp index ba727e0fac2..a49d0c28452 100644 --- a/lldb/unittests/Process/minidump/MinidumpParserTest.cpp +++ b/lldb/unittests/Process/minidump/MinidumpParserTest.cpp @@ -14,10 +14,12 @@ #include "lldb/Host/FileSystem.h" #include "lldb/Target/MemoryRegionInfo.h" #include "lldb/Utility/ArchSpec.h" +#include "lldb/Utility/DataBufferHeap.h" #include "lldb/Utility/DataExtractor.h" #include "lldb/Utility/FileSpec.h" #include "llvm/ADT/ArrayRef.h" #include "llvm/ADT/Optional.h" +#include "llvm/ObjectYAML/MinidumpYAML.h" #include "llvm/Support/FileSystem.h" #include "llvm/Support/MemoryBuffer.h" #include "llvm/Support/Path.h" @@ -49,18 +51,28 @@ public: ASSERT_GT(parser->GetData().size(), 0UL); } - void InvalidMinidump(const char *minidump_filename, uint64_t load_size) { - std::string filename = GetInputFilePath(minidump_filename); - auto BufferPtr = - FileSystem::Instance().CreateDataBuffer(filename, load_size, 0); - ASSERT_NE(BufferPtr, nullptr); - - EXPECT_THAT_EXPECTED(MinidumpParser::Create(BufferPtr), llvm::Failed()); - } - llvm::Optional<MinidumpParser> parser; }; +TEST_F(MinidumpParserTest, InvalidMinidump) { + std::string duplicate_streams; + llvm::raw_string_ostream os(duplicate_streams); + ASSERT_THAT_ERROR(llvm::MinidumpYAML::writeAsBinary(R"( +--- !minidump +Streams: + - Type: LinuxAuxv + Content: DEADBEEFBAADF00D + - Type: LinuxAuxv + Content: DEADBEEFBAADF00D + )", + os), + llvm::Succeeded()); + os.flush(); + auto data_buffer_sp = std::make_shared<DataBufferHeap>( + duplicate_streams.data(), duplicate_streams.size()); + ASSERT_THAT_EXPECTED(MinidumpParser::Create(data_buffer_sp), llvm::Failed()); +} + TEST_F(MinidumpParserTest, GetThreadsAndGetThreadContext) { SetUpData("linux-x86_64.dmp"); llvm::ArrayRef<MinidumpThread> thread_list; @@ -146,17 +158,6 @@ TEST_F(MinidumpParserTest, GetMemoryListPadded) { EXPECT_EQ((lldb::addr_t)0x8010, mem->start); } -TEST_F(MinidumpParserTest, TruncatedMinidumps) { - InvalidMinidump("linux-x86_64.dmp", 32); - InvalidMinidump("linux-x86_64.dmp", 100); - InvalidMinidump("linux-x86_64.dmp", 20 * 1024); -} - -TEST_F(MinidumpParserTest, IllFormedMinidumps) { - InvalidMinidump("bad_duplicate_streams.dmp", -1); - InvalidMinidump("bad_overlapping_streams.dmp", -1); -} - TEST_F(MinidumpParserTest, GetArchitecture) { SetUpData("linux-x86_64.dmp"); ASSERT_EQ(llvm::Triple::ArchType::x86_64, |