2016-09-26 5 views
0

信頼ゾーンエミュレーションでqemuを実行します。 64ビットLinuxは、ノーマルワールド(NWD)EL1で実行され、一部のプロプライエタリコードはEL3およびセキュアワールド(SWD)EL1で実行されます。また、私は割り込みのためのそのような構成を持っています: 1)FIQはSWDに割り当てられます。 2)IRQはNWDに割り当てられます。FI3が発生したときにel3からnwdに32ビットプロセスが戻されたときのセグメンテーションフォルト

NWDがFIQによって中断することができる場合も3例がある: 1)NWDがカーネルモード(64ビットLinuxで実行された) 2)NWDは、64ビットのユーザ・モード 3で実行された)NWDが実行されました32ビットユーザモードで

FIQが発生すると、EL3によってトラップされます。その後、NWDコンテキストはEL3のコードによって保存され、FIQのハンドラが実行を開始します。 1)、2)の場合、el3からNWDに戻ると、すべて正常に動作し、中断されたプロセスは引き続き機能します。 ケース3の場合、el3からNWDに戻った後、割込み処理のためにセグメンテーション・フォルトが発生しました。これはel3からNWDに戻る前のspsr_el3レジスタの値ですEL0 - 0x600f0010 - OKです。 また、私はすでにケース3のEL3で保存されたコンテキストと復元されたコンテキストを比較しています。 これは、qemuのバグです。一部の人は何が問題なのか知っていますか?

+0

ここから問題を診断しようとするには十分な情報がありません。障害のあるコードは何ですか?レジスタの破損、スタックの破損などのように見えますか?割り込み前後のレジスタ/スタックの状態はどうなっていますか?あなたがQEMUのバグだと確信していれば、QEMUのメーリングリストはおそらくそれを上げるのにはるかに適切な場所でしょう。 – Notlikethat

+0

@Notlikethat Linux 32ビットアプリケーションが 'busybox'や 'gdb server'のようにフォールトを起こしました。それはレジスタ破損のようです。私が言及したように、FIQが発生し、NWD EL0に入る前に復元されたコンテキストと同等のコンテキストを保存しているように見える場合、EL3で保存されたコンテキストとケース3を復元したケースを比較しました。 – scopichmu

答えて

0

実際、私はすでにそれを修正しました。この問題は 'eret'命令の実装でファイル 'op_helper.c'にあります: 'env-> regs [15] = env-> elr_el [1] &〜0x1;' '1'は 'cur_el'に変更する必要があります。また、このバグは最新のqemuで修正されていますので、私は私のものを更新する必要があります。

関連する問題