gcc cvs (010922) build error on ia64

Jim Wilson wilson@cygnus.com
Tue Sep 25 13:24:00 GMT 2001


>	GCC 3.0.2 and the trunk now define TARGET_VTABLE_USES_DESCRIPTORS
>on IA-64.  Is that an incompatible change?

Yes.  C++ vtables before and after the change are not compatible.  This
is why IA-64 gcc 3.0.2 is not compatible with IA-64 gcc 3.0.1.  This was
necessary for ABI compliance.

>	On a related note, should all targets with function descriptors
>(e.g., AIX and 64-bit PowerPC Linux) use that macro as well?

I think this would have to be investigated on an individual basis.  For
IA-64, putting the function descriptor in the vtable removes one branch
from the execution path, but it makes vtables bigger, and requires special
relocations and special assembler syntax for the vtables, and it also
apparently causes other problems.  Richard commented on this briefly in one
of his messages when asked about java.

Bryce McKinlay...
Do we need to handle storing function descriptors in the interface
tables for IA64?

Richard Henderson...
Nope.  In fact the only real reason to do it for vtables
is that someone decided that it was a good idea for c++.
Better would have been a scheme that didn't require any
dynamic relocations, or at least one that could use lazy
binding, but...

There is also the fact that this is an ABI change, which would be a problem
for established systems.  IA-64 is still new enough that we can get ABI
changes in, though we expect that this is the last one that we will need.

Jim



More information about the Gcc mailing list