[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