summaryrefslogtreecommitdiffstats
path: root/lldb/source
diff options
context:
space:
mode:
authorPavel Labath <labath@google.com>2016-11-01 16:11:14 +0000
committerPavel Labath <labath@google.com>2016-11-01 16:11:14 +0000
commit1408bf7231c22bce70fea5470a865955ee40399b (patch)
tree353d7fa675051c51596081e7a66d6a8efd027877 /lldb/source
parentb187f5d988e95197e4b8cfa2121ee13c292ad8bc (diff)
downloadbcm5719-llvm-1408bf7231c22bce70fea5470a865955ee40399b.tar.gz
bcm5719-llvm-1408bf7231c22bce70fea5470a865955ee40399b.zip
Remove TimeValue usage from FileSpec.h
Summary: The only usage there was in GetModificationTime(). I also took the opportunity to move this function from FileSpec to the FileSystem class - since we are using FileSpecs to also represent remote files for which we cannot (easily) retrieve modification time, it makes sense to make the decision to get the modification time more explicit. The new function returns a llvm::sys::TimePoint<>. To aid the transition from TimeValue, I have added a constructor to it which enables implicit conversion from a time_point. Reviewers: zturner, clayborg Subscribers: mehdi_amini, tberghammer, danalbert, beanz, mgorny, lldb-commits Differential Revision: https://reviews.llvm.org/D25392 llvm-svn: 285702
Diffstat (limited to 'lldb/source')
-rw-r--r--lldb/source/Core/Module.cpp33
-rw-r--r--lldb/source/Core/ModuleList.cpp5
-rw-r--r--lldb/source/Core/SourceManager.cpp16
-rw-r--r--lldb/source/Host/common/FileSpec.cpp8
-rw-r--r--lldb/source/Host/common/FileSystem.cpp10
-rw-r--r--lldb/source/Interpreter/OptionValueFileSpec.cpp8
-rw-r--r--lldb/source/Plugins/DynamicLoader/MacOSX-DYLD/DynamicLoaderDarwin.cpp7
-rw-r--r--lldb/source/Plugins/ObjectContainer/BSD-Archive/ObjectContainerBSDArchive.cpp3
-rw-r--r--lldb/source/Plugins/Platform/Android/AdbClient.cpp8
-rw-r--r--lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARFDebugMap.cpp3
-rw-r--r--lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARFDebugMap.h1
11 files changed, 49 insertions, 53 deletions
diff --git a/lldb/source/Core/Module.cpp b/lldb/source/Core/Module.cpp
index 1c3ab6da52a..41981a4daaf 100644
--- a/lldb/source/Core/Module.cpp
+++ b/lldb/source/Core/Module.cpp
@@ -30,6 +30,7 @@
#include "lldb/Core/Section.h"
#include "lldb/Core/StreamString.h"
#include "lldb/Core/Timer.h"
+#include "lldb/Host/FileSystem.h"
#include "lldb/Host/Host.h"
#include "lldb/Host/Symbols.h"
#include "lldb/Interpreter/CommandInterpreter.h"
@@ -139,12 +140,7 @@ namespace lldb {
#endif
Module::Module(const ModuleSpec &module_spec)
- : m_mutex(), m_mod_time(), m_arch(), m_uuid(), m_file(), m_platform_file(),
- m_remote_install_file(), m_symfile_spec(), m_object_name(),
- m_object_offset(), m_object_mod_time(), m_objfile_sp(), m_symfile_ap(),
- m_type_system_map(), m_source_mappings(), m_sections_ap(),
- m_did_load_objfile(false), m_did_load_symbol_vendor(false),
- m_did_parse_uuid(false), m_file_has_changed(false),
+ : m_object_offset(0), m_file_has_changed(false),
m_first_file_changed_log(false) {
// Scope for locker below...
{
@@ -186,9 +182,10 @@ Module::Module(const ModuleSpec &module_spec)
return;
if (module_spec.GetFileSpec())
- m_mod_time = module_spec.GetFileSpec().GetModificationTime();
+ m_mod_time = FileSystem::GetModificationTime(module_spec.GetFileSpec());
else if (matching_module_spec.GetFileSpec())
- m_mod_time = matching_module_spec.GetFileSpec().GetModificationTime();
+ m_mod_time =
+ FileSystem::GetModificationTime(matching_module_spec.GetFileSpec());
// Copy the architecture from the actual spec if we got one back, else use the
// one that was specified
@@ -233,12 +230,8 @@ Module::Module(const ModuleSpec &module_spec)
Module::Module(const FileSpec &file_spec, const ArchSpec &arch,
const ConstString *object_name, lldb::offset_t object_offset,
const TimeValue *object_mod_time_ptr)
- : m_mutex(), m_mod_time(file_spec.GetModificationTime()), m_arch(arch),
- m_uuid(), m_file(file_spec), m_platform_file(), m_remote_install_file(),
- m_symfile_spec(), m_object_name(), m_object_offset(object_offset),
- m_object_mod_time(), m_objfile_sp(), m_symfile_ap(), m_type_system_map(),
- m_source_mappings(), m_sections_ap(), m_did_load_objfile(false),
- m_did_load_symbol_vendor(false), m_did_parse_uuid(false),
+ : m_mod_time(FileSystem::GetModificationTime(file_spec)), m_arch(arch),
+ m_file(file_spec), m_object_offset(object_offset),
m_file_has_changed(false), m_first_file_changed_log(false) {
// Scope for locker below...
{
@@ -264,12 +257,7 @@ Module::Module(const FileSpec &file_spec, const ArchSpec &arch,
}
Module::Module()
- : m_mutex(), m_mod_time(), m_arch(), m_uuid(), m_file(), m_platform_file(),
- m_remote_install_file(), m_symfile_spec(), m_object_name(),
- m_object_offset(0), m_object_mod_time(), m_objfile_sp(), m_symfile_ap(),
- m_type_system_map(), m_source_mappings(), m_sections_ap(),
- m_did_load_objfile(false), m_did_load_symbol_vendor(false),
- m_did_parse_uuid(false), m_file_has_changed(false),
+ : m_object_offset(0), m_file_has_changed(false),
m_first_file_changed_log(false) {
std::lock_guard<std::recursive_mutex> guard(
GetAllocationModuleCollectionMutex());
@@ -1076,7 +1064,7 @@ void Module::SetFileSpecAndObjectName(const FileSpec &file,
// Container objects whose paths do not specify a file directly can call
// this function to correct the file and object names.
m_file = file;
- m_mod_time = file.GetModificationTime();
+ m_mod_time = FileSystem::GetModificationTime(file);
m_object_name = object_name;
}
@@ -1138,7 +1126,8 @@ void Module::ReportError(const char *format, ...) {
bool Module::FileHasChanged() const {
if (!m_file_has_changed)
- m_file_has_changed = (m_file.GetModificationTime() != m_mod_time);
+ m_file_has_changed =
+ (FileSystem::GetModificationTime(m_file) != m_mod_time);
return m_file_has_changed;
}
diff --git a/lldb/source/Core/ModuleList.cpp b/lldb/source/Core/ModuleList.cpp
index a97be86fae1..e6e64900908 100644
--- a/lldb/source/Core/ModuleList.cpp
+++ b/lldb/source/Core/ModuleList.cpp
@@ -19,6 +19,7 @@
#include "lldb/Core/Log.h"
#include "lldb/Core/Module.h"
#include "lldb/Core/ModuleSpec.h"
+#include "lldb/Host/FileSystem.h"
#include "lldb/Host/Host.h"
#include "lldb/Host/Symbols.h"
#include "lldb/Symbol/ObjectFile.h"
@@ -855,8 +856,8 @@ Error ModuleList::GetSharedModule(const ModuleSpec &module_spec,
// If we didn't have a UUID in mind when looking for the object file,
// then we should make sure the modification time hasn't changed!
if (platform_module_spec.GetUUIDPtr() == nullptr) {
- TimeValue file_spec_mod_time(
- located_binary_modulespec.GetFileSpec().GetModificationTime());
+ TimeValue file_spec_mod_time(FileSystem::GetModificationTime(
+ located_binary_modulespec.GetFileSpec()));
if (file_spec_mod_time.IsValid()) {
if (file_spec_mod_time != module_sp->GetModificationTime()) {
if (old_module_sp_ptr)
diff --git a/lldb/source/Core/SourceManager.cpp b/lldb/source/Core/SourceManager.cpp
index f5b56f30768..0959cabf86a 100644
--- a/lldb/source/Core/SourceManager.cpp
+++ b/lldb/source/Core/SourceManager.cpp
@@ -18,6 +18,7 @@
#include "lldb/Core/Module.h"
#include "lldb/Core/RegularExpression.h"
#include "lldb/Core/Stream.h"
+#include "lldb/Host/FileSystem.h"
#include "lldb/Symbol/CompileUnit.h"
#include "lldb/Symbol/Function.h"
#include "lldb/Symbol/SymbolContext.h"
@@ -330,22 +331,19 @@ void SourceManager::FindLinesMatchingRegex(FileSpec &file_spec,
SourceManager::File::File(const FileSpec &file_spec,
lldb::DebuggerSP debugger_sp)
: m_file_spec_orig(file_spec), m_file_spec(file_spec),
- m_mod_time(file_spec.GetModificationTime()), m_source_map_mod_id(0),
- m_data_sp(), m_offsets(), m_debugger_wp(debugger_sp) {
+ m_mod_time(FileSystem::GetModificationTime(file_spec)),
+ m_debugger_wp(debugger_sp) {
CommonInitializer(file_spec, nullptr);
}
SourceManager::File::File(const FileSpec &file_spec, Target *target)
: m_file_spec_orig(file_spec), m_file_spec(file_spec),
- m_mod_time(file_spec.GetModificationTime()), m_source_map_mod_id(0),
- m_data_sp(), m_offsets(),
+ m_mod_time(FileSystem::GetModificationTime(file_spec)),
m_debugger_wp(target ? target->GetDebugger().shared_from_this()
: DebuggerSP()) {
CommonInitializer(file_spec, target);
}
-SourceManager::File::~File() {}
-
void SourceManager::File::CommonInitializer(const FileSpec &file_spec,
Target *target) {
if (!m_mod_time.IsValid()) {
@@ -384,7 +382,7 @@ void SourceManager::File::CommonInitializer(const FileSpec &file_spec,
SymbolContext sc;
sc_list.GetContextAtIndex(0, sc);
m_file_spec = sc.comp_unit;
- m_mod_time = m_file_spec.GetModificationTime();
+ m_mod_time = FileSystem::GetModificationTime(m_file_spec);
}
}
}
@@ -399,7 +397,7 @@ void SourceManager::File::CommonInitializer(const FileSpec &file_spec,
if (target->GetSourcePathMap().FindFile(m_file_spec, new_file_spec) ||
target->GetImages().FindSourceFile(m_file_spec, new_file_spec)) {
m_file_spec = new_file_spec;
- m_mod_time = m_file_spec.GetModificationTime();
+ m_mod_time = FileSystem::GetModificationTime(m_file_spec);
}
}
}
@@ -479,7 +477,7 @@ void SourceManager::File::UpdateIfNeeded() {
// TODO: use host API to sign up for file modifications to anything in our
// source cache and only update when we determine a file has been updated.
// For now we check each time we want to display info for the file.
- TimeValue curr_mod_time(m_file_spec.GetModificationTime());
+ TimeValue curr_mod_time(FileSystem::GetModificationTime(m_file_spec));
if (curr_mod_time.IsValid() && m_mod_time != curr_mod_time) {
m_mod_time = curr_mod_time;
diff --git a/lldb/source/Host/common/FileSpec.cpp b/lldb/source/Host/common/FileSpec.cpp
index f1bd204d02f..4021e37ecf2 100644
--- a/lldb/source/Host/common/FileSpec.cpp
+++ b/lldb/source/Host/common/FileSpec.cpp
@@ -745,14 +745,6 @@ uint32_t FileSpec::GetPermissions() const {
return file_permissions;
}
-TimeValue FileSpec::GetModificationTime() const {
- TimeValue mod_time;
- struct stat file_stats;
- if (GetFileStats(this, &file_stats))
- mod_time.OffsetWithSeconds(file_stats.st_mtime);
- return mod_time;
-}
-
//------------------------------------------------------------------
// Directory string get accessor.
//------------------------------------------------------------------
diff --git a/lldb/source/Host/common/FileSystem.cpp b/lldb/source/Host/common/FileSystem.cpp
index c865bf3b3e0..88f29b46f36 100644
--- a/lldb/source/Host/common/FileSystem.cpp
+++ b/lldb/source/Host/common/FileSystem.cpp
@@ -9,6 +9,7 @@
#include "lldb/Host/FileSystem.h"
+#include "llvm/Support/FileSystem.h"
#include "llvm/Support/MD5.h"
#include <algorithm>
@@ -90,3 +91,12 @@ bool FileSystem::CalculateMD5AsString(const FileSpec &file_spec,
digest_str = result_str.c_str();
return true;
}
+
+llvm::sys::TimePoint<>
+FileSystem::GetModificationTime(const FileSpec &file_spec) {
+ llvm::sys::fs::file_status status;
+ std::error_code ec = llvm::sys::fs::status(file_spec.GetPath(), status);
+ if (ec)
+ return llvm::sys::TimePoint<>();
+ return status.getLastModificationTime();
+}
diff --git a/lldb/source/Interpreter/OptionValueFileSpec.cpp b/lldb/source/Interpreter/OptionValueFileSpec.cpp
index 201181368bf..732bafe69be 100644
--- a/lldb/source/Interpreter/OptionValueFileSpec.cpp
+++ b/lldb/source/Interpreter/OptionValueFileSpec.cpp
@@ -9,12 +9,9 @@
#include "lldb/Interpreter/OptionValueFileSpec.h"
-// C Includes
-// C++ Includes
-// Other libraries and framework includes
-// Project includes
#include "lldb/Core/State.h"
#include "lldb/DataFormatters/FormatManager.h"
+#include "lldb/Host/FileSystem.h"
#include "lldb/Interpreter/Args.h"
#include "lldb/Interpreter/CommandCompletions.h"
#include "lldb/Interpreter/CommandInterpreter.h"
@@ -120,7 +117,8 @@ size_t OptionValueFileSpec::AutoComplete(CommandInterpreter &interpreter,
const lldb::DataBufferSP &
OptionValueFileSpec::GetFileContents(bool null_terminate) {
if (m_current_value) {
- const TimeValue file_mod_time = m_current_value.GetModificationTime();
+ const TimeValue file_mod_time =
+ FileSystem::GetModificationTime(m_current_value);
if (m_data_sp && m_data_mod_time == file_mod_time)
return m_data_sp;
if (null_terminate)
diff --git a/lldb/source/Plugins/DynamicLoader/MacOSX-DYLD/DynamicLoaderDarwin.cpp b/lldb/source/Plugins/DynamicLoader/MacOSX-DYLD/DynamicLoaderDarwin.cpp
index c0f3c7d2feb..e7c07d29ba9 100644
--- a/lldb/source/Plugins/DynamicLoader/MacOSX-DYLD/DynamicLoaderDarwin.cpp
+++ b/lldb/source/Plugins/DynamicLoader/MacOSX-DYLD/DynamicLoaderDarwin.cpp
@@ -7,6 +7,8 @@
//
//===----------------------------------------------------------------------===//
+#include "DynamicLoaderDarwin.h"
+
#include "lldb/Breakpoint/StoppointCallbackContext.h"
#include "lldb/Core/DataBuffer.h"
#include "lldb/Core/DataBufferHeap.h"
@@ -18,6 +20,7 @@
#include "lldb/Core/Section.h"
#include "lldb/Core/State.h"
#include "lldb/Expression/DiagnosticManager.h"
+#include "lldb/Host/FileSystem.h"
#include "lldb/Symbol/ClangASTContext.h"
#include "lldb/Symbol/Function.h"
#include "lldb/Symbol/ObjectFile.h"
@@ -30,8 +33,6 @@
#include "lldb/Target/ThreadPlanCallFunction.h"
#include "lldb/Target/ThreadPlanRunToAddress.h"
-#include "DynamicLoaderDarwin.h"
-
//#define ENABLE_DEBUG_PRINTF // COMMENT THIS LINE OUT PRIOR TO CHECKIN
#ifdef ENABLE_DEBUG_PRINTF
#include <stdio.h>
@@ -114,7 +115,7 @@ ModuleSP DynamicLoaderDarwin::FindTargetModuleForImageInfo(
// No UUID, we must rely upon the cached module modification
// time and the modification time of the file on disk
if (module_sp->GetModificationTime() !=
- module_sp->GetFileSpec().GetModificationTime())
+ FileSystem::GetModificationTime(module_sp->GetFileSpec()))
module_sp.reset();
}
diff --git a/lldb/source/Plugins/ObjectContainer/BSD-Archive/ObjectContainerBSDArchive.cpp b/lldb/source/Plugins/ObjectContainer/BSD-Archive/ObjectContainerBSDArchive.cpp
index 90213ba4ae4..18f93160647 100644
--- a/lldb/source/Plugins/ObjectContainer/BSD-Archive/ObjectContainerBSDArchive.cpp
+++ b/lldb/source/Plugins/ObjectContainer/BSD-Archive/ObjectContainerBSDArchive.cpp
@@ -34,6 +34,7 @@ typedef struct ar_hdr {
#include "lldb/Core/PluginManager.h"
#include "lldb/Core/Stream.h"
#include "lldb/Core/Timer.h"
+#include "lldb/Host/FileSystem.h"
#include "lldb/Symbol/ObjectFile.h"
using namespace lldb;
@@ -452,7 +453,7 @@ size_t ObjectContainerBSDArchive::GetModuleSpecifications(
data.SetData(data_sp, data_offset, data_sp->GetByteSize());
if (file && data_sp && ObjectContainerBSDArchive::MagicBytesMatch(data)) {
const size_t initial_count = specs.GetSize();
- TimeValue file_mod_time = file.GetModificationTime();
+ TimeValue file_mod_time = FileSystem::GetModificationTime(file);
Archive::shared_ptr archive_sp(Archive::FindCachedArchive(
file, ArchSpec(), file_mod_time, file_offset));
bool set_archive_arch = false;
diff --git a/lldb/source/Plugins/Platform/Android/AdbClient.cpp b/lldb/source/Plugins/Platform/Android/AdbClient.cpp
index d7492285c97..2578b9a2da5 100644
--- a/lldb/source/Plugins/Platform/Android/AdbClient.cpp
+++ b/lldb/source/Plugins/Platform/Android/AdbClient.cpp
@@ -22,6 +22,7 @@
#include "lldb/Core/StreamString.h"
#include "lldb/Host/ConnectionFileDescriptor.h"
#include "lldb/Host/FileSpec.h"
+#include "lldb/Host/FileSystem.h"
#include "lldb/Host/PosixApi.h"
#include <limits.h>
@@ -475,8 +476,11 @@ Error AdbClient::SyncService::internalPushFile(const FileSpec &local_file,
if (error.Fail())
return Error("Failed to send file chunk: %s", error.AsCString());
}
- error = SendSyncRequest(kDONE, local_file.GetModificationTime().seconds(),
- nullptr);
+ error = SendSyncRequest(
+ kDONE, std::chrono::duration_cast<std::chrono::seconds>(
+ FileSystem::GetModificationTime(local_file).time_since_epoch())
+ .count(),
+ nullptr);
if (error.Fail())
return error;
diff --git a/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARFDebugMap.cpp b/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARFDebugMap.cpp
index 6a1b6b423fb..f843824703c 100644
--- a/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARFDebugMap.cpp
+++ b/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARFDebugMap.cpp
@@ -21,6 +21,7 @@
#include "lldb/Core/RangeMap.h"
#include "lldb/Core/RegularExpression.h"
#include "lldb/Core/Section.h"
+#include "lldb/Host/FileSystem.h"
//#define DEBUG_OSO_DMAP // DO NOT CHECKIN WITH THIS NOT COMMENTED OUT
#if defined(DEBUG_OSO_DMAP)
@@ -424,7 +425,7 @@ Module *SymbolFileDWARFDebugMap::GetModuleByCompUnitInfo(
FileSpec oso_file(oso_path, false);
ConstString oso_object;
if (oso_file.Exists()) {
- TimeValue oso_mod_time(oso_file.GetModificationTime());
+ TimeValue oso_mod_time(FileSystem::GetModificationTime(oso_file));
if (oso_mod_time != comp_unit_info->oso_mod_time) {
obj_file->GetModule()->ReportError(
"debug map object file '%s' has changed (actual time is "
diff --git a/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARFDebugMap.h b/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARFDebugMap.h
index ffc9fed353a..8cef57b4a95 100644
--- a/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARFDebugMap.h
+++ b/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARFDebugMap.h
@@ -14,6 +14,7 @@
#include <vector>
#include "lldb/Core/RangeMap.h"
+#include "lldb/Host/TimeValue.h"
#include "lldb/Symbol/SymbolFile.h"
#include "UniqueDWARFASTType.h"
OpenPOWER on IntegriCloud