読者です 読者をやめる 読者になる 読者になる

linuxのメモ

Linux kernelの実装を解説していきます (対象ver 4.5)

準仮想化 - ____PVOP_VCALL()

概要

準仮想環境下で実行される命令の置き換え、及び実行するための命令を生成する

詳細

このマクロでは以下の引数を受け取る

PVOP_VCALL_ARGSで使用する可能性のあるレジスタに割り当てるための変数を初期化し、 PVOP_TEST_NULL()opを引数として実行し、opの値が無効な値でないことを確認する

その後、以下の内容で拡張インラインアセンブラ命令を生成する

  • 実行命令
  • 出力引数
    • call_clbr
  • 入力引数
    • paravirt_type()opを引数として実行して生成した値
    • paravirt_clobber()clbrを引数として実行して生成した値
    • 可変長引数が存在する場合は、それらも入力引数に追加する
  • 破壊レジスタ