Subject: softfloat fixuns woes
To: None <current-users@netbsd.org, bjh21@netbsd.org,>
From: Richard Earnshaw <rearnsha@arm.com>
List: tech-toolchain
Date: 11/01/2003 11:19:16
In the a.out-on-ARM days we used to build libc with implementations of
__fixunsdfsi and __fixunssfsi, but since we've switched to ELF we've
dropped these two functions from our libc. However, we haven't dropped
__fixdfdi or __fixunsdfdi and there is a linkage chain between these two
and __fixunsdfsi which is normally resolved by linking against libgcc.a.
This has two nasty consequences:
1) It means that every application linked against libc.so gets
__fixunsdfsi linked into the main binary, even though it might never need
it.
2) It completely breaks when using the new assembler/linker and a FSF
build of gcc-3.4, where libgcc is built with all the support functions
marked as .hidden (libraries are clearly intended to be built
self-contained or linked against the shared libgcc.so). And the latest
versions of ld enforce this correctly.
It seems to me that the only solution here is to add the relevant
__fixunsdfsi function back into our libc.so.
__fixunssfsi is similar, but the one use of this is in gmon.o, but that's
a bug (the '#ifndef notdef' conditional is reversed).
Comments?
R.