From nobody Mon Jun 8 08:43:54 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1780175675; cv=none; d=zohomail.com; s=zohoarc; b=bkWoYiMCBAi1W2EJLl7VieHynuvuaWlgYE+zHMDFtvvPb4zRCyoY5iSSQqwp8FLu6PJK/yLOAt/8S8j0siPLvHAK3+FdTkIlQybSIVR9zK9+yv6G7IMklpe2diUgnlgTt11RpYXFcX5STugBEhOeij5SyYNpyXZV5xG5ciaohC0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1780175675; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=3jqJbTRlZ02/qnQBMgxk5vRF3k8HFQd2Xb3/FkXy688=; b=lDKHi0zulob0oKV+Xs3BoXJqffmcC44IslZUyReNuPYTfP052pxrs8KSS2zHU3Bs9NcYM/NpXoNIkaXTwJjSMnzJcj4+XxMRt8IzWgEesLw8Otolyh9eqLJydiZbqth4lLMKpHJM4yA+aUwbKSATZn/jm2hJJJaujxqUY7uREwg= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1780175675559584.2865651536813; Sat, 30 May 2026 14:14:35 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wTQzO-0005d0-Gj; Sat, 30 May 2026 17:13:02 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wTQzG-0005bm-5q for qemu-devel@nongnu.org; Sat, 30 May 2026 17:12:54 -0400 Received: from mail-pl1-x631.google.com ([2607:f8b0:4864:20::631]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wTQzE-0000cO-IB for qemu-devel@nongnu.org; Sat, 30 May 2026 17:12:53 -0400 Received: by mail-pl1-x631.google.com with SMTP id d9443c01a7336-2c0c2d792c8so686625ad.1 for ; Sat, 30 May 2026 14:12:51 -0700 (PDT) Received: from stoup.. ([71.212.142.33]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2bf23c580c6sm59592895ad.82.2026.05.30.14.12.49 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 30 May 2026 14:12:50 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1780175570; x=1780780370; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=3jqJbTRlZ02/qnQBMgxk5vRF3k8HFQd2Xb3/FkXy688=; b=OzFHWmXhaBxUPlZZ8roVS+nZ11Ygz+ViOzTCN0XwkyiFx4+GQqWlHkQmOHKCPO8b8U N8Kcm/9h/9UJq+eIrTyuZPdoiSAL+KSa9ktiwkCJbw2FwA4/5CoQ3zrGC/WTkBF+2ecH iZQhgX35rM/nn+1EI6yiyQnRTzNsnogUU5Xanhh4A1pquica1UCoYxqd9yq4KfDvnAiF HtJAXf1gFXOVQ7wlrP15ntNHzl5XXFQ7UXPB8/CtGbQEbzgrcbLBOUyO+uoXHjIXK/Tc 21xNm6JdoJgZTbCkttVCq+tmCk7+WDpKE/beeX5RmMf+wUVkBByy2xF7/UVdgGfeQAdw WgKg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1780175570; x=1780780370; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=3jqJbTRlZ02/qnQBMgxk5vRF3k8HFQd2Xb3/FkXy688=; b=ZR8c6pvxJRV6z40Qi8nAspOJHc2EB4lttL0hr+xSj/7hdA7iW2QuD/1Ix9Xj09JplG 05F1lVVS8Wl17Vjo0wCfOnMO9HgmioTDeiTUwMAqpUIA1vl6MHBLNa1y5aoDcn4q+XRe 5rpG1EZ9xHsEqZPrWDRK/SeSGsdFCNwzDBaP9Z2xUjk5UMNLo5ibWJEBS42jmEuA9ufK 7XGGD1Rd97yT+A9woqLp14CqM6kt/rOCS2N573Th9tal94POAAKDUTgIc/rvvvaFyMjC J39kqfAFTgtnzKGsw+WM41c+7eOa3ulGm8Zs4fOQyTpdB6yu0GaI0y8mOGaG5M5NlYUu QCQw== X-Gm-Message-State: AOJu0Yz6TORP5hjfYIABYy57sF99pI269ME/DK3cZfDcZ+H5HuqQAO+7 TJ5Y6DJpOIVtCNYDri7PEdtEaPY/AA2kPPnOYzXnDo/yoiQo3yv1j1WdDbg6yIxsG77lWjV7frH WjkkjoxI= X-Gm-Gg: Acq92OFavbiriOZxPHJAOQUbMoXA6Y+B6GN7CIjNMFPhSF7l971Bbx8hU37IDn5rP96 +U3XAibz9hWh3TLCPphCzfWrUFTvGrCznU05YNzb3RcQULROg4jtIYYd4kzuw9R3B3Wjjc5PoUW ZO9jhDH8sCXsbvVQrydZ+EN6d5bxgBdcE6JpszNtPDFKgJwx5pDNVq0WaWk3X2IfhYfacP90VZV zk/1JmMAfKtcYXXcp3OkfXpI8UIdd3cp6NdCdFT4XTIA5iaPKeVzYGK1bV7i6hioXl8BDE4pw8M a1jSYtUq3mWB0eHQAeW898sfbsBkpDS++248rS/C7kDzR87hrNxjaVlYI1eCKND9j9UovVWr3Kx cd3zjSL94x4yRj0do3IwW0XEvp3Jjz5G1B99xdX+Mo/4PkSo0H2faoMevxVj5QSXBdar3lpN+gk J3bdZojDtvmr4wsCwDhHrh6bknZUYide7896zAr7WTQ5E/UBXD9w== X-Received: by 2002:a17:902:e88c:b0:2bf:30c8:bfa1 with SMTP id d9443c01a7336-2bf368bd8aamr59407015ad.41.1780175570497; Sat, 30 May 2026 14:12:50 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: imp@bsdimp.com, deller@gmx.de Subject: [PATCH 01/13] linux-user: Introduce PGBRange Date: Sat, 30 May 2026 14:12:35 -0700 Message-ID: <20260530211248.375318-2-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260530211248.375318-1-richard.henderson@linaro.org> References: <20260530211248.375318-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::631; envelope-from=richard.henderson@linaro.org; helo=mail-pl1-x631.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1780175676819158500 Content-Type: text/plain; charset="utf-8" Create a structure to hold a beginning/end range for guest virtual addresses, for use by probe_guest_base. Use vaddr for clarity. Signed-off-by: Richard Henderson Reviewed-by: Helge Deller Reviewed-by: Philippe Mathieu-Daud=C3=A9 Reviewed-by: Warner Losh --- linux-user/user-internals.h | 5 +++++ linux-user/elfload.c | 36 ++++++++++++++++++------------------ 2 files changed, 23 insertions(+), 18 deletions(-) diff --git a/linux-user/user-internals.h b/linux-user/user-internals.h index 21daf422b7..73b0109e9c 100644 --- a/linux-user/user-internals.h +++ b/linux-user/user-internals.h @@ -75,6 +75,11 @@ void clone_fork_end(bool child); void fork_start(void); void fork_end(pid_t pid); =20 +typedef struct PGBRange { + vaddr lo; + vaddr hi; +} PGBRange; + /** * probe_guest_base: * @image_name: the executable being loaded diff --git a/linux-user/elfload.c b/linux-user/elfload.c index 0e757787d2..e1e1ee4674 100644 --- a/linux-user/elfload.c +++ b/linux-user/elfload.c @@ -828,15 +828,15 @@ static int pgb_try_mmap_skip_brk(uintptr_t addr, uint= ptr_t addr_last, */ =20 typedef struct PGBAddrs { - uintptr_t bounds[3][2]; /* start/last pairs */ + PGBRange bounds[3]; int nbounds; } PGBAddrs; =20 static bool pgb_try_mmap_set(const PGBAddrs *ga, uintptr_t base, uintptr_t= brk) { for (int i =3D ga->nbounds - 1; i >=3D 0; --i) { - if (pgb_try_mmap_skip_brk(ga->bounds[i][0] + base, - ga->bounds[i][1] + base, + if (pgb_try_mmap_skip_brk(ga->bounds[i].lo + base, + ga->bounds[i].hi + base, brk, i =3D=3D 0 && reserved_va) <=3D 0) { return false; } @@ -875,26 +875,26 @@ static bool pgb_addr_set(PGBAddrs *ga, abi_ulong gues= t_loaddr, n =3D 0; =20 if (reserved_va) { - ga->bounds[n][0] =3D try_identity ? mmap_min_addr : 0; - ga->bounds[n][1] =3D reserved_va; + ga->bounds[n].lo =3D try_identity ? mmap_min_addr : 0; + ga->bounds[n].hi =3D reserved_va; n++; /* LO_COMMPAGE and NULL handled by reserving from 0. */ } else { /* Add any LO_COMMPAGE or NULL page. */ if (LO_COMMPAGE !=3D -1) { - ga->bounds[n][0] =3D 0; - ga->bounds[n][1] =3D LO_COMMPAGE + TARGET_PAGE_SIZE - 1; + ga->bounds[n].lo =3D 0; + ga->bounds[n].hi =3D LO_COMMPAGE + TARGET_PAGE_SIZE - 1; n++; } else if (!try_identity) { - ga->bounds[n][0] =3D 0; - ga->bounds[n][1] =3D TARGET_PAGE_SIZE - 1; + ga->bounds[n].lo =3D 0; + ga->bounds[n].hi =3D TARGET_PAGE_SIZE - 1; n++; } =20 /* Add the guest image for ET_EXEC. */ if (guest_loaddr) { - ga->bounds[n][0] =3D guest_loaddr; - ga->bounds[n][1] =3D guest_hiaddr; + ga->bounds[n].lo =3D guest_loaddr; + ga->bounds[n].hi =3D guest_hiaddr; n++; } } @@ -909,8 +909,8 @@ static bool pgb_addr_set(PGBAddrs *ga, abi_ulong guest_= loaddr, =20 /* Add any HI_COMMPAGE not covered by reserved_va. */ if (reserved_va < HI_COMMPAGE) { - ga->bounds[n][0] =3D HI_COMMPAGE & qemu_real_host_page_mask(); - ga->bounds[n][1] =3D HI_COMMPAGE + TARGET_PAGE_SIZE - 1; + ga->bounds[n].lo =3D HI_COMMPAGE & qemu_real_host_page_mask(); + ga->bounds[n].hi =3D HI_COMMPAGE + TARGET_PAGE_SIZE - 1; n++; } =20 @@ -976,8 +976,8 @@ static uintptr_t pgb_try_itree(const PGBAddrs *ga, uint= ptr_t base, IntervalTreeRoot *root) { for (int i =3D ga->nbounds - 1; i >=3D 0; --i) { - uintptr_t s =3D base + ga->bounds[i][0]; - uintptr_t l =3D base + ga->bounds[i][1]; + uintptr_t s =3D base + ga->bounds[i].lo; + uintptr_t l =3D base + ga->bounds[i].hi; IntervalTreeNode *n; =20 if (l < s) { @@ -1076,9 +1076,9 @@ static void pgb_dynamic(const char *image_name, uintp= tr_t guest_loaddr, "guest address mapping requirements", image_name); =20 for (int i =3D 0; i < ga.nbounds; ++i) { - error_printf(" %0*" PRIx64 "-%0*" PRIx64 "\n", - w, (uint64_t)ga.bounds[i][0], - w, (uint64_t)ga.bounds[i][1]); + error_printf(" %0*" VADDR_PRIx "-%0*" VADDR_PRIx "\n", + w, ga.bounds[i].lo, + w, ga.bounds[i].hi); } exit(EXIT_FAILURE); } --=20 2.43.0 From nobody Mon Jun 8 08:43:54 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1780175647; cv=none; d=zohomail.com; s=zohoarc; b=EseALrKTzM/+WJ/IlQ0t66dBEzTzfQVlprOt34rwOeQlxBYFXEkJpQf+M+ARDUx20ydMs7QYMVcu5sRc6kPpB9wIzXWXaGLG2vNsBYo7zle9/gjTiPulkoKw3qmN120ETOo/gbWhT8RQXyect8peqVRfGTBbQFuOuin5S65yQ1k= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1780175647; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=uem/XZ/RrL0sYo24Yo2p7PELinzpZMdXnM1d28t/L4Y=; b=Ke5EwvUiSn/sgvA0VWWrbRaA6B7vhI45GDMbR8RD6RaW/laCM8sHhvNRerK07tLiVqL3W1eXujvfsVOkAqP6o26wW+2IhHucsJZ6j1xF6S4pxeaeLjXCG4rg1pmSTQv7DfRr5GlvQqGYWxRZuXUM8/5RI9m2oCJJk0rJ+LuExDg= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 17801756474751012.9263327025269; Sat, 30 May 2026 14:14:07 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wTQzS-0005dd-C8; Sat, 30 May 2026 17:13:06 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wTQzH-0005c4-An for qemu-devel@nongnu.org; Sat, 30 May 2026 17:12:56 -0400 Received: from mail-pl1-x636.google.com ([2607:f8b0:4864:20::636]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wTQzF-0000cU-MW for qemu-devel@nongnu.org; Sat, 30 May 2026 17:12:55 -0400 Received: by mail-pl1-x636.google.com with SMTP id d9443c01a7336-2c0bb4a94b8so1654835ad.2 for ; Sat, 30 May 2026 14:12:53 -0700 (PDT) Received: from stoup.. ([71.212.142.33]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2bf23c580c6sm59592895ad.82.2026.05.30.14.12.50 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 30 May 2026 14:12:50 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1780175572; x=1780780372; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=uem/XZ/RrL0sYo24Yo2p7PELinzpZMdXnM1d28t/L4Y=; b=p43LkHFIz2nqcNiH9gfiJ2hXFDirc9Wh5UgbCmsKcSzuiav2hD38B+f3phrTU9kbZK 9zAYJYldvxtbtLXvzbksiKAYv5gE2xIePpIUi+aE5nBOHLW5GEo7LiAE57WwAhKyWHmm 1U008CYqddUOC1m04cyzfU9deCAXlA3AjnWDoQcK7KWLcoUM8X8xzN1lz8ux848LEf/o 5o9eJwgrko0o4igDLSkLHuR4l0Vev2nRw2v8VtRIVCYmiYtPuM0Qwjmh059erCqAayg7 0JZnppGBmFtauD7aMeor+g0Ugooi/+kygQpXfLVC+6yddwbbnkFnIIZmK5UQv6U2MMBk GnsQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1780175572; x=1780780372; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=uem/XZ/RrL0sYo24Yo2p7PELinzpZMdXnM1d28t/L4Y=; b=qkMKzkMKFth7180uIdvqZ3iMggWl46OAXOqQLVPKmfjHDAey0F6BwImoj27HBioobO fYFDoMqaqyFRDEbMpGke2Wu4xVcNmpGZPMcUyPlYKUDCJ2+/hk8lfdCqyC2+CEFN3FDl CRvqZVS3hjR+ezOe5ZFpCjcD2qY/7kyuKxyhx320T444WXlpjXj2ci7R/dSiQauSkHZI AgGZxlqsuQaT9UyHNUPxfaNbkUoPW9qSoivUcgb6VrZ9byJjOdSynYUfg0lLef5Kl3O8 8emYiJ/iObmJbkGWFjWgmHNxQfjNT4nP7veD0tywWYM2KvRs1jaqVS3uBwBJyAAyHEdr osBg== X-Gm-Message-State: AOJu0Yx10y4t5q5Q62SY+X+vuu9mq8CzAd37Z366hiFV0jS+Vr0wEGu4 wvk0at995AxUcbsCiHXJ/LURuPlhayuj4TkbZz882ZO+vw/bTAOsIPjdnpMKfOUbd66SiBv3EOk 1wG09rvM= X-Gm-Gg: Acq92OEb16oTORbfmBc7yub59Njskz1Q5G4Wdv0VH94GDv/KX0y2iLvPw73ix4ypIiI +ss+bSZfNmAlnfvhjC/6y0xsIhpGTy+vApr9gwyc8Uo4Q+GUQF6mKsKBrlZTSGq0bfW4aiPYNXv 0fCds/NyEOmJ8snY4MUBDbKvNyKcdb8kF8C53Gq1az9/0qufNRuVMBMvA5Hzp/+SMS9O162Q/9O oV7jk8cYxfigM5N7aaqNMuhjmZugGijlBNhQnBmAcL2Gif6sVm1rRLJ2Foof/i9Dvyljt4snZ6k lsG3TxEH4QJfBJ0ZPTteQoQPmjxyb7E/jR+j26ySXn3t1RnqxCX+276RbO5mtcgm05Kmzil5Cnb AV/rOKRjnCUbu8Txogullo/lLn3nWJlpx5PsowxScJa7nYdgH8CUqNad87QC0fdr2ozUNwgXzA5 I5tNPN2CE4QW82CZ7drtyqxIfi22c6nlNt6kSft8c= X-Received: by 2002:a17:903:32c4:b0:2bf:dd8b:7cd with SMTP id d9443c01a7336-2bfdd8b0ac6mr45708155ad.10.1780175571258; Sat, 30 May 2026 14:12:51 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: imp@bsdimp.com, deller@gmx.de Subject: [PATCH 02/13] linux-user: Use PGBRange in load_elf_image Date: Sat, 30 May 2026 14:12:36 -0700 Message-ID: <20260530211248.375318-3-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260530211248.375318-1-richard.henderson@linaro.org> References: <20260530211248.375318-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::636; envelope-from=richard.henderson@linaro.org; helo=mail-pl1-x636.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1780175650039154100 Content-Type: text/plain; charset="utf-8" Collect into range instead of loaddr+hiaddr. Signed-off-by: Richard Henderson Reviewed-by: Helge Deller Reviewed-by: Philippe Mathieu-Daud=C3=A9 Reviewed-by: Warner Losh --- linux-user/elfload.c | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/linux-user/elfload.c b/linux-user/elfload.c index e1e1ee4674..fb774adf25 100644 --- a/linux-user/elfload.c +++ b/linux-user/elfload.c @@ -1278,7 +1278,8 @@ static void load_elf_image(const char *image_name, co= nst ImageSource *src, char **pinterp_name) { g_autofree struct elf_phdr *phdr =3D NULL; - abi_ulong load_addr, load_bias, loaddr, hiaddr, error, align; + PGBRange range =3D { -1, 0 }; + abi_ulong load_addr, load_bias, error, align; size_t reserve_size, align_size; int i, prot_exec; Error *err =3D NULL; @@ -1318,19 +1319,18 @@ static void load_elf_image(const char *image_name, = const ImageSource *src, * Find the maximum size of the image and allocate an appropriate * amount of memory to handle that. Locate the interpreter, if any. */ - loaddr =3D -1, hiaddr =3D 0; align =3D 0; info->exec_stack =3D EXSTACK_DEFAULT; for (i =3D 0; i < ehdr->e_phnum; ++i) { struct elf_phdr *eppnt =3D phdr + i; if (eppnt->p_type =3D=3D PT_LOAD) { abi_ulong a =3D eppnt->p_vaddr & TARGET_PAGE_MASK; - if (a < loaddr) { - loaddr =3D a; + if (a < range.lo) { + range.lo =3D a; } a =3D eppnt->p_vaddr + eppnt->p_memsz - 1; - if (a > hiaddr) { - hiaddr =3D a; + if (a > range.hi) { + range.hi =3D a; } ++info->nsegs; align |=3D eppnt->p_align; @@ -1361,7 +1361,7 @@ static void load_elf_image(const char *image_name, co= nst ImageSource *src, } } =20 - load_addr =3D loaddr; + load_addr =3D range.lo; =20 align =3D pow2ceil(align); =20 @@ -1371,13 +1371,13 @@ static void load_elf_image(const char *image_name, = const ImageSource *src, * Make sure that the low address does not conflict with * MMAP_MIN_ADDR or the QEMU application itself. */ - probe_guest_base(image_name, loaddr, hiaddr); + probe_guest_base(image_name, range.lo, range.hi); } else { /* * The binary is dynamic, but we still need to * select guest_base. In this case we pass a size. */ - probe_guest_base(image_name, 0, hiaddr - loaddr); + probe_guest_base(image_name, 0, range.hi - range.lo); =20 /* * Avoid collision with the loader by providing a different @@ -1414,7 +1414,7 @@ static void load_elf_image(const char *image_name, co= nst ImageSource *src, * In both cases, we will overwrite pages in this range with mappings * from the executable. */ - reserve_size =3D (size_t)hiaddr - loaddr + 1; + reserve_size =3D range.hi - range.lo + 1; align_size =3D reserve_size; =20 if (ehdr->e_type !=3D ET_EXEC && align > qemu_real_host_page_size()) { @@ -1443,7 +1443,7 @@ static void load_elf_image(const char *image_name, co= nst ImageSource *src, load_addr =3D align_addr; } =20 - load_bias =3D load_addr - loaddr; + load_bias =3D load_addr - range.lo; =20 if (elf_is_fdpic(ehdr)) { struct elf32_fdpic_loadseg *loadsegs =3D info->loadsegs =3D @@ -1474,7 +1474,7 @@ static void load_elf_image(const char *image_name, co= nst ImageSource *src, info->start_data =3D -1; info->end_data =3D 0; /* Usual start for brk is after all sections of the main executable. */ - info->brk =3D TARGET_PAGE_ALIGN(hiaddr + load_bias); + info->brk =3D TARGET_PAGE_ALIGN(range.hi + load_bias); info->elf_flags =3D ehdr->e_flags; #ifdef TARGET_MIPS info->use_k0_tls =3D (ehdr->e_flags & EF_MIPS_MACH) =3D=3D EF_MIPS_MAC= H_OCTEON; --=20 2.43.0 From nobody Mon Jun 8 08:43:54 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1780175647; cv=none; d=zohomail.com; s=zohoarc; b=HaxDhkiYw5QYe0GzPcOzT66Wg18oJOPxpyiP1MSEb43XyJhXx994Aex+l0bxJv0SoYxz5Lyb+qygOVXzC2b1pqDbqvJqwFH8ny4D7x1vaBY7Mnu3cwASYSe7C8PRwYzMgWHwT6LmaiRzIFwi2DB1H+JNMw/r723RTYvc7MEGgwI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1780175647; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=hHVne7fH+oibUgn5TdPb39Q4wG+yDX1OLcAi/wlCZfA=; b=TWCHLRTIlfa7u2FvlXa/BFac9JIaC5IcAA3ZLPLI+rzWg5k/N9Ymu2On2NuJv0pBUUGFmkm19G7wIxZtmtvRfRdkZddDjJq2XfJVTNgKc04WM+d5lpkKqBQq4x0pPg8NWVMUDRthb9BXPSn2H1y1Ki3WhG4CC8TrKm0zJmsnHmA= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1780175647168322.9143960419641; Sat, 30 May 2026 14:14:07 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wTQzU-0005e8-Er; Sat, 30 May 2026 17:13:08 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wTQzI-0005cD-Ng for qemu-devel@nongnu.org; Sat, 30 May 2026 17:12:56 -0400 Received: from mail-pl1-x632.google.com ([2607:f8b0:4864:20::632]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wTQzH-0000ci-1Y for qemu-devel@nongnu.org; Sat, 30 May 2026 17:12:56 -0400 Received: by mail-pl1-x632.google.com with SMTP id d9443c01a7336-2c0c3184c71so911655ad.1 for ; Sat, 30 May 2026 14:12:54 -0700 (PDT) Received: from stoup.. ([71.212.142.33]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2bf23c580c6sm59592895ad.82.2026.05.30.14.12.52 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 30 May 2026 14:12:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1780175574; x=1780780374; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=hHVne7fH+oibUgn5TdPb39Q4wG+yDX1OLcAi/wlCZfA=; b=heq1mmDj6iXjg/mILjK9gVgMSaVz/8Hhu0iwE0ENenNq3j4JqqcB6b+0gEj7wzfwzg wIS13V8n3FfymPi5j2L94M00vpwn5yjZG3rDUIXKBb+UNpS3ixJiDJPLwI2CwUZ0AM2t ADsr2wgw+RZb/oYAHnO260Y5LDsIJKLQf4tGwJFPLGvQxKT0onm35YezxFeYl4b+NDgo hEfmwxkrZorlg842oOod//6PEv9QnoIcBU7STclqbTvRNtL7RHobE8JZt0W4Trb5sp1s 6yozVN6l3xipfZYYDsrj5ymEAeb0y+jJi+9tSEC6RMi7TwNsGnhhbsI9Y/WbXLWNLC++ 3OUQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1780175574; x=1780780374; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=hHVne7fH+oibUgn5TdPb39Q4wG+yDX1OLcAi/wlCZfA=; b=YS0RyOb5lBXBtRgi/sImaW3R5g2ZV2h0vshcj/tn1aQZ6/MdLa8SigrRWKa35VvZH+ fZTNblCQNPzum2459O7sW1Pbkl7aIMoPQ0lnqsz1/DD3TPT4epTT76YWnmdjyifVOtj5 BOpoA+qtquHMKbC2LNMM/D5mOwAFMtd2Ph+6dBbI/C62Kp9mqtFYU19Ha2p6/y0gcl3S bSkz0t66Xp6uNUdQ2bQOrDKoAXMSCJQwOFn/falA5aEfiiORsGt6vvgHsPU6M1O9fzSR ZQQBjlgKgK7M2KoFlKLVgpZjsEGias7NF4PGbmf7osWQGF9P5VxFpZZwk8va2QyetTV8 1OvA== X-Gm-Message-State: AOJu0YzfPcHsGgTFwmyI/AhHtDLCDY+1N1oZhuPMSKWFjFNkxLWhH4cA VlqbCUw9KkFrNy8lptqtjRxeUP+c6qjz31kMn3BwVJDEvD3+/I8t3NU7RFvMyhlI2T3Kbqj2k+w M6HQTOIg= X-Gm-Gg: Acq92OFc73RhZ1OBBHTCFVdJw15k2z56NgjZmEWbrUDYDCxNeb5lO8I9sQzfqkgYOwN 7EIAnZjil6VmU4J/6bTlCJQbpmoDaavlrOiUsvebaJ4fqubxpKg6aE7RaYOmHXWnCmfey+0vaKm bdDi6AneJah7lRlF9PQGXiJd3XSTdc+Rc/O78Fp8C+GVEBh5STvmsF4iy9vYNNjOFtTkPjhUdR3 g0eXJyhnVsKmeuXusQfTmP2ydOIDNgzlAYR+vBlmp5lNJqFFLcUF/uNDPTK0EI4j6azBoRPBQuL MwFl/Gnn3cJxYc1aK5NJ2zfL4jfOvYIICSa+uClftWpuQ9AFnPiAuA8ruMHsL48vQEI+TyMTSzA PhUZEr4hUH1CPInl0Y6puG0lylQapj/8dYsVJb4bVr6UtdoD563+UdTY/RHfsjrPDjSRs+Fw80L AtLcVLy5/Oe2B7jwf8WRFfGTjc7Xd70In9UFkIyL0= X-Received: by 2002:a17:903:2304:b0:2c0:af09:f3d9 with SMTP id d9443c01a7336-2c0af09f5afmr29498525ad.36.1780175573543; Sat, 30 May 2026 14:12:53 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: imp@bsdimp.com, deller@gmx.de Subject: [PATCH 03/13] linux-user: Drop hiaddr out-of-range check in probe_guest_base Date: Sat, 30 May 2026 14:12:37 -0700 Message-ID: <20260530211248.375318-4-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260530211248.375318-1-richard.henderson@linaro.org> References: <20260530211248.375318-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::632; envelope-from=richard.henderson@linaro.org; helo=mail-pl1-x632.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1780175648874158500 Content-Type: text/plain; charset="utf-8" Since dropping 32-bit host support, a guest address cannot overflow a host pointer. This means guest_hiaddr is unused for relocatable images, so don't pass guest_hiaddr as size. Signed-off-by: Richard Henderson Reviewed-by: Helge Deller Reviewed-by: Warner Losh --- linux-user/elfload.c | 26 +++++++------------------- linux-user/flatload.c | 3 +-- 2 files changed, 8 insertions(+), 21 deletions(-) diff --git a/linux-user/elfload.c b/linux-user/elfload.c index fb774adf25..33565ad7be 100644 --- a/linux-user/elfload.c +++ b/linux-user/elfload.c @@ -1092,20 +1092,11 @@ void probe_guest_base(const char *image_name, abi_u= long guest_loaddr, uintptr_t align =3D MAX(SHMLBA, TARGET_PAGE_SIZE); =20 /* Sanity check the guest binary. */ - if (reserved_va) { - if (guest_hiaddr > reserved_va) { - error_report("%s: requires more than reserved virtual " - "address space (0x%" PRIx64 " > 0x%lx)", - image_name, (uint64_t)guest_hiaddr, reserved_va); - exit(EXIT_FAILURE); - } - } else { - if (guest_hiaddr !=3D (uintptr_t)guest_hiaddr) { - error_report("%s: requires more virtual address space " - "than the host can provide (0x%" PRIx64 ")", - image_name, (uint64_t)guest_hiaddr + 1); - exit(EXIT_FAILURE); - } + if (reserved_va && guest_hiaddr > reserved_va) { + error_report("%s: requires more than reserved virtual " + "address space (0x%" PRIx64 " > 0x%lx)", + image_name, (uint64_t)guest_hiaddr, reserved_va); + exit(EXIT_FAILURE); } =20 if (have_guest_base) { @@ -1373,11 +1364,8 @@ static void load_elf_image(const char *image_name, c= onst ImageSource *src, */ probe_guest_base(image_name, range.lo, range.hi); } else { - /* - * The binary is dynamic, but we still need to - * select guest_base. In this case we pass a size. - */ - probe_guest_base(image_name, 0, range.hi - range.lo); + /* The binary is dynamic; we still need to select guest_base. = */ + probe_guest_base(image_name, 0, 0); =20 /* * Avoid collision with the loader by providing a different diff --git a/linux-user/flatload.c b/linux-user/flatload.c index 4beb3ed1b9..8abdd2aef2 100644 --- a/linux-user/flatload.c +++ b/linux-user/flatload.c @@ -261,8 +261,7 @@ static int load_flat_file(struct linux_binprm * bprm, /* * Allocate the address space. */ - probe_guest_base(bprm->filename, 0, - text_len + data_len + extra + indx_len - 1); + probe_guest_base(bprm->filename, 0, 0); =20 /* * there are a couple of cases here, the separate code/data --=20 2.43.0 From nobody Mon Jun 8 08:43:54 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1780175648; cv=none; d=zohomail.com; s=zohoarc; b=HUzy47V96WlRCzDZA6I5OnH1kSeLIW2GuX3dhnj+tb7ePpYkBW1n0Tt97WAxFslGZ9ON7UgrQOkzTl9LKI8m/rG4i1T0th9CGbT0Bl/5ydnHJh+I/UOmjCtt9fZURk2M24adRlbxic4WW5wfL4IA8ooqpa55Lg+F/6jwNcV7edw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1780175648; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=UXIpY+BcyO+KWcNu+Dj75+LCljfhirlOj1U9J8zLtBs=; b=Q/XS1Cca1APKEZDhsrcDa2el1R+BbW/gO8a0WUk/dBxHu/xcjB0CwHEVj5VRYG7yQFB6GuLLwppALOndtRfZfCBm6v2f8d8MchGS+ZTg2mr0/YkXhU53sInWN8FpJxr00H6fOHBiPDvq320i5Eusc1SUGdyF503v7lU+jZ/oHOM= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1780175648299970.5035383895123; Sat, 30 May 2026 14:14:08 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wTQzS-0005dQ-CO; Sat, 30 May 2026 17:13:06 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wTQzJ-0005cN-So for qemu-devel@nongnu.org; Sat, 30 May 2026 17:12:58 -0400 Received: from mail-pl1-x635.google.com ([2607:f8b0:4864:20::635]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wTQzH-0000cp-TZ for qemu-devel@nongnu.org; Sat, 30 May 2026 17:12:57 -0400 Received: by mail-pl1-x635.google.com with SMTP id d9443c01a7336-2c0b9328c4aso1919105ad.0 for ; Sat, 30 May 2026 14:12:55 -0700 (PDT) Received: from stoup.. ([71.212.142.33]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2bf23c580c6sm59592895ad.82.2026.05.30.14.12.53 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 30 May 2026 14:12:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1780175574; x=1780780374; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=UXIpY+BcyO+KWcNu+Dj75+LCljfhirlOj1U9J8zLtBs=; b=CscD1lMc2eDqr22+npw51Y+oaM1CYQffK6sr4ImT/mydUGs+/Za4weLdpCcdPPFMOQ 2qFo8YqC55O+sXAJnKBlqzHAw3Q4H5XyiEmaiI8MjiTVKpoH94wiHoGolcNVqnoW7kAh YKgQj9/ESea1pBugat6F6zuK63EbAzO1JkqnBAGPHjs90O4rIUry549O0JItduGFX6q+ YOc5tkAQ0K0JTX6JxbGTABDhUCiDvBdnXOl00noWLp6pETNDmJsldBZ0TGifc0bPfPX+ nj1ci2uMJ3DCbPdVYHAUjjMPqbJhrhN3Orc5ky18qyZXCccFlit9C6yhdT8DFa4DW7bU imzw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1780175574; x=1780780374; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=UXIpY+BcyO+KWcNu+Dj75+LCljfhirlOj1U9J8zLtBs=; b=igOsgfrfx0L5qiC1v8rWpM7bRVZZIF5AHILxUv4EzSMZxqtV5Ce7OB3umgVnVLpvVQ ui+H8WW0MQzjbK/mDBDt+P3ZNyicURq/bLACxpQ/pKdYu97zPf4LOK81mQcwEkbrqpe7 Qb4HSsy0X6tVQo4bYUnskst7ad8br1BvXjV6OBXFQklFet3SuLbPRs48o6jF9max5fyc isj5N182hdyLInz37ozDqQDL+FQ5Z+xt3qs2PWLU6n5VBhPGWBKlpdZcGmtIY4YGWlRh ELMHR90kitmUh+5yX30CP2FVN+wUZqnM1NJ4pokAYbnxQRDbEsioYlx4MZO0aWKdhDRo xnSQ== X-Gm-Message-State: AOJu0YzzwdmsElazjJYSY/M5639pi/eDxz7vzQIqlBSer/TlLDQiWCWY NvoA3qBU8Yuw3sFxgTpwc5OZ4Klt6pX2+eB1G6MtmXilmQcoiW4iLaoGSkB76cjLxuDhLlcQCMy hNHf4zIQ= X-Gm-Gg: Acq92OGafD8XgeEIvXIvg7MwjCB1Vs/SDspeSR6nACGJe/nip5A7x6ECl7o38nvvDqH QhmWonAvAFiGndOVh+Xb3Gic0mby8BNG1vpqMb3ZwoDLcmElegnQcv+6EVuTOLqtP8r1HB3BZAh Cd4Ed3pvIJrOPcLFpUA6P9Y0BMa9Nfz6p4pDsIjppH5/N/E7KAdwREWJXCE0xBRcJOp+XBDoo41 iWrssfyl7EaHPBeDj0V/1K9gnzauRZfOTwTiydJuywC8JzLhlV9g0FyB4SkaQk5zOs5ndSPFBvc 5wOPdrTYMoiAUFQYIu1VO8Prs0RuONm56ilSXla5pk6Wy0quSW9jWR676ZnWoz7aSuZFcH/0j7Y kjkMPe8TvfTvlFuSz+FN+tMobOo94Kkx1zNy2HA/uggs3hfWLQ0oyK9f/s6pP7wdOY8LFswuji3 LlBPz1wx5sCbXrhLYbFij8U9epR/ButzP4xIYyh4o= X-Received: by 2002:a17:903:1207:b0:2bd:3bfd:7512 with SMTP id d9443c01a7336-2bf368468ddmr58029325ad.29.1780175574200; Sat, 30 May 2026 14:12:54 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: imp@bsdimp.com, deller@gmx.de Subject: [PATCH 04/13] linux-user: Pass image_range to probe_guest_base Date: Sat, 30 May 2026 14:12:38 -0700 Message-ID: <20260530211248.375318-5-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260530211248.375318-1-richard.henderson@linaro.org> References: <20260530211248.375318-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::635; envelope-from=richard.henderson@linaro.org; helo=mail-pl1-x635.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1780175650078154100 Content-Type: text/plain; charset="utf-8" Pass a PGBRange structure instead of separate guest_loaddr and guest_hiaddr parameters. This allows NULL to indicate that the image is relocatable, so that image_range->lo =3D=3D 0 is a valid fixed setting. Resolves: https://gitlab.com/qemu-project/qemu/-/work_items/1890 Signed-off-by: Richard Henderson Reviewed-by: Helge Deller Reviewed-by: Philippe Mathieu-Daud=C3=A9 Reviewed-by: Warner Losh --- linux-user/user-internals.h | 13 ++++------- linux-user/elfload.c | 46 +++++++++++++++++-------------------- linux-user/flatload.c | 2 +- 3 files changed, 27 insertions(+), 34 deletions(-) diff --git a/linux-user/user-internals.h b/linux-user/user-internals.h index 73b0109e9c..3f41d3f33c 100644 --- a/linux-user/user-internals.h +++ b/linux-user/user-internals.h @@ -83,24 +83,21 @@ typedef struct PGBRange { /** * probe_guest_base: * @image_name: the executable being loaded - * @loaddr: the lowest fixed address within the executable - * @hiaddr: the highest fixed address within the executable + * @image_range: the fixed addresses within the executable * * Creates the initial guest address space in the host memory space. * - * If @loaddr =3D=3D 0, then no address in the executable is fixed, i.e. - * it is fully relocatable. In that case @hiaddr is the size of the - * executable minus one. + * If @image_range is NULL, then no address in the executable is fixed, + * i.e. it is fully relocatable. * * This function will not return if a valid value for guest_base * cannot be chosen. On return, the executable loader can expect * - * target_mmap(loaddr, hiaddr - loaddr + 1, ...) + * target_mmap(i->lo, i->hi - i->lo + 1, ...) * * to succeed. */ -void probe_guest_base(const char *image_name, - abi_ulong loaddr, abi_ulong hiaddr); +void probe_guest_base(const char *image_name, const PGBRange *image_range); =20 /* syscall.c */ int host_to_target_waitstatus(int status); diff --git a/linux-user/elfload.c b/linux-user/elfload.c index 33565ad7be..10a826e658 100644 --- a/linux-user/elfload.c +++ b/linux-user/elfload.c @@ -847,14 +847,13 @@ static bool pgb_try_mmap_set(const PGBAddrs *ga, uint= ptr_t base, uintptr_t brk) /** * pgb_addr_set: * @ga: output set of guest addrs - * @guest_loaddr: guest image low address - * @guest_loaddr: guest image high address + * @image_range: fixed guest image addresses * @identity: create for identity mapping * * Fill in @ga with the image, COMMPAGE and NULL page. */ -static bool pgb_addr_set(PGBAddrs *ga, abi_ulong guest_loaddr, - abi_ulong guest_hiaddr, bool try_identity) +static bool pgb_addr_set(PGBAddrs *ga, const PGBRange *image_range, + bool try_identity) { int n; =20 @@ -866,7 +865,7 @@ static bool pgb_addr_set(PGBAddrs *ga, abi_ulong guest_= loaddr, if (LO_COMMPAGE !=3D -1 && LO_COMMPAGE < mmap_min_addr) { return false; } - if (guest_loaddr !=3D 0 && guest_loaddr < mmap_min_addr) { + if (image_range && image_range->lo < mmap_min_addr) { return false; } } @@ -892,10 +891,8 @@ static bool pgb_addr_set(PGBAddrs *ga, abi_ulong guest= _loaddr, } =20 /* Add the guest image for ET_EXEC. */ - if (guest_loaddr) { - ga->bounds[n].lo =3D guest_loaddr; - ga->bounds[n].hi =3D guest_hiaddr; - n++; + if (image_range) { + ga->bounds[n++] =3D *image_range; } } =20 @@ -928,8 +925,8 @@ static void pgb_fail_in_use(const char *image_name) exit(EXIT_FAILURE); } =20 -static void pgb_fixed(const char *image_name, uintptr_t guest_loaddr, - uintptr_t guest_hiaddr, uintptr_t align) +static void pgb_fixed(const char *image_name, const PGBRange *image_range, + uintptr_t align) { PGBAddrs ga; uintptr_t brk =3D (uintptr_t)sbrk(0); @@ -941,7 +938,7 @@ static void pgb_fixed(const char *image_name, uintptr_t= guest_loaddr, exit(EXIT_FAILURE); } =20 - if (!pgb_addr_set(&ga, guest_loaddr, guest_hiaddr, !guest_base) + if (!pgb_addr_set(&ga, image_range, !guest_base) || !pgb_try_mmap_set(&ga, guest_base, brk)) { pgb_fail_in_use(image_name); } @@ -1026,15 +1023,15 @@ static uintptr_t pgb_find_itree(const PGBAddrs *ga,= IntervalTreeRoot *root, return pgb_try_mmap_set(ga, base, brk) ? base : -1; } =20 -static void pgb_dynamic(const char *image_name, uintptr_t guest_loaddr, - uintptr_t guest_hiaddr, uintptr_t align) +static void pgb_dynamic(const char *image_name, const PGBRange *image_rang= e, + uintptr_t align) { IntervalTreeRoot *root; uintptr_t brk, ret; PGBAddrs ga; =20 /* Try the identity map first. */ - if (pgb_addr_set(&ga, guest_loaddr, guest_hiaddr, true)) { + if (pgb_addr_set(&ga, image_range, true)) { brk =3D (uintptr_t)sbrk(0); if (pgb_try_mmap_set(&ga, 0, brk)) { guest_base =3D 0; @@ -1046,7 +1043,7 @@ static void pgb_dynamic(const char *image_name, uintp= tr_t guest_loaddr, * Rebuild the address set for non-identity map. * This differs in the mapping of the guest NULL page. */ - pgb_addr_set(&ga, guest_loaddr, guest_hiaddr, false); + pgb_addr_set(&ga, image_range, false); =20 root =3D read_self_maps(); =20 @@ -1085,24 +1082,23 @@ static void pgb_dynamic(const char *image_name, uin= tptr_t guest_loaddr, guest_base =3D ret; } =20 -void probe_guest_base(const char *image_name, abi_ulong guest_loaddr, - abi_ulong guest_hiaddr) +void probe_guest_base(const char *image_name, const PGBRange *image_range) { /* In order to use host shmat, we must be able to honor SHMLBA. */ uintptr_t align =3D MAX(SHMLBA, TARGET_PAGE_SIZE); =20 /* Sanity check the guest binary. */ - if (reserved_va && guest_hiaddr > reserved_va) { + if (reserved_va && image_range && image_range->hi > reserved_va) { error_report("%s: requires more than reserved virtual " - "address space (0x%" PRIx64 " > 0x%lx)", - image_name, (uint64_t)guest_hiaddr, reserved_va); + "address space (0x%" VADDR_PRIx " > 0x%lx)", + image_name, image_range->hi, reserved_va); exit(EXIT_FAILURE); } =20 if (have_guest_base) { - pgb_fixed(image_name, guest_loaddr, guest_hiaddr, align); + pgb_fixed(image_name, image_range, align); } else { - pgb_dynamic(image_name, guest_loaddr, guest_hiaddr, align); + pgb_dynamic(image_name, image_range, align); } =20 /* Reserve and initialize the commpage. */ @@ -1362,10 +1358,10 @@ static void load_elf_image(const char *image_name, = const ImageSource *src, * Make sure that the low address does not conflict with * MMAP_MIN_ADDR or the QEMU application itself. */ - probe_guest_base(image_name, range.lo, range.hi); + probe_guest_base(image_name, &range); } else { /* The binary is dynamic; we still need to select guest_base. = */ - probe_guest_base(image_name, 0, 0); + probe_guest_base(image_name, NULL); =20 /* * Avoid collision with the loader by providing a different diff --git a/linux-user/flatload.c b/linux-user/flatload.c index 8abdd2aef2..45d69040c6 100644 --- a/linux-user/flatload.c +++ b/linux-user/flatload.c @@ -261,7 +261,7 @@ static int load_flat_file(struct linux_binprm * bprm, /* * Allocate the address space. */ - probe_guest_base(bprm->filename, 0, 0); + probe_guest_base(bprm->filename, NULL); =20 /* * there are a couple of cases here, the separate code/data --=20 2.43.0 From nobody Mon Jun 8 08:43:54 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1780175670; cv=none; d=zohomail.com; s=zohoarc; b=ipgojPWHimRqDscWCe4SbLG/Inu8rFENEE8lCszJ065S3vSsNDRirDfEKYNr5SiIwR9fAUfI3NhTFzc2cT02qabrrceeb5WEYIIKhNDyDSAqVlvevpeanezHM5Igbe1NNbV00a3S/8hmpo4EsSF5xs89/aK+kOtTxYdO5B3qspc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1780175670; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=rpedD8qpIkRn4d1KeAXXG1O9oyX21USR5oSqTXCzdRs=; b=XLj9SIABF3HR6PBhk3rdjsYEubXns5WCERTnFErxYPzcCPIQ4nJh4hMFkhZnNiRUqgSwo4tjMnb3/K9BUQJWF6pgaxcbnVCLymyJYJWFv2r5sZaHL0u3zEv3OLXfIwNRoliSQu7VEE9UAUnKmtP0sLiD+lInnUgNxD9VSv2Sv6o= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1780175670722317.7432959042387; Sat, 30 May 2026 14:14:30 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wTQzS-0005dW-8T; Sat, 30 May 2026 17:13:06 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wTQzK-0005cd-I1 for qemu-devel@nongnu.org; Sat, 30 May 2026 17:12:59 -0400 Received: from mail-pl1-x62d.google.com ([2607:f8b0:4864:20::62d]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wTQzI-0000cw-HJ for qemu-devel@nongnu.org; Sat, 30 May 2026 17:12:58 -0400 Received: by mail-pl1-x62d.google.com with SMTP id d9443c01a7336-2bf77d4a4e2so3509075ad.1 for ; Sat, 30 May 2026 14:12:56 -0700 (PDT) Received: from stoup.. ([71.212.142.33]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2bf23c580c6sm59592895ad.82.2026.05.30.14.12.54 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 30 May 2026 14:12:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1780175575; x=1780780375; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=rpedD8qpIkRn4d1KeAXXG1O9oyX21USR5oSqTXCzdRs=; b=jJRvvEurk6BH55zxLuPVTUBvphiOUx54G6jV4Da5wX4CCzGVNt20VHO4JZCjTZCqD7 cVOp1VUZb88sgXLyG0jyhH57lhpm2a8RjtK9LWAFugdz6nGL+XDr+CuqePmgMhytP4aO QYSP4fOfI+kUbuM+QfvTULx58ya3tlsJrwWjaU0TwcdQIBQ4mp5Y2WiqwEzdaTgnGTSv GygYga90czJpiLWuU72SNdPZ2582NgljFlMyUlzaBSJ9PC4zoEyMr/SYsu0pTlbWhlCR kjqivhLZrs2n4ykCK3pn4QGUZnYShgAbOXOXBTflXj3Mt11q+938OZE7fDPBnAEpUU/E vl1w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1780175575; x=1780780375; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=rpedD8qpIkRn4d1KeAXXG1O9oyX21USR5oSqTXCzdRs=; b=BlcLWpnwB+M033IIwAjv1bfFsLHOa9QS48AwI4DEBrXwnQur5yCztZVe4Pq0HGC2F+ zeJ9t8IB317uClHkrDFpWmM9aZeXECYpF06uV0gV9l3KLkOQ+QR0rbEtd5wzJHPX7Ugy cAEP7iupKvuG0Ng8hHux0x8zCFnP6/W5MumVNn4HFBOHtuMZY6DlLc7VFVqtGkwhgTqd uqI7AVPzcBIXWhjCABfwRakwx7/uQU9V3OzyXAaShSBfmbsvuWjP+9QIXIPbGJsMQ7G2 LbKsufBnYMVhKya5m98uFHlOTiXnHWJjHRqXEhaBLksO2hrIXD7+dOx6eCueD6OWevjv nGUA== X-Gm-Message-State: AOJu0YwWGsJf7FzfTkJA8376KoadzQ9zE9uSksNz+7WOHQ52tPtK1+/Q 34uCP6D1qDnPwxPciBAieOBThCVpPxFb/KCnljpMKhWYd4HWbyWjKuIg8jBERpYsLGUYOOQAH7U jL3UImEw= X-Gm-Gg: Acq92OHKBg+Y7jD9NoP88AaAQYcVF5MYLGB2IioeqFDeBJjI+nxlACUf5+pbXFQ8bPl nxRIrUnwXVtXdJnAAvJCgYPvvecuyiIVAhUjGyFlFbzRlABSXBul0xyqEST/X8+9+r8Hyr7mGUB 5Zt8Y3pCfRWOazT8HsL58sQr3kWrBpXDdjucrIT5Rh3JE2ZjpQLXzA0lDNkqJz/jYHQrp5mLxnV D8MK/tojqIrSvaj/Kj0+uyRnscafmLW2a6APjOJP6xKykIjaYingV8BejP9NIR3DSKteqrFxuqg knFGZRInRMb/u84F8DgspOdoKfbBWmB34hvqp5nxFQe4JW5h1DnB91v4QeedVHCnPyA8aFUjwx8 axTvmbI4HcpVT+o+iSlkgbOmNidzxzXyHyP24MfD13YhWD0fssZSVchGASDd3ZKXoyyOwi1dHEo BpCF8fQKzo1rGpf7WS6XviNtMN1dX9Z8iO3wpRWEc= X-Received: by 2002:a17:903:1aef:b0:2bf:1dca:7008 with SMTP id d9443c01a7336-2bf3786e50amr37913695ad.2.1780175574943; Sat, 30 May 2026 14:12:54 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: imp@bsdimp.com, deller@gmx.de Subject: [PATCH 05/13] linux-user: Use PGBRange for commpage Date: Sat, 30 May 2026 14:12:39 -0700 Message-ID: <20260530211248.375318-6-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260530211248.375318-1-richard.henderson@linaro.org> References: <20260530211248.375318-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::62d; envelope-from=richard.henderson@linaro.org; helo=mail-pl1-x62d.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1780175672849158500 Content-Type: text/plain; charset="utf-8" This simplifies check for no commpage to a NULL pointer check, rather than reserved values for LO_COMMPAGE and HI_COMMPAGE. Unify {LO,HI}_COMMPAGE into a single COMMPAGE define. Signed-off-by: Richard Henderson Acked-by: Warner Losh Reviewed-by: Helge Deller Reviewed-by: Philippe Mathieu-Daud=C3=A9 --- linux-user/arm/target_elf.h | 2 +- linux-user/hppa/target_elf.h | 2 +- linux-user/arm/elfload.c | 2 +- linux-user/elfload.c | 64 ++++++++++++++---------------------- linux-user/hppa/elfload.c | 4 +-- 5 files changed, 30 insertions(+), 44 deletions(-) diff --git a/linux-user/arm/target_elf.h b/linux-user/arm/target_elf.h index 12cdc8e5a7..531b486bf9 100644 --- a/linux-user/arm/target_elf.h +++ b/linux-user/arm/target_elf.h @@ -20,7 +20,7 @@ #define HAVE_ELF_CORE_DUMP 1 #define HAVE_VDSO_IMAGE_INFO 1 =20 -#define HI_COMMPAGE ((intptr_t)0xffff0f00u) +#define COMMPAGE ((intptr_t)0xffff0f00u) =20 /* * See linux kernel: arch/arm/include/asm/elf.h, where diff --git a/linux-user/hppa/target_elf.h b/linux-user/hppa/target_elf.h index e1c5033242..22547b1437 100644 --- a/linux-user/hppa/target_elf.h +++ b/linux-user/hppa/target_elf.h @@ -34,7 +34,7 @@ typedef struct target_elf_gregset_t { abi_ulong pad[16]; /* pad to 80 elements [64..79] = */ } target_elf_gregset_t; =20 -#define LO_COMMPAGE 0 +#define COMMPAGE 0 #define STACK_GROWS_DOWN 0 #define STACK_ALIGNMENT 64 #define VDSO_HEADER "vdso.c.inc" diff --git a/linux-user/arm/elfload.c b/linux-user/arm/elfload.c index fef61022a3..3c2ccf289c 100644 --- a/linux-user/arm/elfload.c +++ b/linux-user/arm/elfload.c @@ -219,7 +219,7 @@ bool init_guest_commpage(void) return true; } =20 - commpage =3D HI_COMMPAGE & -host_page_size; + commpage =3D COMMPAGE & -host_page_size; want =3D g2h_untagged(commpage); addr =3D mmap(want, host_page_size, PROT_READ | PROT_WRITE, MAP_ANONYMOUS | MAP_PRIVATE | diff --git a/linux-user/elfload.c b/linux-user/elfload.c index 10a826e658..5a30cebcc3 100644 --- a/linux-user/elfload.c +++ b/linux-user/elfload.c @@ -757,17 +757,9 @@ static abi_ulong create_elf_tables(abi_ulong p, int ar= gc, int envc, return sp; } =20 -#if defined(HI_COMMPAGE) -#define LO_COMMPAGE -1 -#elif defined(LO_COMMPAGE) -#define HI_COMMPAGE 0 -#else -#define HI_COMMPAGE 0 -#define LO_COMMPAGE -1 -#ifndef HAVE_GUEST_COMMPAGE +#if !defined(COMMPAGE) && !defined(HAVE_GUEST_COMMPAGE) bool init_guest_commpage(void) { return true; } #endif -#endif =20 /** * pgb_try_mmap: @@ -853,7 +845,7 @@ static bool pgb_try_mmap_set(const PGBAddrs *ga, uintpt= r_t base, uintptr_t brk) * Fill in @ga with the image, COMMPAGE and NULL page. */ static bool pgb_addr_set(PGBAddrs *ga, const PGBRange *image_range, - bool try_identity) + const PGBRange *commpage_range, bool try_identity) { int n; =20 @@ -862,7 +854,7 @@ static bool pgb_addr_set(PGBAddrs *ga, const PGBRange *= image_range, * we may not be able to use the identity map. */ if (try_identity) { - if (LO_COMMPAGE !=3D -1 && LO_COMMPAGE < mmap_min_addr) { + if (commpage_range && commpage_range->lo < mmap_min_addr) { return false; } if (image_range && image_range->lo < mmap_min_addr) { @@ -877,14 +869,10 @@ static bool pgb_addr_set(PGBAddrs *ga, const PGBRange= *image_range, ga->bounds[n].lo =3D try_identity ? mmap_min_addr : 0; ga->bounds[n].hi =3D reserved_va; n++; - /* LO_COMMPAGE and NULL handled by reserving from 0. */ + /* Low COMMPAGE and NULL handled by reserving from 0. */ } else { - /* Add any LO_COMMPAGE or NULL page. */ - if (LO_COMMPAGE !=3D -1) { - ga->bounds[n].lo =3D 0; - ga->bounds[n].hi =3D LO_COMMPAGE + TARGET_PAGE_SIZE - 1; - n++; - } else if (!try_identity) { + /* Add any low COMMPAGE or NULL page. */ + if (!try_identity || (commpage_range && commpage_range->lo =3D=3D = 0)) { ga->bounds[n].lo =3D 0; ga->bounds[n].hi =3D TARGET_PAGE_SIZE - 1; n++; @@ -896,23 +884,13 @@ static bool pgb_addr_set(PGBAddrs *ga, const PGBRange= *image_range, } } =20 - /* - * Temporarily disable - * "comparison is always false due to limited range of data type" - * due to comparison between unsigned and (possible) 0. - */ -#pragma GCC diagnostic push -#pragma GCC diagnostic ignored "-Wtype-limits" - - /* Add any HI_COMMPAGE not covered by reserved_va. */ - if (reserved_va < HI_COMMPAGE) { - ga->bounds[n].lo =3D HI_COMMPAGE & qemu_real_host_page_mask(); - ga->bounds[n].hi =3D HI_COMMPAGE + TARGET_PAGE_SIZE - 1; + /* Add any high COMMPAGE not covered by reserved_va. */ + if (commpage_range && reserved_va < commpage_range->hi) { + ga->bounds[n].lo =3D commpage_range->lo & qemu_real_host_page_mask= (); + ga->bounds[n].hi =3D commpage_range->hi; n++; } =20 -#pragma GCC diagnostic pop - ga->nbounds =3D n; return true; } @@ -926,7 +904,7 @@ static void pgb_fail_in_use(const char *image_name) } =20 static void pgb_fixed(const char *image_name, const PGBRange *image_range, - uintptr_t align) + const PGBRange *commpage_range, uintptr_t align) { PGBAddrs ga; uintptr_t brk =3D (uintptr_t)sbrk(0); @@ -938,7 +916,7 @@ static void pgb_fixed(const char *image_name, const PGB= Range *image_range, exit(EXIT_FAILURE); } =20 - if (!pgb_addr_set(&ga, image_range, !guest_base) + if (!pgb_addr_set(&ga, image_range, commpage_range, !guest_base) || !pgb_try_mmap_set(&ga, guest_base, brk)) { pgb_fail_in_use(image_name); } @@ -1024,14 +1002,14 @@ static uintptr_t pgb_find_itree(const PGBAddrs *ga,= IntervalTreeRoot *root, } =20 static void pgb_dynamic(const char *image_name, const PGBRange *image_rang= e, - uintptr_t align) + const PGBRange *commpage_range, uintptr_t align) { IntervalTreeRoot *root; uintptr_t brk, ret; PGBAddrs ga; =20 /* Try the identity map first. */ - if (pgb_addr_set(&ga, image_range, true)) { + if (pgb_addr_set(&ga, image_range, commpage_range, true)) { brk =3D (uintptr_t)sbrk(0); if (pgb_try_mmap_set(&ga, 0, brk)) { guest_base =3D 0; @@ -1043,7 +1021,7 @@ static void pgb_dynamic(const char *image_name, const= PGBRange *image_range, * Rebuild the address set for non-identity map. * This differs in the mapping of the guest NULL page. */ - pgb_addr_set(&ga, image_range, false); + pgb_addr_set(&ga, image_range, commpage_range, false); =20 root =3D read_self_maps(); =20 @@ -1084,6 +1062,14 @@ static void pgb_dynamic(const char *image_name, cons= t PGBRange *image_range, =20 void probe_guest_base(const char *image_name, const PGBRange *image_range) { +#ifdef COMMPAGE + const PGBRange * const commpage_range =3D &(PGBRange){ + COMMPAGE, COMMPAGE + TARGET_PAGE_SIZE - 1 + }; +#else + const PGBRange * const commpage_range =3D NULL; +#endif + /* In order to use host shmat, we must be able to honor SHMLBA. */ uintptr_t align =3D MAX(SHMLBA, TARGET_PAGE_SIZE); =20 @@ -1096,9 +1082,9 @@ void probe_guest_base(const char *image_name, const P= GBRange *image_range) } =20 if (have_guest_base) { - pgb_fixed(image_name, image_range, align); + pgb_fixed(image_name, image_range, commpage_range, align); } else { - pgb_dynamic(image_name, image_range, align); + pgb_dynamic(image_name, image_range, commpage_range, align); } =20 /* Reserve and initialize the commpage. */ diff --git a/linux-user/hppa/elfload.c b/linux-user/hppa/elfload.c index 3354e1b840..3bfe93ada8 100644 --- a/linux-user/hppa/elfload.c +++ b/linux-user/hppa/elfload.c @@ -35,7 +35,7 @@ bool init_guest_commpage(void) if (!reserved_va) { void *want, *addr; =20 - want =3D g2h_untagged(LO_COMMPAGE); + want =3D g2h_untagged(COMMPAGE); addr =3D mmap(want, TARGET_PAGE_SIZE, PROT_NONE, MAP_ANONYMOUS | MAP_PRIVATE | MAP_FIXED_NOREPLACE, -1,= 0); if (addr =3D=3D MAP_FAILED) { @@ -54,7 +54,7 @@ bool init_guest_commpage(void) * and implement syscalls. Here, simply mark the page executable. * Special case the entry points during translation (see do_page_zero). */ - page_set_flags(LO_COMMPAGE, LO_COMMPAGE | ~TARGET_PAGE_MASK, + page_set_flags(COMMPAGE, COMMPAGE | ~TARGET_PAGE_MASK, PAGE_EXEC | PAGE_VALID, PAGE_VALID); return true; } --=20 2.43.0 From nobody Mon Jun 8 08:43:54 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1780175647; cv=none; d=zohomail.com; s=zohoarc; b=l9YlYFkz63pcVudWTBqo2zkvYGvNKhH+8bHmodld4tJpQXf+b/VuqhJKVYNbogzZmn/gyod5R5+r5CdDVkWXrWpBYISnCJ25k97plafjaigENlNr0QoPI+doDEbJqZJT83HV2nUdbntldlUT7ik2CzRxo8AN1WvYXgAcqd1Q8kI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1780175647; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=J/h6IUrlognRVrhf7VP7UXXkxNTUlEyz8hZZ9YneTZI=; b=NnZI/O32IyxgTqizNVJ+F4FsjS/A/4DYghgmdNbaMTXY4QFd5PCYyo+d7pI2S2ttZVqq9LMKGh8+HRiL5bJNoQ2oTN0UfHyxhmveA6rgyplY5W/0CaFWfy002OnBTTvEQUmLVGwmYHpCKs/OhtgthvYPnYnDuSk/yoWReOHskEY= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1780175647389649.4970066206597; Sat, 30 May 2026 14:14:07 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wTQzV-0005eR-3k; Sat, 30 May 2026 17:13:09 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wTQzL-0005cn-Ft for qemu-devel@nongnu.org; Sat, 30 May 2026 17:13:00 -0400 Received: from mail-pl1-x633.google.com ([2607:f8b0:4864:20::633]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wTQzJ-0000d2-EJ for qemu-devel@nongnu.org; Sat, 30 May 2026 17:12:59 -0400 Received: by mail-pl1-x633.google.com with SMTP id d9443c01a7336-2bf22d29dabso13273545ad.2 for ; Sat, 30 May 2026 14:12:57 -0700 (PDT) Received: from stoup.. ([71.212.142.33]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2bf23c580c6sm59592895ad.82.2026.05.30.14.12.55 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 30 May 2026 14:12:55 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1780175576; x=1780780376; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=J/h6IUrlognRVrhf7VP7UXXkxNTUlEyz8hZZ9YneTZI=; b=mmGus7Qwa2xRUytoLml8K+INQCQBJl7shTvYAmG5eY+jB5ZSO+GUsach5xSDGFTuAC 1Lm4AtftKQBMrkV0TntOUoSfBfmn1YhCynYsVCmqClPoIMZyH9XGHeYqtwh9TNL55oa+ ODauGfqYCaFVdLTQRRuXXtUw/bCEJgPtfAswtNXvOS0AsVp2vkzxeLE7mx/nBD4er6Qi /BJtdbQuY+5yTRkpmoo3t0hZZ5qM14EHjnfOSgbJph/Op/l6+D2ATj1p5zjdZL8jvQ1a VUEV3p+czTr6dfgRDxtlakO8MBzCrDOfHUThWM3tsnI0EOuySFN11vVyWz34K6qMacAD FBHQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1780175576; x=1780780376; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=J/h6IUrlognRVrhf7VP7UXXkxNTUlEyz8hZZ9YneTZI=; b=d/80JeEM/ljwj6LcQol2aHYoiq+8BRy4GGC7dmP1sXQyMqYzqTnsWBIMF2b2+k6S0S Dw0hISSqiSMQ4X090HSgKzZJPRRp49Zg93T8VdUi4Y87SMyAW8Gw3j6zP8SGhrahcWka gUl8VwWXUbMvNp7f6m6e12wzu0nLiDKD1tCDUVqJKs4IhJeMP5b5J+f+FlBEYANSwMr1 uUULkjj0DyREdxnMyVwsup+KE70Kdi68UINIglQNuZQOJ4+H+cKIyFHxPlMq/H/2trgg SQM90o9Q0X8UkgFDWNgiPx7C4z1GkVzhLX00PjfB179MeKXIiD+41RFGGY13+z1Al3oa 1xoA== X-Gm-Message-State: AOJu0YyadiofTFjto6sh7RQqsLihj09UnkXeVf5zfA5khEUAkLeoY7XT WV6f6Pn9E8W0IYwQquCLmT2tA6k6awNK2iiWEzugsS1HU/N/izAc2lHATJjSKJNLlcoRfHV/b5t 0gUvISMA= X-Gm-Gg: Acq92OHlmtC4QUUR7CFFLfhvP9ZK7h+l8/ZQeAyO0NALy03nuZZwQjn5rGeAtFFN0zn mUaaIYVcz2KXyOg977l8x8VpoOZW89UnbLh8ku1FBpZhqLiFl4nhgHEBKpWh+FfeHVJJ7thRSBc IRw4+zo/X5A14tHyf2tRglm4Mx+2q365oS6aio75rFKXWI1k3Ntlrd6LMd9+6S2/QIkJyt9Le/K IE+LqmKcSjcXMnr2VPGh7OgyDRCsSEcWlTGMCGY2BSEbvsi0IEvbP5ZS9if8ne0FEYH3YeSuk6d HaWScAPUaiNhLB+mvJ52hLtUdyXSrM2RNlVP0AJi0r7qCvk+ovXECqBKyLXIn7JSzLq4/qUEE9g GICOFfICed+FvGSqQOktOgU/whrHalT4dYFcY/R4FrqZoopVy5N5D+UxA7XTdFQhNkX8nrhRS3p vDa6Jc+ZZ7jldG+XKokCW11N+ze88lfwmtjb+8ihw= X-Received: by 2002:a17:903:2bce:b0:2bf:128d:f7ff with SMTP id d9443c01a7336-2bf367d2311mr57768705ad.16.1780175575740; Sat, 30 May 2026 14:12:55 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: imp@bsdimp.com, deller@gmx.de Subject: [PATCH 06/13] common-user: Move mmap_min_addr from linux-user Date: Sat, 30 May 2026 14:12:40 -0700 Message-ID: <20260530211248.375318-7-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260530211248.375318-1-richard.henderson@linaro.org> References: <20260530211248.375318-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::633; envelope-from=richard.henderson@linaro.org; helo=mail-pl1-x633.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1780175648908158500 Content-Type: text/plain; charset="utf-8" Introduce user/mmap-min-addr.h. Initialize the variable from a constructor instead of main. Signed-off-by: Richard Henderson Reviewed-by: Warner Losh --- include/user/mmap-min-addr.h | 12 ++++++++++++ linux-user/user-internals.h | 1 - common-user/mmap-min-addr.c | 37 ++++++++++++++++++++++++++++++++++++ linux-user/elfload.c | 1 + linux-user/main.c | 33 +++----------------------------- linux-user/mmap.c | 1 + common-user/meson.build | 1 + 7 files changed, 55 insertions(+), 31 deletions(-) create mode 100644 include/user/mmap-min-addr.h create mode 100644 common-user/mmap-min-addr.c diff --git a/include/user/mmap-min-addr.h b/include/user/mmap-min-addr.h new file mode 100644 index 0000000000..ded0b6909d --- /dev/null +++ b/include/user/mmap-min-addr.h @@ -0,0 +1,12 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later */ + +#ifndef USER_MMAP_MIN_ADDR_H +#define USER_MMAP_MIN_ADDR_H + +#ifndef CONFIG_USER_ONLY +#error Cannot include this header from system emulation +#endif + +extern uintptr_t mmap_min_addr; + +#endif diff --git a/linux-user/user-internals.h b/linux-user/user-internals.h index 3f41d3f33c..bc6b9f44e6 100644 --- a/linux-user/user-internals.h +++ b/linux-user/user-internals.h @@ -29,7 +29,6 @@ void init_task_state(TaskState *ts); void task_settid(TaskState *); void stop_all_tasks(void); extern const char *qemu_uname_release; -extern unsigned long mmap_min_addr; =20 typedef struct IOCTLEntry IOCTLEntry; =20 diff --git a/common-user/mmap-min-addr.c b/common-user/mmap-min-addr.c new file mode 100644 index 0000000000..b2b3762386 --- /dev/null +++ b/common-user/mmap-min-addr.c @@ -0,0 +1,37 @@ +/* + * Utility function to get the minimum mmap address. + * SPDX-License-Identifier: GPL-2.0-or-later + */ + +#include "qemu/osdep.h" +#include "user/mmap-min-addr.h" + +uintptr_t mmap_min_addr; + +static void __attribute__((constructor)) init(void) +{ +#ifdef __linux__ + /* + * We prefer to not make NULL pointers accessible to QEMU. + * If something goes wrong below, fall back to 1 page. + */ + size_t min_addr =3D qemu_real_host_page_size(); + /* + * Read in mmap_min_addr kernel parameter. This value is used + * When loading the ELF image to determine whether guest_base + * is needed. It is also used in mmap_find_vma. + */ + FILE *fp =3D fopen("/proc/sys/vm/mmap_min_addr", "r"); + + if (fp) { + unsigned long tmp; + if (fscanf(fp, "%lu", &tmp) =3D=3D 1 && tmp !=3D 0) { + min_addr =3D MAX(min_addr, tmp); + } + fclose(fp); + } + mmap_min_addr =3D min_addr; +#else +# error +#endif +} diff --git a/linux-user/elfload.c b/linux-user/elfload.c index 5a30cebcc3..93ab2661e3 100644 --- a/linux-user/elfload.c +++ b/linux-user/elfload.c @@ -14,6 +14,7 @@ #include "exec/translation-block.h" #include "exec/tswap.h" #include "user/guest-base.h" +#include "user/mmap-min-addr.h" #include "user-internals.h" #include "signal-common.h" #include "loader.h" diff --git a/linux-user/main.c b/linux-user/main.c index c08c73fd80..01cf5bf079 100644 --- a/linux-user/main.c +++ b/linux-user/main.c @@ -39,6 +39,7 @@ #include "qemu/module.h" #include "qemu/plugin.h" #include "user/guest-base.h" +#include "user/mmap-min-addr.h" #include "user/page-protection.h" #include "exec/gdbstub.h" #include "gdbstub/user.h" @@ -78,7 +79,6 @@ static envlist_t *envlist; static const char *cpu_model; static const char *cpu_type; static const char *seed_optarg; -unsigned long mmap_min_addr; uintptr_t guest_base; bool have_guest_base; =20 @@ -914,35 +914,8 @@ int main(int argc, char **argv, char **envp) target_environ =3D envlist_to_environ(envlist, NULL); envlist_free(envlist); =20 - /* - * Read in mmap_min_addr kernel parameter. This value is used - * When loading the ELF image to determine whether guest_base - * is needed. It is also used in mmap_find_vma. - */ - { - FILE *fp; - - if ((fp =3D fopen("/proc/sys/vm/mmap_min_addr", "r")) !=3D NULL) { - unsigned long tmp; - if (fscanf(fp, "%lu", &tmp) =3D=3D 1 && tmp !=3D 0) { - mmap_min_addr =3D MAX(tmp, host_page_size); - qemu_log_mask(CPU_LOG_PAGE, "host mmap_min_addr=3D0x%lx\n", - mmap_min_addr); - } - fclose(fp); - } - } - - /* - * We prefer to not make NULL pointers accessible to QEMU. - * If we're in a chroot with no /proc, fall back to 1 page. - */ - if (mmap_min_addr =3D=3D 0) { - mmap_min_addr =3D host_page_size; - qemu_log_mask(CPU_LOG_PAGE, - "host mmap_min_addr=3D0x%lx (fallback)\n", - mmap_min_addr); - } + qemu_log_mask(CPU_LOG_PAGE, "host mmap_min_addr=3D0x%" PRIxPTR "\n", + mmap_min_addr); =20 /* * Prepare copy of argv vector for target. diff --git a/linux-user/mmap.c b/linux-user/mmap.c index b4b7b3e5cc..f81417182e 100644 --- a/linux-user/mmap.c +++ b/linux-user/mmap.c @@ -24,6 +24,7 @@ #include "exec/mmap-lock.h" #include "qemu.h" #include "user/page-protection.h" +#include "user/mmap-min-addr.h" #include "user-internals.h" #include "user-mmap.h" #include "target_mman.h" diff --git a/common-user/meson.build b/common-user/meson.build index ac9de5b9e3..f9e2e83f9a 100644 --- a/common-user/meson.build +++ b/common-user/meson.build @@ -5,6 +5,7 @@ endif common_user_inc +=3D include_directories('host/' / host_arch) =20 user_ss.add(files( + 'mmap-min-addr.c', 'safe-syscall.S', 'safe-syscall-error.c', )) --=20 2.43.0 From nobody Mon Jun 8 08:43:54 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1780175648; cv=none; d=zohomail.com; s=zohoarc; b=CDgrCW4qtugfSn5WzMiboes6no6vZXIftkchzrqQOuhV5ggYVvJVgIqPNzprSfKPFPQiHcBirk65JuXZeir1UD568euhHZIYWjz7RjLvWqCEDBfZjx1ghidyMXpCR9KRbZ1jchCJH56LPRcXggGUrbn+yiYm6SbnhOzP3OkWga0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1780175648; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=VB0QJcqyoVRmXmBw8fsbJF6h0psM6cqzMVuAr7gGazU=; b=Msrguq2y9j7fyLYY9dbmA/wcaovKmbWm2wNVHXzA6qIK9INfpg7mQLZPL5rsbFuEijHXPdZpUY9CaLcSHVbZj4YyGShxFWLGn3ipA+bbWV1KvlaKEKISwsy2lSPiTYvUliKg8EdRHvUggrARr/2MX2eTD4pRVoXSvVvHzVBneMU= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1780175648474800.4905162599889; Sat, 30 May 2026 14:14:08 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wTQzW-0005fB-Mb; Sat, 30 May 2026 17:13:10 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wTQzL-0005cr-JH for qemu-devel@nongnu.org; Sat, 30 May 2026 17:13:00 -0400 Received: from mail-pl1-x631.google.com ([2607:f8b0:4864:20::631]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wTQzK-0000dG-0l for qemu-devel@nongnu.org; Sat, 30 May 2026 17:12:59 -0400 Received: by mail-pl1-x631.google.com with SMTP id d9443c01a7336-2bf36a6905cso6367145ad.3 for ; Sat, 30 May 2026 14:12:57 -0700 (PDT) Received: from stoup.. ([71.212.142.33]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2bf23c580c6sm59592895ad.82.2026.05.30.14.12.56 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 30 May 2026 14:12:56 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1780175577; x=1780780377; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=VB0QJcqyoVRmXmBw8fsbJF6h0psM6cqzMVuAr7gGazU=; b=QNB1TGxq3x0i4L5XzSO2ez1/JT8o47NKtc41hqOPOffcxpVlYHuAZ0/W1anIFW7uDZ WpEjClmhn7Q9Ptgt4RqQ9tZTobblsOGtOFisQ8ElKDtZ9fyZDHMvkNMDPbwESEv5I8DS 0SZH2mygzr7r3csPgfDapQf+KWCnEUO4XQXmX+KIiRRdfH/Y3U2qbSMGcTVVE+jebp1W pd9Htdr8smEKNZ+41Vb+5BKYtlgNGqA6kActHKtAGZQVJqVg235kOzOd7pSDkUh/13xg yaogPz7mTPZ41vmgi1RBKhYHAfwmuvHei5yd0Ud4t7wDkkXN9daXnwpQUk0GxFf1CUNw m0qg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1780175577; x=1780780377; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=VB0QJcqyoVRmXmBw8fsbJF6h0psM6cqzMVuAr7gGazU=; b=qrIXvBgwNY31r9+Z3KdGyZi6pxAgv7J/xOp/GMwSrHvG5iEug04IuH43EHW9LEMIs9 S0x1F8lJVLAl2Oc7CLbi5pXgCKe3+xrljMZciqfFvWDGJ7ZJv/iH2ezmQVTCeD3zfRI/ D6AADI+HjLu41yunT38k9D3+V0hkOgdgLTcz6kR60e5Ys89kAZ+Pkt1pJqORw9kPDzbc +NilO/d2L5nP0fn5+HXcz2r5Z5SzcBN49XhpPlC9T7yRz+j1LGo0UUeultnPpwLM0PC3 m0WfKpNGjbhVBv4ShYigR//pA5vGfS3jqntonulDbexnI9yYTgRv1uhJnhtfU29K0xar /mzw== X-Gm-Message-State: AOJu0YywuuHfPwXWgTxDBGadod7kSXnTa7FkYby+8yE7f8Hp0vBDlipE QxbO/Dvs0C8Ls7ok2tFeklxuAZhJs94Gk2jVX8Ve5TKLsWKWHcCrRJTOLkkUgnACVXxbdp0rr/G dxOfMAYs= X-Gm-Gg: Acq92OGsMiMYG7tfpXimwcOwtjbf4LnVuOA/rH5jjdKdfLF4p+FrEpgfPDconJt01Ef meSvYWBdZBD1B/gb7uFoHNGhJaJoCpU5iVvTUyCUbB3L5GVi/OM5sG9COdB/UXQGhRZwWDnKmny sMdBxt4ykgUrhQxgeLao7XJMGiBZuwsO+gSBXm+CQaEkRo+rAzj+W3W0K4KCvj4AUMmlvpIzh8M A6WeYdqU3U/sXjJ2xJ2P5OzFn+v1Wrq5RjiIPH7cX4DzBJ5ZNFcyFsW7U9HH72t9zbJ3x8IDX7H UvxIkaCVFmE+SkzY9MQiWq6rYgoPfkK68YYWxPDiEUTzcwrluFHtxf5q39U1/Bq8OjR6M74sEam M6mO06cl7QsH5FvJckL7COonZqfCTozPfDE9IgAlsPELPvCid88ueG6bQRRK4jNHnMDGC6BCMFx NHjhvqLFd/ht1cqnp5pfSXTw8V1jPk2uHxn1o4Fo8= X-Received: by 2002:a17:902:c949:b0:2be:1c3c:72bb with SMTP id d9443c01a7336-2bf36860a25mr59753535ad.33.1780175576541; Sat, 30 May 2026 14:12:56 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: imp@bsdimp.com, deller@gmx.de Subject: [PATCH 07/13] common-user: Initialize mmap_min_addr for FreeBSD Date: Sat, 30 May 2026 14:12:41 -0700 Message-ID: <20260530211248.375318-8-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260530211248.375318-1-richard.henderson@linaro.org> References: <20260530211248.375318-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::631; envelope-from=richard.henderson@linaro.org; helo=mail-pl1-x631.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1780175650002154100 Content-Type: text/plain; charset="utf-8" Use sysctl to fetch the vm layout of the current process. Signed-off-by: Richard Henderson Reviewed-by: Warner Losh --- 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 @@ =20 #include "qemu/osdep.h" #include "user/mmap-min-addr.h" +#ifdef __FreeBSD__ +#include +#include +#endif =20 uintptr_t mmap_min_addr; =20 @@ -31,6 +35,15 @@ static void __attribute__((constructor)) init(void) fclose(fp); } mmap_min_addr =3D min_addr; +#elif defined(__FreeBSD__) + int mib[] =3D { CTL_KERN, KERN_PROC, KERN_PROC_VM_LAYOUT, getpid() }; + struct kinfo_vm_layout info; + size_t info_len =3D sizeof(info); + + mmap_min_addr =3D + (sysctl(mib, ARRAY_SIZE(mib), &info, &info_len, NULL, 0) < 0 + ? qemu_real_host_page_size() + : info.kvm_min_user_addr); #else # error #endif --=20 2.43.0 From nobody Mon Jun 8 08:43:54 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1780175670; cv=none; d=zohomail.com; s=zohoarc; b=cC8WLfigjRuO7Gpk521lwvdfM10WAun5rT+R6K//pCI5iTc9Tvj7bB2YY9ziCia1UqzZhRvZszmneCjHa6HYI4czGv5SlBL3rHQyK9rg91F9zzoAP+y1gd/ndAaGO8/eK/lebvQk6htGmEP6jVUHGz8Q79azH4DLEKqYGfIDDi0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1780175670; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=riZGLawdoBOsnTwywvNnX4cT6gxxxwkn5L7hcDVC/T8=; b=QTFLttoBiFja1eEfrJGAcIPZhhdy2G4lc8wTbnlxXcnJO9B86n28Rm/NqebJfloT16ArSEgQvrKB+J6qCPr4ps3AAz/UWlO7fWhMik6VrvQzxTnvNFFyvEcep8s5sFYjebp9v0OfuDw79hTUIraQ5AYHFaa00NMavskKvkq/FY0= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1780175670972572.7744038579585; Sat, 30 May 2026 14:14:30 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wTQzU-0005e2-Ad; Sat, 30 May 2026 17:13:08 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wTQzN-0005dE-Sk for qemu-devel@nongnu.org; Sat, 30 May 2026 17:13:02 -0400 Received: from mail-pl1-x62f.google.com ([2607:f8b0:4864:20::62f]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wTQzM-0000dz-Fl for qemu-devel@nongnu.org; Sat, 30 May 2026 17:13:01 -0400 Received: by mail-pl1-x62f.google.com with SMTP id d9443c01a7336-2c0bb4a94b8so1655105ad.2 for ; Sat, 30 May 2026 14:13:00 -0700 (PDT) Received: from stoup.. ([71.212.142.33]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2bf23c580c6sm59592895ad.82.2026.05.30.14.12.56 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 30 May 2026 14:12:56 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1780175579; x=1780780379; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=riZGLawdoBOsnTwywvNnX4cT6gxxxwkn5L7hcDVC/T8=; b=CST/WvmVJ4UbgyHTmUijqvvUBZbEG83j5p+w3cWWXKNvUYNKtlJ4CeLaBGWfgii4Gs rzgplRqxBqIxYidLi2oVyqERdxwpdu7DXX+1kb4Fcvo71y0wrS4jzCxNOLqm4u0iG1fF 06tPFNAJFUGS9ttnCkGak9JmlPhv2CcMGvpGx/D9Em9u6GIn+DfJBfF16HYIsHpPk0nJ Dst42VwsuPfdnjso3T4ABTia7R3F2JI7Q3VOtGBQHkQ6Z//L/drflYTtKz7ZACa2+FJh cH/ZbQ4yjcjjIV3VXDnN4InZ/0Kj1/sH6N4Fdw1l4TVSi0LovGaF6v+7ovaAMY743K/M VeDQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1780175579; x=1780780379; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=riZGLawdoBOsnTwywvNnX4cT6gxxxwkn5L7hcDVC/T8=; b=Pdt8bC2eZHpMX+LoX0PDM57FfG2FyOfx6P7Sk1co/1MWg2o/hce9XqyRJIfqGoDCGQ WNo7IUfrFFKP4aeQBlHrYonzSD8AKdjlwpAJbfpa16et12OTqDUuOn6Zi8sjaPW4iG7J CB1l1MOA8PbJtkp2nlXxbH08lnLcjgk73oSrISyqrzCS/TPqGxl+Oc2ne0GbwHSlykio nDZsNqkkpksrwgeCocYnNKcIDTUhH7QIwyrqEIELDEI6WHzNnUntjPM99u+uEl4oiK88 O4dOsrNxcVZ29C4bkB+y6PK5wdaBvJNCxKzGt0p0tyj5ObVR8Ho9W8T6TBZrreuVchyh wslg== X-Gm-Message-State: AOJu0YwADls3AHrfoQFVEvLWkaw6gLYzXmJG1hccuXODNHuzgaDHNqIY eRGeOXKpnbyMGVFWzF3CBbkIpvMebtv8lZLZ3mjjTY5dkuuVyc1aINKWUMsv2UI57Zqt7UxHrFy /Sh22gS0= X-Gm-Gg: Acq92OESadkvilWPUgyeDmApQkEe/3fXb0UgYsiIvMj2NX60N6vr+QJdLPFJAhbA3Ul PkdhUZUixiesG1rYhsMeIGrzHRfK4XeZSoVIc+xq5UE0cKvzpj7jpPK9dlDEVnwRfHqvoncCpBl lGdkXYJIbo3HktqATrYcSSTOAPCuVtOW+efkXfXcV8TbQhH/TZrpBk6ktz0zXrK/Bgl6yd3oAGC fOT8jjm0QKcVnBRSRkm0uxit5eTYZ0TA9xzjq0Zp26N/rYRWDINuXrwgyLy0kcNABFpKk+QurVC jjWkFMhJjPmi+QT/I0/NoPTaec0gcwOE433QyC4xlOE/JqrWsPxfmYSzOYnJadT7Z/MB1D20xQ5 muuhFyQBd3/hPXcoBWq7VIr9G5YGCrCfTvqRK+2mt6fDIEHiJkzMpfTbIfj3ISZzXwi7UO2fOCw 1ffWRfzzs/m5XEHeqh/WSv3W2W3Zk4QJhDbnZVqvZGqM7WdJphag== X-Received: by 2002:a17:903:3510:b0:2bf:3559:b25f with SMTP id d9443c01a7336-2bf367dd7ffmr65151115ad.18.1780175577173; Sat, 30 May 2026 14:12:57 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: imp@bsdimp.com, deller@gmx.de Subject: [PATCH 08/13] include/user/guest-host: Include missing cpu.h Date: Sat, 30 May 2026 14:12:42 -0700 Message-ID: <20260530211248.375318-9-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260530211248.375318-1-richard.henderson@linaro.org> References: <20260530211248.375318-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::62f; envelope-from=richard.henderson@linaro.org; helo=mail-pl1-x62f.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1780175672818158500 Content-Type: text/plain; charset="utf-8" This file uses CPUState without including the required header. Signed-off-by: Richard Henderson Reviewed-by: Philippe Mathieu-Daud=C3=A9 Reviewed-by: Warner Losh --- include/user/guest-host.h | 1 + 1 file changed, 1 insertion(+) diff --git a/include/user/guest-host.h b/include/user/guest-host.h index ef83ad8a18..506efc097e 100644 --- a/include/user/guest-host.h +++ b/include/user/guest-host.h @@ -10,6 +10,7 @@ =20 #include "exec/vaddr.h" #include "user/guest-base.h" +#include "hw/core/cpu.h" #include "accel/tcg/cpu-ops.h" =20 /* --=20 2.43.0 From nobody Mon Jun 8 08:43:55 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1780175675; cv=none; d=zohomail.com; s=zohoarc; b=ecQI4B4cn0RaW2CdSuKq8dn2JaogmXcOuhfEwyMGDMcX4cOOWHCTqJgkErw7P0lfKT3pZgzGlPF+DMl48w8/53EkL/f81h5VTP8OObRbLx0P3XmoZkjhNftGsSaVcOzzuuXMuIH7OLZayi9moB+FxLaXaaIW0xcXHTUq8BaIgy4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1780175675; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=uUSq6IOqb7CO9pe6Y/+VLE8O6WEqFDAtTZ5OhzrainM=; b=Dw4cwS2VQFMQB1hzflJjvtcGxHUu8ik56ROVc2liqonAiUz0iu3+YdgIbBWvxh5rhRovwI+AvZWcvDufO37r6ImlrUMT1Zffnr1lZH0YSpE/c2gqJcowauDCj40rPlusZsxreKrpr8Q9Nga5ZmIfsp0lomcJSQRbk3ECBbqhduM= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1780175675373102.93531669820993; Sat, 30 May 2026 14:14:35 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wTQzU-0005eJ-UU; Sat, 30 May 2026 17:13:08 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wTQzP-0005dP-FD for qemu-devel@nongnu.org; Sat, 30 May 2026 17:13:04 -0400 Received: from mail-pl1-x62c.google.com ([2607:f8b0:4864:20::62c]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wTQzN-0000fj-Oc for qemu-devel@nongnu.org; Sat, 30 May 2026 17:13:03 -0400 Received: by mail-pl1-x62c.google.com with SMTP id d9443c01a7336-2c0c2c7d45eso1210635ad.1 for ; Sat, 30 May 2026 14:13:01 -0700 (PDT) Received: from stoup.. ([71.212.142.33]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2bf23c580c6sm59592895ad.82.2026.05.30.14.12.59 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 30 May 2026 14:12:59 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1780175580; x=1780780380; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=uUSq6IOqb7CO9pe6Y/+VLE8O6WEqFDAtTZ5OhzrainM=; b=pN6Ws7EyO8bvDLOVtSON8uT7cNUMStJw+k92njIQ7lJaL3BD9Oey3E3fBH+waLaLlL Lv7mv9aj+uSMihXqG+LEvsYf+Ih1he9KRUTPuiOL6namqDAWnvlZtJMcmwXY5XesfwTR dcg6T3ruyjvYS3khLnlG6Nd21SOspJWY/C+0aDUDw2zfjqnj4QgxTpoYU/mKgBE5MKN4 5MminZg7V5mSxEiof1Z3ZHWBMcRN/g2erDuldV3cERP7UKykvRTN4DEsKYJkDkfpl6Jw 71QyyPR5Ko2GlI+Ljga9StMIznKJfr8Rv5azcgOJD13ytja9Dh50YSrVbaXrh67dV9go q9ww== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1780175580; x=1780780380; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=uUSq6IOqb7CO9pe6Y/+VLE8O6WEqFDAtTZ5OhzrainM=; b=laJvYnrh3P/oNuWXVY26W8Kg234Qx+jhP440g2S91KiTjfB3OXcc7eqpKkpq9bmBbv 5B47F+0ICrPgXFm2VbGyVgvoccnCqNmA8KkAUqVFa7YenDAiJAOtYGqNxUt6mfFgs1UN JquXumXY9bLt4QGR9nys3ibzJnJtKvXjPixOnDb1+MWBgJVxzr3cQfaG78kUQgt0EQpM AREi6BcatnUXvcP59Im5mEONvYNGQ1/2dAI5MppJcmWBS85JDd4I6xOxYI/YU5l/i3xo 8nbP3wWU27H38riGzMdVtXjjCwVmop0r48ePd+8xYYJhWSSjU1twDZ7OeAmddNAOdFFq INwg== X-Gm-Message-State: AOJu0YznSyDsuU14FDIb8h+0L4Jglq2g8lZzdLBOiOfQVJNWYsFTiM8+ kT63kfhIitD8O+ZuGwKhw17BdPcuLp5gQAM7b5BydY4A6PzPUybDfR6UC3ywSvtn0RkJhTDdBKS z0ocMo3I= X-Gm-Gg: Acq92OGizjTyKPaZMOdIY3LO8cbcnVtD0vEQS+UZF4VICVJklEIQNw79PYLl5SNJjE0 G1WG58S8N6IJBdg41INNrhaM/xAR/I1buiPtV15oNPswGNHBUXIUt4fMUySyNS5Y7DmmkONXLMI 8sJzJP9QLh5WYuq9KkqTuNzWrn8cJmN6cFpm/5Fm9L8f2V5Vel1p70DCmLQV5mfDfu3UTwU6Ul7 1yVWGdEiJGmOApIvgyUVnAENiSuCjUqs0ZgXHFljVxArYETpvUsx8IRhQEaBvHmf55JLtJg/yib jyvI4ETUfOxV3caeqeiKLiap+sGECknyw3BCckKJEeIwsj1vBkRoDR/KnRojWCjt7sEGVdEpIBW 1DUhaTQYcO9uS5OQL6YKJyGtx35vv3WQQHGM9LMp3ylyYPZZnpdzcTwHr+HrnEVGUEoSYluhH6V SSw3FXvPnhnVlINt0g5rlKoLxTlw5C8Hlg8r/XKFE= X-Received: by 2002:a17:903:1c6:b0:2bf:82c:6322 with SMTP id d9443c01a7336-2bf367b1052mr57959975ad.3.1780175580243; Sat, 30 May 2026 14:13:00 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: imp@bsdimp.com, deller@gmx.de Subject: [PATCH 09/13] common-user: Move selfmap from util Date: Sat, 30 May 2026 14:12:43 -0700 Message-ID: <20260530211248.375318-10-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260530211248.375318-1-richard.henderson@linaro.org> References: <20260530211248.375318-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::62c; envelope-from=richard.henderson@linaro.org; helo=mail-pl1-x62c.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1780175678239154100 Content-Type: text/plain; charset="utf-8" This interface is only used for user-only. It's more usefully placed within common-user than util. Temporarily add stub implementation for bsd-user. Signed-off-by: Richard Henderson Reviewed-by: Philippe Mathieu-Daud=C3=A9 Reviewed-by: Warner Losh --- include/{qemu =3D> user}/selfmap.h | 0 {util =3D> common-user}/selfmap.c | 6 +++++- linux-user/elfload.c | 2 +- linux-user/syscall.c | 2 +- common-user/meson.build | 1 + util/meson.build | 4 ---- 6 files changed, 8 insertions(+), 7 deletions(-) rename include/{qemu =3D> user}/selfmap.h (100%) rename {util =3D> common-user}/selfmap.c (97%) diff --git a/include/qemu/selfmap.h b/include/user/selfmap.h similarity index 100% rename from include/qemu/selfmap.h rename to include/user/selfmap.h diff --git a/util/selfmap.c b/common-user/selfmap.c similarity index 97% rename from util/selfmap.c rename to common-user/selfmap.c index 483cb617e2..a1b88dee66 100644 --- a/util/selfmap.c +++ b/common-user/selfmap.c @@ -8,10 +8,11 @@ =20 #include "qemu/osdep.h" #include "qemu/cutils.h" -#include "qemu/selfmap.h" +#include "user/selfmap.h" =20 IntervalTreeRoot *read_self_maps(void) { +#ifdef __linux__ IntervalTreeRoot *root; gchar *maps, **lines; guint i, nlines; @@ -80,6 +81,9 @@ IntervalTreeRoot *read_self_maps(void) g_free(maps); =20 return root; +#else + return NULL; +#endif } =20 /** diff --git a/linux-user/elfload.c b/linux-user/elfload.c index 93ab2661e3..0450aa13d8 100644 --- a/linux-user/elfload.c +++ b/linux-user/elfload.c @@ -25,7 +25,7 @@ #include "qemu/queue.h" #include "qemu/guest-random.h" #include "qemu/units.h" -#include "qemu/selfmap.h" +#include "user/selfmap.h" #include "qemu/lockable.h" #include "qapi/error.h" #include "qemu/error-report.h" diff --git a/linux-user/syscall.c b/linux-user/syscall.c index 7d7a7b489c..448f80b29b 100644 --- a/linux-user/syscall.c +++ b/linux-user/syscall.c @@ -141,7 +141,7 @@ #include "user/safe-syscall.h" #include "user/signal.h" #include "qemu/guest-random.h" -#include "qemu/selfmap.h" +#include "user/selfmap.h" #include "special-errno.h" #include "qapi/error.h" #include "fd-trans.h" diff --git a/common-user/meson.build b/common-user/meson.build index f9e2e83f9a..831a7273fb 100644 --- a/common-user/meson.build +++ b/common-user/meson.build @@ -8,4 +8,5 @@ user_ss.add(files( 'mmap-min-addr.c', 'safe-syscall.S', 'safe-syscall-error.c', + 'selfmap.c', )) diff --git a/util/meson.build b/util/meson.build index e29cbd948a..fa174c07a5 100644 --- a/util/meson.build +++ b/util/meson.build @@ -67,10 +67,6 @@ util_ss.add(files('memalign.c')) util_ss.add(files('interval-tree.c')) util_ss.add(files('lockcnt.c')) =20 -if have_user - util_ss.add(files('selfmap.c')) -endif - if have_system util_ss.add(files('crc-ccitt.c')) util_ss.add(when: gio, if_true: files('dbus.c')) --=20 2.43.0 From nobody Mon Jun 8 08:43:55 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1780175678; cv=none; d=zohomail.com; s=zohoarc; b=ej4eqIP43flYNegtYvRDmie0VkDgwnLADe54oP5ROi4CFjuLWi7S3xri1+iyP+i+QXyddJLGTf2OzEsWA/Wh3mlw5xYxhjSmLpp/LHeWwlhYn/Of6YB7TodxrmtQrxq5r25TmfoWSG0KNFszJvNJqY6Ou2dEPDzSkjcIeBWCBYs= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1780175678; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=ZwHofvv5b4D6PAnuAwIZ35vtZNb0237w6FOxDkbf6sQ=; b=TUkeJKwNs9MUMaODRmWJIMnHmi81jEmtIGpfmMVQ44sESjtAg9mnTS30TFVNzK7+PNFu2oySZSkuOz8aHSYryEPUubpFLqcKkCV7pY7VrJ6I9wobrLIZ6/59DFFBv1Ep1976EYpSjSwyJ/x/sLC3QjUklb8ouaaPt4sLe/qgYtA= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1780175678433955.1417493137081; Sat, 30 May 2026 14:14:38 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wTQzf-0005hJ-L6; Sat, 30 May 2026 17:13:19 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wTQzQ-0005dR-BL for qemu-devel@nongnu.org; Sat, 30 May 2026 17:13:04 -0400 Received: from mail-pl1-x62d.google.com ([2607:f8b0:4864:20::62d]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wTQzO-0000h0-8o for qemu-devel@nongnu.org; Sat, 30 May 2026 17:13:03 -0400 Received: by mail-pl1-x62d.google.com with SMTP id d9443c01a7336-2c0c3546924so892045ad.3 for ; Sat, 30 May 2026 14:13:01 -0700 (PDT) Received: from stoup.. ([71.212.142.33]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2bf23c580c6sm59592895ad.82.2026.05.30.14.13.00 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 30 May 2026 14:13:00 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1780175581; x=1780780381; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=ZwHofvv5b4D6PAnuAwIZ35vtZNb0237w6FOxDkbf6sQ=; b=dXEtOXmjiHT6CB6no8XU/pSPeuxjAgEOmWtLPHfAS61S5IC2Nc4U7dlX1SG30lqzIR 6VGInoDJfBMYodZ9IyIWsOY3w9MmbZS4oaNA3F1p3RXMJSskMkBiqra98ymKZ3y9oFtA KKNlj/z4mo1A2ED8QlAPH6EpwTCZMvpZLkOaVM7tckUeUHRfcrs9sAbH3UqD1f91t4XB +cJ1r1uHQhIfkqmOugzJpQNJItjzVwQNlq6S3TW2eHwXV5+NBwRltb1JX/AGYaGy49eR W2L7MMop8bLK6z6GP/e0Jd3m/7NIbGVpVmvTjKF78C9qTZqVLbpCajxdwgtY1LJia/q/ eLig== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1780175581; x=1780780381; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=ZwHofvv5b4D6PAnuAwIZ35vtZNb0237w6FOxDkbf6sQ=; b=VhRz27UQ76DRqP+WoznF6HXujDLZcDlx6pMnylyC4HGarC8OJ3W6pI3EFbDsbUNYTZ Rmq7o/owJMS7z6BJwTqhsksAK7xDWz32Dn1YbtOgw8jcSGjql/GaOIyCJ2cjJHAQ/BIy eWrfmB2Jpj+TtV7Aq9nV04OtPGwMVHF9eE2amXbsfbvweQYSJdY9C00i5SHm+dlxf4Nw u0yNVOT/aLOTbdo75UdO7Fvcgikel28SunvJl8odtiG2t0aRIFygFs0+NdIpineiz1TO poEADf+4ZzLsLxtnK7epKH3hCjlfWTEz5W13/A6Oh7yt0ZLduVoFKaev1nybVx09Sp1x fmuA== X-Gm-Message-State: AOJu0Yw3liVktTkTgkJALyX20cHt48BCtILIeAKk6ikfE4fjzgyPalcR KHCuxS9vm4qu3I+vMHP3zG+6xrqMIaFyfDQ0W8q1eoMtBjZIGLobk5fUL7eukBLJILef/y6mlHa o/IYg7w0= X-Gm-Gg: Acq92OGtcCjLgwy+fcFMbux21fslsaYtCcyxw+5x2EaSlrZG1zm1V2L1g8UzTH9Up2A HMOdYEEBSC7Lurw/dc/jKW4rPUd/L1BnGI4igh9wkwS1gZC7BFb3Zi4v8fDuA8RvXzflD+SeD8Q LW1ZY3JyOQdgQMejelgAd6q4ic3HDXQbX2hTRJ4dWoPFWPdC0E6lVQtVMsaa/N3B3aS1VcQQs1y hVhyB5d3oDfzcxsnKZnzefXCydRAiS9d5nf0xPvt5PHH44u9tQYPIfCPQx/sV4jVBCxHtfTC/Ee X7uK4zB4Rht5SANt7uOHmUT/KVjCFmKVkFbFBNBvgNG5cqDXu1wDhfZ7bR0SLIO4C6h7Pj+pyUW BMZgMlBgd7xi5qulJr3mV3wiu2Ta98geSVCZqJkJgdUBLWfpmGCYKZDZtOmJSWsVTjvg9gcMC9w b+fNekO4wr8XDbjZmulGcIia2ST6jtvx1C8rX1S0F8kaByGgWTOA== X-Received: by 2002:a17:903:1905:b0:2b2:5491:e32f with SMTP id d9443c01a7336-2bf367c8d3fmr60093345ad.16.1780175580853; Sat, 30 May 2026 14:13:00 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: imp@bsdimp.com, deller@gmx.de Subject: [PATCH 10/13] common-user: Implement read_self_maps for FreeBSD Date: Sat, 30 May 2026 14:12:44 -0700 Message-ID: <20260530211248.375318-11-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260530211248.375318-1-richard.henderson@linaro.org> References: <20260530211248.375318-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::62d; envelope-from=richard.henderson@linaro.org; helo=mail-pl1-x62d.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1780175680188154100 Content-Type: text/plain; charset="utf-8" Use kinfo_getvmmap from -luser. Signed-off-by: Richard Henderson --- common-user/selfmap.c | 41 ++++++++++++++++++++++++++++++++++++++++- common-user/meson.build | 5 +++++ 2 files changed, 45 insertions(+), 1 deletion(-) diff --git a/common-user/selfmap.c b/common-user/selfmap.c index a1b88dee66..151d066801 100644 --- a/common-user/selfmap.c +++ b/common-user/selfmap.c @@ -9,6 +9,10 @@ #include "qemu/osdep.h" #include "qemu/cutils.h" #include "user/selfmap.h" +#ifdef __FreeBSD__ +#include +#include +#endif =20 IntervalTreeRoot *read_self_maps(void) { @@ -80,9 +84,44 @@ IntervalTreeRoot *read_self_maps(void) g_strfreev(lines); g_free(maps); =20 + return root; +#elif defined(__FreeBSD__) + int n =3D 0; + struct kinfo_vmentry *entries =3D kinfo_getvmmap(getpid(), &n); + IntervalTreeRoot *root; + + if (!entries) { + return NULL; + } + root =3D g_new0(IntervalTreeRoot, 1); + + for (int i =3D 0; i < n; ++i) { + struct kinfo_vmentry *k =3D &entries[i]; + size_t path_len =3D strnlen(k->kve_path, sizeof(k->kve_path)) + 1; + MapInfo *e =3D g_malloc0(sizeof(*e) + path_len); + + e->itree.start =3D k->kve_start; + e->itree.last =3D k->kve_end - 1; + + /* ??? The rest of these fields are only used in linux-user. */ + e->dev =3D k->kve_vn_fsid_freebsd11; + e->inode =3D k->kve_vn_fileid; + e->offset =3D k->kve_offset; + e->is_read =3D k->kve_protection & KVME_PROT_READ; + e->is_write =3D k->kve_protection & KVME_PROT_WRITE; + e->is_exec =3D k->kve_protection & KVME_PROT_EXEC; + e->is_priv =3D k->kve_flags & KVME_FLAG_COW; + if (path_len) { + e->path =3D memcpy(e + 1, k->kve_path, path_len); + } + + interval_tree_insert(&e->itree, root); + } + + free(entries); return root; #else - return NULL; +# error #endif } =20 diff --git a/common-user/meson.build b/common-user/meson.build index 831a7273fb..5e041de55e 100644 --- a/common-user/meson.build +++ b/common-user/meson.build @@ -10,3 +10,8 @@ user_ss.add(files( 'safe-syscall-error.c', 'selfmap.c', )) + +if host_os =3D=3D 'freebsd' + libutil =3D cc.find_library('util', required: true) + user_ss.add(libutil) +endif --=20 2.43.0 From nobody Mon Jun 8 08:43:55 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1780175647; cv=none; d=zohomail.com; s=zohoarc; b=CWSTqtv9NYNAudfrx+TmlO4pR5rKBuBzBiPLZG2eQQeUo7NCSlsDHu8hqSRN4Xu6iJcEd5yJX/oW9XXAu9XCa0yv6xRcXSkVIM8amuz6I3lFZ0CvPjoze7XO5sR/lsAwSRO0VUwRsRdP5Pl00VSPP12MuF52PrpyJae8C9mzin4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1780175647; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=eqBrSpY8+/QA3T2OiCJJV934ihLnnsi43LAdc78SHi4=; b=Gob12VdODVVT0Ec9vIDIciUtUZN54sCaJFwO8obDLpotUGAULXdUdX+FUD+k9aOcD3pEzv/Mo7MZDZoS+rBC7BzCMs00imAjYQT5IR92qLBYN7DaFl0dmqjjlxNokv+M2/hNokKQp4pr7hRhZUyHRYY3s+LM/dzNB52gfwYHTuQ= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1780175647946601.3255008619406; Sat, 30 May 2026 14:14:07 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wTQze-0005gn-T3; Sat, 30 May 2026 17:13:18 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wTQzT-0005e4-FM for qemu-devel@nongnu.org; Sat, 30 May 2026 17:13:08 -0400 Received: from mail-pl1-x62f.google.com ([2607:f8b0:4864:20::62f]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wTQzQ-0000jm-2Z for qemu-devel@nongnu.org; Sat, 30 May 2026 17:13:07 -0400 Received: by mail-pl1-x62f.google.com with SMTP id d9443c01a7336-2bf77d4a4e2so3509235ad.1 for ; Sat, 30 May 2026 14:13:03 -0700 (PDT) Received: from stoup.. ([71.212.142.33]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2bf23c580c6sm59592895ad.82.2026.05.30.14.13.01 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 30 May 2026 14:13:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1780175582; x=1780780382; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=eqBrSpY8+/QA3T2OiCJJV934ihLnnsi43LAdc78SHi4=; b=BgmUou0uL9knziXiiWC28b4ur/kf+d6MQwJdfc7C1Po/v28dZLj+JmL/J7fOoE0M/3 thSVAop5p+SCvI1Rr3MLIGOxIwNvUGSAyUTTs9i20SnMb3Lt9MCqoXNXg7ArmKG0hmJI myUzSVdDdwC6sjSdhKiR766j3an1HIfU/bcffui83GLFrwNMdU+8Ai+/pdsSsbzm67Rg kjHMv+ESBrLmnHE6BakdzHXHf8Y/H8E0Sac/F0w1dlU+m3CUwjkqNbl9rLArAyEw7vrs 5FIuHqaoA0edgU1QQETjyENPGWN7a9/zKZiEk5v+eOlkY2trRw4x17ISWI6cQgX3305E JNew== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1780175582; x=1780780382; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=eqBrSpY8+/QA3T2OiCJJV934ihLnnsi43LAdc78SHi4=; b=OJKdHUuJxoALwAhnmnHHv6I0n9TsuldMQRQIQEDWQcudnEf3n8kcSZH3fCJ0IWmjzb EGMJwpaJT/wascTXDwGCo/HB+/Sr5I5EKKk9ZgsKTL/h6WQqvACibeCexNxPdmT9UWC1 8U/Ya5Fc7Zh7vER+rKsJ8ZrypUOYiB46oqyTbY+B9cNW7l0JOyJH4FMJD80a3FHIzWww 4N+FnMCWMLTU3XINfnnFlqsLBOylfwtJSSVwQtcNCHozLfzZdRFqMpaHYOnQXrZSx3Jj FhrsXr91qz83KvplXNsckMLiver3cRe58xgoccR/kInGPumMxevNJMu4YVnZaFXUi6qM VdfQ== X-Gm-Message-State: AOJu0YyedMaDw4dVn9ldGvLcmcgRP6R2rANeI4VOO5dRc8YFd7pRcKsl 3ygtddudtIohD1prCXOOxktrICXZniZLQSqOYILivVXRJW7BDE19zp7Jnb9wDE1oTwILDgPy8MP sHiQfj6Q= X-Gm-Gg: Acq92OGaMtpmStOHkeh81qZ+/t8TV0obofF4+qp47cj1Mjw6qtsGIBOq0oMcoVkcs8I COaXMuv1uYz9mhR0iHFiY5u1QLwL0rPnT9UEahqHDRU/E5x9WTHkUcMxDsHrhbyg0k834ytm0bL 7Qkdi0lNebkBPFkW6cK7KsOEa2Lh0UyKFcQcH0CT/yFPnOjvT+nd7ltI9zYKKiCaLe+9JedNAzW 45G/LuCDBmBNnqhmWAtE+28ETLCPQ4SO854bQqDf7yzWX8PoFj+/6QtEvLfOXuDNy5e9SGH5JT0 7LpovMt4NHOZjPja4pOZfoximv59VNfBfCsvF4X9kbCBuBCvv+g3mSUPIDC1oBN72rzlzfCW4hO X/vLxJ49y5+4IFSdZQyThWipxkgXA2j1isf+mMBk8vy0pFMtni3xK84O6+ayZG4OUmtbGi6LcBL 5VcC89v5Frt2vVTKtf5n1CkMswBGbziZyFguSzCyY= X-Received: by 2002:a17:902:d2c8:b0:2ba:4086:ef93 with SMTP id d9443c01a7336-2bf2049b74amr78936605ad.10.1780175581735; Sat, 30 May 2026 14:13:01 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: imp@bsdimp.com, deller@gmx.de Subject: [PATCH 11/13] common-user: Move probe_guest_base from linux-user Date: Sat, 30 May 2026 14:12:45 -0700 Message-ID: <20260530211248.375318-12-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260530211248.375318-1-richard.henderson@linaro.org> References: <20260530211248.375318-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::62f; envelope-from=richard.henderson@linaro.org; helo=mail-pl1-x62f.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1780175648948158500 Content-Type: text/plain; charset="utf-8" Prepare to share probe_guest_base with bsd-user. Create a linux_probe_guest_base wrapper with the portions of probe_guest_base that are linux specific: managing the commpage for various targets. Signed-off-by: Richard Henderson Reviewed-by: Warner Losh --- include/user/probe-guest-base.h | 37 ++++ linux-user/user-internals.h | 10 +- common-user/probe-guest-base.c | 343 ++++++++++++++++++++++++++++++++ linux-user/elfload.c | 337 +------------------------------ linux-user/flatload.c | 2 +- common-user/meson.build | 1 + 6 files changed, 392 insertions(+), 338 deletions(-) create mode 100644 include/user/probe-guest-base.h create mode 100644 common-user/probe-guest-base.c diff --git a/include/user/probe-guest-base.h b/include/user/probe-guest-bas= e.h new file mode 100644 index 0000000000..d7492ef46c --- /dev/null +++ b/include/user/probe-guest-base.h @@ -0,0 +1,37 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later */ + +#ifndef USER_PROBE_GUEST_BASE_H +#define USER_PROBE_GUEST_BASE_H + +#ifndef CONFIG_USER_ONLY +#error Cannot include this header from system emulation +#endif + +#include "exec/vaddr.h" + +typedef struct PGBRange { + vaddr lo; + vaddr hi; +} PGBRange; + +/** + * probe_guest_base: + * @image_name: the executable being loaded + * @image_range: the fixed addresses within the executable + * + * Creates the initial guest address space in the host memory space. + * + * If @image_range is NULL, then no address in the executable is fixed, + * i.e. it is fully relocatable. + * + * This function will not return if a valid value for guest_base + * cannot be chosen. On return, the executable loader can expect + * + * target_mmap(i->lo, i->hi - i->lo + 1, ...) + * + * to succeed. + */ +void probe_guest_base(const char *image_name, const PGBRange *image_range, + const PGBRange *commpage_range); + +#endif diff --git a/linux-user/user-internals.h b/linux-user/user-internals.h index bc6b9f44e6..71f72002b6 100644 --- a/linux-user/user-internals.h +++ b/linux-user/user-internals.h @@ -22,6 +22,7 @@ #include "qemu/log.h" #include "exec/tb-flush.h" #include "exec/translation-block.h" +#include "user/probe-guest-base.h" =20 extern char *exec_path; extern char real_exec_path[PATH_MAX]; @@ -74,13 +75,8 @@ void clone_fork_end(bool child); void fork_start(void); void fork_end(pid_t pid); =20 -typedef struct PGBRange { - vaddr lo; - vaddr hi; -} PGBRange; - /** - * probe_guest_base: + * linux_probe_guest_base: * @image_name: the executable being loaded * @image_range: the fixed addresses within the executable * @@ -96,7 +92,7 @@ typedef struct PGBRange { * * to succeed. */ -void probe_guest_base(const char *image_name, const PGBRange *image_range); +void linux_probe_guest_base(const char *image_name, const PGBRange *image_= range); =20 /* syscall.c */ int host_to_target_waitstatus(int status); diff --git a/common-user/probe-guest-base.c b/common-user/probe-guest-base.c new file mode 100644 index 0000000000..77722fe63f --- /dev/null +++ b/common-user/probe-guest-base.c @@ -0,0 +1,343 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later */ + +#include "qemu/osdep.h" +#include "qemu/error-report.h" +#include "qemu/units.h" +#include "qemu/target-info.h" +#include "qemu/log.h" +#include "user/guest-base.h" +#include "user/mmap-min-addr.h" +#include "user/guest-host.h" +#include "user/probe-guest-base.h" +#include "user/selfmap.h" +#include "exec/target_page.h" +#include + +/* Linux and FreeBSD use different flags to express NOREPLACE. */ +#ifdef __FreeBSD__ +#define MAP_FIXED_NOREPLACE (MAP_FIXED | MAP_EXCL) +#endif + +/** + * pgb_try_mmap: + * @addr: host start address + * @addr_last: host last address + * @keep: do not unmap the probe region + * + * Return 1 if [@addr, @addr_last] is not mapped in the host, + * return 0 if it is not available to map, and -1 on mmap error. + * If @keep, the region is left mapped on success, otherwise unmapped. + */ +static int pgb_try_mmap(uintptr_t addr, uintptr_t addr_last, bool keep) +{ + size_t size =3D addr_last - addr + 1; + void *p =3D mmap((void *)addr, size, PROT_NONE, + MAP_ANONYMOUS | MAP_PRIVATE | + MAP_NORESERVE | MAP_FIXED_NOREPLACE, -1, 0); + int ret; + + if (p =3D=3D MAP_FAILED) { + return errno =3D=3D EEXIST ? 0 : -1; + } + ret =3D p =3D=3D (void *)addr; + if (!keep || !ret) { + munmap(p, size); + } + return ret; +} + +/** + * pgb_try_mmap_skip_brk(uintptr_t addr, uintptr_t size, uintptr_t brk) + * @addr: host address + * @addr_last: host last address + * @brk: host brk + * + * Like pgb_try_mmap, but additionally reserve some memory following brk. + */ +static int pgb_try_mmap_skip_brk(uintptr_t addr, uintptr_t addr_last, + uintptr_t brk, bool keep) +{ + uintptr_t brk_last =3D brk + 16 * MiB - 1; + + /* Do not map anything close to the host brk. */ + if (addr <=3D brk_last && brk <=3D addr_last) { + return 0; + } + return pgb_try_mmap(addr, addr_last, keep); +} + +/** + * pgb_try_mmap_set: + * @ga: set of guest addrs + * @base: guest_base + * @brk: host brk + * + * Return true if all @ga can be mapped by the host at @base. + * On success, retain the mapping at index 0 for reserved_va. + */ + +typedef struct PGBAddrs { + PGBRange bounds[3]; + int nbounds; +} PGBAddrs; + +static bool pgb_try_mmap_set(const PGBAddrs *ga, uintptr_t base, uintptr_t= brk) +{ + for (int i =3D ga->nbounds - 1; i >=3D 0; --i) { + if (pgb_try_mmap_skip_brk(ga->bounds[i].lo + base, + ga->bounds[i].hi + base, + brk, i =3D=3D 0 && reserved_va) <=3D 0) { + return false; + } + } + return true; +} + +/** + * pgb_addr_set: + * @ga: output set of guest addrs + * @image_range: fixed guest image addresses + * @identity: create for identity mapping + * + * Fill in @ga with the image, COMMPAGE and NULL page. + */ +static bool pgb_addr_set(PGBAddrs *ga, const PGBRange *image_range, + const PGBRange *commpage_range, bool try_identity) +{ + int n; + + /* + * With a low commpage, or a guest mapped very low, + * we may not be able to use the identity map. + */ + if (try_identity) { + if (commpage_range && commpage_range->lo < mmap_min_addr) { + return false; + } + if (image_range && image_range->lo < mmap_min_addr) { + return false; + } + } + + memset(ga, 0, sizeof(*ga)); + n =3D 0; + + if (reserved_va) { + ga->bounds[n].lo =3D try_identity ? mmap_min_addr : 0; + ga->bounds[n].hi =3D reserved_va; + n++; + /* Low COMMPAGE and NULL handled by reserving from 0. */ + } else { + /* Add any low COMMPAGE or NULL page. */ + if (!try_identity || (commpage_range && commpage_range->lo =3D=3D = 0)) { + ga->bounds[n].lo =3D 0; + ga->bounds[n].hi =3D TARGET_PAGE_SIZE - 1; + n++; + } + + /* Add the guest image for ET_EXEC. */ + if (image_range) { + ga->bounds[n++] =3D *image_range; + } + } + + /* Add any high COMMPAGE not covered by reserved_va. */ + if (commpage_range && reserved_va < commpage_range->hi) { + ga->bounds[n].lo =3D commpage_range->lo & qemu_real_host_page_mask= (); + ga->bounds[n].hi =3D commpage_range->hi; + n++; + } + + ga->nbounds =3D n; + return true; +} + +static void pgb_fail_in_use(const char *image_name) +{ + error_report("%s: requires virtual address space that is in use " + "(omit the -B option or choose a different value)", + image_name); + exit(EXIT_FAILURE); +} + +static void pgb_fixed(const char *image_name, const PGBRange *image_range, + const PGBRange *commpage_range, uintptr_t align) +{ + PGBAddrs ga; + uintptr_t brk =3D (uintptr_t)sbrk(0); + + if (!QEMU_IS_ALIGNED(guest_base, align)) { + fprintf(stderr, "Requested guest base %p does not satisfy " + "host minimum alignment (0x%" PRIxPTR ")\n", + (void *)guest_base, align); + exit(EXIT_FAILURE); + } + + if (!pgb_addr_set(&ga, image_range, commpage_range, !guest_base) + || !pgb_try_mmap_set(&ga, guest_base, brk)) { + pgb_fail_in_use(image_name); + } +} + +/** + * pgb_find_fallback: + * + * This is a fallback method for finding holes in the host address space + * if we don't have the benefit of being able to access /proc/self/map. + * It can potentially take a very long time as we can only dumbly iterate + * up the host address space seeing if the allocation would work. + */ +static uintptr_t pgb_find_fallback(const PGBAddrs *ga, uintptr_t align, + uintptr_t brk) +{ + /* TODO: come up with a better estimate of how much to skip. */ + uintptr_t skip =3D sizeof(uintptr_t) =3D=3D 4 ? MiB : GiB; + + for (uintptr_t base =3D skip; ; base +=3D skip) { + base =3D ROUND_UP(base, align); + if (pgb_try_mmap_set(ga, base, brk)) { + return base; + } + if (base >=3D -skip) { + return -1; + } + } +} + +static uintptr_t pgb_try_itree(const PGBAddrs *ga, uintptr_t base, + IntervalTreeRoot *root) +{ + for (int i =3D ga->nbounds - 1; i >=3D 0; --i) { + uintptr_t s =3D base + ga->bounds[i].lo; + uintptr_t l =3D base + ga->bounds[i].hi; + IntervalTreeNode *n; + + if (l < s) { + /* Wraparound. Skip to advance S to mmap_min_addr. */ + return mmap_min_addr - s; + } + + n =3D interval_tree_iter_first(root, s, l); + if (n !=3D NULL) { + /* Conflict. Skip to advance S to LAST + 1. */ + return n->last - s + 1; + } + } + return 0; /* success */ +} + +static uintptr_t pgb_find_itree(const PGBAddrs *ga, IntervalTreeRoot *root, + uintptr_t align, uintptr_t brk) +{ + uintptr_t last =3D sizeof(uintptr_t) =3D=3D 4 ? MiB : GiB; + uintptr_t base, skip; + + while (true) { + base =3D ROUND_UP(last, align); + if (base < last) { + return -1; + } + + skip =3D pgb_try_itree(ga, base, root); + if (skip =3D=3D 0) { + break; + } + + last =3D base + skip; + if (last < base) { + return -1; + } + } + + /* + * We've chosen 'base' based on holes in the interval tree, + * but we don't yet know if it is a valid host address. + * Because it is the first matching hole, if the host addresses + * are invalid we know there are no further matches. + */ + return pgb_try_mmap_set(ga, base, brk) ? base : -1; +} + +static void pgb_dynamic(const char *image_name, const PGBRange *image_rang= e, + const PGBRange *commpage_range, uintptr_t align) +{ + IntervalTreeRoot *root; + uintptr_t brk, ret; + PGBAddrs ga; + + /* Try the identity map first. */ + if (pgb_addr_set(&ga, image_range, commpage_range, true)) { + brk =3D (uintptr_t)sbrk(0); + if (pgb_try_mmap_set(&ga, 0, brk)) { + guest_base =3D 0; + return; + } + } + + /* + * Rebuild the address set for non-identity map. + * This differs in the mapping of the guest NULL page. + */ + pgb_addr_set(&ga, image_range, commpage_range, false); + + root =3D read_self_maps(); + + /* Read brk after we've read the maps, which will malloc. */ + brk =3D (uintptr_t)sbrk(0); + + if (!root) { + ret =3D pgb_find_fallback(&ga, align, brk); + } else { + /* + * Reserve the area close to the host brk. + * This will be freed with the rest of the tree. + */ + IntervalTreeNode *b =3D g_new0(IntervalTreeNode, 1); + b->start =3D brk; + b->last =3D brk + 16 * MiB - 1; + interval_tree_insert(b, root); + + ret =3D pgb_find_itree(&ga, root, align, brk); + free_self_maps(root); + } + + if (ret =3D=3D -1) { + int w =3D target_long_bits() / 4; + + error_report("%s: Unable to find a guest_base to satisfy all " + "guest address mapping requirements", image_name); + + for (int i =3D 0; i < ga.nbounds; ++i) { + error_printf(" %0*" VADDR_PRIx "-%0*" VADDR_PRIx "\n", + w, ga.bounds[i].lo, + w, ga.bounds[i].hi); + } + exit(EXIT_FAILURE); + } + guest_base =3D ret; +} + +void probe_guest_base(const char *image_name, const PGBRange *image_range, + const PGBRange *commpage_range) +{ + /* In order to use host shmat, we must be able to honor SHMLBA. */ + uintptr_t align =3D MAX(SHMLBA, TARGET_PAGE_SIZE); + + /* Sanity check the guest binary. */ + if (reserved_va && image_range && image_range->hi > reserved_va) { + error_report("%s: requires more than reserved virtual " + "address space (0x%" VADDR_PRIx " > 0x%lx)", + image_name, image_range->hi, reserved_va); + exit(EXIT_FAILURE); + } + + if (have_guest_base) { + pgb_fixed(image_name, image_range, commpage_range, align); + } else { + pgb_dynamic(image_name, image_range, commpage_range, align); + } + + assert(QEMU_IS_ALIGNED(guest_base, align)); + qemu_log_mask(CPU_LOG_PAGE, "Locating guest address space " + "@ 0x%" PRIx64 "\n", (uint64_t)guest_base); +} diff --git a/linux-user/elfload.c b/linux-user/elfload.c index 0450aa13d8..4ab1a7b78c 100644 --- a/linux-user/elfload.c +++ b/linux-user/elfload.c @@ -4,7 +4,6 @@ =20 #include #include -#include =20 #include "qemu.h" #include "user/tswap-target.h" @@ -13,8 +12,6 @@ #include "exec/mmap-lock.h" #include "exec/translation-block.h" #include "exec/tswap.h" -#include "user/guest-base.h" -#include "user/mmap-min-addr.h" #include "user-internals.h" #include "signal-common.h" #include "loader.h" @@ -25,7 +22,6 @@ #include "qemu/queue.h" #include "qemu/guest-random.h" #include "qemu/units.h" -#include "user/selfmap.h" #include "qemu/lockable.h" #include "qapi/error.h" #include "qemu/error-report.h" @@ -758,310 +754,8 @@ static abi_ulong create_elf_tables(abi_ulong p, int a= rgc, int envc, return sp; } =20 -#if !defined(COMMPAGE) && !defined(HAVE_GUEST_COMMPAGE) -bool init_guest_commpage(void) { return true; } -#endif - -/** - * pgb_try_mmap: - * @addr: host start address - * @addr_last: host last address - * @keep: do not unmap the probe region - * - * Return 1 if [@addr, @addr_last] is not mapped in the host, - * return 0 if it is not available to map, and -1 on mmap error. - * If @keep, the region is left mapped on success, otherwise unmapped. - */ -static int pgb_try_mmap(uintptr_t addr, uintptr_t addr_last, bool keep) -{ - size_t size =3D addr_last - addr + 1; - void *p =3D mmap((void *)addr, size, PROT_NONE, - MAP_ANONYMOUS | MAP_PRIVATE | - MAP_NORESERVE | MAP_FIXED_NOREPLACE, -1, 0); - int ret; - - if (p =3D=3D MAP_FAILED) { - return errno =3D=3D EEXIST ? 0 : -1; - } - ret =3D p =3D=3D (void *)addr; - if (!keep || !ret) { - munmap(p, size); - } - return ret; -} - -/** - * pgb_try_mmap_skip_brk(uintptr_t addr, uintptr_t size, uintptr_t brk) - * @addr: host address - * @addr_last: host last address - * @brk: host brk - * - * Like pgb_try_mmap, but additionally reserve some memory following brk. - */ -static int pgb_try_mmap_skip_brk(uintptr_t addr, uintptr_t addr_last, - uintptr_t brk, bool keep) -{ - uintptr_t brk_last =3D brk + 16 * MiB - 1; - - /* Do not map anything close to the host brk. */ - if (addr <=3D brk_last && brk <=3D addr_last) { - return 0; - } - return pgb_try_mmap(addr, addr_last, keep); -} - -/** - * pgb_try_mmap_set: - * @ga: set of guest addrs - * @base: guest_base - * @brk: host brk - * - * Return true if all @ga can be mapped by the host at @base. - * On success, retain the mapping at index 0 for reserved_va. - */ - -typedef struct PGBAddrs { - PGBRange bounds[3]; - int nbounds; -} PGBAddrs; - -static bool pgb_try_mmap_set(const PGBAddrs *ga, uintptr_t base, uintptr_t= brk) -{ - for (int i =3D ga->nbounds - 1; i >=3D 0; --i) { - if (pgb_try_mmap_skip_brk(ga->bounds[i].lo + base, - ga->bounds[i].hi + base, - brk, i =3D=3D 0 && reserved_va) <=3D 0) { - return false; - } - } - return true; -} - -/** - * pgb_addr_set: - * @ga: output set of guest addrs - * @image_range: fixed guest image addresses - * @identity: create for identity mapping - * - * Fill in @ga with the image, COMMPAGE and NULL page. - */ -static bool pgb_addr_set(PGBAddrs *ga, const PGBRange *image_range, - const PGBRange *commpage_range, bool try_identity) -{ - int n; - - /* - * With a low commpage, or a guest mapped very low, - * we may not be able to use the identity map. - */ - if (try_identity) { - if (commpage_range && commpage_range->lo < mmap_min_addr) { - return false; - } - if (image_range && image_range->lo < mmap_min_addr) { - return false; - } - } - - memset(ga, 0, sizeof(*ga)); - n =3D 0; - - if (reserved_va) { - ga->bounds[n].lo =3D try_identity ? mmap_min_addr : 0; - ga->bounds[n].hi =3D reserved_va; - n++; - /* Low COMMPAGE and NULL handled by reserving from 0. */ - } else { - /* Add any low COMMPAGE or NULL page. */ - if (!try_identity || (commpage_range && commpage_range->lo =3D=3D = 0)) { - ga->bounds[n].lo =3D 0; - ga->bounds[n].hi =3D TARGET_PAGE_SIZE - 1; - n++; - } - - /* Add the guest image for ET_EXEC. */ - if (image_range) { - ga->bounds[n++] =3D *image_range; - } - } - - /* Add any high COMMPAGE not covered by reserved_va. */ - if (commpage_range && reserved_va < commpage_range->hi) { - ga->bounds[n].lo =3D commpage_range->lo & qemu_real_host_page_mask= (); - ga->bounds[n].hi =3D commpage_range->hi; - n++; - } - - ga->nbounds =3D n; - return true; -} - -static void pgb_fail_in_use(const char *image_name) -{ - error_report("%s: requires virtual address space that is in use " - "(omit the -B option or choose a different value)", - image_name); - exit(EXIT_FAILURE); -} - -static void pgb_fixed(const char *image_name, const PGBRange *image_range, - const PGBRange *commpage_range, uintptr_t align) -{ - PGBAddrs ga; - uintptr_t brk =3D (uintptr_t)sbrk(0); - - if (!QEMU_IS_ALIGNED(guest_base, align)) { - fprintf(stderr, "Requested guest base %p does not satisfy " - "host minimum alignment (0x%" PRIxPTR ")\n", - (void *)guest_base, align); - exit(EXIT_FAILURE); - } - - if (!pgb_addr_set(&ga, image_range, commpage_range, !guest_base) - || !pgb_try_mmap_set(&ga, guest_base, brk)) { - pgb_fail_in_use(image_name); - } -} - -/** - * pgb_find_fallback: - * - * This is a fallback method for finding holes in the host address space - * if we don't have the benefit of being able to access /proc/self/map. - * It can potentially take a very long time as we can only dumbly iterate - * up the host address space seeing if the allocation would work. - */ -static uintptr_t pgb_find_fallback(const PGBAddrs *ga, uintptr_t align, - uintptr_t brk) -{ - /* TODO: come up with a better estimate of how much to skip. */ - uintptr_t skip =3D sizeof(uintptr_t) =3D=3D 4 ? MiB : GiB; - - for (uintptr_t base =3D skip; ; base +=3D skip) { - base =3D ROUND_UP(base, align); - if (pgb_try_mmap_set(ga, base, brk)) { - return base; - } - if (base >=3D -skip) { - return -1; - } - } -} - -static uintptr_t pgb_try_itree(const PGBAddrs *ga, uintptr_t base, - IntervalTreeRoot *root) -{ - for (int i =3D ga->nbounds - 1; i >=3D 0; --i) { - uintptr_t s =3D base + ga->bounds[i].lo; - uintptr_t l =3D base + ga->bounds[i].hi; - IntervalTreeNode *n; - - if (l < s) { - /* Wraparound. Skip to advance S to mmap_min_addr. */ - return mmap_min_addr - s; - } - - n =3D interval_tree_iter_first(root, s, l); - if (n !=3D NULL) { - /* Conflict. Skip to advance S to LAST + 1. */ - return n->last - s + 1; - } - } - return 0; /* success */ -} - -static uintptr_t pgb_find_itree(const PGBAddrs *ga, IntervalTreeRoot *root, - uintptr_t align, uintptr_t brk) -{ - uintptr_t last =3D sizeof(uintptr_t) =3D=3D 4 ? MiB : GiB; - uintptr_t base, skip; - - while (true) { - base =3D ROUND_UP(last, align); - if (base < last) { - return -1; - } - - skip =3D pgb_try_itree(ga, base, root); - if (skip =3D=3D 0) { - break; - } - - last =3D base + skip; - if (last < base) { - return -1; - } - } - - /* - * We've chosen 'base' based on holes in the interval tree, - * but we don't yet know if it is a valid host address. - * Because it is the first matching hole, if the host addresses - * are invalid we know there are no further matches. - */ - return pgb_try_mmap_set(ga, base, brk) ? base : -1; -} - -static void pgb_dynamic(const char *image_name, const PGBRange *image_rang= e, - const PGBRange *commpage_range, uintptr_t align) -{ - IntervalTreeRoot *root; - uintptr_t brk, ret; - PGBAddrs ga; - - /* Try the identity map first. */ - if (pgb_addr_set(&ga, image_range, commpage_range, true)) { - brk =3D (uintptr_t)sbrk(0); - if (pgb_try_mmap_set(&ga, 0, brk)) { - guest_base =3D 0; - return; - } - } - - /* - * Rebuild the address set for non-identity map. - * This differs in the mapping of the guest NULL page. - */ - pgb_addr_set(&ga, image_range, commpage_range, false); - - root =3D read_self_maps(); - - /* Read brk after we've read the maps, which will malloc. */ - brk =3D (uintptr_t)sbrk(0); - - if (!root) { - ret =3D pgb_find_fallback(&ga, align, brk); - } else { - /* - * Reserve the area close to the host brk. - * This will be freed with the rest of the tree. - */ - IntervalTreeNode *b =3D g_new0(IntervalTreeNode, 1); - b->start =3D brk; - b->last =3D brk + 16 * MiB - 1; - interval_tree_insert(b, root); - - ret =3D pgb_find_itree(&ga, root, align, brk); - free_self_maps(root); - } - - if (ret =3D=3D -1) { - int w =3D TARGET_LONG_BITS / 4; - - error_report("%s: Unable to find a guest_base to satisfy all " - "guest address mapping requirements", image_name); - - for (int i =3D 0; i < ga.nbounds; ++i) { - error_printf(" %0*" VADDR_PRIx "-%0*" VADDR_PRIx "\n", - w, ga.bounds[i].lo, - w, ga.bounds[i].hi); - } - exit(EXIT_FAILURE); - } - guest_base =3D ret; -} - -void probe_guest_base(const char *image_name, const PGBRange *image_range) +void linux_probe_guest_base(const char *image_name, + const PGBRange *image_range) { #ifdef COMMPAGE const PGBRange * const commpage_range =3D &(PGBRange){ @@ -1071,32 +765,15 @@ void probe_guest_base(const char *image_name, const = PGBRange *image_range) const PGBRange * const commpage_range =3D NULL; #endif =20 - /* In order to use host shmat, we must be able to honor SHMLBA. */ - uintptr_t align =3D MAX(SHMLBA, TARGET_PAGE_SIZE); - - /* Sanity check the guest binary. */ - if (reserved_va && image_range && image_range->hi > reserved_va) { - error_report("%s: requires more than reserved virtual " - "address space (0x%" VADDR_PRIx " > 0x%lx)", - image_name, image_range->hi, reserved_va); - exit(EXIT_FAILURE); - } - - if (have_guest_base) { - pgb_fixed(image_name, image_range, commpage_range, align); - } else { - pgb_dynamic(image_name, image_range, commpage_range, align); - } + probe_guest_base(image_name, image_range, commpage_range); =20 /* Reserve and initialize the commpage. */ +#if defined(COMMPAGE) || defined(HAVE_GUEST_COMMPAGE) if (!init_guest_commpage()) { /* We have already probed for the commpage being free. */ g_assert_not_reached(); } - - assert(QEMU_IS_ALIGNED(guest_base, align)); - qemu_log_mask(CPU_LOG_PAGE, "Locating guest address space " - "@ 0x%" PRIx64 "\n", (uint64_t)guest_base); +#endif } =20 enum { @@ -1345,10 +1022,10 @@ static void load_elf_image(const char *image_name, = const ImageSource *src, * Make sure that the low address does not conflict with * MMAP_MIN_ADDR or the QEMU application itself. */ - probe_guest_base(image_name, &range); + linux_probe_guest_base(image_name, &range); } else { /* The binary is dynamic; we still need to select guest_base. = */ - probe_guest_base(image_name, NULL); + linux_probe_guest_base(image_name, NULL); =20 /* * Avoid collision with the loader by providing a different diff --git a/linux-user/flatload.c b/linux-user/flatload.c index 45d69040c6..a551f083a4 100644 --- a/linux-user/flatload.c +++ b/linux-user/flatload.c @@ -261,7 +261,7 @@ static int load_flat_file(struct linux_binprm * bprm, /* * Allocate the address space. */ - probe_guest_base(bprm->filename, NULL); + linux_probe_guest_base(bprm->filename, NULL); =20 /* * there are a couple of cases here, the separate code/data diff --git a/common-user/meson.build b/common-user/meson.build index 5e041de55e..2d4ffe07d3 100644 --- a/common-user/meson.build +++ b/common-user/meson.build @@ -6,6 +6,7 @@ common_user_inc +=3D include_directories('host/' / host_arc= h) =20 user_ss.add(files( 'mmap-min-addr.c', + 'probe-guest-base.c', 'safe-syscall.S', 'safe-syscall-error.c', 'selfmap.c', --=20 2.43.0 From nobody Mon Jun 8 08:43:55 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1780175647; cv=none; d=zohomail.com; s=zohoarc; b=fhQTfJ6lWziMaCwlB2FooOfjzm4Ft7uozmY42DIvYfihLlQCW5IE+yLIaz9atYEoNl0XmbinvU9CB3zFmhuw7+uQlAWoJvcKZJC12aS4K/FCsqcc02IpoxiJPXnuJ8rIl9vYRuy/WMJED36u/7rzXKrVNrrXR0p3+CLKGPXK+os= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1780175647; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=D1d1aEjn4LJhKQ30FhQTml2wsIITUmwS+fUTg53jjKs=; b=VFRk1LagB1jbYl9bIVS/5fqfx+KYsa4G9Gm3PwbYKEbg8E113a505F8C/Om513nbhuQZJzGtKKhEfmAk284/QW0cCAM3hztf6+Sw1TkFaStcxkv2HSzF/BksNZ0+7kNIRqIsIgDJncHdd8g2hditFqDFJKkkANrQiQAbJjzfpWw= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1780175647198703.7063994092002; Sat, 30 May 2026 14:14:07 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wTQzf-0005hM-P3; Sat, 30 May 2026 17:13:20 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wTQzS-0005dp-Eu for qemu-devel@nongnu.org; Sat, 30 May 2026 17:13:06 -0400 Received: from mail-pl1-x631.google.com ([2607:f8b0:4864:20::631]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wTQzQ-0000kw-2v for qemu-devel@nongnu.org; Sat, 30 May 2026 17:13:05 -0400 Received: by mail-pl1-x631.google.com with SMTP id d9443c01a7336-2bf02708e8fso21427825ad.2 for ; Sat, 30 May 2026 14:13:03 -0700 (PDT) Received: from stoup.. ([71.212.142.33]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2bf23c580c6sm59592895ad.82.2026.05.30.14.13.02 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 30 May 2026 14:13:02 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1780175583; x=1780780383; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=D1d1aEjn4LJhKQ30FhQTml2wsIITUmwS+fUTg53jjKs=; b=CEjtCDnmLoyzIYfunMsLtPtfEy/nH+2105YhVuocyvFNvtmVnnhf9xShGBm0YNEwGV RIAaBzu2AdraOacPQ4cKZWxtp0zzYcORJB3xu6DA37nzLrPHbq/x3aa8gmtHWqtpIG6Q rmonYC9H+78lx1qKCanZGiAZy88B1QUGhLbDzlnDmAfI7FKIn0QRDz919Km2lEL1izZ3 ag5/B4FJdJITAQ0A+LFhj33fjE61DP31YtGd5k2Af1Y9dBjeD39NKmgr36zd0R53rcI8 gfn44WJ3P5lUwloBUoMNQOyv5HYpxoHebaVriVdxS08BZUGHXT1bP1VVfwWgSOI/ku2m JG4g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1780175583; x=1780780383; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=D1d1aEjn4LJhKQ30FhQTml2wsIITUmwS+fUTg53jjKs=; b=Z6mt/TSTx1uDlu3pMi53WqVAFEWHEg/pIZaiNBFQ0sh2zE+gCgHdFWzHzbqlNgIaSv +7J9CnJ6h4sP8VZOfVrymvmNeRX7n6hgknLi02SHa4zSwj856YmF3ESybtZnu+Ho5tfm ijL5J1CEovnP5QllHA4EiXR/Oxb0rfqKEKofVh3oXoS+hJ92GaWe9K0/8u4aDaYChRDD gqR0uSEBwIT1GTjzGh33ShEj4MLHxWFvmajcUAinZlhqQsgADNKS70PcUTKfu5SsIlt7 MKVpf/bYGfmi7MqXZhCOYBsHrAx2mOJ0h+C9p+uBj9ttAkTWb3X9XJrB27s0l7HTWfXf pwiQ== X-Gm-Message-State: AOJu0YxVNm/lEmYtT+7o2WJwrn5Y9Wqt7KGgCHOsTBO1iGxQboCqYldd urw87X6ceCF5vNzhkO1/wyKrPl3wkMKndvjqlBkGWHehQiJjnhdcLWY57/j4Ap6xMEvIRPSOV2k PxeD0YvU= X-Gm-Gg: Acq92OHl8LPnX1T1Chd0rb+BYT2CGu6koa0l6VytPjEHr+HZzX9VYiAsiOoZPQrI3IQ f7JCpzUI0JtvD4kLj12eWgB+19Ph+nTrWLDCeHgQZDVJk/XAjvsFRTxEECIIOHxufIqj05YUupW lT2Rz+Qg9HhIpOLOOO7TdSAZ++zN/dAlbkPu0c87Nrz8WBmYHFi3cyaMc46db/2/ntkgdAIRcVO kVujr2fCOLE9roS7934oBo3nG+Cy1xDPws3K3WalbamC4WZ+XIvbuYPZgE6LAjsWjjpeOEJakAq sUX9WKKaKsIi36UO/CxxfWrrNFqxZuQWrNmgKSWsMorNj4gbBHyfkW8cdhILExzpaggIPS752g2 qHeXYSKaxP5ywP4h+KiLeTxLkNLRUZsfom7mZriYTB9jbdid2q3DC6hnKwk7pX2emBGMSvNP+Es Cb/vAwInuw2yXSLMrIL+a6E7QxOtosLKUJQCxdiqk= X-Received: by 2002:a17:903:906:b0:2bd:7684:34b0 with SMTP id d9443c01a7336-2bf367d6ea3mr61196485ad.15.1780175582508; Sat, 30 May 2026 14:13:02 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: imp@bsdimp.com, deller@gmx.de Subject: [PATCH 12/13] bsd-user: Use probe_guest_base Date: Sat, 30 May 2026 14:12:46 -0700 Message-ID: <20260530211248.375318-13-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260530211248.375318-1-richard.henderson@linaro.org> References: <20260530211248.375318-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::631; envelope-from=richard.henderson@linaro.org; helo=mail-pl1-x631.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1780175648913158500 Content-Type: text/plain; charset="utf-8" Merge the PT_LOAD loop with the PT_INTERP loop, as the XXX comment suggests. Pass the probed range to probe_guest_base. Signed-off-by: Richard Henderson --- bsd-user/elfload.c | 37 +++++++++++++++++++------------------ bsd-user/main.c | 39 ++++----------------------------------- 2 files changed, 23 insertions(+), 53 deletions(-) diff --git a/bsd-user/elfload.c b/bsd-user/elfload.c index 3bca0cc9ed..a87a892eb8 100644 --- a/bsd-user/elfload.c +++ b/bsd-user/elfload.c @@ -22,6 +22,7 @@ #include "qemu.h" #include "disas/disas.h" #include "qemu/path.h" +#include "user/probe-guest-base.h" =20 static abi_ulong target_auxents; /* Where the AUX entries are in target = */ static size_t target_auxents_sz; /* Size of AUX entries including AT_NUL= L */ @@ -610,8 +611,9 @@ int load_elf_binary(struct bsd_binprm *bprm, struct tar= get_pt_regs *regs, abi_ulong elf_brk; int error, retval; char *elf_interpreter; - abi_ulong baddr, elf_entry, et_dyn_addr, interp_load_addr =3D 0; + abi_ulong elf_entry, et_dyn_addr, interp_load_addr =3D 0; abi_ulong reloc_func_desc =3D 0; + PGBRange range =3D { -1, 0 }; =20 load_addr =3D 0; elf_ex =3D *((struct elfhdr *) bprm->buf); /* exec-header */ @@ -654,10 +656,10 @@ int load_elf_binary(struct bsd_binprm *bprm, struct t= arget_pt_regs *regs, =20 elf_brk =3D 0; =20 - elf_interpreter =3D NULL; - for (i =3D 0; i < elf_ex.e_phnum; i++) { - if (elf_ppnt->p_type =3D=3D PT_INTERP) { + for (i =3D 0; i < elf_ex.e_phnum; i++, elf_ppnt++) { + switch (elf_ppnt->p_type) { + case PT_INTERP: if (elf_interpreter !=3D NULL) { free(elf_phdata); free(elf_interpreter); @@ -709,8 +711,14 @@ int load_elf_binary(struct bsd_binprm *bprm, struct ta= rget_pt_regs *regs, close(bprm->fd); return retval; } + break; + + case PT_LOAD: + range.lo =3D MIN(range.lo, elf_ppnt->p_vaddr); + range.hi =3D MAX(range.hi, + elf_ppnt->p_vaddr + elf_ppnt->p_memsz - 1); + break; } - elf_ppnt++; } =20 /* Some simple consistency checks for the interpreter */ @@ -740,19 +748,12 @@ int load_elf_binary(struct bsd_binprm *bprm, struct t= arget_pt_regs *regs, info->end_code =3D 0; elf_entry =3D (abi_ulong) elf_ex.e_entry; =20 - /* XXX Join this with PT_INTERP search? */ - baddr =3D 0; - for (i =3D 0, elf_ppnt =3D elf_phdata; i < elf_ex.e_phnum; i++, elf_pp= nt++) { - if (elf_ppnt->p_type !=3D PT_LOAD) { - continue; - } - baddr =3D elf_ppnt->p_vaddr; - break; - } - et_dyn_addr =3D 0; - if (elf_ex.e_type =3D=3D ET_DYN && baddr =3D=3D 0) { - et_dyn_addr =3D ELF_ET_DYN_LOAD_ADDR; + if (elf_ex.e_type =3D=3D ET_DYN) { + probe_guest_base(bprm->filename, NULL, NULL); + et_dyn_addr =3D ELF_ET_DYN_LOAD_ADDR - range.lo; + } else { + probe_guest_base(bprm->filename, &range, NULL); } =20 /* @@ -766,7 +767,7 @@ int load_elf_binary(struct bsd_binprm *bprm, struct tar= get_pt_regs *regs, info->elf_flags =3D elf_ex.e_flags; =20 error =3D load_elf_sections(&elf_ex, elf_phdata, bprm->fd, et_dyn_addr, - &load_addr); + &load_addr); for (i =3D 0, elf_ppnt =3D elf_phdata; i < elf_ex.e_phnum; i++, elf_pp= nt++) { if (elf_ppnt->p_type !=3D PT_LOAD) { continue; diff --git a/bsd-user/main.c b/bsd-user/main.c index 73aae8c327..772a26199b 100644 --- a/bsd-user/main.c +++ b/bsd-user/main.c @@ -540,41 +540,10 @@ int main(int argc, char **argv) } } =20 - /* - * If reserving host virtual address space, do so now. - * Combined with '-B', ensure that the chosen range is free. - */ - if (reserved_va) { - void *p; - - if (have_guest_base) { - p =3D mmap((void *)guest_base, reserved_va + 1, PROT_NONE, - MAP_ANON | MAP_PRIVATE | MAP_FIXED | MAP_EXCL, -1, 0); - } else { - p =3D mmap(NULL, reserved_va + 1, PROT_NONE, - MAP_ANON | MAP_PRIVATE, -1, 0); - } - if (p =3D=3D MAP_FAILED) { - const char *err =3D strerror(errno); - char *sz =3D size_to_str(reserved_va + 1); - - if (have_guest_base) { - error_report("Cannot allocate %s bytes at -B %p for guest " - "address space: %s", sz, (void *)guest_base, = err); - } else { - error_report("Cannot allocate %s bytes for guest " - "address space: %s", sz, err); - } - exit(1); - } - guest_base =3D (uintptr_t)p; - have_guest_base =3D true; - - /* Ensure that mmap_next_start is within range. */ - if (reserved_va <=3D mmap_next_start) { - mmap_next_start =3D (reserved_va / 4 * 3) - & TARGET_PAGE_MASK & qemu_host_page_mask; - } + /* Ensure that mmap_next_start is within range. */ + if (reserved_va && reserved_va <=3D mmap_next_start) { + mmap_next_start =3D ((reserved_va / 4 * 3) + & TARGET_PAGE_MASK & qemu_host_page_mask); } =20 if (loader_exec(filename, argv + optind, target_environ, regs, info, --=20 2.43.0 From nobody Mon Jun 8 08:43:55 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1780175695; cv=none; d=zohomail.com; s=zohoarc; b=AreoMsRBmfCX7xwmVgUBhnF4hPs4JZZWSEgqGS9U0Z1bsn27p74gM4XShHgjZi/UxjB55ktQAP5DfcA+P1lN6hiVJoFRK70n0EVnSEPLzCo0JeyIa/Aa0YYYSJSLeC2LNOHiDSh9oiRHzs5JOWqGldgZLLn1iXYVpjmSyQtM1VI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1780175695; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=LyTvLUnnO1vXqEM/LWenPW1IEdmUpPSMFl0cuHem8z4=; b=K0eLEvmMhpQpWNnORwAkHFFjDrHYiZnMsNXpHgYw/xznXMHzO44rzdSDJ4YKEX8Q52zYBpZEKAZ1vycZnwyUoftuOD8oCkITTUduwyzd/fU8UnoyuqzOpOVbRaDnVtvIV9sipu+IHRc2gjTP5w/2pxuGFFgF2BMUJqxp2cVBTqQ= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1780175695783405.2845635804184; Sat, 30 May 2026 14:14:55 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wTQzg-0005hZ-N6; Sat, 30 May 2026 17:13:20 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wTQzU-0005eE-Lf for qemu-devel@nongnu.org; Sat, 30 May 2026 17:13:08 -0400 Received: from mail-pl1-x62d.google.com ([2607:f8b0:4864:20::62d]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wTQzS-0000ma-7O for qemu-devel@nongnu.org; Sat, 30 May 2026 17:13:08 -0400 Received: by mail-pl1-x62d.google.com with SMTP id d9443c01a7336-2c0c20f0c0aso997275ad.0 for ; Sat, 30 May 2026 14:13:04 -0700 (PDT) Received: from stoup.. ([71.212.142.33]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2bf23c580c6sm59592895ad.82.2026.05.30.14.13.02 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 30 May 2026 14:13:02 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1780175584; x=1780780384; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=LyTvLUnnO1vXqEM/LWenPW1IEdmUpPSMFl0cuHem8z4=; b=cVjhLiH+2Z3ViqdemRMr7ueaO4+cgxG3DdcDFR8A6h7bnHRkEBm4SbCRA7w2af+ggf lGmkr/Vaw2r47V92Yym8GTQQ4xdaHcQsUqON/eH0bpK25CN8dtVVVBsIkxA/yORyanS/ ESQByiZk1J+UM7uzUTs8s7Ie4PN1JMdBEC52YkFn1LaDcTbm+vSWRBW2j0wW6fAYAewd f3r85RIPehy+Uu4gNtAY4gDIjj1ToEHZs+3TU1u02iXVeWdWs7lZe9VlV5Zk8kdIWMiy i845lcpUz551s60ex6v98LwipIqKAFuHgafPhQGv8P7uU4bYmomCBOesoTq+qW/RBmCY +3Jw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1780175584; x=1780780384; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=LyTvLUnnO1vXqEM/LWenPW1IEdmUpPSMFl0cuHem8z4=; b=UvS5lOcELiU/RyeU/flltAZvYSsLQgnGiWnE2Jp4d/mjavt88NinVDaEBFmSemEsnr CTlpM1Yt4d91SgRq+KFaDmfxCVx0Jr2P+C8g9c88hzXkGNgT+lWI9cd40vuWNWMvwye0 F3lwA8SvcCis7exEfo8BWA9CGsaUEjqv0ZufpWK4CuFxnItVnVOmrgQFrJsAneOZxDJG R4tIUte3sAcpzcKnh0kECuNH81b1dsNE1/lHkWe9Pev5v7bKEmOskc8q1Tm0HNqOorJv io79PtH26AnLtegZWwOiQVTTaookfvk9kIV2uCdIiFsRsoRTI6LFm+s+zUoq6/Jx5D3y N6fg== X-Gm-Message-State: AOJu0YyTD7EdGagnGytDNeG7N+UeZiLUPSjVH4v3D3Cw+Hr0RJYUgdjk EN5exP/BDX62JOa8NHnQYEozXLXwRQ7vip/oWxhujq/trNB5AgUopgIs3ef3uPAIggAWAK5Gs7s izR4vvYk= X-Gm-Gg: Acq92OGY8vvmQjyT/omhYeUE4YjjXKZbOBNjuHE6WASdimc+v8h9zyrmJD47ClBZ9sr QXPWq3aGYmSwiX5/GfJxUOsDyER6Ygst209xGByK3kp9eFEEddi5+nEjza54AUgSKTLs7fW+E8y pTidOedUmjBrayQoxo/9Eyc9ZztVBrUC3GhF0PqN1TLfJ8JSkpht5tSU3MOpsJrJ9GrpAHsLLFk vMwvfv6v684S7aBVeRqfwVUUgj9q9upKr1tWNU+kbOR268QgLIYDDUyV0XhK5eDYk2zUatPNTj+ OpCTddbyOQaQUBxCaWPuyubsMF5kDttBvfzWK5+OOY5Ka67lBDnk++w1Fe85vf8s411HHmr03QY jVyAKL/SGzRh5QAusbz2STxZTY4pVGRtYv/YoXd7GASFiHh5ikoHO2ve/3kEeBBX74jj4d6MdSp FhHq13DsXVNyGT5OKaMh2FHZMhVxe3kiLLh8eOrY8FXnN63VRcTw== X-Received: by 2002:a17:902:ef4c:b0:2c0:c38d:9d51 with SMTP id d9443c01a7336-2c0c38da22dmr6834525ad.21.1780175583742; Sat, 30 May 2026 14:13:03 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: imp@bsdimp.com, deller@gmx.de Subject: [PATCH 13/13] common-user: Move guest_base, have_guest_base to probe-guest-base.c Date: Sat, 30 May 2026 14:12:47 -0700 Message-ID: <20260530211248.375318-14-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260530211248.375318-1-richard.henderson@linaro.org> References: <20260530211248.375318-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::62d; envelope-from=richard.henderson@linaro.org; helo=mail-pl1-x62d.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1780175698500154100 Content-Type: text/plain; charset="utf-8" Unify the definitions of guest_base and have_guest_base. Signed-off-by: Richard Henderson Reviewed-by: Warner Losh --- bsd-user/main.c | 3 +-- common-user/probe-guest-base.c | 4 ++++ linux-user/main.c | 2 -- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/bsd-user/main.c b/bsd-user/main.c index 772a26199b..3201da2318 100644 --- a/bsd-user/main.c +++ b/bsd-user/main.c @@ -62,8 +62,7 @@ intptr_t qemu_host_page_mask; =20 static bool opt_one_insn_per_tb; static unsigned long opt_tb_size; -uintptr_t guest_base; -bool have_guest_base; + /* * When running 32-on-64 we should make sure we can fit all of the possible * guest address space into a contiguous chunk of virtual host memory. diff --git a/common-user/probe-guest-base.c b/common-user/probe-guest-base.c index 77722fe63f..6f1247cf1a 100644 --- a/common-user/probe-guest-base.c +++ b/common-user/probe-guest-base.c @@ -7,6 +7,7 @@ #include "qemu/log.h" #include "user/guest-base.h" #include "user/mmap-min-addr.h" +#include "user/guest-base.h" #include "user/guest-host.h" #include "user/probe-guest-base.h" #include "user/selfmap.h" @@ -18,6 +19,9 @@ #define MAP_FIXED_NOREPLACE (MAP_FIXED | MAP_EXCL) #endif =20 +uintptr_t guest_base; +bool have_guest_base; + /** * pgb_try_mmap: * @addr: host start address diff --git a/linux-user/main.c b/linux-user/main.c index 01cf5bf079..60a695b7ca 100644 --- a/linux-user/main.c +++ b/linux-user/main.c @@ -79,8 +79,6 @@ static envlist_t *envlist; static const char *cpu_model; static const char *cpu_type; static const char *seed_optarg; -uintptr_t guest_base; -bool have_guest_base; =20 /* * Used to implement backwards-compatibility for the `-strace`, and --=20 2.43.0