forked from OSchip/llvm-project
Delete LLDB's MD5 code. Use LLVM instead.
Differential Revision: https://reviews.llvm.org/D31108 llvm-svn: 298325
This commit is contained in:
parent
7e3050ca1a
commit
076a259938
|
@ -39,16 +39,6 @@ public:
|
||||||
|
|
||||||
static Error ResolveSymbolicLink(const FileSpec &src, FileSpec &dst);
|
static Error ResolveSymbolicLink(const FileSpec &src, FileSpec &dst);
|
||||||
|
|
||||||
static bool CalculateMD5(const FileSpec &file_spec, uint64_t &low,
|
|
||||||
uint64_t &high);
|
|
||||||
static bool CalculateMD5(const FileSpec &file_spec, uint64_t offset,
|
|
||||||
uint64_t length, uint64_t &low, uint64_t &high);
|
|
||||||
|
|
||||||
static bool CalculateMD5AsString(const FileSpec &file_spec,
|
|
||||||
std::string &digest_str);
|
|
||||||
static bool CalculateMD5AsString(const FileSpec &file_spec, uint64_t offset,
|
|
||||||
uint64_t length, std::string &digest_str);
|
|
||||||
|
|
||||||
/// Return \b true if \a spec is on a locally mounted file system, \b false
|
/// Return \b true if \a spec is on a locally mounted file system, \b false
|
||||||
/// otherwise.
|
/// otherwise.
|
||||||
static bool IsLocal(const FileSpec &spec);
|
static bool IsLocal(const FileSpec &spec);
|
||||||
|
|
|
@ -10,7 +10,6 @@
|
||||||
#include "lldb/Host/FileSystem.h"
|
#include "lldb/Host/FileSystem.h"
|
||||||
|
|
||||||
#include "llvm/Support/FileSystem.h"
|
#include "llvm/Support/FileSystem.h"
|
||||||
#include "llvm/Support/MD5.h"
|
|
||||||
|
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
#include <fstream>
|
#include <fstream>
|
||||||
|
@ -19,77 +18,6 @@
|
||||||
using namespace lldb;
|
using namespace lldb;
|
||||||
using namespace lldb_private;
|
using namespace lldb_private;
|
||||||
|
|
||||||
namespace {
|
|
||||||
|
|
||||||
bool CalcMD5(const FileSpec &file_spec, uint64_t offset, uint64_t length,
|
|
||||||
llvm::MD5::MD5Result &md5_result) {
|
|
||||||
llvm::MD5 md5_hash;
|
|
||||||
std::ifstream file(file_spec.GetPath(), std::ios::binary);
|
|
||||||
if (!file.is_open())
|
|
||||||
return false;
|
|
||||||
|
|
||||||
if (offset > 0)
|
|
||||||
file.seekg(offset, file.beg);
|
|
||||||
|
|
||||||
std::vector<char> read_buf(4096);
|
|
||||||
uint64_t total_read_bytes = 0;
|
|
||||||
while (!file.eof()) {
|
|
||||||
const uint64_t to_read =
|
|
||||||
(length > 0) ? std::min(static_cast<uint64_t>(read_buf.size()),
|
|
||||||
length - total_read_bytes)
|
|
||||||
: read_buf.size();
|
|
||||||
if (to_read == 0)
|
|
||||||
break;
|
|
||||||
|
|
||||||
file.read(&read_buf[0], to_read);
|
|
||||||
const auto read_bytes = file.gcount();
|
|
||||||
if (read_bytes == 0)
|
|
||||||
break;
|
|
||||||
|
|
||||||
md5_hash.update(llvm::StringRef(&read_buf[0], read_bytes));
|
|
||||||
total_read_bytes += read_bytes;
|
|
||||||
}
|
|
||||||
|
|
||||||
md5_hash.final(md5_result);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
} // namespace
|
|
||||||
|
|
||||||
bool FileSystem::CalculateMD5(const FileSpec &file_spec, uint64_t &low,
|
|
||||||
uint64_t &high) {
|
|
||||||
return CalculateMD5(file_spec, 0, 0, low, high);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool FileSystem::CalculateMD5(const FileSpec &file_spec, uint64_t offset,
|
|
||||||
uint64_t length, uint64_t &low, uint64_t &high) {
|
|
||||||
llvm::MD5::MD5Result md5_result;
|
|
||||||
if (!CalcMD5(file_spec, offset, length, md5_result))
|
|
||||||
return false;
|
|
||||||
|
|
||||||
std::tie(high, low) = md5_result.words();
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool FileSystem::CalculateMD5AsString(const FileSpec &file_spec,
|
|
||||||
std::string &digest_str) {
|
|
||||||
return CalculateMD5AsString(file_spec, 0, 0, digest_str);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool FileSystem::CalculateMD5AsString(const FileSpec &file_spec,
|
|
||||||
uint64_t offset, uint64_t length,
|
|
||||||
std::string &digest_str) {
|
|
||||||
llvm::MD5::MD5Result md5_result;
|
|
||||||
if (!CalcMD5(file_spec, offset, length, md5_result))
|
|
||||||
return false;
|
|
||||||
|
|
||||||
llvm::SmallString<32> result_str;
|
|
||||||
llvm::MD5::stringifyResult(md5_result, result_str);
|
|
||||||
digest_str = result_str.c_str();
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
llvm::sys::TimePoint<>
|
llvm::sys::TimePoint<>
|
||||||
FileSystem::GetModificationTime(const FileSpec &file_spec) {
|
FileSystem::GetModificationTime(const FileSpec &file_spec) {
|
||||||
llvm::sys::fs::file_status status;
|
llvm::sys::fs::file_status status;
|
||||||
|
|
|
@ -25,7 +25,6 @@
|
||||||
#include "lldb/Core/Module.h"
|
#include "lldb/Core/Module.h"
|
||||||
#include "lldb/Core/ModuleSpec.h"
|
#include "lldb/Core/ModuleSpec.h"
|
||||||
#include "lldb/Core/Timer.h"
|
#include "lldb/Core/Timer.h"
|
||||||
#include "lldb/Host/FileSystem.h"
|
|
||||||
#include "lldb/Host/Host.h"
|
#include "lldb/Host/Host.h"
|
||||||
#include "lldb/Host/HostInfo.h"
|
#include "lldb/Host/HostInfo.h"
|
||||||
#include "lldb/Host/StringConvert.h"
|
#include "lldb/Host/StringConvert.h"
|
||||||
|
@ -297,11 +296,14 @@ lldb_private::Error PlatformDarwin::GetSharedModuleWithLocalCache(
|
||||||
// get the local and remote MD5 and compare
|
// get the local and remote MD5 and compare
|
||||||
if (m_remote_platform_sp) {
|
if (m_remote_platform_sp) {
|
||||||
// when going over the *slow* GDB remote transfer mechanism we first
|
// when going over the *slow* GDB remote transfer mechanism we first
|
||||||
// check
|
// check the hashes of the files - and only do the actual transfer if
|
||||||
// the hashes of the files - and only do the actual transfer if they
|
// they differ
|
||||||
// differ
|
|
||||||
uint64_t high_local, high_remote, low_local, low_remote;
|
uint64_t high_local, high_remote, low_local, low_remote;
|
||||||
FileSystem::CalculateMD5(module_cache_spec, low_local, high_local);
|
auto MD5 = llvm::sys::fs::md5_contents(module_cache_spec.GetPath());
|
||||||
|
if (!MD5)
|
||||||
|
return Error(MD5.getError());
|
||||||
|
std::tie(high_local, low_local) = MD5->words();
|
||||||
|
|
||||||
m_remote_platform_sp->CalculateMD5(module_spec.GetFileSpec(),
|
m_remote_platform_sp->CalculateMD5(module_spec.GetFileSpec(),
|
||||||
low_remote, high_remote);
|
low_remote, high_remote);
|
||||||
if (low_local != low_remote || high_local != high_remote) {
|
if (low_local != low_remote || high_local != high_remote) {
|
||||||
|
|
|
@ -773,13 +773,14 @@ GDBRemoteCommunicationServerCommon::Handle_vFile_MD5(
|
||||||
if (!path.empty()) {
|
if (!path.empty()) {
|
||||||
uint64_t a, b;
|
uint64_t a, b;
|
||||||
StreamGDBRemote response;
|
StreamGDBRemote response;
|
||||||
if (!FileSystem::CalculateMD5(FileSpec(path, false), a, b)) {
|
auto Result = llvm::sys::fs::md5_contents(path);
|
||||||
|
if (!Result) {
|
||||||
response.PutCString("F,");
|
response.PutCString("F,");
|
||||||
response.PutCString("x");
|
response.PutCString("x");
|
||||||
} else {
|
} else {
|
||||||
response.PutCString("F,");
|
response.PutCString("F,");
|
||||||
response.PutHex64(a);
|
response.PutHex64(Result->low());
|
||||||
response.PutHex64(b);
|
response.PutHex64(Result->high());
|
||||||
}
|
}
|
||||||
return SendPacketNoLock(response.GetString());
|
return SendPacketNoLock(response.GetString());
|
||||||
}
|
}
|
||||||
|
@ -1092,12 +1093,11 @@ GDBRemoteCommunicationServerCommon::Handle_qModuleInfo(
|
||||||
StreamGDBRemote response;
|
StreamGDBRemote response;
|
||||||
|
|
||||||
if (uuid_str.empty()) {
|
if (uuid_str.empty()) {
|
||||||
std::string md5_hash;
|
auto Result = llvm::sys::fs::md5_contents(matched_module_spec.GetFileSpec().GetPath());
|
||||||
if (!FileSystem::CalculateMD5AsString(matched_module_spec.GetFileSpec(),
|
if (!Result)
|
||||||
file_offset, file_size, md5_hash))
|
|
||||||
return SendErrorResponse(5);
|
return SendErrorResponse(5);
|
||||||
response.PutCString("md5:");
|
response.PutCString("md5:");
|
||||||
response.PutCStringAsRawHex8(md5_hash.c_str());
|
response.PutCStringAsRawHex8(Result->digest().c_str());
|
||||||
} else {
|
} else {
|
||||||
response.PutCString("uuid:");
|
response.PutCString("uuid:");
|
||||||
response.PutCStringAsRawHex8(uuid_str.c_str());
|
response.PutCStringAsRawHex8(uuid_str.c_str());
|
||||||
|
|
|
@ -1346,10 +1346,13 @@ lldb_private::Error Platform::RunShellCommand(
|
||||||
|
|
||||||
bool Platform::CalculateMD5(const FileSpec &file_spec, uint64_t &low,
|
bool Platform::CalculateMD5(const FileSpec &file_spec, uint64_t &low,
|
||||||
uint64_t &high) {
|
uint64_t &high) {
|
||||||
if (IsHost())
|
if (!IsHost())
|
||||||
return FileSystem::CalculateMD5(file_spec, low, high);
|
|
||||||
else
|
|
||||||
return false;
|
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) {
|
void Platform::SetLocalCacheDirectory(const char *local) {
|
||||||
|
|
Loading…
Reference in New Issue