[lldb] Use vFlash commands when writing to target's flash memory regions
authorPavel Labath <labath@google.com>
Tue, 27 Feb 2018 22:14:33 +0000 (22:14 +0000)
committerPavel Labath <labath@google.com>
Tue, 27 Feb 2018 22:14:33 +0000 (22:14 +0000)
commit029fb693722ee87cf0aebc75ba823d4ed020215a
treef6939628eacb5ebb1c58b6f97662c6f3521625d2
parent3acdc6773444b0dea84a69e99024e07ebabc0c98
[lldb] Use vFlash commands when writing to target's flash memory regions

Summary:
When writing an object file over gdb-remote, use the vFlashErase, vFlashWrite, and vFlashDone commands if the write address is in a flash memory region.  A bare metal target may have this kind of setup.

- Update ObjectFileELF to set load addresses using physical addresses.  A typical case may be a data section with a physical address in ROM and a virtual address in RAM, which should be loaded to the ROM address.
- Add support for querying the target's qXfer:memory-map, which contains information about flash memory regions, leveraging MemoryRegionInfo data structures with minor modifications
- Update ProcessGDBRemote to use vFlash commands in DoWriteMemory when the target address is in a flash region

Original discussion at http://lists.llvm.org/pipermail/lldb-dev/2018-January/013093.html

Reviewers: clayborg, labath

Reviewed By: labath

Subscribers: arichardson, emaste, mgorny, lldb-commits

Differential Revision: https://reviews.llvm.org/D42145
Patch by Owen Shaw <llvm@owenpshaw.net>

llvm-svn: 326261
13 files changed:
lldb/include/lldb/Host/XML.h
lldb/include/lldb/Target/MemoryRegionInfo.h
lldb/include/lldb/Target/Process.h
lldb/packages/Python/lldbsuite/test/functionalities/gdb_remote_client/TestGDBRemoteLoad.py [new file with mode: 0644]
lldb/source/Host/common/XML.cpp
lldb/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp
lldb/source/Plugins/ObjectFile/ELF/ObjectFileELF.h
lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.cpp
lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.h
lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp
lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemote.h
lldb/source/Symbol/ObjectFile.cpp
lldb/source/Target/Process.cpp