This is the mail archive of the
newlib@sourceware.org
mailing list for the newlib project.
Re: Building newlib without -mhard-float
On Sep 5, 2007, at 8:43 AM, Jeff Johnston wrote:
These are in the gcc lib: libgcc.a You need to add a -lgcc at the
end of your compile/link. If the compiler was built multilib, you
will need to specify the options you used to build newlib with
(e.g. -march=x -mcpu=y) as the compiler will match up a multilib
libgcc.a with those options. If you are using ld directly, you
will have to point to the appropriate subdirectory to find the
right libgcc.a.
I already link against libgcc.a. However, it seems to lack a great
many symbols. I've included the output from nm -g at the end of this
message. I also included a much longer list of link errors.
I configured GCC with:
$ arm-elf-gcc -v
Using built-in specs.
Target: arm-elf
Configured with: ../configure --prefix=/usr/local/arm2 --target=arm-
elf --with-cpu=xscale --with-float=soft --disable-multilib --disable-
interwork --enable-languages=c,c++ --disable-nls --enable-c99 --with-
newlib --enable-long-long
Thread model: single
gcc version 4.2.1
And I built newlib with:
$ ../configure --prefix=/usr/local/arm2 --target=arm-elf --disable-
newlib-supplied-syscalls --enable-newlib-io-long-long --enable-newlib-
multithreading --enable-newlib-io-pos-args --enable--newlib-io-long-
double --disable-multilib --with-float=soft --with-cpu=xscale
$ TARGET_CFLAGS="-mcpu=xscale -msoft-float" make
I notice that libgcc2.c conditionally compiles __udivdi3() with a
flag "L_udivdi3", but I don't know if that's getting set, or what
controls it. Any syggestions?
Thanks so much!
Symbols missing from libgcc.a (trimmed to narrow):
----------------------------------------------------------
$ arm-elf-gcc -Wl,-Map,mapfile.txt -mcpu=xscale -ffreestanding -
nostdlib -std=c99 -Xlinker --script=link.lds -o h.elf obj/start.o obj/
Util.o obj/glue.o obj/lcd.o obj/main.o -lgcc -lc -lm
vfprintf.c:877: undefined reference to `__ltdf2'
vfprintf.c:1226: undefined reference to `__eqdf2'
vfprintf.c:1256: undefined reference to `__nedf2'
vfprintf.c:1135: undefined reference to `__umoddi3'
vfprintf.c:1136: undefined reference to `__udivdi3'
vfprintf.c:1382: undefined reference to `__eqdf2'
vfprintf.c:1378: undefined reference to `__nedf2'
b/dtoa.c:60: undefined reference to `__udivsi3'
dtoa.c:282: undefined reference to `__nedf2'
dtoa.c:347: undefined reference to `__floatunsidf'
dtoa.c:356: undefined reference to `__subdf3'
dtoa.c:356: undefined reference to `__muldf3'
dtoa.c:356: undefined reference to `__adddf3'
dtoa.c:356: undefined reference to `__floatsidf'
dtoa.c:356: undefined reference to `__muldf3'
dtoa.c:356: undefined reference to `__adddf3'
dtoa.c:358: undefined reference to `__fixdfsi'
dtoa.c:359: undefined reference to `__ltdf2'
dtoa.c:364: undefined reference to `__ltdf2'
dtoa.c:457: undefined reference to `__muldf3'
dtoa.c:459: undefined reference to `__divdf3'
dtoa.c:471: undefined reference to `__ltdf2'
dtoa.c:477: undefined reference to `__muldf3'
dtoa.c:480: undefined reference to `__floatsidf'
dtoa.c:480: undefined reference to `__muldf3'
dtoa.c:480: undefined reference to `__adddf3'
dtoa.c:480: undefined reference to `__floatsidf'
dtoa.c:480: undefined reference to `__muldf3'
dtoa.c:480: undefined reference to `__adddf3'
dtoa.c:485: undefined reference to `__subdf3'
dtoa.c:486: undefined reference to `__gtdf2'
dtoa.c:488: undefined reference to `__ltdf2'
dtoa.c:556: undefined reference to `__muldf3'
dtoa.c:556: undefined reference to `__gedf2'
dtoa.c:450: undefined reference to `__divdf3'
dtoa.c:498: undefined reference to `__divdf3'
dtoa.c:498: undefined reference to `__subdf3'
dtoa.c:501: undefined reference to `__fixdfsi'
dtoa.c:502: undefined reference to `__floatsidf'
dtoa.c:502: undefined reference to `__subdf3'
dtoa.c:504: undefined reference to `__gtdf2'
dtoa.c:506: undefined reference to `__subdf3'
dtoa.c:506: undefined reference to `__gtdf2'
dtoa.c:506: undefined reference to `__subdf3'
dtoa.c:506: undefined reference to `__ltdf2'
dtoa.c:510: undefined reference to `__muldf3'
dtoa.c:511: undefined reference to `__muldf3'
dtoa.c:501: undefined reference to `__fixdfsi'
dtoa.c:502: undefined reference to `__floatsidf'
dtoa.c:502: undefined reference to `__subdf3'
dtoa.c:504: undefined reference to `__ltdf2'
dtoa.c:590: undefined reference to `__muldf3'
dtoa.c:590: undefined reference to `__nedf2'
dtoa.c:562: undefined reference to `__divdf3'
dtoa.c:562: undefined reference to `__fixdfsi'
dtoa.c:563: undefined reference to `__floatsidf'
dtoa.c:563: undefined reference to `__muldf3'
dtoa.c:563: undefined reference to `__subdf3'
dtoa.c:575: undefined reference to `__adddf3'
dtoa.c:576: undefined reference to `__ltdf2'
dtoa.c:576: undefined reference to `__eqdf2'
dtoa.c:359: undefined reference to `__floatsidf'
dtoa.c:359: undefined reference to `__nedf2'
dtoa.c:518: undefined reference to `__muldf3'
dtoa.c:521: undefined reference to `__fixdfsi'
dtoa.c:522: undefined reference to `__floatsidf'
dtoa.c:522: undefined reference to `__subdf3'
dtoa.c:519: undefined reference to `__muldf3'
dtoa.c:521: undefined reference to `__fixdfsi'
dtoa.c:522: undefined reference to `__floatsidf'
dtoa.c:522: undefined reference to `__subdf3'
dtoa.c:526: undefined reference to `__adddf3'
dtoa.c:526: undefined reference to `__gtdf2'
dtoa.c:528: undefined reference to `__subdf3'
dtoa.c:528: undefined reference to `__ltdf2'
dtoa.c:463: undefined reference to `__muldf3'
dtoa.c:468: undefined reference to `__muldf3'
--------------------------------------------------------------
$ arm-elf-nm -g /usr/local/arm2/lib/gcc/arm-elf/4.2.1/libgcc.a
_udivsi3.o:
00000000 T __aeabi_uidiv
000001f0 T __aeabi_uidivmod
U __div0
00000000 T __udivsi3
_divsi3.o:
00000000 T __aeabi_idiv
00000220 T __aeabi_idivmod
U __div0
00000000 T __divsi3
_umodsi3.o:
U __div0
00000000 T __umodsi3
_modsi3.o:
U __div0
00000000 T __modsi3
_dvmd_tls.o:
00000000 T __aeabi_idiv0
00000000 T __aeabi_ldiv0
00000000 T __div0
_bb_init_func.o:
_call_via_rX.o:
0000002c T _call_via_fp
00000030 T _call_via_ip
00000038 T _call_via_lr
00000000 T _call_via_r0
00000004 T _call_via_r1
00000008 T _call_via_r2
0000000c T _call_via_r3
00000010 T _call_via_r4
00000014 T _call_via_r5
00000018 T _call_via_r6
0000001c T _call_via_r7
00000020 T _call_via_r8
00000024 T _call_via_r9
00000028 T _call_via_sl
00000034 T _call_via_sp
_interwork_call_via_rX.o:
000002b0 T .Lchange_fp
000002ec T .Lchange_ip
00000364 T .Lchange_lr
0000001c T .Lchange_r0
00000058 T .Lchange_r1
00000094 T .Lchange_r2
000000d0 T .Lchange_r3
0000010c T .Lchange_r4
00000148 T .Lchange_r5
00000184 T .Lchange_r6
000001c0 T .Lchange_r7
000001fc T .Lchange_r8
00000238 T .Lchange_r9
00000274 T .Lchange_sl
00000328 T .Lchange_sp
00000004 T _arm_return
00000010 T _arm_return_r11
00000008 T _arm_return_r7
000002ac T _interwork_call_via_fp
000002e8 T _interwork_call_via_ip
00000360 T _interwork_call_via_lr
00000018 T _interwork_call_via_r0
00000054 T _interwork_call_via_r1
00000090 T _interwork_call_via_r2
000000cc T _interwork_call_via_r3
00000108 T _interwork_call_via_r4
00000144 T _interwork_call_via_r5
00000180 T _interwork_call_via_r6
000001bc T _interwork_call_via_r7
000001f8 T _interwork_call_via_r8
00000234 T _interwork_call_via_r9
00000270 T _interwork_call_via_sl
00000324 T _interwork_call_via_sp
000002d4 T _interwork_r11_call_via_fp
00000310 T _interwork_r11_call_via_ip
00000040 T _interwork_r11_call_via_r0
0000007c T _interwork_r11_call_via_r1
000000b8 T _interwork_r11_call_via_r2
000000f4 T _interwork_r11_call_via_r3
00000130 T _interwork_r11_call_via_r4
0000016c T _interwork_r11_call_via_r5
000001a8 T _interwork_r11_call_via_r6
000001e4 T _interwork_r11_call_via_r7
00000220 T _interwork_r11_call_via_r8
0000025c T _interwork_r11_call_via_r9
00000298 T _interwork_r11_call_via_sl
0000034c T _interwork_r11_call_via_sp
000002c0 T _interwork_r7_call_via_fp
000002fc T _interwork_r7_call_via_ip
0000002c T _interwork_r7_call_via_r0
00000068 T _interwork_r7_call_via_r1
000000a4 T _interwork_r7_call_via_r2
000000e0 T _interwork_r7_call_via_r3
0000011c T _interwork_r7_call_via_r4
00000158 T _interwork_r7_call_via_r5
00000194 T _interwork_r7_call_via_r6
000001d0 T _interwork_r7_call_via_r7
0000020c T _interwork_r7_call_via_r8
00000248 T _interwork_r7_call_via_r9
00000284 T _interwork_r7_call_via_sl
00000338 T _interwork_r7_call_via_sp
_lshrdi3.o:
00000000 T __aeabi_llsr
00000000 T __lshrdi3
_ashrdi3.o:
00000000 T __aeabi_lasr
00000000 T __ashrdi3
_ashldi3.o:
00000000 T __aeabi_llsl
00000000 T __ashldi3
_negdf2.o:
00000000 T __aeabi_dneg
00000000 T __negdf2
_addsubdf3.o:
0000000c T __adddf3
0000000c T __aeabi_dadd
00000000 T __aeabi_drsub
00000008 T __aeabi_dsub
0000030c T __aeabi_f2d
000002e0 T __aeabi_i2d
00000360 T __aeabi_l2d
000002b8 T __aeabi_ui2d
0000034c T __aeabi_ul2d
0000030c T __extendsfdf2
00000360 T __floatdidf
000002e0 T __floatsidf
0000034c T __floatundidf
000002b8 T __floatunsidf
00000008 T __subdf3
_muldivdf3.o:
0000026c T __aeabi_ddiv
00000000 T __aeabi_dmul
0000026c T __divdf3
00000000 T __muldf3
_cmpdf2.o:
000000b0 T __aeabi_cdcmpeq
000000b0 T __aeabi_cdcmple
00000094 T __aeabi_cdrcmple
000000c4 T __aeabi_dcmpeq
00000100 T __aeabi_dcmpge
00000114 T __aeabi_dcmpgt
000000ec T __aeabi_dcmple
000000d8 T __aeabi_dcmplt
00000010 T __cmpdf2
00000010 T __eqdf2
00000000 T __gedf2
00000000 T __gtdf2
00000008 T __ledf2
00000008 T __ltdf2
00000010 T __nedf2
_unorddf2.o:
00000000 T __aeabi_dcmpun
00000000 T __unorddf2
_fixdfsi.o:
00000000 T __aeabi_d2iz
00000000 T __fixdfsi
_fixunsdfsi.o:
00000000 T __aeabi_d2uiz
00000000 T __fixunsdfsi
_truncdfsf2.o:
00000000 T __aeabi_d2f
00000000 T __truncdfsf2
_negsf2.o:
00000000 T __aeabi_fneg
00000000 T __negsf2
_addsubsf3.o:
0000000c T __addsf3
0000000c T __aeabi_fadd
00000000 T __aeabi_frsub
00000008 T __aeabi_fsub
000001a4 T __aeabi_i2f
000001d4 T __aeabi_l2f
0000019c T __aeabi_ui2f
000001c4 T __aeabi_ul2f
000001d4 T __floatdisf
000001a4 T __floatsisf
000001c4 T __floatundisf
0000019c T __floatunsisf
00000008 T __subsf3
_muldivsf3.o:
00000198 T __aeabi_fdiv
00000000 T __aeabi_fmul
00000198 T __divsf3
00000000 T __mulsf3
_cmpsf2.o:
00000080 T __aeabi_cfcmpeq
00000080 T __aeabi_cfcmple
00000070 T __aeabi_cfrcmple
00000094 T __aeabi_fcmpeq
000000d0 T __aeabi_fcmpge
000000e4 T __aeabi_fcmpgt
000000bc T __aeabi_fcmple
000000a8 T __aeabi_fcmplt
00000010 T __cmpsf2
00000010 T __eqsf2
00000000 T __gesf2
00000000 T __gtsf2
00000008 T __lesf2
00000008 T __ltsf2
00000010 T __nesf2
_unordsf2.o:
00000000 T __aeabi_fcmpun
00000000 T __unordsf2
_fixsfsi.o:
00000000 T __aeabi_f2iz
00000000 T __fixsfsi
_fixunssfsi.o:
00000000 T __aeabi_f2uiz
00000000 T __fixunssfsi
_floatdidf.o:
_floatdisf.o:
_floatundidf.o:
_floatundisf.o:
_muldi3.o:
00000000 T __muldi3
_negdi2.o:
00000000 T __negdi2
_cmpdi2.o:
00000000 T __cmpdi2
_ucmpdi2.o:
00000000 T __ucmpdi2
_clear_cache.o:
00000000 T __clear_cache
_enable_execute_stack.o:
00000000 T __enable_execute_stack
_trampoline.o:
__main.o:
_absvsi2.o:
00000000 T __absvsi2
_absvdi2.o:
00000000 T __absvdi2
_addvsi3.o:
00000000 T __addvsi3
U abort
_addvdi3.o:
00000000 T __addvdi3
U abort
_subvsi3.o:
00000000 T __subvsi3
U abort
_subvdi3.o:
00000000 T __subvdi3
U abort
_mulvsi3.o:
00000000 T __mulvsi3
U abort
_mulvdi3.o:
00000000 T __mulvdi3
U abort
_negvsi2.o:
00000000 T __negvsi2
U abort
_negvdi2.o:
00000000 T __negvdi2
U abort
_ctors.o:
_ffssi2.o:
U __clz_tab
00000000 T __ffssi2
_ffsdi2.o:
U __clz_tab
00000000 T __ffsdi2
_clz.o:
00000000 R __clz_tab
_clzsi2.o:
U __clz_tab
00000000 T __clzsi2
_clzdi2.o:
U __clz_tab
00000000 T __clzdi2
_ctzsi2.o:
U __clz_tab
00000000 T __ctzsi2
_ctzdi2.o:
U __clz_tab
00000000 T __ctzdi2
_popcount_tab.o:
00000000 R __popcount_tab
_popcountsi2.o:
U __popcount_tab
00000000 T __popcountsi2
_popcountdi2.o:
U __popcount_tab
00000000 T __popcountdi2
_paritysi2.o:
00000000 T __paritysi2
_paritydi2.o:
00000000 T __paritydi2
_powisf2.o:
U __divsf3
U __mulsf3
00000000 T __powisf2
_powidf2.o:
U __divdf3
U __muldf3
00000000 T __powidf2
_powixf2.o:
_powitf2.o:
_mulsc3.o:
U __addsf3
00000000 T __mulsc3
U __mulsf3
U __nesf2
U __subsf3
_muldc3.o:
U __adddf3
00000000 T __muldc3
U __muldf3
U __nedf2
U __subdf3
_mulxc3.o:
_multc3.o:
_divsc3.o:
U __addsf3
00000000 T __divsc3
U __divsf3
U __eqsf2
U __ltsf2
U __mulsf3
U __nesf2
U __subsf3
_divdc3.o:
U __adddf3
00000000 T __divdc3
U __divdf3
U __eqdf2
U __ltdf2
U __muldf3
U __nedf2
U __subdf3
_divxc3.o:
_divtc3.o:
_fixunsxfsi.o:
_fixsfdi.o:
00000000 T __fixsfdi
U __fixunssfdi
U __ltsf2
_fixunssfdi.o:
U __adddf3
U __extendsfdf2
U __fixunsdfsi
00000000 T __fixunssfdi
U __floatunsidf
U __muldf3
_fixdfdi.o:
00000000 T __fixdfdi
U __fixunsdfdi
U __ltdf2
_fixunsdfdi.o:
U __adddf3
00000000 T __fixunsdfdi
U __fixunsdfsi
U __floatunsidf
U __muldf3
_fixxfdi.o:
_fixunsxfdi.o:
_floatdixf.o:
_floatundixf.o:
_fixtfdi.o:
_fixunstfdi.o:
_floatditf.o:
_floatunditf.o:
_eprintf.o:
__gcc_bcmp.o:
00000000 T __gcc_bcmp
_divdi3.o:
U __clz_tab
00000000 T __divdi3
U __udivsi3
U __umodsi3
_moddi3.o:
U __clz_tab
00000000 T __moddi3
U __udivsi3
U __umodsi3
_udivdi3.o:
U __clz_tab
00000000 T __udivdi3
U __udivsi3
U __umodsi3
_umoddi3.o:
U __clz_tab
U __udivsi3
00000000 T __umoddi3
U __umodsi3
_udiv_w_sdiv.o:
00000000 T __udiv_w_sdiv
_udivmoddi4.o:
U __clz_tab
00000000 T __udivmoddi4
U __udivsi3
U __umodsi3
unwind-dw2.o:
unwind-dw2-fde.o:
00001280 T _Unwind_Find_FDE
000014cc T __deregister_frame
000014c8 T __deregister_frame_info
000013e8 T __deregister_frame_info_bases
00000f40 T __register_frame
00000118 T __register_frame_info
000000b0 T __register_frame_info_bases
00000178 T __register_frame_info_table
00000124 T __register_frame_info_table_bases
00000f20 T __register_frame_table
U abort
U free
U malloc
U strlen
unwind-sjlj.o:
00000228 T _Unwind_Backtrace
00000208 T _Unwind_DeleteException
000000bc T _Unwind_FindEnclosingFunction
00000050 T _Unwind_GetCFA
000000c4 T _Unwind_GetDataRelBase
00000040 T _Unwind_GetGR
00000070 T _Unwind_GetIP
00000080 T _Unwind_GetIPInfo
000000a8 T _Unwind_GetLanguageSpecificData
000000b4 T _Unwind_GetRegionStart
000000cc T _Unwind_GetTextRelBase
00000060 T _Unwind_SetGR
00000098 T _Unwind_SetIP
000003d0 T _Unwind_SjLj_ForcedUnwind
0000042c T _Unwind_SjLj_RaiseException
00000000 T _Unwind_SjLj_Register
00000370 T _Unwind_SjLj_Resume
00000504 T _Unwind_SjLj_Resume_or_Rethrow
00000038 T _Unwind_SjLj_Unregister
U abort
gthr-gnat.o:
00000000 T __gnat_default_lock
00000004 T __gnat_default_unlock
00000008 T __gnat_install_locks
00000024 T __gthread_active_p
0000002c T __gthread_mutex_lock
00000048 T __gthread_mutex_unlock
unwind-c.o:
U _Unwind_GetDataRelBase
U _Unwind_GetIPInfo
U _Unwind_GetLanguageSpecificData
U _Unwind_GetRegionStart
U _Unwind_GetTextRelBase
U _Unwind_SetGR
U _Unwind_SetIP
0000032c T __gcc_personality_sj0
U abort