Problem with overlays and virtual functions.

Peter Rönnquist peter.ronnquist@contextvision.se
Tue Mar 3 12:10:00 GMT 2009


Hi all,

We have a problem with vtables and segments when using overlays for SPUs on
the CELL.

The seg.map shows that a virtual function seems to be put on address zero:

xxxx.seg.map
-----------------------------
.a(lib_a-impure.o)
 .data.impure_data
                0x00000000000001b0      0x300
/opt/cell/sysroot/usr/spu/lib/libc.a(lib_a-impure.o)

.rodata._ZTVZ20GOPFilterxxxE10CLinexxx
                0x0000000000000000       0x10
 .rodata._ZTVZ20GOPFilterxxxE10CLinexxx
                0x0000000000000000       0x10 ../spu_obj/GOPFilterxxx.o
                0x0000000000000000                vtable for
GOPFilterxxx::CLinexxx
-----------------------------

Notice that the address changes from 0x00000000000001b0 to
0x0000000000000000.

The following addresses are then incremented from zero. This also gives the
consequence that the .toe section is not calculated correctly.

We have put all our classes locally inside a C declared function to “hide”
the C++ features from the linker and it seems to work well except for
virtual functions.

Because of the vtable problem we are now thinking of abandoning using
virtual functions and using function pointers instead. We have not managed
to find detailed information regarding linking overlays and C++ source code.

Do you recommend against using virtual functions or is there a way to get
around this problem?

Thank you,
Peter Ronnquist






More information about the Binutils mailing list