On 04/10/2018 04:24 PM, Simon Ruderich wrote: > Adapted patch from Baojun Wang [1] with the following commit message: > > I found this could be useful to have qemu-softmmu as a cross > debugger (launch with -s -S command line option), then if we can > have a command to load guest physical memory, we can use cross gdb > to do some target debug which gdb cannot do directly. > > pmemload is necessary to directly write physical memory which is not > possible with gdb alone as it uses only logical addresses. > > [1]: https://lists.gnu.org/archive/html/qemu-trivial/2014-04/msg00073.html > > Based-on-patch-by: Baojun Wang > Signed-off-by: Simon Ruderich > --- > +void qmp_pmemload(int64_t addr, int64_t size, const char *filename, > + Error **errp) > +{ > + FILE *f; > + size_t l; > + uint8_t buf[1024]; > + > + f = fopen(filename, "rb"); Use qemu_fopen() here, so that you can automagically support /dev/fdset/ magic filenames that work on file descriptors passed via SCM_RIGHTS. > +++ b/qapi-schema.json > @@ -1136,6 +1136,24 @@ > { 'command': 'pmemsave', > 'data': {'val': 'int', 'size': 'int', 'filename': 'str'} } > > +## > +# @pmemload: > +# > +# Load a portion of guest physical memory from a file. > +# > +# @val: the physical address of the guest to start from Is 'val' really the best name for this, or would 'phys-addr' or similar be a more descriptive name? > +# > +# @size: the size of memory region to load > +# > +# @filename: the file to load the memory from as binary data > +# > +# Returns: Nothing on success > +# > +# Since: 2.10 You've missed 2.10 by a long shot. The earliest this new feature could appear is 2.13. Do you additionally need an offset where to start reading from within the file (that is, since you already have the 'size' parameter to avoid reading the entire file, and the 'val' parameter to target anywhere in physical memory, how do I start reading anywhere from the file)? -- Eric Blake, Principal Software Engineer Red Hat, Inc. +1-919-301-3266 Virtualization: qemu.org | libvirt.org