xtensa: don't link with libgcc
authorMax Filippov <jcmvbkbc@gmail.com>
Mon, 18 Oct 2021 12:38:06 +0000 (05:38 -0700)
committerMax Filippov <jcmvbkbc@gmail.com>
Wed, 9 Mar 2022 22:03:23 +0000 (14:03 -0800)
libgcc may be absent or may have different ABI than the kernel. Don't
link with it. Drop declarations and export for helpers that are not
implemented. Use generic versions of DI mode multiplication and
comparisons. Drop register window spilling helper as it should never be
used by the compiler-generated code.

Signed-off-by: Max Filippov <jcmvbkbc@gmail.com>
arch/xtensa/Kconfig
arch/xtensa/Makefile
arch/xtensa/kernel/xtensa_ksyms.c

index 8ac599aa6d994780f67445646ef0a571de0bed53..b324f6743073910494589ae968fa9eb499104387 100644 (file)
@@ -20,6 +20,9 @@ config XTENSA
        select DMA_REMAP if MMU
        select GENERIC_ATOMIC64
        select GENERIC_IRQ_SHOW
+       select GENERIC_LIB_CMPDI2
+       select GENERIC_LIB_MULDI3
+       select GENERIC_LIB_UCMPDI2
        select GENERIC_PCI_IOMAP
        select GENERIC_SCHED_CLOCK
        select HAVE_ARCH_AUDITSYSCALL
index ee2769519eaf189804ddba6f7fd66a1b3b55eb74..725cd4cd8b30d9493783c6b6e922916af1cc6182 100644 (file)
@@ -51,13 +51,9 @@ KBUILD_CPPFLAGS += $(patsubst %,-I$(srctree)/%include,$(vardirs) $(plfdirs))
 
 KBUILD_DEFCONFIG := iss_defconfig
 
-# Find libgcc.a
-
-LIBGCC := $(shell $(CC) $(KBUILD_CFLAGS) -print-libgcc-file-name)
-
 head-y         := arch/xtensa/kernel/head.o
 
-libs-y         += arch/xtensa/lib/ $(LIBGCC)
+libs-y         += arch/xtensa/lib/
 
 boot           := arch/xtensa/boot
 
index d79edbb98d2a04bd05d0eb6ffb30f4e3e74c27d4..b0bc8897c924ff2006d9930b94067052d21dfe2b 100644 (file)
@@ -59,32 +59,18 @@ extern long long __ashldi3(long long, int);
 extern long long __lshrdi3(long long, int);
 extern int __divsi3(int, int);
 extern int __modsi3(int, int);
-extern long long __muldi3(long long, long long);
 extern int __mulsi3(int, int);
 extern unsigned int __udivsi3(unsigned int, unsigned int);
 extern unsigned int __umodsi3(unsigned int, unsigned int);
-extern unsigned long long __umoddi3(unsigned long long, unsigned long long);
-extern unsigned long long __udivdi3(unsigned long long, unsigned long long);
-extern int __ucmpdi2(int, int);
 
 EXPORT_SYMBOL(__ashldi3);
 EXPORT_SYMBOL(__ashrdi3);
 EXPORT_SYMBOL(__lshrdi3);
 EXPORT_SYMBOL(__divsi3);
 EXPORT_SYMBOL(__modsi3);
-EXPORT_SYMBOL(__muldi3);
 EXPORT_SYMBOL(__mulsi3);
 EXPORT_SYMBOL(__udivsi3);
 EXPORT_SYMBOL(__umodsi3);
-EXPORT_SYMBOL(__udivdi3);
-EXPORT_SYMBOL(__umoddi3);
-EXPORT_SYMBOL(__ucmpdi2);
-
-void __xtensa_libgcc_window_spill(void)
-{
-       BUG();
-}
-EXPORT_SYMBOL(__xtensa_libgcc_window_spill);
 
 unsigned int __sync_fetch_and_and_4(volatile void *p, unsigned int v)
 {