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

Re: [openrisc] GCC problem



* vbaksa@nimbuswireless.com (vbaksa@nimbuswireless.com) wrote:
> During debugging a RTOS kernel I discovered that following statement 
> caused the Link Address Register R9[LR] to be set to 0.  Because of this 
> kernel crashed. 
> RTOSTcbHigRdy = RTOSTcbPrioTbl[(y << 3) + RTOSUnMapTbl
> [RTOSRdyTbl[y]]];
> 
> To avoid this problem and to make the kernel work I split the previous 
> statement to following 3 statements: 
>     i = RTOSRdyTbl[y];
>     t = (y << 3) + RTOSUnMapTbl[i];
>     RTOSTCBHighRdy = RTOSTCBPrioTbl[t];
> 
> Local variables and global arrays used in both cases are as follow:
>     ULONG         y, t, i;                       // Locals
>     ULONG         RTOSRdyTbl[];            // Global array
>     ULONG         RTOSUnMapTbl[];        // Global array
>     ULONG        *RTOSTCBPrioTbl[];      // Global array
> 
> I used following compiler options to build the kernel:
>     rtostest-O0.o: rtostest.c
>          or32-uclinux-gcc -g -O0 $? -c -o $@
>     rtostest-O2.o: rtostest.c
>          or32-uclinux-gcc -g -O2 $? -c -o $@
> 
> I believe that cause of the problem is how the gcc compiler handles 
> multiple array indexing.  
> Would you look at this problem and suggest which compiler option to use 
> to avoid this kind of problems in the future.

first i would suggest you try with gcc-3.2.3 (just added into
cvs) and letting us know if it fixes your problem.

p.
--
To unsubscribe from openrisc mailing list please visit http://www.opencores.org/mailinglists.shtml