shithub: riscv

Download patch

ref: ba59008e1da6bdf87648f9cc44aac83095c49600
parent: 0bb90c3d2f157d6eef3a42061874b696f7a14d7c
author: cinap_lenrek <cinap_lenrek@felloff.net>
date: Mon Apr 14 12:37:00 EDT 2025

kernel: cleanup noted(), make it more consistent

keep all the call argument stuff together,
makes it easier to understand.

--- a/sys/src/9/arm64/trap.c
+++ b/sys/src/9/arm64/trap.c
@@ -375,15 +375,15 @@
 	
 	case NSAVE:
 		sp = oureg - 4 * BY2WD - ERRMAX;
-		ureg->sp = sp;
-		ureg->r0 = (uintptr) oureg;
-		if(!okaddr(ureg->pc, BY2WD, 0) || !okaddr(ureg->sp, 4 * BY2WD, 1) ||
-				(nureg->pc & 3) != 0 || (ureg->sp & 7) != 0){
+		if(!okaddr(ureg->pc, BY2WD, 0) || !okaddr(sp, 4 * BY2WD, 1) ||
+				(nureg->pc & 3) != 0 || (sp & 7) != 0){
 			qunlock(&up->debug);
 			pprint("suicide: trap in noted\n");
 			pexit("Suicide", 0);
 		}
 		qunlock(&up->debug);
+		ureg->sp = sp;
+		ureg->r0 = (uintptr) oureg;
 		((uintptr *) sp)[1] = oureg;
 		((uintptr *) sp)[0] = 0;
 		break;
--- a/sys/src/9/pc/trap.c
+++ b/sys/src/9/pc/trap.c
@@ -644,8 +644,7 @@
 	switch(arg0){
 	case NCONT:
 	case NRSTR:
-if(0) print("%s %lud: noted %.8lux %.8lux\n",
-	up->text, up->pid, nureg->pc, nureg->usp);
+if(0) print("%s %lud: noted %#p %#p\n", up->text, up->pid, ureg->pc, ureg->usp);
 		if(!okaddr(ureg->pc, 1, 0) || !okaddr(ureg->usp, BY2WD, 0)){
 			qunlock(&up->debug);
 			pprint("suicide: trap in noted\n");
@@ -657,13 +656,13 @@
 
 	case NSAVE:
 		sp = oureg-4*BY2WD-ERRMAX;
-		ureg->usp = sp;
-		if(!okaddr(ureg->pc, 1, 0) || !okaddr(ureg->usp, 4*BY2WD, 1)){
+		if(!okaddr(ureg->pc, 1, 0) || !okaddr(sp, 4*BY2WD, 1)){
 			qunlock(&up->debug);
 			pprint("suicide: trap in noted\n");
 			pexit("Suicide", 0);
 		}
 		qunlock(&up->debug);
+		ureg->usp = sp;
 		((ulong*)sp)[1] = oureg;	/* arg 1 0(FP) is ureg* */
 		((ulong*)sp)[0] = 0;		/* arg 0 is pc */
 		break;
--