equation314 / equation314/RVM-Tutorial

cr_is_valid是否存在问题?

オープン
#6 コメント 1 件 リアクション 0 件 担当者 0 名 GitHub で見る
bug
主要言語
Rust
スター
161
フォーク
36
PR マージ指標
30日以内にマージされた PR はありません

説明

```Rust
// Check control registers are in a VMX-friendly state. (SDM Vol. 3C, Appendix A.7, A.8) /
macro_rules! cr_is_valid {
($value: expr, $crx: ident) => {{
use Msr::*;
let value = $value;
let fixed0 = concat_idents!(IA32_VMX_, $crx, _FIXED0).read();
let fixed1 = concat_idents!(IA32_VMX_, $crx, _FIXED1).read();
(!fixed0 | value != 0) && (fixed1 | !value != 0)
}};
}
```

函数最终返回` (!fixed0 | value != 0) && (fixed1 | !value != 0)`,
但是根据手册,FIXED0应该是所在位为1的,寄存器所在位也为1;
FIXED1应该是所在位为0的,寄存器所在位也为0,
判断结果应该写为(value & fixed0 == fixed0) && (value & !fixed1 == 0)才对吧。
不过这样就无法通过检查了。
我看其他开源项目是,先有一个调整寄存器值的操作。

コントリビューションガイド

このリポジトリのコントリビューションガイドは索引されていません

調査の方向性

issue に示されている cr_is_valid! マクロから始め、その述語を SDM Vol. 3C, Appendices A.7 および A.8 と比較します。FIXED0 と FIXED1 に指定される値を追跡し、次にそのチェックを issue で言及されているレジスタ調整アプローチと比較します。述語が正しいかどうかを説明し、正しくない場合は必要な変更を特定できれば完了です。

索引モデルが issue の本文から書いたものです。

評価

技術スタック
rust
領域
operating-systems
issue の種類
バグ
難易度
4/5
見積もり時間
3〜5日
活発さ
停滞
明瞭さ
おおむね明確
初心者へのやさしさ
35/100

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。