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),