Message ID | 20181122112947.7586-4-peter.maydell@linaro.org |
---|---|
State | Superseded |
Headers | show |
Series | Avoid cpu_physical_memory_read() in generic code | expand |
On 22/11/18 12:29, Peter Maydell wrote: > Currently the load_elf function in elf_ops.h uses > cpu_physical_memory_write() to write the ELF file to > memory if it is not handling it as a ROM blob. This > means we ignore the AddressSpace that the function > is passed to define where it should be loaded. > Use address_space_write() instead. > > Signed-off-by: Peter Maydell <peter.maydell@linaro.org> Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com> > --- > include/hw/elf_ops.h | 3 ++- > 1 file changed, 2 insertions(+), 1 deletion(-) > > diff --git a/include/hw/elf_ops.h b/include/hw/elf_ops.h > index 81cecaf27e2..793dcb85c2b 100644 > --- a/include/hw/elf_ops.h > +++ b/include/hw/elf_ops.h > @@ -482,7 +482,8 @@ static int glue(load_elf, SZ)(const char *name, int fd, > rom_add_elf_program(label, data, file_size, mem_size, > addr, as); > } else { > - cpu_physical_memory_write(addr, data, file_size); > + address_space_write(as, addr, MEMTXATTRS_UNSPECIFIED, > + data, file_size); > g_free(data); > } > } >
On 22 November 2018 at 11:29, Peter Maydell <peter.maydell@linaro.org> wrote: > Currently the load_elf function in elf_ops.h uses > cpu_physical_memory_write() to write the ELF file to > memory if it is not handling it as a ROM blob. This > means we ignore the AddressSpace that the function > is passed to define where it should be loaded. > Use address_space_write() instead. > > Signed-off-by: Peter Maydell <peter.maydell@linaro.org> > --- > include/hw/elf_ops.h | 3 ++- > 1 file changed, 2 insertions(+), 1 deletion(-) > > diff --git a/include/hw/elf_ops.h b/include/hw/elf_ops.h > index 81cecaf27e2..793dcb85c2b 100644 > --- a/include/hw/elf_ops.h > +++ b/include/hw/elf_ops.h > @@ -482,7 +482,8 @@ static int glue(load_elf, SZ)(const char *name, int fd, > rom_add_elf_program(label, data, file_size, mem_size, > addr, as); > } else { > - cpu_physical_memory_write(addr, data, file_size); > + address_space_write(as, addr, MEMTXATTRS_UNSPECIFIED, > + data, file_size); > g_free(data); > } > } > -- This turns out to have a bug which my testing somehow missed. The 'as' argument to this function can be NULL, which means that it should use address_space_memory, so we need to handle that. (The other side of the if() doesn't need to special case NULL because rom_add_elf_program() and the other loader.c code handle NULL later on.) thanks -- PMM
diff --git a/include/hw/elf_ops.h b/include/hw/elf_ops.h index 81cecaf27e2..793dcb85c2b 100644 --- a/include/hw/elf_ops.h +++ b/include/hw/elf_ops.h @@ -482,7 +482,8 @@ static int glue(load_elf, SZ)(const char *name, int fd, rom_add_elf_program(label, data, file_size, mem_size, addr, as); } else { - cpu_physical_memory_write(addr, data, file_size); + address_space_write(as, addr, MEMTXATTRS_UNSPECIFIED, + data, file_size); g_free(data); } }
Currently the load_elf function in elf_ops.h uses cpu_physical_memory_write() to write the ELF file to memory if it is not handling it as a ROM blob. This means we ignore the AddressSpace that the function is passed to define where it should be loaded. Use address_space_write() instead. Signed-off-by: Peter Maydell <peter.maydell@linaro.org> --- include/hw/elf_ops.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) -- 2.19.1