We are running a survey to help us improve the experience for all of our members. If you see the survey appear, please take the time to tell us about your experience if you can.
Good moorning,
I am trying to compile libgcc for arm-none-eabi target from scratch, since I need to compare Floating Point SW emulation on an ARM Cortex-M4 and Risc-V based processors. The problem is that by default GCC includes the optimized version of FP SW emulation functions which is ieee754-sf.S.
Does anyone knows how to exclude ieee754-sf.S in the libgcc compilation process? In particular how to configure GCC?
Thanks,
Edit: I had mistakenly built the a-profile toolchain, hence the mix of thumb and arm instructions for armv7e-m. The toolchain (built with the diff below) did work for compiling a small test program for armv7-a, as verified by running a statically built binary with qemu-arm.
The diff remains as before, and is given below. I will attempt to build an arm-none-eabi with libgcc.a to see if the diff needs any changes.
diff -ru org/gcc-10.2.0/gcc/config/arm/arm.c gcc-10.2.0/gcc/config/arm/arm.c --- org/gcc-10.2.0/gcc/config/arm/arm.c 2020-07-23 12:05:17.344384552 +0530 +++ gcc-10.2.0/gcc/config/arm/arm.c 2020-11-26 12:50:11.121893412 +0530 @@ -2531,6 +2531,7 @@ /* For Linux, we have access to kernel support for atomic operations. */ if (arm_abi == ARM_ABI_AAPCS_LINUX) init_sync_libfuncs (MAX_SYNC_LIBFUNC_SIZE); + return; /* There are no special library functions unless we are using the ARM BPABI. */ diff -ru org/gcc-10.2.0/libgcc/config/arm/sfp-machine.h gcc-10.2.0/libgcc/config/arm/sfp-machine.h --- org/gcc-10.2.0/libgcc/config/arm/sfp-machine.h 2020-07-23 12:05:18.752400064 +0530 +++ gcc-10.2.0/libgcc/config/arm/sfp-machine.h 2020-11-26 13:31:10.565636471 +0530 @@ -67,7 +67,7 @@ # define _strong_alias(name, aliasname) \ extern __typeof (name) aliasname __attribute__ ((alias (#name))); -#ifdef __ARM_EABI__ +#if 0 /* Rename functions to their EABI names. */ /* The comparison functions need wrappers for EABI semantics, so leave them unmolested. */ diff -ru org/gcc-10.2.0/libgcc/config/arm/t-arm gcc-10.2.0/libgcc/config/arm/t-arm --- org/gcc-10.2.0/libgcc/config/arm/t-arm 2020-07-23 12:05:18.752400064 +0530 +++ gcc-10.2.0/libgcc/config/arm/t-arm 2020-11-26 12:18:01.909926794 +0530 @@ -1,6 +1,7 @@ LIB1ASMSRC = arm/lib1funcs.S LIB1ASMFUNCS = _thumb1_case_sqi _thumb1_case_uqi _thumb1_case_shi \ _thumb1_case_uhi _thumb1_case_si _speculation_barrier +LIB2ADD += $(srcdir)/udivmodsi4.c $(srcdir)/udivmod.c $(srcdir)/divmod.c HAVE_CMSE:=$(findstring __ARM_FEATURE_CMSE,$(shell $(gcc_compile_bare) -dM -E - </dev/null)) HAVE_V81M:=$(findstring armv8.1-m.main,$(gcc_compile_bare)) diff -ru org/gcc-10.2.0/libgcc/config/arm/t-softfp gcc-10.2.0/libgcc/config/arm/t-softfp --- org/gcc-10.2.0/libgcc/config/arm/t-softfp 2020-07-23 12:05:18.752400064 +0530 +++ gcc-10.2.0/libgcc/config/arm/t-softfp 2020-11-26 13:28:39.584201073 +0530 @@ -1,2 +1,3 @@ -softfp_wrap_start := '\#if !__ARM_ARCH_ISA_ARM && __ARM_ARCH_ISA_THUMB == 1' +softfp_wrap_start := '\#if 1' softfp_wrap_end := '\#endif' +softfp_exclude_libgcc2 := n diff -ru org/gcc-10.2.0/libgcc/Makefile.in gcc-10.2.0/libgcc/Makefile.in --- org/gcc-10.2.0/libgcc/Makefile.in 2020-07-23 12:05:18.748400018 +0530 +++ gcc-10.2.0/libgcc/Makefile.in 2020-11-26 13:30:50.989201425 +0530 @@ -484,14 +484,14 @@ $(gcc_compile) -DL$* -xassembler-with-cpp -c $< -include $*.vis $(patsubst %,%.vis,$(LIB1ASMFUNCS)): %.vis: %_s$(objext) $(gen-hide-list) -libgcc-objects += $(lib1asmfuncs-o) +#libgcc-objects += $(lib1asmfuncs-o) lib1asmfuncs-s-o = $(patsubst %,%_s$(objext),$(LIB1ASMFUNCS)) $(lib1asmfuncs-s-o): %_s$(objext): $(srcdir)/config/$(LIB1ASMSRC) $(gcc_s_compile) -DL$* -xassembler-with-cpp -c $< ifeq ($(enable_shared),yes) -libgcc-s-objects += $(lib1asmfuncs-s-o) +#libgcc-s-objects += $(lib1asmfuncs-s-o) endif diff -ru org/gcc-10.2.0/libsanitizer/asan/asan_linux.cpp gcc-10.2.0/libsanitizer/asan/asan_linux.cpp --- org/gcc-10.2.0/libsanitizer/asan/asan_linux.cpp 2020-07-23 12:05:19.124404163 +0530 +++ gcc-10.2.0/libsanitizer/asan/asan_linux.cpp 2020-11-26 07:06:35.712906746 +0530 @@ -199,7 +199,9 @@ Die(); } } - +#ifndef PATH_MAX +#define PATH_MAX 1024 +#endif void AsanCheckIncompatibleRT() { if (ASAN_DYNAMIC) { if (__asan_rt_version == ASAN_RT_VERSION_UNDEFINED) {