Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 05 Mar 2026 23:55:37 +0000
From:      Konstantin Belousov <kib@FreeBSD.org>
To:        src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org
Subject:   git: 272ea4511994 - main - amd64: print userspace fsbase and gsbase for uprintf_signal
Message-ID:  <69aa17f9.1821b.55252830@gitrepo.freebsd.org>

index | next in thread | raw e-mail

The branch main has been updated by kib:

URL: https://cgit.FreeBSD.org/src/commit/?id=272ea451199462dffd55dd580532eb28ddc92174

commit 272ea451199462dffd55dd580532eb28ddc92174
Author:     Konstantin Belousov <kib@FreeBSD.org>
AuthorDate: 2026-03-04 03:22:26 +0000
Commit:     Konstantin Belousov <kib@FreeBSD.org>
CommitDate: 2026-03-05 23:53:57 +0000

    amd64: print userspace fsbase and gsbase for uprintf_signal
---
 sys/amd64/amd64/trap.c | 21 +++++++++++++++++++--
 1 file changed, 19 insertions(+), 2 deletions(-)

diff --git a/sys/amd64/amd64/trap.c b/sys/amd64/amd64/trap.c
index d07fbc223193..d173f57e2e4f 100644
--- a/sys/amd64/amd64/trap.c
+++ b/sys/amd64/amd64/trap.c
@@ -182,15 +182,32 @@ trap_uprintf_signal(struct thread *td, struct trapframe *frame, register_t addr,
     int signo, int ucode)
 {
 	struct proc *p;
+	struct pcb *pcb;
+	register_t fsbase, gsbase, r;
 
 	if (!uprintf_signal)
 		return;
 	p = td->td_proc;
+	pcb = td->td_pcb;
+	if ((cpu_stdext_feature & CPUID_STDEXT_FSGSBASE) != 0) {
+		r = intr_disable();
+		if ((pcb->pcb_flags & PCB_FULL_IRET) == 0) {
+			fsbase = rdfsbase();
+			gsbase = rdmsr(MSR_KGSBASE);
+		} else {
+			fsbase = pcb->pcb_fsbase;
+			gsbase = pcb->pcb_gsbase;
+		}
+		intr_restore(r);
+	} else {
+		fsbase = pcb->pcb_fsbase;
+		gsbase = pcb->pcb_gsbase;
+	}
 	uprintf("pid %d comm %s: signal %d err %#lx code %d type %d "
-	    "addr %#lx rsp %#lx rip %#lx rax %#lx "
+	    "addr %#lx rsp %#lx rip %#lx rax %#lx fsb %#lx gsb %#lx "
 	    "<%02x %02x %02x %02x %02x %02x %02x %02x>\n",
 	    p->p_pid, p->p_comm, signo, frame->tf_err, ucode, frame->tf_trapno,
-	    addr, frame->tf_rsp, frame->tf_rip, frame->tf_rax,
+	    addr, frame->tf_rsp, frame->tf_rip, frame->tf_rax, fsbase, gsbase,
 	    fubyte((void *)(frame->tf_rip + 0)),
 	    fubyte((void *)(frame->tf_rip + 1)),
 	    fubyte((void *)(frame->tf_rip + 2)),


home | help

Want to link to this message? Use this
URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?69aa17f9.1821b.55252830>