我正在使用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),但可能与某些嵌入式应用程序有关。
答案 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分支。那太老了。请考虑使用不稳定的分支(这可能听起来并不坏:)