powerpc: Introduce and enforce assembler checks on GPR usage

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>
This commit is contained in:
J. Neuschäfer 2024-12-12 18:05:47 +01:00 committed by Tom Rini
parent fd1c2938c0
commit c3e425ead4
2 changed files with 34 additions and 34 deletions

View file

@ -8,7 +8,7 @@ LDFLAGS_FINAL += --bss-plt
PLATFORM_RELFLAGS += -fpic -mrelocatable -ffunction-sections \ PLATFORM_RELFLAGS += -fpic -mrelocatable -ffunction-sections \
-fdata-sections -mcall-linux -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) PLATFORM_CPPFLAGS += -D__powerpc__ -ffixed-r2 -m32 $(PF_CPPFLAGS_POWERPC)
KBUILD_LDFLAGS += -m32 -melf32ppclinux KBUILD_LDFLAGS += -m32 -melf32ppclinux

View file

@ -45,40 +45,40 @@
/*************************************************************************** /***************************************************************************
* Register names * Register names. The %r1 offers some error-checking in GNU as.
*/ */
#define r0 0 #define r0 %r0
#define r1 1 #define r1 %r1
#define r2 2 #define r2 %r2
#define r3 3 #define r3 %r3
#define r4 4 #define r4 %r4
#define r5 5 #define r5 %r5
#define r6 6 #define r6 %r6
#define r7 7 #define r7 %r7
#define r8 8 #define r8 %r8
#define r9 9 #define r9 %r9
#define r10 10 #define r10 %r10
#define r11 11 #define r11 %r11
#define r12 12 #define r12 %r12
#define r13 13 #define r13 %r13
#define r14 14 #define r14 %r14
#define r15 15 #define r15 %r15
#define r16 16 #define r16 %r16
#define r17 17 #define r17 %r17
#define r18 18 #define r18 %r18
#define r19 19 #define r19 %r19
#define r20 20 #define r20 %r20
#define r21 21 #define r21 %r21
#define r22 22 #define r22 %r22
#define r23 23 #define r23 %r23
#define r24 24 #define r24 %r24
#define r25 25 #define r25 %r25
#define r26 26 #define r26 %r26
#define r27 27 #define r27 %r27
#define r28 28 #define r28 %r28
#define r29 29 #define r29 %r29
#define r30 30 #define r30 %r30
#define r31 31 #define r31 %r31
#if defined(CONFIG_MPC8xx) #if defined(CONFIG_MPC8xx)