qemu/linux-user
Richard Henderson dd55885516 linux-user: Rewrite non-fixed probe_guest_base
Use pgb_addr_set to probe for all of the guest addresses,
not just the main executable.  Handle the identity map
specially and separately from the search.

If /proc/self/maps is available, utilize the full power
of the interval tree search, rather than a linear search
through the address list.

If /proc/self/maps is not available, increase the skip
between probes so that we do not probe every single page
of the host address space.  Choose 1 MiB for 32-bit hosts
(max 4k probes) and 1 GiB for 64-bit hosts (possibly a
large number of probes, but the large step makes it more
likely to find empty space quicker).

Tested-by: Alex Bennée <alex.bennee@linaro.org>
Reviewed-by: Alex Bennée <alex.bennee@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
2023-08-08 13:41:55 -07:00
..
aarch64 linux-user: Define ELF_ET_DYN_BASE in $guest/target_mman.h 2023-08-08 13:27:15 -07:00
alpha linux-user: Define ELF_ET_DYN_BASE in $guest/target_mman.h 2023-08-08 13:27:15 -07:00
arm linux-user: Define ELF_ET_DYN_BASE in $guest/target_mman.h 2023-08-08 13:27:15 -07:00
cris linux-user: Define ELF_ET_DYN_BASE in $guest/target_mman.h 2023-08-08 13:27:15 -07:00
generic linux-user: Split TARGET_PROT_* out of syscall_defs.h 2023-07-15 08:02:32 +01:00
hexagon linux-user: Define ELF_ET_DYN_BASE in $guest/target_mman.h 2023-08-08 13:27:15 -07:00
hppa linux-user: Define ELF_ET_DYN_BASE in $guest/target_mman.h 2023-08-08 13:27:15 -07:00
i386 linux-user: Define ELF_ET_DYN_BASE in $guest/target_mman.h 2023-08-08 13:27:15 -07:00
include linux-user: Implment host/ppc/host-signal.h 2023-01-23 14:39:48 -10:00
loongarch64 linux-user: Define ELF_ET_DYN_BASE in $guest/target_mman.h 2023-08-08 13:27:15 -07:00
m68k linux-user: Define ELF_ET_DYN_BASE in $guest/target_mman.h 2023-08-08 13:27:15 -07:00
microblaze linux-user: Define ELF_ET_DYN_BASE in $guest/target_mman.h 2023-08-08 13:27:15 -07:00
mips linux-user: Define ELF_ET_DYN_BASE in $guest/target_mman.h 2023-08-08 13:27:15 -07:00
mips64 linux-user: Split TARGET_MAP_* out of syscall_defs.h 2023-07-15 08:02:32 +01:00
nios2 linux-user: Define ELF_ET_DYN_BASE in $guest/target_mman.h 2023-08-08 13:27:15 -07:00
openrisc linux-user: Define ELF_ET_DYN_BASE in $guest/target_mman.h 2023-08-08 13:27:15 -07:00
ppc linux-user: Define ELF_ET_DYN_BASE in $guest/target_mman.h 2023-08-08 13:27:15 -07:00
riscv linux-user: Define ELF_ET_DYN_BASE in $guest/target_mman.h 2023-08-08 13:27:15 -07:00
s390x linux-user: Define ELF_ET_DYN_BASE in $guest/target_mman.h 2023-08-08 13:27:15 -07:00
sh4 linux-user: Define ELF_ET_DYN_BASE in $guest/target_mman.h 2023-08-08 13:27:15 -07:00
sparc linux-user: Define ELF_ET_DYN_BASE in $guest/target_mman.h 2023-08-08 13:27:15 -07:00
x86_64 linux-user: Define ELF_ET_DYN_BASE in $guest/target_mman.h 2023-08-08 13:27:15 -07:00
xtensa linux-user: Define ELF_ET_DYN_BASE in $guest/target_mman.h 2023-08-08 13:27:15 -07:00
cpu_loop-common.h linux-user: Add guest memory layout to exception dump 2022-10-25 09:20:40 +02:00
elfload.c linux-user: Rewrite non-fixed probe_guest_base 2023-08-08 13:41:55 -07:00
errnos.c.inc linux-user: Simplify host <-> target errno conversion using macros 2021-07-12 21:53:35 +02:00
exit.c *: Add missing includes of qemu/plugin.h 2023-03-22 15:06:57 +00:00
fd-trans.c linux-user: handle netlink flag NLA_F_NESTED 2023-03-10 20:45:47 +01:00
fd-trans.h linux-user: fix timerfd read endianness conversion 2023-03-10 20:42:00 +01:00
flat.h linux-user/: fix some comment spelling errors 2020-09-17 20:39:22 +02:00
flatload.c linux-user: Properly set image_info.brk in flatload 2023-08-06 16:46:13 -07:00
ioctls.h linux-user: remove conditionals for many fs.h ioctls 2022-10-21 17:46:19 +02:00
linux_loop.h linux-user: implement more loop ioctls 2021-11-29 14:54:17 +01:00
linuxload.c linux-user: Clean up arg_start/arg_end confusion 2022-05-23 08:15:19 +02:00
loader.h linux-user/elfload: Introduce elf_hwcap_str() on s390x 2023-06-05 20:48:34 +02:00
main.c linux-user: Define ELF_ET_DYN_BASE in $guest/target_mman.h 2023-08-08 13:27:15 -07:00
meson.build accel/tcg: Add debuginfo support 2023-01-16 10:14:12 -10:00
mmap.c linux-user: Define ELF_ET_DYN_BASE in $guest/target_mman.h 2023-08-08 13:27:15 -07:00
qemu.h linux-user: Adjust initial brk when interpreter is close to executable 2023-08-08 13:27:17 -07:00
semihost.c semihosting: Remove qemu_semihosting_console_outs 2022-06-28 04:41:20 +05:30
signal-common.h linux-user: Add missing signals in strace output 2022-09-27 09:29:33 +02:00
signal.c gdbstub: move chunks of user code into own files 2023-03-07 20:44:04 +00:00
socket.h Supply missing header guards 2019-06-12 13:20:21 +02:00
strace.c linux-user: Fix strace output for old_mmap 2023-07-18 20:42:05 +02:00
strace.h linux-user: Have do_syscall() use CPUArchState* instead of void* 2022-05-23 22:47:19 +02:00
strace.list linux-user: Improve strace output of pread64() and pwrite64() 2023-07-08 16:55:08 +02:00
syscall_defs.h linux-user: Split TARGET_PROT_* out of syscall_defs.h 2023-07-15 08:02:32 +01:00
syscall_types.h linux-user: implement more loop ioctls 2021-11-29 14:54:17 +01:00
syscall.c util/selfmap: Rewrite using qemu/interval-tree.h 2023-08-08 13:27:17 -07:00
thunk.c linux-user: Move thunk.c from top-level 2021-12-20 10:12:29 -08:00
trace-events linux-user: Rename user_force_sig tracepoint to match function name 2022-01-18 12:41:42 +01:00
trace.h trace: switch position of headers to what Meson requires 2020-08-21 06:18:24 -04:00
uaccess.c linux-user: Split linux-user internals out of qemu.h 2021-09-13 20:35:45 +02:00
uname.c linux-user: Remove pointless CPU{ARCH}State casts 2022-05-23 22:47:20 +02:00
uname.h linux-user: Have do_syscall() use CPUArchState* instead of void* 2022-05-23 22:47:19 +02:00
user-internals.h linux-user: Pass last not end to probe_guest_base 2023-03-28 15:23:10 -07:00
user-mmap.h linux-user: Define ELF_ET_DYN_BASE in $guest/target_mman.h 2023-08-08 13:27:15 -07:00
vm86.c linux-user: Split linux-user internals out of qemu.h 2021-09-13 20:35:45 +02:00