plugins: fix-up handling of internal hostaddr for 32 bit

The compiler rightly complains when we build on 32 bit that casting
uint64_t into a void is a bad idea. We are really dealing with a host
pointer at this point so treat it as such. This does involve
a uintptr_t cast of the result of the TLB addend as we know that has
to point to the host memory.

Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Message-Id: <20210709143005.1554-28-alex.bennee@linaro.org>
This commit is contained in:
Alex Bennée 2021-07-09 15:29:52 +01:00
parent e2bcd3ad09
commit 2d93203998
3 changed files with 4 additions and 4 deletions

View File

@ -1728,7 +1728,7 @@ bool tlb_plugin_lookup(CPUState *cpu, target_ulong addr, int mmu_idx,
data->v.io.offset = (iotlbentry->addr & TARGET_PAGE_MASK) + addr; data->v.io.offset = (iotlbentry->addr & TARGET_PAGE_MASK) + addr;
} else { } else {
data->is_io = false; data->is_io = false;
data->v.ram.hostaddr = addr + tlbe->addend; data->v.ram.hostaddr = (void *)((uintptr_t)addr + tlbe->addend);
} }
return true; return true;
} else { } else {

View File

@ -18,7 +18,7 @@ struct qemu_plugin_hwaddr {
hwaddr offset; hwaddr offset;
} io; } io;
struct { struct {
uint64_t hostaddr; void *hostaddr;
} ram; } ram;
} v; } v;
}; };

View File

@ -308,11 +308,11 @@ uint64_t qemu_plugin_hwaddr_phys_addr(const struct qemu_plugin_hwaddr *haddr)
if (!haddr->is_io) { if (!haddr->is_io) {
RAMBlock *block; RAMBlock *block;
ram_addr_t offset; ram_addr_t offset;
void *hostaddr = (void *) haddr->v.ram.hostaddr; void *hostaddr = haddr->v.ram.hostaddr;
block = qemu_ram_block_from_host(hostaddr, false, &offset); block = qemu_ram_block_from_host(hostaddr, false, &offset);
if (!block) { if (!block) {
error_report("Bad ram pointer %"PRIx64"", haddr->v.ram.hostaddr); error_report("Bad host ram pointer %p", haddr->v.ram.hostaddr);
abort(); abort();
} }