This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Re: update on gcc 3.0 CVS on embedded targets


I've spent a little time looking at i960 issues.  I can't do much at this
time though.  My primary concern is IA-64, and that takes up most of the time
I spend on gcc and binutils.  Plus the rules for working on gcc-3.0 have gotten
so involved that I don't have the time and energy to deal with them.

In general, I think you are going off on the wrong tack here.  It is a lot
easier to get a port working before we make a release than after we make a
release.  It would be a much better use of our time to get embedded cross
compiler ports working on the trunk, and keep them working, so that they will
be ready for gcc-3.1 and following releases.  We are likely to make a gcc-3.1
in 6 months or so, so this is only a temporary setback.

We simply don't have enough resources to try to fix every possible problem
with gcc-3.0.  It has been too long since the last release.  There are too
many new features, too much bit-rot, etc.  We need to prioritize our efforts.
We should concentrate on resolving all GNU/Linux system issues first.  This
will probably take several months alone.  Then we can worry about the
embedded cross compiler ports.  By then, we will be thinking about a gcc-3.1
release, so it would be best if we were fixing them on the trunk now.

As for the i960, it builds on the trunk.  However, it isn't working.  There
is one very serious problem, function return values are broken.  There are
also various problems with non-local gotos and hence exception handling.
All of these problems seem to be related to the mondo C++ EH rewrite.

i960 defines a "return" pattern in the md file.  This doesn't work anymore.
What happens is that when we convert trees to RTL, we emit a return insn
for the RETURN_EXPR.  Then, after we are done with the trees, we emit code
to load the return value into the hard return register, and then we emit
another return.  The optimizer then deletes the dead code and the result is
that functions never return values.  I think this broke as part of the mondo
C++ EH rewrite, but haven't spent enough time looking to figure out where the
bit-rot occurred.  This can be worked around by disabling the return pattern
for now.

This gets the i960 port mostly working, except that non-local gotos and C++ EH
still don't work.  There is something funny going on here.  The middle-end
is passing the wrong values to the non-local goto pattern in the i960.md file.
This is obvisouly a result of the mondo C++ EH patch, but I haven't spent
enough time looking at it yet to figure out what is wrong.

We will probably find similar issues with other embedded cross compilers
once we get past the cosmetic problems preventing them from building.

>i960-coff	PR3179 may still apply (undefined ref to c_lex when linking f771)

This one has been answered several times.  It is simply a matter of someone
merging a patch from the trunk to the gcc-3.0 branch.

>		PR3365 still applies

I haven't seen this one answered, but again, this can be fixed by merging a
patch from the trunk to the gcc-3.0 branch.

>i960-elf	PR3366 may or may not apply
>		  since it now fails differently

I haven't seen this, but then I haven't tried to build i960-elf in a very
long time.

Jim


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]