From nobody Fri Mar 20 22:49:53 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 4fcySK3wlVz6WBmP for ; Fri, 20 Mar 2026 22:49:53 +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 "R12" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4fcySK0cXvz46P5 for ; Fri, 20 Mar 2026 22:49:53 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1774046993; 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=8l42wv7iUZTpbe1HSlV21zfbPTvzzmTVl0FmIn7GCzo=; b=KxXDNWP5PetWh98a5w6LENcMYGfDRG43shzFEdY70mjoaTrXZNRkCwklk9l1Ce2m5tJb/9 JYB/YH5/fCB36UxhzzQmN979Y7nrMWwPE3p7nX0YGpHfSSOO0jalMkaXJeT2uQaHl2gLFF qAFTQcaREMXyURi59oj8vFlhSt9DEhH5y2haN7PxPsmPelVaOTqkGMmGS9PIRZUW2M0pcB E6mTYedVza1n9EsXZVU+xvUBSRnNeRbVuEXcqfvnIhT2DU+qVuRzqeL5B6HiqYZi2Dpyba zw5wK7PQXizjIcfx7Zug10hxCwCNjy/kWnK5p0kvAnfDLzIkP+MhtGWsU/o5sw== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1774046993; a=rsa-sha256; cv=none; b=RymbMbnen0V38pacgZmCJ5BSPHH3ZvYM4anPXUiEeL6VN/ctlqgkUr5YQrVIj71yrb33yC OvmQ8aymjP3OH+TGPQ58I9/2jcsWBV59vQsO8lq2H6icZb9ggtms2IqYY5pJDoQjDdEatC MnH2T1lmlBzjKNff4PGbXQ/6m10i5a/L944DJ+AoOkn5z5GTrRwUUkPxxfoMaaUhvxedsY OeaOZ1IocxAwnvdIMNTzM5U65/5Nxpp6ZVagqdc4v+kbGzs5Vh0/34b8U0GRCZ8Mgcaj2R MDmxRW5ivoBNE0LuLWhBas0K7NYPpuagj1at+c625iqx2OpbEBUBekUSEWMikg== 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=1774046993; 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=8l42wv7iUZTpbe1HSlV21zfbPTvzzmTVl0FmIn7GCzo=; b=R2bBO6FmkDr7sGvk/ziMxRr3njfH8z0Yz5UcGJXFpKBRMbemDP30B7UfA4MRQVjhvyhXg3 U5yozIHi2+GbfpEyWz6hcy7uut4yHsMtXA9hFStMXRMzE93+gz/PVQXGf/AiUNEq/f0hZi 657vl0jlvO/KTLhiP/q0Sn50/7aDmoaLF+RXlvBVNlpSV+R5hnT+TC0CJwAFhhqdG4cVMJ 6mKEUc09osuVtySgaqAA4pC2m+D4K+ipKrKOuK2Ke5H177xiXlQww/RqkrmMcp9tD+fOcY xij3+gb6E1rTgHawpHREyVcrjuXgHT6lwnLIhM19skCJcF8Zvisva6s8NsF90w== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4fcySK05Sgzm15 for ; Fri, 20 Mar 2026 22:49:53 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 27b41 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Fri, 20 Mar 2026 22:49:53 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Konstantin Belousov Subject: git: e90950627327 - main - x86 FRED: add hardware definitions for the trap frames fields 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 MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: kib X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: e90950627327de9226b052851b36f341bc72b746 Auto-Submitted: auto-generated Date: Fri, 20 Mar 2026 22:49:53 +0000 Message-Id: <69bdcf11.27b41.6ea636a8@gitrepo.freebsd.org> The branch main has been updated by kib: URL: https://cgit.FreeBSD.org/src/commit/?id=e90950627327de9226b052851b36f341bc72b746 commit e90950627327de9226b052851b36f341bc72b746 Author: Konstantin Belousov AuthorDate: 2026-02-07 03:35:17 +0000 Commit: Konstantin Belousov CommitDate: 2026-03-20 21:05:15 +0000 x86 FRED: add hardware definitions for the trap frames fields as provided by the Intel document 346446-009 AKA FRED 8.0 and SDM v90, February 2026. Note that the layout of the struct trapframe does not change with FRED. The differences are in addition of two fields at the end of the structure. Other members are carved from existing tf_cs and tf_ss by limiting hw-written segments to 16 bits officially, and reusing rest from the doubleword for the new data. Reviewed by: jhb, markj Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D55831 --- sys/amd64/amd64/trap.c | 17 ++++++++------- sys/x86/include/frame.h | 55 +++++++++++++++++++++++++++++++++++++++++++------ 2 files changed, 58 insertions(+), 14 deletions(-) diff --git a/sys/amd64/amd64/trap.c b/sys/amd64/amd64/trap.c index e4e4e98fbf7d..8a1d1528e6da 100644 --- a/sys/amd64/amd64/trap.c +++ b/sys/amd64/amd64/trap.c @@ -940,7 +940,7 @@ after_vmfault: static void trap_diag(struct trapframe *frame, vm_offset_t eva) { - int code, ss; + int code; u_int type; struct soft_segment_descriptor softseg; struct user_segment_descriptor *gdt; @@ -948,7 +948,7 @@ trap_diag(struct trapframe *frame, vm_offset_t eva) code = frame->tf_err; type = frame->tf_trapno; gdt = *PCPU_PTR(gdt); - sdtossd(&gdt[IDXSEL(frame->tf_cs & 0xffff)], &softseg); + sdtossd(&gdt[IDXSEL(frame->tf_cs)], &softseg); printf("\n\nFatal trap %d: %s while in %s mode\n", type, type < nitems(trap_msg) ? trap_msg[type] : UNKNOWN, @@ -967,11 +967,12 @@ trap_diag(struct trapframe *frame, vm_offset_t eva) code & PGEX_RSV ? "reserved bits in PTE" : code & PGEX_P ? "protection violation" : "page not present"); } - printf("instruction pointer = 0x%lx:0x%lx\n", - frame->tf_cs & 0xffff, frame->tf_rip); - ss = frame->tf_ss & 0xffff; - printf("stack pointer = 0x%x:0x%lx\n", ss, frame->tf_rsp); - printf("frame pointer = 0x%x:0x%lx\n", ss, frame->tf_rbp); + printf("instruction pointer = %#hx:%#lx\n", + frame->tf_cs, frame->tf_rip); + printf("stack pointer = %#hx:%#lx\n", frame->tf_ss, + frame->tf_rsp); + printf("frame pointer = %#hx:%#lx\n", frame->tf_ss, + frame->tf_rbp); printf("code segment = base 0x%lx, limit 0x%lx, type 0x%x\n", softseg.ssd_base, softseg.ssd_limit, softseg.ssd_type); printf(" = DPL %d, pres %d, long %d, def32 %d, gran %d\n", @@ -1065,7 +1066,7 @@ dblfault_handler(struct trapframe *frame) "r8 %#lx r9 %#lx r10 %#lx\n" "r11 %#lx r12 %#lx r13 %#lx\n" "r14 %#lx r15 %#lx rflags %#lx\n" - "cs %#lx ss %#lx ds %#hx es %#hx fs %#hx gs %#hx\n" + "cs %#hx ss %#hx ds %#hx es %#hx fs %#hx gs %#hx\n" "fsbase %#lx gsbase %#lx kgsbase %#lx\n", frame->tf_rip, frame->tf_rsp, frame->tf_rbp, frame->tf_rax, frame->tf_rdx, frame->tf_rbx, diff --git a/sys/x86/include/frame.h b/sys/x86/include/frame.h index feef41ac7bfe..a6444d55cfaf 100644 --- a/sys/x86/include/frame.h +++ b/sys/x86/include/frame.h @@ -143,17 +143,60 @@ struct trapframe { /* below portion defined in hardware */ register_t tf_err; register_t tf_rip; - register_t tf_cs; + uint16_t tf_cs; + uint16_t tf_fred_evinfo3; + uint32_t tf_fred_zero2; register_t tf_rflags; /* the amd64 frame always has the stack registers */ register_t tf_rsp; - register_t tf_ss; + uint16_t tf_ss; + uint16_t tf_fred_evinfo1; + uint32_t tf_fred_evinfo2; + /* two long words added by FRED */ + uint64_t tf_fred_evdata; + uint64_t tf_fred_zero1; }; -#define TF_HASSEGS 0x1 -#define TF_HASBASES 0x2 -#define TF_HASFPXSTATE 0x4 -#define TF_RESERV0 0x8 /* no tlsbase in the trapframe */ +#define TF_FRED_EVDATA_B0 0x0000000000000001ull /* %dr6 B0 */ +#define TF_FRED_EVDATA_B1 0x0000000000000002ull +#define TF_FRED_EVDATA_B2 0x0000000000000004ull +#define TF_FRED_EVDATA_B3 0x0000000000000008ull +#define TF_FRED_EVDATA_BLD 0x0000000000000800ull /* bus lock acq + detected */ +#define TF_FRED_EVDATA_BD 0x0000000000002000ull /* dr access detected */ +#define TF_FRED_EVDATA_BS 0x0000000000004000ull /* single step */ +#define TF_FRED_EVDATA_RTM 0x0000000000010000ull /* #db or #bp in RTM */ + +#define TF_FRED_EVINFO1_STIINT 0x0001 /* hw intr blocked by STI */ +#define TF_FRED_EVINFO1_SYSCALL 0x0002 /* SYSCALL/SYSENTER/INTn */ +#define TF_FRED_EVINFO1_NMI 0x0004 /* NMI */ + +#define TF_FRED_EVINFO2_VECMASK 0x000000ff /* event vector mask */ +#define TF_FRED_EVINFO2_TYPEMASK 0x000f0000 /* event type mask */ +#define TF_FRED_EVINFO2_TYPE_EXTINT 0x00000000 +#define TF_FRED_EVINFO2_TYPE_NMI 0x00020000 +#define TF_FRED_EVINFO2_TYPE_EXC 0x00030000 +#define TF_FRED_EVINFO2_TYPE_INTn 0x00040000 +#define TF_FRED_EVINFO2_TYPE_INT1 0x00050000 +#define TF_FRED_EVINFO2_TYPE_INT3 0x00060000 +#define TF_FRED_EVINFO2_TYPE_SYSCALL 0x00070000 +#define TF_FRED_EVINFO2_ENCL 0x01000000 /* SGX-related */ +#define TF_FRED_EVINFO2_LM 0x02000000 /* in 64bit mode */ +#define TF_FRED_EVINFO2_NEST 0x04000000 /* during ev delivery */ +#define TF_FRED_EVINFO2_INSTLENMASK 0xf0000000 /* instr length mask */ +#define TF_FRED_EVINFO2_INSTLENSHIFT 28 /* instr length shift */ + +#define TF_FRED_EVINFO2_VEC_SYSCALL 1 +#define TF_FRED_EVINFO2_VEC_SYSENTER 2 + +#define TF_FRED_EVINFO3_CSLMASK 0x0003 /* event CSL mask */ +#define TF_FRED_EVINFO3_WFE 0x0004 /* in WAIT_FOR_ENDBRANCH */ + +#define TF_HASSEGS 0x00000001 +#define TF_HASBASES 0x00000002 +#define TF_HASFPXSTATE 0x00000004 +#define TF_RESERV0 0x00000008 /* no tlsbase in the trapframe */ +#define TF_FRED 0x00000010 #endif /* __amd64__ */ #endif /* _MACHINE_FRAME_H_ */