How to choose the right libstdc++.so with soft-float?

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi all.  I'm cross-compiling (using GCC 3.4.4) for a ppc440 target
without hardware floating point.  The default configuration for our
target is currently to enable FP emulation in the kernel (Linux 2.6.14),
then compile our code with the default PPC flags (which use hard-float).

We have discovered that there is a significant-enough performance impact
to this that we want to switch to soft-float.  So, I've rebuilt all our
target code (including glibc etc.) with "-mcpu=440 -msoft-float".  This
works... mostly: we are seeing an issue with exceptions in C++ code
(catch/throw) where exceptions that should be caught are not being
caught.

Inspecting the results of the GCC build I see that hard vs. soft float
for compiler-owned libraries (libgcc and libstdc++) are handled in two
different ways: for libgcc, there are shared libs created with two
different names (i.e., libgcc_s and libgcc_s_soft-float).  If I check my
target filesystem I see both those .so's exist and if I use objdump I
can see that my applications are linked with libgcc_s_soft-float, so
that's all good.

However, libstdc++ is handled differently: the compiler build generates
both a lib/libstdc++.so and also a lib/soft-float/libstdc++.so (same
names, different directories).  On my target filesystem there is only
one: /usr/lib/libstdc++.so and investigation shows this to be the fp
version, not the soft-float version.


So!  My question is this: what is the proper way to have the soft-float
version used instead?  I can think of a few different options: (1) copy
the soft-float version over the hard-float version when I create my
target filesystem; (2) add /usr/lib/soft-float/... with those libraries
and fix up /etc/ld.so.conf to add that path before /usr/lib (currently I
don't even create ld.so.cache but I could do so).  Other ideas?  Any
thoughts on which is the "intended" way for it to work?

Would this be considered a bug in GCC?  Should libstdc++ handle
soft-float more gracefully, similar to how libgcc does it using
different sonames, so that both types of apps can co-exist?

Any thoughts or info is greatly appreciated!

-- 
-----------------------------------------------------------------------------
 Paul D. Smith <psmith@xxxxxxxxxxx>                       http://netezza.com
 "Please remain calm--I may be mad, but I am a professional."--Mad Scientist
-----------------------------------------------------------------------------
      These are my opinions--Netezza takes no responsibility for them.

[Index of Archives]     [Linux C Programming]     [Linux Kernel]     [eCos]     [Fedora Development]     [Fedora Announce]     [Autoconf]     [The DWARVES Debugging Tools]     [Yosemite Campsites]     [Yosemite News]     [Linux GCC]

  Powered by Linux