* Philippe Mathieu-Daudé (f4...@amsat.org) wrote: > Hi David, > > On 08/24/2017 04:27 PM, Dr. David Alan Gilbert (git) wrote: > > From: "Dr. David Alan Gilbert" <dgilb...@redhat.com> > > > > Utility to give the offset of a host pointer within a RAMBlock > > (assuming we already know it's in that RAMBlock) > > > > Signed-off-by: Dr. David Alan Gilbert <dgilb...@redhat.com> > > --- > > exec.c | 10 ++++++++++ > > include/exec/cpu-common.h | 1 + > > 2 files changed, 11 insertions(+) > > > > diff --git a/exec.c b/exec.c > > index 67df2909ce..35b4cea2ed 100644 > > --- a/exec.c > > +++ b/exec.c > > @@ -2231,6 +2231,16 @@ static void *qemu_ram_ptr_length(RAMBlock > > *ram_block, ram_addr_t addr, > > return ramblock_ptr(block, addr); > > } > > +/* Return the offset of a hostpointer within a ramblock */ > > +ram_addr_t qemu_ram_block_host_offset(RAMBlock *rb, void *host) > > +{ > > + ram_addr_t res = (uint8_t *)host - (uint8_t *)rb->host; > > What about using ptrdiff_t here,
We tend to use ram_addr_t for offsets in RAM, and so that's the return type of the function, and we're also comparing this value to rb->max_length below which is also a ram_addr_t. > > + assert((uint8_t *)host >= (uint8_t *)rb->host); > > and uintptr_t here? Done. Thanks, Dave > > + assert(res < rb->max_length); > > + > > + return res; > > +} > > + > > /* > > * Translates a host ptr back to a RAMBlock, a ram_addr and an offset > > * in that RAMBlock. > > diff --git a/include/exec/cpu-common.h b/include/exec/cpu-common.h > > index 74341b19d2..0d861a6289 100644 > > --- a/include/exec/cpu-common.h > > +++ b/include/exec/cpu-common.h > > @@ -68,6 +68,7 @@ ram_addr_t qemu_ram_addr_from_host(void *ptr); > > RAMBlock *qemu_ram_block_by_name(const char *name); > > RAMBlock *qemu_ram_block_from_host(void *ptr, bool round_offset, > > ram_addr_t *offset); > > +ram_addr_t qemu_ram_block_host_offset(RAMBlock *rb, void *host); > > void qemu_ram_set_idstr(RAMBlock *block, const char *name, DeviceState > > *dev); > > void qemu_ram_unset_idstr(RAMBlock *block); > > const char *qemu_ram_get_idstr(RAMBlock *rb); > > -- Dr. David Alan Gilbert / dgilb...@redhat.com / Manchester, UK