EE Toolchain: Fabled Bug List

Discuss the development of software, tools, libraries and anything else that helps make ps2dev happen.

Moderators: cheriff, Herben

Post Reply
ooPo
Site Admin
Posts: 2023
Joined: Sat Jan 17, 2004 9:56 am
Location: Canada
Contact:

EE Toolchain: Fabled Bug List

Post 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...
Warren
Posts: 175
Joined: Sat Jan 24, 2004 8:26 am
Location: San Diego, CA

Post 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
ooPo
Site Admin
Posts: 2023
Joined: Sat Jan 17, 2004 9:56 am
Location: Canada
Contact:

Post by ooPo »

Yes, sorry. I should have stated that. :)
mrbrown
Site Admin
Posts: 1537
Joined: Sat Jan 17, 2004 11:24 am

Post 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?
MrHTFord

gcc-3.2.2 c++ issues.

Post 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?
Post Reply