The branch main has been updated by kib: URL: https://cgit.FreeBSD.org/src/commit/?id=272ea451199462dffd55dd580532eb28ddc92174
commit 272ea451199462dffd55dd580532eb28ddc92174 Author: Konstantin Belousov <[email protected]> AuthorDate: 2026-03-04 03:22:26 +0000 Commit: Konstantin Belousov <[email protected]> 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)),
