MIPS64r6
lib/mpi/generic_mpih-mul1.c:37:24: error: invalid use of a cast in a inline asm context requiring an l-value: remove the cast or build with -fheinous-gnu-extensions
umul_ppmm(prod_high, prod_low, s1_ptr[j], s2_limb);
~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
lib/mpi/longlong.h:664:22: note: expanded from macro 'umul_ppmm'
: "=d" ((UDItype)(w0)) \
~~~~~~~~~~^~~
lib/mpi/generic_mpih-mul1.c:37:13: error: invalid use of a cast in a inline asm context requiring an l-value: remove the cast or build with -fheinous-gnu-extensions
umul_ppmm(prod_high, prod_low, s1_ptr[j], s2_limb);
~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
lib/mpi/longlong.h:668:22: note: expanded from macro 'umul_ppmm'
: "=d" ((UDItype)(w1)) \
~~~~~~~~~~^~~
2 errors generated.
Workaround (still produces a warning):
--- a/lib/mpi/Makefile
+++ b/lib/mpi/Makefile
@@ -5,6 +5,8 @@
obj-$(CONFIG_MPILIB) = mpi.o
+CFLAGS_generic_mpih-mul1.o = -fheinous-gnu-extensions
+CFLAGS_generic_mpih-mul2.o = -fheinous-gnu-extensions
+CFLAGS_generic_mpih-mul3.o = -fheinous-gnu-extensions
+CFLAGS_mpih-div.o = -fheinous-gnu-extensions
+
mpi-y = \
generic_mpih-lshift.o \
generic_mpih-mul1.o \
Should be fixed in the same manner as #605 (https://git.kernel.org/torvalds/c/b0c091ae04f6746f541b9be91809e1f4f43e9a65), guess I didn鈥檛 fix the big endian case :(
@nathanchance I think we should dupe this to #991?
No since that is PowerPC. I can send a patch for this tomorrow.
right, but its a shared header I thought? Fixing the header fixes all of the sources that include them?
It is a shared header but it has a bunch of architecture specific asm in it that is surrounded by ifdefs.
Realistically, the header should probably be split up by architecture but that's not something I am interested in doing :)
@tpimh How do I reproduce this? In our Docker image, I get:
$ PATH=/usr/lib/llvm-11/bin:${PATH} make -j$(nproc) -s ARCH=mips CC=clang CROSS_COMPILE=mips-linux-gnu- HOSTCC=clang O=/out/mips distclean 64r6_defconfig lib/mpi/
Using /linux/arch/mips/configs/generic_defconfig as base
Merging /linux/arch/mips/configs/generic/64r6.config
Merging /linux/arch/mips/configs/generic/eb.config
./.config.64r6_defconfig:99:warning: override: CPU_BIG_ENDIAN changes choice state
Merging /linux/arch/mips/configs/generic/board-ranchu.config
Merging /linux/arch/mips/configs/generic/board-boston.config
.config:98:warning: override: CPU_BIG_ENDIAN changes choice state
error: ABI 'o32' is not supported on CPU 'mips64r6'
make[3]: *** [/linux/./Kbuild:48: missing-syscalls] Error 1
make[2]: *** [arch/mips/Makefile:416: archprepare] Error 2
make[1]: *** [/linux/Makefile:328: __build_one_by_one] Error 2
make: *** [Makefile:180: sub-make] Error 2
Looks like you are hitting #884, try unsetting CONFIG_MIPS32_O32 with ./scripts/config -d MIPS32_O32.
Okay, I can reproduce with this:
$ make -j$(nproc) -s ARCH=mips CROSS_COMPILE=mips-linux-gnu- LLVM=1 O=out/mips distclean 64r6_defconfig
...
$ ./scripts/config --file out/mips/.config -d MIPS32_O32 -e CRYPTO_RSA
$ make -j$(nproc) -s ARCH=mips CROSS_COMPILE=mips-linux-gnu- LLVM=1 O=out/mips olddefconfig all
...
lib/mpi/generic_mpih-mul1.c:37:24: error: invalid use of a cast in a inline asm context requiring an l-value: remove the cast
or build with -fheinous-gnu-extensions
umul_ppmm(prod_high, prod_low, s1_ptr[j], s2_limb);
~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
lib/mpi/longlong.h:664:22: note: expanded from macro 'umul_ppmm'
: "=d" ((UDItype)(w0)) \
~~~~~~~~~~^~~
lib/mpi/generic_mpih-mul1.c:37:13: error: invalid use of a cast in a inline asm context requiring an l-value: remove the cast
or build with -fheinous-gnu-extensions
umul_ppmm(prod_high, prod_low, s1_ptr[j], s2_limb);
~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
lib/mpi/longlong.h:668:22: note: expanded from macro 'umul_ppmm'
: "=d" ((UDItype)(w1)) \
~~~~~~~~~~^~~
2 errors generated.
...
Patch sent: https://lore.kernel.org/lkml/[email protected]/