Hi,
I got it. It's compiler issue. The call of SYS_Jump2App is translated in this way:

se_lwz instruction is used to load the reset vector from flash. But this instruction should not be used because r0 is not replaced by zero but by content of r0 register. Or it could be used but r0 would have to loaded appropriately.
r0 register is 0x0F at that moment:
So, it will read address 0x13 which is 0xFFFFFFFF. Then it will jump to this wrong address.
Instead if se_lwz, e_lwz should be used. Here is the description of instructions:

CodeWarrior 2.10 is not being updated anymore, so it will not be fixed in this version. I'm not sure if this works in CodeWarrior 10.6, I will let you know later.
Workaround:
I found this one - write the function in this way:
#define VECTOR_ADDRESS 0x00000004
asm void SYS_Jump2App(void)
{
/* Load reset vector address */
e_lis r3,VECTOR_ADDRESS@h
e_add16i r3,r3,VECTOR_ADDRESS@l
/* Load vector */
e_lwz r3,0(r3)
/* Move vector to link register */
mtlr r3
/* Branch link register */
blr
}
And simply call it:
SYS_Jump2App();
I didn't find a way how to use a function with parameter because compiler always uses se_lwz.
Regards,
Lukas