ARM Compiler 6.00 update 1版本解析与使用指南
1. ARM Compiler 6.00 update 1 (build 21) 版本概述
ARM Compiler 6.00 update 1 (build 21) 是ARM公司于2014年5月29日发布的一个更新版本。这个版本主要针对ARMv8架构提供了编译支持,能够为AArch32和AArch64的裸机应用构建可执行二进制文件。需要注意的是,这已经是一个过时的版本(legacy release),不再建议用于新的开发项目。
重要提示:这个版本没有通过安全相关开发的认证。如果你的项目有长期维护或功能安全要求,建议使用Arm Compiler for Embedded FuSa而不是这个版本。
2. 支持架构与处理器
2.1 支持级别说明
ARM Compiler 6.00 update 1对不同的ARM架构和处理器提供了不同级别的支持:
| 架构/处理器 | 支持级别 | 建议 |
|---|---|---|
| ARMv8-A, Cortex-A53, Cortex-A57 | 完全支持(Production quality) | 可直接使用 |
| ARMv7-A及衍生处理器 | Alpha级别(不完整实现) | 暂时使用ARM Compiler 5 |
| ARMv7-R, ARMv7-M, ARMv6-M及衍生处理器 | 不支持 | 使用ARM Compiler 5 |
| ARMv6-M之前的架构 | 不支持 | 使用ARM Compiler 5 |
| 非ARM架构 | 不支持 | 不适用 |
2.2 支持级别定义
- 完全支持(Supported):生产质量,最高支持优先级
- Beta:实现完整但未充分测试,欢迎用户反馈
- Alpha:实现不完整且未充分测试,欢迎用户反馈
- 不支持(Unsupported):功能不存在或已弃用,完全未经测试
3. 新特性与变化
3.1 编译器更新
armclang作为armcc的继任者,基于LLVM技术构建。它最初支持ARMv8架构,并计划在未来版本中扩展支持其他ARM架构。从旧版本迁移时,请参考产品文档中的"Migration and Compatibility Guide (DUI0742A)"。
3.2 工具链组件
armlink、armasm、fromelf和armar等工具已扩展支持ARMv8,行为与之前版本的ARM Compiler类似,但可能不是完全功能完备。
关于汇编器的注意事项:ARM Compiler 6默认采用LLVM集成汇编器,因为它更接近GNU汇编器语法,提高了GNU和ARM Compiler工具链之间的可移植性。
3.3 嵌入式C/C++库
标准ARM Compiler嵌入式库已扩展支持ARMv8,行为与之前版本类似,但可能不是完全功能完备。
4. 安装指南
4.1 系统要求
ARM Compiler 6.00支持以下主机平台:
Linux:
- Red Hat Enterprise Linux 5 64-bit
- Red Hat Enterprise Linux 6 64-bit
- Ubuntu Desktop Edition 12.04 LTS 64-bit
Windows:
- Windows 7 64-bit
- Windows 8 64-bit
- Windows 2012 Server 64-bit
4.2 Linux安装步骤
- 运行install_x86_64.sh(不要使用source命令)
- 按照屏幕提示操作
- 建议删除之前版本的ARM Compiler 6
- 或者安装到不同目录
依赖项:
- armclang二进制文件动态链接到libstdc++
- 需要安装32位兼容库:
- Red Hat:
yum install glibc.i686 - Ubuntu:
apt‑get install ia32‑libs
- Red Hat:
4.3 Windows安装步骤
- 运行setup.exe
- 按照屏幕提示操作
- 如果已安装旧版本,会执行升级
4.4 安装后配置
ARM Compiler 6.00是许可证管理产品。需要设置ARMLMD_LICENSE_FILE环境变量指向许可证文件。
Windows注意:路径不能包含双引号,即使路径中有空格也不需要引号。
5. 使用示例
5.1 编译简单程序
为裸机AArch64系统编译一个简单程序:
echo "int main() {}" > simple.c armclang simple.c -o simplearmclang接受与Clang编译器相同的选项。更多信息请参考Clang用户手册。
6. 文档资源
ARM Compiler 6.00提供以下文档:
- Getting Started Guide (DUI0741A)
- Migration and Compatibility Guide (DUI0742A)
- Software Development Guide (DUI0773A)
- armclang Reference Guide (DUI0774A)
- armasm User Guide (DUI0801A)
- armlink User Guide (DUI0803A)
- ARM C and C++ Libraries and Floating-Point Support User Guide (DUI0808A)
- armar User Guide (DUI0806A)
- fromelf User Guide (DUI0805A)
- armasm Reference Guide (DUI0802A)
- armlink Reference Guide (DUI0804A)
- ARM C and C++ Libraries and Floating-Point Support Reference Guide (DUI0809A)
- Errors and Warnings Reference Guide (DUI0807A)
更多信息请访问ARM信息中心。
7. 已知问题与限制
7.1 通用问题
- 工具链尚未进行性能调优
- 不支持大端数据 [SDWYV-540]
7.2 C++相关问题
- 不支持C++异常,必须使用
-fno-exceptions选项编译 [SDWYV-848]
7.3 调试与DWARF支持
- fromelf不支持包含DWARF4调试数据的映像 [SDWYV-1151, SDWYV-902, SDWYV-903]
- 使用
-g选项汇编时,只为.text段生成调试信息 [LLVM-1244]
7.4 链接问题
- 链接器警告L6412W频繁出现 [SDWYV-930]
- 必须使用
--force_scanlib选项链接ARM库 [SDWYV-597] - 不支持AArch64的ELF R_MOVW_PREL组重定位287-293 [SDCOMP-23520]
- Cortex-A53/A57对象文件链接问题 [SDWYV-1479]
7.5 过程调用标准ABI问题
- 某些浮点聚合参数处理不符合标准 [SDWYV-1962]
- 8字节对齐参数问题 [SDWYV-1964]
- AArch64不支持long double [SDWYV-678]
- 内联函数调用问题 [SDWYV-729]
7.6 ARMv7-A Alpha支持问题
- Cortex-A5对象文件链接问题 [SDWYV-1468]
- Cortex-A7对象文件链接问题 [SDWYV-1487]
- 不支持
--cpu=cortex-a12目标选择 [SDWYV-1467]
8. 反馈与支持
欢迎通过ARM开发者网站提交bug报告和改进建议。报告问题时请提供:
- 工具版本和构建号
- 重现问题所需的源代码、文件和相关命令行
- 详细的错误描述
9. 版本更新内容
自6.00版本以来修复的问题:
- 修复了C++程序构建失败问题(SDWYV-2279)
10. 实际使用建议
基于这个版本的特点和限制,我有以下使用建议:
新项目选择:除非有特殊原因,否则不建议使用这个过时版本。考虑使用更新的ARM Compiler版本。
ARMv8开发:如果必须使用这个版本进行ARMv8开发,建议:
- 仔细测试所有关键功能
- 记录所有遇到的限制和问题
- 制定升级到新版本的计划
调试技巧:
- 对于调试问题,可以尝试减少优化级别
- 复杂的调试场景可能需要结合DS-5工具链
性能考量:
- 这个版本未进行性能调优,关键性能路径需要特别测试
- 考虑手动优化关键代码段
迁移准备:
- 如果从旧版本迁移,预留充足时间进行兼容性测试
- 建立完整的回归测试套件
这个版本虽然提供了ARMv8支持,但由于其过时状态和诸多限制,建议仅用于特定场景或短期项目。长期项目应考虑使用ARM官方推荐的最新稳定版本。
