From nobody Sun Jul 12 00:42:43 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=1783724583; cv=none; d=zohomail.com; s=zohoarc; b=SGgSh7Sre4wkvUtmPNgzCybgcPgnbx2eO8kZ4Z/EvRsHLb51ngoPnh12WIQZrzFpgQAGXX1KFokg85LF5LwFooDABPCxEKHyhy7deHyHVDsqmPPvn5I9RdBeS6/0ZoSUyG+PmmkH01nkFcP1JMtqXF4jCGLP9pHItud/XndIjTM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1783724583; 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=oeawevpVSRwg+lSOsHGxJdLDP+nh+zwgXFZReFroaMM=; b=FwQPAExAjz+BneRkpu2wgkG6rVeDXbCzfo71+Al//zMyAPz4EMO14/jMbhxUIgVvpBOkDlpveD4P3TWi/z+tNRbmPutm2flx21+lv7H4h7/IxlyBi/O5dDX+RnSHHCBJg1DvlracQvOSEq4mg5oMxGZy5cerfg2wayvmI89tfvo= 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 1783724583767752.32638117821; Fri, 10 Jul 2026 16:03:03 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wiKDn-0004Ge-EM; Fri, 10 Jul 2026 19:01:27 -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 1wiKDh-0004G2-Hf for qemu-devel@nongnu.org; Fri, 10 Jul 2026 19:01:21 -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 1wiKDf-00030x-Pp for qemu-devel@nongnu.org; Fri, 10 Jul 2026 19:01:21 -0400 Received: by mail-pj1-x1036.google.com with SMTP id 98e67ed59e1d1-3856d6fbcb3so1316416a91.2 for ; Fri, 10 Jul 2026 16:01:19 -0700 (PDT) Received: from stoup.. ([71.212.146.49]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-38a55b3c9eesm3426569a91.11.2026.07.10.16.01.17 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 10 Jul 2026 16:01:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1783724478; x=1784329278; darn=nongnu.org; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to:content-type; bh=oeawevpVSRwg+lSOsHGxJdLDP+nh+zwgXFZReFroaMM=; b=fwLaGvMQumKH3+40PF94sBC9zX0RJcT8uvpLo6kCfWC0Wh7WNMJ9tLwUGaOU3AMvPd Mj3y0FpVgH45FWuiDotX8LuDzASj4ph7fkse3zFFJvAgyJOC6ZZhqnKSz2zeQOCKc996 UIlk+8eGfvKIO3zgEJJLTZRENs1HzjhEPdVn8L6UZLUWQ6JXCAdW/wdQhBCldByPE1+g AnOkuPqG3tXv+7qB+L+3d4WdRmHMNJ/DSKlHsg0wUEdFHoxlKsI//dVyN6gMWmTtwGBa Uu08qaBC2tIMV1sP1lmKJg20WgAaQvpIZQ3Wontx7L/97FA40mtikUvunkgTfu+KYlZS SJ1g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1783724478; x=1784329278; h=content-transfer-encoding:content-type: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 :content-type; bh=oeawevpVSRwg+lSOsHGxJdLDP+nh+zwgXFZReFroaMM=; b=cAyJd4LPlyF9nH/YFvYPJQZuQg0NxkW7krOd0EuGgPnvGIW+5sZ+Mi5nEPqRjCZgcY z1/LBTRzBZGMREsaqVAXaZJOQSOIlhoOw8IZF+ocobWuOa8rSWb4oU7nF/5m2WJ2My1k +Ef4zTAhrwrrCvtKgpeloLM4XX36F7LsB98ouM19Z2px5Ztcqz0s8+fEU5icTxicNhFi szxXzNbMNhx2LybyN+xTk1CMyNh/Z9md7q+YM4iZj+XG8u8/pozuI+xqXRs+lVkyP5Nr gXa/9r8KgRvnIz78/IgeLo+1fBfoZhkjg2xF7vvSXznYm9hUO8pvOd5bZjWYJR/cP4Rz ZabQ== X-Gm-Message-State: AOJu0YzWEDiJKKTsl5Ar0oXx0uGQ7o9nmKQljMWFPtm+mDBlTwwblit8 Mz2X96xudnmwM/sE1/4sJCeoT1qC0wXIhAjISWfK20L0ayTasxnqw1qZhMR4+ku1tDmenQ/o5CW tEvt7 X-Gm-Gg: AfdE7cmxo1e7lh6xEQJ2lcSI1sHFPtz+blChU0zzC0cEI35kAPcYC1yy1L87OmgPUuw LfAKZ5uM7Wp5P9GEvMkN1Rey0Q2+KgxCSc6Fkyehqnj6xTEO6mRDJX6dKsZjw8PmLESN+JPr0Nr eiVZrkqFIAGoiBKnj0/W0TYl1WIZsxFFitCl9yBvPmPjlCpdSVLZnzlat7kQgYzcBQdCxD05sER OCtMy+7evMn9a8xpToEF6B6FLixQ+9jeByJAE0QGe9AvcmkK4K8G9ui+Q9n+Ou0cRNq2Dp4A+9Z BV2nFslxUI//H1RIOnVDsMmOHV0Tm7vZvD0GZVDdvmmS7cVjYjUZElebTRYgXGnjbaSPhMxix3w oPVh3MslKxwWfBfk9uM9FlthieN1AMEJTm9KYxU3EYuiD5oZFoRhijraytkKZvVI5Zt8isii3dX 7+rMlwdd0MDbLi7vvUqw== X-Received: by 2002:a17:90b:2d4d:b0:37f:9cdf:f037 with SMTP id 98e67ed59e1d1-38dc7b3f828mr745606a91.26.1783724478065; Fri, 10 Jul 2026 16:01:18 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: Warner Losh , Helge Deller , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= Subject: [PULL 01/13] linux-user: Introduce PGBRange Date: Fri, 10 Jul 2026 16:01:04 -0700 Message-ID: <20260710230116.900171-2-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260710230116.900171-1-richard.henderson@linaro.org> References: <20260710230116.900171-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: 1783724585680158500 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 8049c8ae62..2566c2f54c 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 12 00:42:43 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=1783724573; cv=none; d=zohomail.com; s=zohoarc; b=iOAbIK2GszwPXXGpP4Le0dpmugxGWCaurk3h4KDQv6bjQtpVXaM7O2MAQS39AFdixPTVQh9Dq2PlQ2PHmO+YPgaFe/T9Pmae1fBG2c5I3/oKwCP6ky4HfHfYls3YXbDv1cxx1k7fyVwXfjv2QQ3fyAOVc/bF49XN0P4XDuvF4oc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1783724573; 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=0a+Tjei23EgueA74aObJAM97tufvPB2kilv0MMrOaOc=; b=PpbzGfpQwmRkm+BIq2VwUs3pz8bqEJkdSJQ3/hhqlWOnqeViZjzv0lAnL8TINCpv+RifIhXLV6coA6IG6qG5+4A6q1YP8oPRWnuL64WX5IrjwGTg+I5zIDwbwp2/j4s7f4h/vnFITysJwtG/bxByS9XRokPoTUyCF2Ox3+yrYjc= 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 1783724573922853.2997569664138; Fri, 10 Jul 2026 16:02:53 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wiKE6-0004Qq-Jh; Fri, 10 Jul 2026 19:01:46 -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 1wiKDj-0004GN-5c for qemu-devel@nongnu.org; Fri, 10 Jul 2026 19:01:23 -0400 Received: from mail-pj1-x1034.google.com ([2607:f8b0:4864:20::1034]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wiKDh-000313-5o for qemu-devel@nongnu.org; Fri, 10 Jul 2026 19:01:22 -0400 Received: by mail-pj1-x1034.google.com with SMTP id 98e67ed59e1d1-381891a9525so1792874a91.3 for ; Fri, 10 Jul 2026 16:01:20 -0700 (PDT) Received: from stoup.. ([71.212.146.49]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-38a55b3c9eesm3426569a91.11.2026.07.10.16.01.18 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 10 Jul 2026 16:01:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1783724479; x=1784329279; darn=nongnu.org; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to:content-type; bh=0a+Tjei23EgueA74aObJAM97tufvPB2kilv0MMrOaOc=; b=VBlKZmTNl5EMzk5tpajiic01wQSXo3Mt941bK9IAf/j54i2VxElxXV/70MWchJdwwl 5QfujeOp2NEOxGP8nLnahPmXCOq3gjp5/9oSDDCDdE0hDpt3TS8ly4dZyJLFEJPa3wVk g5LghXYJEM+TVNeGxMuIa8I0fT+o9RjtJwj9ttLtckJlmZNxysLgkPzee+XVo+hqKRIs BeWEVvCtwDEGncuc26vFcfvkbf1UWwDmoUOayEXuElyf4l5tuNzjbnYd06ZByuIrpd9H 1FvpNqWyX45rsXXdGlAzGEzVYjAjGn1IvWopLSN5KPIrvQPa9mHNrzBT9/3aP6sR1Dyw 0Y/w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1783724479; x=1784329279; h=content-transfer-encoding:content-type: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 :content-type; bh=0a+Tjei23EgueA74aObJAM97tufvPB2kilv0MMrOaOc=; b=B96O4rlJiNf3l3oBWTDrJJCenKhiGD6uOHzZYV3xE7NHBstv6tFUn3qR2gn0qgubWT FPFdtNla8rHjGCnVVUaPz25/mCnVwiK4fsgnsfpHWEq+TkVL/49njAawKBC5X5GvU9RS o2NusDYe4HOy0bMqkoVOd9AwIy/2Zrv+epqkB1de+HR5IIPI8DZSW02hjnbJIsPZ6tvh /0ejVrSgfxl9diO3/IRlz5Zdok2V+VAcA4OkZ4hRySq6MIgGP5u8HlNK6ZNGLSyePhYw lI4TzR3cqEtCqKwKxMq2fpvsGq6a0FUv3qXlhOy4vy4dHJlQb/7AxKcn9HVFigZLoGZs Tinw== X-Gm-Message-State: AOJu0Yz1mJDfZ02lr31FipD6mxjXnCBKA75aAE41dt5q8LNvt0eJyZYo TlVlgqKLC1adIF/3RFpOSIJD4reosWuGA5gRdZmO/vVSvle0jWoaV9VF2ivKJUh9GW4m/u0weU8 tFZdn X-Gm-Gg: AfdE7cmXRXl0uyH7TzQESe4EuOScx/LgIGpKG/wS5bQb3RR8awlSb2/gnWoe984JYwl kBsAAjATcIP0cAiMc/vsygUn1YKq8eXdtSenKOjXWAKskVtVRoG6B9sPbPMjCVLGc245xf9b4/1 QEZ6CRs9XpcQT1IGQFzErsFTpp16vICb5y1UG/cY1towLBMyWxH5shdJUkWm3fLiJxDsoFPAW1I AheCBwP5Pl75jDsWxqALFaNPdURtnPkQ2SE+gp9SinXr/XpYrSbV/ddlVh2tInDzhf4AFDEzNzi zV6xfNxAa9G11TjkpjSKYDCBANmGzdzGL5lKYssLg6VJZtd6DHr2pzK9JhUKg7m03kUjPGqwmYO Lg8PSp9cPQsPLh+WNdnWqPrfeJueWimUXi6Qpp4q5bfshxrgp6t7rFsWW+/zTbRfc/5hcAu2Zb0 K5tjG0omxDMzKhM1IBgUHBJkHuO3+1 X-Received: by 2002:a17:90b:4ed0:b0:37f:bfd6:8b40 with SMTP id 98e67ed59e1d1-38dc74c25d3mr797273a91.5.1783724478879; Fri, 10 Jul 2026 16:01:18 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: Warner Losh , Helge Deller , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= Subject: [PULL 02/13] linux-user: Use PGBRange in load_elf_image Date: Fri, 10 Jul 2026 16:01:05 -0700 Message-ID: <20260710230116.900171-3-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260710230116.900171-1-richard.henderson@linaro.org> References: <20260710230116.900171-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::1034; envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x1034.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: 1783724575764158500 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 2566c2f54c..30d7beb562 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 @@ -1480,7 +1480,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 12 00:42:43 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=1783724503; cv=none; d=zohomail.com; s=zohoarc; b=RhNlLtkcaMYO6G6dkAho5tYs/v/UwFhRKSzEKO6b7mZ0D8wlY6ZLi5CxqGY5vYq7RPbqD2O0Y405omwGoN2DMkYMN7m6JZpw5fHrXD0cFj4TZ/ZzRRuiBkK6vxfwvawaB84eQyQwy36sNpFejyEg9XKeYgdeiEhwbl5GSQV/a3w= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1783724503; 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=yECRl5tw1xQRderX2DaWbpchyapuyXnai4wOZcSvlYo=; b=jVCrkdQco1/ha1xiPp/4e3afnEgkJBew2GUlCdrIX/OHDWmWFoC2hT+/rtHJDoXCGmO8UxcMXRfveFyjjM8v0BENn+cBiRd5qO9M9xkqZPBxTedQJuxjmgW+Wm5WntDT4N+zAsZ6O179m3kyN334RoZ/0JGf6pn/2Edx0s/k+5w= 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 1783724503206237.8005931776869; Fri, 10 Jul 2026 16:01:43 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wiKDq-0004HP-ES; Fri, 10 Jul 2026 19:01:30 -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 1wiKDj-0004GM-1q for qemu-devel@nongnu.org; Fri, 10 Jul 2026 19:01:23 -0400 Received: from mail-pj1-x1034.google.com ([2607:f8b0:4864:20::1034]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wiKDh-000318-5o for qemu-devel@nongnu.org; Fri, 10 Jul 2026 19:01:22 -0400 Received: by mail-pj1-x1034.google.com with SMTP id 98e67ed59e1d1-38125cebfdaso2023618a91.1 for ; Fri, 10 Jul 2026 16:01:20 -0700 (PDT) Received: from stoup.. ([71.212.146.49]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-38a55b3c9eesm3426569a91.11.2026.07.10.16.01.19 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 10 Jul 2026 16:01:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1783724480; x=1784329280; 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:content-type; bh=yECRl5tw1xQRderX2DaWbpchyapuyXnai4wOZcSvlYo=; b=F7fDOv2gfx0am9XV3az1zTt61J4NR+6non/dqltE0oSDcwLp0T6H7OZsSKghHRVFLX TbSrReqTgsqw6P9it0EouzUhfo8ehXkPx2CcZrqhG8/36srMF4tNarud4PHyhSGYMOin NmVmtcH0/SA5YeU+YJpVMGs800Y5RZvO3R/k+4aC8BmfI429onIb5kfLaHW2xENkZy6g l9y4CRCr5J9hYGm9ORr10HBhpH/nxvJXM+jCv8vvcv6r4AzyD2/smrtCkVzEmrn8CO1a ROeYu/4SpAYF+MBB5xoyBdgiRBTc7rw5JAG8zXZFApki8TNOBa/nW0rdQhTsY1HsbcVL 5mJg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1783724480; x=1784329280; 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:content-type; bh=yECRl5tw1xQRderX2DaWbpchyapuyXnai4wOZcSvlYo=; b=rhh+KDukvsVEHTEgJtwGOO7uw1c16z++g7KjR/oTqeuf9VEkmzFcM4Ye2s2Sy+pQpu 3OojnO0Evre2lbM+qGQ1yulsWqpYm8I785dUSxCre2XDcFnkF5q1ULi00T+z9bsvw9O2 FMIYEIhJJtaQvxCADF4f438b+P7L8U/feu3v+EHfMQ0LwXuQEL58gI4brsuPt2s4BOk9 Aly7+gyDCEFEBsZM8rjn3yH7XwPARdOMs9CNgkOKq1zMIJynAF/nKrS2ZFlmJWA13he1 QUIlmjD5BVy01i+xkYp5sQOHvgMZrYjLtsoFOExf1UJnUlccgA0jrC76ce/yY2ciYcuM 3cng== X-Gm-Message-State: AOJu0Yw4iGjqxIlMH6wIRwvNAYJrbTehqduD9z6FKxIigUIB2RYRDE2e YJU+X2Y8nyZ5/59L4Kf1s3Wblkqs1LJlujlS5wycz2bX7gTFZazrnui6lFSpSRCradMt3ocFTkB tLyYJ X-Gm-Gg: AfdE7ckjVRjnyLbM2dGoFkxz9n2OEcXijg5XROZIUUYDINaqzJxfqeXnEtb0Ju0x7g7 1RsSGMT33twNbcCwrCcIFER/1jUpwUbe5jJlpfbva0x2s8Ay0pXo7pP4qu7wboynz8KxSnpMIN8 PFkCVPZV6RcNK7AILZFBdascVa/7TIjhOhOmMF4GkE7t65wCMOdZHl8gH2nRL6XesBv7EPko9i/ tPKYZEikzyB8lYN02s5YqY644vD99RWrThMQ/iDyb3+n666f9UNMdnqUsz5DlA1lOm/Wg9a9vkm IQmz7HfBd9jsScRuc7++D4o4RwifSgv56LD1/GBFZIQSx/OYnsVUbxCt8IFgvsK3U+FisC8j9eT Cr3KGyen0uUlMwK7PKrJyfK7DCh8mQOcfPZVGyxDc5yvUqvQY9g/vWoxwISVBfdr0DyzPfoi/zO BLzfHT3T2lpK9Lpmo6qDOHoz/LzGeM X-Received: by 2002:a17:90b:510f:b0:387:e0db:3faf with SMTP id 98e67ed59e1d1-38dc7793df1mr785340a91.40.1783724479569; Fri, 10 Jul 2026 16:01:19 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: Warner Losh , Helge Deller Subject: [PULL 03/13] linux-user: Drop hiaddr out-of-range check in probe_guest_base Date: Fri, 10 Jul 2026 16:01:06 -0700 Message-ID: <20260710230116.900171-4-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260710230116.900171-1-richard.henderson@linaro.org> References: <20260710230116.900171-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::1034; envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x1034.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: 1783724505273158500 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 30d7beb562..1367657d58 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 12 00:42:43 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=1783724554; cv=none; d=zohomail.com; s=zohoarc; b=inRrBqUdzV3WX0PbQF7wevNOGEALZNUDWJGQ6Wh1LmpupGupE552Ni1IDDRlNJ8F0vp9FENc0qarwCYn4WFRWp8SrcpTKaFzbVyxYCoXIA8G/vZqX7IQdF0FdN3xlr1wcApQ14V4bJ6sl8CKcQURm5hnxpdv62rNqeWiNMsC+88= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1783724554; 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=1fVycIgCYdKMeVMFCV1hVxJmqdm+sxkiY+un83hRjyQ=; b=OKMk3I0Pqs5S184zwQIp24qTXG3Ocx+JDaPbYcfOZ8yLOfDOqZS7KvzPoXGFr7BUsugdpwviJIOhXRk9PsMKG1h6IaoDAT/jCo2aMQKc3B6Wp8dt9L9OtnwmECjerbhzjJAVDhuferbT2b6n2QQLsXyarMz3pA4gvxFu5/JHH3A= 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 1783724554466517.2101848469144; Fri, 10 Jul 2026 16:02:34 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wiKDs-0004Ij-JV; Fri, 10 Jul 2026 19:01:32 -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 1wiKDl-0004Gk-SS for qemu-devel@nongnu.org; Fri, 10 Jul 2026 19:01:27 -0400 Received: from mail-pj1-x102c.google.com ([2607:f8b0:4864:20::102c]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wiKDi-00031G-4Z for qemu-devel@nongnu.org; Fri, 10 Jul 2026 19:01:24 -0400 Received: by mail-pj1-x102c.google.com with SMTP id 98e67ed59e1d1-385ea3ce80dso1714310a91.2 for ; Fri, 10 Jul 2026 16:01:21 -0700 (PDT) Received: from stoup.. ([71.212.146.49]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-38a55b3c9eesm3426569a91.11.2026.07.10.16.01.19 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 10 Jul 2026 16:01:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1783724480; x=1784329280; darn=nongnu.org; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to:content-type; bh=1fVycIgCYdKMeVMFCV1hVxJmqdm+sxkiY+un83hRjyQ=; b=Qf/1P4Tmiva3910jGrQ0KtF1LwCOoaFTW9GTDFyO1I6yBurmKjaIExpJm6ScN74wEk CsvX0Fz3O4laleZYxL5WrAs5GuDKtIWZtKHpTIR6oQhCdpBA7BwXs5/lAC37gn4IfmWR nvtBrJX5IEnmtJePeFzc0nAirylUHC6uWgUIAJ44CPx0REBX5GmkYhgVxjfM8UV+jy75 SJtWtFCFtbDgZZfzo6++30A+6RXAkjhClv0NtEbQg0SkZOcMfoS+6nXfD+4TFUtcG45p AEvc9KMCcCMyE/pT5BZ3GyRFMNNcnUpXaC6sls/b6+FpViM1A4wU5lD0rsWZjgICK6X8 UKXA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1783724480; x=1784329280; h=content-transfer-encoding:content-type: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 :content-type; bh=1fVycIgCYdKMeVMFCV1hVxJmqdm+sxkiY+un83hRjyQ=; b=MgrnlPERPsdlmSNqZTAQ/GznydbqAIM86ya2OufhgTUEn8DTCvRSA+mhV2lR0LexdQ 0Y93xK7me0EluqkTJkJi0OdCGZLu3hc2PlEAM+aOO5Me/aZB73Tx5xk2GuuX9kwtuffP vys3fiYfqhADLVElydejjCGPD3Q7HyfINrZ1G5EluWUhI/gsq/ayLMcZgTe74sVE7MXJ jdn5Kh8NZ39H15Nc/4z/Q1UfWoCxEEH4jYN5KPhQQeYqxRYUazGBepTFtko0DxxgEft1 6C3TrLKth7hsOx3iKAAHjvYgS/ul1xr94QVA5+/MY3F9MPek71qnOabYEhcQhGCeExgs JVrw== X-Gm-Message-State: AOJu0Yz3LkBRqUfqiOoluhuuWzByHfOxHXLWcdr8W4VaWpWlTE3tivXk bhHik0tyuqZv5U6xT3XCbn7VH5oixqwLZ3Rc94ofcKPNClm3T6Iq1Eqshfof5/u0xlUZBO35NDx XeqOP X-Gm-Gg: AfdE7ckcPUsOaqZfG9OrZmSie6wAWMVHH4DjxHNvoBhPQYY69te1iZaPIH2BYWTxtar qQLlWeWx08wSGn9XkMhbwQ0dRb509vcLErfnAXhX6cQnyaHpdJcIRpsFv+gFKoDES9MqdEAQzzf sIeaKcBtQQYvX6Jx2SQy0lXyaEWlY15QrrCmaTZErK74YS/WlEkFTcp4Rz+OXtVLZOV+eULyXmN 5ssVvRY3YTTwhqgSqngQa8hKqAmYJ3BpFsRhErBe7D5lambfYsgHeFxUioVgnGhW16CoE+O8Wvn 2yktvt0fbduLQXB7Np6zi9wZ5NNARMoju0F1kXnxXI3Z2lQaijsvf6c2Hak5T/AadrZOEQB+RUL +H+QHZFlj5rr9OpeBWxeCXE7iGhVmhBAHcVr0SQQuaQydOpyxc6rT/PmsVAacQNzM4n4p0KuDpp KAhgNL/W3rEqMnI3MTHw== X-Received: by 2002:a17:90b:4a90:b0:380:9504:9780 with SMTP id 98e67ed59e1d1-38dc780f769mr802624a91.29.1783724480297; Fri, 10 Jul 2026 16:01:20 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: Helge Deller , Warner Losh , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= Subject: [PULL 04/13] linux-user: Pass image_range to probe_guest_base Date: Fri, 10 Jul 2026 16:01:07 -0700 Message-ID: <20260710230116.900171-5-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260710230116.900171-1-richard.henderson@linaro.org> References: <20260710230116.900171-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::102c; envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x102c.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: 1783724555572158500 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 1367657d58..19d2bad581 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 12 00:42:43 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=1783724593; cv=none; d=zohomail.com; s=zohoarc; b=aoMPOZ+i6otCz5i+/sHo2serbFBP6KhO8RV/3TTkefy5BLfi+RjEaga/cytA9azoRkGoUu5hdH3lPt2M+9wrmaGhWll45fKwftGISGllKzWf1db21/xQw6fkljUQmqJwguLpwKZqHx5nICgHUIMd3pf+VdT7r5WcKlfsmx7zdfA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1783724593; 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=iMmGtXArXD5wJPTCUg8MlX7wVAnWOwS1dPzc7EU4sSg=; b=ExGzW6Mzq5YzNEBON3gs/Sp7c87Jw/CGHGPS/y7TiYcRlPeVAQUy5pmH5235HQHaDoq5q2EyYe+PiTFE4ENmff1MiPHzy3vWEPeflLE3xsyEWuDWddISYpwZqH92FDim+bv4VWKw4fMn/OJ/6uwPyq6l2UpSciVZLDroNOUC87Q= 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 1783724593679363.2119387731566; Fri, 10 Jul 2026 16:03:13 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wiKE5-0004MS-49; Fri, 10 Jul 2026 19:01:45 -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 1wiKDl-0004Gm-Sh for qemu-devel@nongnu.org; Fri, 10 Jul 2026 19:01:27 -0400 Received: from mail-pj1-x1034.google.com ([2607:f8b0:4864:20::1034]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wiKDi-00031Z-L3 for qemu-devel@nongnu.org; Fri, 10 Jul 2026 19:01:24 -0400 Received: by mail-pj1-x1034.google.com with SMTP id 98e67ed59e1d1-3817f800c8bso1305500a91.1 for ; Fri, 10 Jul 2026 16:01:22 -0700 (PDT) Received: from stoup.. ([71.212.146.49]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-38a55b3c9eesm3426569a91.11.2026.07.10.16.01.20 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 10 Jul 2026 16:01:20 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1783724481; x=1784329281; darn=nongnu.org; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to:content-type; bh=iMmGtXArXD5wJPTCUg8MlX7wVAnWOwS1dPzc7EU4sSg=; b=IdSU1aT+6HPWYx6mZIFLV7HvNdPDiM4czyIKlz6dpdLpgzxEcxJSQkBzUyNO5iDTyO 35F42SkBtBpjHUvM/qxknLAzHSHqWGD6Q4v/TJlsxm1PCW7SekEp+31N1Q7ldMvtRTG1 9AtFWfIXIOPQk1fSDaj9ZlceokODamBuj7en7uu5h2RbjJ8lzUfTcMu5dobpasTnrgbJ v1iQW7CMfm6kssThhA/7g2DqHsHk1B/3Y/QUO4zDP5SH3JOb/4QX7KC/GKvTqDM0nTRu BWtL2oouuYbO0QxIWwv4gSz3roOlO3LJtr8vuA1WO7UgJeERjrtU9MDmqdgpVrSLODaL eCpg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1783724481; x=1784329281; h=content-transfer-encoding:content-type: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 :content-type; bh=iMmGtXArXD5wJPTCUg8MlX7wVAnWOwS1dPzc7EU4sSg=; b=PP+6zo6/dcx0p1CdEvNuvanLLqcTkB9KhVb6E5K8I82gMePV31NyMPkPc57pyGlaxK h5Z/dAwRGmxh318yWEiocJI1TNTlzjbz2/V81Ndy9sbGwjM8S/QBd2zY87YJL8LAD6Ae 3YomuZfcn/C0cAHb1CK1dDso63nFAx0qNhZzW87nl5WEOe6iz9oK6FxJO3nTTLCp0jBb aUCBnbQxnCKR6OIyok1y36XFfoc69rRdj7Fvvy7DqOZUdtdAhbGbl+bfrFupdhbRetry /jf/kyGk9KXdqmDeXXipT7JW5zSvprTKZLVKVfCecA3EnOd2c88nmr/lgB/m/vSoahaU Dm1g== X-Gm-Message-State: AOJu0Yy+CdT5nyr//iEZIRx8g1xW0PcJjUnOm/NtXRgIO0ajzCZA7VaU x7IJDHhWuxZGm8UD1X60q5rEoJqhaDieSxEjlC/HxNAjf2MghGzwscJts92zMTvpjVwtpnx6Ecj Ot4jT X-Gm-Gg: AfdE7cmXz8116c8kMJsx9IPTqf20njoVeafBdHW2LQQm08JS8ey2Yj3z31nAeuU0k4i 0b0dcExV/YbGLgKw4RZpexW0xT77IYaOV1OfJgO4ObJ15A45VbHHLQfbikhUsed/Vb3aGurECPA 2+q2UwR+XJLR9u/dcYHx5ftpICjUtrSnHiDUnjvxODCVswW6wXmQ7riQcyyPN7WcCqtoi3kxB4L HuDslKg6KAsNezUlJV5tNUPuxsJKXywvIztGRPURq5PlX2gjCNQFRYaEX5bxtsBy0IUuBrLp0/W ZCEOBXVQGxIuLuY0nk93GEAChVjlNpVhpu+i/02VCJ4sHC7ECwn0PHJLMUfz0YSyIpeiofrDvvf tqcUhxsCx4N5KBD8EEHFbzg+Ho253Re2DS39QTKWnOZbs9OZtriKSlafrHjQZiBLiYEI/9vSWTs ipkDLdfjHg0UEZ0CJJzw== X-Received: by 2002:a17:90b:562e:b0:37c:6910:5758 with SMTP id 98e67ed59e1d1-38dc761b1f9mr763280a91.1.1783724481052; Fri, 10 Jul 2026 16:01:21 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: Warner Losh , Helge Deller , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= Subject: [PULL 05/13] linux-user: Use PGBRange for commpage Date: Fri, 10 Jul 2026 16:01:08 -0700 Message-ID: <20260710230116.900171-6-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260710230116.900171-1-richard.henderson@linaro.org> References: <20260710230116.900171-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::1034; envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x1034.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: 1783724595749158500 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 13b589ea2c..ce69bf0542 100644 --- a/linux-user/arm/elfload.c +++ b/linux-user/arm/elfload.c @@ -220,7 +220,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 19d2bad581..557ed20dbf 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 2ebb9924f1..ff4301b2ed 100644 --- a/linux-user/hppa/elfload.c +++ b/linux-user/hppa/elfload.c @@ -36,7 +36,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) { @@ -55,7 +55,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 12 00:42:43 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=1783724509; cv=none; d=zohomail.com; s=zohoarc; b=CHeqjIspZZl4pVpDOOwFl4o5qhp+GDnls9jkM2whi2HuRadIcN+M1Y7KE5w5pCP4oKuJdT39wweu05fNTwOoZEDn3Fz1RLA8Lx3ooVKhoRZjqWiIOlpBhW22OEnLlUCRbjqsJAsvpJ00CJcPYsloMgZwYk0BS2m03I3Imij4smo= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1783724509; 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=An0Hew6anXjtr7zEaggk+fBoW8/v1uVH58j+qrBJ1ew=; b=XkIMCJL94fIwwuyw1yEUR70nPf3pjNQkM/0kCmIzwsdZlA1uRJBUycwoYB9GyI21jREmILJIronj6FF82YEOPzQdTXBiDFqvPae5bz6KmcUPN37iW+A+YNIegaLeGOjoSCnAoBo/Air7wv83S6q1aFJCY3nPqITW99X1NXzP4bc= 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 1783724509239845.1749234041425; Fri, 10 Jul 2026 16:01:49 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wiKDr-0004Ih-QR; Fri, 10 Jul 2026 19:01:32 -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 1wiKDl-0004Gn-TG for qemu-devel@nongnu.org; Fri, 10 Jul 2026 19:01:27 -0400 Received: from mail-pj1-x102c.google.com ([2607:f8b0:4864:20::102c]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wiKDj-00031l-J8 for qemu-devel@nongnu.org; Fri, 10 Jul 2026 19:01:25 -0400 Received: by mail-pj1-x102c.google.com with SMTP id 98e67ed59e1d1-36b9d265355so1248544a91.2 for ; Fri, 10 Jul 2026 16:01:23 -0700 (PDT) Received: from stoup.. ([71.212.146.49]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-38a55b3c9eesm3426569a91.11.2026.07.10.16.01.21 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 10 Jul 2026 16:01:21 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1783724482; x=1784329282; 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:content-type; bh=An0Hew6anXjtr7zEaggk+fBoW8/v1uVH58j+qrBJ1ew=; b=Z4YcayZPtT+HTxfsFH1shscFAlZ6RWhNzgKqwtGRkVDc1Ph8Dn6uLnkGvWEp1uCxR0 0APvLb+H4hXhyz1NjEBqYdYkaVpfxmstIR9AsxSYhA/FiWfwZJ4TDmsucLPojhjNy+wH /iteic8/zgmVWtx2XE7lTAam/7weg5SgHskloTB5PsSFncNxah4lfhevVRxFdyZoZdnu dpm5/S8ZRul4Wm/Yjy9HLh9kvfbg2RHBe6y7/Ajne8DtG0d0T6vG6NXPSFud3BPIA01u FWpWbTUq0WdpRTIt7CJHYCP58emR82F4rLtZNcLuXJnenY/baMXaB5Ygn9WljwnPZtFE y4oA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1783724482; x=1784329282; 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:content-type; bh=An0Hew6anXjtr7zEaggk+fBoW8/v1uVH58j+qrBJ1ew=; b=Z7BcTiirdTI6sQIbeqDFfro+8mqx/2gUzgRK++iI+RY15k7mxywgg1+xc+cWoNSUdT +pCf8U0Jb5oX7VAniEcVhY5HVarFVnxIGwhNRtgB8hAeOaFdndFKbpH+K7+jOHKZfBOX UnTENAd1A7LWaZZhMsk0kcfquLjOyTDiY/qZK5lQbcYG8BZibVjAZc2YcRkS76DrkHII zidBJvmRmjc7hAZr9JHQIoHXSJ9iJtPzTKGAaVeUklQRGBBRzdT8CdpY4h6PW0zthgV9 4tuK8D8/cdSUiuwg3A51t8IB5mXLKOj8V5fKyfOiQNi+xoUFANM0HWwXlhfPMoDxQLeI OkCg== X-Gm-Message-State: AOJu0YyaZl1UJD7tQTGUeTkA0brhwbD+cMhHGFZclZTicPoKdLi7Ybb/ AbFscWQqWP9ifk1vQJmfFeCYj1S3VRs3mJYLX5G+EtV+4YTmpwebxskEbsr/MOavEJBodRZhONT GGXLP X-Gm-Gg: AfdE7clueDREdBXV514J+3lKGeDAnmmDBRvDFwar3l7CVmElsM9EGIpCFLmNJNpna1I /5JYbmFgaZXC4oFzTwIr4QTYOxpnjbq2mCGI2auY/sNxmhNJ6Y73YAF4c6MxsI3X9/ebxl28O/n zPhcU4I+CY7BouqQTDkfflp/yFKelDWyf3DA1SW7TcxJpqvaKqZ+z1oZkWTRaO803nZDNHz2bpb xMSroCxaPNkwhKoZwmGuLSJgD8g4UVslysK0d1iNOoo6no/xdL53V2vpzMqaDR8WVZoMMIHH1Lt LLLhB8kTiwbSVfZ7vXEkCiO0sX6J6NUWRQnkW6b0pWU9pFoX78iszJzflrc9hsDY3K3LVAajUVs hNikwYmdv8cv2Cd9zaBQ4+ZV/bX82kgaQFR0VB8DesTAc6C8hBTT4U/DSxb9L546xhzRp6Stqm+ AIlZ8rsIpF29kUNJmEkQ== X-Received: by 2002:a17:90b:1a91:b0:387:e0db:bc27 with SMTP id 98e67ed59e1d1-38dc77c65cbmr784734a91.39.1783724481931; Fri, 10 Jul 2026 16:01:21 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: Helge Deller , Warner Losh Subject: [PULL 06/13] common-user: Move mmap_min_addr from linux-user Date: Fri, 10 Jul 2026 16:01:09 -0700 Message-ID: <20260710230116.900171-7-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260710230116.900171-1-richard.henderson@linaro.org> References: <20260710230116.900171-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::102c; envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x102c.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: 1783724511395158500 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 557ed20dbf..0671aba537 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 12 00:42:43 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=1783724592; cv=none; d=zohomail.com; s=zohoarc; b=Jeml/p2l2I7KATd5CO9a/ivoTJ5MuyJSsgOVuvO+edEEp+qnDkXTXOgrHTDTM3kb0fd11WDJkmtgMk9SBDJu511VWlr12zZEecJqnAPn95eh5xnyBveS+Z+YsucTCWt7bJG4NhGIMXoDgl6s/gwLMV6fg6p0/KuozSeAdqGijSw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1783724592; 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=SDg2PsfpTcsMsc2r9ZeVXMBir/8R9X5b9N0fTQdLES86d119hWFsnXuygzWKDlZClngr4POjH1GFJ3SlPO3p3B6G+hFvQdoD9X00xDU9mQxSeWDo/4ZLzM4i8ekBC1Mb2CcM3zjTcbugnn4IONTGTTk65LSmf0ys4GzmUFNXtpI= 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 1783724592171748.9027039775144; Fri, 10 Jul 2026 16:03:12 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wiKE5-0004NI-DS; Fri, 10 Jul 2026 19:01:45 -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 1wiKDn-0004HN-JF for qemu-devel@nongnu.org; Fri, 10 Jul 2026 19:01:29 -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 1wiKDl-00031y-GD for qemu-devel@nongnu.org; Fri, 10 Jul 2026 19:01:26 -0400 Received: by mail-pj1-x102e.google.com with SMTP id 98e67ed59e1d1-381891a9525so1792919a91.3 for ; Fri, 10 Jul 2026 16:01:24 -0700 (PDT) Received: from stoup.. ([71.212.146.49]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-38a55b3c9eesm3426569a91.11.2026.07.10.16.01.22 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 10 Jul 2026 16:01:22 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1783724483; x=1784329283; 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:content-type; bh=mXnvKcZP9AChKOwVNmnhtyA36iu2kjvikfZ1oQO3isc=; b=kvB4FTkPb85etVRABGcWso2krC/PUFQ1vPut0zZcVS8OkCDrN7aj12VgayM4Mgqjf4 4Bu8iCRY7w4UBuIV4TNj4EouXXlxWfC+2ADln6uPd/uTbHlFK8+UanrGLeLIJ0sTOuJf 7f8nj6EA7j1UqxenkZigbBmp3Z3k18TlFH7ftiz+Fthh97s6BBXIvcCBVwC1fJugXOGq 7fl0UICNAq+JlabNKFANjoSBrTt732hRwHeJ71MXbeP63Es6If/idOxbm3gmoD70XAKh c4aNEUViambo/W/TLO0tbz8Ea2H3CJhd2zLDYynWsCr+eHEeXTYOM5X8F9tjkiRkIR1A 09jA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1783724483; x=1784329283; 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:content-type; bh=mXnvKcZP9AChKOwVNmnhtyA36iu2kjvikfZ1oQO3isc=; b=sLcSK+UoP+swcK+viBIR/2/LYBBRmVbItgwl81qfut4TRRngJRC9WGB2OwcNde+XMz indNamPEDvZOuUmR9etYlWdus3Jw01mKpnxBWkSsMw0yv9KCxuU1JiLZPPylVzDd4Vo2 cIe9evvFifPNd1jjP4pPmwAD9CyVE3uA/DsD1+WlL2JRfphMc0oRzRpKPJwq+QaF0Bl5 rYXSQkHOpnQ+NnjjaZDZzhC4Dc1/RXINeeJpIVNCqY8cZH3/HBWGI6/1SuPHGCWH9woh KiP8ygfj0hJRDxLA9CG1BOSLS4ggHsPP7Cb0hc2xIMmwf5DEpxCkSAM4d+ksebddMI9W 5TeA== X-Gm-Message-State: AOJu0YxP7abcqPGHzxbmXO90jz911Q0qMq/vLik5EoEe8JPb9DrDewEv gMjjx41q5uCt1pngZuDuJE26y3K0+PKjnvAmeZa4JDwPuJDw5Gon1o+UELRQAMJ96Xirlptn8bc gvXaB X-Gm-Gg: AfdE7cmvlzerwwiRw4Bt2Pd7EpzFBlSSmLP0G2MbCTOObT07G9h4uXeZayBWakkQrSk GJ2/8OslQtCG1aBJJESYDXORa1n872ieM420AD3texSSU5UvrHjpNKwEsul3QVYVQKYqIFnHDE7 M7ZLaChuT58uNrkOuwVnwzpV4X8nnfWgwzpwzcZbG08Wv197Kbc/mP2fpaZMI1nNpXBFvM9MIdL ve9gfaL2hJGgE0ntLIBxIM5MSpt40CO76ezIKeAru5nUCA3BncW6es3QH4La+nI0jhaf0ab+ymW 7W1PJrJPWyEpC6MGyp5Nvd65oNCQsi1SG5nRWWzFD6v8rLWpd9wHSAMMl5PN9KvdqRznkhru1/+ k5TWqHwI8TEuEH46cdWqM7yaORGBlfd7uM8XhrdPpid5oszgme6V64xMF+SVd2HNW/xACMbJc2f 9x9DgxyfVBwCHJ1gvq+g== X-Received: by 2002:a17:90b:4c49:b0:381:270c:4dd1 with SMTP id 98e67ed59e1d1-38dc774d270mr753533a91.20.1783724482976; Fri, 10 Jul 2026 16:01:22 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: Helge Deller , Warner Losh Subject: [PULL 07/13] common-user: Initialize mmap_min_addr for FreeBSD Date: Fri, 10 Jul 2026 16:01:10 -0700 Message-ID: <20260710230116.900171-8-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260710230116.900171-1-richard.henderson@linaro.org> References: <20260710230116.900171-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: 1783724593615158500 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 12 00:42:43 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=1783724569; cv=none; d=zohomail.com; s=zohoarc; b=WWH/r/C2pCG6/9SyUMCq9m0lR2hedAz+gxOV1tnxEZ9he4flrRMxGiO2+2Hyo+Ddd5g/Mlz6uFEHgr62tRkyP9gadfn8Oj7gQKhKRbjZ7OUeL6dxkKe6B+tC4fPbCVX/yMYobKlfHKmnaxtjmELAwcurbougQZTiskKzQta1rZQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1783724569; 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=a8mVcocY67mMS1B1hCLcTq3Rbu4LjoaGRroua8462tB3s6uF780NLOdKIwAiNyA5rBZhQVExvBx/QwE31Jl0X01XohKP1eR38qU96O2SdO8gP8HOH21ax/iEr3rLnR6br1sTSzU5xYKaCFyGTChDE5qPfSnWINePwLJExSTEnKE= 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 17837245698818.634820035636949; Fri, 10 Jul 2026 16:02:49 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wiKE2-0004Io-8V; Fri, 10 Jul 2026 19:01:42 -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 1wiKDn-0004HO-J9 for qemu-devel@nongnu.org; Fri, 10 Jul 2026 19:01:29 -0400 Received: from mail-pj1-x1032.google.com ([2607:f8b0:4864:20::1032]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wiKDl-000325-IB for qemu-devel@nongnu.org; Fri, 10 Jul 2026 19:01:26 -0400 Received: by mail-pj1-x1032.google.com with SMTP id 98e67ed59e1d1-382ef647e20so1545860a91.1 for ; Fri, 10 Jul 2026 16:01:24 -0700 (PDT) Received: from stoup.. ([71.212.146.49]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-38a55b3c9eesm3426569a91.11.2026.07.10.16.01.23 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 10 Jul 2026 16:01:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1783724484; x=1784329284; darn=nongnu.org; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to:content-type; bh=tmlZevgFhXIJJdsn/GrE/B6w1KsZRwMA3LkvTnWXOzc=; b=x82bXm78jCtDGgUp2zvNUrs1mavV+rCj+aeMAqY8JVCXxdDfI1jeMZwILxg62UHeCV t/kf5uw/0rrlytqNOuQRUJKGDmlrKV2Imtsb9mWIQYQl6d7MrQ0H6v1prZK9jrOgL6xf KgZdS/CjYtZgjxSKFRWT7N3/toN+tfobH/BazJ0n1SN3dpnAplQCmYF7MDq8mvsD9lu6 LQ4XLaHmBJ/TfT8F8sJn4G5St9LekF3LifC1i2qypnaE4n/RF2rCF8BHL18uWZvXO3xJ nI6I/R6HGP0Y2dLDDF49X/V0Gm24drLz3qFBvDfh2y30MXC3/O14XTS0SqOSbRb6ytE3 IZww== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1783724484; x=1784329284; h=content-transfer-encoding:content-type: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 :content-type; bh=tmlZevgFhXIJJdsn/GrE/B6w1KsZRwMA3LkvTnWXOzc=; b=NlNcGhpa7a1U388RLz7a7VvIczuC7xAdbfunzOAFMa73NGX74u78gUwMFV0bNcZua3 kK9wZJvh4wgwWKCJzkNIifQKMcb4JGhLu4HcEmKRb75Worx5Q6DIbJERwqaviLo0FD9O sLO6gXBh82PjroXJkANidui6J90fHH41Xc85W2xPJIed/vDKEFpKTT/5EAxAD2fsEqyq 56ZtP5gREv2y+NMbE/VQTwHutmnvDw7s2LZcXWHADFISYctpJ5YRG7hB+bYO5K+aREzE e8phhoN9xiUTgT/PL1JHakYU20+ndoEVAIoEIn6av7tBZehLbmC/TgNbwdVoNf4tsWA4 pcIg== X-Gm-Message-State: AOJu0YyJcn4PdL3IkoZz/up7EszCQhAU8GO2FlBnSQnQDEhlvlpE/QQB S4eGv4JHU6tAgB8pKlM8C3KyuDK9CE+zOSWo5zsrPhlluq5wzFbSr1C2qgnbjuJPM6wZAPoYiVi Pg3X4 X-Gm-Gg: AfdE7ckcOMS5rnNDaFP0Fzk5oabRGAqHtkuxFhjkga2TKEqdcn45P9WrDNuWjtgQZ9u vqE7XV4YFVPvNvsLetsJyXnzSR+IcIOMc1JbOR2TuyvlztBZ0VgyoPBDEnpZUtKNkIRqiB30R60 Ydp3O0KOSXE2VYy/TOu7YKRtuEQGvRNAyBXMH9v13iD9jfQhUzNK3bd4M5yiIhMNzciDijhku0W qEjFPBpQsN9xiNKumkAomRu20+Ad0SxHs8QdY81BQZqg9ZKElXDcq7hdq61pxpabrrTAybk8Av+ OAYlOkkVY8wqu4Gu6H2qeBiNJtrxyNxIPsy/UVObseFZWAjj6THRLZC8OBm4hh6Hqxv/stk33uG hRqDs/Hiw5AVhdyG9K5wtra/g8bqYT/YZePUQ+0EsS2GRrRVWP1KMVdYfYJs6p7eJ7wZguLUIwk CFJeLa5T0HslNBBHbYjQ== X-Received: by 2002:a17:90b:2242:b0:381:85c0:1d9d with SMTP id 98e67ed59e1d1-38dc777b8b5mr784324a91.27.1783724483754; Fri, 10 Jul 2026 16:01:23 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: Helge Deller , Warner Losh , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= Subject: [PULL 08/13] include/user/guest-host: Include missing cpu.h Date: Fri, 10 Jul 2026 16:01:11 -0700 Message-ID: <20260710230116.900171-9-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260710230116.900171-1-richard.henderson@linaro.org> References: <20260710230116.900171-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::1032; envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x1032.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: 1783724572990158500 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 12 00:42:43 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=1783724595; cv=none; d=zohomail.com; s=zohoarc; b=HNHpk24ClH8muhFh7iDeyIKLBMoKme656MRnhAWOe+eMxzmsdPcOfB01dok0od4ZORZZqsqILRnCyLT/LflFqqpBE+SuMsDZKvA6Hxrk0VsiR3nUDtMTEUFTFt0ObYIgomjwElFpaE/1wRURwlw+Dw3l54Wy+PXrEqXwbXxbW6s= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1783724595; 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=lXV/3VxX18wIW2SLNnjXt115rvibP+YsYCiK3fOT3AI=; b=k+4pUzIrdDrW+UhDYkKl8Ca7kqb18KoMjzAiGpKhqrpc5G2iLTGj8+wnjFoVp5paPUFYgHk1yEfdb79iHbTQiIp0RrahmI5P1Tm/9sgdVzJOSp9udwiIcnr8K/7xEd3yIiPceLBJUI5pjThq6yh8SpJVWqMxYScBp/saEYo8u/8= 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 1783724595643366.27980820062396; Fri, 10 Jul 2026 16:03:15 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wiKE5-0004NG-Ds; Fri, 10 Jul 2026 19:01:45 -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 1wiKDp-0004HU-3g for qemu-devel@nongnu.org; Fri, 10 Jul 2026 19:01:29 -0400 Received: from mail-pj1-x102a.google.com ([2607:f8b0:4864:20::102a]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wiKDn-00032D-BQ for qemu-devel@nongnu.org; Fri, 10 Jul 2026 19:01:28 -0400 Received: by mail-pj1-x102a.google.com with SMTP id 98e67ed59e1d1-384c94c9414so1481031a91.3 for ; Fri, 10 Jul 2026 16:01:25 -0700 (PDT) Received: from stoup.. ([71.212.146.49]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-38a55b3c9eesm3426569a91.11.2026.07.10.16.01.24 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 10 Jul 2026 16:01:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1783724485; x=1784329285; darn=nongnu.org; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to:content-type; bh=lXV/3VxX18wIW2SLNnjXt115rvibP+YsYCiK3fOT3AI=; b=kY7GIjGb79dLDA2y1uZNJHBvuuQ39sNgS082iNP0uhA0JyV9NZZc+gfX0SwmXr5TWZ VcOlgTMNp5dl1MHJQtl386WKEvsuQBNA3dbB/zw1CUGwdEXGQfT/SgM2ZJZaxhndsGhr boywDyJVBPlTHB3kf9oXWxE/xqHctTI0Gv/xiqL5Ti7NAPQ3pudP4jcFn6J80DHk86Eh f0xut/rW4/PAW+KZR35j6O03r8pa0rxrFwGqlvMyHlU3b6cYdaNUXLUOH60qZCJGV8ZX 4N+0RRlAqBSux2fs3vk5Lu+Pj4F+JM8luAZ5JUHA/yRo/NPwoYX/ZmLhWTEuMTljeRk4 ZlYA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1783724485; x=1784329285; h=content-transfer-encoding:content-type: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 :content-type; bh=lXV/3VxX18wIW2SLNnjXt115rvibP+YsYCiK3fOT3AI=; b=Evl4SmEQcdk/bhe3bwBkhYfkuFQfT+Yie99i2agsy/BjfNGO/wpCpe77l0CFK1Oz0w M5uB1upykvQ+4KkmvtVxxImGJuN7on3DH2L/W/sE5j9UPT/GEax6FYzzGA+/lCPVzedy eKco9bMi66gz847fR3MbJQvOUmXslCo6ZsTmKZ+NEwNZjHLzRihhFKA758pZKIr1mv1K yRs/wMgUmjnTeEAByi3uhvKK9Jq0zWEC/Nf+oF90EzDCeuhPbrYoRBOrX49picQ67PQO omeySV7j0JG0SfO/qluxPTtLZhiYG2DHAdR4BdFPxRO+UopBCaC1bv0MQ1GjZaaSnUuu gSVA== X-Gm-Message-State: AOJu0YzZX4XrsSMtGBijeJ86YcMTp+iLwELlEagNWT4r7f023y/7LXAE qK2Uczkpzk+nVvXF09CPXd3LnwpgpMO5FA1+MUlwuVjNL5wYU91j5Fc69KMhUoAuEZGEFPAP47C MMv/L X-Gm-Gg: AfdE7cneEYkgF382AQbzM2hcEd3q6XUMnDcC5ZMprW3fEdsFi0IbVSc2EYUhjDHyxiI 18V2U6ld6Kdhvwbn6/8tksm2e/BSjM0oPUAblN0knW0K9W7RdyqAvuroZ7d2wvsyzgM/64878ET jOd/XPgAKuMQuBxzjiBFDH0DWAMAqbjT4Mx71XE1tnvMs5jOVkxv+TZCdvFI411OdErZWbWiZlI Z80FL4JBIZ903n+gv6v+hE3Zzr2NKppPVXZt1xQvGGwy905llN/o8gYa5/7Hkggn0tNTBS5+Gyl 6EUIBTq/wTB5uU7iw3L9b7KIFYcefLFIQooQKzDHBFPqi9UZt0vPUPTCe17HDA2y0TnnL7C0q9I di553z6WZd97SFbcg2Vdr5tCxhMGW1QMNLP/wu+nanQlN/tdn3yUgNwmHKEQg/I7B+6bQaVmmXY eKR4FtvMkPPm2uTzq0iQ== X-Received: by 2002:a17:90b:17cb:b0:37f:eaf9:4682 with SMTP id 98e67ed59e1d1-38dc75f1d95mr770666a91.14.1783724484610; Fri, 10 Jul 2026 16:01:24 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: Helge Deller , Warner Losh , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= Subject: [PULL 09/13] common-user: Move selfmap from util Date: Fri, 10 Jul 2026 16:01:12 -0700 Message-ID: <20260710230116.900171-10-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260710230116.900171-1-richard.henderson@linaro.org> References: <20260710230116.900171-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::102a; envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x102a.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: 1783724597659158500 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 0671aba537..207f814e15 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 d257fb9ca9..b3572a6e36 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 12 00:42:43 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=1783724580; cv=none; d=zohomail.com; s=zohoarc; b=kAOsKcRNtlKlZ/pRurTECTwdZzypsymDVNX61jK7JQtfECivpUfAyZ2dBmhK41WEHCl5DQ7f+u2oepqp2Z9iPhqWg7zXKPN7ymVHv5LVTUPtOOLA2cFAdtzzLYOgjqFXzhLGDczrhNb2C+r27fS0a+BN++bsllKR63j9m8sOx4w= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1783724580; 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=6/pGEOfqexvIxUlRRyRk5XlzbOiuQDRd5o3A4U/Y/0M=; b=MARNabHB2I6H0ryl65X3hDS/BAw5v1h8uUkmduB+Vx9cNPmq3CCM/ue/W/qJeXlzxLc285fhOydgH3s69OBy1WI0uINvlP+vgE/fjdW9aL44D6cr9G2Of3GzWnBvGTRluUxiLAt9kAgoOY75EEfF0OoK5xx249KwQpvEUeLgeLQ= 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 1783724580267430.54498470458566; Fri, 10 Jul 2026 16:03:00 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wiKE6-0004Pq-5j; Fri, 10 Jul 2026 19:01:46 -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 1wiKDp-0004HT-0O for qemu-devel@nongnu.org; Fri, 10 Jul 2026 19:01:29 -0400 Received: from mail-pj1-x102a.google.com ([2607:f8b0:4864:20::102a]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wiKDn-00032T-Bm for qemu-devel@nongnu.org; Fri, 10 Jul 2026 19:01:28 -0400 Received: by mail-pj1-x102a.google.com with SMTP id 98e67ed59e1d1-38d489b6b71so1211632a91.0 for ; Fri, 10 Jul 2026 16:01:26 -0700 (PDT) Received: from stoup.. ([71.212.146.49]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-38a55b3c9eesm3426569a91.11.2026.07.10.16.01.24 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 10 Jul 2026 16:01:25 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1783724485; x=1784329285; 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:content-type; bh=6/pGEOfqexvIxUlRRyRk5XlzbOiuQDRd5o3A4U/Y/0M=; b=Ux/ncW5sHhc379d3xonQ++wBsus7Dnl6MlFwr+D6qHHOxlGCUDdCLIjk0tjN9rMNEG 7wMFjMnChw4FO+MWYoxlt8LT5+FrOIEuQiRZ+oHr+ABnZl/w2sowFTlpke5H//6NjgsL WSIyYPrS8iGwcgKYkLV2PTkJrPoVv/fDd0RB+vgYVl35fpgNKfcDzFqD5ruHwhcbvG+P MlvcAWUsUycD4z5vVaaXXcA35lXCz+r19Pt+14SsXtAOj1x9oZYfMMFWa131IaqKB9kY aGOzkG71A1pMz7pNhuqj1VsbTCRSdY9IgJZtt0+ORmLQCMx980rufgC+BNGnLHnc0MEI 3/0Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1783724485; x=1784329285; 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:content-type; bh=6/pGEOfqexvIxUlRRyRk5XlzbOiuQDRd5o3A4U/Y/0M=; b=c542yY5xWPXkjJJj9JQt7K01EXg+jV+BWOrmGE6We+amxJiEKdIcX7dyFXQn7PdvPZ leFpXMHkWO/mOaoYhZRjO7ibCdlLFgxcOB1Yt4cgMTHjj9KEOVhnOip1xAPmv5ugIyRy ewKvpHjUcBVT0lajYN1N+S9nrxI4ud26OEk7li4j/P3VuUQcz+WzFneDjdzHiYJmczcu TFWHTb6XXVmlBHOQOUYhlhgV+uPtYl9LG9wYn5bAQDBHhXTQmg+rFdk8BHlI/crWPuE6 jvzWuJn0mIyz7WtAK1GuZtX3C03koDrOL9G6Biv0kGAD8xjjsIaf2UM7+eIuEoEn/cWx 99xw== X-Gm-Message-State: AOJu0Yx4/LxEY7JYkCb/m5gP7gE4b81YDHMgLUea7YI+qUS6hg+ndMig xAc4GcsjhkA/gpVmmUI7sXKBep+VI6r7YQ7LCp3DgqHjwmvIH7fltcmgE487jetVQklxCU96P/u 4oxcs X-Gm-Gg: AfdE7ckqGb6TPv8FOX9CsCY7k3Suit9JnWULmRMzGDN36W5LTu0h2qXrbyr9ibjB0nE aslw2MlOYVQhZeKOknTkuceKzzXZ3JpgBGbdUcM0wTOw6c9adSMRTzDHYEZcCYoKFqvxkhQdNVA hPhHk0Bp/fiEMFErQkTFCTCrKyOa2M0Swyu1S9sA2NuajMycqxX8ZvTHQvdtmu8IMlmeSq3Jja2 iHYSDmmkTgRHX5wLQGNRq3wjW3+EynC606ZVi6e7LVYy/kdGfqPKgPw2FRcDfyyFE+lunve8gpj 5kFdBCtvts/Z+y0FYXrSfWTn1MQ3HzGTiv9bcrGjeEh997ILxCAi2nKC4lesc07C5QByJu7v1uq a0SlDxEL53ky8ayBgw6Wit4EPhk+5XL+KIrpRmcBQtARZ0uriIABeWDUehIUyjtDfJwvMj1K5aE Hiaka3yav5WKUzDv5x3w== X-Received: by 2002:a17:90b:2641:b0:387:e0cb:7f4 with SMTP id 98e67ed59e1d1-38dc783efacmr829262a91.40.1783724485437; Fri, 10 Jul 2026 16:01:25 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: Helge Deller , Warner Losh Subject: [PULL 10/13] common-user: Implement read_self_maps for FreeBSD Date: Fri, 10 Jul 2026 16:01:13 -0700 Message-ID: <20260710230116.900171-11-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260710230116.900171-1-richard.henderson@linaro.org> References: <20260710230116.900171-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::102a; envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x102a.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: 1783724581592158500 Content-Type: text/plain; charset="utf-8" Use sysctl to fetch the vm map of the current process. Reviewed-by: Helge Deller Reviewed-by: Warner Losh Signed-off-by: Richard Henderson --- common-user/selfmap.c | 45 ++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 44 insertions(+), 1 deletion(-) diff --git a/common-user/selfmap.c b/common-user/selfmap.c index a1b88dee66..139dae15e8 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,48 @@ IntervalTreeRoot *read_self_maps(void) g_strfreev(lines); g_free(maps); =20 + return root; +#elif defined(__FreeBSD__) + int mib[] =3D { CTL_KERN, KERN_PROC, KERN_PROC_VMMAP, getpid() }; + size_t len =3D 0; + g_autofree void *buf =3D NULL; + IntervalTreeRoot *root; + + /* Probe for buffer size. */ + if (sysctl(mib, ARRAY_SIZE(mib), NULL, &len, NULL, 0) < 0) { + return NULL; + } + + buf =3D g_malloc(len); + if (sysctl(mib, ARRAY_SIZE(mib), buf, &len, NULL, 0) < 0) { + return NULL; + } + + root =3D g_new0(IntervalTreeRoot, 1); + + for (size_t i =3D 0; i < len; ) { + struct kinfo_vmentry *k =3D buf + i; + MapInfo *e =3D g_new0(MapInfo, 1); + + e->itree.start =3D k->kve_start; + e->itree.last =3D k->kve_end - 1; + + /* + * TODO: The rest of the fields in MapInfo are used by linux-user + * for the implementation of open_self_maps(). These fields are + * quite specific to the textual format of /proc/self/maps. + * + * We may need something different to emulate KERN_PROC_VMMAP + * in bsd-user, but so far they're unused -- leave them zeroed. + */ + + interval_tree_insert(&e->itree, root); + i +=3D k->kve_structsize; + } + return root; #else - return NULL; +# error #endif } =20 --=20 2.43.0 From nobody Sun Jul 12 00:42:43 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=1783724572; cv=none; d=zohomail.com; s=zohoarc; b=jvmjzyr4XHJMvhJTV23EajkXe3GmITi3DX1ksWR0HtwQtsk9uYEkTGMc1FMRtduHusGx9MQ43hQVbaxfJ9n37tBmYvqBm65mSN2+zCF2jfXktfotVUM3+cdwu8OFtbhy8W9ZsuVjK0VlFhj0yiFQEhbd/23/U5eSjMP7gcKpWvI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1783724572; 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=Q/YbyW4dFSO7p+TAQS6o6xh+lilvXfvtdixGZBHEu7c=; b=I/N2f4bChhQ8zrAZuLao++nCbFaDbCKFFRiD9Z+fkgvxzUsCo4npmKSRfyw81YsxETSYh7xhXAAQh+IZlYPK5sZcbHKUuT+lNFFHpIEe1pQSKqYXjxIGBTqE3L02qUw578OnHzCZG5ipRxtQuI4dVWAanKkuh5WdpOm4YTHh1vI= 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 1783724572683670.3248486755213; Fri, 10 Jul 2026 16:02:52 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wiKEA-0004Vi-5e; Fri, 10 Jul 2026 19:01:50 -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 1wiKE4-0004MW-GF for qemu-devel@nongnu.org; Fri, 10 Jul 2026 19:01:44 -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 1wiKDo-00032Z-0R for qemu-devel@nongnu.org; Fri, 10 Jul 2026 19:01:31 -0400 Received: by mail-pj1-x102e.google.com with SMTP id 98e67ed59e1d1-3811f512167so1894800a91.3 for ; Fri, 10 Jul 2026 16:01:27 -0700 (PDT) Received: from stoup.. ([71.212.146.49]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-38a55b3c9eesm3426569a91.11.2026.07.10.16.01.25 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 10 Jul 2026 16:01:25 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1783724487; x=1784329287; 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:content-type; bh=Q/YbyW4dFSO7p+TAQS6o6xh+lilvXfvtdixGZBHEu7c=; b=tZLTeqiPCSTkgYm2PW5mWW6G+JqDhGgvjpcceNLoQJdqXMHBDT0VInpIZON5PyyxTl poNO3ycqd/pxl8P5CyhWj7uxz2rf0JgMQ7se99OfTA3sHYlEkxDGO6oliNkFjjuKYJiv i9UMe+lAmejyZDbPbKp2mSKurOfnkq6y4+AdWXhhZliK9AuxaTqjGs0y9Mx+T3P4SFa8 2OQVsJo2ffyJ9uKTFVbYrV06uUwkXBD/iegoPPIjikA//zSRb5PU4RmuX6xU8RVhI8Lz a1QZPMTSJd3c3O74dE1zM61n2eFv4hZPRhNYzcQzUFPp3p6fTclf6MAc1IgcCvPdrhv9 RBhg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1783724487; x=1784329287; 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:content-type; bh=Q/YbyW4dFSO7p+TAQS6o6xh+lilvXfvtdixGZBHEu7c=; b=BBoEPBSStzoeP/DS4JPrrXfxP4npuhTugvkhbgjt5XFRWsnw5SZMreAnkv9hi0BZEy zhiSD0KoS2c1tRX6mNTaFwhofTztjLqspnz7tlgjPlfYaIFsAA/gb6gP2WbnGzL3ilkM rHfM3IqfZ1u10GOYiNBOVrIG2WILUXWuLtxd1617yB3dk3rkX6zTZ9jsSehqEbkHJQtZ tD0KzQsyKSHOnmLgx4nOTSxmAQcNZ5sQfpRM93XpN+4uwxtbMtdlpx1Ldny76zTttEAz XwzHflOu6RvAPsEC0kYc61Uhu9wxKzcguvIhs5fA8BjZitjSDbqHAUROd0BW1qE6mlOw WjQg== X-Gm-Message-State: AOJu0YzSMNp47n+s6vzhAPDirG7IWWevlfRxW3CzWNd2pEn0huC151rQ jUFxfJlVHu4dcwMNpZa7Fm9xw3FyIoA0Ug8fcWIbw0BxYsr9MvCcsD/Wse6WRC/f6KP8JIgTHtw 6caY5 X-Gm-Gg: AfdE7clk+7dQ2K38OXZVqz4FhpkM853wpxTCtLFlu1SYzKtufTpxTuLdsq6/PDKluWU fbxia2mAF0cyON7OlQo7Z1Es9adhWPDw1PKGDFVZE5WOOfSt7frSX0eAjYfEhodaus6lz0vphw+ l9M+aLOw3eYvar5SNOfxUGOair7wu1Xh6/M2KqN03qkacnV8sxaL/3oN14mTo6NS1E0ejpZx+/k eZdCAjijfAig3g29tj9RW8+DAvoVzI9ksMW+l2XGXHWzz3OD+D4mdrop9xPmuroWpxC//t+ff+0 DpO3UBIhaNRwpYIE+u1OJfYZsZs7Ew4/apoLGadM+Yy8CPfgIrjXZafirMQlD5P8qZo7q8n1oPh WgI42w4LhmerL1f3qT/4xbhvxOi8g5hq5fyqjYd9+YRkTxTOZz3hTGXK2ywp+kFySKpo2TrYj6n vAcRBOsN4djhWPKYFfHw== X-Received: by 2002:a17:90b:54c4:b0:38d:b36e:982d with SMTP id 98e67ed59e1d1-38dc777d7ddmr720183a91.29.1783724486256; Fri, 10 Jul 2026 16:01:26 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: Warner Losh Subject: [PULL 11/13] common-user: Move probe_guest_base from linux-user Date: Fri, 10 Jul 2026 16:01:14 -0700 Message-ID: <20260710230116.900171-12-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260710230116.900171-1-richard.henderson@linaro.org> References: <20260710230116.900171-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: 1783724573662158500 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 207f814e15..e7c56af8ed 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 831a7273fb..78dea613d0 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 12 00:42:43 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=1783724509; cv=none; d=zohomail.com; s=zohoarc; b=jCprWu4GUDoO35aAddvT0Q/oznbv9REoWyjG4gOG809muEBRuerIB+ONH3qGUJ0qZ3JJU9uqUuTFyarCdzL/EM7yaWTt02ZbVXguRQf7Fp+4M6I8Q7kwDtaLvaxk95oPBOt1pR+AcNzR1PPeeGqYwxQO3zySlZ/MRMOORF1nv0M= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1783724509; 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=sPZxYmX7vd6cvgBxLyZNN4yNhTfNGY/CctANfdVHSN4=; b=b1by89LplnyX/MQEPHjoFHno6dYJwLCPDvwrlFpN2KX0FjybxORSgZDR4qiath8ZUOcYLXbhCMagBBgrcvRxFgPlIhdMKZ0viRuS9H3yIyGlg6ZQmwzaIq6gr7LZ0W4UDqCLm7RM5pLSBmHNBw28rIZ2u2BvLfI9CkYXGgEsZQg= 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 1783724509244119.44534181500308; Fri, 10 Jul 2026 16:01:49 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wiKE6-0004PK-25; Fri, 10 Jul 2026 19:01:46 -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 1wiKDq-0004IH-N3 for qemu-devel@nongnu.org; Fri, 10 Jul 2026 19:01:30 -0400 Received: from mail-pj1-x1029.google.com ([2607:f8b0:4864:20::1029]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wiKDo-00032n-Jc for qemu-devel@nongnu.org; Fri, 10 Jul 2026 19:01:30 -0400 Received: by mail-pj1-x1029.google.com with SMTP id 98e67ed59e1d1-38759bcd877so1203078a91.2 for ; Fri, 10 Jul 2026 16:01:28 -0700 (PDT) Received: from stoup.. ([71.212.146.49]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-38a55b3c9eesm3426569a91.11.2026.07.10.16.01.26 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 10 Jul 2026 16:01:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1783724487; x=1784329287; 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:content-type; bh=sPZxYmX7vd6cvgBxLyZNN4yNhTfNGY/CctANfdVHSN4=; b=ZwRkN+doMC0BK97C0uw8MAN2va5PeU8MfT/Sqa//4WNushjExS/wGUAU5YaWaFIfR/ 30j4EZkKyvoAP2KeGd5yQtvpsNVwoXbS85OOMR9Hua0ozzraXi3M4jFrcl1sYYgV8aWG efVcWP/8/axGGzUon2cBMm/rtPMtTs3fHU6fu+K4To/iXnFLDLdVfLmBhkt/ba/CKpeV UBW0qC4PUVdnWzNNpvxfGIl8UUPGoczojlgZtnr9SWztRGuvcs9qwuuXfXRzfzUPJEdA vokjYx80kSzhukIJX8qi6579truVcwSy2P8oeiuQRIdrDFCkXxMWAf3KKQs0gMl9t2/f mxng== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1783724487; x=1784329287; 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:content-type; bh=sPZxYmX7vd6cvgBxLyZNN4yNhTfNGY/CctANfdVHSN4=; b=DIjT+qyHaDXyiH+8iHBIw4B39Wid2DCGJRHxbEp2UlqFqnK68Eq868vh0TG8QLKqcM acFcJNMYjzPDucuCiG55FYcHgC55sHx4GffolGCZhV3CYWpEZRfSgtb5GojgmP3GSJCF MdTghLg2GKQp0CUWVzAc6GFOHSMeXM7wJ50DXKdTl5TY3+LNZAGQdxAz17P5giqUUFc7 mJcibY14ok/V44JYvvNsWjRjU0M8BXryLeUYQPCiDJoQezkie6HqSym5FOzPPMxcwP2T VF+827dHPcsvfny9PR8UcPsiQuFvHFz5KpeFhJwnecMGtBhOsxmj9MWVi9M+xYTzHVDF jfbA== X-Gm-Message-State: AOJu0YxaqOg5UJPDFMlY69lSdIQ9S5WKlhYt5G535Y5o+NtPjgNDX0uj TnRNQSVTAGhupudebp4Q3qL0NSIrlGXDLoKrIem+qAR4JiBoPZZkuUUe1nnOrlfVPNNB2X61V4U i6JQ1 X-Gm-Gg: AfdE7cl82uDTqzMNrH0oI5KqT6zENXzC7ficaAs3gAZcC5mg4p7vongIanoqn4dqRUY SdpOAsGEN1tgCLOtiDsg/7uv70VK9nh/SUjWCjfwhEHO5sdQNOske37RuF+MbunQzZyswLmgEtc H33Hcv9nJbAbIwGjbg7wgVIkNX+ZIxKg9NY5DB315wEYP+yxy0l2PZBjzzHp/K+nT6j0y01GT+9 GYDeoPYXNiCrecxikM09k4xmwpUIQlv/qyU+Q/fu+CCZXppzOXTGsCWK7Uhiq2OBExJLCk1C+zQ L8m9sVDzyq6opfTymWgLR0nS3oi0ZOmzF3xIhBNeswd5VcMQSx2J93sW14gB0aBcKaeUwxYocwI s8Gy8S7jGd/PpYDXQJJW1GKYbIZB/fUtkpIIDQfWkX09sMB0kfg9ySpZjbs3hqtllIMujFKoaUq pKvlcrzN7uZSswAPFUDLVgQGvSIRV5 X-Received: by 2002:a17:90b:28c3:b0:36d:8f51:fe29 with SMTP id 98e67ed59e1d1-38dc7a4072cmr728017a91.17.1783724487125; Fri, 10 Jul 2026 16:01:27 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PULL 12/13] bsd-user: Use probe_guest_base Date: Fri, 10 Jul 2026 16:01:15 -0700 Message-ID: <20260710230116.900171-13-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260710230116.900171-1-richard.henderson@linaro.org> References: <20260710230116.900171-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::1029; envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x1029.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: 1783724511354158500 Content-Type: text/plain; charset="utf-8" Merge the PT_LOAD loop with the PT_INTERP loop, as the XXX comment suggests. Pass the probed range to probe_guest_base. Signed-off-by: Richard Henderson --- bsd-user/elfload.c | 37 +++++++++++++++++++------------------ bsd-user/main.c | 39 ++++----------------------------------- 2 files changed, 23 insertions(+), 53 deletions(-) diff --git a/bsd-user/elfload.c b/bsd-user/elfload.c index 3bca0cc9ed..a87a892eb8 100644 --- a/bsd-user/elfload.c +++ b/bsd-user/elfload.c @@ -22,6 +22,7 @@ #include "qemu.h" #include "disas/disas.h" #include "qemu/path.h" +#include "user/probe-guest-base.h" =20 static abi_ulong target_auxents; /* Where the AUX entries are in target = */ static size_t target_auxents_sz; /* Size of AUX entries including AT_NUL= L */ @@ -610,8 +611,9 @@ int load_elf_binary(struct bsd_binprm *bprm, struct tar= get_pt_regs *regs, abi_ulong elf_brk; int error, retval; char *elf_interpreter; - abi_ulong baddr, elf_entry, et_dyn_addr, interp_load_addr =3D 0; + abi_ulong elf_entry, et_dyn_addr, interp_load_addr =3D 0; abi_ulong reloc_func_desc =3D 0; + PGBRange range =3D { -1, 0 }; =20 load_addr =3D 0; elf_ex =3D *((struct elfhdr *) bprm->buf); /* exec-header */ @@ -654,10 +656,10 @@ int load_elf_binary(struct bsd_binprm *bprm, struct t= arget_pt_regs *regs, =20 elf_brk =3D 0; =20 - elf_interpreter =3D NULL; - for (i =3D 0; i < elf_ex.e_phnum; i++) { - if (elf_ppnt->p_type =3D=3D PT_INTERP) { + for (i =3D 0; i < elf_ex.e_phnum; i++, elf_ppnt++) { + switch (elf_ppnt->p_type) { + case PT_INTERP: if (elf_interpreter !=3D NULL) { free(elf_phdata); free(elf_interpreter); @@ -709,8 +711,14 @@ int load_elf_binary(struct bsd_binprm *bprm, struct ta= rget_pt_regs *regs, close(bprm->fd); return retval; } + break; + + case PT_LOAD: + range.lo =3D MIN(range.lo, elf_ppnt->p_vaddr); + range.hi =3D MAX(range.hi, + elf_ppnt->p_vaddr + elf_ppnt->p_memsz - 1); + break; } - elf_ppnt++; } =20 /* Some simple consistency checks for the interpreter */ @@ -740,19 +748,12 @@ int load_elf_binary(struct bsd_binprm *bprm, struct t= arget_pt_regs *regs, info->end_code =3D 0; elf_entry =3D (abi_ulong) elf_ex.e_entry; =20 - /* XXX Join this with PT_INTERP search? */ - baddr =3D 0; - for (i =3D 0, elf_ppnt =3D elf_phdata; i < elf_ex.e_phnum; i++, elf_pp= nt++) { - if (elf_ppnt->p_type !=3D PT_LOAD) { - continue; - } - baddr =3D elf_ppnt->p_vaddr; - break; - } - et_dyn_addr =3D 0; - if (elf_ex.e_type =3D=3D ET_DYN && baddr =3D=3D 0) { - et_dyn_addr =3D ELF_ET_DYN_LOAD_ADDR; + if (elf_ex.e_type =3D=3D ET_DYN) { + probe_guest_base(bprm->filename, NULL, NULL); + et_dyn_addr =3D ELF_ET_DYN_LOAD_ADDR - range.lo; + } else { + probe_guest_base(bprm->filename, &range, NULL); } =20 /* @@ -766,7 +767,7 @@ int load_elf_binary(struct bsd_binprm *bprm, struct tar= get_pt_regs *regs, info->elf_flags =3D elf_ex.e_flags; =20 error =3D load_elf_sections(&elf_ex, elf_phdata, bprm->fd, et_dyn_addr, - &load_addr); + &load_addr); for (i =3D 0, elf_ppnt =3D elf_phdata; i < elf_ex.e_phnum; i++, elf_pp= nt++) { if (elf_ppnt->p_type !=3D PT_LOAD) { continue; diff --git a/bsd-user/main.c b/bsd-user/main.c index 4f1544342e..5277b4e099 100644 --- a/bsd-user/main.c +++ b/bsd-user/main.c @@ -541,41 +541,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 12 00:42:43 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=1783724511; cv=none; d=zohomail.com; s=zohoarc; b=ET7jOldVHD6ZBOkrkBkIORfvGTcJ/9LOUAbEwAhBrb/Ikdd4lnpb8aqQH5xBPEtNRMy+FwUdI9X2DwL5ALA/+wT1c3WTjtOjTuY9MtyCpbYJIOSLdCjnBtUr7z5FPYxUByLRoh7w0xHpHnHx/zDD1Ds0ye+pzcVq1kQdnhXAsO0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1783724511; 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=3j6SDZoTLvq8C32dokLeUzdBUsM/y/njfPybJ8zfNIw=; b=oCIwxp/UUL4CKP2Y/UZgMLsE1fCeBz/c38L9ajBgoy2Xzz3/hr2RJFETX/Da1mGkexCUo8jCow5ut9BtSH45HcQ3QF0nCsfH28u50EpAm2pwd01PXHveKvEpUwLSILdihZWoDfQB9pa6d2Qc+iylg8UBxDxsLt+BjffzXqCKuQ4= 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 1783724511715619.8564951165267; Fri, 10 Jul 2026 16:01:51 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wiKEA-0004VI-0v; Fri, 10 Jul 2026 19:01:50 -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 1wiKDq-0004IS-VV for qemu-devel@nongnu.org; Fri, 10 Jul 2026 19:01:30 -0400 Received: from mail-pj1-x1035.google.com ([2607:f8b0:4864:20::1035]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wiKDp-00032s-AG for qemu-devel@nongnu.org; Fri, 10 Jul 2026 19:01:30 -0400 Received: by mail-pj1-x1035.google.com with SMTP id 98e67ed59e1d1-381216921aaso1704490a91.1 for ; Fri, 10 Jul 2026 16:01:28 -0700 (PDT) Received: from stoup.. ([71.212.146.49]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-38a55b3c9eesm3426569a91.11.2026.07.10.16.01.27 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 10 Jul 2026 16:01:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1783724488; x=1784329288; 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:content-type; bh=3j6SDZoTLvq8C32dokLeUzdBUsM/y/njfPybJ8zfNIw=; b=EGbuCmUnVzntf/M/r2GulsnFuf6kd4WbLxhfW558y1Ye/FsnZMqMac5epNhkKILw4e DHcqsYZUCUf3NQ3qz0JrihZ2s0Ykp1z0F5+zEdJLB2aC9TK8qvAQ4s7DgP2SbEQ9FUlz AZUeCYK3bKln8ACBk/JEL81wcLzEmKVicssIxVCF/UooM+rxsIRvLHo5R6mNhZh3MzQ9 CliVDeYH2UrxhjRUd/WJ6baS6KO7JDQcqYO9Jl3RK89Ww8S2UmiYjulnyCjlQWpH7w6W PTlP7rYGqO9wbYnuAJi2RKVg/JtCd4dutAOlT0NBOoHoqn9AfFpMJ74jB/RYsLF+Tf1I I9Ww== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1783724488; x=1784329288; 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:content-type; bh=3j6SDZoTLvq8C32dokLeUzdBUsM/y/njfPybJ8zfNIw=; b=Z74wSUb4KnWao5zyeE4HQZQJ2nPdlo/s6ScxeLiw+OcIb6J/6LwcCb+wL0b5bEAHmm HBB8ae3KvYv+9IRebslw35+zCKsv1Qmve68WagDW7CVmuDRRz1mcot+3J/6QetriKN95 mogckmWZk2TZZ2QFlRdovfGtOPmT/savnNguOhKD0ZbIi+7fCvt7GHVjA4q7RMUntaBJ gFcZaNleNtG5BaHgW+8oUNIob5L7aw8yhYJCBEFZWfOHIiMqmDobcgxpzYbZf/XPBnWv E3oNhX2lGz/2nktPmhjabpU2ddM93QOBq/aLWKau5HlYbQONb1hLb3GF7gqlR35U7B27 2unQ== X-Gm-Message-State: AOJu0Yw2vxCCHPDHzqbN9HOEWQgXPPs/eIjV/bDB0XTz5sw4ifxPdJiM BR8azd5eA2tfUrmbSlO4TFtO2KJtgX693xSVQ74ML8Ecis7G4cSkUpurv42xNoUc4heVr2O+oeH 1y+Ux X-Gm-Gg: AfdE7cm8xEASnuYO6OgEhyQR9swm9tqSnwORK99CZTD26beU5CqknCJCJ1y8lLiBOQD tw4eHwOkC9tvt/COVAZpUx4NoLN4s1xet5hSO/e9BRe/SznXsQodOHy7VWkQiolWktj4vm6MwMY J2NOUi38ArCh7L6gBnmOI1BfFSJiDdTnFN6nfrS9dgxwA+1G8esd0PAGzVnetve1mGuLwkfTsPy UNrOCuhcLSQXkF1tEN8yotpbxvk1qg9Hru/qdDMNDDzGbAw3BACgnI2ZQS9o+YNBRgIXCJpbkdA GNOxnR8DBKANFxh0iica/l9SAgUw1o3CDu1McBEy8y1O52aKs1NTgfqugDCF1AFnCGaoTldhjR8 Zasg/XzS90Ulk+wCPrdwDqFAX/7AGoT8Ke0FviokJtRWzSedz7OYmSwONdwm9WM/WeevUcNrPI2 5hpR/lwtxHbZ+7TEcJbQ== X-Received: by 2002:a17:90b:180a:b0:387:e0cb:c8db with SMTP id 98e67ed59e1d1-38dc77998d2mr628215a91.36.1783724487834; Fri, 10 Jul 2026 16:01:27 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: Helge Deller , Warner Losh Subject: [PULL 13/13] common-user: Move guest_base, have_guest_base to probe-guest-base.c Date: Fri, 10 Jul 2026 16:01:16 -0700 Message-ID: <20260710230116.900171-14-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260710230116.900171-1-richard.henderson@linaro.org> References: <20260710230116.900171-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::1035; envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x1035.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: 1783724513214158500 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 5277b4e099..694481ae3e 100644 --- a/bsd-user/main.c +++ b/bsd-user/main.c @@ -63,8 +63,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