This is the mail archive of the newlib@sourceware.org mailing list for the newlib project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[patch] tgamma() on 32bit double targets


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


Attachment: newlib-libc-tgamma.diff
Description: Text document


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]