【发布时间】:2019-04-03 16:24:36
【问题描述】:
我正在使用使用 Clang(版本 6.0.1)的源代码分析工具。我要分析的源代码是为 ARM 处理器编写的,将使用 arm-none-eabi-gcc 进行编译。我的工具在 Linux 或 Windows 上运行。如何告诉 libclang 为目标平台而不是主机平台分析此代码?
在调用 clang_indexSourceFile(...) 分析源代码时,我给它提供了与 arm-none-eabi-gcc 相同的 -D 和 -I 选项,包括由 arm-none 隐式添加的选项-eabi-gcc。这些可以通过运行以下命令获得:
arm-none-eabi-gcc -v -dM -E - </dev/null
我还将这些 ARM_specific 标志传递给 arm-none-eabi-gcc 和 clang_indexSourceFile(...):-mcpu=cortex-m4 -mthumb -mfpu=fpv4-sp-d16 -mfloat-abi=hard
不过,libclang 使用与主机平台(Linux 或 Windows)而不是目标平台 (Arm) 匹配的内置类型大小。一种测试它的方法如下,诚然有些人为的代码:
int c = 1;
switch (c) {
case sizeof(long double): return 1;
case 16: return 2;
default: return 0;
}
当我使用 libclang 分析此代码时,我得到一个诊断“重复大小写值 '16'”,证明它假定长双精度为 16 个字节。使用 arm-none-eabi-gcc,我没有收到此错误(但当我将 16 替换为 8 时,我收到了类似的错误)。
【问题讨论】: