Bug in newlib-1.8.1?
Kai Ruottu
karuottu@freenet.hut.fi
Wed Sep 9 12:08:00 GMT 1998
Hi all,
Some time in July I wrote to this list about problems with newlib-1.8.1
and powerpc-eabi target...
I got an answer from Ranjith <ranjith@cygnus.com> saying:
> I compiled your test case and used our simulator to verify the output.
> My results are all correct (the same as your newlib-1.8.0 output).
Unfortunately Ranjith didn't mention the host used... Sparc Solaris2?
Now I decided to upgrade a couple target compilers, especially the
'v850-elf32'-one that hasn't worked quite well, with egcs-1.1a and
newlib-1.8.1 and got quite the same kind of problems with them :
My little test program :
#include <stdio.h>
#include <float.h>
int
main()
{
double d = FLT_MIN;
printf ("%.17e\n", d / 2);
printf("g-style big:\t\"%.60g\"\n", 1e20);
printf ("%15.5e\n", 4.9406564584124654e-324);
return 0;
}
When using newlib-1.8.0 all tools give the same correct output:
5.87747175411143754e-39
g-style big: "100000000000000000000"
4.94066e-324
But when using newlib-1.8.1, all kind of bullshit is got instead:
With 'gcc-ppc-eabi' :
0.00000000000000000e-40
g-style big: "147452918349690830848"
0.00000e+2147483646
With 'gcc-mips-ecoff' :
;.75090776864575142e-39
g-style big: "147523287093870182400"
program stopped with signal 7.
With 'gcc-v850-elf32' :
;.75108713484905318e-39
g-style big: "147525572073966534656"
0.00000e+2147483646
All the runs were done using the simulators for the targets, included
in gdb-4.17 or gdb-4.17.1. The host where the compilers & libs were
made was RH4.0 / Linux-2.0.32 / egcs-1.0.2. The cross-compiler versions
were egcs-1.0.3a (ppc and mips) and egcs-1.1a (v850-elf32).
Earlier I checked all my ppc-eabi target simulators under Linux, Win32
and DJGPP/go32 hosts and all these (x86-hosts!) gave the same result.
So my conclusion is that the problem lies with newlib-1.8.1 or the 'x86'
as the host for simulators...
BTW, for those wondering how I could use newlib-1.8.0 with the 'v850' when
this target wasn't supported with it:
The newlib-1.8.0 for 'v850-elf32' was got by copying the v850-specific dirs:
'newlib/libc/machine/v850' and 'newlib/libc/sys/sysnecv850' to newlib-1.8.0
sources, adding the configure info from newlib-1.8.1 for v850 into
'newlib/configure.in', configuring for 'v850-elf32' and doing the build ...
Just a piece of cake because of the very good backwards compatability... Now
the 'v850-elf32' target tools seem to work a lot better...
Has anyone got something similar with other hosts and targets? Any fixes
available? (Ok, newlib-1.8.0 is good enough for me, just being worried
about newlib-1.8.1 and the 'x86' as the host for simulators...)
Any help will be appreciated...
Regards, Kai
PS. What the hell is that __attribute__((__sda__)) in <sys/config.h> :
#ifdef __v850
#define __IEEE_LITTLE_ENDIAN
#define __ATTRIBUTE_IMPURE_PTR__ __attribute__((__sda__))
#endif
(perhaps this was aimed to be '__attribute__ ((__section__ (".sdata")))',
to which I changed it...)
and what are the 'v850-elf32-gcc' options :
-msmall-sld -mno-app-regs
(the 'sparc' targets know the '-mapp-regs'/'-mno-app-regs', I just
disabled them with an inserted '#')
which 'newlib/configure.in' tries to use for the 'v850-elf32' target
compiler?
More information about the crossgcc
mailing list