linux-user: deal with address wrap for ARM_COMMPAGE on 32 bit
commit5c3e87f345ac93de9260f12c408d2afd87a6ab3b
authorAlex Bennée <alex.bennee@linaro.org>
Fri, 5 Jun 2020 15:49:27 +0000 (5 16:49 +0100)
committerAlex Bennée <alex.bennee@linaro.org>
Mon, 8 Jun 2020 16:04:19 +0000 (8 17:04 +0100)
tree831edba4c5b969482fe678501f894d9a49275526
parentad592e37dfccf730378a44c5fa79acb603a7678d
linux-user: deal with address wrap for ARM_COMMPAGE on 32 bit

We rely on the pointer to wrap when accessing the high address of the
COMMPAGE so it lands somewhere reasonable. However on 32 bit hosts we
cannot afford just to map the entire 4gb address range. The old mmap
trial and error code handled this by just checking we could map both
the guest_base and the computed COMMPAGE address.

We can't just manipulate loadaddr to get what we want so we introduce
an offset which pgb_find_hole can apply when looking for a gap for
guest_base that ensures there is space left to map the COMMPAGE
afterwards.

This is arguably a little inefficient for the one 32 bit
value (kuser_helper_version) we need to keep there given all the
actual code entries are picked up during the translation phase.

Fixes: ee94743034b
Bug: https://bugs.launchpad.net/qemu/+bug/1880225
Cc: Bug 1880225 <1880225@bugs.launchpad.net>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Tested-by: Aleksandar Markovic <aleksandar.qemu.devel@gmail.com>
Cc: Richard Henderson <richard.henderson@linaro.org>
Cc: Peter Maydell <peter.maydell@linaro.org>
Message-Id: <20200605154929.26910-13-alex.bennee@linaro.org>
linux-user/elfload.c