From nobody Fri Jun 5 16:16:08 2026 X-Original-To: dev-commits-src-all@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 4gX64Z039Mz6g5Sd 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 4gX64Y4lsPz40yp 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=1780676173; 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=rvLmDbuBBAFSgL1gGEJ94wv+VofWABiE3xrHcDZ7eqSkpGQsI+I+VgRkG/V+2laGrkmTlU ggiW7dooNfqY+m3al4jrS25UaYrYKFdKVl3Vi/OFo57ReS99FOxeAqzMJzlYi/YXrzzQaD d3exCphfJPetiUGNlETxBFs7JZBANGzFUFI9DWZTKCXWDAtB8Sm/x3PXVoeDAJBJP26u6n K8qrF1Zihc6JVjrKNd0eDYiyfdTooS8fudehf+15VMaxKHTL64uVC4WFF++a9aobu6D6Qc F1M4EEXFsxF57BMHd6FI+8uy7HizS7C7DMg41hdnN371Ieq5skj46OdPwHohPA== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1780676173; a=rsa-sha256; cv=none; b=svMFs0ejd2vEoC+jmaDAKC/sOjUkDRDnRrfteAG/AISleAsH70lQLWsXer0TrGzpK7Bk82 MkP4fW0SBsNCZu2eSwGc6rBlXvDm5yiVVn9cGJcVStJB0AXS6u8o1KwEJPBLTg+R29o1hm GVfU6UzwXzNs2VDk0vDv3O9UGaYyDNMAqGPBVWI8aoK7wQ0oYKIp5WGo82pM9mHnI9bfA8 pjAlNVWA8mjP1itfHoGn6t5GxkFlqNYuQ2hfw/FRyFwOL1BnT8nf++7nQUCOYVmK7MHhFL WJBfM1PM1J1zVKQ5sB4lLinMnb2XfDfCLHJubq470DvZsTISNzYEuVZuxY+YFw== 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=1780676173; 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=Bk5YKb6L8WfapfB/BzFUXHO+F8bRMsA/3MNT1BAuQYzSIglyqKwSwy1Su9jV7S4g50nbFW FtqxDQ+5RL441pUltm09AcOUUccIFYTllVxgEx3oqNCeLLOEj5LL/gnm0zJrohxRF4uY5L 158Sb0v7OdiXSuo4PQ7FaQ7RGtmkafmbBTfN6IaVFSF1lLWOLudCIvCEiXM0h+J+aX2KZv 6RSaJVV+F3qqGkLcfqeTHI/W+UZ7qGa2cH0+gZXhLxqbqsKQY2Li+diSsIyKsBp0km00MZ s9kRE7AbQ6NzknQkhD0wMEObD7clWCvHv62h9D3s/cDfODJRGlL9hfPPoiciGQ== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4gX64Y3nqfzdFv 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 all branches of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-all List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-all@freebsd.org Sender: owner-dev-commits-src-all@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 */ };