summaryrefslogtreecommitdiffstats
path: root/lldb/source/Symbol/ObjectFile.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'lldb/source/Symbol/ObjectFile.cpp')
-rw-r--r--lldb/source/Symbol/ObjectFile.cpp33
1 files changed, 12 insertions, 21 deletions
diff --git a/lldb/source/Symbol/ObjectFile.cpp b/lldb/source/Symbol/ObjectFile.cpp
index ce8f04a9ff1..2129a4463cd 100644
--- a/lldb/source/Symbol/ObjectFile.cpp
+++ b/lldb/source/Symbol/ObjectFile.cpp
@@ -659,31 +659,22 @@ Status ObjectFile::LoadInMemory(Target &target, bool set_pc) {
SectionList *section_list = GetSectionList();
if (!section_list)
return Status("No section in object file");
-
- std::vector<Process::WriteEntry> writeEntries;
-
- // Create a list of write entries from loadable sections
size_t section_count = section_list->GetNumSections(0);
for (size_t i = 0; i < section_count; ++i) {
- Process::WriteEntry entry;
SectionSP section_sp = section_list->GetSectionAtIndex(i);
- entry.Dest = target.GetSectionLoadList().GetSectionLoadAddress(section_sp);
- if (entry.Dest == LLDB_INVALID_ADDRESS)
- continue;
- // We can skip sections like bss
- if (section_sp->GetFileSize() == 0)
- continue;
- DataExtractor section_data;
- section_sp->GetSectionData(section_data);
- entry.Contents = llvm::ArrayRef<uint8_t>(section_data.GetDataStart(),
- section_data.GetByteSize());
- writeEntries.push_back(entry);
+ addr_t addr = target.GetSectionLoadList().GetSectionLoadAddress(section_sp);
+ if (addr != LLDB_INVALID_ADDRESS) {
+ DataExtractor section_data;
+ // We can skip sections like bss
+ if (section_sp->GetFileSize() == 0)
+ continue;
+ section_sp->GetSectionData(section_data);
+ lldb::offset_t written = process->WriteMemory(
+ addr, section_data.GetDataStart(), section_data.GetByteSize(), error);
+ if (written != section_data.GetByteSize())
+ return error;
+ }
}
-
- error = process->WriteObjectFile(std::move(writeEntries));
- if (!error.Success())
- return error;
-
if (set_pc) {
ThreadList &thread_list = process->GetThreadList();
ThreadSP curr_thread(thread_list.GetSelectedThread());
OpenPOWER on IntegriCloud