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.