Page 1 of 1

EE Toolchain: Fabled Bug List

Posted: Sat Jan 24, 2004 7:43 am
by ooPo
We've been talking about these elusive, undescribed bugs in the EE toolchain for a while now. Everyone seems to think there is some, but nobody knows where they are. Sometimes a 'shift bug' is mentioned, but all I've been able to come up with is they're shifting in a way that is a known limitation of gcc - it doesn't work in gcc period.

So, here's your chance to tell us what you've run into. The more descriptive the better and if you can reproduce it you'll get bonus points. Once we get a list of some decent bugs, we can drop it into bugzilla and maybe bug people to fix them...

Posted: Sat Jan 24, 2004 8:52 am
by Warren
I think he's referring to the 3.2.2 based toolchain although all outstanding bugs in 2.95 would be nice as well. Please specify which version the bug applies to

Posted: Sat Jan 24, 2004 9:04 am
by ooPo
Yes, sorry. I should have stated that. :)

Posted: Sat Jan 24, 2004 11:46 am
by mrbrown
Although MrHTFord fixed up a lot of the C++ magic in GCC, the current method of initializing static/global constructors is incompatible with the older toolchain, and requires linking in the extra crt* files. The right way to do it is to have GCC generate a call to __main() at the beginning of main().

I'll do the bugzilla thing for it - can anyone specifically describe what they have to do to build/link C++ code using the 3.2.2 toolchain?

gcc-3.2.2 c++ issues.

Posted: Tue Feb 10, 2004 12:07 am
by MrHTFord
The fabled shift bug died when I fixed the second integer multiply (lo1/hi1)pipeline. I think it was a symptom of that problem. On the same note, code which does lots of integer multiplies gets a very good speed up due to this fix.

There is only one bug I'm aware of in the 3.2.2 toolchain as it stands. When you specify a big block on uninitialised data with alignment, it often gets put into the .bss section without the alignment. I've got a test case I can upload, if anyone's interested.

The hoops needed to get c++ static initialisers called with 3.2.2 are

1. add the following to your c++ file which contains the main() function:-

Code: Select all

extern "C"
{
extern void _init( void );
}
2. then at the top of the main() function, call _init as follows:-

Code: Select all

_init();
p.s. Bugzilla scares the crap outta me. Anyone know where I can find a gentle introduction to using it?