Author: Jonas Devlieghere Date: 2022-03-03T11:21:00-08:00 New Revision: 34eb15b5c30601085acb0921f5410aafc0389232
URL: https://github.com/llvm/llvm-project/commit/34eb15b5c30601085acb0921f5410aafc0389232 DIFF: https://github.com/llvm/llvm-project/commit/34eb15b5c30601085acb0921f5410aafc0389232.diff LOG: [lldb] Remove reproducer verifier and corresponding command This removes the reproducer verifier and the corresponding `reproducer verify` subcommand. Added: Modified: lldb/include/lldb/Utility/Reproducer.h lldb/source/Commands/CommandObjectReproducer.cpp lldb/source/Utility/Reproducer.cpp lldb/test/Shell/Reproducer/TestDebugSymbols.test Removed: lldb/test/Shell/Reproducer/TestVerify.test ################################################################################ diff --git a/lldb/include/lldb/Utility/Reproducer.h b/lldb/include/lldb/Utility/Reproducer.h index 35043d6885111..672f82fcb9565 100644 --- a/lldb/include/lldb/Utility/Reproducer.h +++ b/lldb/include/lldb/Utility/Reproducer.h @@ -220,17 +220,6 @@ class Reproducer { mutable std::mutex m_mutex; }; -class Verifier { -public: - Verifier(Loader *loader) : m_loader(loader) {} - void Verify(llvm::function_ref<void(llvm::StringRef)> error_callback, - llvm::function_ref<void(llvm::StringRef)> warning_callback, - llvm::function_ref<void(llvm::StringRef)> note_callback) const; - -private: - Loader *m_loader; -}; - struct ReplayOptions { bool verify = true; bool check_version = true; diff --git a/lldb/source/Commands/CommandObjectReproducer.cpp b/lldb/source/Commands/CommandObjectReproducer.cpp index 7e0ea65e148ee..8b67b27c10f95 100644 --- a/lldb/source/Commands/CommandObjectReproducer.cpp +++ b/lldb/source/Commands/CommandObjectReproducer.cpp @@ -587,101 +587,6 @@ class CommandObjectReproducerDump : public CommandObjectParsed { CommandOptions m_options; }; -class CommandObjectReproducerVerify : public CommandObjectParsed { -public: - CommandObjectReproducerVerify(CommandInterpreter &interpreter) - : CommandObjectParsed(interpreter, "reproducer verify", - "Verify the contents of a reproducer. " - "If no reproducer is specified during replay, it " - "verifies the content of the current reproducer.", - nullptr) {} - - ~CommandObjectReproducerVerify() override = default; - - Options *GetOptions() override { return &m_options; } - - class CommandOptions : public Options { - public: - CommandOptions() {} - - ~CommandOptions() override = default; - - Status SetOptionValue(uint32_t option_idx, StringRef option_arg, - ExecutionContext *execution_context) override { - Status error; - const int short_option = m_getopt_table[option_idx].val; - - switch (short_option) { - case 'f': - file.SetFile(option_arg, FileSpec::Style::native); - FileSystem::Instance().Resolve(file); - break; - default: - llvm_unreachable("Unimplemented option"); - } - - return error; - } - - void OptionParsingStarting(ExecutionContext *execution_context) override { - file.Clear(); - } - - ArrayRef<OptionDefinition> GetDefinitions() override { - return makeArrayRef(g_reproducer_verify_options); - } - - FileSpec file; - }; - -protected: - bool DoExecute(Args &command, CommandReturnObject &result) override { - if (!command.empty()) { - result.AppendErrorWithFormat("'%s' takes no arguments", - m_cmd_name.c_str()); - return false; - } - - llvm::Optional<Loader> loader_storage; - Loader *loader = - GetLoaderFromPathOrCurrent(loader_storage, result, m_options.file); - if (!loader) - return false; - - bool errors = false; - auto error_callback = [&](llvm::StringRef error) { - errors = true; - result.AppendError(error); - }; - - bool warnings = false; - auto warning_callback = [&](llvm::StringRef warning) { - warnings = true; - result.AppendWarning(warning); - }; - - auto note_callback = [&](llvm::StringRef warning) { - result.AppendMessage(warning); - }; - - Verifier verifier(loader); - verifier.Verify(error_callback, warning_callback, note_callback); - - if (warnings || errors) { - result.AppendMessage("reproducer verification failed"); - result.SetStatus(eReturnStatusFailed); - } else { - result.AppendMessage("reproducer verification succeeded"); - result.SetStatus(eReturnStatusSuccessFinishResult); - } - - return result.Succeeded(); - } - -private: - CommandOptions m_options; -}; - CommandObjectReproducer::CommandObjectReproducer( CommandInterpreter &interpreter) : CommandObjectMultiword( @@ -704,8 +609,6 @@ CommandObjectReproducer::CommandObjectReproducer( new CommandObjectReproducerStatus(interpreter))); LoadSubCommand("dump", CommandObjectSP(new CommandObjectReproducerDump(interpreter))); - LoadSubCommand("verify", CommandObjectSP( - new CommandObjectReproducerVerify(interpreter))); LoadSubCommand("xcrash", CommandObjectSP( new CommandObjectReproducerXCrash(interpreter))); } diff --git a/lldb/source/Utility/Reproducer.cpp b/lldb/source/Utility/Reproducer.cpp index 1e71dba472ed7..a2ada12140cf6 100644 --- a/lldb/source/Utility/Reproducer.cpp +++ b/lldb/source/Utility/Reproducer.cpp @@ -230,97 +230,6 @@ bool Loader::HasFile(StringRef file) { return (it != m_files.end()) && (*it == file); } -void Verifier::Verify( - llvm::function_ref<void(llvm::StringRef)> error_callback, - llvm::function_ref<void(llvm::StringRef)> warning_callback, - llvm::function_ref<void(llvm::StringRef)> note_callack) const { - if (!m_loader) { - error_callback("invalid loader"); - return; - } - - FileSpec vfs_mapping = m_loader->GetFile<FileProvider::Info>(); - ErrorOr<std::unique_ptr<MemoryBuffer>> buffer = - vfs::getRealFileSystem()->getBufferForFile(vfs_mapping.GetPath()); - if (!buffer) { - error_callback("unable to read files: " + buffer.getError().message()); - return; - } - - IntrusiveRefCntPtr<vfs::FileSystem> vfs = vfs::getVFSFromYAML( - std::move(buffer.get()), nullptr, vfs_mapping.GetPath()); - if (!vfs) { - error_callback("unable to initialize the virtual file system"); - return; - } - - auto &redirecting_vfs = static_cast<vfs::RedirectingFileSystem &>(*vfs); - redirecting_vfs.setFallthrough(false); - - { - llvm::Expected<std::string> working_dir = - GetDirectoryFrom<WorkingDirectoryProvider>(m_loader); - if (working_dir) { - if (!vfs->exists(*working_dir)) - warning_callback("working directory '" + *working_dir + "' not in VFS"); - vfs->setCurrentWorkingDirectory(*working_dir); - } else { - warning_callback("no working directory in reproducer: " + - toString(working_dir.takeError())); - } - } - - { - llvm::Expected<std::string> home_dir = - GetDirectoryFrom<HomeDirectoryProvider>(m_loader); - if (home_dir) { - if (!vfs->exists(*home_dir)) - warning_callback("home directory '" + *home_dir + "' not in VFS"); - } else { - warning_callback("no home directory in reproducer: " + - toString(home_dir.takeError())); - } - } - - { - Expected<std::string> symbol_files = - m_loader->LoadBuffer<SymbolFileProvider>(); - if (symbol_files) { - std::vector<SymbolFileProvider::Entry> entries; - llvm::yaml::Input yin(*symbol_files); - yin >> entries; - for (const auto &entry : entries) { - if (!entry.module_path.empty() && !vfs->exists(entry.module_path)) { - warning_callback("'" + entry.module_path + "': module path for " + - entry.uuid + " not in VFS"); - } - if (!entry.symbol_path.empty() && !vfs->exists(entry.symbol_path)) { - warning_callback("'" + entry.symbol_path + "': symbol path for " + - entry.uuid + " not in VFS"); - } - } - } else { - llvm::consumeError(symbol_files.takeError()); - } - } - - // Missing files in the VFS are notes rather than warnings. Because the VFS - // is a snapshot, temporary files could have been removed between when they - // were recorded and when the reproducer was generated. - std::vector<llvm::StringRef> roots = redirecting_vfs.getRoots(); - for (llvm::StringRef root : roots) { - std::error_code ec; - vfs::recursive_directory_iterator iter(*vfs, root, ec); - vfs::recursive_directory_iterator end; - for (; iter != end && !ec; iter.increment(ec)) { - ErrorOr<vfs::Status> status = vfs->status(iter->path()); - if (!status) - note_callack("'" + iter->path().str() + - "': " + status.getError().message()); - } - } -} - static llvm::Error addPaths(StringRef path, function_ref<void(StringRef)> callback) { auto buffer = llvm::MemoryBuffer::getFile(path); diff --git a/lldb/test/Shell/Reproducer/TestDebugSymbols.test b/lldb/test/Shell/Reproducer/TestDebugSymbols.test index 986452ec35e86..6a3cc1249cbd1 100644 --- a/lldb/test/Shell/Reproducer/TestDebugSymbols.test +++ b/lldb/test/Shell/Reproducer/TestDebugSymbols.test @@ -12,7 +12,3 @@ # DUMP: uuid: AD52358C-94F8-3796-ADD6-B20FFAC00E5C # DUMP-NEXT: module path: /path/to/unstripped/executable # DUMP-NEXT: symbol path: /path/to/foo.dSYM/Contents/Resources/DWARF/foo - -# RUN: not %lldb -b -o 'reproducer verify -f %t.repro' 2>&1 | FileCheck %s --check-prefix VERIFY -# VERIFY: warning: '/path/to/unstripped/executable': module path for AD52358C-94F8-3796-ADD6-B20FFAC00E5C not in VFS -# VERIFY: warning: '/path/to/foo.dSYM/Contents/Resources/DWARF/foo': symbol path for AD52358C-94F8-3796-ADD6-B20FFAC00E5C not in VFS diff --git a/lldb/test/Shell/Reproducer/TestVerify.test b/lldb/test/Shell/Reproducer/TestVerify.test deleted file mode 100644 index b03a670293faa..0000000000000 --- a/lldb/test/Shell/Reproducer/TestVerify.test +++ /dev/null @@ -1,15 +0,0 @@ -# RUN: rm -rf %t.repro -# RUN: rm -rf %t.repro2 -# RUN: %clang_host %S/Inputs/simple.c -g -o %t.out -# RUN: %lldb -x -b -s %S/Inputs/GDBRemoteCapture.in --capture --capture-path %t.repro %t.out - -# RUN: echo "/bogus/home/dir" > %t.repro/home.txt -# RUN: echo "/bogus/current/working/dir" > %t.repro/cwd.txt - -# RUN: not %lldb -b -o 'reproducer verify -f %t.repro' 2>&1 | FileCheck %s -# CHECK: working directory '/bogus/current/working/dir' not in VFS -# CHECK: home directory '/bogus/home/dir' not in VFS - -# RUN: rm %t.repro/root/%S/Inputs/GDBRemoteCapture.in -# RUN: echo "CHECK: '%S/Inputs/GDBRemoteCapture.in': No such file or directory" > %t.check -# RUN: not %lldb -b -o 'reproducer verify -f %t.repro' 2>&1 | FileCheck %t.check _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits