On 08/13/2010 10:52 AM, Mike Frysinger wrote: > On Thu, Aug 12, 2010 at 10:40 PM, Thomas Chou wrote: >> The "Nios II Processor Reference Handbook" said, >> "call can transfer execution anywhere within the 256 MByte range >> determined by PC31..28. The Nios II GNU linker does not automatically >> handle cases in which the address is out of this range." >> >> So we have to use registered "callr" instruction to do the job. > > doesnt NIOS have an insn to call indirectly via a register ? > typically that's how function pointers should be handled when gcc > generates code. > -mike > > Hi Mike,
The nios2 does have "callr" instruction to do registered call. But the nios2 gcc didn't generate correct code when the reset vector is passed as a constant. It just generated a direct "call", which was wrong when the reset vector was not located in the same 256MB span as u-boot. The gcc does generate correct "callr" if the reset vector is passed as an argument. As Altera said, this is a limitation (or bug?) of nios2 toolchain. So I'd take a similar inline asm approach as we do in linux kernel. Best regards, Thomas _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot