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