[patch] tgamma() on 32bit double targets
Ralf Corsepius
ralf.corsepius@rtems.org
Wed Jan 12 07:04:00 GMT 2011
Hi,
On targets with 32bit-doubles (here: avr atmega128), I am facing this
linker error below, when trying to link a program using tgamma:
> configure:5612: avr-rtems4.11-gcc -o conftest.exe -mmcu=atmega128 -Os -g -Wall -Wimplicit-function-declaration -Wstrict-prototypes -Wnested-externs conftest.c -lm >&5
...
> /opt/rtems-4.11/lib/gcc/avr-rtems4.11/4.5.2/../../../../avr-rtems4.11/lib/avr51/libm.a(lib_a-er_gamma.o): In function `__ieee754_gamma_r':
> /builddir/build/BUILD/rtems-4.11-avr-rtems4.11-gcc-4.5.2/build/avr-rtems4.11/avr51/newlib/libm/math/../../../../../../gcc-4.5.2/newlib/libm/math/er_gamma.c:31: undefined reference to `__ieee754_exp'
> /opt/rtems-4.11/lib/gcc/avr-rtems4.11/4.5.2/../../../../avr-rtems4.11/lib/avr51/libm.a(lib_a-er_lgamma.o): In function `__ieee754_lgamma_r':
> /builddir/build/BUILD/rtems-4.11-avr-rtems4.11-gcc-4.5.2/build/avr-rtems4.11/avr51/newlib/libm/math/../../../../../../gcc-4.5.2/newlib/libm/math/er_lgamma.c:233: undefined reference to `__ieee754_log'
> /builddir/build/BUILD/rtems-4.11-avr-rtems4.11-gcc-4.5.2/build/avr-rtems4.11/avr51/newlib/libm/math/../../../../../../gcc-4.5.2/newlib/libm/math/er_lgamma.c:232: undefined reference to `__ieee754_log'
> /builddir/build/BUILD/rtems-4.11-avr-rtems4.11-gcc-4.5.2/build/avr-rtems4.11/avr51/newlib/libm/math/../../../../../../gcc-4.5.2/newlib/libm/math/er_lgamma.c:201: undefined reference to `__kernel_cos'
> /builddir/build/BUILD/rtems-4.11-avr-rtems4.11-gcc-4.5.2/build/avr-rtems4.11/avr51/newlib/libm/math/../../../../../../gcc-4.5.2/newlib/libm/math/er_lgamma.c:240: undefined reference to `__ieee754_log'
> /builddir/build/BUILD/rtems-4.11-avr-rtems4.11-gcc-4.5.2/build/avr-rtems4.11/avr51/newlib/libm/math/../../../../../../gcc-4.5.2/newlib/libm/math/er_lgamma.c:295: undefined reference to `__ieee754_log'
> /builddir/build/BUILD/rtems-4.11-avr-rtems4.11-gcc-4.5.2/build/avr-rtems4.11/avr51/newlib/libm/math/../../../../../../gcc-4.5.2/newlib/libm/math/er_lgamma.c:299: undefined reference to `__ieee754_log'
> /builddir/build/BUILD/rtems-4.11-avr-rtems4.11-gcc-4.5.2/build/avr-rtems4.11/avr51/newlib/libm/math/../../../../../../gcc-4.5.2/newlib/libm/math/er_lgamma.c:175: undefined reference to `__kernel_sin'
> /builddir/build/BUILD/rtems-4.11-avr-rtems4.11-gcc-4.5.2/build/avr-rtems4.11/avr51/newlib/libm/math/../../../../../../gcc-4.5.2/newlib/libm/math/er_lgamma.c:250: undefined reference to `__ieee754_log'
> /builddir/build/BUILD/rtems-4.11-avr-rtems4.11-gcc-4.5.2/build/avr-rtems4.11/avr51/newlib/libm/math/../../../../../../gcc-4.5.2/newlib/libm/math/er_lgamma.c:306: undefined reference to `__ieee754_log'
> /builddir/build/BUILD/rtems-4.11-avr-rtems4.11-gcc-4.5.2/build/avr-rtems4.11/avr51/newlib/libm/math/../../../../../../gcc-4.5.2/newlib/libm/math/er_lgamma.c:206: undefined reference to `__kernel_sin'
> /builddir/build/BUILD/rtems-4.11-avr-rtems4.11-gcc-4.5.2/build/avr-rtems4.11/avr51/newlib/libm/math/../../../../../../gcc-4.5.2/newlib/libm/math/er_lgamma.c:205: undefined reference to `__kernel_cos'
From what I see in newlib's sources, this issue originates from newlib
providing __ieee754_exp, __kernel_* etc. only if
"#ifndef _DOUBLE_IS_32BITS" applies.
The code for tgamma() in libm/math/w_tgamma.c, however blindly applies
__ieee754_gamma_r(), independently of "#ifndef _DOUBLE_IS_32BITS".
Below is my attempt to fix this by mapping tgamma() to tgammaf() on
32bits targets.
Ralf
-------------- next part --------------
An embedded and charset-unspecified text was scrubbed...
Name: newlib-libc-tgamma.diff
URL: <http://sourceware.org/pipermail/newlib/attachments/20110112/d9bafcdd/attachment.ksh>
More information about the Newlib
mailing list