This uninitialized value violates the contract in the
documentation comment, and may lead to a SEGV during
translaton with -d in_asm.
Change the documentation to disallow hostp NULL.
Pass hostp to probe_access_internal directly.
Reported-by: Panda Jiang <3160104094@zju.edu.cn>
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
(void)probe_access_internal(env_cpu(env), addr, 1, MMU_INST_FETCH,
cpu_mmu_index(env_cpu(env), true), false,
- &p, &full, 0, false);
+ hostp, &full, 0, false);
+
+ p = *hostp;
if (p == NULL) {
return -1;
}
if (full->lg_page_size < TARGET_PAGE_BITS) {
+ *hostp = NULL;
return -1;
}
- if (hostp) {
- *hostp = p;
- }
return qemu_ram_addr_from_host_nofail(p);
}
* See get_page_addr_code() (full-system version) for documentation on the
* return value.
*
- * Sets *@hostp (when @hostp is non-NULL) as follows.
+ * Sets *@hostp as follows.
* If the return value is -1, sets *@hostp to NULL. Otherwise, sets *@hostp
* to the host address where @addr's content is kept.
*
flags = probe_access_internal(env, addr, 1, MMU_INST_FETCH, false, 0);
g_assert(flags == 0);
- if (hostp) {
- *hostp = g2h_untagged(addr);
- }
+ *hostp = g2h_untagged(addr);
return addr;
}