From nobody Sat Sep 6 17:02:27 2025 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=1756981439; cv=none; d=zohomail.com; s=zohoarc; b=n14wuwIQvGsG2XDDsY64i/xRKD3bf9gAETaImh8Hh2AdkUVcbmz4nAt+cn4zgFDJjn7JfVsqJw1SB+n/nnUkw/ji87Ia6O2UkVIOoMXR8ebCpxt8QI1iyYJopjv6ROMaYckgQB2h8fD5LxeScFvuqe7lJg7hKs+xirv2w3o13Xs= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1756981439; 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=7zfQ6Ek+RL90OKpISh7ii2ukdZCuPaJC9b2Qi7cmtOQ=; b=knKiBeHlsdq9QkrouMByeNdLAWX7R0XmjB26/s2BgqJE+yJvke+zwj1EOdRDWIsSzuT6K7wzjtRc5ag64VXBjdg1VxgZKDViHerjX5wob5msREROb3S6J10qYWysQ+PUrwUIZxkotgXI0fHbsb3NE3P+3lJVi1d/VQovXlZ/1oA= 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 lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1756981439789622.6026545489473; Thu, 4 Sep 2025 03:23:59 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uu77n-00004s-UW; Thu, 04 Sep 2025 06:23:27 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1uu77l-0008W0-Mt for qemu-devel@nongnu.org; Thu, 04 Sep 2025 06:23:25 -0400 Received: from mail-wm1-x32d.google.com ([2a00:1450:4864:20::32d]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uu77f-0005Pd-0s for qemu-devel@nongnu.org; Thu, 04 Sep 2025 06:23:25 -0400 Received: by mail-wm1-x32d.google.com with SMTP id 5b1f17b1804b1-45b7d497ab9so8490225e9.0 for ; Thu, 04 Sep 2025 03:23:17 -0700 (PDT) Received: from stoup.dot1x.polimi.it ([131.175.126.3]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-45b8f2d3c88sm147699195e9.19.2025.09.04.03.23.14 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 04 Sep 2025 03:23:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1756981395; x=1757586195; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=7zfQ6Ek+RL90OKpISh7ii2ukdZCuPaJC9b2Qi7cmtOQ=; b=zYRj6C1NVb+Mn1RiwrPSdXWCiLm7ZC+haXboNmTxoh1SVFyv0WJ2rpVRH+gPHVwsFH AOqdJe7e3nuqelQjZ9zuAzk34wbRJB0IuRAxQTqOQ0D+ZIqqwA6ztwdjQPeIsbwkL94U 2+Yf3SWiPeZ22pPSNgc5YFMOT4Urw+PaMU89wmDY/yPruKe/Juxj+Zm5pVWGp7pwybKk dkven+OHbsfpIdQsuGJ1ACnUVIZuLl/kiUeY57mpPo/FdJFmWhfq/H1uyMx+zHJ6THeV ZZ/gzmkvX8Kj9ucr+Zii83o6Vj6lHPpdtCyOyQBxp2SO5/0y8xNtBTM/o7F/U759nJvh JqMA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1756981395; x=1757586195; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=7zfQ6Ek+RL90OKpISh7ii2ukdZCuPaJC9b2Qi7cmtOQ=; b=D5f3Fx9sdHQfJ7++QvUiZY9MJvXZMUUW/76+rgZidFXkWnqjOAUYZd9l7c4Ep3q4e+ uh2vthMYharYzNcq6gQvL76GAIGJgIiOnXzvJgFG1ee0T1bfpsGgm/FsW2h+1nCa2DxC UZ/TG1Sd86LsMNgGRUrxpZGGdQuzAortk7kExvDNpzs6b5ICHxHTHvB7Vh1efj1IXljV ljXvo9X/vV8wP7bPrHVg2SoGNd5xH4E/zEYnc2ia080Rod5Hr31QXJOd05bTNp2J3Ao0 N1gpV7YLjck1EJAaKy8BqMSpA0IpCOYFDAZ+KPMk6HVoF+Zkkki9NTu3U5ZwELyv7EDZ bMbQ== X-Gm-Message-State: AOJu0Yx1SWHwAErtDsSpD4Q3+EDEw/cnlcWOQHcoqr5NogTO7Y59AuUw 1lm1MXHg7LbKjhhslpFeyCcKBLNSkrm38ewcM2j8DjIalGauy1TfqyCqixCKXCAL+mXYJj2aBlK ZdhV9HYg= X-Gm-Gg: ASbGncubkmhUE/T2Z9YLK+bUNOmJBZ92IhPD/rYcvr8tEs0dyXgvbWWBHlwd5zhRaZP qSr6cvbXyLBKP2WofiGarQFtQWCTlwdWC7zAkWGez1SElwLr1iGFsD7fah4su9ua2HCkc5RTrxw Vz/VVp0ArdI2LsUoo3V22PZ2G3gPG/GRKb+lOQ0lI70ZAOxHMEmyvIoHnvn0tRFqyB+c9TZ3ySj LSg5vTt9hqJ3Z43/TwZeIxGGj9J7ZBHDpBLkLqAlBmHGntsQ6c1VnrrQWxu03C6rSw/zd+59gxB aoOGII7f2ZEBLeKj84Ae3X7flJclDldLgcPCkjTFP4ahu3+2d3qePApuzqwUUMswhGU7BIezUTw R6jQubQFf0xXzBVv1a69Z4VISSvKctBDTpig2tn6av/9dew== X-Google-Smtp-Source: AGHT+IGG23nqhZgh192viZNi89MCWHQjxifHZaGZoTevO72THq/mZGdF99KtNEHYJ/fg8V5GJl24MQ== X-Received: by 2002:a05:600c:a43:b0:459:d3ce:2cbd with SMTP id 5b1f17b1804b1-45b8556a7acmr152296125e9.13.1756981395081; Thu, 04 Sep 2025 03:23:15 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: floss@arusekk.pl Subject: [PATCH v4 1/4] linux-user: Create vdso_sigreturn_region_{start,end} Date: Thu, 4 Sep 2025 12:23:07 +0200 Message-ID: <20250904102311.57383-2-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250904102311.57383-1-richard.henderson@linaro.org> References: <20250904102311.57383-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=lists.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::32d; envelope-from=richard.henderson@linaro.org; helo=mail-wm1-x32d.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: 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: 1756981441149124100 Content-Type: text/plain; charset="utf-8" These variables will be populated from the vdso, and used for detecting whether we are executing the sigreturn. Signed-off-by: Richard Henderson --- linux-user/loader.h | 2 ++ linux-user/signal-common.h | 2 ++ linux-user/elfload.c | 5 +++++ linux-user/gen-vdso.c | 6 ++++++ linux-user/signal.c | 2 ++ linux-user/gen-vdso-elfn.c.inc | 7 +++++-- 6 files changed, 22 insertions(+), 2 deletions(-) diff --git a/linux-user/loader.h b/linux-user/loader.h index e42b8fa1e3..da9ad28db5 100644 --- a/linux-user/loader.h +++ b/linux-user/loader.h @@ -117,6 +117,8 @@ typedef struct { unsigned reloc_count; unsigned sigreturn_ofs; unsigned rt_sigreturn_ofs; + unsigned sigreturn_region_start_ofs; + unsigned sigreturn_region_end_ofs; } VdsoImageInfo; =20 /* Note that both Elf32_Word and Elf64_Word are uint32_t. */ diff --git a/linux-user/signal-common.h b/linux-user/signal-common.h index 196d2406f8..0b04868727 100644 --- a/linux-user/signal-common.h +++ b/linux-user/signal-common.h @@ -25,6 +25,8 @@ /* Fallback addresses into sigtramp page. */ extern abi_ulong default_sigreturn; extern abi_ulong default_rt_sigreturn; +extern abi_ulong vdso_sigreturn_region_start; +extern abi_ulong vdso_sigreturn_region_end; =20 void setup_sigtramp(abi_ulong tramp_page); =20 diff --git a/linux-user/elfload.c b/linux-user/elfload.c index 26c090c95d..28f0909d1a 100644 --- a/linux-user/elfload.c +++ b/linux-user/elfload.c @@ -1659,6 +1659,11 @@ static void load_elf_vdso(struct image_info *info, c= onst VdsoImageInfo *vdso) if (vdso->rt_sigreturn_ofs) { default_rt_sigreturn =3D load_addr + vdso->rt_sigreturn_ofs; } + if (vdso->sigreturn_region_start_ofs) { + vdso_sigreturn_region_start =3D + load_addr + vdso->sigreturn_region_start_ofs; + vdso_sigreturn_region_end =3D load_addr + vdso->sigreturn_region_e= nd_ofs; + } =20 /* Remove write from VDSO segment. */ target_mprotect(info->start_data, info->end_data - info->start_data, diff --git a/linux-user/gen-vdso.c b/linux-user/gen-vdso.c index aeaa927db8..d6a2cdaa83 100644 --- a/linux-user/gen-vdso.c +++ b/linux-user/gen-vdso.c @@ -36,6 +36,8 @@ static const char *rt_sigreturn_sym; =20 static unsigned sigreturn_addr; static unsigned rt_sigreturn_addr; +static unsigned sigreturn_region_start_addr; +static unsigned sigreturn_region_end_addr; =20 #define N 32 #define elfN(x) elf32_##x @@ -215,6 +217,10 @@ int main(int argc, char **argv) fprintf(outf, " .reloc_count =3D ARRAY_SIZE(%s_relocs),\n", prefix); fprintf(outf, " .sigreturn_ofs =3D 0x%x,\n", sigreturn_addr); fprintf(outf, " .rt_sigreturn_ofs =3D 0x%x,\n", rt_sigreturn_addr); + fprintf(outf, " .sigreturn_region_start_ofs =3D 0x%x,\n", + sigreturn_region_start_addr); + fprintf(outf, " .sigreturn_region_end_ofs =3D 0x%x,\n", + sigreturn_region_end_addr); fprintf(outf, "};\n"); =20 ret =3D EXIT_SUCCESS; diff --git a/linux-user/signal.c b/linux-user/signal.c index cd0e7398aa..804096bd44 100644 --- a/linux-user/signal.c +++ b/linux-user/signal.c @@ -50,6 +50,8 @@ static void host_signal_handler(int host_signum, siginfo_= t *info, /* Fallback addresses into sigtramp page. */ abi_ulong default_sigreturn; abi_ulong default_rt_sigreturn; +abi_ulong vdso_sigreturn_region_start; +abi_ulong vdso_sigreturn_region_end; =20 /* * System includes define _NSIG as SIGRTMAX + 1, but qemu (like the kernel) diff --git a/linux-user/gen-vdso-elfn.c.inc b/linux-user/gen-vdso-elfn.c.inc index b47019e136..c2677a146c 100644 --- a/linux-user/gen-vdso-elfn.c.inc +++ b/linux-user/gen-vdso-elfn.c.inc @@ -84,9 +84,12 @@ static void elfN(search_symtab)(ElfN(Shdr) *shdr, unsign= ed sym_idx, =20 if (sigreturn_sym && strcmp(sigreturn_sym, name) =3D=3D 0) { sigreturn_addr =3D sym.st_value; - } - if (rt_sigreturn_sym && strcmp(rt_sigreturn_sym, name) =3D=3D 0) { + } else if (rt_sigreturn_sym && strcmp(rt_sigreturn_sym, name) =3D= =3D 0) { rt_sigreturn_addr =3D sym.st_value; + } else if (strcmp("sigreturn_region_start", name) =3D=3D 0) { + sigreturn_region_start_addr =3D sym.st_value; + } else if (strcmp("sigreturn_region_end", name) =3D=3D 0) { + sigreturn_region_end_addr =3D sym.st_value; } } } --=20 2.43.0