您的位置:首页 > 大数据 > 人工智能

Error armlink L6238 Startup.o(Start) contains invalid call from '~PRES8' function to 'REQ8' functio

2013-01-25 09:01 453 查看
实验手册上的代码,2.2的集成开发环境,结果就出错了,解决方法是在每个.s文件中添加一个“PRESERVE8”。参见这里

关于PRESERVE8:




7.8.15. REQUIRE8 和 PRESERVE8

REQUIRE8
指令指定当前文件要求堆栈八字节对齐。 它设置 REQ8 生成属性以通知链接器。

PRESERVE8
指令指定当前文件保持堆栈八字节对齐。 它设置 PRES8 编译属性以通知链接器。

链接器检查要求堆栈八字节对齐的任何代码是否仅由保持堆栈八字节对齐的代码直接或间接地调用。


语法

REQUIRE8 {bool}

PRESERVE8 {bool}

其中:

bool


是一个可选布尔常数,取值为
{TRUE}
{FALSE}



用法

如果您的代码保持堆栈八字节对齐,在需要时,可使用
PRESERVE8
设置文件的 PRES8
编译属性。 如果您的代码不保持堆栈八字节对齐,则可使用
PRESERVE8 {FALSE}
确保不设置 PRES8 编译属性。


Note

如果您省略
PRESERVE8
PRESERVE8
 {FALSE}
,汇编器会检查修改 sp 的指令,以决定是否设置 PRES8 编译属性。 ARM 建议明确指定
PRESERVE8

您可以通过以下方式启用警告:
armasm --diag_warning 1546

有关详细信息,请参阅命令语法
您将会收到类似以下警告:
"test.s", line 37: Warning: A1546W: Stack pointer update potentially 
                                breaks 8 byte stack alignment
       37 00000044         STMFD    sp!,{r2,r3,lr}



示例

REQUIRE8
REQUIRE8     {TRUE}      ; equivalent to REQUIRE8
REQUIRE8     {FALSE}     ; equivalent to absence of REQUIRE8
PRESERVE8    {TRUE}      ; equivalent to PRESERVE8
PRESERVE8    {FALSE}     ; NOT exactly equivalent to absence of PRESERVE8
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐