powerpc: Introduce and enforce assembler checks on GPR usage
authorJ. Neuschäfer <j.ne@posteo.net>
Thu, 12 Dec 2024 17:05:47 +0000 (18:05 +0100)
committerTom Rini <trini@konsulko.com>
Mon, 30 Dec 2024 21:55:07 +0000 (15:55 -0600)
PowerPC general-purpose registers are historically specified as plain
numbers (0-31), which makes them hard to distinguish from immediates.
For this reason, include/ppc_asm.tmpl defines aliases named r0-r31.
This can still lead to uncaught mistakes if a register is used in place
of a number.

Instead of (e.g.) 5 use %r5, which will result in an assembler warning
if used as a number. Turn these warnings into errors by passing
`--fatal-warnings` to the assembler.

I verified with gazerbeam_defconfig (MPC83xx) and qemu-ppce500_defconfig
(MPC85xx) that this patch results in the same machine code.

Signed-off-by: J. Neuschäfer <j.ne@posteo.net>
arch/powerpc/config.mk
include/ppc_asm.tmpl

index dd0124c..6e30df6 100644 (file)
@@ -8,7 +8,7 @@ LDFLAGS_FINAL += --bss-plt
 PLATFORM_RELFLAGS += -fpic -mrelocatable -ffunction-sections \
 -fdata-sections -mcall-linux
 
-PF_CPPFLAGS_POWERPC    := $(call cc-option,-fno-ira-hoist-pressure,)
+PF_CPPFLAGS_POWERPC    := $(call cc-option,-fno-ira-hoist-pressure,) $(call cc-option,-Xassembler --fatal-warnings,)
 PLATFORM_CPPFLAGS += -D__powerpc__ -ffixed-r2 -m32 $(PF_CPPFLAGS_POWERPC)
 KBUILD_LDFLAGS  += -m32 -melf32ppclinux
 
index db7b166..0b858c4 100644 (file)
 
 
 /***************************************************************************
- * Register names
+ * Register names. The %r1 offers some error-checking in GNU as.
  */
-#define        r0      0
-#define        r1      1
-#define        r2      2
-#define        r3      3
-#define        r4      4
-#define        r5      5
-#define        r6      6
-#define        r7      7
-#define        r8      8
-#define        r9      9
-#define        r10     10
-#define        r11     11
-#define        r12     12
-#define        r13     13
-#define        r14     14
-#define        r15     15
-#define        r16     16
-#define        r17     17
-#define        r18     18
-#define        r19     19
-#define        r20     20
-#define        r21     21
-#define        r22     22
-#define        r23     23
-#define        r24     24
-#define        r25     25
-#define        r26     26
-#define        r27     27
-#define        r28     28
-#define        r29     29
-#define        r30     30
-#define        r31     31
+#define        r0      %r0
+#define        r1      %r1
+#define        r2      %r2
+#define        r3      %r3
+#define        r4      %r4
+#define        r5      %r5
+#define        r6      %r6
+#define        r7      %r7
+#define        r8      %r8
+#define        r9      %r9
+#define        r10     %r10
+#define        r11     %r11
+#define        r12     %r12
+#define        r13     %r13
+#define        r14     %r14
+#define        r15     %r15
+#define        r16     %r16
+#define        r17     %r17
+#define        r18     %r18
+#define        r19     %r19
+#define        r20     %r20
+#define        r21     %r21
+#define        r22     %r22
+#define        r23     %r23
+#define        r24     %r24
+#define        r25     %r25
+#define        r26     %r26
+#define        r27     %r27
+#define        r28     %r28
+#define        r29     %r29
+#define        r30     %r30
+#define        r31     %r31
 
 #if defined(CONFIG_MPC8xx)