3.18カーネルを使用して「プログラム受信信号SIGILL」なしでデバッグする方法(3.12動作)?


10

Raspbianでgdbを使用してプログラムをデバッグしようとしましたが、取得できるのは次のとおりです。

Program received signal SIGILL, Illegal instruction.
0xb6fe8acc in ?? () from /lib/ld-linux-armhf.so.3

SIGILLハンドルをnostophandle SIGILL nostop)に設定しても役に立ちません:

Program received signal SIGILL, Illegal instruction.

Program terminated with signal SIGILL, Illegal instruction.
The program no longer exists.

私が得るすべてのバックトレースは:

#0  0xb6fe8acc in ?? () from /lib/ld-linux-armhf.so.3
#1  0x00000000 in ?? ()

gdbの外部でプログラムを起動すると、通常のC ++例外(デバッグしたい)が発生します。

すべてのソフトウェアは、raspbianリポジトリから最新バージョンに更新されました。さらに、ラズベリーpiファウンデーションカーネル「3.18.9+」とラズベインカーネル「3.18.0-trunk-rpi」も試してみました(カスタムカーネルモジュールが必要です)。メインマシンで同じプログラムを問題なくデバッグできます。

更新:デバッグはカーネル「3.12-1-rpi」で期待どおりに機能します。

このエラーの原因は何ですか?


試しましたhandle SIGILL pass nostopか?
mpromonet

@mpromonet passはデフォルトで設定されているため、違いはありません。違いはありません。と同じ結果handle SIGILL nostop
someonr 2015年

そして、意味のあるバックトレース(bt)はありませんか?「このエラーの原因は何ですか?」リンカー/ローダー(ld-linux-armhf)の不正な命令のみに基づいています。
ゴルディロックス

意味のあるバックトレースを取得できませんでした(編集された質問を参照)。小さな例を作ってみます。また、gdbがないと不正なオペコードを取得できないので混乱しています。
someonr 2015年

1
スタックが破壊されたようです、valgrindが役立ちますか?
mpromonet 2015年

回答:


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.