From nobody Thu Mar 23 19:02:46 2023 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 4PjF8k42SZz41ghq; Thu, 23 Mar 2023 19:02:46 +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 "R3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4PjF8k2K2Lz3pHW; Thu, 23 Mar 2023 19:02:46 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1679598166; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=513TyRWQYImajvk42MOr4/cLj359xjs8L41AEoneFAw=; b=BzrwZifZm75cG4tqmrOLywjLule6yOu/A6z0Kw/YdQCmoyKZpo0WeWEl8bai2djRqyvxoG ktnRV1ZE/dwHvibW7xF7ofKekeonBZ5MeyhgqL3lLPz0H6r4w29A3wrWN31euD+/17tQ7f 3hV4lMDFHoaitlh0lA+SD6XsxVpIAGUc45jqeZqIFHo2y2OJ9Q/+edQ0Ay0/ndFI6CzWdO s5sxxCBVLJQYIjWDrjEdfCbc3BMroiYlvd7wOBbhtwg9+Irp3zXqHPiJHLW/ttNj806b94 m8w/IGJyLvYsvqh/VIE+LJMpgDWdRwBAPI6+I0+EkzkMiv1wVZCMFx7qeCFLpg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1679598166; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=513TyRWQYImajvk42MOr4/cLj359xjs8L41AEoneFAw=; b=oauM+pFpAT6spD3SK5HAp4rO9VltrF5Vq6Vtmlbp1ajgSjp4+V31mle7Ny7O5Uc0lodZBI 5u1TY5th7OI0ypCd7U8GGYLVpifrXmbwd1cHYC8OH3lULVhb3Kt9YmK+qfJ70gjVE9i0QH 4g3Yss+xPIN1t+C/H0mPk1ErUrXcvm1K4G7zczQSagqfq0JSt8WlqGobu7udyhZ2I+SwC5 vD9mdLMCSKwpJEoPqx5Lwv04jpWcyaKa7fSDhuptTaxPNJMNTdk/lYL6TN3MDOgMtxION4 u0PakdSOydGHDn6/sbKqme9Jp6rfAZhQB6fbQPVq2ivTachiJqgh6dZ+0XD+lQ== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1679598166; a=rsa-sha256; cv=none; b=HkOn0G1O0/pElRWhCf8fC6Dhx+JY3ELoujrfri9Wb3tNpAf+TdJEmDUkLcvy/36NXqBjEE LcLXkkq9xazfWV7Muhx4LK3DGhbtopwM+iUqO4J645Byqau/CgQgm+BDZMC1zjqtvDgU4e j/yX/31BCKekcnvNq10i2DZFL29SY14nwH51obK0oTxERskSUQh60rm/qHbHZp9wwQ/VRk WaRLtq8+p61jzdCg7WeLwfxW5XLIcUkA0u4XIpEgp3AY75dFzKe+L5Zf05fNCwihyyIjNy y+oTxqrEMmtIFT1qbuxPGw6TAv9EXQi9vqowzOxvgjoHn3rQflahXTNsulUpeA== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (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 did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 4PjF8k1Pyyzn4Q; Thu, 23 Mar 2023 19:02:46 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 32NJ2keN039309; Thu, 23 Mar 2023 19:02:46 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 32NJ2ktY039308; Thu, 23 Mar 2023 19:02:46 GMT (envelope-from git) Date: Thu, 23 Mar 2023 19:02:46 GMT Message-Id: <202303231902.32NJ2ktY039308@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Andrew Turner Subject: git: 2ecbbcc7cabd - main - arm64: extend ESR/SPSR registers to 64b 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: Sender: owner-dev-commits-src-all@freebsd.org X-BeenThere: dev-commits-src-all@freebsd.org 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: 2ecbbcc7cabdc0147e54ffa90c90efcc33afadd8 Auto-Submitted: auto-generated X-ThisMailContainsUnwantedMimeParts: N The branch main has been updated by andrew: URL: https://cgit.FreeBSD.org/src/commit/?id=2ecbbcc7cabdc0147e54ffa90c90efcc33afadd8 commit 2ecbbcc7cabdc0147e54ffa90c90efcc33afadd8 Author: Zachary Leaf AuthorDate: 2023-02-24 08:35:08 +0000 Commit: Andrew Turner CommitDate: 2023-03-23 18:56:26 +0000 arm64: extend ESR/SPSR registers to 64b For the Exception Syndrome Register, ESR_ELx, the upper 32b were previously unused, but now may contain additional exception info as of Armv8.7 (FEAT_LS64). Extend ESR from u32->u64 in exception handling code to support this. In addition, also extend Saved Program Status Register SPSR_ELx in the same way to allow for future extensions. Reviewed by: andrew Sponsored by: Arm Ltd Differential Revision: https://reviews.freebsd.org/D38983 --- sys/arm64/arm64/db_trace.c | 6 +++--- sys/arm64/arm64/exception.S | 2 +- sys/arm64/arm64/exec_machdep.c | 2 +- sys/arm64/arm64/trap.c | 18 +++++++++--------- sys/arm64/include/frame.h | 5 +++-- sys/arm64/include/reg.h | 2 +- sys/arm64/include/ucontext.h | 3 +-- 7 files changed, 19 insertions(+), 19 deletions(-) diff --git a/sys/arm64/arm64/db_trace.c b/sys/arm64/arm64/db_trace.c index 2b47ae2a89c7..6abdd6c5ca7a 100644 --- a/sys/arm64/arm64/db_trace.c +++ b/sys/arm64/arm64/db_trace.c @@ -102,18 +102,18 @@ db_stack_trace_cmd(struct thread *td, struct unwind_state *frame) switch (frame_type) { case FRAME_SYNC: - db_printf("--- exception, esr %#x\n", + db_printf("--- exception, esr %#lx\n", tf->tf_esr); break; case FRAME_IRQ: db_printf("--- interrupt\n"); break; case FRAME_SERROR: - db_printf("--- system error, esr %#x\n", + db_printf("--- system error, esr %#lx\n", tf->tf_esr); break; case FRAME_UNHANDLED: - db_printf("--- unhandled exception, esr %#x\n", + db_printf("--- unhandled exception, esr %#lx\n", tf->tf_esr); break; default: diff --git a/sys/arm64/arm64/exception.S b/sys/arm64/arm64/exception.S index fd55e1f39b58..e23a7868b56f 100644 --- a/sys/arm64/arm64/exception.S +++ b/sys/arm64/arm64/exception.S @@ -67,7 +67,7 @@ __FBSDID("$FreeBSD$"); mrs x12, esr_el1 stp x18, lr, [sp, #(TF_SP - TF_X)]! str x10, [sp, #(TF_ELR)] - stp w11, w12, [sp, #(TF_SPSR)] + stp x11, x12, [sp, #(TF_SPSR)] mrs x18, tpidr_el1 .endm diff --git a/sys/arm64/arm64/exec_machdep.c b/sys/arm64/arm64/exec_machdep.c index 27ee2f80858d..7ead30a05663 100644 --- a/sys/arm64/arm64/exec_machdep.c +++ b/sys/arm64/arm64/exec_machdep.c @@ -457,7 +457,7 @@ int set_mcontext(struct thread *td, mcontext_t *mcp) { struct trapframe *tf = td->td_frame; - uint32_t spsr; + uint64_t spsr; spsr = mcp->mc_gpregs.gp_spsr; if ((spsr & PSR_M_MASK) != PSR_M_EL0t || diff --git a/sys/arm64/arm64/trap.c b/sys/arm64/arm64/trap.c index 1b33d7aa60c4..50f6e9de874b 100644 --- a/sys/arm64/arm64/trap.c +++ b/sys/arm64/arm64/trap.c @@ -212,7 +212,7 @@ align_abort(struct thread *td, struct trapframe *frame, uint64_t esr, if (!lower) { print_registers(frame); print_gp_register("far", far); - printf(" esr: %.8lx\n", esr); + printf(" esr: %.16lx\n", esr); panic("Misaligned access from kernel space!"); } @@ -329,7 +329,7 @@ data_abort(struct thread *td, struct trapframe *frame, uint64_t esr, WARN_GIANTOK, NULL, "Kernel page fault") != 0) { print_registers(frame); print_gp_register("far", far); - printf(" esr: %.8lx\n", esr); + printf(" esr: %.16lx\n", esr); panic("data abort in critical section or under mutex"); } @@ -370,7 +370,7 @@ bad_far: printf("Fatal data abort:\n"); print_registers(frame); print_gp_register("far", far); - printf(" esr: %.8lx\n", esr); + printf(" esr: %.16lx\n", esr); #ifdef KDB if (debugger_on_trap) { @@ -429,7 +429,7 @@ print_registers(struct trapframe *frame) printf(" sp: %16lx\n", frame->tf_sp); print_gp_register(" lr", frame->tf_lr); print_gp_register("elr", frame->tf_elr); - printf("spsr: %8x\n", frame->tf_spsr); + printf("spsr: %16lx\n", frame->tf_spsr); } #ifdef VFP @@ -496,7 +496,7 @@ do_el1h_sync(struct thread *td, struct trapframe *frame) #endif { print_registers(frame); - printf(" esr: %.8lx\n", esr); + printf(" esr: %.16lx\n", esr); panic("VFP exception in the kernel"); } break; @@ -510,7 +510,7 @@ do_el1h_sync(struct thread *td, struct trapframe *frame) } else { print_registers(frame); print_gp_register("far", far); - printf(" esr: %.8lx\n", esr); + printf(" esr: %.16lx\n", esr); panic("Unhandled EL1 %s abort: %x", exception == EXCP_INSN_ABORT ? "instruction" : "data", dfsc); @@ -624,7 +624,7 @@ do_el0_sync(struct thread *td, struct trapframe *frame, uint64_t far) else { print_registers(frame); print_gp_register("far", far); - printf(" esr: %.8lx\n", esr); + printf(" esr: %.16lx\n", esr); panic("Unhandled EL0 %s abort: %x", exception == EXCP_INSN_ABORT_L ? "instruction" : "data", dfsc); @@ -716,7 +716,7 @@ do_serror(struct trapframe *frame) print_registers(frame); print_gp_register("far", far); - printf(" esr: %.8lx\n", esr); + printf(" esr: %.16lx\n", esr); panic("Unhandled System Error"); } @@ -730,6 +730,6 @@ unhandled_exception(struct trapframe *frame) print_registers(frame); print_gp_register("far", far); - printf(" esr: %.8lx\n", esr); + printf(" esr: %.16lx\n", esr); panic("Unhandled exception"); } diff --git a/sys/arm64/include/frame.h b/sys/arm64/include/frame.h index 0a8b53ebb01e..91ed6dbce920 100644 --- a/sys/arm64/include/frame.h +++ b/sys/arm64/include/frame.h @@ -45,8 +45,9 @@ struct trapframe { uint64_t tf_sp; uint64_t tf_lr; uint64_t tf_elr; - uint32_t tf_spsr; - uint32_t tf_esr; + uint64_t tf_spsr; + uint64_t tf_esr; + uint64_t pad; /* struct must be 16B aligned */ uint64_t tf_x[30]; }; diff --git a/sys/arm64/include/reg.h b/sys/arm64/include/reg.h index 44b2e2b21b72..4e8ca4f4e834 100644 --- a/sys/arm64/include/reg.h +++ b/sys/arm64/include/reg.h @@ -40,7 +40,7 @@ struct reg { __uint64_t lr; __uint64_t sp; __uint64_t elr; - __uint32_t spsr; + __uint64_t spsr; }; struct reg32 { diff --git a/sys/arm64/include/ucontext.h b/sys/arm64/include/ucontext.h index a81fdf9ad724..edb4cf8e63e3 100644 --- a/sys/arm64/include/ucontext.h +++ b/sys/arm64/include/ucontext.h @@ -38,8 +38,7 @@ struct gpregs { __register_t gp_lr; __register_t gp_sp; __register_t gp_elr; - __uint32_t gp_spsr; - int gp_pad; + __uint64_t gp_spsr; }; struct fpregs {