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

[microblaze-uclinux] C++ and mb-gcc



Hi,

I know that there has been a short discussion regarding C++ support
unde uClinux, and I wish to find out if anybody has got any further?

We're developing on the Microblaze, using the Xilinx ported GNU tools
(mb-gcc etc) and are using the xilkernel as a light weight OS.

The problems we seem to be having I think are related to the compiler,
thus it seems that instructions are being created incorrectly (see
below).  In addition, when using initially the string class, and
mapping malloc() to something useful, none of the methods are
implemented (i.e. ->assign, ->c_str etc).

Is this something that is known as "future work", is it something
Xilinx related, is it completely new or is there something we can do
to ensure that the tools behave themselves?

Thanks,

Stef

======

Source:

if (at_end)
{
	... code ...
}
// FIX:START
// Works with 2+ nop
asm("nop;nop;nop;");
// FIX:END

With 3 NOPS
+++++++++++

8000bc48:	80000000 	or	r0, r0, r0
/* Strange branch instruction here.  Never changes from
/* 0x8000bc98 ...
8000bc4c:	bc1d004c 	beqi	r29, 76		// 8000bc98
8000bc50:	b0008000 	imm	-32768
...
8000bc88:	80000000 	or	r0, r0, r0
8000bc8c:	f8730020 	swi	r3, r19, 32
-> NOP?	8000bc90:	80000000 	or	r0, r0, r0
-> NOP?	8000bc94:	80000000 	or	r0, r0, r0
/* Branch from 0x8000bc4c to here...
-> NOP	8000bc98:	80000000 	or	r0, r0, r0
8000bc9c:	b0008000 	imm	-32768
8000bca0:	30a0bd90 	addik	r5, r0, -17008

With 2 NOPS
+++++++++++

8000bc48:	80000000 	or	r0, r0, r0
/* Here's that branch instruction again.  Still 0x8000bc98 ...
8000bc4c:	bc1d004c 	beqi	r29, 76		// 8000bc98
8000bc50:	b0008000 	imm	-32768
...
8000bc88:	80000000 	or	r0, r0, r0
8000bc8c:	f8730020 	swi	r3, r19, 32
-> NOP?	8000bc90:	80000000 	or	r0, r0, r0
-> NOP?	8000bc94:	80000000 	or	r0, r0, r0
/* Branch to here this time...
8000bc98:	b0008000 	imm	-32768
8000bc9c:	30a0bd88 	addik	r5, r0, -17016
8000bca0:	b9f48770 	brlid	r15, -30864	// 80004410 <printf>

With 1 NOP
++++++++++

8000bc48:	80000000 	or	r0, r0, r0
/* Here's that branch instruction again.  Still 0x8000bc98 ...
8000bc4c:	bc1d004c 	beqi	r29, 76		// 8000bc98
8000bc50:	b0008000 	imm	-32768
...
8000bc88:	80000000 	or	r0, r0, r0
8000bc8c:	f8730020 	swi	r3, r19, 32
-> NOP?	8000bc90:	80000000 	or	r0, r0, r0
8000bc94:	b0008000 	imm	-32768
/* Branch to here this time... same address different instruction
8000bc98:	30a0bd88 	addik	r5, r0, -17016
8000bc9c:	b9f48774 	brlid	r15, -30860	// 80004410 <printf>

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