From 7c1a3ad10e2dc6a252d4ff62ecca221864a78f2c Mon Sep 17 00:00:00 2001 From: Richard Henderson Date: Fri, 29 May 2026 21:16:13 -0700 Subject: [PATCH] common-user: Initialize mmap_min_addr for FreeBSD Use sysctl to fetch the vm layout of the current process. Reviewed-by: Helge Deller Reviewed-by: Warner Losh Signed-off-by: Richard Henderson --- common-user/mmap-min-addr.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/common-user/mmap-min-addr.c b/common-user/mmap-min-addr.c index b2b3762386..830c6f66a0 100644 --- a/common-user/mmap-min-addr.c +++ b/common-user/mmap-min-addr.c @@ -5,6 +5,10 @@ #include "qemu/osdep.h" #include "user/mmap-min-addr.h" +#ifdef __FreeBSD__ +#include +#include +#endif uintptr_t mmap_min_addr; @@ -31,6 +35,15 @@ static void __attribute__((constructor)) init(void) fclose(fp); } mmap_min_addr = min_addr; +#elif defined(__FreeBSD__) + int mib[] = { CTL_KERN, KERN_PROC, KERN_PROC_VM_LAYOUT, getpid() }; + struct kinfo_vm_layout info; + size_t info_len = sizeof(info); + + mmap_min_addr = + (sysctl(mib, ARRAY_SIZE(mib), &info, &info_len, NULL, 0) < 0 + ? qemu_real_host_page_size() + : info.kvm_min_user_addr); #else # error #endif