This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
3.3.1 - random bytes in object files
- From: Greg Schafer <gschafer at zip dot com dot au>
- To: gcc at gcc dot gnu dot org
- Date: Fri, 8 Aug 2003 14:49:56 +1000
- Subject: 3.3.1 - random bytes in object files
Hi
Should I always expect the exact same bytes in my compiled object files?
I would have thought "yes". And this has always been the case up until now.
While testing out 3.3.1 I noticed that my installations of libstdc++ were
not identical.
I've managed to narrow it down and the cause seems to be due to
-ffunction-sections
This is taken from libstdc++/src/io-inst.cc
----------
#include <ios>
#include <iomanip>
#include <iostream>
namespace std
{
// basic_ios
template class basic_ios<char>;
#ifdef _GLIBCPP_USE_WCHAR_T
template class basic_ios<wchar_t>;
#endif
// iomanip
template class _Setfill<char>;
template _Setfill<char> setfill(char);
#ifdef _GLIBCPP_USE_WCHAR_T
template class _Setfill<wchar_t>;
template _Setfill<wchar_t> setfill(wchar_t);
#endif
// iostream
template class basic_iostream<char>;
#ifdef _GLIBCPP_USE_WCHAR_T
template class basic_iostream<wchar_t>;
#endif
} // namespace std
----------
$ g++ -ffunction-sections -c io-inst.cc -o io-inst.o
$ mv io-inst.o io-inst.o.XXX
$ g++ -ffunction-sections -c io-inst.cc -o io-inst.o
$ strip io-inst.o*
$ cmp -lb io-inst.o.XXX io-inst.o
19646 170 x 70 8
19647 121 Q 144 d
19648 121 Q 122 R
19649 145 e 105 E
19650 64 4 127 W
Diffing objdump output shows me this:-
-132 .text._GLOBAL__I__ZNKSt8ios_base6getlocEvio_inst.ccxQQe4a 0000001c
00000000 00000000 00002590 2**1
+132 .text._GLOBAL__I__ZNKSt8ios_base6getlocEvio_inst.cc8dREWa 0000001c
00000000 00000000 00002590 2**1
-RELOCATION RECORDS FOR
[.text._GLOBAL__I__ZNKSt8ios_base6getlocEvio_inst.ccxQQe4a]: (none)
+RELOCATION RECORDS FOR
[.text._GLOBAL__I__ZNKSt8ios_base6getlocEvio_inst.cc8dREWa]: (none)
So what's up here? Is this a binutils problem or something wrong with the
compiler? If someone can confirm that I'm not going nuts, I'll happily file
a bug if indeed it is one.
Thanks for gcc.
Greg