Date: Mon, 17 Feb 2003 15:46:15 +0100 From: Dag-Erling Smorgrav <des@ofug.org> To: current@freebsd.org Subject: -fno-builtin world breaks in gperf Message-ID: <xzp1y2755jc.fsf@flood.ping.uio.no>
next in thread | raw e-mail | index | archive | help
c++ -O2 -pipe -fno-builtin -march=k6-2 -g -I/usr/src/gnu/usr.bin/gperf/../../
../contrib/gperf/lib -I/usr/src/gnu/usr.bin/gperf -o gperf bool-array.o gen-per
f.o hash-table.o iterator.o key-list.o list-node.o main.o new.o options.o read-l
ine.o trace.o vectors.o version.o hash.o getopt.o getopt1.o
/usr/obj/usr/src/i386/usr/lib/libstdc++.so: undefined reference to `fabsl'
*** Error code 1
Our libm doesn't seem to support long double at all, yet our libstdc++
requires long double support. It seems to correctly detect the
absence of a "real" fabsl() and the presence of the gcc builtin, but
then goes on to use the fabsl() instead of __builtin_fabsl() in at
least one instance (src/contrib/libstdc++/libmath/stubs.c). There's a
similar problem with sqrtl(). The following quick hack allows gperf
to build:
Index: libmath/stubs.c
===================================================================
RCS file: /home/ncvs/src/contrib/libstdc++/libmath/stubs.c,v
retrieving revision 1.1.1.1
diff -u -r1.1.1.1 stubs.c
--- libmath/stubs.c 28 May 2002 16:16:02 -0000 1.1.1.1
+++ libmath/stubs.c 17 Feb 2003 14:41:38 -0000
@@ -127,9 +127,9 @@
long double
hypotl(long double x, long double y)
{
- long double s = fabsl(x) + fabsl(y);
+ long double s = __builtin_fabsl(x) + __builtin_fabsl(y);
x /= s; y /= s;
- return s * sqrtl(x * x + y * y);
+ return s * __builtin_sqrtl(x * x + y * y);
}
#endif
but it's not a good long-term solution since it won't work on !gcc.
DES
--
Dag-Erling Smorgrav - des@ofug.org
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-current" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?xzp1y2755jc.fsf>
