GCC 4.1.1 m68k-rtems generating invalid code for -m5307 processor ?

Chris Johns chrisj at rtems.org
Mon Jun 25 13:17:49 UTC 2007


Ian Caddy wrote:
> Hi Kevin,
> 
> We also use the 5307 for our system, and are currently using gcc 4.1.1 
> and we don't see your problem.
> 
> Below is the disassembly for the start of memset similar to yours:
> 
> 
> 080bd600 <memset>:
>   80bd600:	4e56 0000      	linkw %fp,#0
>   80bd604:	2f03           	movel %d3,%sp at -
>   80bd606:	2f02           	movel %d2,%sp at -
>   80bd608:	262e 0008      	movel %fp@(8),%d3
>   80bd60c:	226e 0010      	moveal %fp@(16),%a1
>   80bd610:	2203           	movel %d3,%d1
>   80bd612:	4282           	clrl %d2
>   80bd614:	142e 000f      	moveb %fp@(15),%d2
>   80bd618:	7003           	moveq #3,%d0
>   80bd61a:	b089           	cmpl %a1,%d0
>   80bd61c:	6404           	bccs 80bd622 <memset+0x22>
>   80bd61e:	c083           	andl %d3,%d0
>   80bd620:	6712           	beqs 80bd634 <memset+0x34>
>   80bd622:	4a89           	tstl %a1
>   80bd624:	6758           	beqs 80bd67e <memset+0x7e>
>   80bd626:	1002           	moveb %d2,%d0
>   80bd628:	2041           	moveal %d1,%a0
>   80bd62a:	d3c1           	addal %d1,%a1
> 
> Note that ours seems to be producing valid code just after the first bcc.
> 

The asm comes back into sync at:

   80bd620:	6712           	beqs 80bd634 <memset+0x34>

and so there are 2 extra bytes in the output. This is not just a corruption, 
it is an extra opcodes. See how the original offset is more:

400149ee:       6712            beqs 40014a02 <memset+0x36>

The +0x34 for your code and +0x36 for the posted code. Ian, the rtems-4.8 
tools generate the same code you.

> You indicated that you built your tools.  Have you tried the standard 
> toolsets from the RTEMS website?

The rpms on the RTEMS build machine show:

[chrisjohns at england build]$ ls /opt/rtems-4.7/m68k-rtems4.7/lib/
crt0.o  ldscripts  libc.a  libg.a  libm.a  m5200  m68000  m68030  m68040 
m68060  mcpu32  msoft-float
[chrisjohns at england build]$ ls /opt/rtems-4.8/m68k-rtems4.8/lib/
crt0.o  ldscripts  libc.a  libg.a  libm.a  m5200  m68000  m68030  m68040 
m68060  mcpu32  msoft-float

No V3 specific builds in the released tool sets.

> 
> regards,
> 
> Ian Caddy
> 
> 
> 
> 
> Kirspel, Kevin wrote:
>> I have built the following environment for the m68k-rtems target:
>>
>>  
>>
>> binutils-2.17       with patch binutils-2.17-rtems4.7-20061021.diff
>>
>> gcc-4.1.1           with patch gcc-core-4.1.1-rtems4.7-20070102.diff
>>
>> newlib-1.14.0     with patch newlib-1.15.0-rtems4.7-20070208.diff
>>
>>  
>>
>> I have created an MCF5329EVB BSP in the RTEMS 4.7 branch.  Since GCC 
>> 4.1.1 does not support the MCF5329 processor I had to use the –m5307 

And GCC should not support CPU types based on a mix of on-chip hardware. If 
the core had extra executed instructions *and* gcc could use them then that 
would be a reason to consider a new machine option.

Does the -m5307 actually cause GCC to generate different code for RTEMS ? In 
the gcc 4.2.0 m68k back end code I can see differences for the Coldfire FPU, 
and a HW DIV but that is all. I am no gcc expert so it may pay to ask on the 
gcc list.

>> option to generate V3 code ( I think this should work ).  The RTEMS 
>> compilation was successfully.  Using GDB, I ran the hello.exe sample 
>> test.  The hello.exe fails during the _IO_Manager_initialization() 
>> function where is calls memset().  After single stepping through 
>> memset(), the programmed dies when the PC reaches the instruction at 
>> 0x400149ea.  I disassembled hello and got the following output for memset():
>>
>>  
>>
>> 400149cc <memset>:
>>
>> 400149cc:         4e56 0000         linkw %fp,#0
>>
>> 400149d0:         2f03                  movel %d3,%sp at -
>>
>> 400149d2:         2f02                  movel %d2,%sp at -
>>
>> 400149d4:         262e 0008         movel %fp@(8),%d3
>>
>> 400149d8:         226e 0010         moveal %fp@(16),%a1
>>
>> 400149dc:         2203                 movel %d3,%d1
>>
>> 400149de:         4282                 clrl %d2
>>
>> 400149e0:         142e 000f          moveb %fp@(15),%d2
>>
>> 400149e4:         7003                 moveq #3,%d0
>>
>> 400149e6:         b089                 cmpl %a1,%d0
>>
>> 400149e8:         6406                 bccs 400149f0 <memset+0x24>
>>
>> 400149ea:         e8c3                 0164303
>>
>> 400149ec:         0782                 bclr %d3,%d2
>>



More information about the users mailing list