This is the mail archive of the crossgcc@sources.redhat.com mailing list for the crossgcc project.
See the CrossGCC FAQ for lots more information.
| Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
|---|---|---|
| Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
| Other format: | [Raw text] | |
Moving from gcc2.95.2 to gcc3.0.3 I've started getting "undefined
reference to non-virtual thunk" messages, which stop me from linking.
This is with gcc cross-compiled for arm-aout.
It looks as though vtables in one compilation unit are referencing thunk
functions which are defined *local* in another, which doesn't work.
Here's some sample code that provokes the problem. It has 3 files,
foo.h, foo.cc and bar.cc, which are compiled and linked together using
the arm-a.out toolchain (gcc 3.0.3, binutils 2.11). The commands used are:
arm-gcc-3 -c -O2 foo.cc
arm-gcc-3 -c -O2 bar.cc
arm-gcc-3 -nostdlib foo.o bar.o
//// foo.h ////
struct B1 {
virtual ~B1();
};
struct B2 {
virtual ~B2();
virtual void bar() = 0;
};
struct C : public B1, public B2 {
virtual ~C();
void bar();
};
/// foo.cc ////
#include "foo.h"
C c;
B1::~B1(){}
B2::~B2(){}
C::~C() {}
void C::bar(){}
//// bar.cc ////
#include "foo.h"
struct B3 {
virtual ~B3() {}
};
struct D : public C {
virtual void x();
};
void D::x() {}
D d;
With gcc2.95.2 this links fine (apart from the expected unresolved
references to the standard c++ support code) but in gcc3.0.3 I get the
following:
...
bar.o(.text+0x2c): undefined reference to `non-virtual thunk to C::bar()'
Now, running 'nm' on foo.o, you get:
00000148 t non-virtual thunk to C::bar()
In other words, this thunk function exists, but is local to foo.o, which
explains why it can't be used in bar.o.
What's going on? Is this a bug?
This problem was also mentioned here:
http://groups.google.com/groups?selm=9ke60q%24qq8%241%40versa.smarts.com
As far as I can tell, the problem *doesn't* arise for x86/ELF/gcc3.
Thanks in advance for any hints,
Luke Diamand
--
GlobespanVirata http://www.globespanvirata.com
Cambridge
Tel: +44 1223 707400 Fax: +44 1223 707447
------
Want more information? See the CrossGCC FAQ, http://www.objsw.com/CrossGCC/
Want to unsubscribe? Send a note to crossgcc-unsubscribe@sources.redhat.com
| Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
|---|---|---|
| Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |