いくつかのQを読んでいました& OpenSSLは、cpuがそれらをサポートしているかどうかをテストするために、SIGILLの原因となるテストを試みます。しかし、これらの回答は通常、OPはgdbの下でアプリケーションを実行していたと述べていますが、私はそうではありません。 OpenSSLライブラリを呼び出すたびにOpenSSLを使用するとOpenWrt MIPSルータのアプリケーションが実際にクラッシュします。クラッシュはillegal instruction
です。私は実際にバックトレースを持っていませんが、私のアプリはデバッグビルドです。 UbuntuとMacOS上でうまく動作します。 私の実行可能ファイルとsslの両方のライブラリが同じCPUアーキテクチャであることを確認しました。 cat /proc/cpuinfo
のOpenSSLのSIGILLによるクラッシュを修正しました
結果:
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
何私を心配することは、その名前で34kcに言及toolchain-mips_34kc_gcc-5.2.0_musl-1.1.11
そのツールチェーンです。私はそれが24 KcのCPUのためのこのツールチェーンで構築することは大丈夫かどうか疑問に思います。 openssl以外のすべてがうまく動作します。
私はそれを修正するためのオプションは何ですか?
私はMIPSについてよく分かりませんが、異なるCPUモデル(24Kcと34Kc)が異なる命令をサポートする可能性が高いことを示唆しています(特に、34Kcは24Kcではサポートしない命令をサポートする可能性があります)。 – davmac
経験から言えば、Debian/Ubuntuのクロスコンパイラは時々壊れていて、私はそれらをまったく犠牲にすることなく避けます。 Caviumにはクロスコンパイラがありますか? 'SIGILL'ハンドラがインストールされていなければなりません。 (1)クロスコンパイルされたコードが悪く、 'SIGILL'がOpenSSLとは無関係です(アプリケーションのスタートアップコード)。(2)OpenWRTが問題でシグナルが正しく処理されていない、(3)OpenSSLの設定とビルドが悪い。この時点では本当に難しいです。意見をいただき、ありがとうございます。 – jww
@jww私はログでssl呼び出しを追跡したので、ssl呼び出しはありません。状況は正常です。私はこのツールチェーンを使ってアプリケーションをコンパイルしました。ツールチェーンのopenssl libはスムーズに動かないので、ツールチェーンは公式のものではないと思います。ですから、私がopensslライブラリを公式のもの(ボードベンダからのもの)に置き換えたとき、問題はなくなりました。しかし、あなたが言ったことを覚えておいてください。 – rightaway717