https://github.com/JDevlieghere created 
https://github.com/llvm/llvm-project/pull/90998

Reverts llvm/llvm-project#90921

>From 2beb507e10a6dbe6387bc67143601a66b0168293 Mon Sep 17 00:00:00 2001
From: Jonas Devlieghere <jo...@devlieghere.com>
Date: Fri, 3 May 2024 12:14:36 -0700
Subject: [PATCH] Revert "[lldb] Unify CalculateMD5 return types (#90921)"

This reverts commit 2f58b9aae2d6f1aeaecd98766ef31cebc0dcbb5b.
---
 lldb/include/lldb/Target/Platform.h           |  4 +--
 .../include/lldb/Target/RemoteAwarePlatform.h |  4 +--
 .../Platform/MacOSX/PlatformDarwinDevice.cpp  | 16 ++++-----
 .../gdb-server/PlatformRemoteGDBServer.cpp    |  8 ++---
 .../gdb-server/PlatformRemoteGDBServer.h      |  4 +--
 .../GDBRemoteCommunicationClient.cpp          | 30 ++++++----------
 .../gdb-remote/GDBRemoteCommunicationClient.h |  2 +-
 lldb/source/Target/Platform.cpp               | 36 ++++++++++---------
 lldb/source/Target/RemoteAwarePlatform.cpp    |  8 ++---
 9 files changed, 52 insertions(+), 60 deletions(-)

diff --git a/lldb/include/lldb/Target/Platform.h 
b/lldb/include/lldb/Target/Platform.h
index e05c79cb501bf0..ad9c9dcbe684ba 100644
--- a/lldb/include/lldb/Target/Platform.h
+++ b/lldb/include/lldb/Target/Platform.h
@@ -649,8 +649,8 @@ class Platform : public PluginInterface {
 
   virtual std::string GetPlatformSpecificConnectionInformation() { return ""; }
 
-  virtual llvm::ErrorOr<llvm::MD5::MD5Result>
-  CalculateMD5(const FileSpec &file_spec);
+  virtual bool CalculateMD5(const FileSpec &file_spec, uint64_t &low,
+                            uint64_t &high);
 
   virtual uint32_t GetResumeCountForLaunchInfo(ProcessLaunchInfo &launch_info) 
{
     return 1;
diff --git a/lldb/include/lldb/Target/RemoteAwarePlatform.h 
b/lldb/include/lldb/Target/RemoteAwarePlatform.h
index 0b9d79f9ff0380..d183815e1c8b07 100644
--- a/lldb/include/lldb/Target/RemoteAwarePlatform.h
+++ b/lldb/include/lldb/Target/RemoteAwarePlatform.h
@@ -58,8 +58,8 @@ class RemoteAwarePlatform : public Platform {
   Status SetFilePermissions(const FileSpec &file_spec,
                             uint32_t file_permissions) override;
 
-  llvm::ErrorOr<llvm::MD5::MD5Result>
-  CalculateMD5(const FileSpec &file_spec) override;
+  bool CalculateMD5(const FileSpec &file_spec, uint64_t &low,
+                    uint64_t &high) override;
 
   Status GetFileWithUUID(const FileSpec &platform_file, const UUID *uuid,
                          FileSpec &local_file) override;
diff --git a/lldb/source/Plugins/Platform/MacOSX/PlatformDarwinDevice.cpp 
b/lldb/source/Plugins/Platform/MacOSX/PlatformDarwinDevice.cpp
index 82156aca8cf159..52777909a1f825 100644
--- a/lldb/source/Plugins/Platform/MacOSX/PlatformDarwinDevice.cpp
+++ b/lldb/source/Plugins/Platform/MacOSX/PlatformDarwinDevice.cpp
@@ -405,21 +405,17 @@ lldb_private::Status 
PlatformDarwinDevice::GetSharedModuleWithLocalCache(
           // when going over the *slow* GDB remote transfer mechanism we first
           // check the hashes of the files - and only do the actual transfer if
           // they differ
+          uint64_t high_local, high_remote, low_local, low_remote;
           auto MD5 = llvm::sys::fs::md5_contents(module_cache_spec.GetPath());
           if (!MD5)
             return Status(MD5.getError());
+          std::tie(high_local, low_local) = MD5->words();
 
-          Log *log = GetLog(LLDBLog::Platform);
-          bool requires_transfer = true;
-          llvm::ErrorOr<llvm::MD5::MD5Result> remote_md5 =
-              m_remote_platform_sp->CalculateMD5(module_spec.GetFileSpec());
-          if (std::error_code ec = remote_md5.getError())
-            LLDB_LOG(log, "couldn't get md5 sum from remote: {0}",
-                     ec.message());
-          else
-            requires_transfer = *MD5 != *remote_md5;
-          if (requires_transfer) {
+          m_remote_platform_sp->CalculateMD5(module_spec.GetFileSpec(),
+                                             low_remote, high_remote);
+          if (low_local != low_remote || high_local != high_remote) {
             // bring in the remote file
+            Log *log = GetLog(LLDBLog::Platform);
             LLDB_LOGF(log,
                       "[%s] module %s/%s needs to be replaced from remote 
copy",
                       (IsHost() ? "host" : "remote"),
diff --git 
a/lldb/source/Plugins/Platform/gdb-server/PlatformRemoteGDBServer.cpp 
b/lldb/source/Plugins/Platform/gdb-server/PlatformRemoteGDBServer.cpp
index 4684947ede209f..0dce5add2e3759 100644
--- a/lldb/source/Plugins/Platform/gdb-server/PlatformRemoteGDBServer.cpp
+++ b/lldb/source/Plugins/Platform/gdb-server/PlatformRemoteGDBServer.cpp
@@ -684,12 +684,12 @@ Status PlatformRemoteGDBServer::RunShellCommand(
                                           signo_ptr, command_output, timeout);
 }
 
-llvm::ErrorOr<llvm::MD5::MD5Result>
-PlatformRemoteGDBServer::CalculateMD5(const FileSpec &file_spec) {
+bool PlatformRemoteGDBServer::CalculateMD5(const FileSpec &file_spec,
+                                           uint64_t &low, uint64_t &high) {
   if (!IsConnected())
-    return std::make_error_code(std::errc::not_connected);
+    return false;
 
-  return m_gdb_client_up->CalculateMD5(file_spec);
+  return m_gdb_client_up->CalculateMD5(file_spec, low, high);
 }
 
 void PlatformRemoteGDBServer::CalculateTrapHandlerSymbolNames() {
diff --git a/lldb/source/Plugins/Platform/gdb-server/PlatformRemoteGDBServer.h 
b/lldb/source/Plugins/Platform/gdb-server/PlatformRemoteGDBServer.h
index 0ae1f3cb4199cf..d83fc386f59427 100644
--- a/lldb/source/Plugins/Platform/gdb-server/PlatformRemoteGDBServer.h
+++ b/lldb/source/Plugins/Platform/gdb-server/PlatformRemoteGDBServer.h
@@ -146,8 +146,8 @@ class PlatformRemoteGDBServer : public Platform, private 
UserIDResolver {
 
   void CalculateTrapHandlerSymbolNames() override;
 
-  llvm::ErrorOr<llvm::MD5::MD5Result>
-  CalculateMD5(const FileSpec &file_spec) override;
+  bool CalculateMD5(const FileSpec &file_spec, uint64_t &low,
+                    uint64_t &high) override;
 
   const lldb::UnixSignalsSP &GetRemoteUnixSignals() override;
 
diff --git 
a/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.cpp 
b/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.cpp
index db9fb37a9a3c30..7498a070c26094 100644
--- a/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.cpp
+++ b/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.cpp
@@ -3418,8 +3418,8 @@ bool GDBRemoteCommunicationClient::GetFileExists(
   return true;
 }
 
-llvm::ErrorOr<llvm::MD5::MD5Result> GDBRemoteCommunicationClient::CalculateMD5(
-    const lldb_private::FileSpec &file_spec) {
+bool GDBRemoteCommunicationClient::CalculateMD5(
+    const lldb_private::FileSpec &file_spec, uint64_t &low, uint64_t &high) {
   std::string path(file_spec.GetPath(false));
   lldb_private::StreamString stream;
   stream.PutCString("vFile:MD5:");
@@ -3428,11 +3428,11 @@ llvm::ErrorOr<llvm::MD5::MD5Result> 
GDBRemoteCommunicationClient::CalculateMD5(
   if (SendPacketAndWaitForResponse(stream.GetString(), response) ==
       PacketResult::Success) {
     if (response.GetChar() != 'F')
-      return std::make_error_code(std::errc::illegal_byte_sequence);
+      return false;
     if (response.GetChar() != ',')
-      return std::make_error_code(std::errc::illegal_byte_sequence);
+      return false;
     if (response.Peek() && *response.Peek() == 'x')
-      return std::make_error_code(std::errc::no_such_file_or_directory);
+      return false;
 
     // GDBRemoteCommunicationServerCommon::Handle_vFile_MD5 concatenates low 
and
     // high hex strings. We can't use response.GetHexMaxU64 because that can't
@@ -3455,33 +3455,25 @@ llvm::ErrorOr<llvm::MD5::MD5Result> 
GDBRemoteCommunicationClient::CalculateMD5(
     auto part =
         response.GetStringRef().substr(response.GetFilePos(), MD5_HALF_LENGTH);
     if (part.size() != MD5_HALF_LENGTH)
-      return std::make_error_code(std::errc::illegal_byte_sequence);
+      return false;
     response.SetFilePos(response.GetFilePos() + part.size());
 
-    uint64_t low;
     if (part.getAsInteger(/*radix=*/16, low))
-      return std::make_error_code(std::errc::illegal_byte_sequence);
+      return false;
 
     // Get high part
     part =
         response.GetStringRef().substr(response.GetFilePos(), MD5_HALF_LENGTH);
     if (part.size() != MD5_HALF_LENGTH)
-      return std::make_error_code(std::errc::illegal_byte_sequence);
+      return false;
     response.SetFilePos(response.GetFilePos() + part.size());
 
-    uint64_t high;
     if (part.getAsInteger(/*radix=*/16, high))
-      return std::make_error_code(std::errc::illegal_byte_sequence);
-
-    llvm::MD5::MD5Result result;
-    llvm::support::endian::write<uint64_t, llvm::endianness::little>(
-        result.data(), low);
-    llvm::support::endian::write<uint64_t, llvm::endianness::little>(
-        result.data() + 8, high);
+      return false;
 
-    return result;
+    return true;
   }
-  return std::make_error_code(std::errc::operation_canceled);
+  return false;
 }
 
 bool GDBRemoteCommunicationClient::AvoidGPackets(ProcessGDBRemote *process) {
diff --git 
a/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.h 
b/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.h
index 898d176abc3465..4be7eb00f42b97 100644
--- a/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.h
+++ b/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.h
@@ -392,7 +392,7 @@ class GDBRemoteCommunicationClient : public 
GDBRemoteClientBase {
           *command_output, // Pass nullptr if you don't want the command output
       const Timeout<std::micro> &timeout);
 
-  llvm::ErrorOr<llvm::MD5::MD5Result> CalculateMD5(const FileSpec &file_spec);
+  bool CalculateMD5(const FileSpec &file_spec, uint64_t &low, uint64_t &high);
 
   lldb::DataBufferSP ReadRegister(
       lldb::tid_t tid,
diff --git a/lldb/source/Target/Platform.cpp b/lldb/source/Target/Platform.cpp
index 4af4aa68ccd01c..91483ba008f4a3 100644
--- a/lldb/source/Target/Platform.cpp
+++ b/lldb/source/Target/Platform.cpp
@@ -1199,22 +1199,22 @@ Status Platform::PutFile(const FileSpec &source, const 
FileSpec &destination,
   Status error;
 
   bool requires_upload = true;
-  llvm::ErrorOr<llvm::MD5::MD5Result> remote_md5 = CalculateMD5(destination);
-  if (std::error_code ec = remote_md5.getError()) {
-    LLDB_LOG(log, "[PutFile] couldn't get md5 sum of destination: {0}",
-             ec.message());
+  uint64_t dest_md5_low, dest_md5_high;
+  bool success = CalculateMD5(destination, dest_md5_low, dest_md5_high);
+  if (!success) {
+    LLDB_LOGF(log, "[PutFile] couldn't get md5 sum of destination");
   } else {
-    llvm::ErrorOr<llvm::MD5::MD5Result> local_md5 =
-        llvm::sys::fs::md5_contents(source.GetPath());
-    if (std::error_code ec = local_md5.getError()) {
-      LLDB_LOG(log, "[PutFile] couldn't get md5 sum of source: {0}",
-               ec.message());
+    auto local_md5 = llvm::sys::fs::md5_contents(source.GetPath());
+    if (!local_md5) {
+      LLDB_LOGF(log, "[PutFile] couldn't get md5 sum of source");
     } else {
+      const auto [local_md5_high, local_md5_low] = local_md5->words();
       LLDB_LOGF(log, "[PutFile] destination md5: %016" PRIx64 "%016" PRIx64,
-                remote_md5->high(), remote_md5->low());
+                dest_md5_high, dest_md5_low);
       LLDB_LOGF(log, "[PutFile]       local md5: %016" PRIx64 "%016" PRIx64,
-                local_md5->high(), local_md5->low());
-      requires_upload = *remote_md5 != *local_md5;
+                local_md5_high, local_md5_low);
+      requires_upload =
+          local_md5_high != dest_md5_high || local_md5_low != dest_md5_low;
     }
   }
 
@@ -1339,11 +1339,15 @@ lldb_private::Status Platform::RunShellCommand(
   return Status("unable to run a remote command without a platform");
 }
 
-llvm::ErrorOr<llvm::MD5::MD5Result>
-Platform::CalculateMD5(const FileSpec &file_spec) {
+bool Platform::CalculateMD5(const FileSpec &file_spec, uint64_t &low,
+                            uint64_t &high) {
   if (!IsHost())
-    return std::make_error_code(std::errc::not_supported);
-  return llvm::sys::fs::md5_contents(file_spec.GetPath());
+    return false;
+  auto Result = llvm::sys::fs::md5_contents(file_spec.GetPath());
+  if (!Result)
+    return false;
+  std::tie(high, low) = Result->words();
+  return true;
 }
 
 void Platform::SetLocalCacheDirectory(const char *local) {
diff --git a/lldb/source/Target/RemoteAwarePlatform.cpp 
b/lldb/source/Target/RemoteAwarePlatform.cpp
index 9a41a423cadd3b..0bd6c9251c858a 100644
--- a/lldb/source/Target/RemoteAwarePlatform.cpp
+++ b/lldb/source/Target/RemoteAwarePlatform.cpp
@@ -266,11 +266,11 @@ Status RemoteAwarePlatform::Unlink(const FileSpec 
&file_spec) {
   return Platform::Unlink(file_spec);
 }
 
-llvm::ErrorOr<llvm::MD5::MD5Result>
-RemoteAwarePlatform::CalculateMD5(const FileSpec &file_spec) {
+bool RemoteAwarePlatform::CalculateMD5(const FileSpec &file_spec, uint64_t 
&low,
+                                       uint64_t &high) {
   if (m_remote_platform_sp)
-    return m_remote_platform_sp->CalculateMD5(file_spec);
-  return Platform::CalculateMD5(file_spec);
+    return m_remote_platform_sp->CalculateMD5(file_spec, low, high);
+  return Platform::CalculateMD5(file_spec, low, high);
 }
 
 FileSpec RemoteAwarePlatform::GetRemoteWorkingDirectory() {

_______________________________________________
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to