commit aea4b577cd1b7f1402bdd880487cdf436b168b1e
Author: Russ Cox <rsc@golang.org>
Date:   Tue Mar 4 23:34:04 2025 -0500

    sys/src/cmd/ktrace: fix for new k10 kernel trap routine

diff --git a/sys/src/cmd/ktrace.c b/sys/src/cmd/ktrace.c
index 1b9ab8bd..cfbb3ad3 100755
--- a/sys/src/cmd/ktrace.c
+++ b/sys/src/cmd/ktrace.c
@@ -271,7 +271,7 @@ i386trace(uvlong pc, uvlong sp, uvlong link)
 static int
 amd64trace(uvlong pc, uvlong sp, uvlong link)
 {
-	int i, isintrr;
+	int i, istrap;
 	uvlong osp;
 	Symbol s, f;
 	char buf[128];
@@ -284,25 +284,21 @@ amd64trace(uvlong pc, uvlong sp, uvlong link)
 		symoff(buf, sizeof buf, pc, CANY);
 		fmt(buf, pc);
 
-		if(strcmp(s.name, "_intrr") == 0)
-			isintrr = 1;
-		else
-			isintrr = 0;
-		if(pc != s.value) {	/* not at first instruction */
-			if(findlocal(&s, FRAMENAME, &f) == 0)
-				break;
-			sp += f.value-mach->szaddr;
-		}
-		else if(isintrr){
+		istrap = strcmp(s.name, "_intrp") == 0 || strcmp(s.name, "_intre") == 0;
+		if(istrap){
 			print("//passing interrupt frame; last pc found at sp=%#llux\n", osp);
 			/*
 			 * Pop interrupt frame (ureg.h) up to the IP value.
 			 */
 			sp += 19 * mach->szaddr;
+		} else if(pc != s.value) {	/* not at first instruction */
+			if(findlocal(&s, FRAMENAME, &f) == 0)
+				break;
+			sp += f.value-mach->szaddr;
 		}
 
 		pc = getval(sp);
-		if(pc == 0 && isintrr){
+		if(pc == 0 && istrap){
 			/*
 			 * Pop IP, CS and FLAGS to get to the SP.
 			 * The AMD64 aligns the interrupt stack on
@@ -321,7 +317,7 @@ amd64trace(uvlong pc, uvlong sp, uvlong link)
 		}
 		osp = sp;
 
-		if(!isintrr)
+		if(!istrap)
 			sp += mach->szaddr;
 
 		if(++i > 40)