| From 4198bac49c3e05888cb98cea583f0ea075dda7e7 Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Fri, 2 Jul 2021 16:28:37 +0200 |
| Subject: mips: always link byteswap helpers into decompressor |
| |
| From: Arnd Bergmann <arnd@arndb.de> |
| |
| [ Upstream commit cddc40f5617e53f97ef019d5b29c1bd6cbb031ec ] |
| |
| My series to clean up the unaligned access implementation |
| across architectures caused some mips randconfig builds to |
| fail with: |
| |
| mips64-linux-ld: arch/mips/boot/compressed/decompress.o: in function `decompress_kernel': |
| decompress.c:(.text.decompress_kernel+0x54): undefined reference to `__bswapsi2' |
| |
| It turns out that this problem has already been fixed for the XZ |
| decompressor but now it also shows up in (at least) LZO and LZ4. From my |
| analysis I concluded that the compiler could always have emitted those |
| calls, but the different implementation allowed it to make otherwise |
| better decisions about not inlining the byteswap, which results in the |
| link error when the out-of-line code is missing. |
| |
| While it could be addressed by adding it to the two decompressor |
| implementations that are known to be affected, but as this only adds |
| 112 bytes to the kernel, the safer choice is to always add them. |
| |
| Fixes: c50ec6787536 ("MIPS: zboot: Fix the build with XZ compression on older GCC versions") |
| Fixes: 0652035a5794 ("asm-generic: unaligned: remove byteshift helpers") |
| Link: https://lore.kernel.org/linux-mm/202106301304.gz2wVY9w-lkp@intel.com/ |
| Link: https://lore.kernel.org/linux-mm/202106260659.TyMe8mjr-lkp@intel.com/ |
| Link: https://lore.kernel.org/linux-mm/202106172016.onWT6Tza-lkp@intel.com/ |
| Link: https://lore.kernel.org/linux-mm/202105231743.JJcALnhS-lkp@intel.com/ |
| Signed-off-by: Arnd Bergmann <arnd@arndb.de> |
| Signed-off-by: Thomas Bogendoerfer <tsbogend@alpha.franken.de> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| arch/mips/boot/compressed/Makefile | 4 ++-- |
| 1 file changed, 2 insertions(+), 2 deletions(-) |
| |
| diff --git a/arch/mips/boot/compressed/Makefile b/arch/mips/boot/compressed/Makefile |
| index f93f72bcba97..0db5b2c38893 100644 |
| --- a/arch/mips/boot/compressed/Makefile |
| +++ b/arch/mips/boot/compressed/Makefile |
| @@ -40,7 +40,7 @@ GCOV_PROFILE := n |
| UBSAN_SANITIZE := n |
| |
| # decompressor objects (linked with vmlinuz) |
| -vmlinuzobjs-y := $(obj)/head.o $(obj)/decompress.o $(obj)/string.o |
| +vmlinuzobjs-y := $(obj)/head.o $(obj)/decompress.o $(obj)/string.o $(obj)/bswapsi.o |
| |
| ifdef CONFIG_DEBUG_ZBOOT |
| vmlinuzobjs-$(CONFIG_DEBUG_ZBOOT) += $(obj)/dbg.o |
| @@ -54,7 +54,7 @@ extra-y += uart-ath79.c |
| $(obj)/uart-ath79.c: $(srctree)/arch/mips/ath79/early_printk.c |
| $(call cmd,shipped) |
| |
| -vmlinuzobjs-$(CONFIG_KERNEL_XZ) += $(obj)/ashldi3.o $(obj)/bswapsi.o |
| +vmlinuzobjs-$(CONFIG_KERNEL_XZ) += $(obj)/ashldi3.o |
| |
| extra-y += ashldi3.c |
| $(obj)/ashldi3.c: $(obj)/%.c: $(srctree)/lib/%.c FORCE |
| -- |
| 2.30.2 |
| |