summaryrefslogtreecommitdiffstats
path: root/lldb/source/Plugins/DynamicLoader
diff options
context:
space:
mode:
authorLawrence D'Anna <lawrence_danna@apple.com>2019-09-27 14:33:35 +0000
committerLawrence D'Anna <lawrence_danna@apple.com>2019-09-27 14:33:35 +0000
commit7ca15ba73f67f1d3b6652cb19bbf78731e3b128d (patch)
tree0465ddf922beeeafd09260e5e7b47f55ab0b7e99 /lldb/source/Plugins/DynamicLoader
parenteb4c98ca3d2590bad9f6542afbf3a7824d2b53fa (diff)
downloadbcm5719-llvm-7ca15ba73f67f1d3b6652cb19bbf78731e3b128d.tar.gz
bcm5719-llvm-7ca15ba73f67f1d3b6652cb19bbf78731e3b128d.zip
remove File::SetStream(), make new files instead.
Summary: This patch removes File::SetStream() and File::SetDescriptor(), and replaces most direct uses of File with pointers to File. Instead of calling SetStream() on a file, we make a new file and replace it. My ultimate goal here is to introduce a new API class SBFile, which has full support for python io.IOStream file objects. These can redirect read() and write() to python code, so lldb::Files will need a way to dispatch those methods. Additionally it will need some form of sharing and assigning files, as a SBFile will be passed in and assigned to the main IO streams of the debugger. In my prototype patch queue, I make File itself copyable and add a secondary class FileOps to manage the sharing and dispatch. In that case SBFile was a unique_ptr<File>. (here: https://github.com/smoofra/llvm-project/tree/files) However in review, Pavel Labath suggested that it be shared_ptr instead. (here: https://reviews.llvm.org/D67793) In order for SBFile to use shared_ptr<File>, everything else should as well. If this patch is accepted, I will make SBFile use a shared_ptr I will remove FileOps from future patches and use subclasses of File instead. Reviewers: JDevlieghere, jasonmolenda, zturner, jingham, labath Reviewed By: labath Subscribers: lldb-commits Tags: #lldb Differential Revision: https://reviews.llvm.org/D67891 llvm-svn: 373090
Diffstat (limited to 'lldb/source/Plugins/DynamicLoader')
-rw-r--r--lldb/source/Plugins/DynamicLoader/Darwin-Kernel/DynamicLoaderDarwinKernel.cpp114
1 files changed, 52 insertions, 62 deletions
diff --git a/lldb/source/Plugins/DynamicLoader/Darwin-Kernel/DynamicLoaderDarwinKernel.cpp b/lldb/source/Plugins/DynamicLoader/Darwin-Kernel/DynamicLoaderDarwinKernel.cpp
index 790e7866516..0c212735be7 100644
--- a/lldb/source/Plugins/DynamicLoader/Darwin-Kernel/DynamicLoaderDarwinKernel.cpp
+++ b/lldb/source/Plugins/DynamicLoader/Darwin-Kernel/DynamicLoaderDarwinKernel.cpp
@@ -773,12 +773,9 @@ bool DynamicLoaderDarwinKernel::KextImageInfo::LoadImageUsingMemoryModule(
}
if (IsKernel() && m_uuid.IsValid()) {
- Stream *s = target.GetDebugger().GetOutputFile().get();
- if (s) {
- s->Printf("Kernel UUID: %s\n",
- m_uuid.GetAsString().c_str());
- s->Printf("Load Address: 0x%" PRIx64 "\n", m_load_address);
- }
+ Stream &s = target.GetDebugger().GetOutputStream();
+ s.Printf("Kernel UUID: %s\n", m_uuid.GetAsString().c_str());
+ s.Printf("Load Address: 0x%" PRIx64 "\n", m_load_address);
}
if (!m_module_sp) {
@@ -839,11 +836,9 @@ bool DynamicLoaderDarwinKernel::KextImageInfo::LoadImageUsingMemoryModule(
}
if (IsKernel() && !m_module_sp) {
- Stream *s = target.GetDebugger().GetOutputFile().get();
- if (s) {
- s->Printf("WARNING: Unable to locate kernel binary on the debugger "
- "system.\n");
- }
+ Stream &s = target.GetDebugger().GetOutputStream();
+ s.Printf("WARNING: Unable to locate kernel binary on the debugger "
+ "system.\n");
}
}
@@ -932,25 +927,24 @@ bool DynamicLoaderDarwinKernel::KextImageInfo::LoadImageUsingMemoryModule(
bool is_loaded = IsLoaded();
if (is_loaded && m_module_sp && IsKernel()) {
- Stream *s = target.GetDebugger().GetOutputFile().get();
- if (s) {
- ObjectFile *kernel_object_file = m_module_sp->GetObjectFile();
- if (kernel_object_file) {
- addr_t file_address =
- kernel_object_file->GetBaseAddress().GetFileAddress();
- if (m_load_address != LLDB_INVALID_ADDRESS &&
- file_address != LLDB_INVALID_ADDRESS) {
- s->Printf("Kernel slid 0x%" PRIx64 " in memory.\n",
- m_load_address - file_address);
- }
+ Stream &s = target.GetDebugger().GetOutputStream();
+ ObjectFile *kernel_object_file = m_module_sp->GetObjectFile();
+ if (kernel_object_file) {
+ addr_t file_address =
+ kernel_object_file->GetBaseAddress().GetFileAddress();
+ if (m_load_address != LLDB_INVALID_ADDRESS &&
+ file_address != LLDB_INVALID_ADDRESS) {
+ s.Printf("Kernel slid 0x%" PRIx64 " in memory.\n",
+ m_load_address - file_address);
}
- {
- s->Printf("Loaded kernel file %s\n",
- m_module_sp->GetFileSpec().GetPath().c_str());
- }
- s->Flush();
}
+ {
+ s.Printf("Loaded kernel file %s\n",
+ m_module_sp->GetFileSpec().GetPath().c_str());
+ }
+ s.Flush();
}
+
return is_loaded;
}
@@ -1109,11 +1103,10 @@ bool DynamicLoaderDarwinKernel::ReadKextSummaryHeader() {
lldb::offset_t offset = 0;
m_kext_summary_header.version = data.GetU32(&offset);
if (m_kext_summary_header.version > 128) {
- Stream *s =
- m_process->GetTarget().GetDebugger().GetOutputFile().get();
- s->Printf("WARNING: Unable to read kext summary header, got "
- "improbable version number %u\n",
- m_kext_summary_header.version);
+ Stream &s = m_process->GetTarget().GetDebugger().GetOutputStream();
+ s.Printf("WARNING: Unable to read kext summary header, got "
+ "improbable version number %u\n",
+ m_kext_summary_header.version);
// If we get an improbably large version number, we're probably
// getting bad memory.
m_kext_summary_header_addr.Clear();
@@ -1124,11 +1117,11 @@ bool DynamicLoaderDarwinKernel::ReadKextSummaryHeader() {
if (m_kext_summary_header.entry_size > 4096) {
// If we get an improbably large entry_size, we're probably
// getting bad memory.
- Stream *s =
- m_process->GetTarget().GetDebugger().GetOutputFile().get();
- s->Printf("WARNING: Unable to read kext summary header, got "
- "improbable entry_size %u\n",
- m_kext_summary_header.entry_size);
+ Stream &s =
+ m_process->GetTarget().GetDebugger().GetOutputStream();
+ s.Printf("WARNING: Unable to read kext summary header, got "
+ "improbable entry_size %u\n",
+ m_kext_summary_header.entry_size);
m_kext_summary_header_addr.Clear();
return false;
}
@@ -1142,11 +1135,10 @@ bool DynamicLoaderDarwinKernel::ReadKextSummaryHeader() {
if (m_kext_summary_header.entry_count > 10000) {
// If we get an improbably large number of kexts, we're probably
// getting bad memory.
- Stream *s =
- m_process->GetTarget().GetDebugger().GetOutputFile().get();
- s->Printf("WARNING: Unable to read kext summary header, got "
- "improbable number of kexts %u\n",
- m_kext_summary_header.entry_count);
+ Stream &s = m_process->GetTarget().GetDebugger().GetOutputStream();
+ s.Printf("WARNING: Unable to read kext summary header, got "
+ "improbable number of kexts %u\n",
+ m_kext_summary_header.entry_count);
m_kext_summary_header_addr.Clear();
return false;
}
@@ -1247,18 +1239,17 @@ bool DynamicLoaderDarwinKernel::ParseKextSummaries(
number_of_old_kexts_being_removed == 0)
return true;
- Stream *s = m_process->GetTarget().GetDebugger().GetOutputFile().get();
- if (s && load_kexts) {
+ Stream &s = m_process->GetTarget().GetDebugger().GetOutputStream();
+ if (load_kexts) {
if (number_of_new_kexts_being_added > 0 &&
number_of_old_kexts_being_removed > 0) {
- s->Printf("Loading %d kext modules and unloading %d kext modules ",
- number_of_new_kexts_being_added,
- number_of_old_kexts_being_removed);
+ s.Printf("Loading %d kext modules and unloading %d kext modules ",
+ number_of_new_kexts_being_added,
+ number_of_old_kexts_being_removed);
} else if (number_of_new_kexts_being_added > 0) {
- s->Printf("Loading %d kext modules ", number_of_new_kexts_being_added);
+ s.Printf("Loading %d kext modules ", number_of_new_kexts_being_added);
} else if (number_of_old_kexts_being_removed > 0) {
- s->Printf("Unloading %d kext modules ",
- number_of_old_kexts_being_removed);
+ s.Printf("Unloading %d kext modules ", number_of_old_kexts_being_removed);
}
}
@@ -1304,11 +1295,11 @@ bool DynamicLoaderDarwinKernel::ParseKextSummaries(
m_process->GetStopID() == image_info.GetProcessStopId())
loaded_module_list.AppendIfNeeded(image_info.GetModule());
- if (s && load_kexts) {
+ if (load_kexts) {
if (kext_successfully_added)
- s->Printf(".");
+ s.Printf(".");
else
- s->Printf("-");
+ s.Printf("-");
}
if (log)
@@ -1330,8 +1321,7 @@ bool DynamicLoaderDarwinKernel::ParseKextSummaries(
if (image_info.GetModule()) {
unloaded_module_list.AppendIfNeeded(image_info.GetModule());
}
- if (s)
- s->Printf(".");
+ s.Printf(".");
image_info.Clear();
// should pull it out of the KextImageInfos vector but that would
// mutate the list and invalidate the to_be_removed bool vector;
@@ -1342,12 +1332,12 @@ bool DynamicLoaderDarwinKernel::ParseKextSummaries(
}
}
- if (s && load_kexts) {
- s->Printf(" done.\n");
+ if (load_kexts) {
+ s.Printf(" done.\n");
if (kexts_failed_to_load.size() > 0 && number_of_new_kexts_being_added > 0) {
- s->Printf("Failed to load %d of %d kexts:\n",
- (int)kexts_failed_to_load.size(),
- number_of_new_kexts_being_added);
+ s.Printf("Failed to load %d of %d kexts:\n",
+ (int)kexts_failed_to_load.size(),
+ number_of_new_kexts_being_added);
// print a sorted list of <kext-name, uuid> kexts which failed to load
unsigned longest_name = 0;
std::sort(kexts_failed_to_load.begin(), kexts_failed_to_load.end());
@@ -1359,10 +1349,10 @@ bool DynamicLoaderDarwinKernel::ParseKextSummaries(
std::string uuid;
if (ku.second.IsValid())
uuid = ku.second.GetAsString();
- s->Printf (" %-*s %s\n", longest_name, ku.first.c_str(), uuid.c_str());
+ s.Printf(" %-*s %s\n", longest_name, ku.first.c_str(), uuid.c_str());
}
}
- s->Flush();
+ s.Flush();
}
return true;
OpenPOWER on IntegriCloud