gcc - 由 gcc 生成的 assemblercode 在由 ARM-assembler 汇编时导致致命错误
问题描述
我发现 ARM 编译器armcc V5.05
没有uint64_t
正确编译成汇编代码。它只使用一个寄存器而不是两个,因此结果被截断为 32 位(尽管编译器没有抱怨)。作为一种解决方法,我使用了 gcc 编译器,将生成的汇编代码放入单独的 asm 文件并运行 ARM 汇编。由于以下错误,无法创建目标:
此寄存器组合导致不可预测的行为
我想这真的很致命。在函数末尾的 C-“return”语句之后,gcc 在 ASM-return 命令之前插入了一个违规SUB SP,R11,#0
或ADD SP,R11,#0
命令BX LR
。无论有没有uint64_t
. 我可以依赖 gcc 还是 armcc/armasm 中的错误?
解决方案
推荐阅读
- python - Django - 如何将 DeleteView 限制为对象所有者
- django - 如何在不明确填写 PasswordResetForm 的情况下向用户发送电子邮件以重置密码?
- spring - 如何模拟 jdbctemplate.query() 方法?
- swift - 将 Xcode MVC 项目导出到 .framework 文件
- android - 阻止 Decimal EditText 获得对启动的关注
- sql - 触发器postgresql中的距离计算
- node.js - 将记录插入数据库,同时通知用户在 node.js 中插入或失败的记录数
- html - 下拉菜单出现问题,因为它没有出现在悬停时(只是一个 html-css 模板)
- php - PHP ssh2_exec() 不执行 iptables 命令
- python - Python 2.6.6 - 如何以表格形式打印具有对齐列的列表?