From ec03d7e3babb18f222d9b83a04e747f206f416a5 Mon Sep 17 00:00:00 2001 From: Pavel Labath Date: Wed, 28 Feb 2018 20:42:29 +0000 Subject: Revert "[lldb] Use vFlash commands when writing to target's flash memory regions" This reverts commit r326261 as it introduces inconsistencies in the handling of load addresses for ObjectFileELF -- some parts of the class use physical addresses, and some use virtual. This has manifested itself as us not being able to set the load address of the vdso "module" on android. llvm-svn: 326367 --- lldb/source/Symbol/ObjectFile.cpp | 33 ++++++++++++--------------------- 1 file changed, 12 insertions(+), 21 deletions(-) (limited to 'lldb/source/Symbol/ObjectFile.cpp') 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 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(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()); -- cgit v1.2.3