From 77f8ffcb052ac84e56532c6b414ab5e29f1d9070 Mon Sep 17 00:00:00 2001 From: Taylor R Campbell Date: Sun, 26 Jun 2022 22:13:12 +0000 Subject: [PATCH] amd64: Print effective syscall number for SYS_syscall stack traces. --- sys/arch/amd64/amd64/db_machdep.c | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/sys/arch/amd64/amd64/db_machdep.c b/sys/arch/amd64/amd64/db_machdep.c index f2405e50c713..fee26e6be7ab 100644 --- a/sys/arch/amd64/amd64/db_machdep.c +++ b/sys/arch/amd64/amd64/db_machdep.c @@ -111,6 +111,7 @@ db_nextframe(long **nextframe, long **retaddr, long **arg0, db_addr_t *ip, struct x86_64_frame *fp; struct intrframe *ifp; int traptype, trapno, err, i; + db_expr_t syscallno; switch (is_trap) { case NONE: @@ -127,8 +128,16 @@ db_nextframe(long **nextframe, long **retaddr, long **arg0, db_addr_t *ip, case SYSCALL: tf = (struct trapframe *)argp; - (*pr)("--- syscall (number %"DDB_EXPR_FMT"u) ---\n", - db_get_value((long)&tf->tf_rax, 8, false)); + syscallno = db_get_value((long)&tf->tf_rax, 8, false); + if (syscallno == SYS_syscall) { + syscallno = db_get_value((long)&tf->tf_rdi, 8, false); + (*pr)("--- syscall (number %"DDB_EXPR_FMT"u" + " via SYS_syscall) ---\n", + syscallno); + } else { + (*pr)("--- syscall (number %"DDB_EXPR_FMT"u) ---\n", + syscallno); + } return 0; case TRAP: