非 x86 架构上的 Z3

  • 本文关键字:Z3 x86 z3 bus-error
  • 更新时间 :
  • 英文 :


我正在使用Z3(2012-12-21 git版本,最新的"master"版本)检查工具的可移植性,因此尝试在Sparc64上编译Z3。我不得不摆弄src/util/hwf.cpp,以便它将 Sparc64 而不仅仅是 IA64 视为缺少 SIMD 内在和emmintrin.h。编译成功。

不幸的是,生成的可执行文件在启动时崩溃,并在prime_generator::prime_generator()中出现总线错误。我不知道为什么。

Program received signal SIGBUS, Bus error.
0x009b1dac in global constructors keyed to _ZN15prime_generatorC2Ev ()
(gdb) bt
#0  0x009b1dac in global constructors keyed to _ZN15prime_generatorC2Ev ()

这对我来说不是很重要(我们的机器是x86或x86-64),但可能与某些嵌入式应用程序相关。

我认为在非x86机器上运行Z3没有任何兴趣,因此您很可能会发现一些问题。

特别是SPARC,它不像x86那样允许未分配的内存访问。 快速浏览一下,我可以看到未对齐的几个点可能来自哪里。 例如,memory::allocate() 将 malloc 返回的指针按 sizeof(size_t) 取消对齐。如果不是 64 位,那么它将崩溃(因为 svector 数据)。 然后,向量分配,也会在数据之前保留 2*sizeof(无符号)。如果 2*sizeof(unsigned) 不是 sizeof(uint64) 的倍数,那么你会崩溃。

等等。 关键是,没有更多信息,就不可能帮助您。您需要使用 -g 进行编译,如果需要,请在崩溃的位置打印汇编代码,以帮助确定确切的位置。

另外,请不要使用主分支。 那是很古老的了。请考虑使用不稳定的分支(它并没有那么糟糕,因为名称听起来可能很:)

最新更新