Author: Jonas Devlieghere Date: 2024-01-12T13:08:24-08:00 New Revision: e27561fc7de0231f2efdb750f2092c3ac807c1a3
URL: https://github.com/llvm/llvm-project/commit/e27561fc7de0231f2efdb750f2092c3ac807c1a3 DIFF: https://github.com/llvm/llvm-project/commit/e27561fc7de0231f2efdb750f2092c3ac807c1a3.diff LOG: [lldb] Move MD5 Checksum from FileSpec to SupportFile When I added the MD5 checksum I was on the fence between storing it in FileSpec or creating a new SupportFile abstraction. The latter was deemed overkill for just the MD5 hashes, but support for inline sources in the DWARF 5 line table tipped the scales. This patch moves the MD5 checksum into the new SupportFile class. Added: Modified: lldb/include/lldb/Utility/FileSpec.h lldb/include/lldb/Utility/FileSpecList.h lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp lldb/source/Utility/FileSpec.cpp lldb/unittests/Utility/FileSpecTest.cpp Removed: ################################################################################ diff --git a/lldb/include/lldb/Utility/FileSpec.h b/lldb/include/lldb/Utility/FileSpec.h index e4276e8398b464..2e867b2b40b94f 100644 --- a/lldb/include/lldb/Utility/FileSpec.h +++ b/lldb/include/lldb/Utility/FileSpec.h @@ -13,7 +13,6 @@ #include <optional> #include <string> -#include "lldb/Utility/Checksum.h" #include "lldb/Utility/ConstString.h" #include "llvm/ADT/StringRef.h" @@ -72,12 +71,8 @@ class FileSpec { /// \param[in] style /// The style of the path /// - /// \param[in] checksum - /// The MD5 checksum of the path. - /// /// \see FileSpec::SetFile (const char *path) - explicit FileSpec(llvm::StringRef path, Style style = Style::native, - const Checksum &checksum = {}); + explicit FileSpec(llvm::StringRef path, Style style = Style::native); explicit FileSpec(llvm::StringRef path, const llvm::Triple &triple); @@ -367,11 +362,7 @@ class FileSpec { /// /// \param[in] style /// The style for the given path. - /// - /// \param[in] checksum - /// The checksum for the given path. - void SetFile(llvm::StringRef path, Style style, - const Checksum &checksum = {}); + void SetFile(llvm::StringRef path, Style style); /// Change the file specified with a new path. /// @@ -414,19 +405,13 @@ class FileSpec { /// The lifetime of the StringRefs is tied to the lifetime of the FileSpec. std::vector<llvm::StringRef> GetComponents() const; - /// Return the checksum for this FileSpec or all zeros if there is none. - const Checksum &GetChecksum() const { return m_checksum; }; - protected: // Convenience method for setting the file without changing the style. void SetFile(llvm::StringRef path); /// Called anytime m_directory or m_filename is changed to clear any cached /// state in this object. - void PathWasModified() { - m_checksum = Checksum(); - m_absolute = Absolute::Calculate; - } + void PathWasModified() { m_absolute = Absolute::Calculate; } enum class Absolute : uint8_t { Calculate, @@ -440,9 +425,6 @@ class FileSpec { /// The unique'd filename path. ConstString m_filename; - /// The optional MD5 checksum of the file. - Checksum m_checksum; - /// Cache whether this path is absolute. mutable Absolute m_absolute = Absolute::Calculate; diff --git a/lldb/include/lldb/Utility/FileSpecList.h b/lldb/include/lldb/Utility/FileSpecList.h index 8cccb194999917..c1107ad1135dd2 100644 --- a/lldb/include/lldb/Utility/FileSpecList.h +++ b/lldb/include/lldb/Utility/FileSpecList.h @@ -9,6 +9,7 @@ #ifndef LLDB_CORE_FILESPECLIST_H #define LLDB_CORE_FILESPECLIST_H +#include "lldb/Utility/Checksum.h" #include "lldb/Utility/FileSpec.h" #include <cstddef> @@ -24,17 +25,22 @@ class Stream; class SupportFile { protected: FileSpec m_file_spec; + Checksum m_checksum; public: - SupportFile(const FileSpec &spec) : m_file_spec(spec) {} + SupportFile(const FileSpec &spec) : m_file_spec(spec), m_checksum() {} + SupportFile(const FileSpec &spec, const Checksum &checksum) + : m_file_spec(spec), m_checksum(checksum) {} SupportFile(const SupportFile &other) = delete; SupportFile(SupportFile &&other) = default; virtual ~SupportFile() = default; bool operator==(const SupportFile &other) { - return m_file_spec == other.m_file_spec; + return m_file_spec == other.m_file_spec && m_checksum == other.m_checksum; } /// Return the file name only. Useful for resolving breakpoints by file name. const FileSpec &GetSpecOnly() const { return m_file_spec; }; + /// Return the checksum or all zeros if there is none. + const Checksum &GetChecksum() const { return m_checksum; }; /// Materialize the file to disk and return the path to that temporary file. virtual const FileSpec &Materialize() { return m_file_spec; } }; @@ -90,7 +96,7 @@ class SupportFileList { template <class... Args> void EmplaceBack(Args &&...args) { m_files.push_back( - std::make_unique<SupportFile>(FileSpec(std::forward<Args>(args)...))); + std::make_unique<SupportFile>(std::forward<Args>(args)...)); } protected: diff --git a/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp b/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp index 1a16b70f42fe1f..3371803b4ca04a 100644 --- a/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp +++ b/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp @@ -294,7 +294,7 @@ static void ParseSupportFilesFromPrologue( } // Unconditionally add an entry, so the indices match up. - support_files.EmplaceBack(remapped_file, style, checksum); + support_files.EmplaceBack(FileSpec(remapped_file, style), checksum); } } diff --git a/lldb/source/Utility/FileSpec.cpp b/lldb/source/Utility/FileSpec.cpp index 5387be9a681f68..4bebbc9ff175fd 100644 --- a/lldb/source/Utility/FileSpec.cpp +++ b/lldb/source/Utility/FileSpec.cpp @@ -68,9 +68,8 @@ void Denormalize(llvm::SmallVectorImpl<char> &path, FileSpec::Style style) { FileSpec::FileSpec() : m_style(GetNativeStyle()) {} // Default constructor that can take an optional full path to a file on disk. -FileSpec::FileSpec(llvm::StringRef path, Style style, const Checksum &checksum) - : m_checksum(checksum), m_style(style) { - SetFile(path, style, checksum); +FileSpec::FileSpec(llvm::StringRef path, Style style) : m_style(style) { + SetFile(path, style); } FileSpec::FileSpec(llvm::StringRef path, const llvm::Triple &triple) @@ -172,11 +171,9 @@ void FileSpec::SetFile(llvm::StringRef pathname) { SetFile(pathname, m_style); } // Update the contents of this object with a new path. The path will be split // up into a directory and filename and stored as uniqued string values for // quick comparison and efficient memory usage. -void FileSpec::SetFile(llvm::StringRef pathname, Style style, - const Checksum &checksum) { +void FileSpec::SetFile(llvm::StringRef pathname, Style style) { Clear(); m_style = (style == Style::native) ? GetNativeStyle() : style; - m_checksum = checksum; if (pathname.empty()) return; diff --git a/lldb/unittests/Utility/FileSpecTest.cpp b/lldb/unittests/Utility/FileSpecTest.cpp index 9faad10e47301a..2a62f6b1e76120 100644 --- a/lldb/unittests/Utility/FileSpecTest.cpp +++ b/lldb/unittests/Utility/FileSpecTest.cpp @@ -534,16 +534,3 @@ TEST(FileSpecTest, TestGetComponents) { EXPECT_EQ(file_spec.GetComponents(), pair.second); } } - -TEST(FileSpecTest, TestChecksum) { - Checksum checksum(llvm::MD5::MD5Result{ - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}}); - FileSpec file_spec("/foo/bar", FileSpec::Style::posix, checksum); - EXPECT_TRUE(static_cast<bool>(file_spec.GetChecksum())); - EXPECT_EQ(file_spec.GetChecksum(), checksum); - - FileSpec copy = file_spec; - - EXPECT_TRUE(static_cast<bool>(copy.GetChecksum())); - EXPECT_EQ(file_spec.GetChecksum(), copy.GetChecksum()); -} _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits