準仮想化 - _paravirt_alt()
概要
準仮想環境下で実行される命令の置き換え、及び実行するためのアセンブラ命令を生成する
詳細
このマクロでは以下の引数を取得する
- 挿入する命令を示す文字列 : insn_string
- 挿入する命令の種類を示す : type
- 使用するレジスタの種類を示す : clobber
insn_string命令を配置するが、この時に命令の開始アドレスを771ラベルに、終了アドレスを772ラベルにそれぞれ紐付ける
その後、_ASM_ALIGNでアライメントの幅を決定し、arch/x86/kernel/vmlinux.lds.Sで定義されているparainstructionsセクションに以下のデータを配置する
- _ASM_PTRサイズのinsn_string命令の開始アドレスを示すポインタ
- byteサイズのtypeで示されるinsn_string命令の種類
- byteサイズのinsn_string命令のサイズ
- short(2byte)サイズのclobberで示される使用されるレジスタの種類
配置したデータはparavirt_patch_site構造体のデータとなり、挿入された命令はapply_paravirt()で適用される