Module Name:    src
Committed By:   rin
Date:           Mon Sep 12 08:02:44 UTC 2022

Modified Files:
        src/sys/arch/powerpc/ibm4xx: 4xx_trap_subr.S copyinstr.c copyoutstr.c
            pmap.c trap.c trap_subr.S
        src/sys/arch/powerpc/include/ibm4xx: spr.h
        src/sys/arch/powerpc/powerpc: db_interface.c

Log Message:
Make ibm4xx kernels compiled by clang.

As clang cannot correctly assemble m[ft]pid:
- for asm sources, use m[ft]spr from/to SPR_PID
- for C sources, use M[FT]PID macros (see include/ibm4xx/spr.h)
This is ugly...

No binary changes for GCC-compiled kernels.


To generate a diff of this commit:
cvs rdiff -u -r1.9 -r1.10 src/sys/arch/powerpc/ibm4xx/4xx_trap_subr.S
cvs rdiff -u -r1.14 -r1.15 src/sys/arch/powerpc/ibm4xx/copyinstr.c \
    src/sys/arch/powerpc/ibm4xx/copyoutstr.c
cvs rdiff -u -r1.105 -r1.106 src/sys/arch/powerpc/ibm4xx/pmap.c
cvs rdiff -u -r1.97 -r1.98 src/sys/arch/powerpc/ibm4xx/trap.c
cvs rdiff -u -r1.29 -r1.30 src/sys/arch/powerpc/ibm4xx/trap_subr.S
cvs rdiff -u -r1.4 -r1.5 src/sys/arch/powerpc/include/ibm4xx/spr.h
cvs rdiff -u -r1.58 -r1.59 src/sys/arch/powerpc/powerpc/db_interface.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/arch/powerpc/ibm4xx/4xx_trap_subr.S
diff -u src/sys/arch/powerpc/ibm4xx/4xx_trap_subr.S:1.9 src/sys/arch/powerpc/ibm4xx/4xx_trap_subr.S:1.10
--- src/sys/arch/powerpc/ibm4xx/4xx_trap_subr.S:1.9	Sun Jul 12 21:16:23 2020
+++ src/sys/arch/powerpc/ibm4xx/4xx_trap_subr.S	Mon Sep 12 08:02:44 2022
@@ -1,4 +1,4 @@
-/*	$NetBSD: 4xx_trap_subr.S,v 1.9 2020/07/12 21:16:23 rin Exp $	*/
+/*	$NetBSD: 4xx_trap_subr.S,v 1.10 2022/09/12 08:02:44 rin Exp $	*/
 
 /*
  * Copyright 2001 Wasabi Systems, Inc.
@@ -95,12 +95,12 @@ s4xx_miss:
 	.globl	_C_LABEL(pmap_tlbmiss)
 
 	/* If the kernel stack would fault, don't use it. */
-	mfpid	%r30
+	mfspr	%r30,SPR_PID
 	li	%r31,KERNEL_PID
-	mtpid	%r31
+	mtspr	SPR_PID,%r31
 	li	%r31,-FRAMELEN
 	tlbsx.	%r31,%r31,%r1
-	mtpid	%r30
+	mtspr	SPR_PID,%r30
 	beq	1f
 
 	/*

Index: src/sys/arch/powerpc/ibm4xx/copyinstr.c
diff -u src/sys/arch/powerpc/ibm4xx/copyinstr.c:1.14 src/sys/arch/powerpc/ibm4xx/copyinstr.c:1.15
--- src/sys/arch/powerpc/ibm4xx/copyinstr.c:1.14	Fri Jun 19 07:31:59 2020
+++ src/sys/arch/powerpc/ibm4xx/copyinstr.c	Mon Sep 12 08:02:44 2022
@@ -1,4 +1,4 @@
-/*	$NetBSD: copyinstr.c,v 1.14 2020/06/19 07:31:59 rin Exp $	*/
+/*	$NetBSD: copyinstr.c,v 1.15 2022/09/12 08:02:44 rin Exp $	*/
 
 /*
  * Copyright 2001 Wasabi Systems, Inc.
@@ -36,10 +36,11 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: copyinstr.c,v 1.14 2020/06/19 07:31:59 rin Exp $");
+__KERNEL_RCSID(0, "$NetBSD: copyinstr.c,v 1.15 2022/09/12 08:02:44 rin Exp $");
 
 #include <sys/param.h>
 #include <uvm/uvm_extern.h>
+#include <powerpc/ibm4xx/spr.h>
 #include <machine/pcb.h>
 
 int
@@ -76,20 +77,23 @@ copyinstr(const void *udaddr, void *kadd
 		"li %1,0x20;"
 		"andc %1,%0,%1; mtmsr %1;"	/* Disable IMMU */
 		"isync;"
-		"mfpid %1;"			/* Save old PID */
+		MFPID(%1)			/* Save old PID */
 
 		"1: "
-		"mtpid %4; isync;"		/* Load user ctx */
+		MTPID(%4)			/* Load user ctx */
+		"isync;"
 		"lbz %2,0(%5); addi %5,%5,1;"	/* Load byte */
 		"sync;"
-		"mtpid %1; isync;"
+		MTPID(%1)
+		"isync;"
 		"stb %2,0(%6); dcbst 0,%6; addi %6,%6,1;"
 						/* Store kernel byte */
 		"or. %2,%2,%2;"
 		"sync;"
 		"bdnzf 2,1b;"			/* while(ctr-- && !zero) */
 
-		"mtpid %1; mtmsr %0;"		/* Restore PID, MSR */
+		MTPID(%1)			/* Restore PID, MSR */
+		"mtmsr %0;"
 		"isync;"
 		"mfctr %3;"			/* Restore resid */
 		: "=&r" (msr), "=&r" (pid), "=&r" (data), "+r" (resid)
Index: src/sys/arch/powerpc/ibm4xx/copyoutstr.c
diff -u src/sys/arch/powerpc/ibm4xx/copyoutstr.c:1.14 src/sys/arch/powerpc/ibm4xx/copyoutstr.c:1.15
--- src/sys/arch/powerpc/ibm4xx/copyoutstr.c:1.14	Fri Jun 19 07:31:59 2020
+++ src/sys/arch/powerpc/ibm4xx/copyoutstr.c	Mon Sep 12 08:02:44 2022
@@ -1,4 +1,4 @@
-/*	$NetBSD: copyoutstr.c,v 1.14 2020/06/19 07:31:59 rin Exp $	*/
+/*	$NetBSD: copyoutstr.c,v 1.15 2022/09/12 08:02:44 rin Exp $	*/
 
 /*
  * Copyright 2001 Wasabi Systems, Inc.
@@ -36,10 +36,11 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: copyoutstr.c,v 1.14 2020/06/19 07:31:59 rin Exp $");
+__KERNEL_RCSID(0, "$NetBSD: copyoutstr.c,v 1.15 2022/09/12 08:02:44 rin Exp $");
 
 #include <sys/param.h>
 #include <uvm/uvm_extern.h>
+#include <powerpc/ibm4xx/spr.h>
 #include <machine/pcb.h>
 
 int
@@ -76,20 +77,23 @@ copyoutstr(const void *kaddr, void *udad
 		"li %1,0x20;"
 		"andc %1,%0,%1; mtmsr %1;"	/* Disable IMMU */
 		"isync;"
-		"mfpid %1;"			/* Save old PID */
+		MFPID(%1)			/* Save old PID */
 
 		"1:"
-		"mtpid %1; isync;"
+		MTPID(%1)
+		"isync;"
 		"lbz %2,0(%6); addi %6,%6,1;"	/* Store kernel byte */
 		"sync;"
-		"mtpid %4; isync;"		/* Load user ctx */
+		MTPID(%4)			/* Load user ctx */
+		"isync;"
 		"stb %2,0(%5); dcbst 0,%5; addi %5,%5,1;"
 						/* Load byte */
 		"or. %2,%2,%2;"
 		"sync;"
 		"bdnzf 2,1b;"			/* while(ctr-- && !zero) */
 
-		"mtpid %1; mtmsr %0;"		/* Restore PID, MSR */
+		MTPID(%1)			/* Restore PID, MSR */
+		"mtmsr %0;"
 		"isync;"
 		"mfctr %3;"			/* Restore resid */
 		: "=&r" (msr), "=&r" (pid), "=&r" (data), "+r" (resid)

Index: src/sys/arch/powerpc/ibm4xx/pmap.c
diff -u src/sys/arch/powerpc/ibm4xx/pmap.c:1.105 src/sys/arch/powerpc/ibm4xx/pmap.c:1.106
--- src/sys/arch/powerpc/ibm4xx/pmap.c:1.105	Wed Sep  8 00:17:21 2021
+++ src/sys/arch/powerpc/ibm4xx/pmap.c	Mon Sep 12 08:02:44 2022
@@ -1,4 +1,4 @@
-/*	$NetBSD: pmap.c,v 1.105 2021/09/08 00:17:21 rin Exp $	*/
+/*	$NetBSD: pmap.c,v 1.106 2022/09/12 08:02:44 rin Exp $	*/
 
 /*
  * Copyright 2001 Wasabi Systems, Inc.
@@ -67,7 +67,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.105 2021/09/08 00:17:21 rin Exp $");
+__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.106 2022/09/12 08:02:44 rin Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_ddb.h"
@@ -1184,8 +1184,8 @@ pmap_procwr(struct proc *p, vaddr_t va, 
 			"ori	%1,%1,0x10;"	/* Turn on DMMU for sure */
 			"mtmsr	%1;"
 			"isync;"
-			"mfpid	%1;"
-			"mtpid	%2;"
+			MFPID(%1)
+			MTPID(%2)
 			"isync;"
 		"1:"
 			"dcbst	0,%3;"
@@ -1194,7 +1194,7 @@ pmap_procwr(struct proc *p, vaddr_t va, 
 			"sub.	%4,%4,%5;"
 			"bge	1b;"
 			"sync;"
-			"mtpid	%1;"
+			MTPID(%1)
 			"mtmsr	%0;"
 			"isync;"
 			: "=&r"(msr), "=&r"(opid)
@@ -1239,11 +1239,11 @@ tlb_invalidate_entry(int i)
 		"mfmsr	%0;"
 		"li	%1,0;"
 		"mtmsr	%1;"
-		"mfpid	%1;"
+		MFPID(%1)
 		"tlbre	%2,%3,0;"
 		"andc	%2,%2,%4;"
 		"tlbwe	%2,%3,0;"
-		"mtpid	%1;"
+		MTPID(%1)
 		"mtmsr	%0;"
 		"isync;"
 		: "=&r"(msr), "=&r"(pid), "=&r"(hi)
@@ -1273,16 +1273,16 @@ ppc4xx_tlb_flush(vaddr_t va, int pid)
 		return;
 
 	__asm volatile (
-		"mfpid	%1;"		/* Save PID */
+		MFPID(%1)		/* Save PID */
 		"mfmsr	%2;"		/* Save MSR */
 		"li	%0,0;"		/* Now clear MSR */
 		"mtmsr	%0;"
 		"isync;"
-		"mtpid	%4;"		/* Set PID */
+		MTPID(%4)		/* Set PID */
 		"isync;"
 		"tlbsx.	%0,0,%3;"	/* Search TLB */
 		"isync;"
-		"mtpid	%1;"		/* Restore PID */
+		MTPID(%1)		/* Restore PID */
 		"mtmsr	%2;"		/* Restore MSR */
 		"isync;"
 		"li	%1,1;"
@@ -1373,13 +1373,13 @@ ppc4xx_tlb_enter(int ctx, vaddr_t va, u_
 		"mtmsr	%1;"			/* Clear MSR */
 		"isync;"
 		"tlbwe	%1,%3,0;"		/* Invalidate old entry. */
-		"mfpid	%1;"			/* Save old PID */
-		"mtpid	%2;"			/* Load translation ctx */
+		MFPID(%1)			/* Save old PID */
+		MTPID(%2)			/* Load translation ctx */
 		"isync;"
 		"tlbwe	%4,%3,1;"		/* Set TLB */
 		"tlbwe	%5,%3,0;"
 		"isync;"
-		"mtpid	%1;"			/* Restore PID */
+		MTPID(%1)			/* Restore PID */
 		"mtmsr	%0;"			/* and MSR */
 		"isync;"
 		: "=&r"(msr), "=&r"(pid)

Index: src/sys/arch/powerpc/ibm4xx/trap.c
diff -u src/sys/arch/powerpc/ibm4xx/trap.c:1.97 src/sys/arch/powerpc/ibm4xx/trap.c:1.98
--- src/sys/arch/powerpc/ibm4xx/trap.c:1.97	Mon Sep 12 06:23:29 2022
+++ src/sys/arch/powerpc/ibm4xx/trap.c	Mon Sep 12 08:02:44 2022
@@ -1,4 +1,4 @@
-/*	$NetBSD: trap.c,v 1.97 2022/09/12 06:23:29 rin Exp $	*/
+/*	$NetBSD: trap.c,v 1.98 2022/09/12 08:02:44 rin Exp $	*/
 
 /*
  * Copyright 2001 Wasabi Systems, Inc.
@@ -69,7 +69,7 @@
 #define	__UFETCHSTORE_PRIVATE
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: trap.c,v 1.97 2022/09/12 06:23:29 rin Exp $");
+__KERNEL_RCSID(0, "$NetBSD: trap.c,v 1.98 2022/09/12 08:02:44 rin Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_ddb.h"
@@ -455,13 +455,13 @@ copyin(const void *uaddr, void *kaddr, s
 		"andc	%[tmp],%[msr],%[tmp];"
 		"mtmsr	%[tmp];"
 		"isync;"
-		"mfpid	%[pid];"		/* Save old PID */
+		MFPID(%[pid])			/* Save old PID */
 
 		"srwi.	%[tmp],%[len],0x2;"	/* How many words? */
 		"beq-	2f;"			/* No words. Go do bytes */
 		"mtctr	%[tmp];"
 
-	"1:"	"mtpid	%[ctx];"
+	"1:"	MTPID(%[ctx])
 		"isync;"
 #ifdef PPC_IBM403
 		"lswi	%[tmp],%[uaddr],4;"	/* Load user word */
@@ -471,7 +471,7 @@ copyin(const void *uaddr, void *kaddr, s
 		"addi	%[uaddr],%[uaddr],0x4;"	/* next uaddr word */
 		"sync;"
 
-		"mtpid	%[pid];"
+		MTPID(%[pid])
 		"isync;"
 #ifdef PPC_IBM403
 		"stswi	%[tmp],%[kaddr],4;"	/* Store kernel word */
@@ -487,12 +487,12 @@ copyin(const void *uaddr, void *kaddr, s
 		"beq	10f;"
 		"mtxer	%[tmp];"
 
-		"mtpid	%[ctx];"
+		MTPID(%[ctx])
 		"isync;"
 		"lswx	%[tmp],0,%[uaddr];"	/* Load user bytes */
 		"sync;"
 
-		"mtpid	%[pid];"
+		MTPID(%[pid])
 		"isync;"
 		"stswx	%[tmp],0,%[kaddr];"	/* Store kernel bytes */
 		"dcbst	0,%[kaddr];"		/* flush cache */
@@ -570,7 +570,7 @@ copyout(const void *kaddr, void *uaddr, 
 		"andc	%[tmp],%[msr],%[tmp];"
 		"mtmsr	%[tmp];"
 		"isync;"
-		"mfpid	%[pid];"		/* Save old PID */
+		MFPID(%[pid])			/* Save old PID */
 
 		"srwi.	%[tmp],%[len],0x2;"	/* How many words? */
 		"beq-	2f;"			/* No words. Go do bytes */
@@ -585,7 +585,7 @@ copyout(const void *kaddr, void *uaddr, 
 		"addi	%[kaddr],%[kaddr],0x4;"	/* next kaddr word */
 		"sync;"
 
-		"mtpid	%[ctx];"
+		MTPID(%[ctx])
 		"isync;"
 #ifdef PPC_IBM403
 		"stswi	%[tmp],%[uaddr],4;"	/* Store user word */
@@ -596,7 +596,7 @@ copyout(const void *kaddr, void *uaddr, 
 		"addi	%[uaddr],%[uaddr],0x4;"	/* next uaddr word */
 		"sync;"
 
-		"mtpid	%[pid];"
+		MTPID(%[pid])
 		"isync;"
 		"bdnz	1b;"			/* repeat */
 
@@ -607,13 +607,13 @@ copyout(const void *kaddr, void *uaddr, 
 		"lswx	%[tmp],0,%[kaddr];"	/* Load kernel bytes */
 		"sync;"
 
-		"mtpid	%[ctx];"
+		MTPID(%[ctx])
 		"isync;"
 		"stswx	%[tmp],0,%[uaddr];"	/* Store user bytes */
 		"dcbst	0,%[uaddr];"		/* flush cache */
 		"sync;"
 
-		"mtpid	%[pid];"		/* Restore PID and MSR */
+		MTPID(%[pid])			/* Restore PID and MSR */
 	"10:"	"mtmsr	%[msr];"
 		"isync;"
 

Index: src/sys/arch/powerpc/ibm4xx/trap_subr.S
diff -u src/sys/arch/powerpc/ibm4xx/trap_subr.S:1.29 src/sys/arch/powerpc/ibm4xx/trap_subr.S:1.30
--- src/sys/arch/powerpc/ibm4xx/trap_subr.S:1.29	Mon Jul  6 10:42:21 2020
+++ src/sys/arch/powerpc/ibm4xx/trap_subr.S	Mon Sep 12 08:02:44 2022
@@ -1,4 +1,4 @@
-/*	$NetBSD: trap_subr.S,v 1.29 2020/07/06 10:42:21 rin Exp $	*/
+/*	$NetBSD: trap_subr.S,v 1.30 2022/09/12 08:02:44 rin Exp $	*/
 
 /*
  * Copyright 2001 Wasabi Systems, Inc.
@@ -210,9 +210,9 @@ _C_LABEL(ddbsize) = .-_C_LABEL(ddblow)
 #endif
 
 #define	ENABLE_TRANSLATION(pidreg,tmpreg)				\
-	mfpid	pidreg;							\
+	mfspr	pidreg,SPR_PID;						\
 	li	tmpreg,KERNEL_PID;					\
-	mtpid	tmpreg;							\
+	mtspr	SPR_PID,tmpreg;						\
 	mfmsr	tmpreg;							\
 	ori	tmpreg,tmpreg,(PSL_DR|PSL_IR)@l;			\
 	mtmsr	tmpreg;							\
@@ -336,7 +336,7 @@ intrleave_to_kernel:
 	mfsprg1	%r1
 	mtmsr	%r30	/* disable translation */
 	isync
-	mtpid	%r31
+	mtspr	SPR_PID,%r31
 	mfsprg3	%r31
 	mfsprg2	%r30
 	IBM405_ERRATA77_SYNC
@@ -378,7 +378,7 @@ intrleave_to_user:
 	mfsprg1	%r1
 	mtmsr	%r30	/* disable translation */
 	isync
-	mtpid	%r31
+	mtspr	SPR_PID,%r31
 	mfsprg3	%r31
 	mfsprg2	%r30
 	IBM405_ERRATA77_SYNC

Index: src/sys/arch/powerpc/include/ibm4xx/spr.h
diff -u src/sys/arch/powerpc/include/ibm4xx/spr.h:1.4 src/sys/arch/powerpc/include/ibm4xx/spr.h:1.5
--- src/sys/arch/powerpc/include/ibm4xx/spr.h:1.4	Fri Mar  5 07:10:27 2021
+++ src/sys/arch/powerpc/include/ibm4xx/spr.h	Mon Sep 12 08:02:44 2022
@@ -1,4 +1,4 @@
-/*	$NetBSD: spr.h,v 1.4 2021/03/05 07:10:27 rin Exp $	*/
+/*	$NetBSD: spr.h,v 1.5 2022/09/12 08:02:44 rin Exp $	*/
 
 #ifndef _POWERPC_IBM4XX_SPR_H_
 #define	_POWERPC_IBM4XX_SPR_H_
@@ -176,4 +176,12 @@
 #define	SPR_DCCR		0x3fa	/* .4.. Data Cache Cachability Register */
 #define	SPR_ICCR		0x3fb	/* .4.. Instruction Cache Cachability Register */
 
+/*
+ * XXXclang
+ * clang cannot correctly assemble m[ft]pid for ibm4xx.
+ * Yes, this is ugly, but may not be ugliest...
+ */
+#define	MFPID(reg)	"mfspr "#reg","___STRING(SPR_PID)";"
+#define	MTPID(reg)	"mtspr "___STRING(SPR_PID)","#reg";"
+
 #endif /* !_POWERPC_IBM4XX_SPR_H_ */

Index: src/sys/arch/powerpc/powerpc/db_interface.c
diff -u src/sys/arch/powerpc/powerpc/db_interface.c:1.58 src/sys/arch/powerpc/powerpc/db_interface.c:1.59
--- src/sys/arch/powerpc/powerpc/db_interface.c:1.58	Wed Nov 10 16:02:48 2021
+++ src/sys/arch/powerpc/powerpc/db_interface.c	Mon Sep 12 08:02:44 2022
@@ -1,8 +1,8 @@
-/*	$NetBSD: db_interface.c,v 1.58 2021/11/10 16:02:48 msaitoh Exp $ */
+/*	$NetBSD: db_interface.c,v 1.59 2022/09/12 08:02:44 rin Exp $ */
 /*	$OpenBSD: db_interface.c,v 1.2 1996/12/28 06:21:50 rahnds Exp $	*/
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: db_interface.c,v 1.58 2021/11/10 16:02:48 msaitoh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: db_interface.c,v 1.59 2022/09/12 08:02:44 rin Exp $");
 
 #define USERACC
 
@@ -641,14 +641,14 @@ db_ppc4xx_dumptlb(db_expr_t addr, bool h
 	zpr = mfspr(SPR_ZPR);
 	for (i = 0; i < NTLB; i++) {
 		__asm volatile("mfmsr %3;"
-			"mfpid %4;"
+			MFPID(%4)
 			"li %0,0;"
 			"mtmsr %0;"
 			"sync; isync;"
 			"tlbrelo %0,%5;"
 			"tlbrehi %1,%5;"
-			"mfpid %2;"
-			"mtpid %4;"
+			MFPID(%2)
+			MTPID(%4)
 			"mtmsr %3;"
 			"sync; isync"
 			: "=&r" (tlblo), "=&r" (tlbhi), "=r" (pid),

Reply via email to