修复因OpenSSL中的SIGILL而导致崩溃的问题

时间:2016-09-23 08:07:25

标签: c++ openssl mips openwrt

我已经阅读了几个Q&在这里,关于OpenSSL尝试不同的指令来测试cpu是否支持它们,这会导致SIGILL。但是这些答案通常表明OP在gdb下运行应用程序,但我不是。因此,每当我调用OpenSSL库时,OpenWrt MIPS路由器上的应用程序在使用OpenSSL时实际上都会崩溃。崩溃是illegal instruction。我实际上没有回溯,虽然我的应用程序是一个调试版本。它在Ubuntu和MacOS上运行良好。 我确保我的可执行文件和ssl库都具有相同的cpu架构。

cat /proc/cpuinfo的结果:

system type             : Atheros AR9330 rev 1
machine                 : 8devices Carambola2 board
processor               : 0
cpu model               : MIPS 24Kc V7.4
BogoMIPS                : 265.42
wait instruction        : yes
microsecond timers      : yes
tlb_entries             : 16
extra interrupt vector  : yes
hardware watchpoint     : yes, count: 4, address/irw mask: [0x0ffc, 0x0ffc, 0x0ffb, 0x0ffb]
isa                     : mips1 mips2 mips32r1 mips32r2
ASEs implemented        : mips16
shadow register sets    : 1
kscratch registers      : 0
package                 : 0
core                    : 0
VCED exceptions         : not available
VCEI exceptions         : not available

令我担心的是,工具链toolchain-mips_34kc_gcc-5.2.0_musl-1.1.11提到了34kc的名字。我想知道是否可以使用这个工具链构建24 Kc cpu。虽然除了openssl之外的其他一切都可以正常工作。

那么请你回答我有哪些方法来解决它?

1 个答案:

答案 0 :(得分:0)

我不知道问题是什么,但应用程序没有使用工具链中提供的openssl库并复制到目标板。当libopenssl从官方carambola2 repos通过opkg安装时,问题就消失了。所以它一定是不相容的。