From nobody Sun Jul 26 12:33:42 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=1781812610; cv=none; d=zohomail.com; s=zohoarc; b=NeMeL9kK9GbkANQD2wQNfqrRdE2DsF+hddgAOvUG7GkX81iDaEYZ5JEsliraDL6qmJxkLFzTRwYc15GPsotj6JYCSkZLJjUxiJY06s56/oD9Qrm5FnICTzRVgDpTM2I4O2CuDxqZuXJkfgWY04D9HMFUVxznzNisUVesmf2VHak= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1781812610; h=Content-Type: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=IaOFaqKACdMizsx9Pbv6kiT8caf5eiJWnLh/9195E8s=; b=RxQ5rqrBdppC+e5SuJCkWYPKSQsHr4h3SvZRGTaXY4LUmF16eSHnw9dumQbGYwOT0p9Fzm2h0peS5/wQmlMTluD5E4kwppxgzXRssZ5K0BIWyanGht3hr+0Ill1uv2UlqjUgLK2YKSguhfG56x6Exh4hTnxRSA0PVnyOKzG6dsk= 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 178181261097661.75663775288615; Thu, 18 Jun 2026 12:56:50 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1waIq6-0003th-Sf; Thu, 18 Jun 2026 15:55:54 -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 1waIq1-0003s7-7B for qemu-devel@nongnu.org; Thu, 18 Jun 2026 15:55:45 -0400 Received: from mail-pl1-x634.google.com ([2607:f8b0:4864:20::634]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1waIpq-0007qy-O1 for qemu-devel@nongnu.org; Thu, 18 Jun 2026 15:55:41 -0400 Received: by mail-pl1-x634.google.com with SMTP id d9443c01a7336-2c6be9cd89bso6596415ad.2 for ; Thu, 18 Jun 2026 12:55:28 -0700 (PDT) Received: from stoup.. (174-21-129-215.tukw.qwest.net. [174.21.129.215]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2c432c8ca31sm205732965ad.55.2026.06.18.12.55.24 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 18 Jun 2026 12:55:25 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1781812527; x=1782417327; 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=IaOFaqKACdMizsx9Pbv6kiT8caf5eiJWnLh/9195E8s=; b=FE/B9taN3SBO/Kjjss37EgW5VGoWkUA3ipflTbComJXJpjGtobfRVSpzf4GM9yQ17g Xap3j0o41DbLUJ6nTiSidDCoYBpDgJ7n/fsgxC/WWMwzC700ZB8t/8uEpPut1kFzPral GzthvNr+d/UJyW6xqLazubROXh9ABAHn2buWAEFLfte+/Rz33CvnbZwyzhh6GYzIBPwz qX03hZ/txbjqoQS/CSZ/UzcpY6ijoixCEcjG+Ofi3keuwOQrIPcXyy+SgB9oF2wlnxrH +kBqxm0WcARFEM+HM2eUua0hCUYr85iygIZe0OGMtlXD8Vk9wteOHcnZQC8JuLcOTQd3 djXw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1781812527; x=1782417327; 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=IaOFaqKACdMizsx9Pbv6kiT8caf5eiJWnLh/9195E8s=; b=TxEKTiqBvBBEtpZcmSniOSi8ChWJ48f+FHL4914Jfdz+cirnQMRkf8P+NseXWllb+f fhAEAAjHZSfpl92xQMkY2RDu8aypWTu+ioJF6MUsfzF/Lj/P68DEfS/2/jWW+aFHf62V 5BySvtsa2j8aGWdIHPwyjqbehbS317gBeeuuWTpLepk03eCmoTGJkYA/wuXsvjCO9pub qYCgQYGIXxuKcITW8oZTMw/3SDiRmEWC3+soRY1hUHO0tOaF+yaQAdbaKqAj3ptmG0bK od3q/+SNHGi3hClkH91BEoUm3O8HxKc7gM2qWtytWD9WklCrfTjet2/Zb6gd4Ua5yuX7 p3Lg== X-Gm-Message-State: AOJu0Yz9WzzpahZ1s/B/QdKKGrb5L6dowQfW37qK+UQz4prPHu8jRWSv miLFbvbpVe+LwB3n5fEwGHFCnwSXGLAFxecbf/COqIsGEDN9QE82JqkJfZotXqjxsZngpUjoyVa ST7SW X-Gm-Gg: AfdE7cm3J3YPXNSBzL6F03LZD7slwG7f5TISQl1qCj5JoIT/h1eyR3U1wdyjrhOtCef lz91PdXLCZUqMtf+sHk+PThToSdq5PsiyrjkWWTQYyTQ7K02vbQiFW/EqyGDpt+ox6D7GotSNin EUPgx0miCkEztoFAf3KhjAEBmkyRHx7uGo0JCeMd4wCyOQJGyviz+7bs4D7Q464s5aktV/cMeV3 WMVyDD9i3V+1bVFyJFXEhRMjn9jbYqz8Jd12+nD7A80dNf8sucf1FJ3AykG9mhn0S/lJYOmJDP6 hs8GLQGG6hGgU7XZfsnPNMdEtFjasnRrj7qprIiYUK12TGpSzKXRH505c72l/CYtdUx50RmnqHc dDi7vY6P/KkxKNmQzJJ5siHm6mNkK3TNc/IWAjjd8oW/dUAY62S2hjzjU7GMa5y5hQPN/CysZbi VF+BzS/Od94gJI4ruzZeqkcqXIAPDwFrBYJzvxjQiTppxeg3VGCw== X-Received: by 2002:a17:903:41c3:b0:2c6:bb55:4078 with SMTP id d9443c01a7336-2c718c88c55mr7606285ad.8.1781812526994; Thu, 18 Jun 2026 12:55:26 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: Warner Losh , Helge Deller , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= Subject: [PATCH v3 01/13] linux-user: Introduce PGBRange Date: Thu, 18 Jun 2026 12:55:07 -0700 Message-ID: <20260618195520.589907-2-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260618195520.589907-1-richard.henderson@linaro.org> References: <20260618195520.589907-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" 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::634; envelope-from=richard.henderson@linaro.org; helo=mail-pl1-x634.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: 1781812611836158500 Create a structure to hold a beginning/end range for guest virtual addresses, for use by probe_guest_base. Use vaddr for clarity. Reviewed-by: Warner Losh Reviewed-by: Helge Deller Reviewed-by: Philippe Mathieu-Daud=C3=A9 Signed-off-by: Richard Henderson --- 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 0380d44fe9..b04ca43f02 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 b05b8b0c6b..aa4986a3d8 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 Sun Jul 26 12:33:42 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=1781812638; cv=none; d=zohomail.com; s=zohoarc; b=hxtACq1xs/zmdf5bERqqOa5BFWWrzB8Vj4gAE+2R2BCeDEPMoGNv7Jg5OE3dxZtoQrF8nJvTXnnm8JjHwQfacPFQTt6DOHOJ1rrFNZW0zjinCC3fxpPHqfxyh6tVJgFG/FYmhhzkFUA2asDQqPtFgvsA33CRoC4vLhLCrgilHJU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1781812638; h=Content-Type: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=sb+MPff6QX844HAYEHBQvEZrKABgvd2wf2uC/76ZV/g=; b=lOUYWvRLMy6qOD2ki0CTraSFqY41LYeS1aQF6YQH++9isivt13kNNEwnIa50q91x3Rm/dwjsoaxhE0j9Dp9nFaJfItEaK+QoBl6w8ly/ZGMYUDXshFutz6aepg+uXaISKD6+oczXTXqiaMh6brQObDW6yvmv2+W3ars25JSI+0E= 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 1781812638288636.185580445094; Thu, 18 Jun 2026 12:57:18 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1waIqA-0003u9-HK; Thu, 18 Jun 2026 15:55:54 -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 1waIq2-0003sU-NZ for qemu-devel@nongnu.org; Thu, 18 Jun 2026 15:55:46 -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 1waIpv-0007rA-Pr for qemu-devel@nongnu.org; Thu, 18 Jun 2026 15:55:46 -0400 Received: by mail-pl1-x62f.google.com with SMTP id d9443c01a7336-2c6bc87f4d5so5988225ad.1 for ; Thu, 18 Jun 2026 12:55:30 -0700 (PDT) Received: from stoup.. (174-21-129-215.tukw.qwest.net. [174.21.129.215]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2c432c8ca31sm205732965ad.55.2026.06.18.12.55.27 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 18 Jun 2026 12:55:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1781812530; x=1782417330; 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=sb+MPff6QX844HAYEHBQvEZrKABgvd2wf2uC/76ZV/g=; b=EY6dS6DavLd3Ayr8qGifRx27tMpyx/sli0Wr5z/VvWjp8u0+g9uxZT1UcNRwdnzLL1 a/9QV7KcyGC6X/k8+JRYV3Uo1yoTVjnVJHY3Z9BEM3req7NK1+IILjg/FMRjg6J+Cz5f KBk8hzL38CwdJDXvlAKRUEnH1959kqP6m3+AKn8D7NhWjQeW85ai2f7eN2n4ym303uDY p+5UWxI8KxAGtjR8HHJDm7CyDS+uuYcF6ARXzxlG3bsFGflRlse2NeGXG4bGYg3RYC64 ULZuJ1DDjiQf3r3ro+XSsZCRa7bWPPbQWAOxaJh7kJNszBAc5OnYajXUC+ijswQk8s8h g+WQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1781812530; x=1782417330; 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=sb+MPff6QX844HAYEHBQvEZrKABgvd2wf2uC/76ZV/g=; b=nsmK3fhwE9O4qixxlbtTxRFRkrGrCfwc1TGCRU6754+NuqNprn2DYjtXOLz/s/dLJP GVKllWBgT81RRxMLwDSLUwQtTUg2Lw2N1IJT3p6l1C6q0Wh3Fgm/IxCSMTFfhv7S3JiG HWiQAAcNeJ3ZIxSWcMrXOYMTQxVm3bYo+B/oRvVQdwMJiwevnm1BicxNUt3i2Hm8bq0G ze2N50l006R3gARtJaeNkNE0TC1ktLBQgVNLr7tmiL5Va1Su0xWaUhDLQFcpCF693eDf zkTrWOyhFGOAY+Fyk/jjGrtSrX+ad9fRKQ4LTq0qL9Ykn8F/fCVO+ieJ1paYTxk+jGjd s3dg== X-Gm-Message-State: AOJu0YzqD3VHeBjBwuTfBwbAlhW++GNUxNBF9vWAymV25PSN+b5J2OQe Q96ObFVE1tO1q9dyoR4320uh+cK42h+GuL544wCb075qx7YqcJMzg1aW3wB+s5+ghtGiPzLwOp4 k17hK X-Gm-Gg: AfdE7ckHxYOt9K3YwFWaT4kELqwrkzjB6uwvDe5UMmbBsT21NWES6SkZG+lFwLsO3SG w3whFHBGqLDbmHi38m7hxgf6/v9k9MCOclIs8lVlJEz3Z69C5H2muJSsv7ojPjkMG6iVSLCOjvZ Gh08Env3A4PWbHSMsyvr9NsJhW05VfEvJVJRxgWuNIJmQFiNgrhWYcmAiy/mXMyflA1ThTT0b35 mCGMnacaJcp+ABSDTcSWlSDHyjI7I8sh98en02iwPFV60KzamidmKwW6UmRwQ1dYxAbnwxcVoL1 sCRXcNl9IFjIJrrODYENA5M1LLGjjYGPkfCMBZNf027UP+ET9xELXwI1Xa2YGPA5Yizk23/xm31 whDRcB6l1yDB6C58HSiytn2rcV1pCWWr1C7/VyJ5A6IUd8bxeUuFMwKoSzGWPGn6ZxKrJIYvL3d zv7rV97iUrafRHSxyBAFui940PZ78e5xmGXbH31HR9G78EDTuTDzpl/v8o3umW X-Received: by 2002:a17:903:1983:b0:2c1:e9f8:758d with SMTP id d9443c01a7336-2c718fc39c5mr7552795ad.22.1781812529734; Thu, 18 Jun 2026 12:55:29 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: Warner Losh , Helge Deller , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= Subject: [PATCH v3 02/13] linux-user: Use PGBRange in load_elf_image Date: Thu, 18 Jun 2026 12:55:08 -0700 Message-ID: <20260618195520.589907-3-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260618195520.589907-1-richard.henderson@linaro.org> References: <20260618195520.589907-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" 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: 1781812639899158500 Collect into range instead of loaddr+hiaddr. Reviewed-by: Warner Losh Reviewed-by: Helge Deller Reviewed-by: Philippe Mathieu-Daud=C3=A9 Signed-off-by: Richard Henderson --- 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 aa4986a3d8..b32abd569f 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 Sun Jul 26 12:33:42 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=1781812562; cv=none; d=zohomail.com; s=zohoarc; b=DlWkvRCePEZuvQUdeJp596VfWtYLfojHogo4agFpQARysutIi789tVkZvivxw4FTX/NQzyhYPXYeERFMqDnaJWFdnUz3onYXB2zYAqsR87k9kHBBbBJpi0muiZqVT5e1jBFZesxZzUf1NwjBhhEo817tQ3qWogrNC8Ns7nlpjmg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1781812562; 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=ZwD+09xFgdMoZuAKSWmp8VsuyM0k0eLL68nRKXSEm94=; b=S6BjGRUIvhzCL2Mw+qpPtqE2vrOa7/AxgrDRBlS1hP082U9219s8J9XQF+Eg4EficOCdJrHekzp1XylIv38/6DAboUvCmA2XdOmnsQLsYmWLkza2DM40e6VfQKVKxbPsJ7k+sOcEw1QpdpZcFV4mo3HDXxMblLoAPZG+ZOk0ls0= 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 1781812562901513.1392531091499; Thu, 18 Jun 2026 12:56:02 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1waIqE-0003vS-3l; Thu, 18 Jun 2026 15:55:58 -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 1waIq2-0003sS-Bg for qemu-devel@nongnu.org; Thu, 18 Jun 2026 15:55:46 -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 1waIpv-0007rR-Lk for qemu-devel@nongnu.org; Thu, 18 Jun 2026 15:55:46 -0400 Received: by mail-pl1-x62c.google.com with SMTP id d9443c01a7336-2c0b9328c4aso10252405ad.0 for ; Thu, 18 Jun 2026 12:55:33 -0700 (PDT) Received: from stoup.. (174-21-129-215.tukw.qwest.net. [174.21.129.215]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2c432c8ca31sm205732965ad.55.2026.06.18.12.55.29 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 18 Jun 2026 12:55:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1781812532; x=1782417332; 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=ZwD+09xFgdMoZuAKSWmp8VsuyM0k0eLL68nRKXSEm94=; b=d2j33pXZnz/E5qpRJvUXHofxzv89lz1gPWfKdIt60EghP09Dsw6te2slyCmgYpjpXr eRBjDyUDUnIfcgdH8VuI7+zVIFNKc3I04b63wX1aTsP+YY0OT7L/BgCKDOaSNBaCNqRR OPrt1sBF8wRUR3SayITI0OL0ciERf+DcvRThmxUerpJlQ4Ms8qio1D3mRE9OPpHA1VD/ MUyz+ydV5IfWzbpnIfZ+k0LkMkqCjjkXnvJlP0z75aMeMqUwSQ4afkQHkX3Nof3O4MMr cChiKoUZL0pdRHOfucVSsnl4hMsLnJBkOdv6vpNgehJgF5RC8wYZPI4qiaA5FVpcsZUB JusA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1781812532; x=1782417332; 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=ZwD+09xFgdMoZuAKSWmp8VsuyM0k0eLL68nRKXSEm94=; b=qxkFWG7KIKrWp7UICTN8n8dUOcYCJ33ud9qcn8Wf9rPYVhtedpBQ2+LT1f7HFfPV0k 52XYha0NmlHS5S0Nwh5xd3kf8L/Zii9i3USUnp3+hNbXmqjKaNqGpqIkLqiaOfZTKrP3 y7+hzR+M2BdENqwgc7Mi4GzWVDreXjosS5j4XrEzUHY1wQ6Kb3h5zlftwzASGi9aiPkP X4mrublvtWW0czisBVfxqzJiRpDRKFmTa4qpo4kp09XS4cAmr228XffFQ9bVQeLqmMai 7RWEQOi7IFfwr9FC6vHuqpyn0BVHe59+azLui/jOSrrocqaW85yNjJmM+782OTaadsUi 2RHg== X-Gm-Message-State: AOJu0Yz3H3Ucl96iFF66OsPCtzTmjh6gWZmsxBSXkKkU1l0EGGTQhh4W IAkEZA2rsKRGFZ9a08byuF4DRxn8jbve+xgxOLm9V22gM9j3qsO52GwyI7m5DQQZjJkY70BcWTa 0xcpe X-Gm-Gg: AfdE7cnZoZ0iUJ8co0d8F4QnrdFzq0TFN9poRQM2mYLkkSdm0zNwASs7nSj606N+Fsx yuPcRFzKI+14nEvg3gvp68dbcYSl/6P5+lvGcmoxNnKoRuSRl/FsTBniAX9T8ySGndQwkjauTW2 dxf+VO0NhvKchMlH6VaKyR/ReoeS/LRBop5bHxZhlo1sjcTHwuc4GPQ+T1KXXal+2qVVjhRUvHk PuRl+xL25S0LgC6xQuqfv9KZwzXjnbmtzv63oDOzW+DoVan1r83QeB8FLUDv41JqlcSyePOi7sB vLhoy0+JJ8VXQ8JQIIHeBgGNY+r08qirTIyngfsiT2YcKo8wSe8tNADHy6j1bM39/28WKRxH7Xj pjEqmvGg7DPNZzxzqrjIWKA2Pmsw0LIubPTljmv/N6WUoLI/7NR5MZjXKT5wVHd6gEDt+6XKnBX zFjU0zJz8uYGMW7k0OpfNrkYwEiR+/4MTTlbfCehjH5aohxxaSWQ== X-Received: by 2002:a17:903:2347:b0:2c6:9358:3ad5 with SMTP id d9443c01a7336-2c718fc45fbmr6291135ad.17.1781812532446; Thu, 18 Jun 2026 12:55:32 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: Warner Losh , Helge Deller Subject: [PATCH v3 03/13] linux-user: Drop hiaddr out-of-range check in probe_guest_base Date: Thu, 18 Jun 2026 12:55:09 -0700 Message-ID: <20260618195520.589907-4-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260618195520.589907-1-richard.henderson@linaro.org> References: <20260618195520.589907-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: 1781812563775158500 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. Reviewed-by: Warner Losh Reviewed-by: Helge Deller Signed-off-by: Richard Henderson --- 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 b32abd569f..960847fda7 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 Sun Jul 26 12:33:42 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=1781812593; cv=none; d=zohomail.com; s=zohoarc; b=kztLda+TUDdFL1/1N02UWeM3vONR3wt1Dmw6JiV0de/hxNwMSm0QjlFuzVTzInKeCZt1FdYnqKN3C2s1hW83GI2AWOWQL3se3zRSGTBvw8ctrwVbgNY6UcVg41DRI/JVy7OuLtSUJ0jmcK+nQbJXXOdgFvZO86EHvjuenkwspYg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1781812593; h=Content-Type: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=VgqfzWhCcL1IcrFMPtYBl3wfH4Sd8FWDUgVUy/mTAUA=; b=gzVAj7llCfo6Nw5Q0gCQkNLfvaYPCw44hpuaZX8gikg3siLFDA3kMZ11F6teGRYldMeZGP9fFjLuBhUl1ezoEmkvcFwydHkom2Vr+hSi6U+yjRZk4VASyjiQltV/FAMY4zaDu8aOraZqEiHI0TZIfjLE6O2CA1aLmN0BeidWOZk= 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 1781812593857227.71487230260504; Thu, 18 Jun 2026 12:56:33 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1waIqK-0003xk-6N; Thu, 18 Jun 2026 15:56:05 -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 1waIq5-0003tM-4d for qemu-devel@nongnu.org; Thu, 18 Jun 2026 15:55:49 -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 1waIpz-0007rg-71 for qemu-devel@nongnu.org; Thu, 18 Jun 2026 15:55:48 -0400 Received: by mail-pl1-x62c.google.com with SMTP id d9443c01a7336-2c6c57c5bcfso12909875ad.1 for ; Thu, 18 Jun 2026 12:55:36 -0700 (PDT) Received: from stoup.. (174-21-129-215.tukw.qwest.net. [174.21.129.215]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2c432c8ca31sm205732965ad.55.2026.06.18.12.55.32 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 18 Jun 2026 12:55:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1781812535; x=1782417335; 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=VgqfzWhCcL1IcrFMPtYBl3wfH4Sd8FWDUgVUy/mTAUA=; b=x1zh5Ks05bghW1ZfrfdA3xTiZ2Vv9jN4JtB7b/u0U737mz1aMVOisZqsLfJ26XOX+g xHizo4SIMxQbbg7CDPPbnSX6bf4hwsp6IaBkue5fxL+NzOFoXYbJuzsr7378Psk0WEiD VuQqprXqIXjwPI0CEgw7YWDOCmf/0+F0CZXkFywJO+Od/Jebx9N4BXYy6ogZQzGymwoK u4CDyk+w4n8huVW3A8tAvPcNMA/v4N1iZOlmaMVGxasYEhCPYXJVhEcazvB2Hb9QexAG +mrXxXmP/C1pIxlGw2lLXF3w7x/x1d4GNoqhqUiedI3njC9vFBUchT48NAl0hiG4I4ws aSLQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1781812535; x=1782417335; 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=VgqfzWhCcL1IcrFMPtYBl3wfH4Sd8FWDUgVUy/mTAUA=; b=hOi8IEPzhfOnLomlfT2su63vpWts9I4q0mkP5b9Lgo4v+AHsDEDw7tq6pxqmzUh8SH Qi5jOyqzVX5Mo7qn5s8CTnCu7xcDuYRpDvzpVDz7uHmpG/LqOUzJxeMETCq8TpFf6MVI QumS6cozOJOl7RBCC91xtPhNOJ+/1POSAgbToVbH/zf5FxwoFRdDU+fuBJGBGbKU5oU6 A25T2nj2SG+5DgB3D2ZGc1Qj9W8c9Eva+4NNn+ZfkMPUyPdkr+/gYfVEf8gNdf2N/trl kQtaokCYZoSOs2dvdiYrv9LLALGlU5QG88FR82SagFyhfvRNO48Y4g9iecoiufOhVU4w a/7g== X-Gm-Message-State: AOJu0YzBOz/vOjg70GZf9I6WDnxrk+xEdbxRtytmSG233t/Qpd9XoDOS oQHx6jflXk3uzE97eTK+IXr41Fj4tptNcC7y9xMBmLBGauh/LlucDjVHGk2rEEKC/K3LWvpp/FG SPGOR X-Gm-Gg: AfdE7clUjVwa59D5jERZiCNd/eImkJ3zPlwsIjKRBE2Dc+mui52h0lkGs7hKD9cWZWy HM4/6PtLXyNaSxhYoYdAM6ZAsx1iB31hKgTxLHxRS2QUEr4ZvjKKDzx7yg2Mjjv69Np3CeszmjO /zNq6F1uMmTK76a+nzpJu4qswOmVMQuvLQUDwjjAur2d6H2eBKpV1ooTEBeCWA8TgUuMUyEXvC8 YQ93g0xPz4rzzWMhBqJC53jGxjBtKv/LS37bbupFwQ/KMg/xfMjEEZ25xASC47A+M9IPBpfbMUk lsEeSUkXrGwo4jObbw7lf8PR/FxEFuMLiZ6CFlWJIYbMtAoc+d3BcEYf6u2QBORsblhBJWd5b9l zLeWzJQj2tjlV+EApHWka5sdF8NHL8GB7nV7aNinYXDB2wTiXCbMA5uEGCANuqW/TBW6mVHNDCz A5CM1g7T7kxiGfSd4TAeoWuvqUMXWVsOlOJalfduR8C+Qp2jY+4w== X-Received: by 2002:a17:903:22d1:b0:2c0:ab82:6b99 with SMTP id d9443c01a7336-2c718fc11b2mr6589175ad.33.1781812534846; Thu, 18 Jun 2026 12:55:34 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: Helge Deller , Warner Losh , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= Subject: [PATCH v3 04/13] linux-user: Pass image_range to probe_guest_base Date: Thu, 18 Jun 2026 12:55:10 -0700 Message-ID: <20260618195520.589907-5-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260618195520.589907-1-richard.henderson@linaro.org> References: <20260618195520.589907-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" 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: 1781812595786158500 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 Tested-by: Helge Deller Reviewed-by: Warner Losh Reviewed-by: Helge Deller Reviewed-by: Philippe Mathieu-Daud=C3=A9 Signed-off-by: Richard Henderson --- 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 b04ca43f02..d7f346b0d0 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 960847fda7..8545ac9695 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_hiaddr: 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 Sun Jul 26 12:33:42 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=1781812599; cv=none; d=zohomail.com; s=zohoarc; b=abv6I+VCfJ/ACXXOp6Oi6NxrxnG/qLm3HQMcnoV3VMrl1/jpFBw7FpLQP8XTCTvZ3jwddDl28B8NHuAVRhqcSQkqLW+Mpu/fQKB/oVXDRE1tcyLJoET3eupJAKaJgEUW1Gpu1EwCceRHhqh7lz6sZgDbp6Pbod8ZAFfYJH3Rknc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1781812599; h=Content-Type: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=nzkybTZWtVoB/GJCCBnPGnkb1gszSpW1xZ4P0TVnmog=; b=m5qBqShYK28JjRGIfrP9zKZsQ0qWkVfp+IvLP01D1GYspUMNj2lmUyxezwZ/22p+hjF3Qg3pvYgK4Yey3z5XiqCa0bpL9xsttEQToyZAeXNr3A40KN9E8jeZgs3LzY2A7tc/thyf1asUITsyx8A+gj2a5W1quFZqwBnGvzc2JRs= 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 1781812599328823.8305492697251; Thu, 18 Jun 2026 12:56:39 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1waIqZ-0004DU-7f; Thu, 18 Jun 2026 15:56: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 1waIq5-0003tR-50 for qemu-devel@nongnu.org; Thu, 18 Jun 2026 15:55:49 -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 1waIpv-0007rq-Lt for qemu-devel@nongnu.org; Thu, 18 Jun 2026 15:55:47 -0400 Received: by mail-pl1-x633.google.com with SMTP id d9443c01a7336-2bf22d29dabso9304645ad.2 for ; Thu, 18 Jun 2026 12:55:37 -0700 (PDT) Received: from stoup.. (174-21-129-215.tukw.qwest.net. [174.21.129.215]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2c432c8ca31sm205732965ad.55.2026.06.18.12.55.35 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 18 Jun 2026 12:55:35 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1781812536; x=1782417336; 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=nzkybTZWtVoB/GJCCBnPGnkb1gszSpW1xZ4P0TVnmog=; b=PIcLbZIcEBdvSzsSsHyu2zb6y/2voDhpDJ00Gmnh4WqeznYpKo20cNdRW+QPTWfmy0 UClQgz1HbdTa40EaGkb8cVziex01sLDq9hHQ5N0yip3//TS7OHwDJa8Sjmz1pmrErO8z EH+JOHn6SfM2fq2/dsN11m6z1ToqGwPzo0b2xcIzKdtH4WVtvLlWpxjsZwR5QJpXjBP8 F23M2DIBpmninxd5ZOL1DtzBQ90Ih9wwvf4YGcvmcXDPv5BNHm7ACLK0cBuKufneiWyn zVNd+hN0fpeG+c+Tuf+FqzxrNW70nc/8acuJYBWt8A2s5j7iLl4+QevCcYCnBwxG5d3I WsHw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1781812536; x=1782417336; 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=nzkybTZWtVoB/GJCCBnPGnkb1gszSpW1xZ4P0TVnmog=; b=ecFgjtLlvlJZVLyeEa8EpBHWsLZ2vR9DLDnjvfSFmwtikNGLPYx7cAAdxGoz21r5Jf sLvQlVvpZXhEGdVeB35IxXQAvJ8jCfir50CBvJI1nRcilToI4fcBCwa/eFNBwOLurYy6 dFMrzOAUZreKnP3aG/ZxOaUkaTxsmSP5XvFsjmKNnmLsEWoHt3Plupedkit8LpCTMFQ9 MLK7pEA8PR3DJ1I2tV4grPAoB+sOQRpqpeBgU/6RThrkGhWKJXQ3dqxRq5k+oX711ulv cwayKm8I49z1Q0RqRWvMNGGEJDNW0ix+tYbJ9jMTIyiWs2QQmAjfglF8a1FKthRJ7898 za1g== X-Gm-Message-State: AOJu0YyQ73aYPm71T7TDvnTWlQVJv0E2W1U/ZkCWneMskfzRyiijsNmf EPoI9gtPYTb4xkLWfmfR94/TCVI63vzLY9SZTKNm6JhyDz8hH8hOQuFughISUsJvptkavS4vKYh 2TQck X-Gm-Gg: AfdE7cl+oCLsOe9kmiPMJyrtAJ0NNZz5r3iZ/5lGEEuBJC30/Hhbti3PoylNUyx2YOP 2+SP39iukWuYUtHPCBI3kGBjqxAczaBn7lt/rPLjYCxsLaSbS9t6kJ1ypViB43TeAOD1d7typGn 2J+k+Xjt9yN7/GeZZKuzW4/5wVchAmtFSl0CmoHdKXl1LExHR/R7D0qJiqzd2weoWdgnmngXSac ll1vv+xcarwZgLrqCqTUsbz0o8qiqSV8M3Z8o17s7PVNteWaYXx3jYrxt8dQymrGlxFUkjxkL8e SqVgzD8tHC2ehrvrE5UaDglNoDox0vt8yKbKF6WpCVaYnqRKBMjlcDAXwIsEMiWxJkxi0n+scg+ 2PCXXvyYIgML16sNv8p6LWwJgDtB9uKflv1lJYm/h0G1lnYdk10i5L1pMqG8Qf5taMZMyz7eHsz XRoszzQDsGMofkuGXMuIP4m5EtmaSoyaOb6Gyq11tqFIX/kZPOdg== X-Received: by 2002:a17:902:db0e:b0:2b2:ec46:dfed with SMTP id d9443c01a7336-2c718ff3fdcmr6936645ad.31.1781812536158; Thu, 18 Jun 2026 12:55:36 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: Warner Losh , Helge Deller , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= Subject: [PATCH v3 05/13] linux-user: Use PGBRange for commpage Date: Thu, 18 Jun 2026 12:55:11 -0700 Message-ID: <20260618195520.589907-6-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260618195520.589907-1-richard.henderson@linaro.org> References: <20260618195520.589907-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" 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: 1781812599811158500 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. Acked-by: Warner Losh Tested-by: Helge Deller Reviewed-by: Helge Deller Reviewed-by: Philippe Mathieu-Daud=C3=A9 Signed-off-by: Richard Henderson --- 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 8545ac9695..d0605e33d4 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 Sun Jul 26 12:33:42 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=1781812640; cv=none; d=zohomail.com; s=zohoarc; b=D94EF+wq88v5aTKqpaAGUVlcHDvpjRGiXTj7bfpDhGcZd33Zwxun8/btEciG82FqFeEwLnqskqg7H/D9yMv8LeLyWdzj69dzDjLedIzaQeIFtRxoC6cE/jEy80U99eq0rBrecmfGSxgbsfsfwqk7eApT70eHyXXLuwlHdKJ7eZU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1781812640; 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=ASr2pvwo5vnG/kZZj54KyHeGhWg53rQ3Aa7QnOvkEOc=; b=X1okNpbo0K+jr3eyBztuxbejwPMQyLiW2cEL8hkjRperc5TxQPNi/XjEDfCMxmPuoNk/TMMdwKoF/2Hv2fMbtOBF6EzrHOSQZaUpRaiY9LnVG2Al4zhW0pck5gcUMH6PYhRVwk4Fv6XoEUHxVdWNWsEgg8WZ1MqVO2aqKeTmUpA= 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 17818126403431021.2207249458111; Thu, 18 Jun 2026 12:57:20 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1waIqT-00040f-RC; Thu, 18 Jun 2026 15:56:15 -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 1waIq6-0003tk-AW for qemu-devel@nongnu.org; Thu, 18 Jun 2026 15:55:50 -0400 Received: from mail-pj1-x102e.google.com ([2607:f8b0:4864:20::102e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1waIq1-0007s1-3f for qemu-devel@nongnu.org; Thu, 18 Jun 2026 15:55:50 -0400 Received: by mail-pj1-x102e.google.com with SMTP id 98e67ed59e1d1-37c64d34032so1357502a91.0 for ; Thu, 18 Jun 2026 12:55:39 -0700 (PDT) Received: from stoup.. (174-21-129-215.tukw.qwest.net. [174.21.129.215]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2c432c8ca31sm205732965ad.55.2026.06.18.12.55.36 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 18 Jun 2026 12:55:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1781812539; x=1782417339; 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=ASr2pvwo5vnG/kZZj54KyHeGhWg53rQ3Aa7QnOvkEOc=; b=XY7FkNzrxQzdsNWrc+Lk5gIDg0BjzpCT6vdQ58bh6GSdDItgbIfofDOs8WnoIf8YlP USii/0sPSgl20NE81J44W9KewwkDOyYqSMjNrxLASiTAqtLp7cUgUNmLZ+I+qMMvKgnw 9IrxphkJiFkaxHg1kQ2xwfOw26KhuMC0oYUMplcaYK0UiBbzRrBxQujsrJj8YERV1es7 9MVrLreXKHx0UOPCUgiUgREsDw1pEyfuvi5mpTdrTK8acwYPMu4cv9dU2yaYKvEm/wWh m1khVtik7w6wvf2kcDDpZek6+ol5i6uIXuW1XrU1ClL2kzDY1k9YPen28HVE8F0zsz5Z xS6g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1781812539; x=1782417339; 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=ASr2pvwo5vnG/kZZj54KyHeGhWg53rQ3Aa7QnOvkEOc=; b=tUhzJFpk5AWJnpPfrzMGuBPJ9rJo3jSmWIWzYeo+nfUMXhBiUWlgR9Sbd9QWOHpNqw yo1/xuMOhJlkZ5ZWoqWhSx+q+MFA3+zxVgkVm43AoMsYvM4ldZSBxwrP1ZjbnZ25ORYr r3lcl008prUFuEpsoROVbQqpFA4Qla22Q+KlQ5ujfxIIVeqhyBNzXdFs+aa+lnQRHpGl KwusQD/UyeuW1z3Ge+ZKac6GfN3IvuI1ejrBbjLH/dbF9xYZ6l0DER7oSqVM09aPRYTC 3jNj9FFaEWEIPvz1/ywA5Jf7x+Q5aX5WuedjPtTPCUT76p0BX074M7zOC8wBwXQr7C/t 48BQ== X-Gm-Message-State: AOJu0Yyl60RkKTApgd+JKm/NtxlIdAh7l+fr1a7eufhl08cTkXhn3isF L8sxqzkTWCYmWNq2qY8MEWz/f93e8CD+ac03unKZEIR94VBrU+f7eyi/w1hyZPUxsKdmO1rQ0Vc Gskdt X-Gm-Gg: AfdE7ckR6i3I+rOgM60Ma7XtDXmmRrEjCyZ1mUk9H1tDhRRo4dCiDOKKvcls9Wp8QGG xy1VlAu647sqg6LBaYDwUY6G/m/noem2S1tnsxGBnULq/JKIZ/wGJiqbT9/WLhwoqlgB/TNhjbW MZhkQ27i0AZ9Ae8fn8/NTKEeAcyAeCyUlp+Zd/AsGL/dAKT3nTORelDiv75VyGEm3bBxvhzIW7M wvaD0+QE1+7I2DuN5MGbod8FmJLErCfxhsf9AN53FFd1pZVaydPXthSNceZTagIyYup21ko472N EgN+ciLLs1bDrH21Oen4U/iFbLwmvzUo7AAW+JBITnG5OGgSm603eCs0wxF84HNuLdBBQmBlK3e 7rst22ZR7BmTuL8kZDsxpCvtl22DuYYDDXhIRgZ4T6GanSQhTiqrTdBr55K1Xy0yCRrrVFZnC85 5EVzNnF/52+abzWbRTltkn8Qu5sCTTXCfdukht31mXA7i1ixssaQ== X-Received: by 2002:a17:902:cec5:b0:2c7:14ec:8ccc with SMTP id d9443c01a7336-2c71952da57mr4159495ad.8.1781812538735; Thu, 18 Jun 2026 12:55:38 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: Helge Deller , Warner Losh Subject: [PATCH v3 06/13] common-user: Move mmap_min_addr from linux-user Date: Thu, 18 Jun 2026 12:55:12 -0700 Message-ID: <20260618195520.589907-7-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260618195520.589907-1-richard.henderson@linaro.org> References: <20260618195520.589907-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::102e; envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x102e.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: 1781812641898158500 Content-Type: text/plain; charset="utf-8" Introduce user/mmap-min-addr.h. Initialize the variable from a constructor instead of main. Reviewed-by: Helge Deller Reviewed-by: Warner Losh Signed-off-by: Richard Henderson --- 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 d7f346b0d0..74d8eaabbe 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 d0605e33d4..f32c52a968 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 55277f7c3e..cc0c2ee6c2 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 Sun Jul 26 12:33:42 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=1781812583; cv=none; d=zohomail.com; s=zohoarc; b=FO3AONZoO0tpb3di51lBLpZMGtACIXpGCOqEoKY/Ywy3hbzvchMhTKoxEgPDLHrMJW9u2bfC8cyZL7ad9MWKhR+dIvekntjxNwq8HoV0ZLFLmpZagPPNxPgAzmIaZEZ7otcZ3L6gchVvtaulvm5Q/d8y3tDkBNdU3nIcQsbRysE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1781812583; 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=mXnvKcZP9AChKOwVNmnhtyA36iu2kjvikfZ1oQO3isc=; b=k62qDLzOHuTCGe+2Vd4bkn4ZcsXbHqten0Lm460DVD1U2SV8TmQ8ua96aEdX/IxMWlWZPXQGd1SCfWdHJPL6WfhJEGcoRZC+GvSMYrc1X9PlAcvW9QUHFEPNAkgVZt200BZDDcoArPF91YLzjOavLAz/nBCyMpjNqnDwK2ctcEw= 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 1781812583965688.6936692201858; Thu, 18 Jun 2026 12:56:23 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1waIqN-0003zZ-VA; Thu, 18 Jun 2026 15:56:07 -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 1waIq5-0003tZ-Lc for qemu-devel@nongnu.org; Thu, 18 Jun 2026 15:55:50 -0400 Received: from mail-pl1-x62e.google.com ([2607:f8b0:4864:20::62e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1waIq1-0007wY-1w for qemu-devel@nongnu.org; Thu, 18 Jun 2026 15:55:49 -0400 Received: by mail-pl1-x62e.google.com with SMTP id d9443c01a7336-2c6bdb8a8bdso8665815ad.1 for ; Thu, 18 Jun 2026 12:55:43 -0700 (PDT) Received: from stoup.. (174-21-129-215.tukw.qwest.net. [174.21.129.215]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2c432c8ca31sm205732965ad.55.2026.06.18.12.55.38 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 18 Jun 2026 12:55:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1781812542; x=1782417342; 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=mXnvKcZP9AChKOwVNmnhtyA36iu2kjvikfZ1oQO3isc=; b=gSvlO/Dyvge2Z0ZLfd8rIiOFSKl6UD1VZUW9kMWBOMchnleRsMiqWRmnivPU1PIYkS bWhppxnj+HIDutu3yjxSDpEEjCSMCb7uctK4Gs0h3DRK/ufZepAuRUDCuBHsRwuQEZtm QMpmONyMotdpbmFA5yjAn8aoZYekhyQ7XUY2QnHVcaYAU013Zze6Gd/DUty127e9E8DY 5LJdnVRAHmMh2aiZXyUat7YqjDQ8FswfC0xPRYXgdhRoIfnWVR5nuFFSDjLLb9ddVvYF Ck3a69Vlvifwr8anLEeqmHiJJ4KidVXz1wKYBPQsmbSG+TEWCPR87ohHGKzZrTzZnZUd VTDQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1781812542; x=1782417342; 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=mXnvKcZP9AChKOwVNmnhtyA36iu2kjvikfZ1oQO3isc=; b=aEocUaNUsnCbKtTRDvZGqGUhH9Pc6O3MQFRtugknCn3e+Vq7CR1jFklh2uSmxjzbvQ V8WVS1kJYbAo+9iuL+rTBAkyxrQMbzL7eRm2QEdF8U4PiszSi5srY/RzmqDAMaPkQuJ2 rup0apXgd2YTl0vJO8tVn6RaHbXNKLMHWj3LTI33oJIPHkZ3e71UTI4baQttGEehR5wD FQepI6G4FmGZl1GVbsiRP4op+F8S4OKfMfNObsUrFXorpxfuEwRojeZzhSwQlzBib9K7 /kp1UWFRcNp2dNUccD5IQLryrVJrRXRpUpSI/WH1jt6Ls/cGW+4oxnki7hPpXIokOkT3 lTDA== X-Gm-Message-State: AOJu0YwI6hr7sExwuNQZEccFz5o7MgPBlHIVOV96EDKWUbPyvnFzvpxg 6PZ7NFFKyZiJX2GwVg9Pbh3iiuX7RTwNu9SMDaUWuFnyVRK77kN1bXV3obrix7xu5v+xjlZ6S6n TzPrw X-Gm-Gg: AfdE7ckfEK+WMPaFcR4o+TtE7EO1O8GMpieW3mWnP95Q6SPFEVr3ddn5ytgkhB0WGGh GXoH/kinFumzJppe/Ue8BDC3WRi2Z3TZS76O3lwX3jt1iMk76pgTSIsMyvi64qBtuj+3WtO1si5 SdeDOukuiIaSuLG182Jfuy8+2YCRjB+u9K3y9JMaD6NyEgEHwuyM5/OL7KA9JIN4cGY8aTzwPk1 qk5F/kM5xCAF56BxF1SK2dVTwNRthTxIWZanVfioRwhd8vqo9pZaM8xdcGojX5wqL+8ALHtTjrb NVxWIizMr7eNt8OHEVsPEG1q7GkM0Ne15KDELsQCifcRU/LCUVOdxEt7liOErkp43LErIDq6C0w tirLr8rGkuKmkLoIxutsVy+8FJeM6cF93KwW7VFipa9AxYp42rcsguSYkckALh3vjAl+Fzc/xoJ vgpEOSo1s21F3YZkGbPmbfRjRnh4nPdm4X+A33A7VXc270tnx90Q== X-Received: by 2002:a17:902:f552:b0:2c1:69cb:4423 with SMTP id d9443c01a7336-2c718f61657mr7121835ad.14.1781812542162; Thu, 18 Jun 2026 12:55:42 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: Helge Deller , Warner Losh Subject: [PATCH v3 07/13] common-user: Initialize mmap_min_addr for FreeBSD Date: Thu, 18 Jun 2026 12:55:13 -0700 Message-ID: <20260618195520.589907-8-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260618195520.589907-1-richard.henderson@linaro.org> References: <20260618195520.589907-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::62e; envelope-from=richard.henderson@linaro.org; helo=mail-pl1-x62e.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: 1781812585633158500 Content-Type: text/plain; charset="utf-8" Use sysctl to fetch the vm layout of the current process. Reviewed-by: Helge Deller Reviewed-by: Warner Losh Signed-off-by: Richard Henderson --- common-user/mmap-min-addr.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/common-user/mmap-min-addr.c b/common-user/mmap-min-addr.c index b2b3762386..830c6f66a0 100644 --- a/common-user/mmap-min-addr.c +++ b/common-user/mmap-min-addr.c @@ -5,6 +5,10 @@ =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 Sun Jul 26 12:33:42 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=1781812632; cv=none; d=zohomail.com; s=zohoarc; b=a8WQ00bLZtrKOwFGbNkLG4JCFTkW0CaY0rzvm46CPm6cVOMmNbK6D0nzT1AIQ6gxWhreikWegtDIdT7Ci0M9Ewz/8L6ofR3TGqNNStIuoSJEMPjWqswDbgciDqC4PDxPLHhkdDoXXC1R2KhrCkT1hQVmbybeNTKAh3lCXtKkSak= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1781812632; h=Content-Type: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=tmlZevgFhXIJJdsn/GrE/B6w1KsZRwMA3LkvTnWXOzc=; b=hhjoSeQGJlCJt5MrHBtv/b9i/CAgUlUc8iOmM+Id1gezcb5E2VOZXye++Ls/Q8pX09gOCtuPVXtehMY/L7pIkHJ92TkklZpSyjBxC2SRt67YXmDNoXnMSiqj7u43iRyRvilA4ZA2xPynlUKEZlGcs2QkxTi6puy2D0+Od7u+Gf4= 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 1781812632191709.8748121676191; Thu, 18 Jun 2026 12:57:12 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1waIqM-0003yK-01; Thu, 18 Jun 2026 15:56: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 1waIq6-0003tl-CU for qemu-devel@nongnu.org; Thu, 18 Jun 2026 15:55:50 -0400 Received: from mail-pl1-x630.google.com ([2607:f8b0:4864:20::630]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1waIq2-0007yB-E9 for qemu-devel@nongnu.org; Thu, 18 Jun 2026 15:55:50 -0400 Received: by mail-pl1-x630.google.com with SMTP id d9443c01a7336-2c6bdb8a8bdso8665885ad.1 for ; Thu, 18 Jun 2026 12:55:46 -0700 (PDT) Received: from stoup.. (174-21-129-215.tukw.qwest.net. [174.21.129.215]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2c432c8ca31sm205732965ad.55.2026.06.18.12.55.42 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 18 Jun 2026 12:55:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1781812545; x=1782417345; 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=tmlZevgFhXIJJdsn/GrE/B6w1KsZRwMA3LkvTnWXOzc=; b=CWwhrWqk21RAPCHQpjBtYLI23fzWmWUC0rrcCp/pq+b/X9qc3elbJZVU/GzGk11xSm OVdlbFn+gL6xJFwg7OH1lSWuMUAQjgP4XqYO7adQQFKjI7Mmpcm7nyvDXBVtjH/UpOLE Uooe4LiuZJtMGvhao0DW0XCUENOQt+A/3xBTiHFdLC3bFXMY8R+1AxRPvsP71WXHv/PZ SZyPj7oXc0OaqAT38byeg9l62MmsoMTHk5bZ/diVCsnaSCfnDA0H+LLVUHh+zgHu/7CV pVvv6jQhodbJf672XM9abU4O/2781k+ly6jou3qqxmR3/HqHwpxKzqPzdN6YtRR5u+0n 2+Hg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1781812545; x=1782417345; 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=tmlZevgFhXIJJdsn/GrE/B6w1KsZRwMA3LkvTnWXOzc=; b=nLoU6OHTCApCn/U3KrqF26xGigNh/otqwfUbFE6iXVZE+5G3Px8oZCI19bPe3U3Xi2 smptLPH2ug+o+lVBIuqWTgBylxbU3ew2HLTbi+4DaVF5bHvTuOh5bx/qYHfFSXFh4bkG GGjFJRBSh5XiyAhMnwcx1I60dCFSG9i+yeQaDfpYCIXyQ3YuzuNEGzLA3i5XsFChAFoe S2LCQFNcbT1piyJIZdLolOO+Qgv5lc2XBOzSEGmezR5HLxe4WjPiwfhLV51VPylIABvQ sQHAwuN5Vv3+iVBLtphaa+SKJove0ve4zDDxNuzFZEPvhdjicMv/aF4VesgGJMCuZqQH JppA== X-Gm-Message-State: AOJu0YyiPpPdnluHXyIaAE+rvMXA1aurhGlc0nKPknCZkOyZXmo6xPKR bm6sF6EVVNXiQZI3FqMThOQwjp+R6OIdfGiKqKJIrU/NzpukcnipkVO5f5mPE9o/hSg6r5Wd9lP uTGQ9 X-Gm-Gg: AfdE7cl9RDL/PkjJCHYgM58IxxgfnqWOsth6bDOAE0ozMY01e8dhDbAqUxJYQV6g4Gb PfV1AJ3xVHMsWrK9PLZQuetSAQ5wwHcbef/qKVsRUHmqH+ofLZA0ryPPK4QLU2wKMPvr/0msyZ0 qu//XxU6N+rNyMC3YE04xaqPIlIZZzObm/Tmfy9yRUbLKEJYKyKuOfaPQTNbvwYdOHCfGEmQkjd +e2b2Z04KFeAHjX0jgD6ulh9ejJV/gvJYVOkBJJKGZ4sD6H5vSStHaX8PGPrlH+o69XJbTn8TOv NSd598vDSZu3RIBeU1xNRfzYgQA24qGd1ex0hHFGlSAGl8GqfCU3Pbf3QdPjHEaB+LGR5H5Hcll pTExCsiBpNZwca3cp+8M6WsT3rwZZ8pQYVDkzDIs7YB8K3AYZfyd0vm5Dp076WfpcAD3Th4HPyK TSMDxREo3l6TvxSwb3kZvot1hnWdadbpM+eXSBD6LBX1x92vdiBA== X-Received: by 2002:a17:903:90d:b0:2c6:b3dc:b82a with SMTP id d9443c01a7336-2c718fe4c07mr6635575ad.24.1781812544965; Thu, 18 Jun 2026 12:55:44 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: Helge Deller , Warner Losh , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= Subject: [PATCH v3 08/13] include/user/guest-host: Include missing cpu.h Date: Thu, 18 Jun 2026 12:55:14 -0700 Message-ID: <20260618195520.589907-9-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260618195520.589907-1-richard.henderson@linaro.org> References: <20260618195520.589907-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" 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::630; envelope-from=richard.henderson@linaro.org; helo=mail-pl1-x630.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: 1781812633817158500 This file dereferences CPUState without including the required header. Reviewed-by: Helge Deller Reviewed-by: Warner Losh Reviewed-by: Philippe Mathieu-Daud=C3=A9 Signed-off-by: Richard Henderson --- 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 Sun Jul 26 12:33:42 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=1781812634; cv=none; d=zohomail.com; s=zohoarc; b=SKQr+XmT7ucAyOqe859gXCYlmuy5y9SH4SC+TtSYXsCyFJGCFCW0bxp5+UO4zeaN1cuVoe9t+xiEPiHB2HENVa2HXUx+dI8kRWlsgxegAvKS08s9+xWpyFX4AGsRHib+NdxcwnWnFawc2mbP8OV1KJD9PJKLehwGeUh2iwiipQQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1781812634; h=Content-Type: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=tX8jP1jaQhitvntNHtQT9F1LEDDMetef5FQKXnkp/sQ=; b=gwaGesYg0anGklQM+OFzMWNlnlHCyWqe7D0OCxJrma+6sS31tBFvsFJvh8RPf9BwIFisdiRtEg7Oznzcy9g25w/N/6L2lc2mnUjrTnxlYn8pBMPJm/dvVmqcmwyFGe+2mvn4lGL0CnZVRNjhbXsvabhMnnVLVGb4m2frwjMSxqU= 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 1781812634777785.0913774990138; Thu, 18 Jun 2026 12:57:14 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1waIqq-0004Zw-CD; Thu, 18 Jun 2026 15:56:36 -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 1waIq6-0003tn-N2 for qemu-devel@nongnu.org; Thu, 18 Jun 2026 15:55:50 -0400 Received: from mail-pj1-x1036.google.com ([2607:f8b0:4864:20::1036]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1waIq4-0007z8-Sh for qemu-devel@nongnu.org; Thu, 18 Jun 2026 15:55:50 -0400 Received: by mail-pj1-x1036.google.com with SMTP id 98e67ed59e1d1-37c5b9d42efso1385455a91.1 for ; Thu, 18 Jun 2026 12:55:47 -0700 (PDT) Received: from stoup.. (174-21-129-215.tukw.qwest.net. [174.21.129.215]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2c432c8ca31sm205732965ad.55.2026.06.18.12.55.45 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 18 Jun 2026 12:55:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1781812547; x=1782417347; 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=tX8jP1jaQhitvntNHtQT9F1LEDDMetef5FQKXnkp/sQ=; b=mn/nK1P9Z7HS+4FCg8H0Ugo5xshYnfOczY7s2NByUq/HH900CkEKS0LZ3fCHaF7Avt YZagR8zK5mGaURHwWbCYNR9mj7xEwNZt4unHLkdfzuI+TtG6tDzm5DPGEW0M2P9ivsDl tOgrdORpbM17r66/LX9JhgSZ4uoRACzEH00Bk4xg9ZD4HzK8dGcblnnzhbHiA8OT3Tdb YOi8XN9pYgc2NPZT0s4dtbKqVHIhAMcjN55pIY0S75IjL2mVGK7TDWqapF/u03tIgl41 wnTt/zvll6PV4r4Q6SgouiO9d077w67x7ZKtetl+ojt5aTtKuKj5xkOkaXaOg/MzMyxW e+Iw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1781812547; x=1782417347; 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=tX8jP1jaQhitvntNHtQT9F1LEDDMetef5FQKXnkp/sQ=; b=iBlWC4BH+7LIdrAV3busD+68V/MvMIdmhl9yf+2YlZ4I7r5mkfaJzXipLoLooNMpoW MIuh3eE38vn5nEuDoRtM2SSbFn7YOdmn3S2o1OpAKeAGNWY9LbhHD+r0bjIPKVgYowvL UlHYUhKbYbePP5aDn/NP2CDkQUQ1ZekwD4ikx62jgvChuUOQPN4U14imLpT7p8U76TPL 8CWkgaqJ52wfFiVl7/dfDQLYkSMha/AbiuNwQB8yvIAf7+JEs6Of45rwuw1qNVWIH/hP R8ploGlShnntYWUZA1PfVRjWZzmtbEKeD+KV7l4OMIyLLr9Djrg8+arZfYmXA373xUuL bpeg== X-Gm-Message-State: AOJu0YzdK4Yh/cIKJSxS5VljSDEcnmmjqx4/jZd6Rw4w3jjt+7jy8EsH 3PO+aYQ1C4QYmLxRy+LBaiNxerLA8VEZH7uML1cd3NNu+LiQOdzm8e8XHPrDr51HzdU3adEzs+F hezdw X-Gm-Gg: AfdE7ckz98GBxZl+zw3PRBUL1AnWjdxuIuCgvo+TGZa0T1NubufveDlsX++jElCAGw7 E7ZqSpEfdF3kTiF4qt5NKQVhc1kjtzA3+Jnny5OvC0t5tzuBz4krVo+O8Qg69P/3rhkv2PKfZUj zsk4n6qyDBmmEtGq0Yzs1l3hJxNsOPZMToVLhONmWrea8CMEulIvzITYp7KSDOloVfoo2emNnuV nLO5+BcYMbDrQpfpJ1gqpyWlMZgTun3/9+TjzdOm6kDwTw4lX0pvxid7Lwl+BrYJP7zp9HL/YyN HATgRXJlgjCfNHaRRaXm5R0HeAaX8h4tI5VTJGpdLWxKxvEvcIjvVXnDAv1j1kOgNnbd8uE2KDA 8lZvwyEIwb0L5usVC2eO3uei+gWBNCpS4WrdAjdQ1XEXnE2lO18RhNjgMmBq0mn7Z9NlrWon19S 8fBVLAMF074FomMbLRRWHOlkSDY7+cBsfKfCZ3FdhhBZpNThEBPg== X-Received: by 2002:a17:903:19ed:b0:2c6:6425:b343 with SMTP id d9443c01a7336-2c71953051emr3666435ad.6.1781812546922; Thu, 18 Jun 2026 12:55:46 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: Helge Deller , Warner Losh , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= Subject: [PATCH v3 09/13] common-user: Move selfmap from util Date: Thu, 18 Jun 2026 12:55:15 -0700 Message-ID: <20260618195520.589907-10-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260618195520.589907-1-richard.henderson@linaro.org> References: <20260618195520.589907-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" 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::1036; envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x1036.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: 1781812635846158500 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. Reviewed-by: Helge Deller Reviewed-by: Warner Losh Reviewed-by: Philippe Mathieu-Daud=C3=A9 Signed-off-by: Richard Henderson --- 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 f32c52a968..ee2df35aa8 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 fbe357b7e0..dc4fb72385 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 Sun Jul 26 12:33:42 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=1781812630; cv=none; d=zohomail.com; s=zohoarc; b=WSQRMdUDQjsVu3zXNAQ0pZU4PXFnHAJC8gaMfrmqnW6csoTA9SbbMkpbpoNUgvpQZdZEnYo6zGWrrZMAVoLuJ3XmKvGuvUdySHu/skFnZodjmdipmrWBKixvlyCrPWgCBfgBaSJwcze5ZV+TeU0KAZlu2peHjgcZpjOLD7rdS5w= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1781812630; 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=mLc4bOAmdlNUJRnLOKeEd6vpG/eMlgp574CGKB+t3Qo=; b=HMu0cHzqeTznkle4gvpDZ0dlRedasEutPmvvaXHnw20lYSuiZiL9g4WQ+2QIeTYoDQqLuSTw0M1aTUnPF8onwpAJ8wfCJSRvSynskLeeuMQUQYJajZZFF/Bi9Se0hH9bvjPe7BVE1zJ8hjVxkBIhI6dF/nBuaq5JbygRpV+wRWs= 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 17818126309798.146583040065252; Thu, 18 Jun 2026 12:57:10 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1waIqH-0003vt-Vy; Thu, 18 Jun 2026 15:56: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 1waIq7-0003uk-Vi for qemu-devel@nongnu.org; Thu, 18 Jun 2026 15:55:54 -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 1waIq6-00080J-GW for qemu-devel@nongnu.org; Thu, 18 Jun 2026 15:55:51 -0400 Received: by mail-pl1-x62f.google.com with SMTP id d9443c01a7336-2c6b3f71648so18132365ad.2 for ; Thu, 18 Jun 2026 12:55:50 -0700 (PDT) Received: from stoup.. (174-21-129-215.tukw.qwest.net. [174.21.129.215]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2c432c8ca31sm205732965ad.55.2026.06.18.12.55.47 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 18 Jun 2026 12:55:47 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1781812549; x=1782417349; 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=mLc4bOAmdlNUJRnLOKeEd6vpG/eMlgp574CGKB+t3Qo=; b=jHrva1++Irnf/T605J2K4kmszMzMAQZ7+h1AmSztrMg8H9KqGu+Rdug1LPQz0ty0G3 LZ8o+wn7yAnz7FRiyNby3w5vNTpHYTqgu7CDi48tTzIA9sS24hdJNMWzIMTse3Gsot9b UrjoDdCva0ccflfAV0o0V+AVfQr3iYfYIjIdgxtOjsdSJtkdoljN3yziZOz1toGBl92S oXH1ekrCCvdXcGqpbAlmFyUzfxglbYbBwUsysH6HWHWYFO3OCB1TMTX6xmR1R6nc7AI4 kUr1A7xemsGxeWqYIzv/vrfsnqeGbXbR/rFvC7dpl9isfpwawCX6KTxe1YF9EmMkWOJO 84Zw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1781812549; x=1782417349; 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=mLc4bOAmdlNUJRnLOKeEd6vpG/eMlgp574CGKB+t3Qo=; b=figz7RC3RpmTQRo6i5kyUMxmf5TGu55pzrZgdO429tZWQ9EamCdjOvKezusTxmPm+/ rE8eI+qHBiFrs4B/+TZB+sOCI66LEGPvJmTXEVXAl2duWTGTSZBkBvFqIyts6k2SvIsK zlfPeNrNWobjJfEU4ftsQF2mc7i39//1bXKZTcgjdSkL9KI/qZET/xAdDCZ7ZyFNb2RP CrtahgoSzoV+TgPBI55lP5JZ2pC5UzP8/5pAa0VknBxa9tYA12ZRSg2Mb7WhCfL9P9ey Ixgb5cdH5TP/NIMoPogoTOJ8iC4si4sO3sVWPakWx0SQCfKiadz99KRZXKcx++CIXNVV M5OQ== X-Gm-Message-State: AOJu0YxHA6qBERc/NrfYFiJut1/+0748MgLiiX/loAQuN8hn7tUB2EYQ NLvTc3KtxIISCP0p0FaT+SKw3zg9kCaMSW0pqkwGWm1ccnHpW60G0JMG2bLkSZYs9VkhDb2L0d8 eWhA2 X-Gm-Gg: AfdE7clm4PNoTZ7JebEN+YrbtfPFDo3vPHaYMuNSIU3jOgX/bIalYVZNJW+CrRJTu5l g2Xj3aqKDCpCYTSf0iBR96XivQS6Ux3xLa5TvB7n0ghlKeBDOvSon1RhcVRnqCMJzkkNVM0iHGi Q0yveGrUBfb4WCIDrQY+a+JHKMiq3lIH5jtZOeBgQJTvz0kfYfV6LxzKma6IBqF6kuNh9uO/kc2 wF/wAzgOCfrL7HdOOHc6ewaqlQ6KZy7U77xVoXa/wP2IYSJV7HTWDuwq4bQhrn0kqszkgd8h1x4 jRWj50oYcp8sl9Tgmo7fNPaDe4fbLzp1DQfyaOEcSy0pSUNf71Qr8BHEHLHNiumczF8eCNye+cp 09An2vWIr6ulYJMw7ZSURiiSknohrSvvMLZemo3dd+6pzB7MSr5SqekvQ2KHVAJW/wT3i5uSB0x qNAbmiks3liqIwj7nNA0xNNcv1q02MFkzhNUMGkh3QojbhoHN1hInJsWpZZ2UO X-Received: by 2002:a17:902:d488:b0:2c6:9758:9db2 with SMTP id d9443c01a7336-2c718caf4b0mr6429295ad.3.1781812549224; Thu, 18 Jun 2026 12:55:49 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: Helge Deller , Warner Losh Subject: [PATCH v3 10/13] common-user: Implement read_self_maps for FreeBSD Date: Thu, 18 Jun 2026 12:55:16 -0700 Message-ID: <20260618195520.589907-11-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260618195520.589907-1-richard.henderson@linaro.org> References: <20260618195520.589907-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: 1781812631817158500 Content-Type: text/plain; charset="utf-8" Reviewed-by: Helge Deller Reviewed-by: Warner Losh 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 Sun Jul 26 12:33:42 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=1781812589; cv=none; d=zohomail.com; s=zohoarc; b=j71tERpiBk6Xh/Wy2cKOvZf4k4QQZ3RRQgGydV+tDpm/jCBcyB2pMbo3EHtmSTkI0rzOsk5QAubPowwh05q0yXZyq3n1K7JgvN+Gauzfg3ILvMM7sVwPqPzwKrR7te938tos7FEWnWfXQ2Icrq62x6fOVZKwnYPXEcJYdDghK6Q= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1781812589; 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=R+w29pBdvePuWArkwWUCG6+v0rXkNsTxmP/wU5IcILQ=; b=c74xPZjr386+q1FkvBe9XIXmxBKl57pjJH9SdvCD7cvgnLCxquc1veIEOpUWElOhWtNQgV8jFK43M+XBHvHAG7qU0eKT+HnGZMXj8xY+XwOroaHyU/T4H/l8cq+49IrEhRT3Y64CkLygJQjtUoC4ociRim+JcErBKh2wJtxCrSE= 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 1781812589189456.8666718206915; Thu, 18 Jun 2026 12:56:29 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1waIqM-0003yS-29; Thu, 18 Jun 2026 15:56: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 1waIqE-0003vd-Ac for qemu-devel@nongnu.org; Thu, 18 Jun 2026 15:55:58 -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 1waIqA-000827-Da for qemu-devel@nongnu.org; Thu, 18 Jun 2026 15:55:57 -0400 Received: by mail-pl1-x633.google.com with SMTP id d9443c01a7336-2c6b3f71648so18133175ad.2 for ; Thu, 18 Jun 2026 12:55:53 -0700 (PDT) Received: from stoup.. (174-21-129-215.tukw.qwest.net. [174.21.129.215]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2c432c8ca31sm205732965ad.55.2026.06.18.12.55.49 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 18 Jun 2026 12:55:50 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1781812553; x=1782417353; 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=R+w29pBdvePuWArkwWUCG6+v0rXkNsTxmP/wU5IcILQ=; b=V2tGUCXIPDopXa6CWG4VHVTBgc1C6OA4pREcJbZekJnOTZe8x6BJdzCYDQ85Gh9jas fRyyv8nY0w4LgUUgKCjHYzWCTHZCZE9g1AehHcr+lAiZqm3CIVrG7KBydEoACv+OuAid +u6IIjoXrbJ3VHqsCJiJKodNMUYDG5j4d0ym6eSWXqmWK03onFS9tLPgTG87ahzrY6Vq havIAijFuuyiLRZLndyOkYA/2l4i7dyJ06n2UluXPupJearj9o84cuDifMkfXoHtShqa xCd4sdWal8KxHSE4ty4BkAraeZAmI4s9iBJOk9qwVpXyZRZnGnk6lfgDKtvLw2HoecsD H25Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1781812553; x=1782417353; 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=R+w29pBdvePuWArkwWUCG6+v0rXkNsTxmP/wU5IcILQ=; b=o/EMhWCGvIRBkkuDD0Jy/hsQdH+OnNX9aC1PBV3V1SyT3cCiwg7+Mi12DkZDAy3VqH ouKa7iq9oOoa+baeRh05swexHlJxpSUXncHiO7H2fW2PgfyIQcUcKnzARGkiX1RBjaCp scS1sTy+nRCy3FbtlzEgv7XlYXhzOUh3uzq+Zcy4aIUHmcO8knmPrpTIojH4IXy7xLPI e2as/MMAiuXMfgsn8rAUojvynRt/IOlCX1OOdlDuHPRwg2omYcbiDPQ5ZNvqQkVCjnK9 50y0PXHd2aWcnn8b03HpdKCg9etuAvRtYdx3YkD6MQs96MIeru3jQjhK6dW/QUrrBZ6D gN+Q== X-Gm-Message-State: AOJu0Yy3+Iueei0TdQRdGvh6AdFMVgH8tJtUb/5f9V2WfpEEVRuUYsjO kJA6+hLey9JVtEB+/ejpV6yLKOTkHRT68NXM5J4q1gtJqot40/ZpAIaSOcfAWnJtsRJKgyrI34Y QiURJ X-Gm-Gg: AfdE7cnx4q8YUfrvaH4UDMYeJftV6Hzqj8LZ+ycBEoRreJtorbbUTClDQUloJnMkNct ZW3ltN8OhzWY3NsCJHG3GEpyF7/bcA0IuTFyZl7F7QQooYHR7FyLW50vrTMNxGoa5jQ0TAlsmb4 m3DIrfam3FwoLhpforjuoQcisYdWQaYEpkQucyB7R8IZ8du719Wk5FEYcLeMYHS018zhlEpMmhY Awl5MdKTzQ/hoItbCHUmbqhUJO0cedSg5PXd0P+hdfX+Gk+1Kw6D0ku0/KJHdTd4gYPHPpBo8e1 /+n3GKJ28mYHn+JQmkFj4N3ywyRw5Qd0K0wBsQgf5tXiZOjPAlPguGHaHlUdrvKgHVusnPSolQj jU4jvz5BBkmaNQQmFDysEwKr8QsYKPNdnJNLeOq7StAPaqaj3mZcS33b5VBYjyJMp2ftgZHy9+2 vtAyC8xyQ2THM9BAFtiEWx6IL+eARytsynR7dU0A302A+Y2pfLJg== X-Received: by 2002:a17:902:c94e:b0:2bf:114b:924 with SMTP id d9443c01a7336-2c718fbf393mr6383255ad.34.1781812552751; Thu, 18 Jun 2026 12:55:52 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: Warner Losh Subject: [PATCH v3 11/13] common-user: Move probe_guest_base from linux-user Date: Thu, 18 Jun 2026 12:55:17 -0700 Message-ID: <20260618195520.589907-12-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260618195520.589907-1-richard.henderson@linaro.org> References: <20260618195520.589907-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: 1781812589924158500 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. Reviewed-by: Warner Losh Signed-off-by: Richard Henderson --- 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 74d8eaabbe..e7fbddd0e6 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 ee2df35aa8..b95eea6991 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 Sun Jul 26 12:33:42 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=1781812628; cv=none; d=zohomail.com; s=zohoarc; b=Bs+882ARbVyMHMJbvC94tO8YA/yTarKivglvrHLVKrMAVDpvACFVpjyv3NhoMdbNN4HwFMG/laZD8vOg0saO1PQEGtvuofc+/Cg+I8p65sutJ7fY9pa9VQMCbSGTmUbdwwjnNpaxS2hoj5sDpS7mNee1UiMdnJtUdGuKLPSN1y8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1781812628; h=Content-Transfer-Encoding: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:Cc; bh=D1d1aEjn4LJhKQ30FhQTml2wsIITUmwS+fUTg53jjKs=; b=KLyCujPzY5dybRaxo1Dbv4FLSbksi7iqUcrwKPUCT+QSpo2VuEtdVsH7Dyodk07UFY3HoB+LwMF629Do0v7O87IEAQffb0lmm1SW56zLMDqqhz5tHCMQqPOUSc5PvGPR0wdvaKriMsKZX0b8tpplnskBSLJher8goQEcl/Jh7Sk= 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 1781812628964432.02240684330934; Thu, 18 Jun 2026 12:57:08 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1waIqZ-0004Ev-LX; Thu, 18 Jun 2026 15:56: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 1waIqG-0003w2-Af for qemu-devel@nongnu.org; Thu, 18 Jun 2026 15:56:01 -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 1waIqE-00082Q-5h for qemu-devel@nongnu.org; Thu, 18 Jun 2026 15:55:59 -0400 Received: by mail-pl1-x62f.google.com with SMTP id d9443c01a7336-2c0c3546924so12216285ad.3 for ; Thu, 18 Jun 2026 12:55:56 -0700 (PDT) Received: from stoup.. (174-21-129-215.tukw.qwest.net. [174.21.129.215]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2c432c8ca31sm205732965ad.55.2026.06.18.12.55.53 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 18 Jun 2026 12:55:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1781812555; x=1782417355; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=D1d1aEjn4LJhKQ30FhQTml2wsIITUmwS+fUTg53jjKs=; b=mv8+kSiVIIKaNxSMb0jS1H4waI3vE172Yv/vgzhGnY9iZkLaMlBa9hiRvG1lBPMP3L nF522+/3J/uPtpWup5D7UB2L2RCNiPMZFaMBK5W2jBUfFeCHWAz+QQzeYfklaM9XnNsL XXSsFWqqLpNcKJ0n/SlUQovqgZe4XKspMiA0QvbUYCVXkl/B3ZRANnfrpWmLV6eIZ1cE 5KjieW57eGuFgbYiBeMofEc6iKtTOc+w8sPs38WitgGHHP5A0yYmYH82zI1UIZDjsXox 2a6lBSW7sNLjqoDzEc4usVshB2vJpfHq1QGzCJhCNpAMEv38emgZbgTGlWspmpnLqcm7 LfbQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1781812555; x=1782417355; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=D1d1aEjn4LJhKQ30FhQTml2wsIITUmwS+fUTg53jjKs=; b=YiL/Jlg9Kos0593vzl+S5NL0y7fAU+AKV8icgJ8LXNZYTFDZ2IE3LpEvteihpFyjfh 0bXyMOQRiLT0XO40H9grNoAE1jOwk0oKUryjsdNjw1cYBw+Dua8eKHgV5IuZPAJKNWJN Wnwh3ywmWQ8bXfrKiK7w1l83Ji712amno1Pk97vpX4WAPFqKuA265i01471CO+Q4dVta bleuza+qCsjMs5kdd835fmjUCRhfn2g3Dh+IpznUDyFD79OzffnciIEqMQRGC3ZCVqK5 sKrSGT+mVf+QmC6bsgBm0/UpRkJ0SA7+JGR3AUcn7N6iuJxWqyNkdp0jdUacmrOAWSVW G7bw== X-Gm-Message-State: AOJu0YzvFDxhn6be3gEpkWiAup5Dy/eNJ5lwziPRAaJBpZYKTZWuPpxV nZwO6FUvhv/PEArhLbWRBjE+VCQCubu+xAAbEId4AKEhPC70gBYO0ShImEdMqAiubSCjCwVlFP+ 6Qerc X-Gm-Gg: AfdE7ckHPnjZXqTDnSdYC6ulBnv0Sn+wnpC904MK+ZlVrDgl5fbdIO2K4Gbw+kMqyMC i1EPGgI/n1qtiMzg+JDzESbeTu8O2Cob8gxL6WtRFThacLtV2lMr0A8kTzqbaXnkyI9PzctHkoK lZm/K/6dISaMK5KJTcSpdLDK2uO2UhNyOuakrrCQx3eAIiBMMh307ykvbDhVTZqFONR43um9YnO ZzCNiLH7KlxfBP5YjcabRcTXJcQd2crmKlEY1RRMJRP/9OCHVZZoiwBewLBELPpQnxiUmTR6IjX IwtENOGsBLRB1oLCOvVqj1HQKA1OHxbTzxAdWtzI01YpCvKCC9M7CxSiCqRCFc49Cud+RL8hDS1 Her2gf5zk+PV5AP+CLVKCyIMa5IxfaVAH8auXyW6/xZENMaf90NPC2wgAN0puGcWlkiDTalEIvI 6o44QZY9wznbObieornbP9Dp9apErmewyVDJdFsqKJDo5CuUEoTg== X-Received: by 2002:a17:902:ce01:b0:2bc:b80f:6782 with SMTP id d9443c01a7336-2c718f608b7mr7176615ad.11.1781812555063; Thu, 18 Jun 2026 12:55:55 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v3 12/13] bsd-user: Use probe_guest_base Date: Thu, 18 Jun 2026 12:55:18 -0700 Message-ID: <20260618195520.589907-13-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260618195520.589907-1-richard.henderson@linaro.org> References: <20260618195520.589907-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: 1781812630007158500 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 Reviewed-by: Philippe Mathieu-Daud=C3=A9 Reviewed-by: Warner Losh --- 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 Sun Jul 26 12:33:42 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=1781812632; cv=none; d=zohomail.com; s=zohoarc; b=jQZ6chuuq42ygbORoqfH+7tO6TyTUuE1I7ZXf0QFWOmXlhM1itcyxfoeWniv4TGHta315CuJvdtacfNeWiXZ2QtqNujuofvamiynMhKm8HMZhFOLsDhiatFx5Ygd0SpqmnOPnhADSLefLXAq9ZjTj/J3k7E+IaDu4w5v7zaCAXc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1781812632; 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=T01hsQsKs98UkflLhLrhZujUy9/6glB8JiaSx+gv5C8=; b=hpcx7zh0qHEyQO1lPVtQzt3TCfvU2XHH5ZY7e8hurnnF3kaIgViZOI5Nh/QejzspoBA8K+NZZRLqPw59dDZNOxcS4IkhBwzyyRmqJkdPYt8ttrBej/ATPfS9k534IOFU5HWzsnb9OAEdIMsWgpjloaNi+fmsZYn3nU1C4yA6/uY= 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 1781812632076397.71152078733724; Thu, 18 Jun 2026 12:57:12 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1waIqT-000416-SK; Thu, 18 Jun 2026 15:56:15 -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 1waIqG-0003w1-Ac for qemu-devel@nongnu.org; Thu, 18 Jun 2026 15:56:01 -0400 Received: from mail-pl1-x62e.google.com ([2607:f8b0:4864:20::62e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1waIqE-00082Y-2m for qemu-devel@nongnu.org; Thu, 18 Jun 2026 15:55:59 -0400 Received: by mail-pl1-x62e.google.com with SMTP id d9443c01a7336-2c6ec0af575so8266725ad.1 for ; Thu, 18 Jun 2026 12:55:57 -0700 (PDT) Received: from stoup.. (174-21-129-215.tukw.qwest.net. [174.21.129.215]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2c432c8ca31sm205732965ad.55.2026.06.18.12.55.55 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 18 Jun 2026 12:55:55 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1781812557; x=1782417357; 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=T01hsQsKs98UkflLhLrhZujUy9/6glB8JiaSx+gv5C8=; b=HSBqKS06SZiDwkkRpFvxzKcXko/JkKAeqyI1hEts68VtvwBCDgJHIR9qInDQhLlz3D Vc3ppnSKONyr4w9wMPyrBkly6+doZ61nFcDezeY0k00Ne6IgNaM5AWoc+l+sD0+nKDqJ uIKYIoH5SJeOQdgsgjMfojnlez7CQd3S0sbHYDPES/2azbcYqD3eIlZ3ESwnPfBpgQxS Zj06KqWhGpphIH8tMW93z3HytXeSwC2DpPEj6+19X41dGsru0p4FdAPdDnF2bPo9+7QT cg6XgE/rlumZ/eDF1Vwmz5ixU+jLZ/+KiLo97Y6hlu24zhf6JznrWH0RXzmXFsYy4CLM K+Qw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1781812557; x=1782417357; 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=T01hsQsKs98UkflLhLrhZujUy9/6glB8JiaSx+gv5C8=; b=LlSQjTBxzvIp+5zQ2lfZC2m582+tO31HK6xvL9FUueum2+F4TmUu46s4w7V3e0q7f5 I0hAXeySTMceFzIdAi5XHJQHe7276KFVyIVEQq3H0YPT6H/oi+ERjyRxzL8kHINx4SK3 3BUvMkIePaTX43BF0Fg+p0WSANdIs2CkRanIdWNJDQDylVi4NhphKRxpricE1VDThrXM nsnVYzTtIfY6e4+tk+OKZp+b2d8/YeInZGs/BMZdVnGLMy0E1ISG8DSqh/OnLpsF7OXt 1qSUDVpojVYcl8SieH1TO1OZrJsKuHFIOpovPDccYmIO1V6HECT6JWfhIoqfnuJfZ8wR cKyw== X-Gm-Message-State: AOJu0Ywv4CH4HsaUzVuDezSsAahZkq9mbAin/3PYcqmvLyJRABdJ8CvS vGn356h0F7fnIHtl+yjBjK96MkZie7ICXqTu0pvxgSsSG7WGDizmNQO5utYSx/3jEazGk3NszUs TkfIH X-Gm-Gg: AfdE7ckRZwxkrLZ2OG+LYM1b09n96UPMeg945KCUFpAKu1/52qEWtVytJ/MiYZT6JiY IhGlv0P6XBRKmSlQAZYNwLcepHpOjyUletpe0mtS6PwsXW2a6wrH4bdeB0YvwYWnemeoO9InM5K QiznMRY4kElnmmXr9MQW3LwxG6ikSd4rwTAEfjDCGbUSdSSB0cOv5yk9B56JcAOmAormll2fd91 pJ1FnyG0onjmdLyBor7XJjfT5Brkj/ZdxdtjicewytgFWb3I4vRuJNTSW0ZqY8K57D+n2Bny8/r oIpTQLZW7vQULT4tzrXj3kg4c72zJKdnyUXxutQRvgqkA4o+ntX9YMMG9HXa6YK3EuA7yERoDcL 6Al0RP9er9Vcad0/vojjoDq40X5Bq0x8WIR9rk2Erq2put3KV+btpRDMLHA5larlUrf/Dz4lqx0 MmfQbV+QM6SYs6UmxXptZCycfPw9mfgQKm8dxEH2oNtzS9vV3jIoMDNFBTNuTz X-Received: by 2002:a17:903:2ec7:b0:2c0:3400:5c34 with SMTP id d9443c01a7336-2c718c879fbmr7348815ad.3.1781812556454; Thu, 18 Jun 2026 12:55:56 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: Helge Deller , Warner Losh Subject: [PATCH v3 13/13] common-user: Move guest_base, have_guest_base to probe-guest-base.c Date: Thu, 18 Jun 2026 12:55:19 -0700 Message-ID: <20260618195520.589907-14-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260618195520.589907-1-richard.henderson@linaro.org> References: <20260618195520.589907-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::62e; envelope-from=richard.henderson@linaro.org; helo=mail-pl1-x62e.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: 1781812633813158500 Content-Type: text/plain; charset="utf-8" Unify the definitions of guest_base and have_guest_base. Reviewed-by: Helge Deller Reviewed-by: Warner Losh Signed-off-by: Richard Henderson --- 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