-----Fredrik Hederstierna/INT/SE/DIR/SECURITAS wrote: ----- To: aph@xxxxxxxxxx From: Fredrik Hederstierna/INT/SE/DIR/SECURITAS Date: 03/28/2012 11:33AM Cc: gcc-help@xxxxxxxxxxx Subject: Re: Bare metal ARM Cross compiler for arm-none-eabi target without libunwind? >> We generate the map-file, the content tells that (if I understand correctly) >> >> "_divdi3.o" use "__aeabi_unwind_cpp_pr0" which resides in "unwind-arm.o". >> >> Is it really correct that we need unwind-support if just using division? >> Could it be that _divdi3 can 'throw' division-by-zero 'exception' ? >> (We have overloaded div0: "void __div0(void) { assert(0); }" so we dont want unwinding here anyway...) > >I suspect (but you'll have to check) that this is because _divdi3 is >compiled with exceptions, and this is indeed because division by zero >might throw. The simplest fix is to compile it without exceptions. >The correct fix is to make unwinding work on your platform. I've been investigating the libgcc sources, what do you think of something alike this solution Today in "gcc/libgcc/Makefile.in" its filtered on which functions that should be compiled with unwind-info: # These might cause a divide overflow trap and so are compiled with # unwinder info. LIB2_DIVMOD_FUNCS = _divdi3 _moddi3 _udivdi3 _umoddi3 _udiv_w_sdiv _udivmoddi4 What if this could be overridden by configuration option? Eg. +# Check if we want to exclude unwind support. +ifeq ($(enable_libunwind_exceptions),yes) # These might cause a divide overflow trap and so are compiled with # unwinder info. LIB2_DIVMOD_FUNCS = _divdi3 _moddi3 _udivdi3 _umoddi3 _udiv_w_sdiv _udivmoddi4 +endif In this case all libgcc will be build 'normally' without extra unwind build stuff? The 'enable_libunwind_exceptions' have to be set somehow when running 'configure'. Thanks/Fredrik