[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[microblaze-uclinux] microblaze c++ linker issue with new and delete operators



Hello.
I am facing some big problems using c++ compilers on microblaze target and new and delete operator.

My simple c++ programs is the following code snippet:

class Prova
{
    public:
        Prova();
	Prova(int p1, int p2);
	~Prova();
        int somma( int a, int b );
	int uno;
	int due;
};

Prova::Prova()
{
	uno = 7;
	due = 3;
}

Prova::Prova(int p1, int p2)
{
	if( p1 )
		uno = p1;
	if ( p2 )
		due = p2;
}

Prova::~Prova(void)
{
}

int Prova::somma( int a, int b )
{
	uno = a;
	due = b;
	return uno + due;
}

int main()
{
	Prova * pippo = new( Prova );
	int a, b;
	
	a = 7;
	b = 3;
	int c = pippo->somma(a,b);
	
	delete pippo;
	
	return c;
}

When launching compile command line:
$ ucfront-g++ mb-g++  -c -Os -g -fomit-frame-pointer -fno-common -fno-builtin -Wall   -msoft-float -mno-xl-soft-mul -mxl-barrel-shift -mno-xl-soft-div  -DEMBED -Dlinux -D__linux__ -Dunix -D__uClinux__   -W -Wall -Wredundant-decls -Wshadow -Wpointer-arith -Wpacked -Wcast-qual main.cpp -o main.o
everything was compiled fine.

But when I try to link this program, here it is the first problem:

ucfront-g++ mb-g++  -Wl,-elf2flt  -o appmain main.o
appmain.elf2flt: In function `main':
/home/gianluca/main.cpp(.text+0xc8): undefined reference to `operator new(unsigned long)'
/home/gianluca/main.cpp(.text+0x100): undefined reference to `operator delete(void*)'
collect2: ld returned 1 exit status
make: *** [appmain] Error 1

But, if I change the main() function to:

int main()
{
	Prova pippo;
	int a, b;
	
	a = 7;
	b = 3;
	int c = pippo.somma(a,b);
	
	return c;
}

Everything is working (and linking) as expected.
Why?
It looks like the linker/compiler doesn't complain about dynamic memory allocation of pointers with new and delete operators.

Another issue is about the linker command line:
if using the first code snippet and OMIT the (ucfront-g++) environment system, such as:
mb-g++ -o appmain main.o
Everything is finishing without any error!!!

Something related to syscall and gcc function call for memory allocation???

Any help, clue, hint will be appreciated.

Kind Regards,
-- 
Gianluca Renzi
___________________________
microblaze-uclinux mailing list
microblaze-uclinux@xxxxxxxxxxxxxx
Project Home Page : http://www.itee.uq.edu.au/~jwilliams/mblaze-uclinux
Mailing List Archive : http://www.itee.uq.edu.au/~listarch/microblaze-uclinux/