This is the mail archive of the newlib@sourceware.org mailing list for the newlib project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

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



Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]