[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [MiNT] gcc 4.2.2 patch
MiKRO wrote :
This patch is an addition to Vincent's gcc 4.2.2 patch (20071212). I
didn't use the newest one since I (freemint) use old binutils 2.13.1
and according to Vincent's note in history log, I shouldn't use old
binutils and his newest gcc4 patch.
Don't be afraid of my latest GCC patch. The issue is about CONSTRUCTORS.
It is a list of functions which have to be called before main(). It is
used in C++ for calling the constructors of the global variables (if
they have a specific constructor), or functions explicitly tagged with
__attribute__((constructor)). Because the CONSTRUCTORS list contains
function pointers, it has to be relocated. The original binutils patch
didn't relocate the CONSTRUCTORS list at all. Thus, I'm pretty sure that
if a program using CONSTRUCTORS is compiled with GCC 2.95.3 and linked
with binutils 2.13.1, it will crash before main(). In my earlier
patches, I put a workaround in GCC in order to relocate the CONSTRUCTORS
at run time. Recently, I managed to persuade the linker to put the
CONSTRUCTORS into the relocation table as expected. So I removed the
workaround in GCC. My binutils and GCC patches are now 100% clean - as
far as CONSTRUCTORS are concerned ;-)
So my latest patch for GCC 4.2.2 and GCC 2.95.3 are more similar than
before, because none of them use a CONSTRUCTORS workaroud !
Because CONSTRUCTORS is rarely used in the real MiNT world (C++ program
+ global variables having constructors), we are very unlikely going to
see any problem between the different GCC and binutils versions.
This patch will probably work also with the newest Vincent's gcc4
patch but I didn't test it.
Sure it will work !
I will include it in my next update.
Thank you for your work and your patience !
Btw, I've tried to compile&run my port of quake with my gcc4 and guess
what... it crashed :(
Well, you'll have to investigate a bit.
Try to compile it without optimization.
Maybe there is a bug somewhere, and it appears only now.
It is very unlikely to be a stack problem this time.
I imagine that you didn't recompile all the libraries.
GCC 4 has some debugging facilities, however I didn't test it.
I must admit that I'm not completely sure that the code generated with
GCC 4.2.2 is fully binary compatible with the libraries compiled with
GCC 2.95.3...
Well, I'm sure you will find the reason of this crash very soon !
--
Vincent Rivière