我正在使用使用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 < / p>
仍然,libclang使用与主机平台(Linux或Windows)匹配的内置类型大小,而不是目标平台(Arm)。以下是对此进行测试的一种方法,公认的是人为设计的代码:
int c = 1;
switch (c) {
case sizeof(long double): return 1;
case 16: return 2;
default: return 0;
}
当我使用libclang分析此代码时,得到诊断“重复大小写值'16'”,证明它假定long double是16个字节。使用arm-none-eabi-gcc时,不会出现此错误(但是当我将16替换为8时会遇到类似的错误)。
答案 0 :(得分:0)
在clang_indexSourceFile(...)调用中使用-target arm-none-eabi作为选项。感谢Ivan Kosarev提出此解决方案的建议。