Le 27/03/2020 à 10:49, Alex Bennée a écrit :
> Searching for memory space can cause problems so lets extend the
> CPU_LOG_PAGE output so you can watch init_guest_space fail to
> allocate memory. A more involved fix is actually required to make this
> function play nicely with the large guard pages the sanitiser likes to
> use.
>
> Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
> ---
> linux-user/elfload.c | 8 +++++++-
> 1 file changed, 7 insertions(+), 1 deletion(-)
>
> diff --git a/linux-user/elfload.c b/linux-user/elfload.c
> index 8198be04460..619c054cc48 100644
> --- a/linux-user/elfload.c
> +++ b/linux-user/elfload.c
> @@ -2172,6 +2172,8 @@ unsigned long init_guest_space(unsigned long host_start,
>
> /* Check to see if the address is valid. */
> if (host_start && real_start != current_start) {
> + qemu_log_mask(CPU_LOG_PAGE, "invalid %lx && %lx != %lx\n",
> + host_start, real_start, current_start);
> goto try_again;
> }
>
> @@ -2240,7 +2242,11 @@ unsigned long init_guest_space(unsigned long host_start,
> * probably a bad strategy if not, which means we got here
> * because of trouble with ARM commpage setup.
> */
> - munmap((void *)real_start, real_size);
> + if (munmap((void *)real_start, real_size) != 0) {
> + error_report("%s: failed to unmap %lx:%lx (%s)", __func__,
> + real_start, real_size, strerror(errno));
> + abort();
> + }
> current_start += align;
> if (host_start == current_start) {
> /* Theoretically possible if host doesn't have any suitably
>
Reviewed-by: Laurent Vivier <laurent@vivier.eu>