Re: MIPS cross-compilers on Solaris and Linux hosts generate slightly different code
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Barry Wealand wrote:
Hello -
We're using GCC 4.0.0, with binutils 2.15, both configured and built
for a mips-elf target, and hosted on both Solaris and Linux host
machines. All tools are configured and built identically on both
hosts. I then use the tools to build and install newlib-1.13.0, also
configured an built identically on both hosts.
Hmmm, I could expect the $build platform being the same for all the
hosts one could need... Not so many have both Solaris and Linux machines
on their tables, only one platform
on which to build everything... That a Linux-user has Sparc/Solarix2.x
and x86/Solaris2.x crosstoolchains installed and then can produce tools
for these too, shouldn't be that
rare when the Solaris2.x stuff for the latest versions is freely
available...
Your 'identically' doesn't sound such for me... The tools used in the
hosts can generate different results. It is not GCC, binutils, ld etc.
GNU tools but also tools like 'yacc' or
'bison', 'flex', 'sed' which are different and could even produce
different source files for the GCC being built.
And yet the generated (MIPS) libraries have subtle differences. For
example, I notice different register usage and instruction sequencing
in the code generated for the _calloc_r newlib function. I suspect
that both generated sequences are correct, but I have this intuitive
expectation that they should be identical (for some reason). Am I wrong?
My thought is similar, the results made from just the same sources
should be identical...
That you cared to build newlib twice is of course somehow unexpected,
doing it once with either GCC should be enough for most... But which one
could be more reliable...
I noticed just now that the native gcc's, used to build the
cross-toolchains, are version 3.2.2 on the Solaris machine and version
3.2 on the Linux machine. Does this make a difference?
I would suspect the other tools which are producing sources. Also all
kind of 'gen*' executables running on the $build platform and handling
the '*.md' files could behave differently
and produce different results, source files which then will be compiled
with the $host compiler (3.2.2 or 3.2 in your case).
When doing everything on one $build system (Linux/x86), I could
recommend this approach... Not too many different inputs for the build
process.
[Index of Archives]
[Linux C Programming]
[Linux Kernel]
[eCos]
[Fedora Development]
[Fedora Announce]
[Autoconf]
[The DWARVES Debugging Tools]
[Yosemite Campsites]
[Yosemite News]
[Linux GCC]