Module Name: src Committed By: rin Date: Sat May 7 04:19:22 UTC 2022
Modified Files: src/sys/arch/powerpc/booke: trap_subr.S Log Message: Make this assemble correctly with clang. At the moment, clang wrongly handles m[ft]sprgN (N >= 4); use m[ft]spr for SPR_SPRGN instead. Now, clang-compiled kernel seems working just fine on my RB800! To generate a diff of this commit: cvs rdiff -u -r1.13 -r1.14 src/sys/arch/powerpc/booke/trap_subr.S 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/booke/trap_subr.S diff -u src/sys/arch/powerpc/booke/trap_subr.S:1.13 src/sys/arch/powerpc/booke/trap_subr.S:1.14 --- src/sys/arch/powerpc/booke/trap_subr.S:1.13 Mon Jul 6 10:16:12 2020 +++ src/sys/arch/powerpc/booke/trap_subr.S Sat May 7 04:19:22 2022 @@ -1,4 +1,4 @@ -/* $NetBSD: trap_subr.S,v 1.13 2020/07/06 10:16:12 rin Exp $ */ +/* $NetBSD: trap_subr.S,v 1.14 2022/05/07 04:19:22 rin Exp $ */ /*- * Copyright (c) 2010, 2011 The NetBSD Foundation, Inc. * All rights reserved. @@ -34,7 +34,7 @@ * POSSIBILITY OF SUCH DAMAGE. */ -RCSID("$NetBSD: trap_subr.S,v 1.13 2020/07/06 10:16:12 rin Exp $") +RCSID("$NetBSD: trap_subr.S,v 1.14 2022/05/07 04:19:22 rin Exp $") #ifdef _KERNEL_OPT #include "opt_altivec.h" @@ -68,15 +68,20 @@ RCSID("$NetBSD: trap_subr.S,v 1.13 2020/ * needed, saves sprg3, and then refers to the save using a * displacement of -amount. */ + /* + * XXXclang + * At the moment, clang cannot correctly assemble m[ft]sprgN + * (N >= 4); use m[ft]spr for SPR_SPRGN instead. + */ #define FRAME_EXC_PROLOGUE(start, sprg, srr) \ - mt##sprg %r2; /* save r2 */ \ + mtspr sprg,%r2; /* save r2 */ \ mfsprg3 %r2; /* get save_area pointer */ \ addi %r2,%r2,4*(32-start); \ /* allocate save area */ \ mtsprg3 %r2; /* save updated pointer */ \ stmw %r##start,-4*(32-start)(%r2); \ /* free r24-r31 for use */ \ - mf##sprg %r26; /* get saved r2 */ \ + mfspr %r26,sprg; /* get saved r2 */ \ mfcr %r27; /* get Condition Register */ \ mfxer %r28; /* get XER */ \ mfspr %r30, SPR_##srr##0; /* get SRR0 */ \ @@ -103,41 +108,41 @@ RCSID("$NetBSD: trap_subr.S,v 1.13 2020/ mtsrr1 r #define FRAME_PROLOGUE \ - FRAME_EXC_PROLOGUE(26, sprg1, SRR) + FRAME_EXC_PROLOGUE(26, SPR_SPRG1, SRR) #define FRAME_PROLOGUE_DEAR_ESR \ - FRAME_EXC_PROLOGUE(24, sprg1, SRR); \ + FRAME_EXC_PROLOGUE(24, SPR_SPRG1, SRR); \ PROLOGUE_GET_ESR; \ PROLOGUE_GET_DEAR #define FRAME_PROLOGUE_ESR \ - FRAME_EXC_PROLOGUE(25, sprg1, SRR); \ + FRAME_EXC_PROLOGUE(25, SPR_SPRG1, SRR); \ PROLOGUE_GET_ESR #define FRAME_TLBPROLOGUE \ - FRAME_EXC_PROLOGUE(20, sprg1, SRR); \ + FRAME_EXC_PROLOGUE(20, SPR_SPRG1, SRR); \ PROLOGUE_GET_ESR; \ PROLOGUE_GET_DEAR #define FRAME_INTR_PROLOGUE \ - FRAME_EXC_PROLOGUE(26, sprg1, SRR) + FRAME_EXC_PROLOGUE(26, SPR_SPRG1, SRR) /* * These need to save SRR0/SRR1 as well their SRR0/SRR1 in case normal * exceptions happened during their execution. */ #define FRAME_CRIT_PROLOGUE \ - FRAME_EXC_PROLOGUE(24, sprg4, CSRR); \ + FRAME_EXC_PROLOGUE(24, SPR_SPRG4, CSRR); \ PROLOGUE_GET_SPRG1; \ PROLOGUE_GET_SRRS #define FRAME_MCHK_PROLOGUE \ - FRAME_EXC_PROLOGUE(24, sprg5, MCSRR); \ + FRAME_EXC_PROLOGUE(24, SPR_SPRG5, MCSRR); \ PROLOGUE_GET_SPRG1; \ PROLOGUE_GET_SRRS #define FRAME_DEBUG_PROLOGUE \ - FRAME_EXC_PROLOGUE(24, sprg4, CSRR); \ + FRAME_EXC_PROLOGUE(24, SPR_SPRG4, CSRR); \ PROLOGUE_GET_SPRG1; \ PROLOGUE_GET_SRRS