无法将CBMC集成到构建系统中

时间:2018-04-21 11:44:28

标签: c gcc cbmc

我正在尝试使用CBMC(C Bounded Model Checking:https://www.cprover.org/cbmc/)来自GitHub的开源C项目。出于这个问题的目的,让我们考虑以下项目:https://github.com/reubenhwk/radvd

当我使用gcc编译项目时出现问题。我能够获得调用cbmc之类的

的可执行文件
cbmc radvd

但我收到以下错误消息:

CBMC version 5.8 64-bit x86_64 linux
failed to open input file radvd`

原因应该是我使用gcc而不是goto-cc(如此处所解释的:http://www.cprover.org/cprover-manual/goto-cc.html),因此它可能无法识别该文件。 我也尝试使用goto-cc,如上一个链接和某些例子{@ 3}}中所述。但是,由于它们是引导示例,因此使cbmc工作变得容易。当我对其他项目执行相同的过程时,例如链接的(radvd)并使用goto-cc而不是gcc,我在运行make CC=goto-cc命令时获得以下消息:

make  all-am
make[1]: Entering directory '/home/stefano/Documents/github/radvd'
  YACC     gram.c
updating gram.h
  CC       libradvd_parser_a-gram.o
/usr/include/stdlib.h:133:1: error: syntax error before 'strtof128'
PARSING ERROR
Makefile:941: recipe for target 'libradvd_parser_a-gram.o' failed
make[1]: *** [libradvd_parser_a-gram.o] Error 1
make[1]: Leaving directory '/home/stefano/Documents/github/radvd'
Makefile:755: recipe for target 'all' failed
make: *** [all] Error 2`

我目前正在虚拟Linux机器上使用vbmc的5.8版本(Ubuntu 17.10)。

您对如何使其有效有任何想法吗?

谢谢

1 个答案:

答案 0 :(得分:0)

  

当我用gcc编译项目时会出现问题。

CBMC不能像gcc生成的二进制文件那样运行。

CBMC分析由.goto产生的特殊文件格式goto-cc。该文件实质上只是一个普通程序,但会稍作重新排列,并添加了一些额外的信息以帮助分析。

CBMC拒绝在gcc生成的二进制文件上运行,因为它识别出该文件不是CBMC期望的.goto格式。

  

当我使用goto-cc而不是gcc时,我收到以下消息...

正如评论中指出的那样,这是因为goto-cc不知道如何使用__float128类型,因为它专用于GCC。

正如Nominal Animal所建议的那样,使用make CC="goto-cc '-D__float128=long double'"可以将类型更改为goto-cc可以识别的类型,但是最好与CBMC开发人员联系并询问如何最好地处理这种情况。

此外,如果您还没有遇到过,CBMC User Manual可能会有用。