git: 272ea4511994 - main - amd64: print userspace fsbase and gsbase for uprintf_signal
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Thu, 05 Mar 2026 23:55:37 UTC
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)),