From nobody Fri Jun 5 16:16:08 2026 X-Original-To: dev-commits-src-main@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4gX64Z1JPhz6g5k5 for ; Fri, 05 Jun 2026 16:16:14 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R13" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4gX64Z02Wxz414Z for ; Fri, 05 Jun 2026 16:16:13 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1780676174; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=v/bqUhGOtVxi8v8fnTweuA+JRzcLajRZ0FMwN/rNjK0=; b=AhWUeuKoXN4MfsUWQNdmgX6Yjs9vO4jUPlxCg9MQtnqa9CoC9FXCzwOQCYdLi/Rl+waw1r vZH+sf+Y0seE6aJGy5Tf8xTZwzdtxJKHMfblZgGEO98K5oEa2tAtjYDwnepb8MlNbML0Wt h2W5mPccQ4AgA2szgfAjmNznHp0PfILY5LcKDeFcR6BeYXoDKnCNmuWkX6FGaPzCPdzRBl Ori4aDYb5L2l0kmSYUjJuz/kzKjCMii3p0mn9giiELc2jqiJAmsj7MQNXxksVBFHQamS2b yUfggQ8AoXgpNr0aq3xyFGcS3QLPtos/3TaeAGkgfrPx8JO+TiKcwHp/xmlLkw== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1780676174; a=rsa-sha256; cv=none; b=xiGf68PJMzoHlA3g7J/OOXsSAdvedfgOsD7bb/wUqt9HXC8bl1UXtQgGekNWfv76MZahfd 8tcOMQCanngEWmyEEDVJYvtITxEscfzJHLLROA4+igbwyxWZPv9RClMNvbQgPPDtjOd7Nn wk9mGcNWv/yL36FHlbR80ReC9qhfUDZNCg7EFMbOkq+O7603w4g6OEQq0eYzAWE7OK60L0 3P9VB8w3JfmvMT9L2D0tKckenkBsPVfNhsJlsORmgJUFbM/VAmSOtbZTTGUbcSZuRkVsEn +cSjcM369wUiufXJ8MOJ5iJciUFVsbTas8lgOnq+zFgw51FHaBnVmdVon1ZJJA== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1780676174; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=v/bqUhGOtVxi8v8fnTweuA+JRzcLajRZ0FMwN/rNjK0=; b=Ojn2qKrRsAlR6ee9HNyTiRdRsLdapL9yh0BO9tVfoV+txVuC2rjNx6ASzszP8FURTk1KO8 V/eCg8nxFzzSd389X03Qu7Qu4J6vSCT/MBu5H7LjHdsXUYWT7K+e6nWzqP74Daf5dtvjHg v5CwFhbECTK/VQntrqcNbi8j7Tyrz6hm6tRUWyustNIA1OxZvEyPDkIBi+eoPQN6Q2fbNL bp/g2mt4xSGzGyKcysisTKrNa36jzQGlTSZU7OaGfOVWqTlK3oQbK+RzaeLuwvrN5lTEHm 8mB9CTdrU9cmrLvY0A5TMojsmuacv0GjN7F9S79T2Xd/nhHKcOq8oIOL7eeV6w== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4gX64Y4tY2zdFw for ; Fri, 05 Jun 2026 16:16:13 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 45f19 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Fri, 05 Jun 2026 16:16:08 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org Cc: Alex Arslan From: Andrew Turner Subject: git: 0b862a795a35 - main - arm64: Expose ESR in mcontext List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: andrew X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 0b862a795a3500b07aa757ce7b457c9bf198e2b1 Auto-Submitted: auto-generated Date: Fri, 05 Jun 2026 16:16:08 +0000 Message-Id: <6a22f648.45f19.663d4ac@gitrepo.freebsd.org> The branch main has been updated by andrew: URL: https://cgit.FreeBSD.org/src/commit/?id=0b862a795a3500b07aa757ce7b457c9bf198e2b1 commit 0b862a795a3500b07aa757ce7b457c9bf198e2b1 Author: Alex Arslan AuthorDate: 2026-02-27 21:51:28 +0000 Commit: Andrew Turner CommitDate: 2026-06-05 16:15:36 +0000 arm64: Expose ESR in mcontext At present, the exception syndrome register (ESR) is not accessible via the user context on FreeBSD AArch64, which makes it difficult to determine the cause of an exception. For example, a signal handler might get a `SIGSEGV` with `SEGV_ACCERR`, but it can't know whether that occurred due to a bad read or write. The change implemented here includes ESR in `struct __mcontext`, thereby allowing access via `ucontext_t` for use by signal handlers, sanitizers, debuggers, etc. Note that this addition consumes one of the seven spare 64-bit slots in `struct __mcontext`. Signed-off-by: Alex Arslan Reviewed by: andrew Pull Request: https://github.com/freebsd/freebsd-src/pull/2053 --- sys/arm64/arm64/exec_machdep.c | 5 +++++ sys/arm64/include/ucontext.h | 4 +++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/sys/arm64/arm64/exec_machdep.c b/sys/arm64/arm64/exec_machdep.c index d0a7302e2f7d..dd433907de12 100644 --- a/sys/arm64/arm64/exec_machdep.c +++ b/sys/arm64/arm64/exec_machdep.c @@ -484,6 +484,7 @@ int get_mcontext(struct thread *td, mcontext_t *mcp, int clear_ret) { struct trapframe *tf = td->td_frame; + ksiginfo_t *ksi = td->td_proc->p_ksi; if (clear_ret & GET_MC_CLEAR_RET) { mcp->mc_gpregs.gp_x[0] = 0; @@ -499,6 +500,10 @@ get_mcontext(struct thread *td, mcontext_t *mcp, int clear_ret) mcp->mc_gpregs.gp_sp = tf->tf_sp; mcp->mc_gpregs.gp_lr = tf->tf_lr; mcp->mc_gpregs.gp_elr = tf->tf_elr; + if (ksi != NULL && (ksi->ksi_flags & KSI_EXCEPT) != 0) { + mcp->mc_esr = tf->tf_esr; + mcp->mc_flags |= _MC_ESR_VALID; + } get_fpcontext(td, mcp); return (0); diff --git a/sys/arm64/include/ucontext.h b/sys/arm64/include/ucontext.h index a4f0ee243b3a..11befe4e3023 100644 --- a/sys/arm64/include/ucontext.h +++ b/sys/arm64/include/ucontext.h @@ -76,9 +76,11 @@ struct __mcontext { struct fpregs mc_fpregs; int mc_flags; #define _MC_FP_VALID 0x1 /* Set when mc_fpregs has valid data */ +#define _MC_ESR_VALID 0x2 /* Set when mc_esr has valid data */ int mc_pad; /* Padding */ __uint64_t mc_ptr; /* Address of extra_regs struct */ - __uint64_t mc_spare[7]; /* Space for expansion, set to zero */ + __register_t mc_esr; /* Exception syndrome register */ + __uint64_t mc_spare[6]; /* Space for expansion, set to zero */ };