分类: 嵌入式
2010-05-20 23:14:22
同样是包含#include "arch\ppc\esfppc.h",在汇编代码中和C代码中对_STACK_ALIGN_SIZE的定义是不一样的.
_PPC_ESF_STK_SIZE 依赖于_STACK_ALIGN_SIZE.
#define _PPC_ESF_STK_SIZE ((_PPC_ESF_SIZE + _STACK_ALIGN_SIZE - 1) & \
~(_STACK_ALIGN_SIZE - 1))
在C语言代码中,_STACK_ALIGN_SIZE 的定义来源如下(从下到上的调用关系):
from D:/Windriver/Workbench2.6/vxworks-6.4/target/h/arch/ppc/toolppc.h:511,
from D:/Windriver/Workbench2.6/vxworks-6.4/target/h/arch/ppc/archPpc.h:329,
from D:/Windriver/Workbench2.6/vxworks-6.4/target/h/types/vxArch.h:163,
from D:/Windriver/Workbench2.6/vxworks-6.4/target/h/vxWorksCommon.h:196,
from D:/Windriver/Workbench2.6/vxworks-6.4/target/h/vxWorks.h:84,
而对于汇编而言,_STACK_ALIGN_SIZE 的定义来源如下:
from D:/Windriver/Workbench2.6/vxworks-6.4/target/h/types/vxArch.h:224,
from D:/Windriver/Workbench2.6/vxworks-6.4/target/h/vxWorksCommon.h:196,
from D:/Windriver/Workbench2.6/vxworks-6.4/target/h/vxWorks.h:84,
在头文件vxArch中都包含了头文件archPpc.h,但在archPpc.h中有一个宏 #ifdef _ASMLANGUAGE 把汇编和C给分开了,导致C语言使用的是toolppc.h中定义的16.汇编语言的代码跳过了这个定义,使用了vxArch.h中定义的8.