非x86架构上的Z3

时间:2014-02-12 10:26:01

标签: 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),但可能与某些嵌入式应用程序有关。

1 个答案:

答案 0 :(得分:1)

我认为没有兴趣在非x86机器上运行Z3,所以你很可能会发现一些问题。

特别是SPARC不允许像x86那样进行无量化的内存访问。 从快速的角度来看,我可以看到未对齐可能来自的几个点。 例如,memory :: allocate()通过sizeof(size_t)处理malloc返回的指针。如果那不是64位,那么它将崩溃(因为svector数据)。 然后,svector分配,在数据之前也保留2 * sizeof(unsigned)。如果2 * sizeof(unsigned)不是sizeof(uint64)的倍数,那么你将会崩溃。

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

另外,请不要使用master分支。那太老了。请考虑使用不稳定的分支(这可能听起来并不坏:)