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)),

Reply via email to