2016-09-23 3 views
1

Ich habe mehrere gelesen Q & Wie hier in Bezug auf die Tatsache, dass OpenSSL verschiedene Anweisungen versucht zu testen, ob CPU sie unterstützt, was SIGILL verursacht. Aber diese Antworten geben normalerweise an, dass OP die App unter gdb ausgeführt hat, aber ich bin es nicht. Also stürzt meine App auf dem OpenWrt MIPS Router bei der Verwendung von OpenSSL ab, wenn ich die OpenSSL-Bibliothek anrufe. Der Absturz ist illegal instruction. Ich habe eigentlich kein Backtrace, obwohl meine App eine Debug-Build ist. Es funktioniert gut auf Ubuntu und MacOS. Ich stellte sicher, dass sowohl meine ausführbare als auch ssl libs die gleiche CPU-Architektur haben.Fix Absturz wegen SIGILL in OpenSSL

Ergebnis 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 

Was mir Sorgen macht, ist, dass Toolchain toolchain-mips_34kc_gcc-5.2.0_musl-1.1.11 34kc in seinem Namen erwähnt. Ich frage mich, ob es ok ist, mit dieser Toolchain für 24 Kc CPU zu bauen. Obwohl alles andere außer openssl funktioniert gut.

Also könnten Sie bitte beantworten, was sind meine Optionen, um es zu beheben?

+0

Ich weiß nicht viel über MIPS, aber ich würde vorschlagen, dass es sehr wahrscheinlich ist, dass verschiedene CPU-Modelle (24Kc und 34Kc) unterschiedliche Anweisungen unterstützen (besonders könnte der 34Kc Anweisungen unterstützen, die 24Kc nicht unterstützt). – davmac

+0

Aus Erfahrung zu sagen, Debian/Ubuntu Cross-Compiler sind manchmal so kaputt, dass ich sie um jeden Preis meide. Hat Cavium einen Cross-Compiler, den Sie verwenden können? Es sollte ein 'SIGILL' Handler installiert sein. Ich nehme an, entweder (1) der Cross-kompilierte Code ist schlecht und der 'SIGILL' ist nicht verwandt mit OpenSSL (es kommt zum Beispiel App-Startcode), (2) OpenWRT ist ein Problem und die Signale werden nicht richtig behandelt oder (3) die OpenSSL-Konfiguration und -Build ist schlecht. Es ist wirklich schwer zu sagen, an diesem Punkt. – jww

+0

@jww danke für die Meinung. Ich habe es auf SSL-Anrufe durch Protokolle verfolgt, also keine SSL-Anrufe - Dinge funktionieren gut. Mir wurde diese Werkzeugkette gegeben, um die App zu kompilieren, und da openssl lib in der Toolchain nicht reibungslos funktioniert, denke ich, dass die Toolchain nicht die offizielle ist. Als ich Openssl-Bibliotheken durch offizielle ersetzt habe (die vom Board-Hersteller), ist das Problem verschwunden. Aber ich werde im Hinterkopf behalten, was Sie gesagt haben – rightaway717

Antwort

0

Ich weiß nicht, was das Problem war, aber die App hat nicht mit der OpenSSL-Bibliothek in der Toolchain zur Verfügung gestellt und auf die Zieltafel kopiert. Wenn libopenssl über opkg von offiziellen Carambola2 Repos installiert wurde, ist das Problem verschwunden. Es muss also eine Inkompatibilität sein.

Verwandte Themen